grpc 1.10.0 → 1.11.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +2098 -501
- data/include/grpc/byte_buffer.h +2 -0
- data/include/grpc/byte_buffer_reader.h +2 -0
- data/include/grpc/census.h +2 -0
- data/include/grpc/fork.h +2 -0
- data/include/grpc/grpc.h +10 -0
- data/include/grpc/grpc_cronet.h +2 -0
- data/include/grpc/grpc_posix.h +2 -1
- data/include/grpc/grpc_security.h +21 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/byte_buffer.h +2 -0
- data/include/grpc/impl/codegen/grpc_types.h +24 -0
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/include/grpc/impl/codegen/sync.h +1 -0
- data/include/grpc/impl/codegen/sync_custom.h +2 -0
- data/include/grpc/impl/codegen/sync_generic.h +2 -0
- data/include/grpc/impl/codegen/sync_posix.h +2 -0
- data/include/grpc/impl/codegen/sync_windows.h +2 -0
- data/include/grpc/slice.h +2 -0
- data/include/grpc/slice_buffer.h +2 -0
- data/include/grpc/status.h +2 -0
- data/include/grpc/support/alloc.h +2 -2
- data/include/grpc/support/atm.h +2 -0
- data/include/grpc/support/atm_gcc_atomic.h +2 -0
- data/include/grpc/support/atm_gcc_sync.h +2 -0
- data/include/grpc/support/atm_windows.h +2 -0
- data/include/grpc/support/log.h +1 -1
- data/include/grpc/support/sync.h +2 -0
- data/include/grpc/support/sync_custom.h +2 -0
- data/include/grpc/support/sync_generic.h +2 -0
- data/include/grpc/support/sync_posix.h +2 -0
- data/include/grpc/support/sync_windows.h +2 -0
- data/include/grpc/support/time.h +2 -0
- data/src/boringssl/err_data.c +444 -438
- data/src/core/ext/census/grpc_context.cc +2 -0
- data/src/core/ext/filters/client_channel/backup_poller.cc +13 -8
- data/src/core/ext/filters/client_channel/backup_poller.h +3 -2
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -0
- data/src/core/ext/filters/client_channel/client_channel.cc +1988 -433
- data/src/core/ext/filters/client_channel/client_channel.h +2 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +2 -27
- data/src/core/ext/filters/client_channel/connector.cc +2 -0
- data/src/core/ext/filters/client_channel/connector.h +2 -0
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +96 -78
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +9 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +70 -62
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +2 -1
- data/src/core/ext/filters/client_channel/method_params.cc +178 -0
- data/src/core/ext/filters/client_channel/method_params.h +74 -0
- data/src/core/ext/filters/client_channel/parse_address.cc +17 -13
- data/src/core/ext/filters/client_channel/parse_address.h +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +2 -0
- data/src/core/ext/filters/client_channel/resolver.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver.h +6 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +24 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +55 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +30 -3
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.h +2 -0
- data/src/core/ext/filters/client_channel/retry_throttle.cc +102 -120
- data/src/core/ext/filters/client_channel/retry_throttle.h +52 -25
- data/src/core/ext/filters/client_channel/subchannel.cc +14 -4
- data/src/core/ext/filters/client_channel/subchannel.h +10 -1
- data/src/core/ext/filters/client_channel/subchannel_index.cc +2 -0
- data/src/core/ext/filters/client_channel/subchannel_index.h +2 -0
- data/src/core/ext/filters/client_channel/uri_parser.cc +2 -1
- data/src/core/ext/filters/client_channel/uri_parser.h +2 -1
- data/src/core/ext/filters/deadline/deadline_filter.cc +2 -1
- data/src/core/ext/filters/deadline/deadline_filter.h +2 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +27 -25
- data/src/core/ext/filters/http/client/http_client_filter.h +2 -0
- data/src/core/ext/filters/http/client_authority_filter.cc +156 -0
- data/src/core/ext/filters/http/client_authority_filter.h +34 -0
- data/src/core/ext/filters/http/http_filters_plugin.cc +2 -0
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +21 -22
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +2 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +11 -8
- data/src/core/ext/filters/http/server/http_server_filter.h +2 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +2 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +2 -0
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +2 -0
- data/src/core/ext/filters/max_age/max_age_filter.cc +2 -0
- data/src/core/ext/filters/max_age/max_age_filter.h +2 -0
- data/src/core/ext/filters/message_size/message_size_filter.cc +52 -49
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -0
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +5 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +2 -0
- data/src/core/ext/filters/workarounds/workaround_utils.cc +2 -0
- data/src/core/ext/filters/workarounds/workaround_utils.h +2 -0
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +3 -1
- data/src/core/ext/transport/chttp2/alpn/alpn.h +2 -0
- data/src/core/ext/transport/chttp2/client/authority.cc +42 -0
- data/src/core/ext/transport/chttp2/client/authority.h +36 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +10 -3
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +37 -25
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +2 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +3 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -1
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -1
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +2 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +152 -182
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +15 -19
- data/src/core/ext/transport/chttp2/transport/frame_data.h +7 -5
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +2 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +2 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -0
- data/src/core/ext/transport/chttp2/transport/internal.h +60 -24
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -4
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/varint.cc +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +10 -6
- data/src/core/ext/transport/inproc/inproc_plugin.cc +2 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -23
- data/src/core/ext/transport/inproc/inproc_transport.h +2 -0
- data/src/core/lib/avl/avl.cc +2 -0
- data/src/core/lib/avl/avl.h +2 -0
- data/src/core/lib/backoff/backoff.cc +2 -0
- data/src/core/lib/backoff/backoff.h +2 -0
- data/src/core/lib/channel/channel_args.h +2 -0
- data/src/core/lib/channel/channel_stack.cc +3 -1
- data/src/core/lib/channel/channel_stack.h +2 -0
- data/src/core/lib/channel/channel_stack_builder.cc +2 -0
- data/src/core/lib/channel/channel_stack_builder.h +2 -0
- data/src/core/lib/channel/channel_trace.cc +239 -0
- data/src/core/lib/channel/channel_trace.h +133 -0
- data/src/core/lib/channel/channel_trace_registry.cc +80 -0
- data/src/core/lib/channel/channel_trace_registry.h +43 -0
- data/src/core/lib/channel/connected_channel.cc +2 -0
- data/src/core/lib/channel/connected_channel.h +2 -0
- data/src/core/lib/channel/handshaker.cc +2 -0
- data/src/core/lib/channel/handshaker.h +2 -0
- data/src/core/lib/channel/handshaker_factory.cc +2 -0
- data/src/core/lib/channel/handshaker_factory.h +2 -1
- data/src/core/lib/channel/handshaker_registry.cc +2 -0
- data/src/core/lib/channel/handshaker_registry.h +2 -1
- data/src/core/lib/channel/status_util.cc +100 -0
- data/src/core/lib/channel/status_util.h +58 -0
- data/src/core/lib/compression/algorithm_metadata.h +2 -0
- data/src/core/lib/compression/compression.cc +2 -0
- data/src/core/lib/compression/compression_internal.cc +2 -0
- data/src/core/lib/compression/compression_internal.h +2 -0
- data/src/core/lib/compression/message_compress.cc +2 -0
- data/src/core/lib/compression/message_compress.h +2 -0
- data/src/core/lib/compression/stream_compression.cc +2 -0
- data/src/core/lib/compression/stream_compression.h +2 -0
- data/src/core/lib/compression/stream_compression_gzip.cc +2 -0
- data/src/core/lib/compression/stream_compression_gzip.h +2 -0
- data/src/core/lib/compression/stream_compression_identity.cc +2 -1
- data/src/core/lib/compression/stream_compression_identity.h +2 -0
- data/src/core/lib/debug/stats.cc +2 -0
- data/src/core/lib/debug/stats.h +2 -0
- data/src/core/lib/debug/stats_data.cc +3 -1
- data/src/core/lib/debug/stats_data.h +2 -0
- data/src/core/lib/debug/trace.cc +2 -0
- data/src/core/lib/debug/trace.h +2 -1
- data/src/core/lib/gpr/alloc.cc +2 -1
- data/src/core/lib/gpr/arena.cc +47 -0
- data/src/core/lib/gpr/arena.h +2 -0
- data/src/core/lib/gpr/atm.cc +2 -0
- data/src/core/lib/gpr/cpu_linux.cc +5 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/env.h +2 -0
- data/src/core/lib/gpr/fork.cc +2 -0
- data/src/core/lib/gpr/host_port.cc +2 -0
- data/src/core/lib/gpr/log.cc +2 -1
- data/src/core/lib/gpr/log_linux.cc +1 -0
- data/src/core/lib/gpr/mpscq.cc +2 -0
- data/src/core/lib/gpr/mpscq.h +2 -0
- data/src/core/lib/gpr/murmur_hash.cc +2 -0
- data/src/core/lib/gpr/spinlock.h +2 -0
- data/src/core/lib/gpr/string.cc +2 -1
- data/src/core/lib/gpr/string.h +2 -2
- data/src/core/lib/gpr/sync.cc +2 -0
- data/src/core/lib/gpr/time.cc +2 -0
- data/src/core/lib/gpr/time_posix.cc +1 -0
- data/src/core/lib/gpr/time_precise.cc +2 -0
- data/src/core/lib/gpr/time_precise.h +2 -0
- data/src/core/lib/gpr/tls_gcc.h +2 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_pthread.h +2 -0
- data/src/core/lib/gpr/tmpfile.h +2 -0
- data/src/core/lib/gprpp/atomic_with_atm.h +2 -0
- data/src/core/lib/gprpp/atomic_with_std.h +2 -0
- data/src/core/lib/gprpp/inlined_vector.h +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +3 -1
- data/src/core/lib/gprpp/memory.h +5 -3
- data/src/core/lib/gprpp/orphanable.h +3 -0
- data/src/core/lib/gprpp/ref_counted.h +4 -0
- data/src/core/lib/gprpp/ref_counted_ptr.h +3 -0
- data/src/core/lib/gprpp/thd.h +135 -0
- data/src/core/lib/gprpp/thd_posix.cc +209 -0
- data/src/core/lib/gprpp/thd_windows.cc +162 -0
- data/src/core/lib/http/format_request.cc +2 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +2 -0
- data/src/core/lib/http/httpcli.h +2 -0
- data/src/core/lib/http/httpcli_security_connector.cc +16 -7
- data/src/core/lib/http/parser.cc +2 -0
- data/src/core/lib/http/parser.h +2 -1
- data/src/core/lib/iomgr/call_combiner.cc +2 -0
- data/src/core/lib/iomgr/call_combiner.h +2 -1
- data/src/core/lib/iomgr/combiner.cc +2 -0
- data/src/core/lib/iomgr/combiner.h +2 -0
- data/src/core/lib/iomgr/endpoint.cc +4 -0
- data/src/core/lib/iomgr/endpoint.h +2 -0
- data/src/core/lib/iomgr/endpoint_pair.h +2 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -0
- data/src/core/lib/iomgr/endpoint_pair_uv.cc +2 -0
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +7 -4
- data/src/core/lib/iomgr/error.h +2 -0
- data/src/core/lib/iomgr/error_internal.h +2 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +2 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.h +2 -0
- data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -18
- data/src/core/lib/iomgr/ev_epollex_linux.h +2 -0
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +2 -0
- data/src/core/lib/iomgr/ev_epollsig_linux.h +2 -0
- data/src/core/lib/iomgr/ev_poll_posix.cc +61 -31
- data/src/core/lib/iomgr/ev_poll_posix.h +2 -0
- data/src/core/lib/iomgr/ev_posix.cc +35 -19
- data/src/core/lib/iomgr/ev_posix.h +2 -0
- data/src/core/lib/iomgr/ev_windows.cc +2 -0
- data/src/core/lib/iomgr/exec_ctx.cc +3 -1
- data/src/core/lib/iomgr/exec_ctx.h +21 -9
- data/src/core/lib/iomgr/executor.cc +13 -11
- data/src/core/lib/iomgr/executor.h +2 -0
- data/src/core/lib/iomgr/fork_posix.cc +4 -2
- data/src/core/lib/iomgr/fork_windows.cc +2 -0
- data/src/core/lib/iomgr/gethostname_fallback.cc +2 -0
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +2 -0
- data/src/core/lib/iomgr/gethostname_sysconf.cc +2 -0
- data/src/core/lib/iomgr/iocp_windows.cc +3 -1
- data/src/core/lib/iomgr/iocp_windows.h +3 -0
- data/src/core/lib/iomgr/iomgr.cc +2 -1
- data/src/core/lib/iomgr/iomgr.h +2 -0
- data/src/core/lib/iomgr/iomgr_custom.cc +63 -0
- data/src/core/lib/iomgr/iomgr_custom.h +47 -0
- data/src/core/lib/iomgr/iomgr_internal.cc +43 -0
- data/src/core/lib/iomgr/iomgr_internal.h +14 -0
- data/src/core/lib/iomgr/iomgr_posix.cc +30 -3
- data/src/core/lib/iomgr/iomgr_posix.h +2 -0
- data/src/core/lib/iomgr/iomgr_uv.cc +17 -20
- data/src/core/lib/iomgr/iomgr_windows.cc +29 -3
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +2 -0
- data/src/core/lib/iomgr/is_epollexclusive_available.h +2 -0
- data/src/core/lib/iomgr/load_file.cc +2 -0
- data/src/core/lib/iomgr/load_file.h +2 -0
- data/src/core/lib/iomgr/lockfree_event.cc +2 -0
- data/src/core/lib/iomgr/lockfree_event.h +14 -1
- data/src/core/lib/iomgr/nameser.h +2 -0
- data/src/core/lib/iomgr/network_status_tracker.cc +3 -1
- data/src/core/lib/iomgr/network_status_tracker.h +2 -0
- data/src/core/lib/iomgr/polling_entity.cc +2 -0
- data/src/core/lib/iomgr/polling_entity.h +2 -0
- data/src/core/lib/iomgr/pollset.cc +56 -0
- data/src/core/lib/iomgr/pollset.h +19 -0
- data/src/core/lib/iomgr/pollset_custom.cc +106 -0
- data/src/core/lib/iomgr/{timer_generic.h → pollset_custom.h} +15 -17
- data/src/core/lib/iomgr/pollset_set.cc +55 -0
- data/src/core/lib/iomgr/pollset_set.h +13 -0
- data/src/core/lib/iomgr/pollset_set_custom.cc +48 -0
- data/src/core/lib/iomgr/{pollset_uv.h → pollset_set_custom.h} +6 -7
- data/src/core/lib/iomgr/pollset_set_windows.cc +17 -10
- data/src/core/lib/iomgr/pollset_set_windows.h +2 -0
- data/src/core/lib/iomgr/pollset_uv.cc +42 -105
- data/src/core/lib/iomgr/pollset_windows.cc +20 -12
- data/src/core/lib/iomgr/pollset_windows.h +2 -0
- data/src/core/lib/iomgr/port.h +10 -19
- data/src/core/lib/iomgr/resolve_address.cc +50 -0
- data/src/core/lib/iomgr/resolve_address.h +39 -10
- data/src/core/lib/iomgr/resolve_address_custom.cc +187 -0
- data/src/core/lib/iomgr/resolve_address_custom.h +43 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -22
- data/src/core/lib/iomgr/resolve_address_windows.cc +10 -22
- data/src/core/lib/iomgr/resource_quota.cc +2 -0
- data/src/core/lib/iomgr/resource_quota.h +3 -5
- data/src/core/lib/iomgr/sockaddr.h +3 -11
- data/src/core/lib/iomgr/sockaddr_custom.h +54 -0
- data/src/core/lib/iomgr/sockaddr_posix.h +26 -0
- data/src/core/lib/iomgr/sockaddr_utils.cc +91 -71
- data/src/core/lib/iomgr/sockaddr_utils.h +4 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +21 -0
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -0
- data/src/core/lib/iomgr/socket_factory_posix.h +2 -0
- data/src/core/lib/iomgr/socket_mutator.cc +2 -0
- data/src/core/lib/iomgr/socket_mutator.h +2 -0
- data/src/core/lib/iomgr/socket_utils.h +11 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +15 -6
- data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
- data/src/core/lib/iomgr/socket_utils_posix.cc +3 -2
- data/src/core/lib/iomgr/socket_utils_posix.h +2 -0
- data/src/core/lib/iomgr/socket_utils_uv.cc +13 -2
- data/src/core/lib/iomgr/socket_utils_windows.cc +10 -0
- data/src/core/lib/iomgr/socket_windows.cc +2 -0
- data/src/core/lib/iomgr/socket_windows.h +2 -1
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +2 -0
- data/src/core/lib/iomgr/tcp_client.cc +36 -0
- data/src/core/lib/iomgr/tcp_client.h +13 -0
- data/src/core/lib/iomgr/tcp_client_custom.cc +151 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +11 -24
- data/src/core/lib/iomgr/tcp_client_posix.h +2 -0
- data/src/core/lib/iomgr/tcp_client_windows.cc +10 -23
- data/src/core/lib/iomgr/tcp_custom.cc +365 -0
- data/src/core/lib/iomgr/tcp_custom.h +81 -0
- data/src/core/lib/iomgr/tcp_posix.cc +3 -1
- data/src/core/lib/iomgr/tcp_posix.h +2 -0
- data/src/core/lib/iomgr/tcp_server.cc +73 -0
- data/src/core/lib/iomgr/tcp_server.h +24 -0
- data/src/core/lib/iomgr/tcp_server_custom.cc +472 -0
- data/src/core/lib/iomgr/tcp_server_posix.cc +41 -23
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +2 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +8 -6
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +2 -0
- data/src/core/lib/iomgr/tcp_server_windows.cc +43 -21
- data/src/core/lib/iomgr/tcp_uv.cc +308 -314
- data/src/core/lib/iomgr/tcp_windows.cc +3 -1
- data/src/core/lib/iomgr/tcp_windows.h +2 -0
- data/src/core/lib/iomgr/time_averaged_stats.cc +2 -0
- data/src/core/lib/iomgr/timer.cc +45 -0
- data/src/core/lib/iomgr/timer.h +36 -15
- data/src/core/lib/iomgr/timer_custom.cc +93 -0
- data/src/core/lib/iomgr/timer_custom.h +43 -0
- data/src/core/lib/iomgr/timer_generic.cc +12 -10
- data/src/core/lib/iomgr/timer_heap.cc +2 -4
- data/src/core/lib/iomgr/timer_heap.h +2 -0
- data/src/core/lib/iomgr/timer_manager.cc +12 -20
- data/src/core/lib/iomgr/timer_manager.h +2 -0
- data/src/core/lib/iomgr/timer_uv.cc +15 -49
- data/src/core/lib/iomgr/udp_server.cc +271 -230
- data/src/core/lib/iomgr/udp_server.h +44 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +10 -7
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +3 -1
- data/src/core/lib/iomgr/wakeup_fd_cv.h +2 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +2 -0
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +2 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +2 -0
- data/src/core/lib/iomgr/wakeup_fd_posix.h +2 -0
- data/src/core/lib/json/json.cc +38 -0
- data/src/core/lib/json/json.h +22 -1
- data/src/core/lib/json/json_reader.cc +2 -2
- data/src/core/lib/json/json_reader.h +1 -0
- data/src/core/lib/json/json_string.cc +2 -0
- data/src/core/lib/json/json_writer.cc +2 -2
- data/src/core/lib/json/json_writer.h +2 -0
- data/src/core/lib/profiling/basic_timers.cc +11 -9
- data/src/core/lib/profiling/timers.h +6 -3
- data/src/core/lib/security/context/security_context.cc +2 -0
- data/src/core/lib/security/context/security_context.h +2 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +119 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.h +102 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +72 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment.h +57 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +67 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +33 -0
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +114 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +126 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +46 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +112 -0
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +58 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +2 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -0
- data/src/core/lib/security/credentials/credentials.cc +2 -0
- data/src/core/lib/security/credentials/credentials.h +2 -0
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +5 -0
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +2 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +2 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -0
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +2 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -0
- data/src/core/lib/security/security_connector/alts_security_connector.cc +287 -0
- data/src/core/lib/security/security_connector/alts_security_connector.h +69 -0
- data/src/core/lib/security/security_connector/security_connector.cc +174 -74
- data/src/core/lib/security/security_connector/security_connector.h +41 -7
- data/src/core/lib/security/transport/auth_filters.h +2 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +14 -28
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -0
- data/src/core/lib/security/transport/secure_endpoint.h +2 -0
- data/src/core/lib/security/transport/security_handshaker.cc +2 -0
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -0
- data/src/core/lib/security/transport/target_authority_table.cc +75 -0
- data/src/core/lib/security/transport/{lb_targets_info.h → target_authority_table.h} +16 -8
- data/src/core/lib/security/transport/tsi_error.cc +2 -0
- data/src/core/lib/security/transport/tsi_error.h +2 -0
- data/src/core/lib/security/util/json_util.cc +2 -0
- data/src/core/lib/security/util/json_util.h +2 -0
- data/src/core/lib/slice/b64.cc +2 -0
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +2 -0
- data/src/core/lib/slice/percent_encoding.h +2 -0
- data/src/core/lib/slice/slice.cc +2 -0
- data/src/core/lib/slice/slice_buffer.cc +3 -1
- data/src/core/lib/slice/slice_hash_table.h +178 -45
- data/src/core/lib/slice/slice_intern.cc +2 -0
- data/src/core/lib/slice/slice_internal.h +2 -2
- data/src/core/lib/slice/slice_string_helpers.cc +2 -0
- data/src/core/lib/slice/slice_string_helpers.h +2 -1
- data/src/core/lib/slice/slice_weak_hash_table.h +105 -0
- data/src/core/lib/surface/api_trace.cc +3 -1
- data/src/core/lib/surface/api_trace.h +2 -0
- data/src/core/lib/surface/byte_buffer.cc +3 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +3 -0
- data/src/core/lib/surface/call.cc +46 -80
- data/src/core/lib/surface/call.h +2 -0
- data/src/core/lib/surface/call_details.cc +2 -0
- data/src/core/lib/surface/call_log_batch.cc +2 -0
- data/src/core/lib/surface/call_test_only.h +2 -0
- data/src/core/lib/surface/channel.cc +72 -41
- data/src/core/lib/surface/channel.h +2 -0
- data/src/core/lib/surface/channel_init.cc +2 -0
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +2 -0
- data/src/core/lib/surface/channel_stack_type.cc +3 -2
- data/src/core/lib/surface/channel_stack_type.h +2 -0
- data/src/core/lib/surface/completion_queue.h +2 -0
- data/src/core/lib/surface/completion_queue_factory.cc +3 -1
- data/src/core/lib/surface/completion_queue_factory.h +2 -0
- data/src/core/lib/surface/event_string.cc +2 -0
- data/src/core/lib/surface/event_string.h +2 -0
- data/src/core/lib/surface/init.cc +5 -2
- data/src/core/lib/surface/init_secure.cc +5 -2
- data/src/core/lib/surface/lame_client.cc +7 -5
- data/src/core/lib/surface/lame_client.h +2 -0
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +2 -0
- data/src/core/lib/surface/server.h +2 -0
- data/src/core/lib/surface/validate_metadata.cc +2 -1
- data/src/core/lib/surface/validate_metadata.h +2 -0
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/bdp_estimator.cc +2 -0
- data/src/core/lib/transport/byte_stream.cc +94 -116
- data/src/core/lib/transport/byte_stream.h +111 -78
- data/src/core/lib/transport/connectivity_state.cc +2 -0
- data/src/core/lib/transport/connectivity_state.h +3 -1
- data/src/core/lib/transport/error_utils.cc +2 -0
- data/src/core/lib/transport/error_utils.h +2 -0
- data/src/core/lib/transport/metadata.cc +2 -0
- data/src/core/lib/transport/metadata.h +3 -1
- data/src/core/lib/transport/metadata_batch.cc +26 -0
- data/src/core/lib/transport/metadata_batch.h +12 -1
- data/src/core/lib/transport/pid_controller.cc +2 -0
- data/src/core/lib/transport/pid_controller.h +2 -0
- data/src/core/lib/transport/service_config.cc +21 -175
- data/src/core/lib/transport/service_config.h +223 -35
- data/src/core/lib/transport/static_metadata.cc +310 -294
- data/src/core/lib/transport/static_metadata.h +96 -82
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +3 -0
- data/src/core/lib/transport/status_metadata.cc +54 -0
- data/src/core/lib/{iomgr/timer_uv.h → transport/status_metadata.h} +10 -12
- data/src/core/lib/transport/timeout_encoding.cc +2 -1
- data/src/core/lib/transport/timeout_encoding.h +2 -0
- data/src/core/lib/transport/transport.cc +3 -1
- data/src/core/lib/transport/transport.h +33 -7
- data/src/core/lib/transport/transport_impl.h +2 -0
- data/src/core/lib/transport/transport_op_string.cc +10 -3
- data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
- data/src/core/tsi/alts/crypt/aes_gcm.cc +687 -0
- data/src/core/tsi/alts/crypt/gsec.cc +189 -0
- data/src/core/tsi/alts/crypt/gsec.h +454 -0
- data/src/core/tsi/alts/frame_protector/alts_counter.cc +118 -0
- data/src/core/tsi/alts/frame_protector/alts_counter.h +98 -0
- data/src/core/tsi/alts/frame_protector/alts_crypter.cc +66 -0
- data/src/core/tsi/alts/frame_protector/alts_crypter.h +255 -0
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +407 -0
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +55 -0
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +114 -0
- data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +114 -0
- data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +105 -0
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +103 -0
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +218 -0
- data/src/core/tsi/alts/frame_protector/frame_handler.h +236 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +316 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +137 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.cc +520 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api.h +323 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.cc +143 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +149 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_event.cc +73 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_event.h +93 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +483 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +83 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +52 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +58 -0
- data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +52 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.c +48 -0
- data/src/core/tsi/alts/handshaker/altscontext.pb.h +64 -0
- data/src/core/tsi/alts/handshaker/handshaker.pb.c +123 -0
- data/src/core/tsi/alts/handshaker/handshaker.pb.h +255 -0
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +50 -0
- data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +78 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +196 -0
- data/src/core/tsi/alts/handshaker/transport_security_common_api.h +163 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +180 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +52 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +144 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +49 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +91 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +174 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +100 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +476 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +199 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +296 -0
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +52 -0
- data/src/core/tsi/alts_transport_security.cc +3 -1
- data/src/core/tsi/alts_transport_security.h +4 -2
- data/src/core/tsi/fake_transport_security.cc +2 -1
- data/src/core/tsi/fake_transport_security.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +73 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +58 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +211 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +93 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +76 -0
- data/src/core/tsi/ssl_transport_security.cc +266 -62
- data/src/core/tsi/ssl_transport_security.h +128 -6
- data/src/core/tsi/ssl_types.h +2 -0
- data/src/core/tsi/transport_security.cc +2 -0
- data/src/core/tsi/transport_security.h +2 -0
- data/src/core/tsi/transport_security_adapter.cc +2 -0
- data/src/core/tsi/transport_security_adapter.h +2 -0
- data/src/core/tsi/transport_security_grpc.cc +2 -0
- data/src/core/tsi/transport_security_grpc.h +2 -0
- data/src/core/tsi/transport_security_interface.h +2 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -2
- data/src/ruby/ext/grpc/rb_call.c +1 -13
- data/src/ruby/ext/grpc/rb_channel.c +6 -6
- data/src/ruby/ext/grpc/rb_compression_options.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +15 -0
- data/src/ruby/lib/grpc/core/time_consts.rb +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +19 -8
- data/src/ruby/lib/grpc/generic/client_stub.rb +6 -10
- data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +133 -0
- data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +54 -0
- data/src/ruby/spec/pb/package_with_underscore/data.proto +23 -0
- data/src/ruby/spec/pb/package_with_underscore/service.proto +23 -0
- data/third_party/address_sorting/address_sorting.c +369 -0
- data/third_party/address_sorting/address_sorting_internal.h +70 -0
- data/third_party/address_sorting/address_sorting_posix.c +97 -0
- data/third_party/address_sorting/address_sorting_windows.c +55 -0
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +110 -0
- data/third_party/boringssl/crypto/asn1/a_enum.c +20 -9
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +3 -0
- data/third_party/boringssl/crypto/asn1/a_int.c +19 -8
- data/third_party/boringssl/crypto/asn1/a_object.c +0 -128
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +2 -4
- data/third_party/boringssl/crypto/asn1/tasn_new.c +3 -2
- data/third_party/boringssl/crypto/bn_extra/bn_asn1.c +0 -16
- data/third_party/boringssl/crypto/buf/buf.c +14 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +93 -0
- data/third_party/boringssl/crypto/conf/conf.c +2 -2
- data/third_party/boringssl/crypto/cpu-intel.c +17 -17
- data/third_party/boringssl/crypto/crypto.c +16 -4
- data/third_party/boringssl/crypto/curve25519/spake25519.c +11 -11
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +9 -21
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +2 -2
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -8
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +2 -23
- data/third_party/boringssl/crypto/ex_data.c +0 -1
- data/third_party/boringssl/crypto/fipsmodule/bn/add.c +7 -11
- data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +19 -16
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +15 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +53 -46
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +242 -85
- data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +42 -47
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +176 -34
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +118 -65
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +94 -61
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +79 -63
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +26 -28
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +250 -149
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +0 -27
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +54 -20
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +7 -41
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +6 -40
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +3 -64
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +27 -9
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +203 -205
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +14 -15
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +12 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +4 -3
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +25 -36
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +10 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +0 -4
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +9 -19
- data/third_party/boringssl/crypto/lhash/lhash.c +19 -0
- data/third_party/boringssl/crypto/obj/obj.c +29 -69
- data/third_party/boringssl/crypto/pem/pem_lib.c +2 -2
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +4 -55
- data/third_party/boringssl/crypto/rsa_extra/rsa_asn1.c +3 -22
- data/third_party/boringssl/crypto/x509/by_dir.c +1 -3
- data/third_party/boringssl/crypto/x509/by_file.c +0 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +0 -1
- data/third_party/boringssl/crypto/x509/x509_obj.c +1 -3
- data/third_party/boringssl/crypto/x509/x509_txt.c +0 -6
- data/third_party/boringssl/crypto/x509/x509_vfy.c +0 -1
- data/third_party/boringssl/crypto/x509/x509_vpm.c +0 -1
- data/third_party/boringssl/crypto/x509/x_algor.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +3 -4
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_info.c +1 -2
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +15 -7
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +41 -2
- data/third_party/boringssl/include/openssl/asn1.h +0 -1
- data/third_party/boringssl/include/openssl/base.h +1 -1
- data/third_party/boringssl/include/openssl/bio.h +5 -2
- data/third_party/boringssl/include/openssl/bn.h +2 -17
- data/third_party/boringssl/include/openssl/buf.h +4 -0
- data/third_party/boringssl/include/openssl/bytestring.h +11 -0
- data/third_party/boringssl/include/openssl/chacha.h +5 -1
- data/third_party/boringssl/include/openssl/cipher.h +10 -0
- data/third_party/boringssl/include/openssl/conf.h +4 -8
- data/third_party/boringssl/include/openssl/dsa.h +2 -18
- data/third_party/boringssl/include/openssl/ec.h +5 -5
- data/third_party/boringssl/include/openssl/ecdsa.h +10 -28
- data/third_party/boringssl/include/openssl/evp.h +0 -4
- data/third_party/boringssl/include/openssl/lhash.h +1 -18
- data/third_party/boringssl/include/openssl/obj.h +1 -0
- data/third_party/boringssl/include/openssl/rsa.h +3 -4
- data/third_party/boringssl/include/openssl/ssl.h +35 -54
- data/third_party/boringssl/include/openssl/ssl3.h +2 -0
- data/third_party/boringssl/include/openssl/stack.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +1 -16
- data/third_party/boringssl/include/openssl/x509.h +3 -2
- data/third_party/boringssl/include/openssl/x509_vfy.h +0 -2
- data/third_party/boringssl/include/openssl/x509v3.h +1 -0
- data/third_party/boringssl/ssl/custom_extensions.cc +1 -1
- data/third_party/boringssl/ssl/d1_both.cc +120 -129
- data/third_party/boringssl/ssl/d1_lib.cc +23 -21
- data/third_party/boringssl/ssl/d1_pkt.cc +39 -143
- data/third_party/boringssl/ssl/dtls_method.cc +16 -23
- data/third_party/boringssl/ssl/dtls_record.cc +11 -4
- data/third_party/boringssl/ssl/handshake.cc +109 -40
- data/third_party/boringssl/ssl/handshake_client.cc +104 -96
- data/third_party/boringssl/ssl/handshake_server.cc +62 -72
- data/third_party/boringssl/ssl/internal.h +397 -318
- data/third_party/boringssl/ssl/s3_both.cc +173 -191
- data/third_party/boringssl/ssl/s3_lib.cc +26 -34
- data/third_party/boringssl/ssl/s3_pkt.cc +105 -247
- data/third_party/boringssl/ssl/ssl_asn1.cc +22 -22
- data/third_party/boringssl/ssl/ssl_buffer.cc +98 -108
- data/third_party/boringssl/ssl/ssl_cert.cc +12 -1
- data/third_party/boringssl/ssl/ssl_cipher.cc +23 -28
- data/third_party/boringssl/ssl/ssl_key_share.cc +11 -6
- data/third_party/boringssl/ssl/ssl_lib.cc +190 -113
- data/third_party/boringssl/ssl/ssl_privkey.cc +76 -106
- data/third_party/boringssl/ssl/ssl_session.cc +3 -3
- data/third_party/boringssl/ssl/ssl_stat.cc +3 -3
- data/third_party/boringssl/ssl/ssl_transcript.cc +38 -22
- data/third_party/boringssl/ssl/ssl_versions.cc +64 -31
- data/third_party/boringssl/ssl/t1_enc.cc +137 -154
- data/third_party/boringssl/ssl/t1_lib.cc +463 -478
- data/third_party/boringssl/ssl/tls13_both.cc +57 -58
- data/third_party/boringssl/ssl/tls13_client.cc +256 -121
- data/third_party/boringssl/ssl/tls13_enc.cc +187 -72
- data/third_party/boringssl/ssl/tls13_server.cc +187 -86
- data/third_party/boringssl/ssl/tls_method.cc +20 -30
- data/third_party/boringssl/ssl/tls_record.cc +77 -40
- data/third_party/boringssl/third_party/fiat/curve25519.c +5062 -0
- data/third_party/boringssl/{crypto/curve25519 → third_party/fiat}/internal.h +40 -27
- data/third_party/nanopb/pb.h +1 -1
- metadata +147 -45
- data/src/core/lib/gpr/thd.cc +0 -49
- data/src/core/lib/gpr/thd.h +0 -71
- data/src/core/lib/gpr/thd_posix.cc +0 -154
- data/src/core/lib/gpr/thd_windows.cc +0 -107
- data/src/core/lib/iomgr/iomgr_uv.h +0 -37
- data/src/core/lib/iomgr/pollset_set_uv.cc +0 -43
- data/src/core/lib/iomgr/resolve_address_uv.cc +0 -284
- data/src/core/lib/iomgr/tcp_client_uv.cc +0 -175
- data/src/core/lib/iomgr/tcp_server_uv.cc +0 -471
- data/src/core/lib/iomgr/tcp_uv.h +0 -51
- data/src/core/lib/security/transport/lb_targets_info.cc +0 -59
- data/src/core/lib/slice/slice_hash_table.cc +0 -145
- data/third_party/boringssl/crypto/curve25519/curve25519.c +0 -4938
@@ -21,6 +21,8 @@
|
|
21
21
|
#define _GNU_SOURCE
|
22
22
|
#endif
|
23
23
|
|
24
|
+
#include <grpc/support/port_platform.h>
|
25
|
+
|
24
26
|
#include "src/core/lib/iomgr/port.h"
|
25
27
|
|
26
28
|
#ifdef GRPC_POSIX_SOCKET
|
@@ -59,6 +61,11 @@ static bool has_so_reuseport = false;
|
|
59
61
|
static void init(void) {
|
60
62
|
#ifndef GPR_MANYLINUX1
|
61
63
|
int s = socket(AF_INET, SOCK_STREAM, 0);
|
64
|
+
if (s < 0) {
|
65
|
+
/* This might be an ipv6-only environment in which case 'socket(AF_INET,..)'
|
66
|
+
call would fail. Try creating IPv6 socket in that case */
|
67
|
+
s = socket(AF_INET6, SOCK_STREAM, 0);
|
68
|
+
}
|
62
69
|
if (s >= 0) {
|
63
70
|
has_so_reuseport = GRPC_LOG_IF_ERROR("check for SO_REUSEPORT",
|
64
71
|
grpc_set_socket_reuse_port(s, 1));
|
@@ -67,9 +74,9 @@ static void init(void) {
|
|
67
74
|
#endif
|
68
75
|
}
|
69
76
|
|
70
|
-
grpc_error*
|
71
|
-
|
72
|
-
|
77
|
+
static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
|
78
|
+
const grpc_channel_args* args,
|
79
|
+
grpc_tcp_server** server) {
|
73
80
|
gpr_once_init(&check_init, init);
|
74
81
|
|
75
82
|
grpc_tcp_server* s =
|
@@ -211,7 +218,8 @@ static void on_read(void* arg, grpc_error* err) {
|
|
211
218
|
grpc_resolved_address addr;
|
212
219
|
char* addr_str;
|
213
220
|
char* name;
|
214
|
-
addr
|
221
|
+
memset(&addr, 0, sizeof(addr));
|
222
|
+
addr.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
215
223
|
/* Note: If we ever decide to return this address to the user, remember to
|
216
224
|
strip off the ::ffff:0.0.0.0/96 prefix first. */
|
217
225
|
int fd = grpc_accept4(sp->fd, &addr, 1, 1);
|
@@ -390,9 +398,9 @@ static grpc_error* clone_port(grpc_tcp_listener* listener, unsigned count) {
|
|
390
398
|
return GRPC_ERROR_NONE;
|
391
399
|
}
|
392
400
|
|
393
|
-
grpc_error*
|
394
|
-
|
395
|
-
|
401
|
+
static grpc_error* tcp_server_add_port(grpc_tcp_server* s,
|
402
|
+
const grpc_resolved_address* addr,
|
403
|
+
int* out_port) {
|
396
404
|
grpc_tcp_listener* sp;
|
397
405
|
grpc_resolved_address sockname_temp;
|
398
406
|
grpc_resolved_address addr6_v4mapped;
|
@@ -410,11 +418,12 @@ grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
|
|
410
418
|
as some previously created listener. */
|
411
419
|
if (requested_port == 0) {
|
412
420
|
for (sp = s->head; sp; sp = sp->next) {
|
413
|
-
sockname_temp.len =
|
421
|
+
sockname_temp.len =
|
422
|
+
static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
414
423
|
if (0 ==
|
415
424
|
getsockname(sp->fd,
|
416
|
-
reinterpret_cast<
|
417
|
-
|
425
|
+
reinterpret_cast<grpc_sockaddr*>(&sockname_temp.addr),
|
426
|
+
&sockname_temp.len)) {
|
418
427
|
int used_port = grpc_sockaddr_get_port(&sockname_temp);
|
419
428
|
if (used_port > 0) {
|
420
429
|
memcpy(&sockname_temp, addr, sizeof(grpc_resolved_address));
|
@@ -456,8 +465,7 @@ static grpc_tcp_listener* get_port_index(grpc_tcp_server* s,
|
|
456
465
|
return nullptr;
|
457
466
|
}
|
458
467
|
|
459
|
-
unsigned
|
460
|
-
unsigned port_index) {
|
468
|
+
unsigned tcp_server_port_fd_count(grpc_tcp_server* s, unsigned port_index) {
|
461
469
|
unsigned num_fds = 0;
|
462
470
|
gpr_mu_lock(&s->mu);
|
463
471
|
grpc_tcp_listener* sp = get_port_index(s, port_index);
|
@@ -468,8 +476,8 @@ unsigned grpc_tcp_server_port_fd_count(grpc_tcp_server* s,
|
|
468
476
|
return num_fds;
|
469
477
|
}
|
470
478
|
|
471
|
-
int
|
472
|
-
|
479
|
+
static int tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
|
480
|
+
unsigned fd_index) {
|
473
481
|
gpr_mu_lock(&s->mu);
|
474
482
|
grpc_tcp_listener* sp = get_port_index(s, port_index);
|
475
483
|
for (; sp; sp = sp->sibling, --fd_index) {
|
@@ -482,10 +490,10 @@ int grpc_tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
|
|
482
490
|
return -1;
|
483
491
|
}
|
484
492
|
|
485
|
-
void
|
486
|
-
|
487
|
-
|
488
|
-
|
493
|
+
static void tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollsets,
|
494
|
+
size_t pollset_count,
|
495
|
+
grpc_tcp_server_cb on_accept_cb,
|
496
|
+
void* on_accept_cb_arg) {
|
489
497
|
size_t i;
|
490
498
|
grpc_tcp_listener* sp;
|
491
499
|
GPR_ASSERT(on_accept_cb);
|
@@ -524,20 +532,20 @@ void grpc_tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollsets,
|
|
524
532
|
gpr_mu_unlock(&s->mu);
|
525
533
|
}
|
526
534
|
|
527
|
-
grpc_tcp_server*
|
535
|
+
grpc_tcp_server* tcp_server_ref(grpc_tcp_server* s) {
|
528
536
|
gpr_ref_non_zero(&s->refs);
|
529
537
|
return s;
|
530
538
|
}
|
531
539
|
|
532
|
-
void
|
533
|
-
|
540
|
+
static void tcp_server_shutdown_starting_add(grpc_tcp_server* s,
|
541
|
+
grpc_closure* shutdown_starting) {
|
534
542
|
gpr_mu_lock(&s->mu);
|
535
543
|
grpc_closure_list_append(&s->shutdown_starting, shutdown_starting,
|
536
544
|
GRPC_ERROR_NONE);
|
537
545
|
gpr_mu_unlock(&s->mu);
|
538
546
|
}
|
539
547
|
|
540
|
-
void
|
548
|
+
static void tcp_server_unref(grpc_tcp_server* s) {
|
541
549
|
if (gpr_unref(&s->refs)) {
|
542
550
|
grpc_tcp_server_shutdown_listeners(s);
|
543
551
|
gpr_mu_lock(&s->mu);
|
@@ -547,7 +555,7 @@ void grpc_tcp_server_unref(grpc_tcp_server* s) {
|
|
547
555
|
}
|
548
556
|
}
|
549
557
|
|
550
|
-
void
|
558
|
+
static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {
|
551
559
|
gpr_mu_lock(&s->mu);
|
552
560
|
s->shutdown_listeners = true;
|
553
561
|
/* shutdown all fd's */
|
@@ -561,4 +569,14 @@ void grpc_tcp_server_shutdown_listeners(grpc_tcp_server* s) {
|
|
561
569
|
gpr_mu_unlock(&s->mu);
|
562
570
|
}
|
563
571
|
|
572
|
+
grpc_tcp_server_vtable grpc_posix_tcp_server_vtable = {
|
573
|
+
tcp_server_create,
|
574
|
+
tcp_server_start,
|
575
|
+
tcp_server_add_port,
|
576
|
+
tcp_server_port_fd_count,
|
577
|
+
tcp_server_port_fd,
|
578
|
+
tcp_server_ref,
|
579
|
+
tcp_server_shutdown_starting_add,
|
580
|
+
tcp_server_unref,
|
581
|
+
tcp_server_shutdown_listeners};
|
564
582
|
#endif
|
@@ -19,6 +19,8 @@
|
|
19
19
|
#ifndef GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
|
20
20
|
#define GRPC_CORE_LIB_IOMGR_TCP_SERVER_UTILS_POSIX_H
|
21
21
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
22
24
|
#include "src/core/lib/iomgr/ev_posix.h"
|
23
25
|
#include "src/core/lib/iomgr/resolve_address.h"
|
24
26
|
#include "src/core/lib/iomgr/socket_utils_posix.h"
|
@@ -16,6 +16,8 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
19
21
|
#include "src/core/lib/iomgr/port.h"
|
20
22
|
|
21
23
|
#ifdef GRPC_POSIX_SOCKET
|
@@ -168,10 +170,8 @@ grpc_error* grpc_tcp_server_prepare_socket(int fd,
|
|
168
170
|
err = grpc_set_socket_no_sigpipe_if_possible(fd);
|
169
171
|
if (err != GRPC_ERROR_NONE) goto error;
|
170
172
|
|
171
|
-
|
172
|
-
|
173
|
-
reinterpret_cast<struct sockaddr*>(const_cast<char*>(addr->addr)),
|
174
|
-
static_cast<socklen_t>(addr->len)) < 0) {
|
173
|
+
if (bind(fd, reinterpret_cast<grpc_sockaddr*>(const_cast<char*>(addr->addr)),
|
174
|
+
addr->len) < 0) {
|
175
175
|
err = GRPC_OS_ERROR(errno, "bind");
|
176
176
|
goto error;
|
177
177
|
}
|
@@ -181,10 +181,10 @@ grpc_error* grpc_tcp_server_prepare_socket(int fd,
|
|
181
181
|
goto error;
|
182
182
|
}
|
183
183
|
|
184
|
-
sockname_temp.len = sizeof(struct sockaddr_storage);
|
184
|
+
sockname_temp.len = static_cast<socklen_t>(sizeof(struct sockaddr_storage));
|
185
185
|
|
186
|
-
if (getsockname(fd, reinterpret_cast<
|
187
|
-
|
186
|
+
if (getsockname(fd, reinterpret_cast<grpc_sockaddr*>(sockname_temp.addr),
|
187
|
+
&sockname_temp.len) < 0) {
|
188
188
|
err = GRPC_OS_ERROR(errno, "getsockname");
|
189
189
|
goto error;
|
190
190
|
}
|
@@ -16,6 +16,8 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
19
21
|
#include "src/core/lib/iomgr/port.h"
|
20
22
|
|
21
23
|
#ifdef GRPC_HAVE_IFADDRS
|
@@ -66,14 +68,14 @@ static grpc_error* get_unused_port(int* port) {
|
|
66
68
|
if (dsmode == GRPC_DSMODE_IPV4) {
|
67
69
|
grpc_sockaddr_make_wildcard4(0, &wild);
|
68
70
|
}
|
69
|
-
if (bind(fd, reinterpret_cast<const
|
70
|
-
|
71
|
+
if (bind(fd, reinterpret_cast<const grpc_sockaddr*>(wild.addr), wild.len) !=
|
72
|
+
0) {
|
71
73
|
err = GRPC_OS_ERROR(errno, "bind");
|
72
74
|
close(fd);
|
73
75
|
return err;
|
74
76
|
}
|
75
|
-
if (getsockname(fd, reinterpret_cast<
|
76
|
-
|
77
|
+
if (getsockname(fd, reinterpret_cast<grpc_sockaddr*>(wild.addr), &wild.len) !=
|
78
|
+
0) {
|
77
79
|
err = GRPC_OS_ERROR(errno, "getsockname");
|
78
80
|
close(fd);
|
79
81
|
return err;
|
@@ -117,9 +119,9 @@ grpc_error* grpc_tcp_server_add_all_local_addrs(grpc_tcp_server* s,
|
|
117
119
|
if (ifa_it->ifa_addr == nullptr) {
|
118
120
|
continue;
|
119
121
|
} else if (ifa_it->ifa_addr->sa_family == AF_INET) {
|
120
|
-
addr.len = sizeof(
|
122
|
+
addr.len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in));
|
121
123
|
} else if (ifa_it->ifa_addr->sa_family == AF_INET6) {
|
122
|
-
addr.len = sizeof(
|
124
|
+
addr.len = static_cast<socklen_t>(sizeof(grpc_sockaddr_in6));
|
123
125
|
} else {
|
124
126
|
continue;
|
125
127
|
}
|
@@ -16,6 +16,8 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
19
21
|
#include "src/core/lib/iomgr/port.h"
|
20
22
|
|
21
23
|
#ifdef GRPC_WINSOCK_SOCKET
|
@@ -48,7 +50,7 @@ typedef struct grpc_tcp_listener grpc_tcp_listener;
|
|
48
50
|
struct grpc_tcp_listener {
|
49
51
|
/* This seemingly magic number comes from AcceptEx's documentation. each
|
50
52
|
address buffer needs to have at least 16 more bytes at their end. */
|
51
|
-
uint8_t addresses[(sizeof(
|
53
|
+
uint8_t addresses[(sizeof(grpc_sockaddr_in6) + 16) * 2];
|
52
54
|
/* This will hold the socket for the next accept. */
|
53
55
|
SOCKET new_socket;
|
54
56
|
/* The listener winsocket. */
|
@@ -94,9 +96,9 @@ struct grpc_tcp_server {
|
|
94
96
|
|
95
97
|
/* Public function. Allocates the proper data structures to hold a
|
96
98
|
grpc_tcp_server. */
|
97
|
-
grpc_error*
|
98
|
-
|
99
|
-
|
99
|
+
static grpc_error* tcp_server_create(grpc_closure* shutdown_complete,
|
100
|
+
const grpc_channel_args* args,
|
101
|
+
grpc_tcp_server** server) {
|
100
102
|
grpc_tcp_server* s = (grpc_tcp_server*)gpr_malloc(sizeof(grpc_tcp_server));
|
101
103
|
s->channel_args = grpc_channel_args_copy(args);
|
102
104
|
gpr_ref_init(&s->refs, 1);
|
@@ -140,13 +142,13 @@ static void finish_shutdown_locked(grpc_tcp_server* s) {
|
|
140
142
|
GRPC_ERROR_NONE);
|
141
143
|
}
|
142
144
|
|
143
|
-
grpc_tcp_server*
|
145
|
+
static grpc_tcp_server* tcp_server_ref(grpc_tcp_server* s) {
|
144
146
|
gpr_ref_non_zero(&s->refs);
|
145
147
|
return s;
|
146
148
|
}
|
147
149
|
|
148
|
-
void
|
149
|
-
|
150
|
+
static void tcp_server_shutdown_starting_add(grpc_tcp_server* s,
|
151
|
+
grpc_closure* shutdown_starting) {
|
150
152
|
gpr_mu_lock(&s->mu);
|
151
153
|
grpc_closure_list_append(&s->shutdown_starting, shutdown_starting,
|
152
154
|
GRPC_ERROR_NONE);
|
@@ -170,7 +172,7 @@ static void tcp_server_destroy(grpc_tcp_server* s) {
|
|
170
172
|
gpr_mu_unlock(&s->mu);
|
171
173
|
}
|
172
174
|
|
173
|
-
void
|
175
|
+
static void tcp_server_unref(grpc_tcp_server* s) {
|
174
176
|
if (gpr_unref(&s->refs)) {
|
175
177
|
grpc_tcp_server_shutdown_listeners(s);
|
176
178
|
gpr_mu_lock(&s->mu);
|
@@ -193,7 +195,7 @@ static grpc_error* prepare_socket(SOCKET sock,
|
|
193
195
|
goto failure;
|
194
196
|
}
|
195
197
|
|
196
|
-
if (bind(sock, (const
|
198
|
+
if (bind(sock, (const grpc_sockaddr*)addr->addr, (int)addr->len) ==
|
197
199
|
SOCKET_ERROR) {
|
198
200
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "bind");
|
199
201
|
goto failure;
|
@@ -205,7 +207,7 @@ static grpc_error* prepare_socket(SOCKET sock,
|
|
205
207
|
}
|
206
208
|
|
207
209
|
sockname_temp_len = sizeof(struct sockaddr_storage);
|
208
|
-
if (getsockname(sock, (
|
210
|
+
if (getsockname(sock, (grpc_sockaddr*)sockname_temp.addr,
|
209
211
|
&sockname_temp_len) == SOCKET_ERROR) {
|
210
212
|
error = GRPC_WSA_ERROR(WSAGetLastError(), "getsockname");
|
211
213
|
goto failure;
|
@@ -243,7 +245,7 @@ static void decrement_active_ports_and_notify_locked(grpc_tcp_listener* sp) {
|
|
243
245
|
static grpc_error* start_accept_locked(grpc_tcp_listener* port) {
|
244
246
|
SOCKET sock = INVALID_SOCKET;
|
245
247
|
BOOL success;
|
246
|
-
DWORD addrlen = sizeof(
|
248
|
+
DWORD addrlen = sizeof(grpc_sockaddr_in6) + 16;
|
247
249
|
DWORD bytes_received = 0;
|
248
250
|
grpc_error* error = GRPC_ERROR_NONE;
|
249
251
|
|
@@ -341,7 +343,7 @@ static void on_accept(void* arg, grpc_error* error) {
|
|
341
343
|
gpr_free(utf8_message);
|
342
344
|
}
|
343
345
|
int peer_name_len = (int)peer_name.len;
|
344
|
-
err = getpeername(sock, (
|
346
|
+
err = getpeername(sock, (grpc_sockaddr*)peer_name.addr, &peer_name_len);
|
345
347
|
peer_name.len = (size_t)peer_name_len;
|
346
348
|
if (!err) {
|
347
349
|
peer_name_string = grpc_sockaddr_to_uri(&peer_name);
|
@@ -440,9 +442,9 @@ static grpc_error* add_socket_to_server(grpc_tcp_server* s, SOCKET sock,
|
|
440
442
|
return GRPC_ERROR_NONE;
|
441
443
|
}
|
442
444
|
|
443
|
-
grpc_error*
|
444
|
-
|
445
|
-
|
445
|
+
static grpc_error* tcp_server_add_port(grpc_tcp_server* s,
|
446
|
+
const grpc_resolved_address* addr,
|
447
|
+
int* port) {
|
446
448
|
grpc_tcp_listener* sp = NULL;
|
447
449
|
SOCKET sock;
|
448
450
|
grpc_resolved_address addr6_v4mapped;
|
@@ -462,7 +464,7 @@ grpc_error* grpc_tcp_server_add_port(grpc_tcp_server* s,
|
|
462
464
|
for (sp = s->head; sp; sp = sp->next) {
|
463
465
|
int sockname_temp_len = sizeof(struct sockaddr_storage);
|
464
466
|
if (0 == getsockname(sp->socket->socket,
|
465
|
-
(
|
467
|
+
(grpc_sockaddr*)sockname_temp.addr,
|
466
468
|
&sockname_temp_len)) {
|
467
469
|
sockname_temp.len = (size_t)sockname_temp_len;
|
468
470
|
*port = grpc_sockaddr_get_port(&sockname_temp);
|
@@ -514,10 +516,10 @@ done:
|
|
514
516
|
return error;
|
515
517
|
}
|
516
518
|
|
517
|
-
void
|
518
|
-
|
519
|
-
|
520
|
-
|
519
|
+
static void tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollset,
|
520
|
+
size_t pollset_count,
|
521
|
+
grpc_tcp_server_cb on_accept_cb,
|
522
|
+
void* on_accept_cb_arg) {
|
521
523
|
grpc_tcp_listener* sp;
|
522
524
|
GPR_ASSERT(on_accept_cb);
|
523
525
|
gpr_mu_lock(&s->mu);
|
@@ -532,6 +534,26 @@ void grpc_tcp_server_start(grpc_tcp_server* s, grpc_pollset** pollset,
|
|
532
534
|
gpr_mu_unlock(&s->mu);
|
533
535
|
}
|
534
536
|
|
535
|
-
|
537
|
+
static unsigned tcp_server_port_fd_count(grpc_tcp_server* s,
|
538
|
+
unsigned port_index) {
|
539
|
+
return 0;
|
540
|
+
}
|
541
|
+
|
542
|
+
static int tcp_server_port_fd(grpc_tcp_server* s, unsigned port_index,
|
543
|
+
unsigned fd_index) {
|
544
|
+
return -1;
|
545
|
+
}
|
536
546
|
|
547
|
+
static void tcp_server_shutdown_listeners(grpc_tcp_server* s) {}
|
548
|
+
|
549
|
+
grpc_tcp_server_vtable grpc_windows_tcp_server_vtable = {
|
550
|
+
tcp_server_create,
|
551
|
+
tcp_server_start,
|
552
|
+
tcp_server_add_port,
|
553
|
+
tcp_server_port_fd_count,
|
554
|
+
tcp_server_port_fd,
|
555
|
+
tcp_server_ref,
|
556
|
+
tcp_server_shutdown_starting_add,
|
557
|
+
tcp_server_unref,
|
558
|
+
tcp_server_shutdown_listeners};
|
537
559
|
#endif /* GRPC_WINSOCK_SOCKET */
|
@@ -16,10 +16,11 @@
|
|
16
16
|
*
|
17
17
|
*/
|
18
18
|
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
19
21
|
#include "src/core/lib/iomgr/port.h"
|
20
22
|
|
21
23
|
#ifdef GRPC_UV
|
22
|
-
|
23
24
|
#include <limits.h>
|
24
25
|
#include <string.h>
|
25
26
|
|
@@ -31,393 +32,386 @@
|
|
31
32
|
|
32
33
|
#include "src/core/lib/gpr/string.h"
|
33
34
|
#include "src/core/lib/iomgr/error.h"
|
34
|
-
#include "src/core/lib/iomgr/
|
35
|
+
#include "src/core/lib/iomgr/iomgr_custom.h"
|
35
36
|
#include "src/core/lib/iomgr/network_status_tracker.h"
|
37
|
+
#include "src/core/lib/iomgr/resolve_address_custom.h"
|
36
38
|
#include "src/core/lib/iomgr/resource_quota.h"
|
37
|
-
#include "src/core/lib/iomgr/
|
39
|
+
#include "src/core/lib/iomgr/tcp_custom.h"
|
38
40
|
#include "src/core/lib/slice/slice_internal.h"
|
39
41
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
40
42
|
|
41
|
-
|
43
|
+
#include <uv.h>
|
42
44
|
|
43
|
-
|
44
|
-
grpc_endpoint base;
|
45
|
-
gpr_refcount refcount;
|
45
|
+
#define IGNORE_CONST(addr) ((grpc_sockaddr*)(uintptr_t)(addr))
|
46
46
|
|
47
|
+
typedef struct uv_socket_t {
|
48
|
+
uv_connect_t connect_req;
|
47
49
|
uv_write_t write_req;
|
48
50
|
uv_shutdown_t shutdown_req;
|
49
|
-
|
50
51
|
uv_tcp_t* handle;
|
51
|
-
|
52
|
-
grpc_closure* read_cb;
|
53
|
-
grpc_closure* write_cb;
|
54
|
-
|
55
|
-
grpc_slice_buffer* read_slices;
|
56
|
-
grpc_slice_buffer* write_slices;
|
57
52
|
uv_buf_t* write_buffers;
|
58
53
|
|
59
|
-
|
60
|
-
|
54
|
+
char* read_buf;
|
55
|
+
size_t read_len;
|
61
56
|
|
62
|
-
bool
|
57
|
+
bool pending_connection;
|
58
|
+
grpc_custom_socket* accept_socket;
|
59
|
+
grpc_error* accept_error;
|
63
60
|
|
64
|
-
|
65
|
-
|
66
|
-
|
61
|
+
grpc_custom_connect_callback connect_cb;
|
62
|
+
grpc_custom_write_callback write_cb;
|
63
|
+
grpc_custom_read_callback read_cb;
|
64
|
+
grpc_custom_accept_callback accept_cb;
|
65
|
+
grpc_custom_close_callback close_cb;
|
67
66
|
|
68
|
-
|
69
|
-
return grpc_error_set_str(
|
70
|
-
grpc_error_set_int(
|
71
|
-
src_error,
|
72
|
-
/* All tcp errors are marked with UNAVAILABLE so that application may
|
73
|
-
* choose to retry. */
|
74
|
-
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNAVAILABLE),
|
75
|
-
GRPC_ERROR_STR_TARGET_ADDRESS,
|
76
|
-
grpc_slice_from_copied_string(tcp->peer_string));
|
77
|
-
}
|
67
|
+
} uv_socket_t;
|
78
68
|
|
79
|
-
static
|
80
|
-
|
81
|
-
|
82
|
-
gpr_free(tcp->peer_string);
|
83
|
-
gpr_free(tcp);
|
84
|
-
}
|
85
|
-
|
86
|
-
#ifndef NDEBUG
|
87
|
-
#define TCP_UNREF(tcp, reason) tcp_unref((tcp), (reason), __FILE__, __LINE__)
|
88
|
-
#define TCP_REF(tcp, reason) tcp_ref((tcp), (reason), __FILE__, __LINE__)
|
89
|
-
static void tcp_unref(grpc_tcp* tcp, const char* reason, const char* file,
|
90
|
-
int line) {
|
91
|
-
if (grpc_tcp_trace.enabled()) {
|
92
|
-
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
93
|
-
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
94
|
-
"TCP unref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
|
95
|
-
val - 1);
|
96
|
-
}
|
97
|
-
if (gpr_unref(&tcp->refcount)) {
|
98
|
-
tcp_free(tcp);
|
99
|
-
}
|
100
|
-
}
|
101
|
-
|
102
|
-
static void tcp_ref(grpc_tcp* tcp, const char* reason, const char* file,
|
103
|
-
int line) {
|
104
|
-
if (grpc_tcp_trace.enabled()) {
|
105
|
-
gpr_atm val = gpr_atm_no_barrier_load(&tcp->refcount.count);
|
106
|
-
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
107
|
-
"TCP ref %p : %s %" PRIdPTR " -> %" PRIdPTR, tcp, reason, val,
|
108
|
-
val + 1);
|
109
|
-
}
|
110
|
-
gpr_ref(&tcp->refcount);
|
111
|
-
}
|
112
|
-
#else
|
113
|
-
#define TCP_UNREF(tcp, reason) tcp_unref((tcp))
|
114
|
-
#define TCP_REF(tcp, reason) tcp_ref((tcp))
|
115
|
-
static void tcp_unref(grpc_tcp* tcp) {
|
116
|
-
if (gpr_unref(&tcp->refcount)) {
|
117
|
-
tcp_free(tcp);
|
69
|
+
static grpc_error* tcp_error_create(const char* desc, int status) {
|
70
|
+
if (status == 0) {
|
71
|
+
return GRPC_ERROR_NONE;
|
118
72
|
}
|
73
|
+
grpc_error* error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(desc);
|
74
|
+
/* All tcp errors are marked with UNAVAILABLE so that application may
|
75
|
+
* choose to retry. */
|
76
|
+
error = grpc_error_set_int(error, GRPC_ERROR_INT_GRPC_STATUS,
|
77
|
+
GRPC_STATUS_UNAVAILABLE);
|
78
|
+
return grpc_error_set_str(error, GRPC_ERROR_STR_OS_ERROR,
|
79
|
+
grpc_slice_from_static_string(uv_strerror(status)));
|
119
80
|
}
|
120
81
|
|
121
|
-
static void
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
grpc_core::ExecCtx exec_ctx;
|
126
|
-
grpc_tcp* tcp = (grpc_tcp*)handle->data;
|
127
|
-
TCP_UNREF(tcp, "destroy");
|
82
|
+
static void uv_socket_destroy(grpc_custom_socket* socket) {
|
83
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
84
|
+
gpr_free(uv_socket->handle);
|
85
|
+
gpr_free(uv_socket);
|
128
86
|
}
|
129
87
|
|
130
88
|
static void alloc_uv_buf(uv_handle_t* handle, size_t suggested_size,
|
131
89
|
uv_buf_t* buf) {
|
132
|
-
|
133
|
-
|
90
|
+
uv_socket_t* uv_socket =
|
91
|
+
(uv_socket_t*)((grpc_custom_socket*)handle->data)->impl;
|
134
92
|
(void)suggested_size;
|
135
|
-
|
136
|
-
|
137
|
-
* allocation was successful. So slices[0] should always exist here */
|
138
|
-
buf->base = (char*)GRPC_SLICE_START_PTR(tcp->read_slices->slices[0]);
|
139
|
-
buf->len = GRPC_SLICE_LENGTH(tcp->read_slices->slices[0]);
|
140
|
-
}
|
141
|
-
|
142
|
-
static void call_read_cb(grpc_tcp* tcp, grpc_error* error) {
|
143
|
-
grpc_closure* cb = tcp->read_cb;
|
144
|
-
if (grpc_tcp_trace.enabled()) {
|
145
|
-
gpr_log(GPR_DEBUG, "TCP:%p call_cb %p %p:%p", tcp, cb, cb->cb, cb->cb_arg);
|
146
|
-
size_t i;
|
147
|
-
const char* str = grpc_error_string(error);
|
148
|
-
gpr_log(GPR_DEBUG, "read: error=%s", str);
|
149
|
-
|
150
|
-
for (i = 0; i < tcp->read_slices->count; i++) {
|
151
|
-
char* dump = grpc_dump_slice(tcp->read_slices->slices[i],
|
152
|
-
GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
153
|
-
gpr_log(GPR_DEBUG, "READ %p (peer=%s): %s", tcp, tcp->peer_string, dump);
|
154
|
-
gpr_free(dump);
|
155
|
-
}
|
156
|
-
}
|
157
|
-
tcp->read_slices = NULL;
|
158
|
-
tcp->read_cb = NULL;
|
159
|
-
GRPC_CLOSURE_RUN(cb, error);
|
93
|
+
buf->base = uv_socket->read_buf;
|
94
|
+
buf->len = uv_socket->read_len;
|
160
95
|
}
|
161
96
|
|
162
|
-
static void
|
163
|
-
|
164
|
-
grpc_error* error;
|
165
|
-
grpc_core::ExecCtx exec_ctx;
|
166
|
-
grpc_tcp* tcp = (grpc_tcp*)stream->data;
|
167
|
-
grpc_slice_buffer garbage;
|
97
|
+
static void uv_read_callback(uv_stream_t* stream, ssize_t nread,
|
98
|
+
const uv_buf_t* buf) {
|
99
|
+
grpc_error* error = GRPC_ERROR_NONE;
|
168
100
|
if (nread == 0) {
|
169
101
|
// Nothing happened. Wait for the next callback
|
170
102
|
return;
|
171
103
|
}
|
172
|
-
TCP_UNREF(tcp, "read");
|
173
104
|
// TODO(murgatroid99): figure out what the return value here means
|
174
105
|
uv_read_stop(stream);
|
175
106
|
if (nread == UV_EOF) {
|
176
|
-
error =
|
177
|
-
|
178
|
-
|
179
|
-
} else if (nread > 0) {
|
180
|
-
// Successful read
|
181
|
-
error = GRPC_ERROR_NONE;
|
182
|
-
if ((size_t)nread < tcp->read_slices->length) {
|
183
|
-
/* TODO(murgatroid99): Instead of discarding the unused part of the read
|
184
|
-
* buffer, reuse it as the next read buffer. */
|
185
|
-
grpc_slice_buffer_init(&garbage);
|
186
|
-
grpc_slice_buffer_trim_end(
|
187
|
-
tcp->read_slices, tcp->read_slices->length - (size_t)nread, &garbage);
|
188
|
-
grpc_slice_buffer_reset_and_unref_internal(&garbage);
|
189
|
-
}
|
190
|
-
} else {
|
191
|
-
// nread < 0: Error
|
192
|
-
error = tcp_annotate_error(
|
193
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Read failed"), tcp);
|
194
|
-
grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
|
107
|
+
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("EOF");
|
108
|
+
} else if (nread < 0) {
|
109
|
+
error = tcp_error_create("TCP Read failed", nread);
|
195
110
|
}
|
196
|
-
|
111
|
+
grpc_custom_socket* socket = (grpc_custom_socket*)stream->data;
|
112
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
113
|
+
uv_socket->read_cb(socket, (size_t)nread, error);
|
197
114
|
}
|
198
115
|
|
199
|
-
static void
|
200
|
-
|
201
|
-
|
202
|
-
if (
|
203
|
-
|
204
|
-
|
205
|
-
}
|
206
|
-
if (error == GRPC_ERROR_NONE) {
|
207
|
-
status =
|
208
|
-
uv_read_start((uv_stream_t*)tcp->handle, alloc_uv_buf, read_callback);
|
209
|
-
if (status != 0) {
|
210
|
-
error = tcp_annotate_error(
|
211
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("TCP Read failed at start"),
|
212
|
-
tcp);
|
213
|
-
error = grpc_error_set_str(
|
214
|
-
error, GRPC_ERROR_STR_OS_ERROR,
|
215
|
-
grpc_slice_from_static_string(uv_strerror(status)));
|
216
|
-
}
|
217
|
-
}
|
218
|
-
if (error != GRPC_ERROR_NONE) {
|
219
|
-
grpc_slice_buffer_reset_and_unref_internal(tcp->read_slices);
|
220
|
-
call_read_cb(tcp, GRPC_ERROR_REF(error));
|
221
|
-
TCP_UNREF(tcp, "read");
|
116
|
+
static void uv_close_callback(uv_handle_t* handle) {
|
117
|
+
grpc_custom_socket* socket = (grpc_custom_socket*)handle->data;
|
118
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
119
|
+
if (uv_socket->accept_socket) {
|
120
|
+
uv_socket->accept_cb(socket, uv_socket->accept_socket,
|
121
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING("socket closed"));
|
222
122
|
}
|
223
|
-
|
224
|
-
|
225
|
-
|
123
|
+
uv_socket->close_cb(socket);
|
124
|
+
}
|
125
|
+
|
126
|
+
static void uv_socket_read(grpc_custom_socket* socket, char* buffer,
|
127
|
+
size_t length, grpc_custom_read_callback read_cb) {
|
128
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
129
|
+
int status;
|
130
|
+
grpc_error* error;
|
131
|
+
uv_socket->read_cb = read_cb;
|
132
|
+
uv_socket->read_buf = buffer;
|
133
|
+
uv_socket->read_len = length;
|
134
|
+
// TODO(murgatroid99): figure out what the return value here means
|
135
|
+
status =
|
136
|
+
uv_read_start((uv_stream_t*)uv_socket->handle, (uv_alloc_cb)alloc_uv_buf,
|
137
|
+
(uv_read_cb)uv_read_callback);
|
138
|
+
if (status != 0) {
|
139
|
+
error = tcp_error_create("TCP Read failed at start", status);
|
140
|
+
uv_socket->read_cb(socket, 0, error);
|
226
141
|
}
|
227
142
|
}
|
228
143
|
|
229
|
-
static void
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
tcp->read_cb = cb;
|
235
|
-
tcp->read_slices = read_slices;
|
236
|
-
grpc_slice_buffer_reset_and_unref_internal(read_slices);
|
237
|
-
TCP_REF(tcp, "read");
|
238
|
-
grpc_resource_user_alloc_slices(&tcp->slice_allocator,
|
239
|
-
GRPC_TCP_DEFAULT_READ_SLICE_SIZE, 1,
|
240
|
-
tcp->read_slices);
|
144
|
+
static void uv_write_callback(uv_write_t* req, int status) {
|
145
|
+
grpc_custom_socket* socket = (grpc_custom_socket*)req->data;
|
146
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
147
|
+
gpr_free(uv_socket->write_buffers);
|
148
|
+
uv_socket->write_cb(socket, tcp_error_create("TCP Write failed", status));
|
241
149
|
}
|
242
150
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
}
|
256
|
-
if (grpc_tcp_trace.enabled()) {
|
257
|
-
const char* str = grpc_error_string(error);
|
258
|
-
gpr_log(GPR_DEBUG, "write complete on %p: error=%s", tcp, str);
|
151
|
+
void uv_socket_write(grpc_custom_socket* socket,
|
152
|
+
grpc_slice_buffer* write_slices,
|
153
|
+
grpc_custom_write_callback write_cb) {
|
154
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
155
|
+
uv_socket->write_cb = write_cb;
|
156
|
+
uv_buf_t* uv_buffers;
|
157
|
+
uv_write_t* write_req;
|
158
|
+
|
159
|
+
uv_buffers = (uv_buf_t*)gpr_malloc(sizeof(uv_buf_t) * write_slices->count);
|
160
|
+
for (size_t i = 0; i < write_slices->count; i++) {
|
161
|
+
uv_buffers[i].base = (char*)GRPC_SLICE_START_PTR(write_slices->slices[i]);
|
162
|
+
uv_buffers[i].len = GRPC_SLICE_LENGTH(write_slices->slices[i]);
|
259
163
|
}
|
260
|
-
|
261
|
-
|
164
|
+
|
165
|
+
uv_socket->write_buffers = uv_buffers;
|
166
|
+
write_req = &uv_socket->write_req;
|
167
|
+
write_req->data = socket;
|
168
|
+
// TODO(murgatroid99): figure out what the return value here means
|
169
|
+
uv_write(write_req, (uv_stream_t*)uv_socket->handle, uv_buffers,
|
170
|
+
write_slices->count, uv_write_callback);
|
262
171
|
}
|
263
172
|
|
264
|
-
static void
|
265
|
-
grpc_slice_buffer* write_slices,
|
266
|
-
grpc_closure* cb) {
|
267
|
-
grpc_tcp* tcp = (grpc_tcp*)ep;
|
268
|
-
uv_buf_t* buffers;
|
269
|
-
unsigned int buffer_count;
|
270
|
-
unsigned int i;
|
271
|
-
grpc_slice* slice;
|
272
|
-
uv_write_t* write_req;
|
273
|
-
GRPC_UV_ASSERT_SAME_THREAD();
|
173
|
+
static void shutdown_callback(uv_shutdown_t* req, int status) {}
|
274
174
|
|
275
|
-
|
276
|
-
|
175
|
+
static void uv_socket_shutdown(grpc_custom_socket* socket) {
|
176
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
177
|
+
uv_shutdown_t* req = &uv_socket->shutdown_req;
|
178
|
+
uv_shutdown(req, (uv_stream_t*)uv_socket->handle, shutdown_callback);
|
179
|
+
}
|
277
180
|
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
181
|
+
static void uv_socket_close(grpc_custom_socket* socket,
|
182
|
+
grpc_custom_close_callback close_cb) {
|
183
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
184
|
+
uv_socket->close_cb = close_cb;
|
185
|
+
uv_close((uv_handle_t*)uv_socket->handle, uv_close_callback);
|
186
|
+
}
|
187
|
+
|
188
|
+
static grpc_error* uv_socket_init_helper(uv_socket_t* uv_socket, int domain) {
|
189
|
+
uv_tcp_t* tcp = (uv_tcp_t*)gpr_malloc(sizeof(uv_tcp_t));
|
190
|
+
uv_socket->handle = tcp;
|
191
|
+
int status = uv_tcp_init_ex(uv_default_loop(), tcp, (unsigned int)domain);
|
192
|
+
if (status != 0) {
|
193
|
+
return tcp_error_create("Failed to initialize UV tcp handle", status);
|
194
|
+
}
|
195
|
+
#if defined(GPR_LINUX) && defined(SO_REUSEPORT)
|
196
|
+
if (domain == AF_INET || domain == AF_INET6) {
|
197
|
+
int enable = 1;
|
198
|
+
int fd;
|
199
|
+
uv_fileno((uv_handle_t*)tcp, &fd);
|
200
|
+
// TODO Handle error here.
|
201
|
+
setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &enable, sizeof(enable));
|
284
202
|
}
|
203
|
+
#endif
|
204
|
+
uv_socket->write_buffers = nullptr;
|
205
|
+
uv_socket->read_len = 0;
|
206
|
+
uv_tcp_nodelay(uv_socket->handle, 1);
|
207
|
+
uv_socket->pending_connection = false;
|
208
|
+
uv_socket->accept_socket = nullptr;
|
209
|
+
uv_socket->accept_error = GRPC_ERROR_NONE;
|
210
|
+
return GRPC_ERROR_NONE;
|
211
|
+
}
|
285
212
|
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
return;
|
213
|
+
static grpc_error* uv_socket_init(grpc_custom_socket* socket, int domain) {
|
214
|
+
uv_socket_t* uv_socket = (uv_socket_t*)gpr_malloc(sizeof(uv_socket_t));
|
215
|
+
grpc_error* error = uv_socket_init_helper(uv_socket, domain);
|
216
|
+
if (error != GRPC_ERROR_NONE) {
|
217
|
+
return error;
|
292
218
|
}
|
219
|
+
uv_socket->handle->data = socket;
|
220
|
+
socket->impl = uv_socket;
|
221
|
+
return GRPC_ERROR_NONE;
|
222
|
+
}
|
223
|
+
|
224
|
+
static grpc_error* uv_socket_getpeername(grpc_custom_socket* socket,
|
225
|
+
const grpc_sockaddr* addr,
|
226
|
+
int* addr_len) {
|
227
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
228
|
+
int err = uv_tcp_getpeername(uv_socket->handle,
|
229
|
+
(struct sockaddr*)IGNORE_CONST(addr), addr_len);
|
230
|
+
return tcp_error_create("getpeername failed", err);
|
231
|
+
}
|
293
232
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
233
|
+
static grpc_error* uv_socket_getsockname(grpc_custom_socket* socket,
|
234
|
+
const grpc_sockaddr* addr,
|
235
|
+
int* addr_len) {
|
236
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
237
|
+
int err = uv_tcp_getsockname(uv_socket->handle,
|
238
|
+
(struct sockaddr*)IGNORE_CONST(addr), addr_len);
|
239
|
+
return tcp_error_create("getsockname failed", err);
|
240
|
+
}
|
241
|
+
|
242
|
+
static void accept_new_connection(grpc_custom_socket* socket) {
|
243
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
244
|
+
if (!uv_socket->pending_connection || !uv_socket->accept_socket) {
|
301
245
|
return;
|
302
246
|
}
|
247
|
+
grpc_custom_socket* new_socket = uv_socket->accept_socket;
|
248
|
+
grpc_error* error = uv_socket->accept_error;
|
249
|
+
uv_socket->accept_socket = nullptr;
|
250
|
+
uv_socket->accept_error = GRPC_ERROR_NONE;
|
251
|
+
uv_socket->pending_connection = false;
|
252
|
+
if (uv_socket->accept_error != GRPC_ERROR_NONE) {
|
253
|
+
uv_stream_t dummy_handle;
|
254
|
+
uv_accept((uv_stream_t*)uv_socket->handle, &dummy_handle);
|
255
|
+
uv_socket->accept_cb(socket, new_socket, error);
|
256
|
+
} else {
|
257
|
+
uv_socket_t* uv_new_socket = (uv_socket_t*)gpr_malloc(sizeof(uv_socket_t));
|
258
|
+
uv_socket_init_helper(uv_new_socket, AF_UNSPEC);
|
259
|
+
// UV documentation says this is guaranteed to succeed
|
260
|
+
GPR_ASSERT(uv_accept((uv_stream_t*)uv_socket->handle,
|
261
|
+
(uv_stream_t*)uv_new_socket->handle) == 0);
|
262
|
+
new_socket->impl = uv_new_socket;
|
263
|
+
uv_new_socket->handle->data = new_socket;
|
264
|
+
uv_socket->accept_cb(socket, new_socket, error);
|
265
|
+
}
|
266
|
+
}
|
303
267
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
268
|
+
static void uv_on_connect(uv_stream_t* server, int status) {
|
269
|
+
grpc_custom_socket* socket = (grpc_custom_socket*)server->data;
|
270
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
271
|
+
GPR_ASSERT(!uv_socket->pending_connection);
|
272
|
+
uv_socket->pending_connection = true;
|
273
|
+
if (status < 0) {
|
274
|
+
switch (status) {
|
275
|
+
case UV_EINTR:
|
276
|
+
case UV_EAGAIN:
|
277
|
+
return;
|
278
|
+
default:
|
279
|
+
uv_socket->accept_error = tcp_error_create("accept failed", status);
|
280
|
+
}
|
311
281
|
}
|
312
|
-
|
313
|
-
write_req = &tcp->write_req;
|
314
|
-
write_req->data = tcp;
|
315
|
-
TCP_REF(tcp, "write");
|
316
|
-
// TODO(murgatroid99): figure out what the return value here means
|
317
|
-
uv_write(write_req, (uv_stream_t*)tcp->handle, buffers, buffer_count,
|
318
|
-
write_callback);
|
282
|
+
accept_new_connection(socket);
|
319
283
|
}
|
320
284
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
(
|
325
|
-
|
326
|
-
|
285
|
+
void uv_socket_accept(grpc_custom_socket* socket,
|
286
|
+
grpc_custom_socket* new_socket,
|
287
|
+
grpc_custom_accept_callback accept_cb) {
|
288
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
289
|
+
uv_socket->accept_cb = accept_cb;
|
290
|
+
GPR_ASSERT(uv_socket->accept_socket == nullptr);
|
291
|
+
uv_socket->accept_socket = new_socket;
|
292
|
+
accept_new_connection(socket);
|
327
293
|
}
|
328
294
|
|
329
|
-
static
|
330
|
-
|
331
|
-
|
332
|
-
(
|
333
|
-
|
295
|
+
static grpc_error* uv_socket_bind(grpc_custom_socket* socket,
|
296
|
+
const grpc_sockaddr* addr, size_t len,
|
297
|
+
int flags) {
|
298
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
299
|
+
int status =
|
300
|
+
uv_tcp_bind((uv_tcp_t*)uv_socket->handle, (struct sockaddr*)addr, 0);
|
301
|
+
return tcp_error_create("Failed to bind to port", status);
|
334
302
|
}
|
335
303
|
|
336
|
-
static
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
(
|
304
|
+
static grpc_error* uv_socket_listen(grpc_custom_socket* socket) {
|
305
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
306
|
+
int status =
|
307
|
+
uv_listen((uv_stream_t*)uv_socket->handle, SOMAXCONN, uv_on_connect);
|
308
|
+
return tcp_error_create("Failed to listen to port", status);
|
341
309
|
}
|
342
310
|
|
343
|
-
static void
|
311
|
+
static void uv_tc_on_connect(uv_connect_t* req, int status) {
|
312
|
+
grpc_custom_socket* socket = (grpc_custom_socket*)req->data;
|
313
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
314
|
+
grpc_error* error;
|
315
|
+
if (status == UV_ECANCELED) {
|
316
|
+
// This should only happen if the handle is already closed
|
317
|
+
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Timeout occurred");
|
318
|
+
} else {
|
319
|
+
error = tcp_error_create("Failed to connect to remote host", status);
|
320
|
+
}
|
321
|
+
uv_socket->connect_cb(socket, error);
|
322
|
+
}
|
344
323
|
|
345
|
-
static void
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
324
|
+
static void uv_socket_connect(grpc_custom_socket* socket,
|
325
|
+
const grpc_sockaddr* addr, size_t len,
|
326
|
+
grpc_custom_connect_callback connect_cb) {
|
327
|
+
uv_socket_t* uv_socket = (uv_socket_t*)socket->impl;
|
328
|
+
uv_socket->connect_cb = connect_cb;
|
329
|
+
uv_socket->connect_req.data = socket;
|
330
|
+
int status = uv_tcp_connect(&uv_socket->connect_req, uv_socket->handle,
|
331
|
+
(struct sockaddr*)addr, uv_tc_on_connect);
|
332
|
+
if (status != 0) {
|
333
|
+
// The callback will not be called
|
334
|
+
uv_socket->connect_cb(socket, tcp_error_create("connect failed", status));
|
356
335
|
}
|
357
|
-
GRPC_ERROR_UNREF(why);
|
358
336
|
}
|
359
337
|
|
360
|
-
static
|
361
|
-
|
362
|
-
|
363
|
-
|
338
|
+
static grpc_resolved_addresses* handle_addrinfo_result(
|
339
|
+
struct addrinfo* result) {
|
340
|
+
struct addrinfo* resp;
|
341
|
+
size_t i;
|
342
|
+
grpc_resolved_addresses* addresses =
|
343
|
+
(grpc_resolved_addresses*)gpr_malloc(sizeof(grpc_resolved_addresses));
|
344
|
+
addresses->naddrs = 0;
|
345
|
+
for (resp = result; resp != nullptr; resp = resp->ai_next) {
|
346
|
+
addresses->naddrs++;
|
347
|
+
}
|
348
|
+
addresses->addrs = (grpc_resolved_address*)gpr_malloc(
|
349
|
+
sizeof(grpc_resolved_address) * addresses->naddrs);
|
350
|
+
for (resp = result, i = 0; resp != nullptr; resp = resp->ai_next, i++) {
|
351
|
+
memcpy(&addresses->addrs[i].addr, resp->ai_addr, resp->ai_addrlen);
|
352
|
+
addresses->addrs[i].len = resp->ai_addrlen;
|
353
|
+
}
|
354
|
+
// addrinfo objects are allocated by libuv (e.g. in uv_getaddrinfo)
|
355
|
+
// and not by gpr_malloc
|
356
|
+
uv_freeaddrinfo(result);
|
357
|
+
return addresses;
|
364
358
|
}
|
365
359
|
|
366
|
-
static
|
367
|
-
|
368
|
-
|
360
|
+
static void uv_resolve_callback(uv_getaddrinfo_t* req, int status,
|
361
|
+
struct addrinfo* res) {
|
362
|
+
grpc_custom_resolver* r = (grpc_custom_resolver*)req->data;
|
363
|
+
gpr_free(req);
|
364
|
+
grpc_resolved_addresses* result = nullptr;
|
365
|
+
if (status == 0) {
|
366
|
+
result = handle_addrinfo_result(res);
|
367
|
+
}
|
368
|
+
grpc_custom_resolve_callback(r, result,
|
369
|
+
tcp_error_create("getaddrinfo failed", status));
|
369
370
|
}
|
370
371
|
|
371
|
-
static
|
372
|
-
|
373
|
-
|
372
|
+
static grpc_error* uv_resolve(char* host, char* port,
|
373
|
+
grpc_resolved_addresses** result) {
|
374
|
+
int status;
|
375
|
+
uv_getaddrinfo_t req;
|
376
|
+
struct addrinfo hints;
|
377
|
+
memset(&hints, 0, sizeof(struct addrinfo));
|
378
|
+
hints.ai_family = AF_UNSPEC; /* ipv4 or ipv6 */
|
379
|
+
hints.ai_socktype = SOCK_STREAM; /* stream socket */
|
380
|
+
hints.ai_flags = AI_PASSIVE; /* for wildcard IP address */
|
381
|
+
status = uv_getaddrinfo(uv_default_loop(), &req, NULL, host, port, &hints);
|
382
|
+
if (status != 0) {
|
383
|
+
*result = nullptr;
|
384
|
+
} else {
|
385
|
+
*result = handle_addrinfo_result(req.addrinfo);
|
386
|
+
}
|
387
|
+
return tcp_error_create("getaddrinfo failed", status);
|
374
388
|
}
|
375
389
|
|
376
|
-
static
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
grpc_tcp* tcp = (grpc_tcp*)gpr_malloc(sizeof(grpc_tcp));
|
393
|
-
grpc_core::ExecCtx exec_ctx;
|
394
|
-
|
395
|
-
if (grpc_tcp_trace.enabled()) {
|
396
|
-
gpr_log(GPR_DEBUG, "Creating TCP endpoint %p", tcp);
|
390
|
+
static void uv_resolve_async(grpc_custom_resolver* r, char* host, char* port) {
|
391
|
+
int status;
|
392
|
+
uv_getaddrinfo_t* req =
|
393
|
+
(uv_getaddrinfo_t*)gpr_malloc(sizeof(uv_getaddrinfo_t));
|
394
|
+
req->data = r;
|
395
|
+
struct addrinfo hints;
|
396
|
+
memset(&hints, 0, sizeof(struct addrinfo));
|
397
|
+
hints.ai_family = GRPC_AF_UNSPEC; /* ipv4 or ipv6 */
|
398
|
+
hints.ai_socktype = GRPC_SOCK_STREAM; /* stream socket */
|
399
|
+
hints.ai_flags = GRPC_AI_PASSIVE; /* for wildcard IP address */
|
400
|
+
status = uv_getaddrinfo(uv_default_loop(), req, uv_resolve_callback, host,
|
401
|
+
port, &hints);
|
402
|
+
if (status != 0) {
|
403
|
+
gpr_free(req);
|
404
|
+
grpc_error* error = tcp_error_create("getaddrinfo failed", status);
|
405
|
+
grpc_custom_resolve_callback(r, NULL, error);
|
397
406
|
}
|
407
|
+
}
|
398
408
|
|
399
|
-
|
400
|
-
uv_tcp_nodelay(handle, 1);
|
401
|
-
|
402
|
-
memset(tcp, 0, sizeof(grpc_tcp));
|
403
|
-
tcp->base.vtable = &vtable;
|
404
|
-
tcp->handle = handle;
|
405
|
-
handle->data = tcp;
|
406
|
-
gpr_ref_init(&tcp->refcount, 1);
|
407
|
-
tcp->peer_string = gpr_strdup(peer_string);
|
408
|
-
tcp->shutting_down = false;
|
409
|
-
tcp->read_slices = NULL;
|
410
|
-
tcp->resource_user = grpc_resource_user_create(resource_quota, peer_string);
|
411
|
-
grpc_resource_user_slice_allocator_init(
|
412
|
-
&tcp->slice_allocator, tcp->resource_user, tcp_read_allocation_done, tcp);
|
413
|
-
/* Tell network status tracking code about the new endpoint */
|
414
|
-
grpc_network_status_register_endpoint(&tcp->base);
|
415
|
-
|
416
|
-
#ifndef GRPC_UV_TCP_HOLD_LOOP
|
417
|
-
uv_unref((uv_handle_t*)handle);
|
418
|
-
#endif
|
409
|
+
grpc_custom_resolver_vtable uv_resolver_vtable = {uv_resolve, uv_resolve_async};
|
419
410
|
|
420
|
-
|
421
|
-
|
411
|
+
grpc_socket_vtable grpc_uv_socket_vtable = {
|
412
|
+
uv_socket_init, uv_socket_connect, uv_socket_destroy,
|
413
|
+
uv_socket_shutdown, uv_socket_close, uv_socket_write,
|
414
|
+
uv_socket_read, uv_socket_getpeername, uv_socket_getsockname,
|
415
|
+
uv_socket_bind, uv_socket_listen, uv_socket_accept};
|
422
416
|
|
423
|
-
#endif
|
417
|
+
#endif
|