grpc 1.0.1 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -1,122 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2015-2016, Google Inc.
|
4
|
-
* All rights reserved.
|
5
|
-
*
|
6
|
-
* Redistribution and use in source and binary forms, with or without
|
7
|
-
* modification, are permitted provided that the following conditions are
|
8
|
-
* met:
|
9
|
-
*
|
10
|
-
* * Redistributions of source code must retain the above copyright
|
11
|
-
* notice, this list of conditions and the following disclaimer.
|
12
|
-
* * Redistributions in binary form must reproduce the above
|
13
|
-
* copyright notice, this list of conditions and the following disclaimer
|
14
|
-
* in the documentation and/or other materials provided with the
|
15
|
-
* distribution.
|
16
|
-
* * Neither the name of Google Inc. nor the names of its
|
17
|
-
* contributors may be used to endorse or promote products derived from
|
18
|
-
* this software without specific prior written permission.
|
19
|
-
*
|
20
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
*
|
32
|
-
*/
|
33
|
-
|
34
|
-
#ifndef GRPC_IMPL_CODEGEN_BYTE_BUFFER_H
|
35
|
-
#define GRPC_IMPL_CODEGEN_BYTE_BUFFER_H
|
36
|
-
|
37
|
-
#include <grpc/impl/codegen/compression_types.h>
|
38
|
-
#include <grpc/impl/codegen/slice_buffer.h>
|
39
|
-
|
40
|
-
#ifdef __cplusplus
|
41
|
-
extern "C" {
|
42
|
-
#endif
|
43
|
-
|
44
|
-
typedef enum {
|
45
|
-
GRPC_BB_RAW
|
46
|
-
/* Future types may include GRPC_BB_PROTOBUF, etc. */
|
47
|
-
} grpc_byte_buffer_type;
|
48
|
-
|
49
|
-
struct grpc_byte_buffer {
|
50
|
-
void *reserved;
|
51
|
-
grpc_byte_buffer_type type;
|
52
|
-
union {
|
53
|
-
struct {
|
54
|
-
void *reserved[8];
|
55
|
-
} reserved;
|
56
|
-
struct {
|
57
|
-
grpc_compression_algorithm compression;
|
58
|
-
gpr_slice_buffer slice_buffer;
|
59
|
-
} raw;
|
60
|
-
} data;
|
61
|
-
};
|
62
|
-
typedef struct grpc_byte_buffer grpc_byte_buffer;
|
63
|
-
|
64
|
-
/** Returns a RAW byte buffer instance over the given slices (up to \a nslices).
|
65
|
-
*
|
66
|
-
* Increases the reference count for all \a slices processed. The user is
|
67
|
-
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
|
68
|
-
GRPCAPI grpc_byte_buffer *grpc_raw_byte_buffer_create(gpr_slice *slices,
|
69
|
-
size_t nslices);
|
70
|
-
|
71
|
-
/** Returns a *compressed* RAW byte buffer instance over the given slices (up to
|
72
|
-
* \a nslices). The \a compression argument defines the compression algorithm
|
73
|
-
* used to generate the data in \a slices.
|
74
|
-
*
|
75
|
-
* Increases the reference count for all \a slices processed. The user is
|
76
|
-
* responsible for invoking grpc_byte_buffer_destroy on the returned instance.*/
|
77
|
-
GRPCAPI grpc_byte_buffer *grpc_raw_compressed_byte_buffer_create(
|
78
|
-
gpr_slice *slices, size_t nslices, grpc_compression_algorithm compression);
|
79
|
-
|
80
|
-
/** Copies input byte buffer \a bb.
|
81
|
-
*
|
82
|
-
* Increases the reference count of all the source slices. The user is
|
83
|
-
* responsible for calling grpc_byte_buffer_destroy over the returned copy. */
|
84
|
-
GRPCAPI grpc_byte_buffer *grpc_byte_buffer_copy(grpc_byte_buffer *bb);
|
85
|
-
|
86
|
-
/** Returns the size of the given byte buffer, in bytes. */
|
87
|
-
GRPCAPI size_t grpc_byte_buffer_length(grpc_byte_buffer *bb);
|
88
|
-
|
89
|
-
/** Destroys \a byte_buffer deallocating all its memory. */
|
90
|
-
GRPCAPI void grpc_byte_buffer_destroy(grpc_byte_buffer *byte_buffer);
|
91
|
-
|
92
|
-
/** Reader for byte buffers. Iterates over slices in the byte buffer */
|
93
|
-
struct grpc_byte_buffer_reader;
|
94
|
-
typedef struct grpc_byte_buffer_reader grpc_byte_buffer_reader;
|
95
|
-
|
96
|
-
/** Initialize \a reader to read over \a buffer.
|
97
|
-
* Returns 1 upon success, 0 otherwise. */
|
98
|
-
GRPCAPI int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader *reader,
|
99
|
-
grpc_byte_buffer *buffer);
|
100
|
-
|
101
|
-
/** Cleanup and destroy \a reader */
|
102
|
-
GRPCAPI void grpc_byte_buffer_reader_destroy(grpc_byte_buffer_reader *reader);
|
103
|
-
|
104
|
-
/** Updates \a slice with the next piece of data from from \a reader and returns
|
105
|
-
* 1. Returns 0 at the end of the stream. Caller is responsible for calling
|
106
|
-
* gpr_slice_unref on the result. */
|
107
|
-
GRPCAPI int grpc_byte_buffer_reader_next(grpc_byte_buffer_reader *reader,
|
108
|
-
gpr_slice *slice);
|
109
|
-
|
110
|
-
/** Merge all data from \a reader into single slice */
|
111
|
-
GRPCAPI gpr_slice
|
112
|
-
grpc_byte_buffer_reader_readall(grpc_byte_buffer_reader *reader);
|
113
|
-
|
114
|
-
/** Returns a RAW byte buffer instance from the output of \a reader. */
|
115
|
-
GRPCAPI grpc_byte_buffer *grpc_raw_byte_buffer_from_reader(
|
116
|
-
grpc_byte_buffer_reader *reader);
|
117
|
-
|
118
|
-
#ifdef __cplusplus
|
119
|
-
}
|
120
|
-
#endif
|
121
|
-
|
122
|
-
#endif /* GRPC_IMPL_CODEGEN_BYTE_BUFFER_H */
|
@@ -1,118 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2015, Google Inc.
|
4
|
-
* All rights reserved.
|
5
|
-
*
|
6
|
-
* Redistribution and use in source and binary forms, with or without
|
7
|
-
* modification, are permitted provided that the following conditions are
|
8
|
-
* met:
|
9
|
-
*
|
10
|
-
* * Redistributions of source code must retain the above copyright
|
11
|
-
* notice, this list of conditions and the following disclaimer.
|
12
|
-
* * Redistributions in binary form must reproduce the above
|
13
|
-
* copyright notice, this list of conditions and the following disclaimer
|
14
|
-
* in the documentation and/or other materials provided with the
|
15
|
-
* distribution.
|
16
|
-
* * Neither the name of Google Inc. nor the names of its
|
17
|
-
* contributors may be used to endorse or promote products derived from
|
18
|
-
* this software without specific prior written permission.
|
19
|
-
*
|
20
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
*
|
32
|
-
*/
|
33
|
-
|
34
|
-
#ifndef GRPC_IMPL_CODEGEN_LOG_H
|
35
|
-
#define GRPC_IMPL_CODEGEN_LOG_H
|
36
|
-
|
37
|
-
#include <inttypes.h>
|
38
|
-
#include <stdarg.h>
|
39
|
-
#include <stdlib.h> /* for abort() */
|
40
|
-
|
41
|
-
#include <grpc/impl/codegen/port_platform.h>
|
42
|
-
|
43
|
-
#ifdef __cplusplus
|
44
|
-
extern "C" {
|
45
|
-
#endif
|
46
|
-
|
47
|
-
/* GPR log API.
|
48
|
-
|
49
|
-
Usage (within grpc):
|
50
|
-
|
51
|
-
int argument1 = 3;
|
52
|
-
char* argument2 = "hello";
|
53
|
-
gpr_log(GPR_DEBUG, "format string %d", argument1);
|
54
|
-
gpr_log(GPR_INFO, "hello world");
|
55
|
-
gpr_log(GPR_ERROR, "%d %s!!", argument1, argument2); */
|
56
|
-
|
57
|
-
/* The severity of a log message - use the #defines below when calling into
|
58
|
-
gpr_log to additionally supply file and line data */
|
59
|
-
typedef enum gpr_log_severity {
|
60
|
-
GPR_LOG_SEVERITY_DEBUG,
|
61
|
-
GPR_LOG_SEVERITY_INFO,
|
62
|
-
GPR_LOG_SEVERITY_ERROR
|
63
|
-
} gpr_log_severity;
|
64
|
-
|
65
|
-
#define GPR_LOG_VERBOSITY_UNSET -1
|
66
|
-
|
67
|
-
/* Returns a string representation of the log severity */
|
68
|
-
const char *gpr_log_severity_string(gpr_log_severity severity);
|
69
|
-
|
70
|
-
/* Macros to build log contexts at various severity levels */
|
71
|
-
#define GPR_DEBUG __FILE__, __LINE__, GPR_LOG_SEVERITY_DEBUG
|
72
|
-
#define GPR_INFO __FILE__, __LINE__, GPR_LOG_SEVERITY_INFO
|
73
|
-
#define GPR_ERROR __FILE__, __LINE__, GPR_LOG_SEVERITY_ERROR
|
74
|
-
|
75
|
-
/* Log a message. It's advised to use GPR_xxx above to generate the context
|
76
|
-
* for each message */
|
77
|
-
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity,
|
78
|
-
const char *format, ...) GPRC_PRINT_FORMAT_CHECK(4, 5);
|
79
|
-
|
80
|
-
GPRAPI void gpr_log_message(const char *file, int line,
|
81
|
-
gpr_log_severity severity, const char *message);
|
82
|
-
|
83
|
-
/* Set global log verbosity */
|
84
|
-
GPRAPI void gpr_set_log_verbosity(gpr_log_severity min_severity_to_print);
|
85
|
-
|
86
|
-
GPRAPI void gpr_log_verbosity_init();
|
87
|
-
|
88
|
-
/* Log overrides: applications can use this API to intercept logging calls
|
89
|
-
and use their own implementations */
|
90
|
-
|
91
|
-
typedef struct {
|
92
|
-
const char *file;
|
93
|
-
int line;
|
94
|
-
gpr_log_severity severity;
|
95
|
-
const char *message;
|
96
|
-
} gpr_log_func_args;
|
97
|
-
|
98
|
-
typedef void (*gpr_log_func)(gpr_log_func_args *args);
|
99
|
-
GPRAPI void gpr_set_log_function(gpr_log_func func);
|
100
|
-
|
101
|
-
/* abort() the process if x is zero, having written a line to the log.
|
102
|
-
|
103
|
-
Intended for internal invariants. If the error can be recovered from,
|
104
|
-
without the possibility of corruption, or might best be reflected via
|
105
|
-
an exception in a higher-level language, consider returning error code. */
|
106
|
-
#define GPR_ASSERT(x) \
|
107
|
-
do { \
|
108
|
-
if (!(x)) { \
|
109
|
-
gpr_log(GPR_ERROR, "assertion failed: %s", #x); \
|
110
|
-
abort(); \
|
111
|
-
} \
|
112
|
-
} while (0)
|
113
|
-
|
114
|
-
#ifdef __cplusplus
|
115
|
-
}
|
116
|
-
#endif
|
117
|
-
|
118
|
-
#endif /* GRPC_IMPL_CODEGEN_LOG_H */
|
@@ -1,130 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2015, Google Inc.
|
4
|
-
* All rights reserved.
|
5
|
-
*
|
6
|
-
* Redistribution and use in source and binary forms, with or without
|
7
|
-
* modification, are permitted provided that the following conditions are
|
8
|
-
* met:
|
9
|
-
*
|
10
|
-
* * Redistributions of source code must retain the above copyright
|
11
|
-
* notice, this list of conditions and the following disclaimer.
|
12
|
-
* * Redistributions in binary form must reproduce the above
|
13
|
-
* copyright notice, this list of conditions and the following disclaimer
|
14
|
-
* in the documentation and/or other materials provided with the
|
15
|
-
* distribution.
|
16
|
-
* * Neither the name of Google Inc. nor the names of its
|
17
|
-
* contributors may be used to endorse or promote products derived from
|
18
|
-
* this software without specific prior written permission.
|
19
|
-
*
|
20
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
*
|
32
|
-
*/
|
33
|
-
|
34
|
-
#ifndef GRPC_IMPL_CODEGEN_TIME_H
|
35
|
-
#define GRPC_IMPL_CODEGEN_TIME_H
|
36
|
-
/* Time support.
|
37
|
-
We use gpr_timespec, which is analogous to struct timespec. On some
|
38
|
-
machines, absolute times may be in local time. */
|
39
|
-
|
40
|
-
#include <grpc/impl/codegen/port_platform.h>
|
41
|
-
#include <stddef.h>
|
42
|
-
#include <time.h>
|
43
|
-
|
44
|
-
#ifdef __cplusplus
|
45
|
-
extern "C" {
|
46
|
-
#endif
|
47
|
-
|
48
|
-
/* The clocks we support. */
|
49
|
-
typedef enum {
|
50
|
-
/* Monotonic clock. Epoch undefined. Always moves forwards. */
|
51
|
-
GPR_CLOCK_MONOTONIC = 0,
|
52
|
-
/* Realtime clock. May jump forwards or backwards. Settable by
|
53
|
-
the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */
|
54
|
-
GPR_CLOCK_REALTIME,
|
55
|
-
/* CPU cycle time obtained by rdtsc instruction on x86 platforms. Epoch
|
56
|
-
undefined. Degrades to GPR_CLOCK_REALTIME on other platforms. */
|
57
|
-
GPR_CLOCK_PRECISE,
|
58
|
-
/* Unmeasurable clock type: no base, created by taking the difference
|
59
|
-
between two times */
|
60
|
-
GPR_TIMESPAN
|
61
|
-
} gpr_clock_type;
|
62
|
-
|
63
|
-
typedef struct gpr_timespec {
|
64
|
-
int64_t tv_sec;
|
65
|
-
int32_t tv_nsec;
|
66
|
-
/** Against which clock was this time measured? (or GPR_TIMESPAN if
|
67
|
-
this is a relative time meaure) */
|
68
|
-
gpr_clock_type clock_type;
|
69
|
-
} gpr_timespec;
|
70
|
-
|
71
|
-
/* Time constants. */
|
72
|
-
GPRAPI gpr_timespec
|
73
|
-
gpr_time_0(gpr_clock_type type); /* The zero time interval. */
|
74
|
-
GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type); /* The far future */
|
75
|
-
GPRAPI gpr_timespec gpr_inf_past(gpr_clock_type type); /* The far past. */
|
76
|
-
|
77
|
-
#define GPR_MS_PER_SEC 1000
|
78
|
-
#define GPR_US_PER_SEC 1000000
|
79
|
-
#define GPR_NS_PER_SEC 1000000000
|
80
|
-
#define GPR_NS_PER_MS 1000000
|
81
|
-
#define GPR_NS_PER_US 1000
|
82
|
-
#define GPR_US_PER_MS 1000
|
83
|
-
|
84
|
-
/* initialize time subsystem */
|
85
|
-
GPRAPI void gpr_time_init(void);
|
86
|
-
|
87
|
-
/* Return the current time measured from the given clocks epoch. */
|
88
|
-
GPRAPI gpr_timespec gpr_now(gpr_clock_type clock);
|
89
|
-
|
90
|
-
/* Convert a timespec from one clock to another */
|
91
|
-
GPRAPI gpr_timespec gpr_convert_clock_type(gpr_timespec t,
|
92
|
-
gpr_clock_type target_clock);
|
93
|
-
|
94
|
-
/* Return -ve, 0, or +ve according to whether a < b, a == b, or a > b
|
95
|
-
respectively. */
|
96
|
-
GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b);
|
97
|
-
|
98
|
-
GPRAPI gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b);
|
99
|
-
GPRAPI gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b);
|
100
|
-
|
101
|
-
/* Add and subtract times. Calculations saturate at infinities. */
|
102
|
-
GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b);
|
103
|
-
GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b);
|
104
|
-
|
105
|
-
/* Return a timespec representing a given number of time units. INT64_MIN is
|
106
|
-
interpreted as gpr_inf_past, and INT64_MAX as gpr_inf_future. */
|
107
|
-
GPRAPI gpr_timespec gpr_time_from_micros(int64_t x, gpr_clock_type clock_type);
|
108
|
-
GPRAPI gpr_timespec gpr_time_from_nanos(int64_t x, gpr_clock_type clock_type);
|
109
|
-
GPRAPI gpr_timespec gpr_time_from_millis(int64_t x, gpr_clock_type clock_type);
|
110
|
-
GPRAPI gpr_timespec gpr_time_from_seconds(int64_t x, gpr_clock_type clock_type);
|
111
|
-
GPRAPI gpr_timespec gpr_time_from_minutes(int64_t x, gpr_clock_type clock_type);
|
112
|
-
GPRAPI gpr_timespec gpr_time_from_hours(int64_t x, gpr_clock_type clock_type);
|
113
|
-
|
114
|
-
GPRAPI int32_t gpr_time_to_millis(gpr_timespec timespec);
|
115
|
-
|
116
|
-
/* Return 1 if two times are equal or within threshold of each other,
|
117
|
-
0 otherwise */
|
118
|
-
GPRAPI int gpr_time_similar(gpr_timespec a, gpr_timespec b,
|
119
|
-
gpr_timespec threshold);
|
120
|
-
|
121
|
-
/* Sleep until at least 'until' - an absolute timeout */
|
122
|
-
GPRAPI void gpr_sleep_until(gpr_timespec until);
|
123
|
-
|
124
|
-
GPRAPI double gpr_timespec_to_micros(gpr_timespec t);
|
125
|
-
|
126
|
-
#ifdef __cplusplus
|
127
|
-
}
|
128
|
-
#endif
|
129
|
-
|
130
|
-
#endif /* GRPC_IMPL_CODEGEN_TIME_H */
|
@@ -1,593 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2015, Google Inc.
|
4
|
-
* All rights reserved.
|
5
|
-
*
|
6
|
-
* Redistribution and use in source and binary forms, with or without
|
7
|
-
* modification, are permitted provided that the following conditions are
|
8
|
-
* met:
|
9
|
-
*
|
10
|
-
* * Redistributions of source code must retain the above copyright
|
11
|
-
* notice, this list of conditions and the following disclaimer.
|
12
|
-
* * Redistributions in binary form must reproduce the above
|
13
|
-
* copyright notice, this list of conditions and the following disclaimer
|
14
|
-
* in the documentation and/or other materials provided with the
|
15
|
-
* distribution.
|
16
|
-
* * Neither the name of Google Inc. nor the names of its
|
17
|
-
* contributors may be used to endorse or promote products derived from
|
18
|
-
* this software without specific prior written permission.
|
19
|
-
*
|
20
|
-
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
-
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
-
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
-
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
-
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
-
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
-
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
-
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
-
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
-
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
-
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
-
*
|
32
|
-
*/
|
33
|
-
|
34
|
-
#include "src/core/ext/client_config/client_channel.h"
|
35
|
-
|
36
|
-
#include <stdio.h>
|
37
|
-
#include <string.h>
|
38
|
-
|
39
|
-
#include <grpc/support/alloc.h>
|
40
|
-
#include <grpc/support/log.h>
|
41
|
-
#include <grpc/support/sync.h>
|
42
|
-
#include <grpc/support/useful.h>
|
43
|
-
|
44
|
-
#include "src/core/ext/client_config/subchannel_call_holder.h"
|
45
|
-
#include "src/core/lib/channel/channel_args.h"
|
46
|
-
#include "src/core/lib/channel/connected_channel.h"
|
47
|
-
#include "src/core/lib/iomgr/iomgr.h"
|
48
|
-
#include "src/core/lib/profiling/timers.h"
|
49
|
-
#include "src/core/lib/support/string.h"
|
50
|
-
#include "src/core/lib/surface/channel.h"
|
51
|
-
#include "src/core/lib/transport/connectivity_state.h"
|
52
|
-
|
53
|
-
/* Client channel implementation */
|
54
|
-
|
55
|
-
typedef grpc_subchannel_call_holder call_data;
|
56
|
-
|
57
|
-
typedef struct client_channel_channel_data {
|
58
|
-
/** resolver for this channel */
|
59
|
-
grpc_resolver *resolver;
|
60
|
-
/** have we started resolving this channel */
|
61
|
-
int started_resolving;
|
62
|
-
|
63
|
-
/** mutex protecting client configuration, including all
|
64
|
-
variables below in this data structure */
|
65
|
-
gpr_mu mu_config;
|
66
|
-
/** currently active load balancer - guarded by mu_config */
|
67
|
-
grpc_lb_policy *lb_policy;
|
68
|
-
/** incoming configuration - set by resolver.next
|
69
|
-
guarded by mu_config */
|
70
|
-
grpc_client_config *incoming_configuration;
|
71
|
-
/** a list of closures that are all waiting for config to come in */
|
72
|
-
grpc_closure_list waiting_for_config_closures;
|
73
|
-
/** resolver callback */
|
74
|
-
grpc_closure on_config_changed;
|
75
|
-
/** connectivity state being tracked */
|
76
|
-
grpc_connectivity_state_tracker state_tracker;
|
77
|
-
/** when an lb_policy arrives, should we try to exit idle */
|
78
|
-
int exit_idle_when_lb_policy_arrives;
|
79
|
-
/** owning stack */
|
80
|
-
grpc_channel_stack *owning_stack;
|
81
|
-
/** interested parties (owned) */
|
82
|
-
grpc_pollset_set *interested_parties;
|
83
|
-
} channel_data;
|
84
|
-
|
85
|
-
/** We create one watcher for each new lb_policy that is returned from a
|
86
|
-
resolver,
|
87
|
-
to watch for state changes from the lb_policy. When a state change is seen,
|
88
|
-
we
|
89
|
-
update the channel, and create a new watcher */
|
90
|
-
typedef struct {
|
91
|
-
channel_data *chand;
|
92
|
-
grpc_closure on_changed;
|
93
|
-
grpc_connectivity_state state;
|
94
|
-
grpc_lb_policy *lb_policy;
|
95
|
-
} lb_policy_connectivity_watcher;
|
96
|
-
|
97
|
-
typedef struct {
|
98
|
-
grpc_closure closure;
|
99
|
-
grpc_call_element *elem;
|
100
|
-
} waiting_call;
|
101
|
-
|
102
|
-
static char *cc_get_peer(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
|
103
|
-
return grpc_subchannel_call_holder_get_peer(exec_ctx, elem->call_data);
|
104
|
-
}
|
105
|
-
|
106
|
-
static void cc_start_transport_stream_op(grpc_exec_ctx *exec_ctx,
|
107
|
-
grpc_call_element *elem,
|
108
|
-
grpc_transport_stream_op *op) {
|
109
|
-
GRPC_CALL_LOG_OP(GPR_INFO, elem, op);
|
110
|
-
grpc_subchannel_call_holder_perform_op(exec_ctx, elem->call_data, op);
|
111
|
-
}
|
112
|
-
|
113
|
-
static void watch_lb_policy(grpc_exec_ctx *exec_ctx, channel_data *chand,
|
114
|
-
grpc_lb_policy *lb_policy,
|
115
|
-
grpc_connectivity_state current_state);
|
116
|
-
|
117
|
-
static void set_channel_connectivity_state_locked(grpc_exec_ctx *exec_ctx,
|
118
|
-
channel_data *chand,
|
119
|
-
grpc_connectivity_state state,
|
120
|
-
grpc_error *error,
|
121
|
-
const char *reason) {
|
122
|
-
if ((state == GRPC_CHANNEL_TRANSIENT_FAILURE ||
|
123
|
-
state == GRPC_CHANNEL_SHUTDOWN) &&
|
124
|
-
chand->lb_policy != NULL) {
|
125
|
-
/* cancel fail-fast picks */
|
126
|
-
grpc_lb_policy_cancel_picks(
|
127
|
-
exec_ctx, chand->lb_policy,
|
128
|
-
/* mask= */ GRPC_INITIAL_METADATA_IGNORE_CONNECTIVITY,
|
129
|
-
/* check= */ 0);
|
130
|
-
}
|
131
|
-
grpc_connectivity_state_set(exec_ctx, &chand->state_tracker, state, error,
|
132
|
-
reason);
|
133
|
-
}
|
134
|
-
|
135
|
-
static void on_lb_policy_state_changed_locked(grpc_exec_ctx *exec_ctx,
|
136
|
-
lb_policy_connectivity_watcher *w,
|
137
|
-
grpc_error *error) {
|
138
|
-
grpc_connectivity_state publish_state = w->state;
|
139
|
-
/* check if the notification is for a stale policy */
|
140
|
-
if (w->lb_policy != w->chand->lb_policy) return;
|
141
|
-
|
142
|
-
if (publish_state == GRPC_CHANNEL_SHUTDOWN && w->chand->resolver != NULL) {
|
143
|
-
publish_state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
144
|
-
grpc_resolver_channel_saw_error(exec_ctx, w->chand->resolver);
|
145
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, w->chand->lb_policy, "channel");
|
146
|
-
w->chand->lb_policy = NULL;
|
147
|
-
}
|
148
|
-
set_channel_connectivity_state_locked(exec_ctx, w->chand, publish_state,
|
149
|
-
GRPC_ERROR_REF(error), "lb_changed");
|
150
|
-
if (w->state != GRPC_CHANNEL_SHUTDOWN) {
|
151
|
-
watch_lb_policy(exec_ctx, w->chand, w->lb_policy, w->state);
|
152
|
-
}
|
153
|
-
}
|
154
|
-
|
155
|
-
static void on_lb_policy_state_changed(grpc_exec_ctx *exec_ctx, void *arg,
|
156
|
-
grpc_error *error) {
|
157
|
-
lb_policy_connectivity_watcher *w = arg;
|
158
|
-
|
159
|
-
gpr_mu_lock(&w->chand->mu_config);
|
160
|
-
on_lb_policy_state_changed_locked(exec_ctx, w, error);
|
161
|
-
gpr_mu_unlock(&w->chand->mu_config);
|
162
|
-
|
163
|
-
GRPC_CHANNEL_STACK_UNREF(exec_ctx, w->chand->owning_stack, "watch_lb_policy");
|
164
|
-
gpr_free(w);
|
165
|
-
}
|
166
|
-
|
167
|
-
static void watch_lb_policy(grpc_exec_ctx *exec_ctx, channel_data *chand,
|
168
|
-
grpc_lb_policy *lb_policy,
|
169
|
-
grpc_connectivity_state current_state) {
|
170
|
-
lb_policy_connectivity_watcher *w = gpr_malloc(sizeof(*w));
|
171
|
-
GRPC_CHANNEL_STACK_REF(chand->owning_stack, "watch_lb_policy");
|
172
|
-
|
173
|
-
w->chand = chand;
|
174
|
-
grpc_closure_init(&w->on_changed, on_lb_policy_state_changed, w);
|
175
|
-
w->state = current_state;
|
176
|
-
w->lb_policy = lb_policy;
|
177
|
-
grpc_lb_policy_notify_on_state_change(exec_ctx, lb_policy, &w->state,
|
178
|
-
&w->on_changed);
|
179
|
-
}
|
180
|
-
|
181
|
-
static void cc_on_config_changed(grpc_exec_ctx *exec_ctx, void *arg,
|
182
|
-
grpc_error *error) {
|
183
|
-
channel_data *chand = arg;
|
184
|
-
grpc_lb_policy *lb_policy = NULL;
|
185
|
-
grpc_lb_policy *old_lb_policy;
|
186
|
-
grpc_connectivity_state state = GRPC_CHANNEL_TRANSIENT_FAILURE;
|
187
|
-
int exit_idle = 0;
|
188
|
-
grpc_error *state_error = GRPC_ERROR_CREATE("No load balancing policy");
|
189
|
-
|
190
|
-
if (chand->incoming_configuration != NULL) {
|
191
|
-
lb_policy = grpc_client_config_get_lb_policy(chand->incoming_configuration);
|
192
|
-
if (lb_policy != NULL) {
|
193
|
-
GRPC_LB_POLICY_REF(lb_policy, "channel");
|
194
|
-
GRPC_LB_POLICY_REF(lb_policy, "config_change");
|
195
|
-
GRPC_ERROR_UNREF(state_error);
|
196
|
-
state =
|
197
|
-
grpc_lb_policy_check_connectivity(exec_ctx, lb_policy, &state_error);
|
198
|
-
}
|
199
|
-
|
200
|
-
grpc_client_config_unref(exec_ctx, chand->incoming_configuration);
|
201
|
-
}
|
202
|
-
|
203
|
-
chand->incoming_configuration = NULL;
|
204
|
-
|
205
|
-
if (lb_policy != NULL) {
|
206
|
-
grpc_pollset_set_add_pollset_set(exec_ctx, lb_policy->interested_parties,
|
207
|
-
chand->interested_parties);
|
208
|
-
}
|
209
|
-
|
210
|
-
gpr_mu_lock(&chand->mu_config);
|
211
|
-
old_lb_policy = chand->lb_policy;
|
212
|
-
chand->lb_policy = lb_policy;
|
213
|
-
if (lb_policy != NULL) {
|
214
|
-
grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures,
|
215
|
-
NULL);
|
216
|
-
} else if (chand->resolver == NULL /* disconnected */) {
|
217
|
-
grpc_closure_list_fail_all(
|
218
|
-
&chand->waiting_for_config_closures,
|
219
|
-
GRPC_ERROR_CREATE_REFERENCING("Channel disconnected", &error, 1));
|
220
|
-
grpc_exec_ctx_enqueue_list(exec_ctx, &chand->waiting_for_config_closures,
|
221
|
-
NULL);
|
222
|
-
}
|
223
|
-
if (lb_policy != NULL && chand->exit_idle_when_lb_policy_arrives) {
|
224
|
-
GRPC_LB_POLICY_REF(lb_policy, "exit_idle");
|
225
|
-
exit_idle = 1;
|
226
|
-
chand->exit_idle_when_lb_policy_arrives = 0;
|
227
|
-
}
|
228
|
-
|
229
|
-
if (error == GRPC_ERROR_NONE && chand->resolver) {
|
230
|
-
set_channel_connectivity_state_locked(
|
231
|
-
exec_ctx, chand, state, GRPC_ERROR_REF(state_error), "new_lb+resolver");
|
232
|
-
if (lb_policy != NULL) {
|
233
|
-
watch_lb_policy(exec_ctx, chand, lb_policy, state);
|
234
|
-
}
|
235
|
-
GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
|
236
|
-
grpc_resolver_next(exec_ctx, chand->resolver,
|
237
|
-
&chand->incoming_configuration,
|
238
|
-
&chand->on_config_changed);
|
239
|
-
gpr_mu_unlock(&chand->mu_config);
|
240
|
-
} else {
|
241
|
-
if (chand->resolver != NULL) {
|
242
|
-
grpc_resolver_shutdown(exec_ctx, chand->resolver);
|
243
|
-
GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
|
244
|
-
chand->resolver = NULL;
|
245
|
-
}
|
246
|
-
grpc_error *refs[] = {error, state_error};
|
247
|
-
set_channel_connectivity_state_locked(
|
248
|
-
exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN,
|
249
|
-
GRPC_ERROR_CREATE_REFERENCING("Got config after disconnection", refs,
|
250
|
-
GPR_ARRAY_SIZE(refs)),
|
251
|
-
"resolver_gone");
|
252
|
-
gpr_mu_unlock(&chand->mu_config);
|
253
|
-
}
|
254
|
-
|
255
|
-
if (exit_idle) {
|
256
|
-
grpc_lb_policy_exit_idle(exec_ctx, lb_policy);
|
257
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "exit_idle");
|
258
|
-
}
|
259
|
-
|
260
|
-
if (old_lb_policy != NULL) {
|
261
|
-
grpc_pollset_set_del_pollset_set(
|
262
|
-
exec_ctx, old_lb_policy->interested_parties, chand->interested_parties);
|
263
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, old_lb_policy, "channel");
|
264
|
-
}
|
265
|
-
|
266
|
-
if (lb_policy != NULL) {
|
267
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "config_change");
|
268
|
-
}
|
269
|
-
|
270
|
-
GRPC_CHANNEL_STACK_UNREF(exec_ctx, chand->owning_stack, "resolver");
|
271
|
-
GRPC_ERROR_UNREF(state_error);
|
272
|
-
}
|
273
|
-
|
274
|
-
static void cc_start_transport_op(grpc_exec_ctx *exec_ctx,
|
275
|
-
grpc_channel_element *elem,
|
276
|
-
grpc_transport_op *op) {
|
277
|
-
channel_data *chand = elem->channel_data;
|
278
|
-
|
279
|
-
grpc_exec_ctx_sched(exec_ctx, op->on_consumed, GRPC_ERROR_NONE, NULL);
|
280
|
-
|
281
|
-
GPR_ASSERT(op->set_accept_stream == false);
|
282
|
-
if (op->bind_pollset != NULL) {
|
283
|
-
grpc_pollset_set_add_pollset(exec_ctx, chand->interested_parties,
|
284
|
-
op->bind_pollset);
|
285
|
-
}
|
286
|
-
|
287
|
-
gpr_mu_lock(&chand->mu_config);
|
288
|
-
if (op->on_connectivity_state_change != NULL) {
|
289
|
-
grpc_connectivity_state_notify_on_state_change(
|
290
|
-
exec_ctx, &chand->state_tracker, op->connectivity_state,
|
291
|
-
op->on_connectivity_state_change);
|
292
|
-
op->on_connectivity_state_change = NULL;
|
293
|
-
op->connectivity_state = NULL;
|
294
|
-
}
|
295
|
-
|
296
|
-
if (op->send_ping != NULL) {
|
297
|
-
if (chand->lb_policy == NULL) {
|
298
|
-
grpc_exec_ctx_sched(exec_ctx, op->send_ping,
|
299
|
-
GRPC_ERROR_CREATE("Ping with no load balancing"),
|
300
|
-
NULL);
|
301
|
-
} else {
|
302
|
-
grpc_lb_policy_ping_one(exec_ctx, chand->lb_policy, op->send_ping);
|
303
|
-
op->bind_pollset = NULL;
|
304
|
-
}
|
305
|
-
op->send_ping = NULL;
|
306
|
-
}
|
307
|
-
|
308
|
-
if (op->disconnect_with_error != GRPC_ERROR_NONE) {
|
309
|
-
if (chand->resolver != NULL) {
|
310
|
-
set_channel_connectivity_state_locked(
|
311
|
-
exec_ctx, chand, GRPC_CHANNEL_SHUTDOWN,
|
312
|
-
GRPC_ERROR_REF(op->disconnect_with_error), "disconnect");
|
313
|
-
grpc_resolver_shutdown(exec_ctx, chand->resolver);
|
314
|
-
GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
|
315
|
-
chand->resolver = NULL;
|
316
|
-
if (!chand->started_resolving) {
|
317
|
-
grpc_closure_list_fail_all(&chand->waiting_for_config_closures,
|
318
|
-
GRPC_ERROR_REF(op->disconnect_with_error));
|
319
|
-
grpc_exec_ctx_enqueue_list(exec_ctx,
|
320
|
-
&chand->waiting_for_config_closures, NULL);
|
321
|
-
}
|
322
|
-
if (chand->lb_policy != NULL) {
|
323
|
-
grpc_pollset_set_del_pollset_set(exec_ctx,
|
324
|
-
chand->lb_policy->interested_parties,
|
325
|
-
chand->interested_parties);
|
326
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel");
|
327
|
-
chand->lb_policy = NULL;
|
328
|
-
}
|
329
|
-
}
|
330
|
-
GRPC_ERROR_UNREF(op->disconnect_with_error);
|
331
|
-
}
|
332
|
-
gpr_mu_unlock(&chand->mu_config);
|
333
|
-
}
|
334
|
-
|
335
|
-
typedef struct {
|
336
|
-
grpc_metadata_batch *initial_metadata;
|
337
|
-
uint32_t initial_metadata_flags;
|
338
|
-
grpc_connected_subchannel **connected_subchannel;
|
339
|
-
grpc_closure *on_ready;
|
340
|
-
grpc_call_element *elem;
|
341
|
-
grpc_closure closure;
|
342
|
-
} continue_picking_args;
|
343
|
-
|
344
|
-
static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *arg,
|
345
|
-
grpc_metadata_batch *initial_metadata,
|
346
|
-
uint32_t initial_metadata_flags,
|
347
|
-
grpc_connected_subchannel **connected_subchannel,
|
348
|
-
grpc_closure *on_ready);
|
349
|
-
|
350
|
-
static void continue_picking(grpc_exec_ctx *exec_ctx, void *arg,
|
351
|
-
grpc_error *error) {
|
352
|
-
continue_picking_args *cpa = arg;
|
353
|
-
if (cpa->connected_subchannel == NULL) {
|
354
|
-
/* cancelled, do nothing */
|
355
|
-
} else if (error != GRPC_ERROR_NONE) {
|
356
|
-
grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_REF(error), NULL);
|
357
|
-
} else if (cc_pick_subchannel(exec_ctx, cpa->elem, cpa->initial_metadata,
|
358
|
-
cpa->initial_metadata_flags,
|
359
|
-
cpa->connected_subchannel, cpa->on_ready)) {
|
360
|
-
grpc_exec_ctx_sched(exec_ctx, cpa->on_ready, GRPC_ERROR_NONE, NULL);
|
361
|
-
}
|
362
|
-
gpr_free(cpa);
|
363
|
-
}
|
364
|
-
|
365
|
-
static int cc_pick_subchannel(grpc_exec_ctx *exec_ctx, void *elemp,
|
366
|
-
grpc_metadata_batch *initial_metadata,
|
367
|
-
uint32_t initial_metadata_flags,
|
368
|
-
grpc_connected_subchannel **connected_subchannel,
|
369
|
-
grpc_closure *on_ready) {
|
370
|
-
GPR_TIMER_BEGIN("cc_pick_subchannel", 0);
|
371
|
-
|
372
|
-
grpc_call_element *elem = elemp;
|
373
|
-
channel_data *chand = elem->channel_data;
|
374
|
-
call_data *calld = elem->call_data;
|
375
|
-
continue_picking_args *cpa;
|
376
|
-
grpc_closure *closure;
|
377
|
-
|
378
|
-
GPR_ASSERT(connected_subchannel);
|
379
|
-
|
380
|
-
gpr_mu_lock(&chand->mu_config);
|
381
|
-
if (initial_metadata == NULL) {
|
382
|
-
if (chand->lb_policy != NULL) {
|
383
|
-
grpc_lb_policy_cancel_pick(exec_ctx, chand->lb_policy,
|
384
|
-
connected_subchannel);
|
385
|
-
}
|
386
|
-
for (closure = chand->waiting_for_config_closures.head; closure != NULL;
|
387
|
-
closure = closure->next_data.next) {
|
388
|
-
cpa = closure->cb_arg;
|
389
|
-
if (cpa->connected_subchannel == connected_subchannel) {
|
390
|
-
cpa->connected_subchannel = NULL;
|
391
|
-
grpc_exec_ctx_sched(exec_ctx, cpa->on_ready,
|
392
|
-
GRPC_ERROR_CREATE("Pick cancelled"), NULL);
|
393
|
-
}
|
394
|
-
}
|
395
|
-
gpr_mu_unlock(&chand->mu_config);
|
396
|
-
GPR_TIMER_END("cc_pick_subchannel", 0);
|
397
|
-
return 1;
|
398
|
-
}
|
399
|
-
if (chand->lb_policy != NULL) {
|
400
|
-
grpc_lb_policy *lb_policy = chand->lb_policy;
|
401
|
-
int r;
|
402
|
-
GRPC_LB_POLICY_REF(lb_policy, "cc_pick_subchannel");
|
403
|
-
gpr_mu_unlock(&chand->mu_config);
|
404
|
-
r = grpc_lb_policy_pick(exec_ctx, lb_policy, calld->pollent,
|
405
|
-
initial_metadata, initial_metadata_flags,
|
406
|
-
connected_subchannel, on_ready);
|
407
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, lb_policy, "cc_pick_subchannel");
|
408
|
-
GPR_TIMER_END("cc_pick_subchannel", 0);
|
409
|
-
return r;
|
410
|
-
}
|
411
|
-
if (chand->resolver != NULL && !chand->started_resolving) {
|
412
|
-
chand->started_resolving = 1;
|
413
|
-
GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
|
414
|
-
grpc_resolver_next(exec_ctx, chand->resolver,
|
415
|
-
&chand->incoming_configuration,
|
416
|
-
&chand->on_config_changed);
|
417
|
-
}
|
418
|
-
if (chand->resolver != NULL) {
|
419
|
-
cpa = gpr_malloc(sizeof(*cpa));
|
420
|
-
cpa->initial_metadata = initial_metadata;
|
421
|
-
cpa->initial_metadata_flags = initial_metadata_flags;
|
422
|
-
cpa->connected_subchannel = connected_subchannel;
|
423
|
-
cpa->on_ready = on_ready;
|
424
|
-
cpa->elem = elem;
|
425
|
-
grpc_closure_init(&cpa->closure, continue_picking, cpa);
|
426
|
-
grpc_closure_list_append(&chand->waiting_for_config_closures, &cpa->closure,
|
427
|
-
GRPC_ERROR_NONE);
|
428
|
-
} else {
|
429
|
-
grpc_exec_ctx_sched(exec_ctx, on_ready, GRPC_ERROR_CREATE("Disconnected"),
|
430
|
-
NULL);
|
431
|
-
}
|
432
|
-
gpr_mu_unlock(&chand->mu_config);
|
433
|
-
|
434
|
-
GPR_TIMER_END("cc_pick_subchannel", 0);
|
435
|
-
return 0;
|
436
|
-
}
|
437
|
-
|
438
|
-
/* Constructor for call_data */
|
439
|
-
static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
440
|
-
grpc_call_element_args *args) {
|
441
|
-
grpc_subchannel_call_holder_init(elem->call_data, cc_pick_subchannel, elem,
|
442
|
-
args->call_stack);
|
443
|
-
}
|
444
|
-
|
445
|
-
/* Destructor for call_data */
|
446
|
-
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
447
|
-
const grpc_call_stats *stats,
|
448
|
-
void *and_free_memory) {
|
449
|
-
grpc_subchannel_call_holder_destroy(exec_ctx, elem->call_data);
|
450
|
-
gpr_free(and_free_memory);
|
451
|
-
}
|
452
|
-
|
453
|
-
/* Constructor for channel_data */
|
454
|
-
static void init_channel_elem(grpc_exec_ctx *exec_ctx,
|
455
|
-
grpc_channel_element *elem,
|
456
|
-
grpc_channel_element_args *args) {
|
457
|
-
channel_data *chand = elem->channel_data;
|
458
|
-
|
459
|
-
memset(chand, 0, sizeof(*chand));
|
460
|
-
|
461
|
-
GPR_ASSERT(args->is_last);
|
462
|
-
GPR_ASSERT(elem->filter == &grpc_client_channel_filter);
|
463
|
-
|
464
|
-
gpr_mu_init(&chand->mu_config);
|
465
|
-
grpc_closure_init(&chand->on_config_changed, cc_on_config_changed, chand);
|
466
|
-
chand->owning_stack = args->channel_stack;
|
467
|
-
|
468
|
-
grpc_connectivity_state_init(&chand->state_tracker, GRPC_CHANNEL_IDLE,
|
469
|
-
"client_channel");
|
470
|
-
chand->interested_parties = grpc_pollset_set_create();
|
471
|
-
}
|
472
|
-
|
473
|
-
/* Destructor for channel_data */
|
474
|
-
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
|
475
|
-
grpc_channel_element *elem) {
|
476
|
-
channel_data *chand = elem->channel_data;
|
477
|
-
|
478
|
-
if (chand->resolver != NULL) {
|
479
|
-
grpc_resolver_shutdown(exec_ctx, chand->resolver);
|
480
|
-
GRPC_RESOLVER_UNREF(exec_ctx, chand->resolver, "channel");
|
481
|
-
}
|
482
|
-
if (chand->lb_policy != NULL) {
|
483
|
-
grpc_pollset_set_del_pollset_set(exec_ctx,
|
484
|
-
chand->lb_policy->interested_parties,
|
485
|
-
chand->interested_parties);
|
486
|
-
GRPC_LB_POLICY_UNREF(exec_ctx, chand->lb_policy, "channel");
|
487
|
-
}
|
488
|
-
grpc_connectivity_state_destroy(exec_ctx, &chand->state_tracker);
|
489
|
-
grpc_pollset_set_destroy(chand->interested_parties);
|
490
|
-
gpr_mu_destroy(&chand->mu_config);
|
491
|
-
}
|
492
|
-
|
493
|
-
static void cc_set_pollset_or_pollset_set(grpc_exec_ctx *exec_ctx,
|
494
|
-
grpc_call_element *elem,
|
495
|
-
grpc_polling_entity *pollent) {
|
496
|
-
call_data *calld = elem->call_data;
|
497
|
-
calld->pollent = pollent;
|
498
|
-
}
|
499
|
-
|
500
|
-
const grpc_channel_filter grpc_client_channel_filter = {
|
501
|
-
cc_start_transport_stream_op,
|
502
|
-
cc_start_transport_op,
|
503
|
-
sizeof(call_data),
|
504
|
-
init_call_elem,
|
505
|
-
cc_set_pollset_or_pollset_set,
|
506
|
-
destroy_call_elem,
|
507
|
-
sizeof(channel_data),
|
508
|
-
init_channel_elem,
|
509
|
-
destroy_channel_elem,
|
510
|
-
cc_get_peer,
|
511
|
-
"client-channel",
|
512
|
-
};
|
513
|
-
|
514
|
-
void grpc_client_channel_set_resolver(grpc_exec_ctx *exec_ctx,
|
515
|
-
grpc_channel_stack *channel_stack,
|
516
|
-
grpc_resolver *resolver) {
|
517
|
-
/* post construction initialization: set the transport setup pointer */
|
518
|
-
grpc_channel_element *elem = grpc_channel_stack_last_element(channel_stack);
|
519
|
-
channel_data *chand = elem->channel_data;
|
520
|
-
gpr_mu_lock(&chand->mu_config);
|
521
|
-
GPR_ASSERT(!chand->resolver);
|
522
|
-
chand->resolver = resolver;
|
523
|
-
GRPC_RESOLVER_REF(resolver, "channel");
|
524
|
-
if (!grpc_closure_list_empty(chand->waiting_for_config_closures) ||
|
525
|
-
chand->exit_idle_when_lb_policy_arrives) {
|
526
|
-
chand->started_resolving = 1;
|
527
|
-
GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
|
528
|
-
grpc_resolver_next(exec_ctx, resolver, &chand->incoming_configuration,
|
529
|
-
&chand->on_config_changed);
|
530
|
-
}
|
531
|
-
gpr_mu_unlock(&chand->mu_config);
|
532
|
-
}
|
533
|
-
|
534
|
-
grpc_connectivity_state grpc_client_channel_check_connectivity_state(
|
535
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, int try_to_connect) {
|
536
|
-
channel_data *chand = elem->channel_data;
|
537
|
-
grpc_connectivity_state out;
|
538
|
-
gpr_mu_lock(&chand->mu_config);
|
539
|
-
out = grpc_connectivity_state_check(&chand->state_tracker, NULL);
|
540
|
-
if (out == GRPC_CHANNEL_IDLE && try_to_connect) {
|
541
|
-
if (chand->lb_policy != NULL) {
|
542
|
-
grpc_lb_policy_exit_idle(exec_ctx, chand->lb_policy);
|
543
|
-
} else {
|
544
|
-
chand->exit_idle_when_lb_policy_arrives = 1;
|
545
|
-
if (!chand->started_resolving && chand->resolver != NULL) {
|
546
|
-
GRPC_CHANNEL_STACK_REF(chand->owning_stack, "resolver");
|
547
|
-
chand->started_resolving = 1;
|
548
|
-
grpc_resolver_next(exec_ctx, chand->resolver,
|
549
|
-
&chand->incoming_configuration,
|
550
|
-
&chand->on_config_changed);
|
551
|
-
}
|
552
|
-
}
|
553
|
-
}
|
554
|
-
gpr_mu_unlock(&chand->mu_config);
|
555
|
-
return out;
|
556
|
-
}
|
557
|
-
|
558
|
-
typedef struct {
|
559
|
-
channel_data *chand;
|
560
|
-
grpc_pollset *pollset;
|
561
|
-
grpc_closure *on_complete;
|
562
|
-
grpc_closure my_closure;
|
563
|
-
} external_connectivity_watcher;
|
564
|
-
|
565
|
-
static void on_external_watch_complete(grpc_exec_ctx *exec_ctx, void *arg,
|
566
|
-
grpc_error *error) {
|
567
|
-
external_connectivity_watcher *w = arg;
|
568
|
-
grpc_closure *follow_up = w->on_complete;
|
569
|
-
grpc_pollset_set_del_pollset(exec_ctx, w->chand->interested_parties,
|
570
|
-
w->pollset);
|
571
|
-
GRPC_CHANNEL_STACK_UNREF(exec_ctx, w->chand->owning_stack,
|
572
|
-
"external_connectivity_watcher");
|
573
|
-
gpr_free(w);
|
574
|
-
follow_up->cb(exec_ctx, follow_up->cb_arg, error);
|
575
|
-
}
|
576
|
-
|
577
|
-
void grpc_client_channel_watch_connectivity_state(
|
578
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_element *elem, grpc_pollset *pollset,
|
579
|
-
grpc_connectivity_state *state, grpc_closure *on_complete) {
|
580
|
-
channel_data *chand = elem->channel_data;
|
581
|
-
external_connectivity_watcher *w = gpr_malloc(sizeof(*w));
|
582
|
-
w->chand = chand;
|
583
|
-
w->pollset = pollset;
|
584
|
-
w->on_complete = on_complete;
|
585
|
-
grpc_pollset_set_add_pollset(exec_ctx, chand->interested_parties, pollset);
|
586
|
-
grpc_closure_init(&w->my_closure, on_external_watch_complete, w);
|
587
|
-
GRPC_CHANNEL_STACK_REF(w->chand->owning_stack,
|
588
|
-
"external_connectivity_watcher");
|
589
|
-
gpr_mu_lock(&chand->mu_config);
|
590
|
-
grpc_connectivity_state_notify_on_state_change(
|
591
|
-
exec_ctx, &chand->state_tracker, state, &w->my_closure);
|
592
|
-
gpr_mu_unlock(&chand->mu_config);
|
593
|
-
}
|