grpc 1.7.3 → 1.8.0
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 +2106 -2116
- data/include/grpc/census.h +1 -432
- data/include/grpc/compression.h +9 -9
- data/include/grpc/grpc.h +115 -98
- data/include/grpc/grpc_cronet.h +3 -3
- data/include/grpc/grpc_posix.h +4 -4
- data/include/grpc/grpc_security.h +160 -88
- data/include/grpc/grpc_security_constants.h +7 -0
- data/include/grpc/impl/codegen/atm.h +9 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +13 -4
- data/include/grpc/impl/codegen/atm_gcc_sync.h +6 -5
- data/include/grpc/impl/codegen/atm_windows.h +23 -22
- data/include/grpc/impl/codegen/byte_buffer.h +14 -14
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -2
- data/include/grpc/impl/codegen/connectivity_state.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +32 -28
- data/include/grpc/impl/codegen/port_platform.h +48 -0
- data/include/grpc/impl/codegen/slice.h +10 -10
- data/include/grpc/impl/codegen/sync_generic.h +9 -3
- data/include/grpc/slice.h +16 -17
- data/include/grpc/slice_buffer.h +22 -22
- data/include/grpc/support/alloc.h +11 -11
- data/include/grpc/support/avl.h +28 -20
- data/include/grpc/support/cmdline.h +13 -13
- data/include/grpc/support/histogram.h +17 -17
- data/include/grpc/support/host_port.h +2 -2
- data/include/grpc/support/log.h +9 -9
- data/include/grpc/support/log_windows.h +1 -1
- data/include/grpc/support/string_util.h +2 -2
- data/include/grpc/support/subprocess.h +5 -5
- data/include/grpc/support/sync.h +43 -27
- data/include/grpc/support/thd.h +6 -6
- data/include/grpc/support/tls_gcc.h +1 -1
- data/include/grpc/support/tls_pthread.h +1 -1
- data/src/core/ext/census/{grpc_context.c → grpc_context.cc} +5 -8
- data/src/core/ext/filters/client_channel/backup_poller.cc +165 -0
- data/src/core/ext/{census/grpc_filter.h → filters/client_channel/backup_poller.h} +12 -7
- data/src/core/ext/filters/client_channel/{channel_connectivity.c → channel_connectivity.cc} +45 -42
- data/src/core/ext/filters/client_channel/{client_channel.c → client_channel.cc} +452 -417
- data/src/core/ext/filters/client_channel/client_channel.h +16 -8
- data/src/core/ext/filters/client_channel/{client_channel_factory.c → client_channel_factory.cc} +0 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +29 -21
- data/src/core/ext/filters/client_channel/{client_channel_plugin.c → client_channel_plugin.cc} +15 -19
- data/src/core/ext/filters/client_channel/{connector.c → connector.cc} +0 -0
- data/src/core/ext/filters/client_channel/connector.h +29 -21
- data/src/core/ext/filters/client_channel/{http_connect_handshaker.c → http_connect_handshaker.cc} +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +8 -0
- data/src/core/ext/filters/client_channel/{http_proxy.c → http_proxy.cc} +14 -14
- data/src/core/ext/filters/client_channel/http_proxy.h +8 -0
- data/src/core/ext/filters/client_channel/{lb_policy.c → lb_policy.cc} +47 -48
- data/src/core/ext/filters/client_channel/lb_policy.h +76 -70
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{client_load_reporting_filter.c → client_load_reporting_filter.cc} +28 -29
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb.c → grpclb.cc} +554 -563
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +17 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_channel_secure.c → grpclb_channel_secure.cc} +17 -17
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{grpclb_client_stats.c → grpclb_client_stats.cc} +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +9 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/{load_balancer_api.c → load_balancer_api.cc} +64 -67
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +20 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +599 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +695 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +270 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +153 -0
- data/src/core/ext/filters/client_channel/{lb_policy_factory.c → lb_policy_factory.cc} +10 -10
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +48 -40
- data/src/core/ext/filters/client_channel/{lb_policy_registry.c → lb_policy_registry.cc} +9 -9
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +11 -3
- data/src/core/ext/filters/client_channel/{parse_address.c → parse_address.cc} +24 -24
- data/src/core/ext/filters/client_channel/parse_address.h +14 -6
- data/src/core/ext/filters/client_channel/{proxy_mapper.c → proxy_mapper.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +8 -0
- data/src/core/ext/filters/client_channel/{proxy_mapper_registry.c → proxy_mapper_registry.cc} +0 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -0
- data/src/core/ext/filters/client_channel/{resolver.c → resolver.cc} +21 -23
- data/src/core/ext/filters/client_channel/resolver.h +33 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{dns_resolver_ares.c → dns_resolver_ares.cc} +133 -133
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +18 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_ev_driver_posix.c → grpc_ares_ev_driver_posix.cc} +58 -56
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/{grpc_ares_wrapper.c → grpc_ares_wrapper.cc} +118 -115
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/{dns_resolver.c → dns_resolver.cc} +100 -94
- data/src/core/ext/filters/client_channel/resolver/fake/{fake_resolver.c → fake_resolver.cc} +14 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/{sockaddr_resolver.c → sockaddr_resolver.cc} +60 -60
- data/src/core/ext/filters/client_channel/{resolver_factory.c → resolver_factory.cc} +2 -2
- data/src/core/ext/filters/client_channel/resolver_factory.h +27 -19
- data/src/core/ext/filters/client_channel/{resolver_registry.c → resolver_registry.cc} +35 -35
- data/src/core/ext/filters/client_channel/resolver_registry.h +18 -10
- data/src/core/ext/filters/client_channel/{retry_throttle.c → retry_throttle.cc} +10 -10
- data/src/core/ext/filters/client_channel/retry_throttle.h +8 -0
- data/src/core/ext/filters/client_channel/{subchannel.c → subchannel.cc} +210 -213
- data/src/core/ext/filters/client_channel/subchannel.h +68 -60
- data/src/core/ext/filters/client_channel/{subchannel_index.c → subchannel_index.cc} +52 -52
- data/src/core/ext/filters/client_channel/subchannel_index.h +22 -14
- data/src/core/ext/filters/client_channel/{uri_parser.c → uri_parser.cc} +29 -27
- data/src/core/ext/filters/client_channel/uri_parser.h +18 -10
- data/src/core/ext/filters/deadline/{deadline_filter.c → deadline_filter.cc} +12 -15
- data/src/core/ext/filters/deadline/deadline_filter.h +11 -2
- data/src/core/ext/filters/http/client/{http_client_filter.c → http_client_filter.cc} +83 -83
- data/src/core/ext/filters/http/client/http_client_filter.h +8 -0
- data/src/core/ext/filters/http/{http_filters_plugin.c → http_filters_plugin.cc} +20 -21
- data/src/core/ext/filters/http/message_compress/{message_compress_filter.c → message_compress_filter.cc} +84 -83
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +9 -1
- data/src/core/ext/filters/http/server/{http_server_filter.c → http_server_filter.cc} +80 -78
- data/src/core/ext/filters/http/server/http_server_filter.h +8 -0
- data/src/core/ext/filters/load_reporting/{server_load_reporting_filter.c → server_load_reporting_filter.cc} +29 -29
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.h +9 -1
- data/src/core/ext/filters/load_reporting/{server_load_reporting_plugin.c → server_load_reporting_plugin.cc} +11 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +13 -5
- data/src/core/ext/filters/max_age/{max_age_filter.c → max_age_filter.cc} +46 -56
- data/src/core/ext/filters/max_age/max_age_filter.h +8 -0
- data/src/core/ext/filters/message_size/{message_size_filter.c → message_size_filter.cc} +62 -40
- data/src/core/ext/filters/message_size/message_size_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_cronet_compression_filter.c → workaround_cronet_compression_filter.cc} +11 -11
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +8 -0
- data/src/core/ext/filters/workarounds/{workaround_utils.c → workaround_utils.cc} +7 -7
- data/src/core/ext/filters/workarounds/workaround_utils.h +9 -1
- data/src/core/ext/transport/chttp2/alpn/{alpn.c → alpn.cc} +3 -3
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -2
- data/src/core/ext/transport/chttp2/client/{chttp2_connector.c → chttp2_connector.cc} +49 -45
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +8 -0
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create.c → channel_create.cc} +28 -27
- data/src/core/ext/transport/chttp2/client/insecure/{channel_create_posix.c → channel_create_posix.cc} +14 -13
- data/src/core/ext/transport/chttp2/client/secure/{secure_channel_create.c → secure_channel_create.cc} +68 -66
- data/src/core/ext/transport/chttp2/server/{chttp2_server.c → chttp2_server.cc} +76 -77
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2.c → server_chttp2.cc} +3 -3
- data/src/core/ext/transport/chttp2/server/insecure/{server_chttp2_posix.c → server_chttp2_posix.cc} +13 -12
- data/src/core/ext/transport/chttp2/server/secure/{server_secure_chttp2.c → server_secure_chttp2.cc} +12 -10
- data/src/core/ext/transport/chttp2/transport/{bin_decoder.c → bin_decoder.cc} +7 -7
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +15 -7
- data/src/core/ext/transport/chttp2/transport/{bin_encoder.c → bin_encoder.cc} +11 -11
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{chttp2_plugin.c → chttp2_plugin.cc} +2 -9
- data/src/core/ext/transport/chttp2/transport/{chttp2_transport.c → chttp2_transport.cc} +778 -778
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -10
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +385 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +337 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{frame_data.c → frame_data.cc} +34 -34
- data/src/core/ext/transport/chttp2/transport/frame_data.h +25 -17
- data/src/core/ext/transport/chttp2/transport/{frame_goaway.c → frame_goaway.cc} +18 -18
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +18 -10
- data/src/core/ext/transport/chttp2/transport/{frame_ping.c → frame_ping.cc} +18 -19
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +12 -4
- data/src/core/ext/transport/chttp2/transport/{frame_rst_stream.c → frame_rst_stream.cc} +16 -16
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +16 -8
- data/src/core/ext/transport/chttp2/transport/{frame_settings.c → frame_settings.cc} +23 -24
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +17 -9
- data/src/core/ext/transport/chttp2/transport/{frame_window_update.c → frame_window_update.cc} +22 -24
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +14 -6
- data/src/core/ext/transport/chttp2/transport/{hpack_encoder.c → hpack_encoder.cc} +206 -161
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +23 -13
- data/src/core/ext/transport/chttp2/transport/{hpack_parser.c → hpack_parser.cc} +340 -334
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +30 -22
- data/src/core/ext/transport/chttp2/transport/{hpack_table.c → hpack_table.cc} +25 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +19 -11
- data/src/core/ext/transport/chttp2/transport/{http2_settings.c → http2_settings.cc} +1 -1
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -2
- data/src/core/ext/transport/chttp2/transport/{huffsyms.c → huffsyms.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +8 -0
- data/src/core/ext/transport/chttp2/transport/{incoming_metadata.c → incoming_metadata.cc} +14 -13
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +18 -10
- data/src/core/ext/transport/chttp2/transport/internal.h +214 -340
- data/src/core/ext/transport/chttp2/transport/{parsing.c → parsing.cc} +152 -141
- data/src/core/ext/transport/chttp2/transport/{stream_lists.c → stream_lists.cc} +53 -53
- data/src/core/ext/transport/chttp2/transport/{stream_map.c → stream_map.cc} +35 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +22 -14
- data/src/core/ext/transport/chttp2/transport/{varint.c → varint.cc} +0 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +8 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +636 -0
- data/src/core/ext/transport/inproc/{inproc_plugin.c → inproc_plugin.cc} +5 -6
- data/src/core/ext/transport/inproc/{inproc_transport.c → inproc_transport.cc} +479 -544
- data/src/core/ext/transport/inproc/inproc_transport.h +4 -4
- data/src/core/lib/backoff/backoff.cc +80 -0
- data/src/core/lib/backoff/backoff.h +83 -0
- data/src/core/lib/channel/{channel_args.c → channel_args.cc} +92 -92
- data/src/core/lib/channel/channel_args.h +45 -37
- data/src/core/lib/channel/{channel_stack.c → channel_stack.cc} +67 -68
- data/src/core/lib/channel/channel_stack.h +76 -75
- data/src/core/lib/channel/{channel_stack_builder.c → channel_stack_builder.cc} +91 -91
- data/src/core/lib/channel/channel_stack_builder.h +45 -45
- data/src/core/lib/channel/{connected_channel.c → connected_channel.cc} +70 -70
- data/src/core/lib/channel/connected_channel.h +12 -4
- data/src/core/lib/channel/context.h +2 -2
- data/src/core/lib/channel/{handshaker.c → handshaker.cc} +7 -9
- data/src/core/lib/channel/handshaker.h +9 -1
- data/src/core/lib/channel/{handshaker_factory.c → handshaker_factory.cc} +7 -7
- data/src/core/lib/channel/handshaker_factory.h +18 -10
- data/src/core/lib/channel/{handshaker_registry.c → handshaker_registry.cc} +0 -0
- data/src/core/lib/channel/handshaker_registry.h +8 -0
- data/src/core/lib/compression/algorithm_metadata.h +8 -0
- data/src/core/lib/compression/{compression.c → compression.cc} +9 -9
- data/src/core/lib/compression/{message_compress.c → message_compress.cc} +0 -0
- data/src/core/lib/compression/message_compress.h +8 -0
- data/src/core/lib/compression/{stream_compression.c → stream_compression.cc} +12 -12
- data/src/core/lib/compression/stream_compression.h +27 -19
- data/src/core/lib/compression/{stream_compression_gzip.c → stream_compression_gzip.cc} +35 -36
- data/src/core/lib/compression/stream_compression_gzip.h +8 -0
- data/src/core/lib/compression/{stream_compression_identity.c → stream_compression_identity.cc} +19 -20
- data/src/core/lib/compression/stream_compression_identity.h +8 -0
- data/src/core/lib/debug/{stats.c → stats.cc} +19 -19
- data/src/core/lib/debug/stats.h +17 -9
- data/src/core/lib/debug/{stats_data.c → stats_data.cc} +45 -22
- data/src/core/lib/debug/stats_data.h +58 -19
- data/src/core/lib/debug/trace.cc +142 -0
- data/src/core/lib/debug/trace.h +74 -14
- data/src/core/lib/http/{format_request.c → format_request.cc} +10 -10
- data/src/core/lib/http/format_request.h +12 -4
- data/src/core/lib/http/{httpcli.c → httpcli.cc} +80 -80
- data/src/core/lib/http/httpcli.h +41 -33
- data/src/core/lib/http/{httpcli_security_connector.c → httpcli_security_connector.cc} +69 -55
- data/src/core/lib/http/{parser.c → parser.cc} +42 -42
- data/src/core/lib/http/parser.h +28 -20
- data/src/core/lib/{support → iomgr}/block_annotate.h +17 -8
- data/src/core/lib/iomgr/{call_combiner.c → call_combiner.cc} +29 -17
- data/src/core/lib/iomgr/call_combiner.h +9 -1
- data/src/core/lib/iomgr/closure.h +220 -62
- data/src/core/lib/iomgr/{combiner.c → combiner.cc} +63 -62
- data/src/core/lib/iomgr/combiner.h +16 -8
- data/src/core/lib/iomgr/{endpoint.c → endpoint.cc} +6 -0
- data/src/core/lib/iomgr/endpoint.h +47 -32
- data/src/core/lib/iomgr/endpoint_pair.h +12 -4
- data/src/core/lib/iomgr/{endpoint_pair_posix.c → endpoint_pair_posix.cc} +3 -3
- data/src/core/lib/iomgr/{endpoint_pair_uv.c → endpoint_pair_uv.cc} +2 -2
- data/src/core/lib/iomgr/{endpoint_pair_windows.c → endpoint_pair_windows.cc} +6 -6
- data/src/core/lib/iomgr/{error.c → error.cc} +125 -124
- data/src/core/lib/iomgr/error.h +32 -27
- data/src/core/lib/iomgr/error_internal.h +11 -2
- data/src/core/lib/iomgr/{ev_epoll1_linux.c → ev_epoll1_linux.cc} +214 -215
- data/src/core/lib/iomgr/ev_epoll1_linux.h +9 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +1488 -0
- data/src/core/lib/iomgr/ev_epollex_linux.h +9 -1
- data/src/core/lib/iomgr/{ev_epollsig_linux.c → ev_epollsig_linux.cc} +304 -305
- data/src/core/lib/iomgr/ev_epollsig_linux.h +12 -4
- data/src/core/lib/iomgr/{ev_poll_posix.c → ev_poll_posix.cc} +272 -283
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -2
- data/src/core/lib/iomgr/ev_posix.cc +288 -0
- data/src/core/lib/iomgr/ev_posix.h +75 -67
- data/src/core/lib/iomgr/{ev_windows.c → ev_windows.cc} +2 -2
- data/src/core/lib/iomgr/exec_ctx.cc +177 -0
- data/src/core/lib/iomgr/exec_ctx.h +35 -13
- data/src/core/lib/iomgr/{executor.c → executor.cc} +34 -35
- data/src/core/lib/iomgr/executor.h +12 -4
- data/src/core/lib/iomgr/{fork_posix.c → fork_posix.cc} +0 -0
- data/src/core/lib/iomgr/{fork_windows.c → fork_windows.cc} +0 -0
- data/src/core/lib/iomgr/gethostname.h +9 -1
- data/src/core/lib/iomgr/{gethostname_fallback.c → gethostname_fallback.cc} +2 -1
- data/src/core/lib/iomgr/{gethostname_host_name_max.c → gethostname_host_name_max.cc} +4 -3
- data/src/core/lib/iomgr/{gethostname_sysconf.c → gethostname_sysconf.cc} +3 -2
- data/src/core/lib/iomgr/{iocp_windows.c → iocp_windows.cc} +23 -25
- data/src/core/lib/iomgr/iocp_windows.h +17 -3
- data/src/core/lib/iomgr/{iomgr.c → iomgr.cc} +25 -19
- data/src/core/lib/iomgr/iomgr.h +11 -3
- data/src/core/lib/iomgr/iomgr_internal.h +13 -5
- data/src/core/lib/iomgr/{iomgr_posix.c → iomgr_posix.cc} +0 -1
- data/src/core/lib/iomgr/{iomgr_uv.c → iomgr_uv.cc} +1 -1
- data/src/core/lib/iomgr/iomgr_uv.h +8 -0
- data/src/core/lib/iomgr/{iomgr_windows.c → iomgr_windows.cc} +0 -0
- data/src/core/lib/iomgr/{is_epollexclusive_available.c → is_epollexclusive_available.cc} +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.h +8 -0
- data/src/core/lib/iomgr/{load_file.c → load_file.cc} +12 -12
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/{lockfree_event.c → lockfree_event.cc} +76 -68
- data/src/core/lib/iomgr/lockfree_event.h +30 -11
- data/src/core/lib/iomgr/{network_status_tracker.c → network_status_tracker.cc} +3 -2
- data/src/core/lib/iomgr/network_status_tracker.h +2 -2
- data/src/core/lib/iomgr/{polling_entity.c → polling_entity.cc} +18 -18
- data/src/core/lib/iomgr/polling_entity.h +21 -13
- data/src/core/lib/iomgr/pollset.h +17 -11
- data/src/core/lib/iomgr/pollset_set.h +23 -15
- data/src/core/lib/iomgr/{pollset_set_uv.c → pollset_set_uv.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_set_windows.c → pollset_set_windows.cc} +0 -0
- data/src/core/lib/iomgr/{pollset_uv.c → pollset_uv.cc} +31 -29
- data/src/core/lib/iomgr/pollset_uv.h +8 -0
- data/src/core/lib/iomgr/{pollset_windows.c → pollset_windows.cc} +24 -24
- data/src/core/lib/iomgr/pollset_windows.h +17 -4
- data/src/core/lib/iomgr/port.h +10 -0
- data/src/core/lib/iomgr/resolve_address.h +18 -10
- data/src/core/lib/iomgr/{resolve_address_posix.c → resolve_address_posix.cc} +40 -40
- data/src/core/lib/iomgr/{resolve_address_uv.c → resolve_address_uv.cc} +61 -56
- data/src/core/lib/iomgr/{resolve_address_windows.c → resolve_address_windows.cc} +36 -34
- data/src/core/lib/iomgr/{resource_quota.c → resource_quota.cc} +209 -180
- data/src/core/lib/iomgr/resource_quota.h +45 -37
- data/src/core/lib/iomgr/{sockaddr_utils.c → sockaddr_utils.cc} +61 -61
- data/src/core/lib/iomgr/sockaddr_utils.h +23 -15
- data/src/core/lib/iomgr/sockaddr_windows.h +6 -0
- data/src/core/lib/iomgr/{socket_factory_posix.c → socket_factory_posix.cc} +20 -20
- data/src/core/lib/iomgr/socket_factory_posix.h +15 -15
- data/src/core/lib/iomgr/{socket_mutator.c → socket_mutator.cc} +18 -18
- data/src/core/lib/iomgr/socket_mutator.h +11 -11
- data/src/core/lib/iomgr/socket_utils.h +9 -1
- data/src/core/lib/iomgr/{socket_utils_common_posix.c → socket_utils_common_posix.cc} +28 -28
- data/src/core/lib/iomgr/{socket_utils_linux.c → socket_utils_linux.cc} +3 -3
- data/src/core/lib/iomgr/{socket_utils_posix.c → socket_utils_posix.cc} +3 -3
- data/src/core/lib/iomgr/socket_utils_posix.h +26 -18
- data/src/core/lib/iomgr/{socket_utils_uv.c → socket_utils_uv.cc} +1 -1
- data/src/core/lib/iomgr/{socket_utils_windows.c → socket_utils_windows.cc} +2 -2
- data/src/core/lib/iomgr/{socket_windows.c → socket_windows.cc} +18 -18
- data/src/core/lib/iomgr/socket_windows.h +26 -13
- data/src/core/lib/iomgr/tcp_client.h +14 -6
- data/src/core/lib/iomgr/{tcp_client_posix.c → tcp_client_posix.cc} +69 -70
- data/src/core/lib/iomgr/tcp_client_posix.h +11 -3
- data/src/core/lib/iomgr/{tcp_client_uv.c → tcp_client_uv.cc} +47 -48
- data/src/core/lib/iomgr/{tcp_client_windows.c → tcp_client_windows.cc} +46 -44
- data/src/core/lib/iomgr/{tcp_posix.c → tcp_posix.cc} +198 -175
- data/src/core/lib/iomgr/tcp_posix.h +15 -7
- data/src/core/lib/iomgr/tcp_server.h +31 -23
- data/src/core/lib/iomgr/{tcp_server_posix.c → tcp_server_posix.cc} +78 -77
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +27 -19
- data/src/core/lib/iomgr/{tcp_server_utils_posix_common.c → tcp_server_utils_posix_common.cc} +27 -27
- data/src/core/lib/iomgr/{tcp_server_utils_posix_ifaddrs.c → tcp_server_utils_posix_ifaddrs.cc} +25 -25
- data/src/core/lib/iomgr/{tcp_server_utils_posix_noifaddrs.c → tcp_server_utils_posix_noifaddrs.cc} +2 -2
- data/src/core/lib/iomgr/{tcp_server_uv.c → tcp_server_uv.cc} +133 -105
- data/src/core/lib/iomgr/{tcp_server_windows.c → tcp_server_windows.cc} +81 -77
- data/src/core/lib/iomgr/tcp_uv.cc +420 -0
- data/src/core/lib/iomgr/tcp_uv.h +18 -4
- data/src/core/lib/iomgr/{tcp_windows.c → tcp_windows.cc} +90 -79
- data/src/core/lib/iomgr/tcp_windows.h +17 -4
- data/src/core/lib/iomgr/{time_averaged_stats.c → time_averaged_stats.cc} +0 -0
- data/src/core/lib/iomgr/time_averaged_stats.h +8 -0
- data/src/core/lib/iomgr/timer.h +16 -9
- data/src/core/lib/iomgr/{timer_generic.c → timer_generic.cc} +130 -171
- data/src/core/lib/iomgr/timer_generic.h +4 -4
- data/src/core/lib/iomgr/{timer_heap.c → timer_heap.cc} +20 -21
- data/src/core/lib/iomgr/timer_heap.h +16 -8
- data/src/core/lib/iomgr/{timer_manager.c → timer_manager.cc} +54 -52
- data/src/core/lib/iomgr/timer_manager.h +8 -0
- data/src/core/lib/iomgr/{timer_uv.c → timer_uv.cc} +22 -24
- data/src/core/lib/iomgr/timer_uv.h +2 -2
- data/src/core/lib/iomgr/{udp_server.c → udp_server.cc} +75 -75
- data/src/core/lib/iomgr/udp_server.h +25 -17
- data/src/core/lib/iomgr/{unix_sockets_posix.c → unix_sockets_posix.cc} +22 -21
- data/src/core/lib/iomgr/unix_sockets_posix.h +14 -6
- data/src/core/lib/iomgr/{unix_sockets_posix_noop.c → unix_sockets_posix_noop.cc} +5 -5
- data/src/core/lib/iomgr/{wakeup_fd_cv.c → wakeup_fd_cv.cc} +2 -2
- data/src/core/lib/iomgr/wakeup_fd_cv.h +10 -0
- data/src/core/lib/iomgr/{wakeup_fd_eventfd.c → wakeup_fd_eventfd.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_nospecial.c → wakeup_fd_nospecial.cc} +0 -0
- data/src/core/lib/iomgr/{wakeup_fd_pipe.c → wakeup_fd_pipe.cc} +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +9 -1
- data/src/core/lib/iomgr/{wakeup_fd_posix.c → wakeup_fd_posix.cc} +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -0
- data/src/core/lib/json/{json.c → json.cc} +0 -0
- data/src/core/lib/json/json.h +8 -0
- data/src/core/lib/json/{json_reader.c → json_reader.cc} +18 -18
- data/src/core/lib/json/json_reader.h +26 -18
- data/src/core/lib/json/{json_string.c → json_string.cc} +57 -57
- data/src/core/lib/json/{json_writer.c → json_writer.cc} +20 -20
- data/src/core/lib/json/json_writer.h +23 -15
- data/src/core/lib/profiling/{basic_timers.c → basic_timers.cc} +34 -34
- data/src/core/lib/profiling/{stap_timers.c → stap_timers.cc} +5 -5
- data/src/core/lib/profiling/timers.h +6 -6
- data/src/core/lib/security/context/{security_context.c → security_context.cc} +98 -95
- data/src/core/lib/security/context/security_context.h +27 -29
- data/src/core/lib/security/credentials/composite/{composite_credentials.c → composite_credentials.cc} +79 -73
- data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -9
- data/src/core/lib/security/credentials/{credentials.c → credentials.cc} +97 -92
- data/src/core/lib/security/credentials/credentials.h +83 -75
- data/src/core/lib/security/credentials/{credentials_metadata.c → credentials_metadata.cc} +7 -6
- data/src/core/lib/security/credentials/fake/{fake_credentials.c → fake_credentials.cc} +39 -36
- data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
- data/src/core/lib/security/credentials/google_default/{credentials_generic.c → credentials_generic.cc} +5 -5
- data/src/core/lib/security/credentials/google_default/{google_default_credentials.c → google_default_credentials.cc} +55 -55
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +9 -1
- data/src/core/lib/security/credentials/iam/{iam_credentials.c → iam_credentials.cc} +19 -18
- data/src/core/lib/security/credentials/jwt/{json_token.c → json_token.cc} +80 -75
- data/src/core/lib/security/credentials/jwt/json_token.h +23 -15
- data/src/core/lib/security/credentials/jwt/{jwt_credentials.c → jwt_credentials.cc} +45 -41
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/{jwt_verifier.c → jwt_verifier.cc} +262 -252
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +38 -30
- data/src/core/lib/security/credentials/oauth2/{oauth2_credentials.c → oauth2_credentials.cc} +138 -141
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +30 -22
- data/src/core/lib/security/credentials/plugin/{plugin_credentials.c → plugin_credentials.cc} +52 -53
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +7 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +344 -0
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +27 -0
- data/src/core/lib/security/transport/auth_filters.h +16 -0
- data/src/core/lib/security/transport/{client_auth_filter.c → client_auth_filter.cc} +127 -115
- data/src/core/lib/security/transport/{lb_targets_info.c → lb_targets_info.cc} +16 -13
- data/src/core/lib/security/transport/lb_targets_info.h +11 -3
- data/src/core/lib/security/transport/{secure_endpoint.c → secure_endpoint.cc} +84 -76
- data/src/core/lib/security/transport/secure_endpoint.h +13 -5
- data/src/core/lib/security/transport/security_connector.cc +1121 -0
- data/src/core/lib/security/transport/security_connector.h +97 -79
- data/src/core/lib/security/transport/{security_handshaker.c → security_handshaker.cc} +139 -132
- data/src/core/lib/security/transport/security_handshaker.h +11 -3
- data/src/core/lib/security/transport/{server_auth_filter.c → server_auth_filter.cc} +68 -68
- data/src/core/lib/security/transport/{tsi_error.c → tsi_error.cc} +1 -1
- data/src/core/lib/security/transport/tsi_error.h +9 -1
- data/src/core/lib/security/util/{json_util.c → json_util.cc} +11 -11
- data/src/core/lib/security/util/json_util.h +12 -4
- data/src/core/lib/slice/{b64.c → b64.cc} +15 -15
- data/src/core/lib/slice/b64.h +12 -4
- data/src/core/lib/slice/{percent_encoding.c → percent_encoding.cc} +15 -15
- data/src/core/lib/slice/percent_encoding.h +11 -3
- data/src/core/lib/slice/{slice.c → slice.cc} +64 -64
- data/src/core/lib/slice/{slice_buffer.c → slice_buffer.cc} +38 -38
- data/src/core/lib/slice/{slice_hash_table.c → slice_hash_table.cc} +7 -7
- data/src/core/lib/slice/slice_hash_table.h +19 -11
- data/src/core/lib/slice/{slice_intern.c → slice_intern.cc} +35 -34
- data/src/core/lib/slice/slice_internal.h +17 -6
- data/src/core/lib/slice/{slice_string_helpers.c → slice_string_helpers.cc} +9 -9
- data/src/core/lib/slice/slice_string_helpers.h +3 -3
- data/src/core/lib/support/abstract.h +29 -0
- data/src/core/lib/support/{alloc.c → alloc.cc} +22 -22
- data/src/core/lib/support/{arena.c → arena.cc} +12 -12
- data/src/core/lib/support/arena.h +11 -3
- data/src/core/lib/support/{atm.c → atm.cc} +1 -1
- data/src/core/lib/support/{avl.c → avl.cc} +71 -70
- data/src/core/lib/support/{cmdline.c → cmdline.cc} +62 -62
- data/src/core/lib/support/{cpu_iphone.c → cpu_iphone.cc} +2 -0
- data/src/core/lib/support/{cpu_linux.c → cpu_linux.cc} +10 -0
- data/src/core/lib/support/{cpu_posix.c → cpu_posix.cc} +27 -4
- data/src/core/lib/support/{cpu_windows.c → cpu_windows.cc} +1 -0
- data/src/core/lib/support/env.h +3 -3
- data/src/core/lib/support/{env_linux.c → env_linux.cc} +11 -11
- data/src/core/lib/support/{env_posix.c → env_posix.cc} +4 -4
- data/src/core/lib/support/{env_windows.c → env_windows.cc} +5 -5
- data/src/core/lib/support/{fork.c → fork.cc} +2 -2
- data/src/core/lib/support/{histogram.c → histogram.cc} +25 -26
- data/src/core/lib/support/{host_port.c → host_port.cc} +16 -16
- data/src/core/lib/support/{log.c → log.cc} +8 -8
- data/src/core/lib/support/{log_android.c → log_android.cc} +7 -7
- data/src/core/lib/support/{log_linux.c → log_linux.cc} +8 -8
- data/src/core/lib/support/{log_posix.c → log_posix.cc} +9 -10
- data/src/core/lib/support/{log_windows.c → log_windows.cc} +7 -7
- data/src/core/lib/support/manual_constructor.h +211 -0
- data/src/core/lib/support/memory.h +41 -0
- data/src/core/lib/support/mpscq.cc +114 -0
- data/src/core/lib/support/mpscq.h +45 -7
- data/src/core/lib/support/{murmur_hash.c → murmur_hash.cc} +9 -12
- data/src/core/lib/support/murmur_hash.h +9 -1
- data/src/core/lib/support/spinlock.h +8 -1
- data/src/core/lib/support/{string.c → string.cc} +56 -55
- data/src/core/lib/support/string.h +21 -21
- data/src/core/lib/support/{string_posix.c → string_posix.cc} +5 -4
- data/src/core/lib/support/{string_util_windows.c → string_util_windows.cc} +9 -6
- data/src/core/lib/support/{string_windows.c → string_windows.cc} +3 -2
- data/src/core/lib/support/string_windows.h +8 -0
- data/src/core/lib/support/{subprocess_posix.c → subprocess_posix.cc} +13 -13
- data/src/core/lib/support/{subprocess_windows.c → subprocess_windows.cc} +9 -9
- data/src/core/lib/support/{sync.c → sync.cc} +22 -22
- data/src/core/lib/support/{sync_posix.c → sync_posix.cc} +6 -2
- data/src/core/lib/support/{sync_windows.c → sync_windows.cc} +14 -14
- data/src/core/lib/support/{thd.c → thd.cc} +0 -0
- data/src/core/lib/support/{thd_posix.c → thd_posix.cc} +10 -10
- data/src/core/lib/support/{thd_windows.c → thd_windows.cc} +10 -10
- data/src/core/lib/support/{time.c → time.cc} +0 -0
- data/src/core/lib/support/{time_posix.c → time_posix.cc} +5 -6
- data/src/core/lib/support/{time_precise.c → time_precise.cc} +6 -4
- data/src/core/lib/support/time_precise.h +9 -1
- data/src/core/lib/support/{time_windows.c → time_windows.cc} +2 -3
- data/src/core/lib/support/{tls_pthread.c → tls_pthread.cc} +2 -2
- data/src/core/lib/support/tmpfile.h +1 -1
- data/src/core/lib/support/{tmpfile_msys.c → tmpfile_msys.cc} +2 -2
- data/src/core/lib/support/{tmpfile_posix.c → tmpfile_posix.cc} +7 -7
- data/src/core/lib/support/{tmpfile_windows.c → tmpfile_windows.cc} +2 -2
- data/src/core/lib/support/{wrap_memcpy.c → wrap_memcpy.cc} +4 -2
- data/src/core/lib/surface/{alarm.c → alarm.cc} +32 -31
- data/src/core/lib/surface/alarm_internal.h +10 -2
- data/src/core/lib/surface/{api_trace.c → api_trace.cc} +1 -1
- data/src/core/lib/surface/api_trace.h +2 -2
- data/src/core/lib/surface/{byte_buffer.c → byte_buffer.cc} +13 -13
- data/src/core/lib/surface/{byte_buffer_reader.c → byte_buffer_reader.cc} +9 -9
- data/src/core/lib/surface/{call.c → call.cc} +379 -372
- data/src/core/lib/surface/call.h +37 -38
- data/src/core/lib/surface/{call_details.c → call_details.cc} +0 -0
- data/src/core/lib/surface/{call_log_batch.c → call_log_batch.cc} +13 -11
- data/src/core/lib/surface/call_test_only.h +5 -5
- data/src/core/lib/surface/{channel.c → channel.cc} +94 -95
- data/src/core/lib/surface/channel.h +29 -21
- data/src/core/lib/surface/{channel_init.c → channel_init.cc} +13 -13
- data/src/core/lib/surface/channel_init.h +6 -6
- data/src/core/lib/surface/{channel_ping.c → channel_ping.cc} +12 -12
- data/src/core/lib/surface/{channel_stack_type.c → channel_stack_type.cc} +1 -1
- data/src/core/lib/surface/channel_stack_type.h +9 -1
- data/src/core/lib/surface/{completion_queue.c → completion_queue.cc} +416 -379
- data/src/core/lib/surface/completion_queue.h +29 -29
- data/src/core/lib/surface/{completion_queue_factory.c → completion_queue_factory.cc} +1 -1
- data/src/core/lib/surface/completion_queue_factory.h +8 -0
- data/src/core/lib/surface/{event_string.c → event_string.cc} +9 -9
- data/src/core/lib/surface/event_string.h +9 -1
- data/src/core/lib/surface/{init.c → init.cc} +16 -39
- data/src/core/lib/surface/init.h +8 -0
- data/src/core/lib/surface/{init_secure.c → init_secure.cc} +12 -25
- data/src/core/lib/surface/lame_client.cc +38 -40
- data/src/core/lib/surface/lame_client.h +8 -0
- data/src/core/lib/surface/{metadata_array.c → metadata_array.cc} +0 -0
- data/src/core/lib/surface/{server.c → server.cc} +340 -404
- data/src/core/lib/surface/server.h +22 -14
- data/src/core/lib/surface/{validate_metadata.c → validate_metadata.cc} +10 -9
- data/src/core/lib/surface/validate_metadata.h +10 -2
- data/src/core/lib/surface/{version.c → version.cc} +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +84 -0
- data/src/core/lib/transport/bdp_estimator.h +67 -42
- data/src/core/lib/transport/{byte_stream.c → byte_stream.cc} +51 -51
- data/src/core/lib/transport/byte_stream.h +41 -33
- data/src/core/lib/transport/{connectivity_state.c → connectivity_state.cc} +36 -40
- data/src/core/lib/transport/connectivity_state.h +29 -21
- data/src/core/lib/transport/{error_utils.c → error_utils.cc} +26 -22
- data/src/core/lib/transport/error_utils.h +18 -6
- data/src/core/lib/transport/{metadata.c → metadata.cc} +92 -88
- data/src/core/lib/transport/metadata.h +22 -20
- data/src/core/lib/transport/{metadata_batch.c → metadata_batch.cc} +78 -79
- data/src/core/lib/transport/metadata_batch.h +46 -45
- data/src/core/lib/transport/pid_controller.cc +48 -0
- data/src/core/lib/transport/pid_controller.h +84 -32
- data/src/core/lib/transport/{service_config.c → service_config.cc} +66 -48
- data/src/core/lib/transport/service_config.h +11 -2
- data/src/core/lib/transport/{static_metadata.c → static_metadata.cc} +2 -2
- data/src/core/lib/transport/static_metadata.h +30 -23
- data/src/core/lib/transport/{status_conversion.c → status_conversion.cc} +4 -3
- data/src/core/lib/transport/status_conversion.h +12 -2
- data/src/core/lib/transport/{timeout_encoding.c → timeout_encoding.cc} +28 -61
- data/src/core/lib/transport/timeout_encoding.h +11 -2
- data/src/core/lib/transport/{transport.c → transport.cc} +79 -79
- data/src/core/lib/transport/transport.h +78 -80
- data/src/core/lib/transport/transport_impl.h +27 -19
- data/src/core/lib/transport/{transport_op_string.c → transport_op_string.cc} +32 -30
- data/src/core/plugin_registry/{grpc_plugin_registry.c → grpc_plugin_registry.cc} +34 -38
- data/src/core/tsi/{fake_transport_security.c → fake_transport_security.cc} +141 -132
- data/src/core/tsi/fake_transport_security.h +5 -5
- data/src/core/tsi/{gts_transport_security.c → gts_transport_security.cc} +4 -4
- data/src/core/tsi/gts_transport_security.h +11 -3
- data/src/core/tsi/{ssl_transport_security.c → ssl_transport_security.cc} +309 -300
- data/src/core/tsi/ssl_transport_security.h +25 -25
- data/src/core/tsi/ssl_types.h +8 -0
- data/src/core/tsi/{transport_security.c → transport_security.cc} +94 -87
- data/src/core/tsi/transport_security.h +55 -55
- data/src/core/tsi/{transport_security_adapter.c → transport_security_adapter.cc} +58 -55
- data/src/core/tsi/transport_security_adapter.h +2 -2
- data/src/core/tsi/{transport_security_grpc.c → transport_security_grpc.cc} +21 -21
- data/src/core/tsi/transport_security_grpc.h +19 -19
- data/src/core/tsi/transport_security_interface.h +41 -41
- data/src/ruby/ext/grpc/extconf.rb +4 -2
- data/src/ruby/ext/grpc/rb_byte_buffer.c +5 -5
- data/src/ruby/ext/grpc/rb_byte_buffer.h +2 -2
- data/src/ruby/ext/grpc/rb_call.c +41 -42
- data/src/ruby/ext/grpc/rb_call.h +6 -6
- data/src/ruby/ext/grpc/rb_call_credentials.c +30 -30
- data/src/ruby/ext/grpc/rb_channel.c +87 -87
- data/src/ruby/ext/grpc/rb_channel_credentials.c +23 -23
- data/src/ruby/ext/grpc/rb_completion_queue.c +11 -11
- data/src/ruby/ext/grpc/rb_completion_queue.h +3 -3
- data/src/ruby/ext/grpc/rb_compression_options.c +20 -20
- data/src/ruby/ext/grpc/rb_event_thread.c +14 -14
- data/src/ruby/ext/grpc/rb_event_thread.h +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +8 -8
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +16 -58
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +242 -306
- data/src/ruby/ext/grpc/rb_server.c +23 -23
- data/src/ruby/ext/grpc/rb_server_credentials.c +13 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +25 -12
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +14 -0
- data/src/ruby/spec/pb/health/checker_spec.rb +29 -0
- data/third_party/cares/config_freebsd/ares_config.h +502 -0
- data/third_party/cares/config_openbsd/ares_config.h +502 -0
- metadata +302 -328
- data/src/core/ext/census/aggregation.h +0 -51
- data/src/core/ext/census/base_resources.c +0 -56
- data/src/core/ext/census/base_resources.h +0 -24
- data/src/core/ext/census/census_interface.h +0 -61
- data/src/core/ext/census/census_rpc_stats.h +0 -86
- data/src/core/ext/census/context.c +0 -496
- data/src/core/ext/census/gen/census.pb.c +0 -161
- data/src/core/ext/census/gen/census.pb.h +0 -280
- data/src/core/ext/census/gen/trace_context.pb.c +0 -39
- data/src/core/ext/census/gen/trace_context.pb.h +0 -78
- data/src/core/ext/census/grpc_filter.c +0 -196
- data/src/core/ext/census/grpc_plugin.c +0 -70
- data/src/core/ext/census/initialize.c +0 -51
- data/src/core/ext/census/intrusive_hash_map.c +0 -305
- data/src/core/ext/census/intrusive_hash_map.h +0 -152
- data/src/core/ext/census/intrusive_hash_map_internal.h +0 -48
- data/src/core/ext/census/mlog.c +0 -586
- data/src/core/ext/census/mlog.h +0 -80
- data/src/core/ext/census/operation.c +0 -48
- data/src/core/ext/census/placeholders.c +0 -49
- data/src/core/ext/census/resource.c +0 -303
- data/src/core/ext/census/resource.h +0 -48
- data/src/core/ext/census/rpc_metric_id.h +0 -36
- data/src/core/ext/census/trace_context.c +0 -71
- data/src/core/ext/census/trace_context.h +0 -56
- data/src/core/ext/census/trace_label.h +0 -46
- data/src/core/ext/census/trace_propagation.h +0 -48
- data/src/core/ext/census/trace_status.h +0 -30
- data/src/core/ext/census/trace_string.h +0 -35
- data/src/core/ext/census/tracing.c +0 -55
- data/src/core/ext/census/tracing.h +0 -109
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +0 -714
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +0 -924
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +0 -60
- data/src/core/ext/transport/chttp2/transport/flow_control.c +0 -502
- data/src/core/ext/transport/chttp2/transport/writing.c +0 -534
- data/src/core/lib/debug/trace.c +0 -146
- data/src/core/lib/iomgr/closure.c +0 -219
- data/src/core/lib/iomgr/ev_epollex_linux.c +0 -1461
- data/src/core/lib/iomgr/ev_posix.c +0 -266
- data/src/core/lib/iomgr/exec_ctx.c +0 -113
- data/src/core/lib/iomgr/tcp_uv.c +0 -381
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +0 -194
- data/src/core/lib/security/transport/security_connector.c +0 -914
- data/src/core/lib/support/backoff.c +0 -72
- data/src/core/lib/support/backoff.h +0 -56
- data/src/core/lib/support/mpscq.c +0 -79
- data/src/core/lib/support/stack_lockfree.c +0 -137
- data/src/core/lib/support/stack_lockfree.h +0 -38
- data/src/core/lib/transport/bdp_estimator.c +0 -110
- data/src/core/lib/transport/pid_controller.c +0 -63
@@ -1,194 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2016 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#include "src/core/lib/security/credentials/ssl/ssl_credentials.h"
|
20
|
-
|
21
|
-
#include <string.h>
|
22
|
-
|
23
|
-
#include "src/core/lib/channel/channel_args.h"
|
24
|
-
#include "src/core/lib/surface/api_trace.h"
|
25
|
-
|
26
|
-
#include <grpc/support/alloc.h>
|
27
|
-
#include <grpc/support/log.h>
|
28
|
-
#include <grpc/support/string_util.h>
|
29
|
-
|
30
|
-
//
|
31
|
-
// SSL Channel Credentials.
|
32
|
-
//
|
33
|
-
|
34
|
-
static void ssl_config_pem_key_cert_pair_destroy(
|
35
|
-
tsi_ssl_pem_key_cert_pair *kp) {
|
36
|
-
if (kp == NULL) return;
|
37
|
-
gpr_free((void *)kp->private_key);
|
38
|
-
gpr_free((void *)kp->cert_chain);
|
39
|
-
}
|
40
|
-
|
41
|
-
static void ssl_destruct(grpc_exec_ctx *exec_ctx,
|
42
|
-
grpc_channel_credentials *creds) {
|
43
|
-
grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds;
|
44
|
-
gpr_free(c->config.pem_root_certs);
|
45
|
-
ssl_config_pem_key_cert_pair_destroy(&c->config.pem_key_cert_pair);
|
46
|
-
}
|
47
|
-
|
48
|
-
static grpc_security_status ssl_create_security_connector(
|
49
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_credentials *creds,
|
50
|
-
grpc_call_credentials *call_creds, const char *target,
|
51
|
-
const grpc_channel_args *args, grpc_channel_security_connector **sc,
|
52
|
-
grpc_channel_args **new_args) {
|
53
|
-
grpc_ssl_credentials *c = (grpc_ssl_credentials *)creds;
|
54
|
-
grpc_security_status status = GRPC_SECURITY_OK;
|
55
|
-
const char *overridden_target_name = NULL;
|
56
|
-
for (size_t i = 0; args && i < args->num_args; i++) {
|
57
|
-
grpc_arg *arg = &args->args[i];
|
58
|
-
if (strcmp(arg->key, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG) == 0 &&
|
59
|
-
arg->type == GRPC_ARG_STRING) {
|
60
|
-
overridden_target_name = arg->value.string;
|
61
|
-
break;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
status = grpc_ssl_channel_security_connector_create(
|
65
|
-
exec_ctx, call_creds, &c->config, target, overridden_target_name, sc);
|
66
|
-
if (status != GRPC_SECURITY_OK) {
|
67
|
-
return status;
|
68
|
-
}
|
69
|
-
grpc_arg new_arg =
|
70
|
-
grpc_channel_arg_string_create(GRPC_ARG_HTTP2_SCHEME, "https");
|
71
|
-
*new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
|
72
|
-
return status;
|
73
|
-
}
|
74
|
-
|
75
|
-
static grpc_channel_credentials_vtable ssl_vtable = {
|
76
|
-
ssl_destruct, ssl_create_security_connector, NULL};
|
77
|
-
|
78
|
-
static void ssl_build_config(const char *pem_root_certs,
|
79
|
-
grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
|
80
|
-
grpc_ssl_config *config) {
|
81
|
-
if (pem_root_certs != NULL) {
|
82
|
-
config->pem_root_certs = gpr_strdup(pem_root_certs);
|
83
|
-
}
|
84
|
-
if (pem_key_cert_pair != NULL) {
|
85
|
-
GPR_ASSERT(pem_key_cert_pair->private_key != NULL);
|
86
|
-
GPR_ASSERT(pem_key_cert_pair->cert_chain != NULL);
|
87
|
-
config->pem_key_cert_pair.cert_chain =
|
88
|
-
gpr_strdup(pem_key_cert_pair->cert_chain);
|
89
|
-
config->pem_key_cert_pair.private_key =
|
90
|
-
gpr_strdup(pem_key_cert_pair->private_key);
|
91
|
-
}
|
92
|
-
}
|
93
|
-
|
94
|
-
grpc_channel_credentials *grpc_ssl_credentials_create(
|
95
|
-
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
|
96
|
-
void *reserved) {
|
97
|
-
grpc_ssl_credentials *c = gpr_zalloc(sizeof(grpc_ssl_credentials));
|
98
|
-
GRPC_API_TRACE(
|
99
|
-
"grpc_ssl_credentials_create(pem_root_certs=%s, "
|
100
|
-
"pem_key_cert_pair=%p, "
|
101
|
-
"reserved=%p)",
|
102
|
-
3, (pem_root_certs, pem_key_cert_pair, reserved));
|
103
|
-
GPR_ASSERT(reserved == NULL);
|
104
|
-
c->base.type = GRPC_CHANNEL_CREDENTIALS_TYPE_SSL;
|
105
|
-
c->base.vtable = &ssl_vtable;
|
106
|
-
gpr_ref_init(&c->base.refcount, 1);
|
107
|
-
ssl_build_config(pem_root_certs, pem_key_cert_pair, &c->config);
|
108
|
-
return &c->base;
|
109
|
-
}
|
110
|
-
|
111
|
-
//
|
112
|
-
// SSL Server Credentials.
|
113
|
-
//
|
114
|
-
|
115
|
-
static void ssl_server_destruct(grpc_exec_ctx *exec_ctx,
|
116
|
-
grpc_server_credentials *creds) {
|
117
|
-
grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
|
118
|
-
size_t i;
|
119
|
-
for (i = 0; i < c->config.num_key_cert_pairs; i++) {
|
120
|
-
ssl_config_pem_key_cert_pair_destroy(&c->config.pem_key_cert_pairs[i]);
|
121
|
-
}
|
122
|
-
gpr_free(c->config.pem_key_cert_pairs);
|
123
|
-
gpr_free(c->config.pem_root_certs);
|
124
|
-
}
|
125
|
-
|
126
|
-
static grpc_security_status ssl_server_create_security_connector(
|
127
|
-
grpc_exec_ctx *exec_ctx, grpc_server_credentials *creds,
|
128
|
-
grpc_server_security_connector **sc) {
|
129
|
-
grpc_ssl_server_credentials *c = (grpc_ssl_server_credentials *)creds;
|
130
|
-
return grpc_ssl_server_security_connector_create(exec_ctx, &c->config, sc);
|
131
|
-
}
|
132
|
-
|
133
|
-
static grpc_server_credentials_vtable ssl_server_vtable = {
|
134
|
-
ssl_server_destruct, ssl_server_create_security_connector};
|
135
|
-
|
136
|
-
static void ssl_build_server_config(
|
137
|
-
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
|
138
|
-
size_t num_key_cert_pairs,
|
139
|
-
grpc_ssl_client_certificate_request_type client_certificate_request,
|
140
|
-
grpc_ssl_server_config *config) {
|
141
|
-
size_t i;
|
142
|
-
config->client_certificate_request = client_certificate_request;
|
143
|
-
if (pem_root_certs != NULL) {
|
144
|
-
config->pem_root_certs = gpr_strdup(pem_root_certs);
|
145
|
-
}
|
146
|
-
if (num_key_cert_pairs > 0) {
|
147
|
-
GPR_ASSERT(pem_key_cert_pairs != NULL);
|
148
|
-
config->pem_key_cert_pairs =
|
149
|
-
gpr_zalloc(num_key_cert_pairs * sizeof(tsi_ssl_pem_key_cert_pair));
|
150
|
-
}
|
151
|
-
config->num_key_cert_pairs = num_key_cert_pairs;
|
152
|
-
for (i = 0; i < num_key_cert_pairs; i++) {
|
153
|
-
GPR_ASSERT(pem_key_cert_pairs[i].private_key != NULL);
|
154
|
-
GPR_ASSERT(pem_key_cert_pairs[i].cert_chain != NULL);
|
155
|
-
config->pem_key_cert_pairs[i].cert_chain =
|
156
|
-
gpr_strdup(pem_key_cert_pairs[i].cert_chain);
|
157
|
-
config->pem_key_cert_pairs[i].private_key =
|
158
|
-
gpr_strdup(pem_key_cert_pairs[i].private_key);
|
159
|
-
}
|
160
|
-
}
|
161
|
-
|
162
|
-
grpc_server_credentials *grpc_ssl_server_credentials_create(
|
163
|
-
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
|
164
|
-
size_t num_key_cert_pairs, int force_client_auth, void *reserved) {
|
165
|
-
return grpc_ssl_server_credentials_create_ex(
|
166
|
-
pem_root_certs, pem_key_cert_pairs, num_key_cert_pairs,
|
167
|
-
force_client_auth
|
168
|
-
? GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY
|
169
|
-
: GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE,
|
170
|
-
reserved);
|
171
|
-
}
|
172
|
-
|
173
|
-
grpc_server_credentials *grpc_ssl_server_credentials_create_ex(
|
174
|
-
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
|
175
|
-
size_t num_key_cert_pairs,
|
176
|
-
grpc_ssl_client_certificate_request_type client_certificate_request,
|
177
|
-
void *reserved) {
|
178
|
-
grpc_ssl_server_credentials *c =
|
179
|
-
gpr_zalloc(sizeof(grpc_ssl_server_credentials));
|
180
|
-
GRPC_API_TRACE(
|
181
|
-
"grpc_ssl_server_credentials_create_ex("
|
182
|
-
"pem_root_certs=%s, pem_key_cert_pairs=%p, num_key_cert_pairs=%lu, "
|
183
|
-
"client_certificate_request=%d, reserved=%p)",
|
184
|
-
5, (pem_root_certs, pem_key_cert_pairs, (unsigned long)num_key_cert_pairs,
|
185
|
-
client_certificate_request, reserved));
|
186
|
-
GPR_ASSERT(reserved == NULL);
|
187
|
-
c->base.type = GRPC_CHANNEL_CREDENTIALS_TYPE_SSL;
|
188
|
-
gpr_ref_init(&c->base.refcount, 1);
|
189
|
-
c->base.vtable = &ssl_server_vtable;
|
190
|
-
ssl_build_server_config(pem_root_certs, pem_key_cert_pairs,
|
191
|
-
num_key_cert_pairs, client_certificate_request,
|
192
|
-
&c->config);
|
193
|
-
return &c->base;
|
194
|
-
}
|
@@ -1,914 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
*
|
3
|
-
* Copyright 2015 gRPC authors.
|
4
|
-
*
|
5
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
-
* you may not use this file except in compliance with the License.
|
7
|
-
* You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*
|
17
|
-
*/
|
18
|
-
|
19
|
-
#include "src/core/lib/security/transport/security_connector.h"
|
20
|
-
|
21
|
-
#include <stdbool.h>
|
22
|
-
#include <string.h>
|
23
|
-
|
24
|
-
#include <grpc/slice_buffer.h>
|
25
|
-
#include <grpc/support/alloc.h>
|
26
|
-
#include <grpc/support/host_port.h>
|
27
|
-
#include <grpc/support/log.h>
|
28
|
-
#include <grpc/support/string_util.h>
|
29
|
-
|
30
|
-
#include "src/core/ext/transport/chttp2/alpn/alpn.h"
|
31
|
-
#include "src/core/lib/channel/channel_args.h"
|
32
|
-
#include "src/core/lib/channel/handshaker.h"
|
33
|
-
#include "src/core/lib/iomgr/load_file.h"
|
34
|
-
#include "src/core/lib/security/context/security_context.h"
|
35
|
-
#include "src/core/lib/security/credentials/credentials.h"
|
36
|
-
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
|
37
|
-
#include "src/core/lib/security/transport/lb_targets_info.h"
|
38
|
-
#include "src/core/lib/security/transport/secure_endpoint.h"
|
39
|
-
#include "src/core/lib/security/transport/security_handshaker.h"
|
40
|
-
#include "src/core/lib/support/env.h"
|
41
|
-
#include "src/core/lib/support/string.h"
|
42
|
-
#include "src/core/tsi/fake_transport_security.h"
|
43
|
-
#include "src/core/tsi/ssl_transport_security.h"
|
44
|
-
#include "src/core/tsi/transport_security_adapter.h"
|
45
|
-
|
46
|
-
#ifndef NDEBUG
|
47
|
-
grpc_tracer_flag grpc_trace_security_connector_refcount =
|
48
|
-
GRPC_TRACER_INITIALIZER(false, "security_connector_refcount");
|
49
|
-
#endif
|
50
|
-
|
51
|
-
/* -- Constants. -- */
|
52
|
-
|
53
|
-
#ifndef INSTALL_PREFIX
|
54
|
-
static const char *installed_roots_path = "/usr/share/grpc/roots.pem";
|
55
|
-
#else
|
56
|
-
static const char *installed_roots_path =
|
57
|
-
INSTALL_PREFIX "/share/grpc/roots.pem";
|
58
|
-
#endif
|
59
|
-
|
60
|
-
/* -- Overridden default roots. -- */
|
61
|
-
|
62
|
-
static grpc_ssl_roots_override_callback ssl_roots_override_cb = NULL;
|
63
|
-
|
64
|
-
void grpc_set_ssl_roots_override_callback(grpc_ssl_roots_override_callback cb) {
|
65
|
-
ssl_roots_override_cb = cb;
|
66
|
-
}
|
67
|
-
|
68
|
-
/* -- Cipher suites. -- */
|
69
|
-
|
70
|
-
/* Defines the cipher suites that we accept by default. All these cipher suites
|
71
|
-
are compliant with HTTP2. */
|
72
|
-
#define GRPC_SSL_CIPHER_SUITES \
|
73
|
-
"ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384"
|
74
|
-
|
75
|
-
static gpr_once cipher_suites_once = GPR_ONCE_INIT;
|
76
|
-
static const char *cipher_suites = NULL;
|
77
|
-
|
78
|
-
static void init_cipher_suites(void) {
|
79
|
-
char *overridden = gpr_getenv("GRPC_SSL_CIPHER_SUITES");
|
80
|
-
cipher_suites = overridden != NULL ? overridden : GRPC_SSL_CIPHER_SUITES;
|
81
|
-
}
|
82
|
-
|
83
|
-
static const char *ssl_cipher_suites(void) {
|
84
|
-
gpr_once_init(&cipher_suites_once, init_cipher_suites);
|
85
|
-
return cipher_suites;
|
86
|
-
}
|
87
|
-
|
88
|
-
/* -- Common methods. -- */
|
89
|
-
|
90
|
-
/* Returns the first property with that name. */
|
91
|
-
const tsi_peer_property *tsi_peer_get_property_by_name(const tsi_peer *peer,
|
92
|
-
const char *name) {
|
93
|
-
size_t i;
|
94
|
-
if (peer == NULL) return NULL;
|
95
|
-
for (i = 0; i < peer->property_count; i++) {
|
96
|
-
const tsi_peer_property *property = &peer->properties[i];
|
97
|
-
if (name == NULL && property->name == NULL) {
|
98
|
-
return property;
|
99
|
-
}
|
100
|
-
if (name != NULL && property->name != NULL &&
|
101
|
-
strcmp(property->name, name) == 0) {
|
102
|
-
return property;
|
103
|
-
}
|
104
|
-
}
|
105
|
-
return NULL;
|
106
|
-
}
|
107
|
-
|
108
|
-
void grpc_channel_security_connector_add_handshakers(
|
109
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *connector,
|
110
|
-
grpc_handshake_manager *handshake_mgr) {
|
111
|
-
if (connector != NULL) {
|
112
|
-
connector->add_handshakers(exec_ctx, connector, handshake_mgr);
|
113
|
-
}
|
114
|
-
}
|
115
|
-
|
116
|
-
void grpc_server_security_connector_add_handshakers(
|
117
|
-
grpc_exec_ctx *exec_ctx, grpc_server_security_connector *connector,
|
118
|
-
grpc_handshake_manager *handshake_mgr) {
|
119
|
-
if (connector != NULL) {
|
120
|
-
connector->add_handshakers(exec_ctx, connector, handshake_mgr);
|
121
|
-
}
|
122
|
-
}
|
123
|
-
|
124
|
-
void grpc_security_connector_check_peer(grpc_exec_ctx *exec_ctx,
|
125
|
-
grpc_security_connector *sc,
|
126
|
-
tsi_peer peer,
|
127
|
-
grpc_auth_context **auth_context,
|
128
|
-
grpc_closure *on_peer_checked) {
|
129
|
-
if (sc == NULL) {
|
130
|
-
GRPC_CLOSURE_SCHED(exec_ctx, on_peer_checked,
|
131
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
132
|
-
"cannot check peer -- no security connector"));
|
133
|
-
tsi_peer_destruct(&peer);
|
134
|
-
} else {
|
135
|
-
sc->vtable->check_peer(exec_ctx, sc, peer, auth_context, on_peer_checked);
|
136
|
-
}
|
137
|
-
}
|
138
|
-
|
139
|
-
bool grpc_channel_security_connector_check_call_host(
|
140
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
|
141
|
-
const char *host, grpc_auth_context *auth_context,
|
142
|
-
grpc_closure *on_call_host_checked, grpc_error **error) {
|
143
|
-
if (sc == NULL || sc->check_call_host == NULL) {
|
144
|
-
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
145
|
-
"cannot check call host -- no security connector");
|
146
|
-
return true;
|
147
|
-
}
|
148
|
-
return sc->check_call_host(exec_ctx, sc, host, auth_context,
|
149
|
-
on_call_host_checked, error);
|
150
|
-
}
|
151
|
-
|
152
|
-
void grpc_channel_security_connector_cancel_check_call_host(
|
153
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
|
154
|
-
grpc_closure *on_call_host_checked, grpc_error *error) {
|
155
|
-
if (sc == NULL || sc->cancel_check_call_host == NULL) {
|
156
|
-
GRPC_ERROR_UNREF(error);
|
157
|
-
return;
|
158
|
-
}
|
159
|
-
sc->cancel_check_call_host(exec_ctx, sc, on_call_host_checked, error);
|
160
|
-
}
|
161
|
-
|
162
|
-
#ifndef NDEBUG
|
163
|
-
grpc_security_connector *grpc_security_connector_ref(
|
164
|
-
grpc_security_connector *sc, const char *file, int line,
|
165
|
-
const char *reason) {
|
166
|
-
if (sc == NULL) return NULL;
|
167
|
-
if (GRPC_TRACER_ON(grpc_trace_security_connector_refcount)) {
|
168
|
-
gpr_atm val = gpr_atm_no_barrier_load(&sc->refcount.count);
|
169
|
-
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
170
|
-
"SECURITY_CONNECTOR:%p ref %" PRIdPTR " -> %" PRIdPTR " %s", sc,
|
171
|
-
val, val + 1, reason);
|
172
|
-
}
|
173
|
-
#else
|
174
|
-
grpc_security_connector *grpc_security_connector_ref(
|
175
|
-
grpc_security_connector *sc) {
|
176
|
-
if (sc == NULL) return NULL;
|
177
|
-
#endif
|
178
|
-
gpr_ref(&sc->refcount);
|
179
|
-
return sc;
|
180
|
-
}
|
181
|
-
|
182
|
-
#ifndef NDEBUG
|
183
|
-
void grpc_security_connector_unref(grpc_exec_ctx *exec_ctx,
|
184
|
-
grpc_security_connector *sc,
|
185
|
-
const char *file, int line,
|
186
|
-
const char *reason) {
|
187
|
-
if (sc == NULL) return;
|
188
|
-
if (GRPC_TRACER_ON(grpc_trace_security_connector_refcount)) {
|
189
|
-
gpr_atm val = gpr_atm_no_barrier_load(&sc->refcount.count);
|
190
|
-
gpr_log(file, line, GPR_LOG_SEVERITY_DEBUG,
|
191
|
-
"SECURITY_CONNECTOR:%p unref %" PRIdPTR " -> %" PRIdPTR " %s", sc,
|
192
|
-
val, val - 1, reason);
|
193
|
-
}
|
194
|
-
#else
|
195
|
-
void grpc_security_connector_unref(grpc_exec_ctx *exec_ctx,
|
196
|
-
grpc_security_connector *sc) {
|
197
|
-
if (sc == NULL) return;
|
198
|
-
#endif
|
199
|
-
if (gpr_unref(&sc->refcount)) sc->vtable->destroy(exec_ctx, sc);
|
200
|
-
}
|
201
|
-
|
202
|
-
static void connector_pointer_arg_destroy(grpc_exec_ctx *exec_ctx, void *p) {
|
203
|
-
GRPC_SECURITY_CONNECTOR_UNREF(exec_ctx, p, "connector_pointer_arg_destroy");
|
204
|
-
}
|
205
|
-
|
206
|
-
static void *connector_pointer_arg_copy(void *p) {
|
207
|
-
return GRPC_SECURITY_CONNECTOR_REF(p, "connector_pointer_arg_copy");
|
208
|
-
}
|
209
|
-
|
210
|
-
static int connector_pointer_cmp(void *a, void *b) { return GPR_ICMP(a, b); }
|
211
|
-
|
212
|
-
static const grpc_arg_pointer_vtable connector_pointer_vtable = {
|
213
|
-
connector_pointer_arg_copy, connector_pointer_arg_destroy,
|
214
|
-
connector_pointer_cmp};
|
215
|
-
|
216
|
-
grpc_arg grpc_security_connector_to_arg(grpc_security_connector *sc) {
|
217
|
-
return grpc_channel_arg_pointer_create(GRPC_ARG_SECURITY_CONNECTOR, sc,
|
218
|
-
&connector_pointer_vtable);
|
219
|
-
}
|
220
|
-
|
221
|
-
grpc_security_connector *grpc_security_connector_from_arg(const grpc_arg *arg) {
|
222
|
-
if (strcmp(arg->key, GRPC_ARG_SECURITY_CONNECTOR)) return NULL;
|
223
|
-
if (arg->type != GRPC_ARG_POINTER) {
|
224
|
-
gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
|
225
|
-
GRPC_ARG_SECURITY_CONNECTOR);
|
226
|
-
return NULL;
|
227
|
-
}
|
228
|
-
return arg->value.pointer.p;
|
229
|
-
}
|
230
|
-
|
231
|
-
grpc_security_connector *grpc_security_connector_find_in_args(
|
232
|
-
const grpc_channel_args *args) {
|
233
|
-
size_t i;
|
234
|
-
if (args == NULL) return NULL;
|
235
|
-
for (i = 0; i < args->num_args; i++) {
|
236
|
-
grpc_security_connector *sc =
|
237
|
-
grpc_security_connector_from_arg(&args->args[i]);
|
238
|
-
if (sc != NULL) return sc;
|
239
|
-
}
|
240
|
-
return NULL;
|
241
|
-
}
|
242
|
-
|
243
|
-
/* -- Fake implementation. -- */
|
244
|
-
|
245
|
-
typedef struct {
|
246
|
-
grpc_channel_security_connector base;
|
247
|
-
char *target;
|
248
|
-
char *expected_targets;
|
249
|
-
bool is_lb_channel;
|
250
|
-
} grpc_fake_channel_security_connector;
|
251
|
-
|
252
|
-
static void fake_channel_destroy(grpc_exec_ctx *exec_ctx,
|
253
|
-
grpc_security_connector *sc) {
|
254
|
-
grpc_fake_channel_security_connector *c =
|
255
|
-
(grpc_fake_channel_security_connector *)sc;
|
256
|
-
grpc_call_credentials_unref(exec_ctx, c->base.request_metadata_creds);
|
257
|
-
gpr_free(c->target);
|
258
|
-
gpr_free(c->expected_targets);
|
259
|
-
gpr_free(c);
|
260
|
-
}
|
261
|
-
|
262
|
-
static void fake_server_destroy(grpc_exec_ctx *exec_ctx,
|
263
|
-
grpc_security_connector *sc) {
|
264
|
-
gpr_free(sc);
|
265
|
-
}
|
266
|
-
|
267
|
-
static bool fake_check_target(const char *target_type, const char *target,
|
268
|
-
const char *set_str) {
|
269
|
-
GPR_ASSERT(target_type != NULL);
|
270
|
-
GPR_ASSERT(target != NULL);
|
271
|
-
char **set = NULL;
|
272
|
-
size_t set_size = 0;
|
273
|
-
gpr_string_split(set_str, ",", &set, &set_size);
|
274
|
-
bool found = false;
|
275
|
-
for (size_t i = 0; i < set_size; ++i) {
|
276
|
-
if (set[i] != NULL && strcmp(target, set[i]) == 0) found = true;
|
277
|
-
}
|
278
|
-
for (size_t i = 0; i < set_size; ++i) {
|
279
|
-
gpr_free(set[i]);
|
280
|
-
}
|
281
|
-
gpr_free(set);
|
282
|
-
return found;
|
283
|
-
}
|
284
|
-
|
285
|
-
static void fake_secure_name_check(const char *target,
|
286
|
-
const char *expected_targets,
|
287
|
-
bool is_lb_channel) {
|
288
|
-
if (expected_targets == NULL) return;
|
289
|
-
char **lbs_and_backends = NULL;
|
290
|
-
size_t lbs_and_backends_size = 0;
|
291
|
-
bool success = false;
|
292
|
-
gpr_string_split(expected_targets, ";", &lbs_and_backends,
|
293
|
-
&lbs_and_backends_size);
|
294
|
-
if (lbs_and_backends_size > 2 || lbs_and_backends_size == 0) {
|
295
|
-
gpr_log(GPR_ERROR, "Invalid expected targets arg value: '%s'",
|
296
|
-
expected_targets);
|
297
|
-
goto done;
|
298
|
-
}
|
299
|
-
if (is_lb_channel) {
|
300
|
-
if (lbs_and_backends_size != 2) {
|
301
|
-
gpr_log(GPR_ERROR,
|
302
|
-
"Invalid expected targets arg value: '%s'. Expectations for LB "
|
303
|
-
"channels must be of the form 'be1,be2,be3,...;lb1,lb2,...",
|
304
|
-
expected_targets);
|
305
|
-
goto done;
|
306
|
-
}
|
307
|
-
if (!fake_check_target("LB", target, lbs_and_backends[1])) {
|
308
|
-
gpr_log(GPR_ERROR, "LB target '%s' not found in expected set '%s'",
|
309
|
-
target, lbs_and_backends[1]);
|
310
|
-
goto done;
|
311
|
-
}
|
312
|
-
success = true;
|
313
|
-
} else {
|
314
|
-
if (!fake_check_target("Backend", target, lbs_and_backends[0])) {
|
315
|
-
gpr_log(GPR_ERROR, "Backend target '%s' not found in expected set '%s'",
|
316
|
-
target, lbs_and_backends[0]);
|
317
|
-
goto done;
|
318
|
-
}
|
319
|
-
success = true;
|
320
|
-
}
|
321
|
-
done:
|
322
|
-
for (size_t i = 0; i < lbs_and_backends_size; ++i) {
|
323
|
-
gpr_free(lbs_and_backends[i]);
|
324
|
-
}
|
325
|
-
gpr_free(lbs_and_backends);
|
326
|
-
if (!success) abort();
|
327
|
-
}
|
328
|
-
|
329
|
-
static void fake_check_peer(grpc_exec_ctx *exec_ctx,
|
330
|
-
grpc_security_connector *sc, tsi_peer peer,
|
331
|
-
grpc_auth_context **auth_context,
|
332
|
-
grpc_closure *on_peer_checked) {
|
333
|
-
const char *prop_name;
|
334
|
-
grpc_error *error = GRPC_ERROR_NONE;
|
335
|
-
*auth_context = NULL;
|
336
|
-
if (peer.property_count != 1) {
|
337
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
338
|
-
"Fake peers should only have 1 property.");
|
339
|
-
goto end;
|
340
|
-
}
|
341
|
-
prop_name = peer.properties[0].name;
|
342
|
-
if (prop_name == NULL ||
|
343
|
-
strcmp(prop_name, TSI_CERTIFICATE_TYPE_PEER_PROPERTY)) {
|
344
|
-
char *msg;
|
345
|
-
gpr_asprintf(&msg, "Unexpected property in fake peer: %s.",
|
346
|
-
prop_name == NULL ? "<EMPTY>" : prop_name);
|
347
|
-
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
348
|
-
gpr_free(msg);
|
349
|
-
goto end;
|
350
|
-
}
|
351
|
-
if (strncmp(peer.properties[0].value.data, TSI_FAKE_CERTIFICATE_TYPE,
|
352
|
-
peer.properties[0].value.length)) {
|
353
|
-
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
354
|
-
"Invalid value for cert type property.");
|
355
|
-
goto end;
|
356
|
-
}
|
357
|
-
*auth_context = grpc_auth_context_create(NULL);
|
358
|
-
grpc_auth_context_add_cstring_property(
|
359
|
-
*auth_context, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
|
360
|
-
GRPC_FAKE_TRANSPORT_SECURITY_TYPE);
|
361
|
-
end:
|
362
|
-
GRPC_CLOSURE_SCHED(exec_ctx, on_peer_checked, error);
|
363
|
-
tsi_peer_destruct(&peer);
|
364
|
-
}
|
365
|
-
|
366
|
-
static void fake_channel_check_peer(grpc_exec_ctx *exec_ctx,
|
367
|
-
grpc_security_connector *sc, tsi_peer peer,
|
368
|
-
grpc_auth_context **auth_context,
|
369
|
-
grpc_closure *on_peer_checked) {
|
370
|
-
fake_check_peer(exec_ctx, sc, peer, auth_context, on_peer_checked);
|
371
|
-
grpc_fake_channel_security_connector *c =
|
372
|
-
(grpc_fake_channel_security_connector *)sc;
|
373
|
-
fake_secure_name_check(c->target, c->expected_targets, c->is_lb_channel);
|
374
|
-
}
|
375
|
-
|
376
|
-
static void fake_server_check_peer(grpc_exec_ctx *exec_ctx,
|
377
|
-
grpc_security_connector *sc, tsi_peer peer,
|
378
|
-
grpc_auth_context **auth_context,
|
379
|
-
grpc_closure *on_peer_checked) {
|
380
|
-
fake_check_peer(exec_ctx, sc, peer, auth_context, on_peer_checked);
|
381
|
-
}
|
382
|
-
|
383
|
-
static bool fake_channel_check_call_host(grpc_exec_ctx *exec_ctx,
|
384
|
-
grpc_channel_security_connector *sc,
|
385
|
-
const char *host,
|
386
|
-
grpc_auth_context *auth_context,
|
387
|
-
grpc_closure *on_call_host_checked,
|
388
|
-
grpc_error **error) {
|
389
|
-
return true;
|
390
|
-
}
|
391
|
-
|
392
|
-
static void fake_channel_cancel_check_call_host(
|
393
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
|
394
|
-
grpc_closure *on_call_host_checked, grpc_error *error) {
|
395
|
-
GRPC_ERROR_UNREF(error);
|
396
|
-
}
|
397
|
-
|
398
|
-
static void fake_channel_add_handshakers(
|
399
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
|
400
|
-
grpc_handshake_manager *handshake_mgr) {
|
401
|
-
grpc_handshake_manager_add(
|
402
|
-
handshake_mgr,
|
403
|
-
grpc_security_handshaker_create(
|
404
|
-
exec_ctx, tsi_create_fake_handshaker(true /* is_client */),
|
405
|
-
&sc->base));
|
406
|
-
}
|
407
|
-
|
408
|
-
static void fake_server_add_handshakers(grpc_exec_ctx *exec_ctx,
|
409
|
-
grpc_server_security_connector *sc,
|
410
|
-
grpc_handshake_manager *handshake_mgr) {
|
411
|
-
grpc_handshake_manager_add(
|
412
|
-
handshake_mgr,
|
413
|
-
grpc_security_handshaker_create(
|
414
|
-
exec_ctx, tsi_create_fake_handshaker(false /* is_client */),
|
415
|
-
&sc->base));
|
416
|
-
}
|
417
|
-
|
418
|
-
static grpc_security_connector_vtable fake_channel_vtable = {
|
419
|
-
fake_channel_destroy, fake_channel_check_peer};
|
420
|
-
|
421
|
-
static grpc_security_connector_vtable fake_server_vtable = {
|
422
|
-
fake_server_destroy, fake_server_check_peer};
|
423
|
-
|
424
|
-
grpc_channel_security_connector *grpc_fake_channel_security_connector_create(
|
425
|
-
grpc_call_credentials *request_metadata_creds, const char *target,
|
426
|
-
const grpc_channel_args *args) {
|
427
|
-
grpc_fake_channel_security_connector *c = gpr_zalloc(sizeof(*c));
|
428
|
-
gpr_ref_init(&c->base.base.refcount, 1);
|
429
|
-
c->base.base.url_scheme = GRPC_FAKE_SECURITY_URL_SCHEME;
|
430
|
-
c->base.base.vtable = &fake_channel_vtable;
|
431
|
-
c->base.request_metadata_creds =
|
432
|
-
grpc_call_credentials_ref(request_metadata_creds);
|
433
|
-
c->base.check_call_host = fake_channel_check_call_host;
|
434
|
-
c->base.cancel_check_call_host = fake_channel_cancel_check_call_host;
|
435
|
-
c->base.add_handshakers = fake_channel_add_handshakers;
|
436
|
-
c->target = gpr_strdup(target);
|
437
|
-
const char *expected_targets = grpc_fake_transport_get_expected_targets(args);
|
438
|
-
c->expected_targets = gpr_strdup(expected_targets);
|
439
|
-
c->is_lb_channel = (grpc_lb_targets_info_find_in_args(args) != NULL);
|
440
|
-
return &c->base;
|
441
|
-
}
|
442
|
-
|
443
|
-
grpc_server_security_connector *grpc_fake_server_security_connector_create(
|
444
|
-
void) {
|
445
|
-
grpc_server_security_connector *c =
|
446
|
-
gpr_zalloc(sizeof(grpc_server_security_connector));
|
447
|
-
gpr_ref_init(&c->base.refcount, 1);
|
448
|
-
c->base.vtable = &fake_server_vtable;
|
449
|
-
c->base.url_scheme = GRPC_FAKE_SECURITY_URL_SCHEME;
|
450
|
-
c->add_handshakers = fake_server_add_handshakers;
|
451
|
-
return c;
|
452
|
-
}
|
453
|
-
|
454
|
-
/* --- Ssl implementation. --- */
|
455
|
-
|
456
|
-
typedef struct {
|
457
|
-
grpc_channel_security_connector base;
|
458
|
-
tsi_ssl_client_handshaker_factory *client_handshaker_factory;
|
459
|
-
char *target_name;
|
460
|
-
char *overridden_target_name;
|
461
|
-
} grpc_ssl_channel_security_connector;
|
462
|
-
|
463
|
-
typedef struct {
|
464
|
-
grpc_server_security_connector base;
|
465
|
-
tsi_ssl_server_handshaker_factory *server_handshaker_factory;
|
466
|
-
} grpc_ssl_server_security_connector;
|
467
|
-
|
468
|
-
static void ssl_channel_destroy(grpc_exec_ctx *exec_ctx,
|
469
|
-
grpc_security_connector *sc) {
|
470
|
-
grpc_ssl_channel_security_connector *c =
|
471
|
-
(grpc_ssl_channel_security_connector *)sc;
|
472
|
-
grpc_call_credentials_unref(exec_ctx, c->base.request_metadata_creds);
|
473
|
-
tsi_ssl_client_handshaker_factory_unref(c->client_handshaker_factory);
|
474
|
-
c->client_handshaker_factory = NULL;
|
475
|
-
if (c->target_name != NULL) gpr_free(c->target_name);
|
476
|
-
if (c->overridden_target_name != NULL) gpr_free(c->overridden_target_name);
|
477
|
-
gpr_free(sc);
|
478
|
-
}
|
479
|
-
|
480
|
-
static void ssl_server_destroy(grpc_exec_ctx *exec_ctx,
|
481
|
-
grpc_security_connector *sc) {
|
482
|
-
grpc_ssl_server_security_connector *c =
|
483
|
-
(grpc_ssl_server_security_connector *)sc;
|
484
|
-
tsi_ssl_server_handshaker_factory_unref(c->server_handshaker_factory);
|
485
|
-
c->server_handshaker_factory = NULL;
|
486
|
-
gpr_free(sc);
|
487
|
-
}
|
488
|
-
|
489
|
-
static void ssl_channel_add_handshakers(grpc_exec_ctx *exec_ctx,
|
490
|
-
grpc_channel_security_connector *sc,
|
491
|
-
grpc_handshake_manager *handshake_mgr) {
|
492
|
-
grpc_ssl_channel_security_connector *c =
|
493
|
-
(grpc_ssl_channel_security_connector *)sc;
|
494
|
-
// Instantiate TSI handshaker.
|
495
|
-
tsi_handshaker *tsi_hs = NULL;
|
496
|
-
tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
|
497
|
-
c->client_handshaker_factory,
|
498
|
-
c->overridden_target_name != NULL ? c->overridden_target_name
|
499
|
-
: c->target_name,
|
500
|
-
&tsi_hs);
|
501
|
-
if (result != TSI_OK) {
|
502
|
-
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
|
503
|
-
tsi_result_to_string(result));
|
504
|
-
return;
|
505
|
-
}
|
506
|
-
|
507
|
-
// Create handshakers.
|
508
|
-
grpc_handshake_manager_add(
|
509
|
-
handshake_mgr,
|
510
|
-
grpc_security_handshaker_create(
|
511
|
-
exec_ctx, tsi_create_adapter_handshaker(tsi_hs), &sc->base));
|
512
|
-
}
|
513
|
-
|
514
|
-
static void ssl_server_add_handshakers(grpc_exec_ctx *exec_ctx,
|
515
|
-
grpc_server_security_connector *sc,
|
516
|
-
grpc_handshake_manager *handshake_mgr) {
|
517
|
-
grpc_ssl_server_security_connector *c =
|
518
|
-
(grpc_ssl_server_security_connector *)sc;
|
519
|
-
// Instantiate TSI handshaker.
|
520
|
-
tsi_handshaker *tsi_hs = NULL;
|
521
|
-
tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
|
522
|
-
c->server_handshaker_factory, &tsi_hs);
|
523
|
-
if (result != TSI_OK) {
|
524
|
-
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
|
525
|
-
tsi_result_to_string(result));
|
526
|
-
return;
|
527
|
-
}
|
528
|
-
|
529
|
-
// Create handshakers.
|
530
|
-
grpc_handshake_manager_add(
|
531
|
-
handshake_mgr,
|
532
|
-
grpc_security_handshaker_create(
|
533
|
-
exec_ctx, tsi_create_adapter_handshaker(tsi_hs), &sc->base));
|
534
|
-
}
|
535
|
-
|
536
|
-
static int ssl_host_matches_name(const tsi_peer *peer, const char *peer_name) {
|
537
|
-
char *allocated_name = NULL;
|
538
|
-
int r;
|
539
|
-
|
540
|
-
if (strchr(peer_name, ':') != NULL) {
|
541
|
-
char *ignored_port;
|
542
|
-
gpr_split_host_port(peer_name, &allocated_name, &ignored_port);
|
543
|
-
gpr_free(ignored_port);
|
544
|
-
peer_name = allocated_name;
|
545
|
-
if (!peer_name) return 0;
|
546
|
-
}
|
547
|
-
r = tsi_ssl_peer_matches_name(peer, peer_name);
|
548
|
-
gpr_free(allocated_name);
|
549
|
-
return r;
|
550
|
-
}
|
551
|
-
|
552
|
-
grpc_auth_context *tsi_ssl_peer_to_auth_context(const tsi_peer *peer) {
|
553
|
-
size_t i;
|
554
|
-
grpc_auth_context *ctx = NULL;
|
555
|
-
const char *peer_identity_property_name = NULL;
|
556
|
-
|
557
|
-
/* The caller has checked the certificate type property. */
|
558
|
-
GPR_ASSERT(peer->property_count >= 1);
|
559
|
-
ctx = grpc_auth_context_create(NULL);
|
560
|
-
grpc_auth_context_add_cstring_property(
|
561
|
-
ctx, GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
|
562
|
-
GRPC_SSL_TRANSPORT_SECURITY_TYPE);
|
563
|
-
for (i = 0; i < peer->property_count; i++) {
|
564
|
-
const tsi_peer_property *prop = &peer->properties[i];
|
565
|
-
if (prop->name == NULL) continue;
|
566
|
-
if (strcmp(prop->name, TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY) == 0) {
|
567
|
-
/* If there is no subject alt name, have the CN as the identity. */
|
568
|
-
if (peer_identity_property_name == NULL) {
|
569
|
-
peer_identity_property_name = GRPC_X509_CN_PROPERTY_NAME;
|
570
|
-
}
|
571
|
-
grpc_auth_context_add_property(ctx, GRPC_X509_CN_PROPERTY_NAME,
|
572
|
-
prop->value.data, prop->value.length);
|
573
|
-
} else if (strcmp(prop->name,
|
574
|
-
TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY) == 0) {
|
575
|
-
peer_identity_property_name = GRPC_X509_SAN_PROPERTY_NAME;
|
576
|
-
grpc_auth_context_add_property(ctx, GRPC_X509_SAN_PROPERTY_NAME,
|
577
|
-
prop->value.data, prop->value.length);
|
578
|
-
} else if (strcmp(prop->name, TSI_X509_PEM_CERT_PROPERTY) == 0) {
|
579
|
-
grpc_auth_context_add_property(ctx, GRPC_X509_PEM_CERT_PROPERTY_NAME,
|
580
|
-
prop->value.data, prop->value.length);
|
581
|
-
}
|
582
|
-
}
|
583
|
-
if (peer_identity_property_name != NULL) {
|
584
|
-
GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
|
585
|
-
ctx, peer_identity_property_name) == 1);
|
586
|
-
}
|
587
|
-
return ctx;
|
588
|
-
}
|
589
|
-
|
590
|
-
static grpc_error *ssl_check_peer(grpc_security_connector *sc,
|
591
|
-
const char *peer_name, const tsi_peer *peer,
|
592
|
-
grpc_auth_context **auth_context) {
|
593
|
-
/* Check the ALPN. */
|
594
|
-
const tsi_peer_property *p =
|
595
|
-
tsi_peer_get_property_by_name(peer, TSI_SSL_ALPN_SELECTED_PROTOCOL);
|
596
|
-
if (p == NULL) {
|
597
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
598
|
-
"Cannot check peer: missing selected ALPN property.");
|
599
|
-
}
|
600
|
-
if (!grpc_chttp2_is_alpn_version_supported(p->value.data, p->value.length)) {
|
601
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
602
|
-
"Cannot check peer: invalid ALPN value.");
|
603
|
-
}
|
604
|
-
|
605
|
-
/* Check the peer name if specified. */
|
606
|
-
if (peer_name != NULL && !ssl_host_matches_name(peer, peer_name)) {
|
607
|
-
char *msg;
|
608
|
-
gpr_asprintf(&msg, "Peer name %s is not in peer certificate", peer_name);
|
609
|
-
grpc_error *error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(msg);
|
610
|
-
gpr_free(msg);
|
611
|
-
return error;
|
612
|
-
}
|
613
|
-
*auth_context = tsi_ssl_peer_to_auth_context(peer);
|
614
|
-
return GRPC_ERROR_NONE;
|
615
|
-
}
|
616
|
-
|
617
|
-
static void ssl_channel_check_peer(grpc_exec_ctx *exec_ctx,
|
618
|
-
grpc_security_connector *sc, tsi_peer peer,
|
619
|
-
grpc_auth_context **auth_context,
|
620
|
-
grpc_closure *on_peer_checked) {
|
621
|
-
grpc_ssl_channel_security_connector *c =
|
622
|
-
(grpc_ssl_channel_security_connector *)sc;
|
623
|
-
grpc_error *error = ssl_check_peer(sc, c->overridden_target_name != NULL
|
624
|
-
? c->overridden_target_name
|
625
|
-
: c->target_name,
|
626
|
-
&peer, auth_context);
|
627
|
-
GRPC_CLOSURE_SCHED(exec_ctx, on_peer_checked, error);
|
628
|
-
tsi_peer_destruct(&peer);
|
629
|
-
}
|
630
|
-
|
631
|
-
static void ssl_server_check_peer(grpc_exec_ctx *exec_ctx,
|
632
|
-
grpc_security_connector *sc, tsi_peer peer,
|
633
|
-
grpc_auth_context **auth_context,
|
634
|
-
grpc_closure *on_peer_checked) {
|
635
|
-
grpc_error *error = ssl_check_peer(sc, NULL, &peer, auth_context);
|
636
|
-
tsi_peer_destruct(&peer);
|
637
|
-
GRPC_CLOSURE_SCHED(exec_ctx, on_peer_checked, error);
|
638
|
-
}
|
639
|
-
|
640
|
-
static void add_shallow_auth_property_to_peer(tsi_peer *peer,
|
641
|
-
const grpc_auth_property *prop,
|
642
|
-
const char *tsi_prop_name) {
|
643
|
-
tsi_peer_property *tsi_prop = &peer->properties[peer->property_count++];
|
644
|
-
tsi_prop->name = (char *)tsi_prop_name;
|
645
|
-
tsi_prop->value.data = prop->value;
|
646
|
-
tsi_prop->value.length = prop->value_length;
|
647
|
-
}
|
648
|
-
|
649
|
-
tsi_peer tsi_shallow_peer_from_ssl_auth_context(
|
650
|
-
const grpc_auth_context *auth_context) {
|
651
|
-
size_t max_num_props = 0;
|
652
|
-
grpc_auth_property_iterator it;
|
653
|
-
const grpc_auth_property *prop;
|
654
|
-
tsi_peer peer;
|
655
|
-
memset(&peer, 0, sizeof(peer));
|
656
|
-
|
657
|
-
it = grpc_auth_context_property_iterator(auth_context);
|
658
|
-
while (grpc_auth_property_iterator_next(&it) != NULL) max_num_props++;
|
659
|
-
|
660
|
-
if (max_num_props > 0) {
|
661
|
-
peer.properties = gpr_malloc(max_num_props * sizeof(tsi_peer_property));
|
662
|
-
it = grpc_auth_context_property_iterator(auth_context);
|
663
|
-
while ((prop = grpc_auth_property_iterator_next(&it)) != NULL) {
|
664
|
-
if (strcmp(prop->name, GRPC_X509_SAN_PROPERTY_NAME) == 0) {
|
665
|
-
add_shallow_auth_property_to_peer(
|
666
|
-
&peer, prop, TSI_X509_SUBJECT_ALTERNATIVE_NAME_PEER_PROPERTY);
|
667
|
-
} else if (strcmp(prop->name, GRPC_X509_CN_PROPERTY_NAME) == 0) {
|
668
|
-
add_shallow_auth_property_to_peer(
|
669
|
-
&peer, prop, TSI_X509_SUBJECT_COMMON_NAME_PEER_PROPERTY);
|
670
|
-
} else if (strcmp(prop->name, GRPC_X509_PEM_CERT_PROPERTY_NAME) == 0) {
|
671
|
-
add_shallow_auth_property_to_peer(&peer, prop,
|
672
|
-
TSI_X509_PEM_CERT_PROPERTY);
|
673
|
-
}
|
674
|
-
}
|
675
|
-
}
|
676
|
-
return peer;
|
677
|
-
}
|
678
|
-
|
679
|
-
void tsi_shallow_peer_destruct(tsi_peer *peer) {
|
680
|
-
if (peer->properties != NULL) gpr_free(peer->properties);
|
681
|
-
}
|
682
|
-
|
683
|
-
static bool ssl_channel_check_call_host(grpc_exec_ctx *exec_ctx,
|
684
|
-
grpc_channel_security_connector *sc,
|
685
|
-
const char *host,
|
686
|
-
grpc_auth_context *auth_context,
|
687
|
-
grpc_closure *on_call_host_checked,
|
688
|
-
grpc_error **error) {
|
689
|
-
grpc_ssl_channel_security_connector *c =
|
690
|
-
(grpc_ssl_channel_security_connector *)sc;
|
691
|
-
grpc_security_status status = GRPC_SECURITY_ERROR;
|
692
|
-
tsi_peer peer = tsi_shallow_peer_from_ssl_auth_context(auth_context);
|
693
|
-
if (ssl_host_matches_name(&peer, host)) status = GRPC_SECURITY_OK;
|
694
|
-
/* If the target name was overridden, then the original target_name was
|
695
|
-
'checked' transitively during the previous peer check at the end of the
|
696
|
-
handshake. */
|
697
|
-
if (c->overridden_target_name != NULL && strcmp(host, c->target_name) == 0) {
|
698
|
-
status = GRPC_SECURITY_OK;
|
699
|
-
}
|
700
|
-
if (status != GRPC_SECURITY_OK) {
|
701
|
-
*error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
702
|
-
"call host does not match SSL server name");
|
703
|
-
}
|
704
|
-
tsi_shallow_peer_destruct(&peer);
|
705
|
-
return true;
|
706
|
-
}
|
707
|
-
|
708
|
-
static void ssl_channel_cancel_check_call_host(
|
709
|
-
grpc_exec_ctx *exec_ctx, grpc_channel_security_connector *sc,
|
710
|
-
grpc_closure *on_call_host_checked, grpc_error *error) {
|
711
|
-
GRPC_ERROR_UNREF(error);
|
712
|
-
}
|
713
|
-
|
714
|
-
static grpc_security_connector_vtable ssl_channel_vtable = {
|
715
|
-
ssl_channel_destroy, ssl_channel_check_peer};
|
716
|
-
|
717
|
-
static grpc_security_connector_vtable ssl_server_vtable = {
|
718
|
-
ssl_server_destroy, ssl_server_check_peer};
|
719
|
-
|
720
|
-
/* returns a NULL terminated slice. */
|
721
|
-
static grpc_slice compute_default_pem_root_certs_once(void) {
|
722
|
-
grpc_slice result = grpc_empty_slice();
|
723
|
-
|
724
|
-
/* First try to load the roots from the environment. */
|
725
|
-
char *default_root_certs_path =
|
726
|
-
gpr_getenv(GRPC_DEFAULT_SSL_ROOTS_FILE_PATH_ENV_VAR);
|
727
|
-
if (default_root_certs_path != NULL) {
|
728
|
-
GRPC_LOG_IF_ERROR("load_file",
|
729
|
-
grpc_load_file(default_root_certs_path, 1, &result));
|
730
|
-
gpr_free(default_root_certs_path);
|
731
|
-
}
|
732
|
-
|
733
|
-
/* Try overridden roots if needed. */
|
734
|
-
grpc_ssl_roots_override_result ovrd_res = GRPC_SSL_ROOTS_OVERRIDE_FAIL;
|
735
|
-
if (GRPC_SLICE_IS_EMPTY(result) && ssl_roots_override_cb != NULL) {
|
736
|
-
char *pem_root_certs = NULL;
|
737
|
-
ovrd_res = ssl_roots_override_cb(&pem_root_certs);
|
738
|
-
if (ovrd_res == GRPC_SSL_ROOTS_OVERRIDE_OK) {
|
739
|
-
GPR_ASSERT(pem_root_certs != NULL);
|
740
|
-
result = grpc_slice_from_copied_buffer(
|
741
|
-
pem_root_certs,
|
742
|
-
strlen(pem_root_certs) + 1); // NULL terminator.
|
743
|
-
}
|
744
|
-
gpr_free(pem_root_certs);
|
745
|
-
}
|
746
|
-
|
747
|
-
/* Fall back to installed certs if needed. */
|
748
|
-
if (GRPC_SLICE_IS_EMPTY(result) &&
|
749
|
-
ovrd_res != GRPC_SSL_ROOTS_OVERRIDE_FAIL_PERMANENTLY) {
|
750
|
-
GRPC_LOG_IF_ERROR("load_file",
|
751
|
-
grpc_load_file(installed_roots_path, 1, &result));
|
752
|
-
}
|
753
|
-
return result;
|
754
|
-
}
|
755
|
-
|
756
|
-
static grpc_slice default_pem_root_certs;
|
757
|
-
|
758
|
-
static void init_default_pem_root_certs(void) {
|
759
|
-
default_pem_root_certs = compute_default_pem_root_certs_once();
|
760
|
-
}
|
761
|
-
|
762
|
-
grpc_slice grpc_get_default_ssl_roots_for_testing(void) {
|
763
|
-
return compute_default_pem_root_certs_once();
|
764
|
-
}
|
765
|
-
|
766
|
-
static tsi_client_certificate_request_type
|
767
|
-
get_tsi_client_certificate_request_type(
|
768
|
-
grpc_ssl_client_certificate_request_type grpc_request_type) {
|
769
|
-
switch (grpc_request_type) {
|
770
|
-
case GRPC_SSL_DONT_REQUEST_CLIENT_CERTIFICATE:
|
771
|
-
return TSI_DONT_REQUEST_CLIENT_CERTIFICATE;
|
772
|
-
|
773
|
-
case GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
|
774
|
-
return TSI_REQUEST_CLIENT_CERTIFICATE_BUT_DONT_VERIFY;
|
775
|
-
|
776
|
-
case GRPC_SSL_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY:
|
777
|
-
return TSI_REQUEST_CLIENT_CERTIFICATE_AND_VERIFY;
|
778
|
-
|
779
|
-
case GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY:
|
780
|
-
return TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_BUT_DONT_VERIFY;
|
781
|
-
|
782
|
-
case GRPC_SSL_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY:
|
783
|
-
return TSI_REQUEST_AND_REQUIRE_CLIENT_CERTIFICATE_AND_VERIFY;
|
784
|
-
|
785
|
-
default:
|
786
|
-
// Is this a sane default
|
787
|
-
return TSI_DONT_REQUEST_CLIENT_CERTIFICATE;
|
788
|
-
}
|
789
|
-
}
|
790
|
-
|
791
|
-
const char *grpc_get_default_ssl_roots(void) {
|
792
|
-
/* TODO(jboeuf@google.com): Maybe revisit the approach which consists in
|
793
|
-
loading all the roots once for the lifetime of the process. */
|
794
|
-
static gpr_once once = GPR_ONCE_INIT;
|
795
|
-
gpr_once_init(&once, init_default_pem_root_certs);
|
796
|
-
return GRPC_SLICE_IS_EMPTY(default_pem_root_certs)
|
797
|
-
? NULL
|
798
|
-
: (const char *)GRPC_SLICE_START_PTR(default_pem_root_certs);
|
799
|
-
}
|
800
|
-
|
801
|
-
grpc_security_status grpc_ssl_channel_security_connector_create(
|
802
|
-
grpc_exec_ctx *exec_ctx, grpc_call_credentials *request_metadata_creds,
|
803
|
-
const grpc_ssl_config *config, const char *target_name,
|
804
|
-
const char *overridden_target_name, grpc_channel_security_connector **sc) {
|
805
|
-
size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions();
|
806
|
-
const char **alpn_protocol_strings =
|
807
|
-
gpr_malloc(sizeof(const char *) * num_alpn_protocols);
|
808
|
-
tsi_result result = TSI_OK;
|
809
|
-
grpc_ssl_channel_security_connector *c;
|
810
|
-
size_t i;
|
811
|
-
const char *pem_root_certs;
|
812
|
-
char *port;
|
813
|
-
|
814
|
-
for (i = 0; i < num_alpn_protocols; i++) {
|
815
|
-
alpn_protocol_strings[i] = grpc_chttp2_get_alpn_version_index(i);
|
816
|
-
}
|
817
|
-
|
818
|
-
if (config == NULL || target_name == NULL) {
|
819
|
-
gpr_log(GPR_ERROR, "An ssl channel needs a config and a target name.");
|
820
|
-
goto error;
|
821
|
-
}
|
822
|
-
if (config->pem_root_certs == NULL) {
|
823
|
-
pem_root_certs = grpc_get_default_ssl_roots();
|
824
|
-
if (pem_root_certs == NULL) {
|
825
|
-
gpr_log(GPR_ERROR, "Could not get default pem root certs.");
|
826
|
-
goto error;
|
827
|
-
}
|
828
|
-
} else {
|
829
|
-
pem_root_certs = config->pem_root_certs;
|
830
|
-
}
|
831
|
-
|
832
|
-
c = gpr_zalloc(sizeof(grpc_ssl_channel_security_connector));
|
833
|
-
|
834
|
-
gpr_ref_init(&c->base.base.refcount, 1);
|
835
|
-
c->base.base.vtable = &ssl_channel_vtable;
|
836
|
-
c->base.base.url_scheme = GRPC_SSL_URL_SCHEME;
|
837
|
-
c->base.request_metadata_creds =
|
838
|
-
grpc_call_credentials_ref(request_metadata_creds);
|
839
|
-
c->base.check_call_host = ssl_channel_check_call_host;
|
840
|
-
c->base.cancel_check_call_host = ssl_channel_cancel_check_call_host;
|
841
|
-
c->base.add_handshakers = ssl_channel_add_handshakers;
|
842
|
-
gpr_split_host_port(target_name, &c->target_name, &port);
|
843
|
-
gpr_free(port);
|
844
|
-
if (overridden_target_name != NULL) {
|
845
|
-
c->overridden_target_name = gpr_strdup(overridden_target_name);
|
846
|
-
}
|
847
|
-
|
848
|
-
bool has_key_cert_pair = config->pem_key_cert_pair.private_key != NULL &&
|
849
|
-
config->pem_key_cert_pair.cert_chain != NULL;
|
850
|
-
result = tsi_create_ssl_client_handshaker_factory(
|
851
|
-
has_key_cert_pair ? &config->pem_key_cert_pair : NULL, pem_root_certs,
|
852
|
-
ssl_cipher_suites(), alpn_protocol_strings, (uint16_t)num_alpn_protocols,
|
853
|
-
&c->client_handshaker_factory);
|
854
|
-
if (result != TSI_OK) {
|
855
|
-
gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
|
856
|
-
tsi_result_to_string(result));
|
857
|
-
ssl_channel_destroy(exec_ctx, &c->base.base);
|
858
|
-
*sc = NULL;
|
859
|
-
goto error;
|
860
|
-
}
|
861
|
-
*sc = &c->base;
|
862
|
-
gpr_free((void *)alpn_protocol_strings);
|
863
|
-
return GRPC_SECURITY_OK;
|
864
|
-
|
865
|
-
error:
|
866
|
-
gpr_free((void *)alpn_protocol_strings);
|
867
|
-
return GRPC_SECURITY_ERROR;
|
868
|
-
}
|
869
|
-
|
870
|
-
grpc_security_status grpc_ssl_server_security_connector_create(
|
871
|
-
grpc_exec_ctx *exec_ctx, const grpc_ssl_server_config *config,
|
872
|
-
grpc_server_security_connector **sc) {
|
873
|
-
size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions();
|
874
|
-
const char **alpn_protocol_strings =
|
875
|
-
gpr_malloc(sizeof(const char *) * num_alpn_protocols);
|
876
|
-
tsi_result result = TSI_OK;
|
877
|
-
grpc_ssl_server_security_connector *c;
|
878
|
-
size_t i;
|
879
|
-
|
880
|
-
for (i = 0; i < num_alpn_protocols; i++) {
|
881
|
-
alpn_protocol_strings[i] = grpc_chttp2_get_alpn_version_index(i);
|
882
|
-
}
|
883
|
-
|
884
|
-
if (config == NULL || config->num_key_cert_pairs == 0) {
|
885
|
-
gpr_log(GPR_ERROR, "An SSL server needs a key and a cert.");
|
886
|
-
goto error;
|
887
|
-
}
|
888
|
-
c = gpr_zalloc(sizeof(grpc_ssl_server_security_connector));
|
889
|
-
|
890
|
-
gpr_ref_init(&c->base.base.refcount, 1);
|
891
|
-
c->base.base.url_scheme = GRPC_SSL_URL_SCHEME;
|
892
|
-
c->base.base.vtable = &ssl_server_vtable;
|
893
|
-
result = tsi_create_ssl_server_handshaker_factory_ex(
|
894
|
-
config->pem_key_cert_pairs, config->num_key_cert_pairs,
|
895
|
-
config->pem_root_certs, get_tsi_client_certificate_request_type(
|
896
|
-
config->client_certificate_request),
|
897
|
-
ssl_cipher_suites(), alpn_protocol_strings, (uint16_t)num_alpn_protocols,
|
898
|
-
&c->server_handshaker_factory);
|
899
|
-
if (result != TSI_OK) {
|
900
|
-
gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
|
901
|
-
tsi_result_to_string(result));
|
902
|
-
ssl_server_destroy(exec_ctx, &c->base.base);
|
903
|
-
*sc = NULL;
|
904
|
-
goto error;
|
905
|
-
}
|
906
|
-
c->base.add_handshakers = ssl_server_add_handshakers;
|
907
|
-
*sc = &c->base;
|
908
|
-
gpr_free((void *)alpn_protocol_strings);
|
909
|
-
return GRPC_SECURITY_OK;
|
910
|
-
|
911
|
-
error:
|
912
|
-
gpr_free((void *)alpn_protocol_strings);
|
913
|
-
return GRPC_SECURITY_ERROR;
|
914
|
-
}
|