wearefair-grpc 1.3.1.pre.a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +1 -0
- data/Makefile +19484 -0
- data/etc/roots.pem +5288 -0
- data/include/grpc/byte_buffer.h +102 -0
- data/include/grpc/byte_buffer_reader.h +39 -0
- data/include/grpc/census.h +484 -0
- data/include/grpc/compression.h +85 -0
- data/include/grpc/grpc.h +509 -0
- data/include/grpc/grpc_cronet.h +51 -0
- data/include/grpc/grpc_posix.h +81 -0
- data/include/grpc/grpc_security.h +390 -0
- data/include/grpc/grpc_security_constants.h +114 -0
- data/include/grpc/impl/codegen/atm.h +100 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +97 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +97 -0
- data/include/grpc/impl/codegen/atm_windows.h +140 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +57 -0
- data/include/grpc/impl/codegen/compression_types.h +122 -0
- data/include/grpc/impl/codegen/connectivity_state.h +61 -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/gpr_types.h +75 -0
- data/include/grpc/impl/codegen/grpc_types.h +550 -0
- data/include/grpc/impl/codegen/port_platform.h +421 -0
- data/include/grpc/impl/codegen/propagation_bits.h +67 -0
- data/include/grpc/impl/codegen/slice.h +157 -0
- data/include/grpc/impl/codegen/status.h +163 -0
- data/include/grpc/impl/codegen/sync.h +75 -0
- data/include/grpc/impl/codegen/sync_generic.h +55 -0
- data/include/grpc/impl/codegen/sync_posix.h +47 -0
- data/include/grpc/impl/codegen/sync_windows.h +49 -0
- data/include/grpc/load_reporting.h +63 -0
- data/include/grpc/module.modulemap +13 -0
- data/include/grpc/slice.h +168 -0
- data/include/grpc/slice_buffer.h +94 -0
- data/include/grpc/status.h +39 -0
- data/include/grpc/support/alloc.h +82 -0
- data/include/grpc/support/atm.h +39 -0
- data/include/grpc/support/atm_gcc_atomic.h +39 -0
- data/include/grpc/support/atm_gcc_sync.h +39 -0
- data/include/grpc/support/atm_windows.h +39 -0
- data/include/grpc/support/avl.h +97 -0
- data/include/grpc/support/cmdline.h +103 -0
- data/include/grpc/support/cpu.h +59 -0
- data/include/grpc/support/histogram.h +79 -0
- data/include/grpc/support/host_port.h +66 -0
- data/include/grpc/support/log.h +118 -0
- data/include/grpc/support/log_windows.h +53 -0
- data/include/grpc/support/port_platform.h +39 -0
- data/include/grpc/support/string_util.h +64 -0
- data/include/grpc/support/subprocess.h +59 -0
- data/include/grpc/support/sync.h +295 -0
- data/include/grpc/support/sync_generic.h +39 -0
- data/include/grpc/support/sync_posix.h +39 -0
- data/include/grpc/support/sync_windows.h +39 -0
- data/include/grpc/support/thd.h +91 -0
- data/include/grpc/support/time.h +105 -0
- data/include/grpc/support/tls.h +77 -0
- data/include/grpc/support/tls_gcc.h +100 -0
- data/include/grpc/support/tls_msvc.h +56 -0
- data/include/grpc/support/tls_pthread.h +60 -0
- data/include/grpc/support/useful.h +80 -0
- data/src/boringssl/err_data.c +1270 -0
- data/src/core/ext/census/aggregation.h +66 -0
- 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/census_interface.h +76 -0
- data/src/core/ext/census/census_rpc_stats.h +101 -0
- data/src/core/ext/census/context.c +509 -0
- data/src/core/ext/census/gen/census.pb.c +176 -0
- data/src/core/ext/census/gen/census.pb.h +295 -0
- data/src/core/ext/census/gen/trace_context.pb.c +54 -0
- data/src/core/ext/census/gen/trace_context.pb.h +93 -0
- data/src/core/ext/census/grpc_context.c +53 -0
- data/src/core/ext/census/grpc_filter.c +213 -0
- data/src/core/ext/census/grpc_filter.h +44 -0
- data/src/core/ext/census/grpc_plugin.c +85 -0
- data/src/core/ext/census/initialize.c +66 -0
- data/src/core/ext/census/mlog.c +600 -0
- data/src/core/ext/census/mlog.h +95 -0
- data/src/core/ext/census/operation.c +63 -0
- data/src/core/ext/census/placeholders.c +64 -0
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/rpc_metric_id.h +51 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +71 -0
- data/src/core/ext/census/trace_label.h +61 -0
- data/src/core/ext/census/trace_propagation.h +63 -0
- data/src/core/ext/census/trace_status.h +45 -0
- data/src/core/ext/census/trace_string.h +50 -0
- data/src/core/ext/census/tracing.c +71 -0
- data/src/core/ext/census/tracing.h +124 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.c +226 -0
- data/src/core/ext/filters/client_channel/client_channel.c +1410 -0
- data/src/core/ext/filters/client_channel/client_channel.h +64 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.c +87 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +92 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.c +106 -0
- data/src/core/ext/filters/client_channel/connector.c +55 -0
- data/src/core/ext/filters/client_channel/connector.h +88 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.c +389 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +49 -0
- data/src/core/ext/filters/client_channel/http_proxy.c +125 -0
- data/src/core/ext/filters/client_channel/http_proxy.h +39 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +1419 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +107 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +249 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +105 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +88 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +158 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +476 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +795 -0
- data/src/core/ext/filters/client_channel/lb_policy.c +167 -0
- data/src/core/ext/filters/client_channel/lb_policy.h +209 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +134 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.c +85 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +55 -0
- data/src/core/ext/filters/client_channel/parse_address.c +170 -0
- data/src/core/ext/filters/client_channel/parse_address.h +54 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.c +63 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +89 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +139 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +59 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +350 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +66 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +319 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +289 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +64 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +325 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +234 -0
- data/src/core/ext/filters/client_channel/resolver.c +88 -0
- data/src/core/ext/filters/client_channel/resolver.h +101 -0
- data/src/core/ext/filters/client_channel/resolver_factory.c +56 -0
- data/src/core/ext/filters/client_channel/resolver_factory.h +85 -0
- data/src/core/ext/filters/client_channel/resolver_registry.c +174 -0
- data/src/core/ext/filters/client_channel/resolver_registry.h +84 -0
- data/src/core/ext/filters/client_channel/retry_throttle.c +210 -0
- data/src/core/ext/filters/client_channel/retry_throttle.h +65 -0
- data/src/core/ext/filters/client_channel/subchannel.c +835 -0
- data/src/core/ext/filters/client_channel/subchannel.h +203 -0
- data/src/core/ext/filters/client_channel/subchannel_index.c +262 -0
- data/src/core/ext/filters/client_channel/subchannel_index.h +77 -0
- data/src/core/ext/filters/client_channel/uri_parser.c +315 -0
- data/src/core/ext/filters/client_channel/uri_parser.h +65 -0
- data/src/core/ext/filters/load_reporting/load_reporting.c +106 -0
- data/src/core/ext/filters/load_reporting/load_reporting.h +73 -0
- data/src/core/ext/filters/load_reporting/load_reporting_filter.c +218 -0
- data/src/core/ext/filters/load_reporting/load_reporting_filter.h +42 -0
- data/src/core/ext/filters/max_age/max_age_filter.c +439 -0
- data/src/core/ext/filters/max_age/max_age_filter.h +39 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.c +56 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.h +49 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +221 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +41 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +121 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +95 -0
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +239 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +304 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +59 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +90 -0
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +101 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +236 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +67 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +241 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +54 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +43 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +2847 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +53 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +61 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.c +287 -0
- data/src/core/ext/transport/chttp2/transport/frame_data.h +104 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +198 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +78 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +145 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +59 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +125 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +58 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +239 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +76 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +134 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +57 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +661 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +107 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +1734 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +129 -0
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +383 -0
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +112 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.c +75 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +74 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +48 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +88 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +63 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +852 -0
- data/src/core/ext/transport/chttp2/transport/parsing.c +825 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +194 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.c +176 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.h +83 -0
- data/src/core/ext/transport/chttp2/transport/varint.c +65 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +75 -0
- data/src/core/ext/transport/chttp2/transport/writing.c +429 -0
- data/src/core/lib/channel/channel_args.c +355 -0
- data/src/core/lib/channel/channel_args.h +126 -0
- data/src/core/lib/channel/channel_stack.c +291 -0
- data/src/core/lib/channel/channel_stack.h +319 -0
- data/src/core/lib/channel/channel_stack_builder.c +284 -0
- data/src/core/lib/channel/channel_stack_builder.h +170 -0
- data/src/core/lib/channel/compress_filter.c +353 -0
- data/src/core/lib/channel/compress_filter.h +67 -0
- data/src/core/lib/channel/connected_channel.c +188 -0
- data/src/core/lib/channel/connected_channel.h +48 -0
- data/src/core/lib/channel/context.h +64 -0
- data/src/core/lib/channel/deadline_filter.c +348 -0
- data/src/core/lib/channel/deadline_filter.h +102 -0
- data/src/core/lib/channel/handshaker.c +281 -0
- data/src/core/lib/channel/handshaker.h +182 -0
- data/src/core/lib/channel/handshaker_factory.c +54 -0
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/lib/channel/handshaker_registry.h +63 -0
- data/src/core/lib/channel/http_client_filter.c +601 -0
- data/src/core/lib/channel/http_client_filter.h +47 -0
- data/src/core/lib/channel/http_server_filter.c +445 -0
- data/src/core/lib/channel/http_server_filter.h +42 -0
- data/src/core/lib/channel/message_size_filter.c +270 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/algorithm_metadata.h +53 -0
- data/src/core/lib/compression/compression.c +198 -0
- data/src/core/lib/compression/message_compress.c +204 -0
- data/src/core/lib/compression/message_compress.h +54 -0
- data/src/core/lib/debug/trace.c +140 -0
- data/src/core/lib/debug/trace.h +43 -0
- data/src/core/lib/http/format_request.c +135 -0
- data/src/core/lib/http/format_request.h +47 -0
- data/src/core/lib/http/httpcli.c +336 -0
- data/src/core/lib/http/httpcli.h +141 -0
- data/src/core/lib/http/httpcli_security_connector.c +199 -0
- data/src/core/lib/http/parser.c +379 -0
- data/src/core/lib/http/parser.h +126 -0
- data/src/core/lib/iomgr/closure.c +168 -0
- data/src/core/lib/iomgr/closure.h +153 -0
- data/src/core/lib/iomgr/combiner.c +460 -0
- data/src/core/lib/iomgr/combiner.h +83 -0
- data/src/core/lib/iomgr/endpoint.c +78 -0
- data/src/core/lib/iomgr/endpoint.h +117 -0
- data/src/core/lib/iomgr/endpoint_pair.h +47 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.c +87 -0
- data/src/core/lib/iomgr/endpoint_pair_uv.c +53 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.c +101 -0
- data/src/core/lib/iomgr/error.c +793 -0
- data/src/core/lib/iomgr/error.h +218 -0
- data/src/core/lib/iomgr/error_internal.h +75 -0
- data/src/core/lib/iomgr/ev_epoll_linux.c +1965 -0
- data/src/core/lib/iomgr/ev_epoll_linux.h +48 -0
- data/src/core/lib/iomgr/ev_poll_posix.c +1593 -0
- data/src/core/lib/iomgr/ev_poll_posix.h +42 -0
- data/src/core/lib/iomgr/ev_posix.c +287 -0
- data/src/core/lib/iomgr/ev_posix.h +189 -0
- data/src/core/lib/iomgr/exec_ctx.c +117 -0
- data/src/core/lib/iomgr/exec_ctx.h +117 -0
- data/src/core/lib/iomgr/executor.c +170 -0
- data/src/core/lib/iomgr/executor.h +51 -0
- data/src/core/lib/iomgr/iocp_windows.c +168 -0
- data/src/core/lib/iomgr/iocp_windows.h +55 -0
- data/src/core/lib/iomgr/iomgr.c +183 -0
- data/src/core/lib/iomgr/iomgr.h +47 -0
- data/src/core/lib/iomgr/iomgr_internal.h +58 -0
- data/src/core/lib/iomgr/iomgr_posix.c +56 -0
- data/src/core/lib/iomgr/iomgr_posix.h +39 -0
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +76 -0
- data/src/core/lib/iomgr/load_file.c +92 -0
- data/src/core/lib/iomgr/load_file.h +56 -0
- data/src/core/lib/iomgr/lockfree_event.c +238 -0
- data/src/core/lib/iomgr/lockfree_event.h +54 -0
- data/src/core/lib/iomgr/network_status_tracker.c +48 -0
- data/src/core/lib/iomgr/network_status_tracker.h +45 -0
- data/src/core/lib/iomgr/polling_entity.c +104 -0
- data/src/core/lib/iomgr/polling_entity.h +81 -0
- data/src/core/lib/iomgr/pollset.h +97 -0
- data/src/core/lib/iomgr/pollset_set.h +62 -0
- data/src/core/lib/iomgr/pollset_set_uv.c +63 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +64 -0
- data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
- data/src/core/lib/iomgr/pollset_uv.c +156 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +232 -0
- data/src/core/lib/iomgr/pollset_windows.h +78 -0
- data/src/core/lib/iomgr/port.h +138 -0
- data/src/core/lib/iomgr/resolve_address.h +70 -0
- data/src/core/lib/iomgr/resolve_address_posix.c +207 -0
- data/src/core/lib/iomgr/resolve_address_uv.c +284 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +190 -0
- data/src/core/lib/iomgr/resource_quota.c +877 -0
- data/src/core/lib/iomgr/resource_quota.h +167 -0
- data/src/core/lib/iomgr/sockaddr.h +55 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +44 -0
- data/src/core/lib/iomgr/sockaddr_utils.c +272 -0
- data/src/core/lib/iomgr/sockaddr_utils.h +93 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +43 -0
- data/src/core/lib/iomgr/socket_factory_posix.c +110 -0
- data/src/core/lib/iomgr/socket_factory_posix.h +90 -0
- 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 +330 -0
- data/src/core/lib/iomgr/socket_utils_linux.c +57 -0
- data/src/core/lib/iomgr/socket_utils_posix.c +73 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +147 -0
- 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 +167 -0
- data/src/core/lib/iomgr/socket_windows.h +125 -0
- data/src/core/lib/iomgr/tcp_client.h +55 -0
- data/src/core/lib/iomgr/tcp_client_posix.c +368 -0
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +192 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +260 -0
- data/src/core/lib/iomgr/tcp_posix.c +677 -0
- data/src/core/lib/iomgr/tcp_posix.h +70 -0
- data/src/core/lib/iomgr/tcp_server.h +116 -0
- data/src/core/lib/iomgr/tcp_server_posix.c +579 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +135 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +221 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +196 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +49 -0
- data/src/core/lib/iomgr/tcp_server_uv.c +393 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +558 -0
- data/src/core/lib/iomgr/tcp_uv.c +374 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +462 -0
- data/src/core/lib/iomgr/tcp_windows.h +59 -0
- data/src/core/lib/iomgr/time_averaged_stats.c +77 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +88 -0
- data/src/core/lib/iomgr/timer.h +111 -0
- data/src/core/lib/iomgr/timer_generic.c +567 -0
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +152 -0
- data/src/core/lib/iomgr/timer_heap.h +57 -0
- data/src/core/lib/iomgr/timer_uv.c +103 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +529 -0
- data/src/core/lib/iomgr/udp_server.h +89 -0
- data/src/core/lib/iomgr/unix_sockets_posix.c +108 -0
- data/src/core/lib/iomgr/unix_sockets_posix.h +56 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +62 -0
- 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 +97 -0
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +51 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +112 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +41 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.c +101 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.h +109 -0
- data/src/core/lib/iomgr/workqueue.h +87 -0
- data/src/core/lib/iomgr/workqueue_uv.c +65 -0
- data/src/core/lib/iomgr/workqueue_uv.h +37 -0
- data/src/core/lib/iomgr/workqueue_windows.c +63 -0
- data/src/core/lib/iomgr/workqueue_windows.h +37 -0
- data/src/core/lib/json/json.c +63 -0
- data/src/core/lib/json/json.h +88 -0
- data/src/core/lib/json/json_common.h +49 -0
- data/src/core/lib/json/json_reader.c +675 -0
- data/src/core/lib/json/json_reader.h +160 -0
- data/src/core/lib/json/json_string.c +379 -0
- data/src/core/lib/json/json_writer.c +258 -0
- data/src/core/lib/json/json_writer.h +97 -0
- data/src/core/lib/profiling/basic_timers.c +298 -0
- data/src/core/lib/profiling/stap_timers.c +65 -0
- data/src/core/lib/profiling/timers.h +121 -0
- data/src/core/lib/security/context/security_context.c +350 -0
- data/src/core/lib/security/context/security_context.h +134 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +274 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +72 -0
- data/src/core/lib/security/credentials/credentials.c +308 -0
- data/src/core/lib/security/credentials/credentials.h +268 -0
- data/src/core/lib/security/credentials/credentials_metadata.c +103 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.c +141 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.h +71 -0
- data/src/core/lib/security/credentials/google_default/credentials_generic.c +54 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +337 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +60 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +85 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.h +44 -0
- data/src/core/lib/security/credentials/jwt/json_token.c +321 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +88 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +195 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +63 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +910 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +140 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +468 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +109 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +153 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +45 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +242 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +48 -0
- data/src/core/lib/security/transport/auth_filters.h +42 -0
- data/src/core/lib/security/transport/client_auth_filter.c +384 -0
- data/src/core/lib/security/transport/lb_targets_info.c +70 -0
- data/src/core/lib/security/transport/lb_targets_info.h +47 -0
- data/src/core/lib/security/transport/secure_endpoint.c +427 -0
- data/src/core/lib/security/transport/secure_endpoint.h +49 -0
- data/src/core/lib/security/transport/security_connector.c +909 -0
- data/src/core/lib/security/transport/security_connector.h +252 -0
- data/src/core/lib/security/transport/security_handshaker.c +507 -0
- data/src/core/lib/security/transport/security_handshaker.h +49 -0
- data/src/core/lib/security/transport/server_auth_filter.c +277 -0
- data/src/core/lib/security/transport/tsi_error.c +42 -0
- data/src/core/lib/security/transport/tsi_error.h +42 -0
- data/src/core/lib/security/util/json_util.c +61 -0
- data/src/core/lib/security/util/json_util.h +55 -0
- data/src/core/lib/slice/b64.c +251 -0
- data/src/core/lib/slice/b64.h +65 -0
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/slice/slice.c +466 -0
- data/src/core/lib/slice/slice_buffer.c +355 -0
- data/src/core/lib/slice/slice_hash_table.c +125 -0
- data/src/core/lib/slice/slice_hash_table.h +77 -0
- data/src/core/lib/slice/slice_intern.c +346 -0
- data/src/core/lib/slice/slice_internal.h +64 -0
- data/src/core/lib/slice/slice_string_helpers.c +95 -0
- data/src/core/lib/slice/slice_string_helpers.h +63 -0
- data/src/core/lib/support/alloc.c +117 -0
- data/src/core/lib/support/arena.c +98 -0
- data/src/core/lib/support/arena.h +54 -0
- data/src/core/lib/support/atm.c +47 -0
- data/src/core/lib/support/avl.c +299 -0
- data/src/core/lib/support/backoff.c +87 -0
- data/src/core/lib/support/backoff.h +71 -0
- data/src/core/lib/support/block_annotate.h +48 -0
- data/src/core/lib/support/cmdline.c +345 -0
- data/src/core/lib/support/cpu_iphone.c +49 -0
- data/src/core/lib/support/cpu_linux.c +83 -0
- data/src/core/lib/support/cpu_posix.c +72 -0
- data/src/core/lib/support/cpu_windows.c +47 -0
- data/src/core/lib/support/env.h +58 -0
- data/src/core/lib/support/env_linux.c +89 -0
- data/src/core/lib/support/env_posix.c +57 -0
- data/src/core/lib/support/env_windows.c +79 -0
- data/src/core/lib/support/histogram.c +243 -0
- data/src/core/lib/support/host_port.c +110 -0
- data/src/core/lib/support/log.c +103 -0
- data/src/core/lib/support/log_android.c +87 -0
- data/src/core/lib/support/log_linux.c +105 -0
- data/src/core/lib/support/log_posix.c +106 -0
- data/src/core/lib/support/log_windows.c +112 -0
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/murmur_hash.c +94 -0
- data/src/core/lib/support/murmur_hash.h +44 -0
- data/src/core/lib/support/spinlock.h +52 -0
- data/src/core/lib/support/stack_lockfree.c +185 -0
- data/src/core/lib/support/stack_lockfree.h +53 -0
- data/src/core/lib/support/string.c +315 -0
- data/src/core/lib/support/string.h +128 -0
- data/src/core/lib/support/string_posix.c +86 -0
- data/src/core/lib/support/string_util_windows.c +94 -0
- data/src/core/lib/support/string_windows.c +83 -0
- data/src/core/lib/support/string_windows.h +47 -0
- data/src/core/lib/support/subprocess_posix.c +114 -0
- data/src/core/lib/support/subprocess_windows.c +141 -0
- data/src/core/lib/support/sync.c +137 -0
- data/src/core/lib/support/sync_posix.c +113 -0
- data/src/core/lib/support/sync_windows.c +133 -0
- data/src/core/lib/support/thd.c +64 -0
- data/src/core/lib/support/thd_internal.h +39 -0
- data/src/core/lib/support/thd_posix.c +95 -0
- data/src/core/lib/support/thd_windows.c +117 -0
- data/src/core/lib/support/time.c +262 -0
- data/src/core/lib/support/time_posix.c +176 -0
- data/src/core/lib/support/time_precise.c +89 -0
- data/src/core/lib/support/time_precise.h +42 -0
- data/src/core/lib/support/time_windows.c +116 -0
- data/src/core/lib/support/tls_pthread.c +45 -0
- data/src/core/lib/support/tmpfile.h +53 -0
- data/src/core/lib/support/tmpfile_msys.c +73 -0
- data/src/core/lib/support/tmpfile_posix.c +85 -0
- data/src/core/lib/support/tmpfile_windows.c +84 -0
- data/src/core/lib/support/wrap_memcpy.c +55 -0
- data/src/core/lib/surface/alarm.c +87 -0
- data/src/core/lib/surface/api_trace.c +36 -0
- data/src/core/lib/surface/api_trace.h +65 -0
- data/src/core/lib/surface/byte_buffer.c +103 -0
- data/src/core/lib/surface/byte_buffer_reader.c +140 -0
- data/src/core/lib/surface/call.c +1835 -0
- data/src/core/lib/surface/call.h +135 -0
- data/src/core/lib/surface/call_details.c +56 -0
- data/src/core/lib/surface/call_log_batch.c +131 -0
- data/src/core/lib/surface/call_test_only.h +64 -0
- data/src/core/lib/surface/channel.c +434 -0
- data/src/core/lib/surface/channel.h +99 -0
- data/src/core/lib/surface/channel_init.c +140 -0
- data/src/core/lib/surface/channel_init.h +96 -0
- data/src/core/lib/surface/channel_ping.c +80 -0
- data/src/core/lib/surface/channel_stack_type.c +54 -0
- data/src/core/lib/surface/channel_stack_type.h +58 -0
- data/src/core/lib/surface/completion_queue.c +692 -0
- data/src/core/lib/surface/completion_queue.h +102 -0
- data/src/core/lib/surface/completion_queue_factory.c +77 -0
- data/src/core/lib/surface/completion_queue_factory.h +51 -0
- data/src/core/lib/surface/event_string.c +81 -0
- data/src/core/lib/surface/event_string.h +42 -0
- data/src/core/lib/surface/init.c +261 -0
- data/src/core/lib/surface/init.h +42 -0
- data/src/core/lib/surface/init_secure.c +94 -0
- data/src/core/lib/surface/lame_client.c +188 -0
- data/src/core/lib/surface/lame_client.h +41 -0
- data/src/core/lib/surface/metadata_array.c +49 -0
- data/src/core/lib/surface/server.c +1529 -0
- data/src/core/lib/surface/server.h +71 -0
- data/src/core/lib/surface/validate_metadata.c +108 -0
- data/src/core/lib/surface/validate_metadata.h +43 -0
- data/src/core/lib/surface/version.c +41 -0
- data/src/core/lib/transport/bdp_estimator.c +104 -0
- data/src/core/lib/transport/bdp_estimator.h +76 -0
- data/src/core/lib/transport/byte_stream.c +81 -0
- data/src/core/lib/transport/byte_stream.h +85 -0
- data/src/core/lib/transport/connectivity_state.c +219 -0
- data/src/core/lib/transport/connectivity_state.h +101 -0
- data/src/core/lib/transport/error_utils.c +124 -0
- data/src/core/lib/transport/error_utils.h +56 -0
- data/src/core/lib/transport/http2_errors.h +56 -0
- data/src/core/lib/transport/metadata.c +529 -0
- data/src/core/lib/transport/metadata.h +186 -0
- data/src/core/lib/transport/metadata_batch.c +328 -0
- data/src/core/lib/transport/metadata_batch.h +166 -0
- data/src/core/lib/transport/pid_controller.c +78 -0
- data/src/core/lib/transport/pid_controller.h +77 -0
- data/src/core/lib/transport/service_config.c +266 -0
- data/src/core/lib/transport/service_config.h +77 -0
- data/src/core/lib/transport/static_metadata.c +801 -0
- data/src/core/lib/transport/static_metadata.h +557 -0
- data/src/core/lib/transport/status_conversion.c +113 -0
- data/src/core/lib/transport/status_conversion.h +49 -0
- data/src/core/lib/transport/timeout_encoding.c +190 -0
- data/src/core/lib/transport/timeout_encoding.h +49 -0
- data/src/core/lib/transport/transport.c +282 -0
- data/src/core/lib/transport/transport.h +354 -0
- data/src/core/lib/transport/transport_impl.h +90 -0
- data/src/core/lib/transport/transport_op_string.c +217 -0
- data/src/core/plugin_registry/grpc_plugin_registry.c +82 -0
- data/src/core/tsi/fake_transport_security.c +527 -0
- data/src/core/tsi/fake_transport_security.h +61 -0
- data/src/core/tsi/ssl_transport_security.c +1533 -0
- data/src/core/tsi/ssl_transport_security.h +214 -0
- data/src/core/tsi/ssl_types.h +55 -0
- data/src/core/tsi/transport_security.c +266 -0
- data/src/core/tsi/transport_security.h +111 -0
- data/src/core/tsi/transport_security_interface.h +353 -0
- data/src/ruby/bin/apis/google/protobuf/empty.rb +44 -0
- data/src/ruby/bin/apis/pubsub_demo.rb +256 -0
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +174 -0
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +103 -0
- data/src/ruby/bin/math_client.rb +147 -0
- data/src/ruby/bin/math_pb.rb +32 -0
- data/src/ruby/bin/math_server.rb +206 -0
- data/src/ruby/bin/math_services_pb.rb +66 -0
- data/src/ruby/bin/noproto_client.rb +108 -0
- data/src/ruby/bin/noproto_server.rb +112 -0
- data/src/ruby/ext/grpc/extconf.rb +131 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.c +77 -0
- data/src/ruby/ext/grpc/rb_byte_buffer.h +50 -0
- data/src/ruby/ext/grpc/rb_call.c +1009 -0
- data/src/ruby/ext/grpc/rb_call.h +66 -0
- data/src/ruby/ext/grpc/rb_call_credentials.c +295 -0
- data/src/ruby/ext/grpc/rb_call_credentials.h +46 -0
- data/src/ruby/ext/grpc/rb_channel.c +662 -0
- data/src/ruby/ext/grpc/rb_channel.h +49 -0
- data/src/ruby/ext/grpc/rb_channel_args.c +168 -0
- data/src/ruby/ext/grpc/rb_channel_args.h +53 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.c +268 -0
- data/src/ruby/ext/grpc/rb_channel_credentials.h +47 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +117 -0
- data/src/ruby/ext/grpc/rb_completion_queue.h +51 -0
- data/src/ruby/ext/grpc/rb_compression_options.c +472 -0
- data/src/ruby/ext/grpc/rb_compression_options.h +44 -0
- data/src/ruby/ext/grpc/rb_event_thread.c +158 -0
- data/src/ruby/ext/grpc/rb_event_thread.h +37 -0
- data/src/ruby/ext/grpc/rb_grpc.c +343 -0
- data/src/ruby/ext/grpc/rb_grpc.h +87 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +634 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +955 -0
- data/src/ruby/ext/grpc/rb_loader.c +72 -0
- data/src/ruby/ext/grpc/rb_loader.h +40 -0
- data/src/ruby/ext/grpc/rb_server.c +359 -0
- data/src/ruby/ext/grpc/rb_server.h +47 -0
- data/src/ruby/ext/grpc/rb_server_credentials.c +258 -0
- data/src/ruby/ext/grpc/rb_server_credentials.h +47 -0
- data/src/ruby/lib/grpc/core/time_consts.rb +71 -0
- data/src/ruby/lib/grpc/errors.rb +215 -0
- data/src/ruby/lib/grpc/generic/active_call.rb +547 -0
- data/src/ruby/lib/grpc/generic/bidi_call.rb +229 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +463 -0
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +173 -0
- data/src/ruby/lib/grpc/generic/rpc_server.rb +476 -0
- data/src/ruby/lib/grpc/generic/service.rb +225 -0
- data/src/ruby/lib/grpc/grpc.rb +39 -0
- data/src/ruby/lib/grpc/grpc_c.bundle +0 -0
- data/src/ruby/lib/grpc/logconfig.rb +59 -0
- data/src/ruby/lib/grpc/notifier.rb +60 -0
- data/src/ruby/lib/grpc/version.rb +33 -0
- data/src/ruby/lib/grpc.rb +49 -0
- data/src/ruby/pb/README.md +42 -0
- data/src/ruby/pb/generate_proto_ruby.sh +58 -0
- data/src/ruby/pb/grpc/health/checker.rb +77 -0
- data/src/ruby/pb/grpc/health/v1/health_pb.rb +28 -0
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +56 -0
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +58 -0
- data/src/ruby/pb/grpc/testing/metrics_pb.rb +28 -0
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +64 -0
- data/src/ruby/pb/src/proto/grpc/testing/empty_pb.rb +15 -0
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +82 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +14 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +117 -0
- data/src/ruby/pb/test/client.rb +779 -0
- data/src/ruby/pb/test/server.rb +267 -0
- data/src/ruby/spec/call_credentials_spec.rb +57 -0
- data/src/ruby/spec/call_spec.rb +162 -0
- data/src/ruby/spec/channel_connection_spec.rb +141 -0
- data/src/ruby/spec/channel_credentials_spec.rb +97 -0
- data/src/ruby/spec/channel_spec.rb +205 -0
- data/src/ruby/spec/client_server_spec.rb +491 -0
- 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 +632 -0
- data/src/ruby/spec/generic/client_stub_spec.rb +556 -0
- data/src/ruby/spec/generic/rpc_desc_spec.rb +351 -0
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +142 -0
- data/src/ruby/spec/generic/rpc_server_spec.rb +524 -0
- data/src/ruby/spec/generic/service_spec.rb +276 -0
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +71 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +222 -0
- data/src/ruby/spec/server_credentials_spec.rb +94 -0
- data/src/ruby/spec/server_spec.rb +205 -0
- data/src/ruby/spec/spec_helper.rb +71 -0
- data/src/ruby/spec/testdata/README +1 -0
- data/src/ruby/spec/testdata/ca.pem +15 -0
- data/src/ruby/spec/testdata/server1.key +16 -0
- data/src/ruby/spec/testdata/server1.pem +16 -0
- data/src/ruby/spec/time_consts_spec.rb +89 -0
- data/third_party/boringssl/crypto/aes/aes.c +1142 -0
- data/third_party/boringssl/crypto/aes/internal.h +87 -0
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +112 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +263 -0
- data/third_party/boringssl/crypto/asn1/a_bool.c +110 -0
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +282 -0
- data/third_party/boringssl/crypto/asn1/a_dup.c +111 -0
- data/third_party/boringssl/crypto/asn1/a_enum.c +181 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +256 -0
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +147 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +460 -0
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +409 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +400 -0
- data/third_party/boringssl/crypto/asn1/a_octet.c +77 -0
- data/third_party/boringssl/crypto/asn1/a_print.c +121 -0
- data/third_party/boringssl/crypto/asn1/a_strnid.c +309 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +206 -0
- data/third_party/boringssl/crypto/asn1/a_type.c +151 -0
- data/third_party/boringssl/crypto/asn1/a_utctm.c +304 -0
- data/third_party/boringssl/crypto/asn1/a_utf8.c +234 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +483 -0
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +63 -0
- data/third_party/boringssl/crypto/asn1/asn1_par.c +80 -0
- data/third_party/boringssl/crypto/asn1/asn_pack.c +105 -0
- data/third_party/boringssl/crypto/asn1/f_enum.c +93 -0
- data/third_party/boringssl/crypto/asn1/f_int.c +97 -0
- data/third_party/boringssl/crypto/asn1/f_string.c +91 -0
- data/third_party/boringssl/crypto/asn1/t_bitst.c +103 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1221 -0
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +665 -0
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +246 -0
- data/third_party/boringssl/crypto/asn1/tasn_new.c +381 -0
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +131 -0
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
- data/third_party/boringssl/crypto/asn1/x_bignum.c +153 -0
- data/third_party/boringssl/crypto/asn1/x_long.c +197 -0
- data/third_party/boringssl/crypto/base64/base64.c +442 -0
- data/third_party/boringssl/crypto/bio/bio.c +598 -0
- data/third_party/boringssl/crypto/bio/bio_mem.c +328 -0
- data/third_party/boringssl/crypto/bio/buffer.c +496 -0
- data/third_party/boringssl/crypto/bio/connect.c +553 -0
- data/third_party/boringssl/crypto/bio/fd.c +277 -0
- data/third_party/boringssl/crypto/bio/file.c +313 -0
- data/third_party/boringssl/crypto/bio/hexdump.c +191 -0
- data/third_party/boringssl/crypto/bio/internal.h +111 -0
- data/third_party/boringssl/crypto/bio/pair.c +803 -0
- data/third_party/boringssl/crypto/bio/printf.c +119 -0
- data/third_party/boringssl/crypto/bio/socket.c +203 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
- data/third_party/boringssl/crypto/bn/add.c +377 -0
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +531 -0
- data/third_party/boringssl/crypto/bn/bn.c +379 -0
- data/third_party/boringssl/crypto/bn/bn_asn1.c +80 -0
- data/third_party/boringssl/crypto/bn/cmp.c +225 -0
- data/third_party/boringssl/crypto/bn/convert.c +599 -0
- data/third_party/boringssl/crypto/bn/ctx.c +311 -0
- data/third_party/boringssl/crypto/bn/div.c +671 -0
- data/third_party/boringssl/crypto/bn/exponentiation.c +1258 -0
- data/third_party/boringssl/crypto/bn/gcd.c +628 -0
- data/third_party/boringssl/crypto/bn/generic.c +703 -0
- data/third_party/boringssl/crypto/bn/internal.h +245 -0
- data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +410 -0
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +869 -0
- data/third_party/boringssl/crypto/bn/prime.c +861 -0
- data/third_party/boringssl/crypto/bn/random.c +340 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +319 -0
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
- data/third_party/boringssl/crypto/bn/shift.c +299 -0
- data/third_party/boringssl/crypto/bn/sqrt.c +504 -0
- data/third_party/boringssl/crypto/buf/buf.c +239 -0
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +263 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +473 -0
- data/third_party/boringssl/crypto/bytestring/cbs.c +439 -0
- data/third_party/boringssl/crypto/bytestring/internal.h +75 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +167 -0
- data/third_party/boringssl/crypto/cipher/aead.c +156 -0
- data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
- data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
- data/third_party/boringssl/crypto/cipher/e_aes.c +1717 -0
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +300 -0
- data/third_party/boringssl/crypto/cipher/e_des.c +205 -0
- data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
- data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
- data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +403 -0
- data/third_party/boringssl/crypto/cipher/e_tls.c +602 -0
- data/third_party/boringssl/crypto/cipher/internal.h +162 -0
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +553 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
- data/third_party/boringssl/crypto/conf/conf.c +788 -0
- data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
- data/third_party/boringssl/crypto/conf/internal.h +31 -0
- 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 +38 -0
- data/third_party/boringssl/crypto/cpu-intel.c +263 -0
- data/third_party/boringssl/crypto/cpu-ppc64le.c +40 -0
- data/third_party/boringssl/crypto/crypto.c +164 -0
- data/third_party/boringssl/crypto/curve25519/curve25519.c +4944 -0
- data/third_party/boringssl/crypto/curve25519/internal.h +109 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +246 -0
- data/third_party/boringssl/crypto/des/des.c +771 -0
- data/third_party/boringssl/crypto/des/internal.h +212 -0
- data/third_party/boringssl/crypto/dh/check.c +218 -0
- data/third_party/boringssl/crypto/dh/dh.c +487 -0
- data/third_party/boringssl/crypto/dh/dh_asn1.c +160 -0
- data/third_party/boringssl/crypto/dh/params.c +253 -0
- data/third_party/boringssl/crypto/digest/digest.c +248 -0
- data/third_party/boringssl/crypto/digest/digests.c +321 -0
- data/third_party/boringssl/crypto/digest/internal.h +112 -0
- data/third_party/boringssl/crypto/digest/md32_common.h +262 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +964 -0
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +339 -0
- data/third_party/boringssl/crypto/ec/ec.c +847 -0
- data/third_party/boringssl/crypto/ec/ec_asn1.c +549 -0
- data/third_party/boringssl/crypto/ec/ec_key.c +479 -0
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +308 -0
- data/third_party/boringssl/crypto/ec/internal.h +276 -0
- data/third_party/boringssl/crypto/ec/oct.c +428 -0
- data/third_party/boringssl/crypto/ec/p224-64.c +1187 -0
- data/third_party/boringssl/crypto/ec/p256-64.c +1741 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9543 -0
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +574 -0
- data/third_party/boringssl/crypto/ec/simple.c +1117 -0
- data/third_party/boringssl/crypto/ec/util-64.c +109 -0
- data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
- data/third_party/boringssl/crypto/ecdh/ecdh.c +159 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +478 -0
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +227 -0
- data/third_party/boringssl/crypto/engine/engine.c +96 -0
- data/third_party/boringssl/crypto/err/err.c +756 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
- data/third_party/boringssl/crypto/evp/evp.c +367 -0
- data/third_party/boringssl/crypto/evp/evp_asn1.c +337 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +448 -0
- data/third_party/boringssl/crypto/evp/internal.h +237 -0
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +268 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +236 -0
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +257 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +673 -0
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +200 -0
- data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/evp/sign.c +151 -0
- data/third_party/boringssl/crypto/ex_data.c +292 -0
- data/third_party/boringssl/crypto/hkdf/hkdf.c +110 -0
- data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
- data/third_party/boringssl/crypto/internal.h +527 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +342 -0
- data/third_party/boringssl/crypto/md4/md4.c +234 -0
- data/third_party/boringssl/crypto/md5/md5.c +275 -0
- data/third_party/boringssl/crypto/mem.c +200 -0
- data/third_party/boringssl/crypto/modes/cbc.c +216 -0
- data/third_party/boringssl/crypto/modes/cfb.c +230 -0
- data/third_party/boringssl/crypto/modes/ctr.c +219 -0
- data/third_party/boringssl/crypto/modes/gcm.c +1288 -0
- data/third_party/boringssl/crypto/modes/internal.h +358 -0
- data/third_party/boringssl/crypto/modes/ofb.c +95 -0
- 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 +640 -0
- data/third_party/boringssl/crypto/obj/obj_dat.h +5254 -0
- data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
- data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
- data/third_party/boringssl/crypto/pem/pem_all.c +262 -0
- data/third_party/boringssl/crypto/pem/pem_info.c +381 -0
- data/third_party/boringssl/crypto/pem/pem_lib.c +778 -0
- data/third_party/boringssl/crypto/pem/pem_oth.c +88 -0
- data/third_party/boringssl/crypto/pem/pem_pk8.c +257 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +227 -0
- data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
- data/third_party/boringssl/crypto/pem/pem_xaux.c +67 -0
- data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +151 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +441 -0
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1219 -0
- data/third_party/boringssl/crypto/poly1305/internal.h +40 -0
- data/third_party/boringssl/crypto/poly1305/poly1305.c +324 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +304 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +890 -0
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/internal.h +32 -0
- data/third_party/boringssl/crypto/rand/rand.c +244 -0
- data/third_party/boringssl/crypto/rand/urandom.c +221 -0
- data/third_party/boringssl/crypto/rand/windows.c +53 -0
- data/third_party/boringssl/crypto/rc4/rc4.c +98 -0
- data/third_party/boringssl/crypto/refcount_c11.c +67 -0
- data/third_party/boringssl/crypto/refcount_lock.c +53 -0
- data/third_party/boringssl/crypto/rsa/blinding.c +264 -0
- data/third_party/boringssl/crypto/rsa/internal.h +148 -0
- data/third_party/boringssl/crypto/rsa/padding.c +708 -0
- data/third_party/boringssl/crypto/rsa/rsa.c +830 -0
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +446 -0
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +1139 -0
- data/third_party/boringssl/crypto/sha/sha1.c +337 -0
- data/third_party/boringssl/crypto/sha/sha256.c +327 -0
- data/third_party/boringssl/crypto/sha/sha512.c +607 -0
- data/third_party/boringssl/crypto/stack/stack.c +377 -0
- data/third_party/boringssl/crypto/thread.c +110 -0
- data/third_party/boringssl/crypto/thread_none.c +59 -0
- data/third_party/boringssl/crypto/thread_pthread.c +176 -0
- data/third_party/boringssl/crypto/thread_win.c +237 -0
- data/third_party/boringssl/crypto/time_support.c +206 -0
- data/third_party/boringssl/crypto/x509/a_digest.c +96 -0
- data/third_party/boringssl/crypto/x509/a_sign.c +135 -0
- data/third_party/boringssl/crypto/x509/a_strex.c +633 -0
- data/third_party/boringssl/crypto/x509/a_verify.c +127 -0
- data/third_party/boringssl/crypto/x509/algorithm.c +137 -0
- data/third_party/boringssl/crypto/x509/asn1_gen.c +818 -0
- data/third_party/boringssl/crypto/x509/by_dir.c +453 -0
- data/third_party/boringssl/crypto/x509/by_file.c +275 -0
- data/third_party/boringssl/crypto/x509/charmap.h +15 -0
- data/third_party/boringssl/crypto/x509/i2d_pr.c +83 -0
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_crl.c +128 -0
- data/third_party/boringssl/crypto/x509/t_req.c +246 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +506 -0
- data/third_party/boringssl/crypto/x509/t_x509a.c +111 -0
- data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
- data/third_party/boringssl/crypto/x509/x509.c +157 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +381 -0
- data/third_party/boringssl/crypto/x509/x509_cmp.c +474 -0
- data/third_party/boringssl/crypto/x509/x509_d2.c +106 -0
- data/third_party/boringssl/crypto/x509/x509_def.c +98 -0
- data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +690 -0
- data/third_party/boringssl/crypto/x509/x509_obj.c +197 -0
- data/third_party/boringssl/crypto/x509/x509_r2x.c +117 -0
- data/third_party/boringssl/crypto/x509/x509_req.c +322 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +326 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +211 -0
- data/third_party/boringssl/crypto/x509/x509_v3.c +278 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2436 -0
- data/third_party/boringssl/crypto/x509/x509_vpm.c +647 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +170 -0
- data/third_party/boringssl/crypto/x509/x509name.c +386 -0
- data/third_party/boringssl/crypto/x509/x509rset.c +81 -0
- data/third_party/boringssl/crypto/x509/x509spki.c +137 -0
- data/third_party/boringssl/crypto/x509/x509type.c +126 -0
- data/third_party/boringssl/crypto/x509/x_algor.c +151 -0
- data/third_party/boringssl/crypto/x509/x_all.c +501 -0
- data/third_party/boringssl/crypto/x509/x_attrib.c +111 -0
- data/third_party/boringssl/crypto/x509/x_crl.c +539 -0
- data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
- data/third_party/boringssl/crypto/x509/x_info.c +98 -0
- data/third_party/boringssl/crypto/x509/x_name.c +534 -0
- data/third_party/boringssl/crypto/x509/x_pkey.c +103 -0
- data/third_party/boringssl/crypto/x509/x_pubkey.c +368 -0
- data/third_party/boringssl/crypto/x509/x_req.c +109 -0
- data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
- data/third_party/boringssl/crypto/x509/x_spki.c +80 -0
- data/third_party/boringssl/crypto/x509/x_val.c +69 -0
- data/third_party/boringssl/crypto/x509/x_x509.c +289 -0
- data/third_party/boringssl/crypto/x509/x_x509a.c +205 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +135 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +284 -0
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +130 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +217 -0
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +164 -0
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +130 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +188 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +829 -0
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +204 -0
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +72 -0
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +614 -0
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +133 -0
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +462 -0
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +496 -0
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +561 -0
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +100 -0
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +148 -0
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +250 -0
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +119 -0
- data/third_party/boringssl/crypto/x509v3/v3_info.c +212 -0
- data/third_party/boringssl/crypto/x509v3/v3_int.c +91 -0
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +362 -0
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +482 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +317 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +57 -0
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +139 -0
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +110 -0
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +154 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +229 -0
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +874 -0
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +152 -0
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +274 -0
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1327 -0
- data/third_party/boringssl/include/openssl/aead.h +345 -0
- data/third_party/boringssl/include/openssl/aes.h +158 -0
- data/third_party/boringssl/include/openssl/arm_arch.h +121 -0
- data/third_party/boringssl/include/openssl/asn1.h +1038 -0
- data/third_party/boringssl/include/openssl/asn1_mac.h +18 -0
- data/third_party/boringssl/include/openssl/asn1t.h +896 -0
- data/third_party/boringssl/include/openssl/base.h +412 -0
- data/third_party/boringssl/include/openssl/base64.h +187 -0
- data/third_party/boringssl/include/openssl/bio.h +926 -0
- data/third_party/boringssl/include/openssl/blowfish.h +93 -0
- data/third_party/boringssl/include/openssl/bn.h +955 -0
- data/third_party/boringssl/include/openssl/buf.h +133 -0
- data/third_party/boringssl/include/openssl/buffer.h +18 -0
- data/third_party/boringssl/include/openssl/bytestring.h +437 -0
- data/third_party/boringssl/include/openssl/cast.h +96 -0
- data/third_party/boringssl/include/openssl/chacha.h +37 -0
- data/third_party/boringssl/include/openssl/cipher.h +588 -0
- data/third_party/boringssl/include/openssl/cmac.h +87 -0
- data/third_party/boringssl/include/openssl/conf.h +181 -0
- data/third_party/boringssl/include/openssl/cpu.h +181 -0
- data/third_party/boringssl/include/openssl/crypto.h +94 -0
- data/third_party/boringssl/include/openssl/curve25519.h +183 -0
- data/third_party/boringssl/include/openssl/des.h +177 -0
- data/third_party/boringssl/include/openssl/dh.h +297 -0
- data/third_party/boringssl/include/openssl/digest.h +285 -0
- data/third_party/boringssl/include/openssl/dsa.h +436 -0
- data/third_party/boringssl/include/openssl/dtls1.h +16 -0
- data/third_party/boringssl/include/openssl/ec.h +406 -0
- data/third_party/boringssl/include/openssl/ec_key.h +337 -0
- data/third_party/boringssl/include/openssl/ecdh.h +102 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +217 -0
- data/third_party/boringssl/include/openssl/engine.h +109 -0
- data/third_party/boringssl/include/openssl/err.h +488 -0
- data/third_party/boringssl/include/openssl/evp.h +797 -0
- data/third_party/boringssl/include/openssl/ex_data.h +213 -0
- data/third_party/boringssl/include/openssl/hkdf.h +64 -0
- data/third_party/boringssl/include/openssl/hmac.h +174 -0
- data/third_party/boringssl/include/openssl/lhash.h +192 -0
- data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
- data/third_party/boringssl/include/openssl/md4.h +106 -0
- data/third_party/boringssl/include/openssl/md5.h +107 -0
- data/third_party/boringssl/include/openssl/mem.h +150 -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 +226 -0
- data/third_party/boringssl/include/openssl/obj_mac.h +18 -0
- data/third_party/boringssl/include/openssl/objects.h +18 -0
- data/third_party/boringssl/include/openssl/opensslconf.h +60 -0
- data/third_party/boringssl/include/openssl/opensslv.h +18 -0
- data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
- data/third_party/boringssl/include/openssl/pem.h +517 -0
- data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
- data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +236 -0
- data/third_party/boringssl/include/openssl/poly1305.h +51 -0
- data/third_party/boringssl/include/openssl/rand.h +122 -0
- data/third_party/boringssl/include/openssl/rc4.h +96 -0
- data/third_party/boringssl/include/openssl/ripemd.h +107 -0
- data/third_party/boringssl/include/openssl/rsa.h +699 -0
- data/third_party/boringssl/include/openssl/safestack.h +16 -0
- data/third_party/boringssl/include/openssl/sha.h +260 -0
- data/third_party/boringssl/include/openssl/srtp.h +18 -0
- data/third_party/boringssl/include/openssl/ssl.h +4826 -0
- data/third_party/boringssl/include/openssl/ssl3.h +434 -0
- data/third_party/boringssl/include/openssl/stack.h +293 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +3902 -0
- data/third_party/boringssl/include/openssl/thread.h +191 -0
- data/third_party/boringssl/include/openssl/time_support.h +91 -0
- data/third_party/boringssl/include/openssl/tls1.h +657 -0
- data/third_party/boringssl/include/openssl/type_check.h +91 -0
- data/third_party/boringssl/include/openssl/x509.h +1299 -0
- data/third_party/boringssl/include/openssl/x509_vfy.h +618 -0
- data/third_party/boringssl/include/openssl/x509v3.h +819 -0
- data/third_party/boringssl/ssl/custom_extensions.c +255 -0
- data/third_party/boringssl/ssl/d1_both.c +845 -0
- data/third_party/boringssl/ssl/d1_lib.c +270 -0
- data/third_party/boringssl/ssl/d1_pkt.c +419 -0
- data/third_party/boringssl/ssl/d1_srtp.c +236 -0
- data/third_party/boringssl/ssl/dtls_method.c +203 -0
- data/third_party/boringssl/ssl/dtls_record.c +309 -0
- data/third_party/boringssl/ssl/handshake_client.c +2002 -0
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +1551 -0
- data/third_party/boringssl/ssl/s3_both.c +745 -0
- data/third_party/boringssl/ssl/s3_enc.c +412 -0
- data/third_party/boringssl/ssl/s3_lib.c +336 -0
- data/third_party/boringssl/ssl/s3_pkt.c +497 -0
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +329 -0
- data/third_party/boringssl/ssl/ssl_asn1.c +748 -0
- data/third_party/boringssl/ssl/ssl_buffer.c +311 -0
- data/third_party/boringssl/ssl/ssl_cert.c +814 -0
- data/third_party/boringssl/ssl/ssl_cipher.c +2062 -0
- data/third_party/boringssl/ssl/ssl_ecdh.c +610 -0
- data/third_party/boringssl/ssl/ssl_file.c +586 -0
- data/third_party/boringssl/ssl/ssl_lib.c +3063 -0
- data/third_party/boringssl/ssl/ssl_rsa.c +793 -0
- data/third_party/boringssl/ssl/ssl_session.c +985 -0
- data/third_party/boringssl/ssl/ssl_stat.c +509 -0
- data/third_party/boringssl/ssl/t1_enc.c +547 -0
- data/third_party/boringssl/ssl/t1_lib.c +3279 -0
- 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/tls_method.c +245 -0
- data/third_party/boringssl/ssl/tls_record.c +461 -0
- data/third_party/cares/ares_build.h +264 -0
- data/third_party/cares/cares/ares.h +636 -0
- data/third_party/cares/cares/ares__close_sockets.c +61 -0
- data/third_party/cares/cares/ares__get_hostent.c +261 -0
- data/third_party/cares/cares/ares__read_line.c +73 -0
- data/third_party/cares/cares/ares__timeval.c +111 -0
- data/third_party/cares/cares/ares_cancel.c +63 -0
- data/third_party/cares/cares/ares_create_query.c +202 -0
- data/third_party/cares/cares/ares_data.c +221 -0
- data/third_party/cares/cares/ares_data.h +72 -0
- data/third_party/cares/cares/ares_destroy.c +108 -0
- data/third_party/cares/cares/ares_dns.h +103 -0
- data/third_party/cares/cares/ares_expand_name.c +205 -0
- data/third_party/cares/cares/ares_expand_string.c +70 -0
- data/third_party/cares/cares/ares_fds.c +59 -0
- data/third_party/cares/cares/ares_free_hostent.c +41 -0
- data/third_party/cares/cares/ares_free_string.c +25 -0
- data/third_party/cares/cares/ares_getenv.c +30 -0
- data/third_party/cares/cares/ares_getenv.h +26 -0
- data/third_party/cares/cares/ares_gethostbyaddr.c +294 -0
- data/third_party/cares/cares/ares_gethostbyname.c +518 -0
- data/third_party/cares/cares/ares_getnameinfo.c +422 -0
- data/third_party/cares/cares/ares_getopt.c +122 -0
- data/third_party/cares/cares/ares_getopt.h +53 -0
- data/third_party/cares/cares/ares_getsock.c +66 -0
- data/third_party/cares/cares/ares_inet_net_pton.h +25 -0
- data/third_party/cares/cares/ares_init.c +2146 -0
- data/third_party/cares/cares/ares_iphlpapi.h +221 -0
- data/third_party/cares/cares/ares_ipv6.h +78 -0
- data/third_party/cares/cares/ares_library_init.c +167 -0
- data/third_party/cares/cares/ares_library_init.h +42 -0
- data/third_party/cares/cares/ares_llist.c +63 -0
- data/third_party/cares/cares/ares_llist.h +39 -0
- data/third_party/cares/cares/ares_mkquery.c +24 -0
- data/third_party/cares/cares/ares_nowarn.c +260 -0
- data/third_party/cares/cares/ares_nowarn.h +61 -0
- data/third_party/cares/cares/ares_options.c +402 -0
- data/third_party/cares/cares/ares_parse_a_reply.c +264 -0
- data/third_party/cares/cares/ares_parse_aaaa_reply.c +264 -0
- data/third_party/cares/cares/ares_parse_mx_reply.c +170 -0
- data/third_party/cares/cares/ares_parse_naptr_reply.c +188 -0
- data/third_party/cares/cares/ares_parse_ns_reply.c +183 -0
- data/third_party/cares/cares/ares_parse_ptr_reply.c +219 -0
- data/third_party/cares/cares/ares_parse_soa_reply.c +133 -0
- data/third_party/cares/cares/ares_parse_srv_reply.c +179 -0
- data/third_party/cares/cares/ares_parse_txt_reply.c +220 -0
- data/third_party/cares/cares/ares_platform.c +11035 -0
- data/third_party/cares/cares/ares_platform.h +43 -0
- data/third_party/cares/cares/ares_private.h +363 -0
- data/third_party/cares/cares/ares_process.c +1359 -0
- data/third_party/cares/cares/ares_query.c +186 -0
- data/third_party/cares/cares/ares_rules.h +125 -0
- data/third_party/cares/cares/ares_search.c +316 -0
- data/third_party/cares/cares/ares_send.c +131 -0
- data/third_party/cares/cares/ares_setup.h +217 -0
- data/third_party/cares/cares/ares_strcasecmp.c +66 -0
- data/third_party/cares/cares/ares_strcasecmp.h +30 -0
- data/third_party/cares/cares/ares_strdup.c +49 -0
- data/third_party/cares/cares/ares_strdup.h +24 -0
- data/third_party/cares/cares/ares_strerror.c +56 -0
- data/third_party/cares/cares/ares_timeout.c +88 -0
- data/third_party/cares/cares/ares_version.c +11 -0
- data/third_party/cares/cares/ares_version.h +24 -0
- data/third_party/cares/cares/ares_writev.c +79 -0
- data/third_party/cares/cares/bitncmp.c +59 -0
- data/third_party/cares/cares/bitncmp.h +26 -0
- data/third_party/cares/cares/config-win32.h +377 -0
- data/third_party/cares/cares/inet_net_pton.c +450 -0
- data/third_party/cares/cares/inet_ntop.c +208 -0
- data/third_party/cares/cares/setup_once.h +554 -0
- data/third_party/cares/cares/windows_port.c +22 -0
- data/third_party/cares/config_darwin/ares_config.h +523 -0
- data/third_party/cares/config_linux/ares_config.h +524 -0
- data/third_party/nanopb/pb.h +579 -0
- data/third_party/nanopb/pb_common.c +97 -0
- data/third_party/nanopb/pb_common.h +42 -0
- data/third_party/nanopb/pb_decode.c +1347 -0
- data/third_party/nanopb/pb_decode.h +149 -0
- data/third_party/nanopb/pb_encode.c +696 -0
- data/third_party/nanopb/pb_encode.h +154 -0
- data/third_party/zlib/adler32.c +179 -0
- data/third_party/zlib/compress.c +80 -0
- data/third_party/zlib/crc32.c +425 -0
- data/third_party/zlib/crc32.h +441 -0
- data/third_party/zlib/deflate.c +1967 -0
- data/third_party/zlib/deflate.h +346 -0
- data/third_party/zlib/gzclose.c +25 -0
- data/third_party/zlib/gzguts.h +209 -0
- data/third_party/zlib/gzlib.c +634 -0
- data/third_party/zlib/gzread.c +594 -0
- data/third_party/zlib/gzwrite.c +577 -0
- data/third_party/zlib/infback.c +640 -0
- data/third_party/zlib/inffast.c +340 -0
- data/third_party/zlib/inffast.h +11 -0
- data/third_party/zlib/inffixed.h +94 -0
- data/third_party/zlib/inflate.c +1512 -0
- data/third_party/zlib/inflate.h +122 -0
- data/third_party/zlib/inftrees.c +306 -0
- data/third_party/zlib/inftrees.h +62 -0
- data/third_party/zlib/trees.c +1226 -0
- data/third_party/zlib/trees.h +128 -0
- data/third_party/zlib/uncompr.c +59 -0
- data/third_party/zlib/zconf.h +511 -0
- data/third_party/zlib/zlib.h +1768 -0
- data/third_party/zlib/zutil.c +324 -0
- data/third_party/zlib/zutil.h +253 -0
- metadata +1397 -0
|
@@ -0,0 +1,84 @@
|
|
|
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_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
|
|
35
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_REGISTRY_H
|
|
36
|
+
|
|
37
|
+
#include "src/core/ext/filters/client_channel/resolver_factory.h"
|
|
38
|
+
#include "src/core/lib/iomgr/pollset_set.h"
|
|
39
|
+
|
|
40
|
+
void grpc_resolver_registry_init();
|
|
41
|
+
void grpc_resolver_registry_shutdown(void);
|
|
42
|
+
|
|
43
|
+
/** Set the default URI prefix to \a default_prefix. */
|
|
44
|
+
void grpc_resolver_registry_set_default_prefix(const char *default_prefix);
|
|
45
|
+
|
|
46
|
+
/** Register a resolver type.
|
|
47
|
+
URI's of \a scheme will be resolved with the given resolver.
|
|
48
|
+
If \a priority is greater than zero, then the resolver will be eligible
|
|
49
|
+
to resolve names that are passed in with no scheme. Higher priority
|
|
50
|
+
resolvers will be tried before lower priority schemes. */
|
|
51
|
+
void grpc_register_resolver_type(grpc_resolver_factory *factory);
|
|
52
|
+
|
|
53
|
+
/** Create a resolver given \a target.
|
|
54
|
+
First tries to parse \a target as a URI. If this succeeds, tries
|
|
55
|
+
to locate a registered resolver factory based on the URI scheme.
|
|
56
|
+
If parsing or location fails, prefixes default_prefix from
|
|
57
|
+
grpc_resolver_registry_init to target, and tries again (if default_prefix
|
|
58
|
+
was not NULL).
|
|
59
|
+
If a resolver factory was found, use it to instantiate a resolver and
|
|
60
|
+
return it.
|
|
61
|
+
If a resolver factory was not found, return NULL.
|
|
62
|
+
\a args is a set of channel arguments to be included in the result
|
|
63
|
+
(typically the set of arguments passed in from the client API).
|
|
64
|
+
\a pollset_set is used to drive IO in the name resolution process, it
|
|
65
|
+
should not be NULL. */
|
|
66
|
+
grpc_resolver *grpc_resolver_create(grpc_exec_ctx *exec_ctx, const char *target,
|
|
67
|
+
const grpc_channel_args *args,
|
|
68
|
+
grpc_pollset_set *pollset_set,
|
|
69
|
+
grpc_combiner *combiner);
|
|
70
|
+
|
|
71
|
+
/** Find a resolver factory given a name and return an (owned-by-the-caller)
|
|
72
|
+
* reference to it */
|
|
73
|
+
grpc_resolver_factory *grpc_resolver_factory_lookup(const char *name);
|
|
74
|
+
|
|
75
|
+
/** Given a target, return a (freshly allocated with gpr_malloc) string
|
|
76
|
+
representing the default authority to pass from a client. */
|
|
77
|
+
char *grpc_get_default_authority(grpc_exec_ctx *exec_ctx, const char *target);
|
|
78
|
+
|
|
79
|
+
/** Returns a newly allocated string containing \a target, adding the
|
|
80
|
+
default prefix if needed. */
|
|
81
|
+
char *grpc_resolver_factory_add_default_prefix_if_needed(
|
|
82
|
+
grpc_exec_ctx *exec_ctx, const char *target);
|
|
83
|
+
|
|
84
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_REGISTRY_H */
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2017, 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/filters/client_channel/retry_throttle.h"
|
|
35
|
+
|
|
36
|
+
#include <limits.h>
|
|
37
|
+
#include <string.h>
|
|
38
|
+
|
|
39
|
+
#include <grpc/support/alloc.h>
|
|
40
|
+
#include <grpc/support/atm.h>
|
|
41
|
+
#include <grpc/support/avl.h>
|
|
42
|
+
#include <grpc/support/string_util.h>
|
|
43
|
+
#include <grpc/support/sync.h>
|
|
44
|
+
|
|
45
|
+
//
|
|
46
|
+
// server_retry_throttle_data
|
|
47
|
+
//
|
|
48
|
+
|
|
49
|
+
struct grpc_server_retry_throttle_data {
|
|
50
|
+
gpr_refcount refs;
|
|
51
|
+
int max_milli_tokens;
|
|
52
|
+
int milli_token_ratio;
|
|
53
|
+
gpr_atm milli_tokens;
|
|
54
|
+
// A pointer to the replacement for this grpc_server_retry_throttle_data
|
|
55
|
+
// entry. If non-NULL, then this entry is stale and must not be used.
|
|
56
|
+
// We hold a reference to the replacement.
|
|
57
|
+
gpr_atm replacement;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
static void get_replacement_throttle_data_if_needed(
|
|
61
|
+
grpc_server_retry_throttle_data** throttle_data) {
|
|
62
|
+
while (true) {
|
|
63
|
+
grpc_server_retry_throttle_data* new_throttle_data =
|
|
64
|
+
(grpc_server_retry_throttle_data*)gpr_atm_acq_load(
|
|
65
|
+
&(*throttle_data)->replacement);
|
|
66
|
+
if (new_throttle_data == NULL) return;
|
|
67
|
+
*throttle_data = new_throttle_data;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
bool grpc_server_retry_throttle_data_record_failure(
|
|
72
|
+
grpc_server_retry_throttle_data* throttle_data) {
|
|
73
|
+
// First, check if we are stale and need to be replaced.
|
|
74
|
+
get_replacement_throttle_data_if_needed(&throttle_data);
|
|
75
|
+
// We decrement milli_tokens by 1000 (1 token) for each failure.
|
|
76
|
+
const int new_value = (int)gpr_atm_no_barrier_clamped_add(
|
|
77
|
+
&throttle_data->milli_tokens, (gpr_atm)-1000, (gpr_atm)0,
|
|
78
|
+
(gpr_atm)throttle_data->max_milli_tokens);
|
|
79
|
+
// Retries are allowed as long as the new value is above the threshold
|
|
80
|
+
// (max_milli_tokens / 2).
|
|
81
|
+
return new_value > throttle_data->max_milli_tokens / 2;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void grpc_server_retry_throttle_data_record_success(
|
|
85
|
+
grpc_server_retry_throttle_data* throttle_data) {
|
|
86
|
+
// First, check if we are stale and need to be replaced.
|
|
87
|
+
get_replacement_throttle_data_if_needed(&throttle_data);
|
|
88
|
+
// We increment milli_tokens by milli_token_ratio for each success.
|
|
89
|
+
gpr_atm_no_barrier_clamped_add(
|
|
90
|
+
&throttle_data->milli_tokens, (gpr_atm)throttle_data->milli_token_ratio,
|
|
91
|
+
(gpr_atm)0, (gpr_atm)throttle_data->max_milli_tokens);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_ref(
|
|
95
|
+
grpc_server_retry_throttle_data* throttle_data) {
|
|
96
|
+
gpr_ref(&throttle_data->refs);
|
|
97
|
+
return throttle_data;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void grpc_server_retry_throttle_data_unref(
|
|
101
|
+
grpc_server_retry_throttle_data* throttle_data) {
|
|
102
|
+
if (gpr_unref(&throttle_data->refs)) {
|
|
103
|
+
grpc_server_retry_throttle_data* replacement =
|
|
104
|
+
(grpc_server_retry_throttle_data*)gpr_atm_acq_load(
|
|
105
|
+
&throttle_data->replacement);
|
|
106
|
+
if (replacement != NULL) {
|
|
107
|
+
grpc_server_retry_throttle_data_unref(replacement);
|
|
108
|
+
}
|
|
109
|
+
gpr_free(throttle_data);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
static grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_create(
|
|
114
|
+
int max_milli_tokens, int milli_token_ratio,
|
|
115
|
+
grpc_server_retry_throttle_data* old_throttle_data) {
|
|
116
|
+
grpc_server_retry_throttle_data* throttle_data =
|
|
117
|
+
gpr_malloc(sizeof(*throttle_data));
|
|
118
|
+
memset(throttle_data, 0, sizeof(*throttle_data));
|
|
119
|
+
gpr_ref_init(&throttle_data->refs, 1);
|
|
120
|
+
throttle_data->max_milli_tokens = max_milli_tokens;
|
|
121
|
+
throttle_data->milli_token_ratio = milli_token_ratio;
|
|
122
|
+
int initial_milli_tokens = max_milli_tokens;
|
|
123
|
+
// If there was a pre-existing entry for this server name, initialize
|
|
124
|
+
// the token count by scaling proportionately to the old data. This
|
|
125
|
+
// ensures that if we're already throttling retries on the old scale,
|
|
126
|
+
// we will start out doing the same thing on the new one.
|
|
127
|
+
if (old_throttle_data != NULL) {
|
|
128
|
+
double token_fraction =
|
|
129
|
+
(int)gpr_atm_acq_load(&old_throttle_data->milli_tokens) /
|
|
130
|
+
(double)old_throttle_data->max_milli_tokens;
|
|
131
|
+
initial_milli_tokens = (int)(token_fraction * max_milli_tokens);
|
|
132
|
+
}
|
|
133
|
+
gpr_atm_rel_store(&throttle_data->milli_tokens,
|
|
134
|
+
(gpr_atm)initial_milli_tokens);
|
|
135
|
+
// If there was a pre-existing entry, mark it as stale and give it a
|
|
136
|
+
// pointer to the new entry, which is its replacement.
|
|
137
|
+
if (old_throttle_data != NULL) {
|
|
138
|
+
grpc_server_retry_throttle_data_ref(throttle_data);
|
|
139
|
+
gpr_atm_rel_store(&old_throttle_data->replacement, (gpr_atm)throttle_data);
|
|
140
|
+
}
|
|
141
|
+
return throttle_data;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
//
|
|
145
|
+
// avl vtable for string -> server_retry_throttle_data map
|
|
146
|
+
//
|
|
147
|
+
|
|
148
|
+
static void* copy_server_name(void* key) { return gpr_strdup(key); }
|
|
149
|
+
|
|
150
|
+
static long compare_server_name(void* key1, void* key2) {
|
|
151
|
+
return strcmp(key1, key2);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
static void destroy_server_retry_throttle_data(void* value) {
|
|
155
|
+
grpc_server_retry_throttle_data* throttle_data = value;
|
|
156
|
+
grpc_server_retry_throttle_data_unref(throttle_data);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
static void* copy_server_retry_throttle_data(void* value) {
|
|
160
|
+
grpc_server_retry_throttle_data* throttle_data = value;
|
|
161
|
+
return grpc_server_retry_throttle_data_ref(throttle_data);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
static const gpr_avl_vtable avl_vtable = {
|
|
165
|
+
gpr_free /* destroy_key */, copy_server_name, compare_server_name,
|
|
166
|
+
destroy_server_retry_throttle_data, copy_server_retry_throttle_data};
|
|
167
|
+
|
|
168
|
+
//
|
|
169
|
+
// server_retry_throttle_map
|
|
170
|
+
//
|
|
171
|
+
|
|
172
|
+
static gpr_mu g_mu;
|
|
173
|
+
static gpr_avl g_avl;
|
|
174
|
+
|
|
175
|
+
void grpc_retry_throttle_map_init() {
|
|
176
|
+
gpr_mu_init(&g_mu);
|
|
177
|
+
g_avl = gpr_avl_create(&avl_vtable);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
void grpc_retry_throttle_map_shutdown() {
|
|
181
|
+
gpr_mu_destroy(&g_mu);
|
|
182
|
+
gpr_avl_unref(g_avl);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
grpc_server_retry_throttle_data* grpc_retry_throttle_map_get_data_for_server(
|
|
186
|
+
const char* server_name, int max_milli_tokens, int milli_token_ratio) {
|
|
187
|
+
gpr_mu_lock(&g_mu);
|
|
188
|
+
grpc_server_retry_throttle_data* throttle_data =
|
|
189
|
+
gpr_avl_get(g_avl, (char*)server_name);
|
|
190
|
+
if (throttle_data == NULL) {
|
|
191
|
+
// Entry not found. Create a new one.
|
|
192
|
+
throttle_data = grpc_server_retry_throttle_data_create(
|
|
193
|
+
max_milli_tokens, milli_token_ratio, NULL);
|
|
194
|
+
g_avl = gpr_avl_add(g_avl, (char*)server_name, throttle_data);
|
|
195
|
+
} else {
|
|
196
|
+
if (throttle_data->max_milli_tokens != max_milli_tokens ||
|
|
197
|
+
throttle_data->milli_token_ratio != milli_token_ratio) {
|
|
198
|
+
// Entry found but with old parameters. Create a new one based on
|
|
199
|
+
// the original one.
|
|
200
|
+
throttle_data = grpc_server_retry_throttle_data_create(
|
|
201
|
+
max_milli_tokens, milli_token_ratio, throttle_data);
|
|
202
|
+
g_avl = gpr_avl_add(g_avl, (char*)server_name, throttle_data);
|
|
203
|
+
} else {
|
|
204
|
+
// Entry found. Increase refcount.
|
|
205
|
+
grpc_server_retry_throttle_data_ref(throttle_data);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
gpr_mu_unlock(&g_mu);
|
|
209
|
+
return throttle_data;
|
|
210
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* Copyright 2017, 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_CORE_EXT_FILTERS_CLIENT_CHANNEL_RETRY_THROTTLE_H
|
|
35
|
+
#define GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RETRY_THROTTLE_H
|
|
36
|
+
|
|
37
|
+
#include <stdbool.h>
|
|
38
|
+
|
|
39
|
+
/// Tracks retry throttling data for an individual server name.
|
|
40
|
+
typedef struct grpc_server_retry_throttle_data grpc_server_retry_throttle_data;
|
|
41
|
+
|
|
42
|
+
/// Records a failure. Returns true if it's okay to send a retry.
|
|
43
|
+
bool grpc_server_retry_throttle_data_record_failure(
|
|
44
|
+
grpc_server_retry_throttle_data* throttle_data);
|
|
45
|
+
/// Records a success.
|
|
46
|
+
void grpc_server_retry_throttle_data_record_success(
|
|
47
|
+
grpc_server_retry_throttle_data* throttle_data);
|
|
48
|
+
|
|
49
|
+
grpc_server_retry_throttle_data* grpc_server_retry_throttle_data_ref(
|
|
50
|
+
grpc_server_retry_throttle_data* throttle_data);
|
|
51
|
+
void grpc_server_retry_throttle_data_unref(
|
|
52
|
+
grpc_server_retry_throttle_data* throttle_data);
|
|
53
|
+
|
|
54
|
+
/// Initializes global map of failure data for each server name.
|
|
55
|
+
void grpc_retry_throttle_map_init();
|
|
56
|
+
/// Shuts down global map of failure data for each server name.
|
|
57
|
+
void grpc_retry_throttle_map_shutdown();
|
|
58
|
+
|
|
59
|
+
/// Returns a reference to the failure data for \a server_name, creating
|
|
60
|
+
/// a new entry if needed.
|
|
61
|
+
/// Caller must eventually unref via \a grpc_server_retry_throttle_data_unref().
|
|
62
|
+
grpc_server_retry_throttle_data* grpc_retry_throttle_map_get_data_for_server(
|
|
63
|
+
const char* server_name, int max_milli_tokens, int milli_token_ratio);
|
|
64
|
+
|
|
65
|
+
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RETRY_THROTTLE_H */
|
|
@@ -0,0 +1,835 @@
|
|
|
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/filters/client_channel/subchannel.h"
|
|
35
|
+
|
|
36
|
+
#include <limits.h>
|
|
37
|
+
#include <string.h>
|
|
38
|
+
|
|
39
|
+
#include <grpc/support/alloc.h>
|
|
40
|
+
#include <grpc/support/avl.h>
|
|
41
|
+
#include <grpc/support/string_util.h>
|
|
42
|
+
|
|
43
|
+
#include "src/core/ext/filters/client_channel/client_channel.h"
|
|
44
|
+
#include "src/core/ext/filters/client_channel/parse_address.h"
|
|
45
|
+
#include "src/core/ext/filters/client_channel/proxy_mapper_registry.h"
|
|
46
|
+
#include "src/core/ext/filters/client_channel/subchannel_index.h"
|
|
47
|
+
#include "src/core/ext/filters/client_channel/uri_parser.h"
|
|
48
|
+
#include "src/core/lib/channel/channel_args.h"
|
|
49
|
+
#include "src/core/lib/channel/connected_channel.h"
|
|
50
|
+
#include "src/core/lib/iomgr/sockaddr_utils.h"
|
|
51
|
+
#include "src/core/lib/iomgr/timer.h"
|
|
52
|
+
#include "src/core/lib/profiling/timers.h"
|
|
53
|
+
#include "src/core/lib/slice/slice_internal.h"
|
|
54
|
+
#include "src/core/lib/support/backoff.h"
|
|
55
|
+
#include "src/core/lib/surface/channel.h"
|
|
56
|
+
#include "src/core/lib/surface/channel_init.h"
|
|
57
|
+
#include "src/core/lib/transport/connectivity_state.h"
|
|
58
|
+
|
|
59
|
+
#define INTERNAL_REF_BITS 16
|
|
60
|
+
#define STRONG_REF_MASK (~(gpr_atm)((1 << INTERNAL_REF_BITS) - 1))
|
|
61
|
+
|
|
62
|
+
#define GRPC_SUBCHANNEL_MIN_CONNECT_TIMEOUT_SECONDS 20
|
|
63
|
+
#define GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS 1
|
|
64
|
+
#define GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER 1.6
|
|
65
|
+
#define GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS 120
|
|
66
|
+
#define GRPC_SUBCHANNEL_RECONNECT_JITTER 0.2
|
|
67
|
+
|
|
68
|
+
#define GET_CONNECTED_SUBCHANNEL(subchannel, barrier) \
|
|
69
|
+
((grpc_connected_subchannel *)(gpr_atm_##barrier##_load( \
|
|
70
|
+
&(subchannel)->connected_subchannel)))
|
|
71
|
+
|
|
72
|
+
typedef struct {
|
|
73
|
+
grpc_closure closure;
|
|
74
|
+
grpc_subchannel *subchannel;
|
|
75
|
+
grpc_connectivity_state connectivity_state;
|
|
76
|
+
} state_watcher;
|
|
77
|
+
|
|
78
|
+
typedef struct external_state_watcher {
|
|
79
|
+
grpc_subchannel *subchannel;
|
|
80
|
+
grpc_pollset_set *pollset_set;
|
|
81
|
+
grpc_closure *notify;
|
|
82
|
+
grpc_closure closure;
|
|
83
|
+
struct external_state_watcher *next;
|
|
84
|
+
struct external_state_watcher *prev;
|
|
85
|
+
} external_state_watcher;
|
|
86
|
+
|
|
87
|
+
struct grpc_subchannel {
|
|
88
|
+
grpc_connector *connector;
|
|
89
|
+
|
|
90
|
+
/** refcount
|
|
91
|
+
- lower INTERNAL_REF_BITS bits are for internal references:
|
|
92
|
+
these do not keep the subchannel open.
|
|
93
|
+
- upper remaining bits are for public references: these do
|
|
94
|
+
keep the subchannel open */
|
|
95
|
+
gpr_atm ref_pair;
|
|
96
|
+
|
|
97
|
+
/** non-transport related channel filters */
|
|
98
|
+
const grpc_channel_filter **filters;
|
|
99
|
+
size_t num_filters;
|
|
100
|
+
/** channel arguments */
|
|
101
|
+
grpc_channel_args *args;
|
|
102
|
+
|
|
103
|
+
grpc_subchannel_key *key;
|
|
104
|
+
|
|
105
|
+
/** set during connection */
|
|
106
|
+
grpc_connect_out_args connecting_result;
|
|
107
|
+
|
|
108
|
+
/** callback for connection finishing */
|
|
109
|
+
grpc_closure connected;
|
|
110
|
+
|
|
111
|
+
/** callback for our alarm */
|
|
112
|
+
grpc_closure on_alarm;
|
|
113
|
+
|
|
114
|
+
/** pollset_set tracking who's interested in a connection
|
|
115
|
+
being setup */
|
|
116
|
+
grpc_pollset_set *pollset_set;
|
|
117
|
+
|
|
118
|
+
/** active connection, or null; of type grpc_connected_subchannel */
|
|
119
|
+
gpr_atm connected_subchannel;
|
|
120
|
+
|
|
121
|
+
/** mutex protecting remaining elements */
|
|
122
|
+
gpr_mu mu;
|
|
123
|
+
|
|
124
|
+
/** have we seen a disconnection? */
|
|
125
|
+
bool disconnected;
|
|
126
|
+
/** are we connecting */
|
|
127
|
+
bool connecting;
|
|
128
|
+
/** connectivity state tracking */
|
|
129
|
+
grpc_connectivity_state_tracker state_tracker;
|
|
130
|
+
|
|
131
|
+
external_state_watcher root_external_state_watcher;
|
|
132
|
+
|
|
133
|
+
/** next connect attempt time */
|
|
134
|
+
gpr_timespec next_attempt;
|
|
135
|
+
/** backoff state */
|
|
136
|
+
gpr_backoff backoff_state;
|
|
137
|
+
/** do we have an active alarm? */
|
|
138
|
+
bool have_alarm;
|
|
139
|
+
/** have we started the backoff loop */
|
|
140
|
+
bool backoff_begun;
|
|
141
|
+
/** our alarm */
|
|
142
|
+
grpc_timer alarm;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
struct grpc_subchannel_call {
|
|
146
|
+
grpc_connected_subchannel *connection;
|
|
147
|
+
grpc_closure *schedule_closure_after_destroy;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
#define SUBCHANNEL_CALL_TO_CALL_STACK(call) ((grpc_call_stack *)((call) + 1))
|
|
151
|
+
#define CHANNEL_STACK_FROM_CONNECTION(con) ((grpc_channel_stack *)(con))
|
|
152
|
+
#define CALLSTACK_TO_SUBCHANNEL_CALL(callstack) \
|
|
153
|
+
(((grpc_subchannel_call *)(callstack)) - 1)
|
|
154
|
+
|
|
155
|
+
static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *subchannel,
|
|
156
|
+
grpc_error *error);
|
|
157
|
+
|
|
158
|
+
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
|
|
159
|
+
#define REF_REASON reason
|
|
160
|
+
#define REF_LOG(name, p) \
|
|
161
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "%s: %p ref %d -> %d %s", \
|
|
162
|
+
(name), (p), (p)->refs.count, (p)->refs.count + 1, reason)
|
|
163
|
+
#define UNREF_LOG(name, p) \
|
|
164
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG, "%s: %p unref %d -> %d %s", \
|
|
165
|
+
(name), (p), (p)->refs.count, (p)->refs.count - 1, reason)
|
|
166
|
+
#define REF_MUTATE_EXTRA_ARGS \
|
|
167
|
+
GRPC_SUBCHANNEL_REF_EXTRA_ARGS, const char *purpose
|
|
168
|
+
#define REF_MUTATE_PURPOSE(x) , file, line, reason, x
|
|
169
|
+
#else
|
|
170
|
+
#define REF_REASON ""
|
|
171
|
+
#define REF_LOG(name, p) \
|
|
172
|
+
do { \
|
|
173
|
+
} while (0)
|
|
174
|
+
#define UNREF_LOG(name, p) \
|
|
175
|
+
do { \
|
|
176
|
+
} while (0)
|
|
177
|
+
#define REF_MUTATE_EXTRA_ARGS
|
|
178
|
+
#define REF_MUTATE_PURPOSE(x)
|
|
179
|
+
#endif
|
|
180
|
+
|
|
181
|
+
/*
|
|
182
|
+
* connection implementation
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
static void connection_destroy(grpc_exec_ctx *exec_ctx, void *arg,
|
|
186
|
+
grpc_error *error) {
|
|
187
|
+
grpc_connected_subchannel *c = arg;
|
|
188
|
+
grpc_channel_stack_destroy(exec_ctx, CHANNEL_STACK_FROM_CONNECTION(c));
|
|
189
|
+
gpr_free(c);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
grpc_connected_subchannel *grpc_connected_subchannel_ref(
|
|
193
|
+
grpc_connected_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
194
|
+
GRPC_CHANNEL_STACK_REF(CHANNEL_STACK_FROM_CONNECTION(c), REF_REASON);
|
|
195
|
+
return c;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
void grpc_connected_subchannel_unref(grpc_exec_ctx *exec_ctx,
|
|
199
|
+
grpc_connected_subchannel *c
|
|
200
|
+
GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
201
|
+
GRPC_CHANNEL_STACK_UNREF(exec_ctx, CHANNEL_STACK_FROM_CONNECTION(c),
|
|
202
|
+
REF_REASON);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/*
|
|
206
|
+
* grpc_subchannel implementation
|
|
207
|
+
*/
|
|
208
|
+
|
|
209
|
+
static void subchannel_destroy(grpc_exec_ctx *exec_ctx, void *arg,
|
|
210
|
+
grpc_error *error) {
|
|
211
|
+
grpc_subchannel *c = arg;
|
|
212
|
+
gpr_free((void *)c->filters);
|
|
213
|
+
grpc_channel_args_destroy(exec_ctx, c->args);
|
|
214
|
+
grpc_connectivity_state_destroy(exec_ctx, &c->state_tracker);
|
|
215
|
+
grpc_connector_unref(exec_ctx, c->connector);
|
|
216
|
+
grpc_pollset_set_destroy(exec_ctx, c->pollset_set);
|
|
217
|
+
grpc_subchannel_key_destroy(exec_ctx, c->key);
|
|
218
|
+
gpr_free(c);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
static gpr_atm ref_mutate(grpc_subchannel *c, gpr_atm delta,
|
|
222
|
+
int barrier REF_MUTATE_EXTRA_ARGS) {
|
|
223
|
+
gpr_atm old_val = barrier ? gpr_atm_full_fetch_add(&c->ref_pair, delta)
|
|
224
|
+
: gpr_atm_no_barrier_fetch_add(&c->ref_pair, delta);
|
|
225
|
+
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
|
|
226
|
+
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
|
227
|
+
"SUBCHANNEL: %p %s 0x%08" PRIxPTR " -> 0x%08" PRIxPTR " [%s]", c,
|
|
228
|
+
purpose, old_val, old_val + delta, reason);
|
|
229
|
+
#endif
|
|
230
|
+
return old_val;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
grpc_subchannel *grpc_subchannel_ref(
|
|
234
|
+
grpc_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
235
|
+
gpr_atm old_refs;
|
|
236
|
+
old_refs = ref_mutate(c, (1 << INTERNAL_REF_BITS),
|
|
237
|
+
0 REF_MUTATE_PURPOSE("STRONG_REF"));
|
|
238
|
+
GPR_ASSERT((old_refs & STRONG_REF_MASK) != 0);
|
|
239
|
+
return c;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
grpc_subchannel *grpc_subchannel_weak_ref(
|
|
243
|
+
grpc_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
244
|
+
gpr_atm old_refs;
|
|
245
|
+
old_refs = ref_mutate(c, 1, 0 REF_MUTATE_PURPOSE("WEAK_REF"));
|
|
246
|
+
GPR_ASSERT(old_refs != 0);
|
|
247
|
+
return c;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
grpc_subchannel *grpc_subchannel_ref_from_weak_ref(
|
|
251
|
+
grpc_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
252
|
+
if (!c) return NULL;
|
|
253
|
+
for (;;) {
|
|
254
|
+
gpr_atm old_refs = gpr_atm_acq_load(&c->ref_pair);
|
|
255
|
+
if (old_refs >= (1 << INTERNAL_REF_BITS)) {
|
|
256
|
+
gpr_atm new_refs = old_refs + (1 << INTERNAL_REF_BITS);
|
|
257
|
+
if (gpr_atm_rel_cas(&c->ref_pair, old_refs, new_refs)) {
|
|
258
|
+
return c;
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
return NULL;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
static void disconnect(grpc_exec_ctx *exec_ctx, grpc_subchannel *c) {
|
|
267
|
+
grpc_connected_subchannel *con;
|
|
268
|
+
grpc_subchannel_index_unregister(exec_ctx, c->key, c);
|
|
269
|
+
gpr_mu_lock(&c->mu);
|
|
270
|
+
GPR_ASSERT(!c->disconnected);
|
|
271
|
+
c->disconnected = true;
|
|
272
|
+
grpc_connector_shutdown(
|
|
273
|
+
exec_ctx, c->connector,
|
|
274
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Subchannel disconnected"));
|
|
275
|
+
con = GET_CONNECTED_SUBCHANNEL(c, no_barrier);
|
|
276
|
+
if (con != NULL) {
|
|
277
|
+
GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, con, "connection");
|
|
278
|
+
gpr_atm_no_barrier_store(&c->connected_subchannel, (gpr_atm)0xdeadbeef);
|
|
279
|
+
}
|
|
280
|
+
gpr_mu_unlock(&c->mu);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
void grpc_subchannel_unref(grpc_exec_ctx *exec_ctx,
|
|
284
|
+
grpc_subchannel *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
285
|
+
gpr_atm old_refs;
|
|
286
|
+
old_refs = ref_mutate(c, (gpr_atm)1 - (gpr_atm)(1 << INTERNAL_REF_BITS),
|
|
287
|
+
1 REF_MUTATE_PURPOSE("STRONG_UNREF"));
|
|
288
|
+
if ((old_refs & STRONG_REF_MASK) == (1 << INTERNAL_REF_BITS)) {
|
|
289
|
+
disconnect(exec_ctx, c);
|
|
290
|
+
}
|
|
291
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "strong-unref");
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
void grpc_subchannel_weak_unref(grpc_exec_ctx *exec_ctx,
|
|
295
|
+
grpc_subchannel *c
|
|
296
|
+
GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
297
|
+
gpr_atm old_refs;
|
|
298
|
+
old_refs = ref_mutate(c, -(gpr_atm)1, 1 REF_MUTATE_PURPOSE("WEAK_UNREF"));
|
|
299
|
+
if (old_refs == 1) {
|
|
300
|
+
grpc_closure_sched(exec_ctx, grpc_closure_create(subchannel_destroy, c,
|
|
301
|
+
grpc_schedule_on_exec_ctx),
|
|
302
|
+
GRPC_ERROR_NONE);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
grpc_subchannel *grpc_subchannel_create(grpc_exec_ctx *exec_ctx,
|
|
307
|
+
grpc_connector *connector,
|
|
308
|
+
const grpc_subchannel_args *args) {
|
|
309
|
+
grpc_subchannel_key *key = grpc_subchannel_key_create(connector, args);
|
|
310
|
+
grpc_subchannel *c = grpc_subchannel_index_find(exec_ctx, key);
|
|
311
|
+
if (c) {
|
|
312
|
+
grpc_subchannel_key_destroy(exec_ctx, key);
|
|
313
|
+
return c;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
c = gpr_zalloc(sizeof(*c));
|
|
317
|
+
c->key = key;
|
|
318
|
+
gpr_atm_no_barrier_store(&c->ref_pair, 1 << INTERNAL_REF_BITS);
|
|
319
|
+
c->connector = connector;
|
|
320
|
+
grpc_connector_ref(c->connector);
|
|
321
|
+
c->num_filters = args->filter_count;
|
|
322
|
+
if (c->num_filters > 0) {
|
|
323
|
+
c->filters = gpr_malloc(sizeof(grpc_channel_filter *) * c->num_filters);
|
|
324
|
+
memcpy((void *)c->filters, args->filters,
|
|
325
|
+
sizeof(grpc_channel_filter *) * c->num_filters);
|
|
326
|
+
} else {
|
|
327
|
+
c->filters = NULL;
|
|
328
|
+
}
|
|
329
|
+
c->pollset_set = grpc_pollset_set_create();
|
|
330
|
+
grpc_resolved_address *addr = gpr_malloc(sizeof(*addr));
|
|
331
|
+
grpc_get_subchannel_address_arg(exec_ctx, args->args, addr);
|
|
332
|
+
grpc_resolved_address *new_address = NULL;
|
|
333
|
+
grpc_channel_args *new_args = NULL;
|
|
334
|
+
if (grpc_proxy_mappers_map_address(exec_ctx, addr, args->args, &new_address,
|
|
335
|
+
&new_args)) {
|
|
336
|
+
GPR_ASSERT(new_address != NULL);
|
|
337
|
+
gpr_free(addr);
|
|
338
|
+
addr = new_address;
|
|
339
|
+
}
|
|
340
|
+
static const char *keys_to_remove[] = {GRPC_ARG_SUBCHANNEL_ADDRESS};
|
|
341
|
+
grpc_arg new_arg = grpc_create_subchannel_address_arg(addr);
|
|
342
|
+
gpr_free(addr);
|
|
343
|
+
c->args = grpc_channel_args_copy_and_add_and_remove(
|
|
344
|
+
new_args != NULL ? new_args : args->args, keys_to_remove,
|
|
345
|
+
GPR_ARRAY_SIZE(keys_to_remove), &new_arg, 1);
|
|
346
|
+
gpr_free(new_arg.value.string);
|
|
347
|
+
if (new_args != NULL) grpc_channel_args_destroy(exec_ctx, new_args);
|
|
348
|
+
c->root_external_state_watcher.next = c->root_external_state_watcher.prev =
|
|
349
|
+
&c->root_external_state_watcher;
|
|
350
|
+
grpc_closure_init(&c->connected, subchannel_connected, c,
|
|
351
|
+
grpc_schedule_on_exec_ctx);
|
|
352
|
+
grpc_connectivity_state_init(&c->state_tracker, GRPC_CHANNEL_IDLE,
|
|
353
|
+
"subchannel");
|
|
354
|
+
int initial_backoff_ms =
|
|
355
|
+
GRPC_SUBCHANNEL_INITIAL_CONNECT_BACKOFF_SECONDS * 1000;
|
|
356
|
+
int max_backoff_ms = GRPC_SUBCHANNEL_RECONNECT_MAX_BACKOFF_SECONDS * 1000;
|
|
357
|
+
int min_backoff_ms = GRPC_SUBCHANNEL_MIN_CONNECT_TIMEOUT_SECONDS * 1000;
|
|
358
|
+
bool fixed_reconnect_backoff = false;
|
|
359
|
+
if (c->args) {
|
|
360
|
+
for (size_t i = 0; i < c->args->num_args; i++) {
|
|
361
|
+
if (0 == strcmp(c->args->args[i].key,
|
|
362
|
+
"grpc.testing.fixed_reconnect_backoff_ms")) {
|
|
363
|
+
fixed_reconnect_backoff = true;
|
|
364
|
+
initial_backoff_ms = min_backoff_ms = max_backoff_ms =
|
|
365
|
+
grpc_channel_arg_get_integer(
|
|
366
|
+
&c->args->args[i],
|
|
367
|
+
(grpc_integer_options){initial_backoff_ms, 100, INT_MAX});
|
|
368
|
+
} else if (0 == strcmp(c->args->args[i].key,
|
|
369
|
+
GRPC_ARG_MAX_RECONNECT_BACKOFF_MS)) {
|
|
370
|
+
fixed_reconnect_backoff = false;
|
|
371
|
+
max_backoff_ms = grpc_channel_arg_get_integer(
|
|
372
|
+
&c->args->args[i],
|
|
373
|
+
(grpc_integer_options){max_backoff_ms, 100, INT_MAX});
|
|
374
|
+
} else if (0 == strcmp(c->args->args[i].key,
|
|
375
|
+
GRPC_ARG_INITIAL_RECONNECT_BACKOFF_MS)) {
|
|
376
|
+
fixed_reconnect_backoff = false;
|
|
377
|
+
initial_backoff_ms = grpc_channel_arg_get_integer(
|
|
378
|
+
&c->args->args[i],
|
|
379
|
+
(grpc_integer_options){initial_backoff_ms, 100, INT_MAX});
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
gpr_backoff_init(
|
|
384
|
+
&c->backoff_state, initial_backoff_ms,
|
|
385
|
+
fixed_reconnect_backoff ? 1.0
|
|
386
|
+
: GRPC_SUBCHANNEL_RECONNECT_BACKOFF_MULTIPLIER,
|
|
387
|
+
fixed_reconnect_backoff ? 0.0 : GRPC_SUBCHANNEL_RECONNECT_JITTER,
|
|
388
|
+
min_backoff_ms, max_backoff_ms);
|
|
389
|
+
gpr_mu_init(&c->mu);
|
|
390
|
+
|
|
391
|
+
return grpc_subchannel_index_register(exec_ctx, key, c);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
static void continue_connect_locked(grpc_exec_ctx *exec_ctx,
|
|
395
|
+
grpc_subchannel *c) {
|
|
396
|
+
grpc_connect_in_args args;
|
|
397
|
+
|
|
398
|
+
args.interested_parties = c->pollset_set;
|
|
399
|
+
args.deadline = c->next_attempt;
|
|
400
|
+
args.channel_args = c->args;
|
|
401
|
+
|
|
402
|
+
grpc_connectivity_state_set(exec_ctx, &c->state_tracker,
|
|
403
|
+
GRPC_CHANNEL_CONNECTING, GRPC_ERROR_NONE,
|
|
404
|
+
"state_change");
|
|
405
|
+
grpc_connector_connect(exec_ctx, c->connector, &args, &c->connecting_result,
|
|
406
|
+
&c->connected);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
grpc_connectivity_state grpc_subchannel_check_connectivity(grpc_subchannel *c,
|
|
410
|
+
grpc_error **error) {
|
|
411
|
+
grpc_connectivity_state state;
|
|
412
|
+
gpr_mu_lock(&c->mu);
|
|
413
|
+
state = grpc_connectivity_state_get(&c->state_tracker, error);
|
|
414
|
+
gpr_mu_unlock(&c->mu);
|
|
415
|
+
return state;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
static void on_external_state_watcher_done(grpc_exec_ctx *exec_ctx, void *arg,
|
|
419
|
+
grpc_error *error) {
|
|
420
|
+
external_state_watcher *w = arg;
|
|
421
|
+
grpc_closure *follow_up = w->notify;
|
|
422
|
+
if (w->pollset_set != NULL) {
|
|
423
|
+
grpc_pollset_set_del_pollset_set(exec_ctx, w->subchannel->pollset_set,
|
|
424
|
+
w->pollset_set);
|
|
425
|
+
}
|
|
426
|
+
gpr_mu_lock(&w->subchannel->mu);
|
|
427
|
+
w->next->prev = w->prev;
|
|
428
|
+
w->prev->next = w->next;
|
|
429
|
+
gpr_mu_unlock(&w->subchannel->mu);
|
|
430
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, w->subchannel, "external_state_watcher");
|
|
431
|
+
gpr_free(w);
|
|
432
|
+
grpc_closure_run(exec_ctx, follow_up, GRPC_ERROR_REF(error));
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
static void on_alarm(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) {
|
|
436
|
+
grpc_subchannel *c = arg;
|
|
437
|
+
gpr_mu_lock(&c->mu);
|
|
438
|
+
c->have_alarm = false;
|
|
439
|
+
if (c->disconnected) {
|
|
440
|
+
error = GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING("Disconnected",
|
|
441
|
+
&error, 1);
|
|
442
|
+
} else {
|
|
443
|
+
GRPC_ERROR_REF(error);
|
|
444
|
+
}
|
|
445
|
+
if (error == GRPC_ERROR_NONE) {
|
|
446
|
+
gpr_log(GPR_INFO, "Failed to connect to channel, retrying");
|
|
447
|
+
c->next_attempt =
|
|
448
|
+
gpr_backoff_step(&c->backoff_state, gpr_now(GPR_CLOCK_MONOTONIC));
|
|
449
|
+
continue_connect_locked(exec_ctx, c);
|
|
450
|
+
gpr_mu_unlock(&c->mu);
|
|
451
|
+
} else {
|
|
452
|
+
gpr_mu_unlock(&c->mu);
|
|
453
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
|
|
454
|
+
}
|
|
455
|
+
GRPC_ERROR_UNREF(error);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
static void maybe_start_connecting_locked(grpc_exec_ctx *exec_ctx,
|
|
459
|
+
grpc_subchannel *c) {
|
|
460
|
+
if (c->disconnected) {
|
|
461
|
+
/* Don't try to connect if we're already disconnected */
|
|
462
|
+
return;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
if (c->connecting) {
|
|
466
|
+
/* Already connecting: don't restart */
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
if (GET_CONNECTED_SUBCHANNEL(c, no_barrier) != NULL) {
|
|
471
|
+
/* Already connected: don't restart */
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
if (!grpc_connectivity_state_has_watchers(&c->state_tracker)) {
|
|
476
|
+
/* Nobody is interested in connecting: so don't just yet */
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
c->connecting = true;
|
|
481
|
+
GRPC_SUBCHANNEL_WEAK_REF(c, "connecting");
|
|
482
|
+
|
|
483
|
+
gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
|
|
484
|
+
if (!c->backoff_begun) {
|
|
485
|
+
c->backoff_begun = true;
|
|
486
|
+
c->next_attempt = gpr_backoff_begin(&c->backoff_state, now);
|
|
487
|
+
continue_connect_locked(exec_ctx, c);
|
|
488
|
+
} else {
|
|
489
|
+
GPR_ASSERT(!c->have_alarm);
|
|
490
|
+
c->have_alarm = true;
|
|
491
|
+
gpr_timespec time_til_next = gpr_time_sub(c->next_attempt, now);
|
|
492
|
+
if (gpr_time_cmp(time_til_next, gpr_time_0(time_til_next.clock_type)) <=
|
|
493
|
+
0) {
|
|
494
|
+
gpr_log(GPR_INFO, "Retry immediately");
|
|
495
|
+
} else {
|
|
496
|
+
gpr_log(GPR_INFO, "Retry in %" PRId64 ".%09d seconds",
|
|
497
|
+
time_til_next.tv_sec, time_til_next.tv_nsec);
|
|
498
|
+
}
|
|
499
|
+
grpc_closure_init(&c->on_alarm, on_alarm, c, grpc_schedule_on_exec_ctx);
|
|
500
|
+
grpc_timer_init(exec_ctx, &c->alarm, c->next_attempt, &c->on_alarm, now);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
void grpc_subchannel_notify_on_state_change(
|
|
505
|
+
grpc_exec_ctx *exec_ctx, grpc_subchannel *c,
|
|
506
|
+
grpc_pollset_set *interested_parties, grpc_connectivity_state *state,
|
|
507
|
+
grpc_closure *notify) {
|
|
508
|
+
external_state_watcher *w;
|
|
509
|
+
|
|
510
|
+
if (state == NULL) {
|
|
511
|
+
gpr_mu_lock(&c->mu);
|
|
512
|
+
for (w = c->root_external_state_watcher.next;
|
|
513
|
+
w != &c->root_external_state_watcher; w = w->next) {
|
|
514
|
+
if (w->notify == notify) {
|
|
515
|
+
grpc_connectivity_state_notify_on_state_change(
|
|
516
|
+
exec_ctx, &c->state_tracker, NULL, &w->closure);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
gpr_mu_unlock(&c->mu);
|
|
520
|
+
} else {
|
|
521
|
+
w = gpr_malloc(sizeof(*w));
|
|
522
|
+
w->subchannel = c;
|
|
523
|
+
w->pollset_set = interested_parties;
|
|
524
|
+
w->notify = notify;
|
|
525
|
+
grpc_closure_init(&w->closure, on_external_state_watcher_done, w,
|
|
526
|
+
grpc_schedule_on_exec_ctx);
|
|
527
|
+
if (interested_parties != NULL) {
|
|
528
|
+
grpc_pollset_set_add_pollset_set(exec_ctx, c->pollset_set,
|
|
529
|
+
interested_parties);
|
|
530
|
+
}
|
|
531
|
+
GRPC_SUBCHANNEL_WEAK_REF(c, "external_state_watcher");
|
|
532
|
+
gpr_mu_lock(&c->mu);
|
|
533
|
+
w->next = &c->root_external_state_watcher;
|
|
534
|
+
w->prev = w->next->prev;
|
|
535
|
+
w->next->prev = w->prev->next = w;
|
|
536
|
+
grpc_connectivity_state_notify_on_state_change(exec_ctx, &c->state_tracker,
|
|
537
|
+
state, &w->closure);
|
|
538
|
+
maybe_start_connecting_locked(exec_ctx, c);
|
|
539
|
+
gpr_mu_unlock(&c->mu);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
void grpc_connected_subchannel_process_transport_op(
|
|
544
|
+
grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con,
|
|
545
|
+
grpc_transport_op *op) {
|
|
546
|
+
grpc_channel_stack *channel_stack = CHANNEL_STACK_FROM_CONNECTION(con);
|
|
547
|
+
grpc_channel_element *top_elem = grpc_channel_stack_element(channel_stack, 0);
|
|
548
|
+
top_elem->filter->start_transport_op(exec_ctx, top_elem, op);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
static void subchannel_on_child_state_changed(grpc_exec_ctx *exec_ctx, void *p,
|
|
552
|
+
grpc_error *error) {
|
|
553
|
+
state_watcher *sw = p;
|
|
554
|
+
grpc_subchannel *c = sw->subchannel;
|
|
555
|
+
gpr_mu *mu = &c->mu;
|
|
556
|
+
|
|
557
|
+
gpr_mu_lock(mu);
|
|
558
|
+
|
|
559
|
+
/* if we failed just leave this closure */
|
|
560
|
+
if (sw->connectivity_state == GRPC_CHANNEL_TRANSIENT_FAILURE) {
|
|
561
|
+
/* any errors on a subchannel ==> we're done, create a new one */
|
|
562
|
+
sw->connectivity_state = GRPC_CHANNEL_SHUTDOWN;
|
|
563
|
+
}
|
|
564
|
+
grpc_connectivity_state_set(exec_ctx, &c->state_tracker,
|
|
565
|
+
sw->connectivity_state, GRPC_ERROR_REF(error),
|
|
566
|
+
"reflect_child");
|
|
567
|
+
if (sw->connectivity_state != GRPC_CHANNEL_SHUTDOWN) {
|
|
568
|
+
grpc_connected_subchannel_notify_on_state_change(
|
|
569
|
+
exec_ctx, GET_CONNECTED_SUBCHANNEL(c, no_barrier), NULL,
|
|
570
|
+
&sw->connectivity_state, &sw->closure);
|
|
571
|
+
GRPC_SUBCHANNEL_WEAK_REF(c, "state_watcher");
|
|
572
|
+
sw = NULL;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
gpr_mu_unlock(mu);
|
|
576
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "state_watcher");
|
|
577
|
+
gpr_free(sw);
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
static void connected_subchannel_state_op(grpc_exec_ctx *exec_ctx,
|
|
581
|
+
grpc_connected_subchannel *con,
|
|
582
|
+
grpc_pollset_set *interested_parties,
|
|
583
|
+
grpc_connectivity_state *state,
|
|
584
|
+
grpc_closure *closure) {
|
|
585
|
+
grpc_transport_op *op = grpc_make_transport_op(NULL);
|
|
586
|
+
grpc_channel_element *elem;
|
|
587
|
+
op->connectivity_state = state;
|
|
588
|
+
op->on_connectivity_state_change = closure;
|
|
589
|
+
op->bind_pollset_set = interested_parties;
|
|
590
|
+
elem = grpc_channel_stack_element(CHANNEL_STACK_FROM_CONNECTION(con), 0);
|
|
591
|
+
elem->filter->start_transport_op(exec_ctx, elem, op);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
void grpc_connected_subchannel_notify_on_state_change(
|
|
595
|
+
grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con,
|
|
596
|
+
grpc_pollset_set *interested_parties, grpc_connectivity_state *state,
|
|
597
|
+
grpc_closure *closure) {
|
|
598
|
+
connected_subchannel_state_op(exec_ctx, con, interested_parties, state,
|
|
599
|
+
closure);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
void grpc_connected_subchannel_ping(grpc_exec_ctx *exec_ctx,
|
|
603
|
+
grpc_connected_subchannel *con,
|
|
604
|
+
grpc_closure *closure) {
|
|
605
|
+
grpc_transport_op *op = grpc_make_transport_op(NULL);
|
|
606
|
+
grpc_channel_element *elem;
|
|
607
|
+
op->send_ping = closure;
|
|
608
|
+
elem = grpc_channel_stack_element(CHANNEL_STACK_FROM_CONNECTION(con), 0);
|
|
609
|
+
elem->filter->start_transport_op(exec_ctx, elem, op);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
static void publish_transport_locked(grpc_exec_ctx *exec_ctx,
|
|
613
|
+
grpc_subchannel *c) {
|
|
614
|
+
grpc_connected_subchannel *con;
|
|
615
|
+
grpc_channel_stack *stk;
|
|
616
|
+
state_watcher *sw_subchannel;
|
|
617
|
+
|
|
618
|
+
/* construct channel stack */
|
|
619
|
+
grpc_channel_stack_builder *builder = grpc_channel_stack_builder_create();
|
|
620
|
+
grpc_channel_stack_builder_set_channel_arguments(
|
|
621
|
+
exec_ctx, builder, c->connecting_result.channel_args);
|
|
622
|
+
grpc_channel_stack_builder_set_transport(builder,
|
|
623
|
+
c->connecting_result.transport);
|
|
624
|
+
|
|
625
|
+
if (!grpc_channel_init_create_stack(exec_ctx, builder,
|
|
626
|
+
GRPC_CLIENT_SUBCHANNEL)) {
|
|
627
|
+
grpc_channel_stack_builder_destroy(exec_ctx, builder);
|
|
628
|
+
abort(); /* TODO(ctiller): what to do here (previously we just crashed) */
|
|
629
|
+
}
|
|
630
|
+
grpc_error *error = grpc_channel_stack_builder_finish(
|
|
631
|
+
exec_ctx, builder, 0, 1, connection_destroy, NULL, (void **)&con);
|
|
632
|
+
if (error != GRPC_ERROR_NONE) {
|
|
633
|
+
gpr_log(GPR_ERROR, "error initializing subchannel stack: %s",
|
|
634
|
+
grpc_error_string(error));
|
|
635
|
+
GRPC_ERROR_UNREF(error);
|
|
636
|
+
abort(); /* TODO(ctiller): what to do here? */
|
|
637
|
+
}
|
|
638
|
+
stk = CHANNEL_STACK_FROM_CONNECTION(con);
|
|
639
|
+
memset(&c->connecting_result, 0, sizeof(c->connecting_result));
|
|
640
|
+
|
|
641
|
+
/* initialize state watcher */
|
|
642
|
+
sw_subchannel = gpr_malloc(sizeof(*sw_subchannel));
|
|
643
|
+
sw_subchannel->subchannel = c;
|
|
644
|
+
sw_subchannel->connectivity_state = GRPC_CHANNEL_READY;
|
|
645
|
+
grpc_closure_init(&sw_subchannel->closure, subchannel_on_child_state_changed,
|
|
646
|
+
sw_subchannel, grpc_schedule_on_exec_ctx);
|
|
647
|
+
|
|
648
|
+
if (c->disconnected) {
|
|
649
|
+
gpr_free(sw_subchannel);
|
|
650
|
+
grpc_channel_stack_destroy(exec_ctx, stk);
|
|
651
|
+
gpr_free(con);
|
|
652
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/* publish */
|
|
657
|
+
/* TODO(ctiller): this full barrier seems to clear up a TSAN failure.
|
|
658
|
+
I'd have expected the rel_cas below to be enough, but
|
|
659
|
+
seemingly it's not.
|
|
660
|
+
Re-evaluate if we really need this. */
|
|
661
|
+
gpr_atm_full_barrier();
|
|
662
|
+
GPR_ASSERT(gpr_atm_rel_cas(&c->connected_subchannel, 0, (gpr_atm)con));
|
|
663
|
+
|
|
664
|
+
/* setup subchannel watching connected subchannel for changes; subchannel
|
|
665
|
+
ref for connecting is donated to the state watcher */
|
|
666
|
+
GRPC_SUBCHANNEL_WEAK_REF(c, "state_watcher");
|
|
667
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
|
|
668
|
+
grpc_connected_subchannel_notify_on_state_change(
|
|
669
|
+
exec_ctx, con, c->pollset_set, &sw_subchannel->connectivity_state,
|
|
670
|
+
&sw_subchannel->closure);
|
|
671
|
+
|
|
672
|
+
/* signal completion */
|
|
673
|
+
grpc_connectivity_state_set(exec_ctx, &c->state_tracker, GRPC_CHANNEL_READY,
|
|
674
|
+
GRPC_ERROR_NONE, "connected");
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
static void subchannel_connected(grpc_exec_ctx *exec_ctx, void *arg,
|
|
678
|
+
grpc_error *error) {
|
|
679
|
+
grpc_subchannel *c = arg;
|
|
680
|
+
grpc_channel_args *delete_channel_args = c->connecting_result.channel_args;
|
|
681
|
+
|
|
682
|
+
GRPC_SUBCHANNEL_WEAK_REF(c, "connected");
|
|
683
|
+
gpr_mu_lock(&c->mu);
|
|
684
|
+
c->connecting = false;
|
|
685
|
+
if (c->connecting_result.transport != NULL) {
|
|
686
|
+
publish_transport_locked(exec_ctx, c);
|
|
687
|
+
} else if (c->disconnected) {
|
|
688
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
|
|
689
|
+
} else {
|
|
690
|
+
grpc_connectivity_state_set(
|
|
691
|
+
exec_ctx, &c->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE,
|
|
692
|
+
grpc_error_set_int(GRPC_ERROR_CREATE_REFERENCING_FROM_STATIC_STRING(
|
|
693
|
+
"Connect Failed", &error, 1),
|
|
694
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
|
|
695
|
+
"connect_failed");
|
|
696
|
+
|
|
697
|
+
const char *errmsg = grpc_error_string(error);
|
|
698
|
+
gpr_log(GPR_INFO, "Connect failed: %s", errmsg);
|
|
699
|
+
|
|
700
|
+
maybe_start_connecting_locked(exec_ctx, c);
|
|
701
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connecting");
|
|
702
|
+
}
|
|
703
|
+
gpr_mu_unlock(&c->mu);
|
|
704
|
+
GRPC_SUBCHANNEL_WEAK_UNREF(exec_ctx, c, "connected");
|
|
705
|
+
grpc_channel_args_destroy(exec_ctx, delete_channel_args);
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/*
|
|
709
|
+
* grpc_subchannel_call implementation
|
|
710
|
+
*/
|
|
711
|
+
|
|
712
|
+
static void subchannel_call_destroy(grpc_exec_ctx *exec_ctx, void *call,
|
|
713
|
+
grpc_error *error) {
|
|
714
|
+
grpc_subchannel_call *c = call;
|
|
715
|
+
GPR_ASSERT(c->schedule_closure_after_destroy != NULL);
|
|
716
|
+
GPR_TIMER_BEGIN("grpc_subchannel_call_unref.destroy", 0);
|
|
717
|
+
grpc_connected_subchannel *connection = c->connection;
|
|
718
|
+
grpc_call_stack_destroy(exec_ctx, SUBCHANNEL_CALL_TO_CALL_STACK(c), NULL,
|
|
719
|
+
c->schedule_closure_after_destroy);
|
|
720
|
+
GRPC_CONNECTED_SUBCHANNEL_UNREF(exec_ctx, connection, "subchannel_call");
|
|
721
|
+
GPR_TIMER_END("grpc_subchannel_call_unref.destroy", 0);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
void grpc_subchannel_call_set_cleanup_closure(grpc_subchannel_call *call,
|
|
725
|
+
grpc_closure *closure) {
|
|
726
|
+
GPR_ASSERT(call->schedule_closure_after_destroy == NULL);
|
|
727
|
+
GPR_ASSERT(closure != NULL);
|
|
728
|
+
call->schedule_closure_after_destroy = closure;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
void grpc_subchannel_call_ref(
|
|
732
|
+
grpc_subchannel_call *c GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
733
|
+
GRPC_CALL_STACK_REF(SUBCHANNEL_CALL_TO_CALL_STACK(c), REF_REASON);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
void grpc_subchannel_call_unref(grpc_exec_ctx *exec_ctx,
|
|
737
|
+
grpc_subchannel_call *c
|
|
738
|
+
GRPC_SUBCHANNEL_REF_EXTRA_ARGS) {
|
|
739
|
+
GRPC_CALL_STACK_UNREF(exec_ctx, SUBCHANNEL_CALL_TO_CALL_STACK(c), REF_REASON);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
char *grpc_subchannel_call_get_peer(grpc_exec_ctx *exec_ctx,
|
|
743
|
+
grpc_subchannel_call *call) {
|
|
744
|
+
grpc_call_stack *call_stack = SUBCHANNEL_CALL_TO_CALL_STACK(call);
|
|
745
|
+
grpc_call_element *top_elem = grpc_call_stack_element(call_stack, 0);
|
|
746
|
+
return top_elem->filter->get_peer(exec_ctx, top_elem);
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
void grpc_subchannel_call_process_op(grpc_exec_ctx *exec_ctx,
|
|
750
|
+
grpc_subchannel_call *call,
|
|
751
|
+
grpc_transport_stream_op_batch *op) {
|
|
752
|
+
GPR_TIMER_BEGIN("grpc_subchannel_call_process_op", 0);
|
|
753
|
+
grpc_call_stack *call_stack = SUBCHANNEL_CALL_TO_CALL_STACK(call);
|
|
754
|
+
grpc_call_element *top_elem = grpc_call_stack_element(call_stack, 0);
|
|
755
|
+
top_elem->filter->start_transport_stream_op_batch(exec_ctx, top_elem, op);
|
|
756
|
+
GPR_TIMER_END("grpc_subchannel_call_process_op", 0);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
grpc_connected_subchannel *grpc_subchannel_get_connected_subchannel(
|
|
760
|
+
grpc_subchannel *c) {
|
|
761
|
+
return GET_CONNECTED_SUBCHANNEL(c, acq);
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
grpc_error *grpc_connected_subchannel_create_call(
|
|
765
|
+
grpc_exec_ctx *exec_ctx, grpc_connected_subchannel *con,
|
|
766
|
+
const grpc_connected_subchannel_call_args *args,
|
|
767
|
+
grpc_subchannel_call **call) {
|
|
768
|
+
grpc_channel_stack *chanstk = CHANNEL_STACK_FROM_CONNECTION(con);
|
|
769
|
+
*call = gpr_arena_alloc(
|
|
770
|
+
args->arena, sizeof(grpc_subchannel_call) + chanstk->call_stack_size);
|
|
771
|
+
grpc_call_stack *callstk = SUBCHANNEL_CALL_TO_CALL_STACK(*call);
|
|
772
|
+
(*call)->connection = GRPC_CONNECTED_SUBCHANNEL_REF(con, "subchannel_call");
|
|
773
|
+
const grpc_call_element_args call_args = {.call_stack = callstk,
|
|
774
|
+
.server_transport_data = NULL,
|
|
775
|
+
.context = NULL,
|
|
776
|
+
.path = args->path,
|
|
777
|
+
.start_time = args->start_time,
|
|
778
|
+
.deadline = args->deadline,
|
|
779
|
+
.arena = args->arena};
|
|
780
|
+
grpc_error *error = grpc_call_stack_init(
|
|
781
|
+
exec_ctx, chanstk, 1, subchannel_call_destroy, *call, &call_args);
|
|
782
|
+
if (error != GRPC_ERROR_NONE) {
|
|
783
|
+
const char *error_string = grpc_error_string(error);
|
|
784
|
+
gpr_log(GPR_ERROR, "error: %s", error_string);
|
|
785
|
+
return error;
|
|
786
|
+
}
|
|
787
|
+
grpc_call_stack_set_pollset_or_pollset_set(exec_ctx, callstk, args->pollent);
|
|
788
|
+
return GRPC_ERROR_NONE;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
grpc_call_stack *grpc_subchannel_call_get_call_stack(
|
|
792
|
+
grpc_subchannel_call *subchannel_call) {
|
|
793
|
+
return SUBCHANNEL_CALL_TO_CALL_STACK(subchannel_call);
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
static void grpc_uri_to_sockaddr(grpc_exec_ctx *exec_ctx, const char *uri_str,
|
|
797
|
+
grpc_resolved_address *addr) {
|
|
798
|
+
grpc_uri *uri = grpc_uri_parse(exec_ctx, uri_str, 0 /* suppress_errors */);
|
|
799
|
+
GPR_ASSERT(uri != NULL);
|
|
800
|
+
if (strcmp(uri->scheme, "ipv4") == 0) {
|
|
801
|
+
GPR_ASSERT(parse_ipv4(uri, addr));
|
|
802
|
+
} else if (strcmp(uri->scheme, "ipv6") == 0) {
|
|
803
|
+
GPR_ASSERT(parse_ipv6(uri, addr));
|
|
804
|
+
} else {
|
|
805
|
+
GPR_ASSERT(parse_unix(uri, addr));
|
|
806
|
+
}
|
|
807
|
+
grpc_uri_destroy(uri);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
void grpc_get_subchannel_address_arg(grpc_exec_ctx *exec_ctx,
|
|
811
|
+
const grpc_channel_args *args,
|
|
812
|
+
grpc_resolved_address *addr) {
|
|
813
|
+
const char *addr_uri_str = grpc_get_subchannel_address_uri_arg(args);
|
|
814
|
+
memset(addr, 0, sizeof(*addr));
|
|
815
|
+
if (*addr_uri_str != '\0') {
|
|
816
|
+
grpc_uri_to_sockaddr(exec_ctx, addr_uri_str, addr);
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
const char *grpc_get_subchannel_address_uri_arg(const grpc_channel_args *args) {
|
|
821
|
+
const grpc_arg *addr_arg =
|
|
822
|
+
grpc_channel_args_find(args, GRPC_ARG_SUBCHANNEL_ADDRESS);
|
|
823
|
+
GPR_ASSERT(addr_arg != NULL); // Should have been set by LB policy.
|
|
824
|
+
GPR_ASSERT(addr_arg->type == GRPC_ARG_STRING);
|
|
825
|
+
return addr_arg->value.string;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
grpc_arg grpc_create_subchannel_address_arg(const grpc_resolved_address *addr) {
|
|
829
|
+
grpc_arg new_arg;
|
|
830
|
+
new_arg.key = GRPC_ARG_SUBCHANNEL_ADDRESS;
|
|
831
|
+
new_arg.type = GRPC_ARG_STRING;
|
|
832
|
+
new_arg.value.string =
|
|
833
|
+
addr->len > 0 ? grpc_sockaddr_to_uri(addr) : gpr_strdup("");
|
|
834
|
+
return new_arg;
|
|
835
|
+
}
|