grpc 0.13.1 → 0.14.1.pre1
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 -828
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -20
- data/include/grpc/census.h +4 -4
- data/include/grpc/compression.h +6 -5
- data/include/grpc/grpc.h +31 -20
- data/include/grpc/grpc_security.h +17 -31
- data/include/grpc/grpc_security_constants.h +114 -0
- data/include/grpc/grpc_zookeeper.h +1 -1
- data/include/grpc/impl/codegen/alloc.h +1 -1
- data/include/grpc/impl/codegen/atm.h +1 -1
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
- data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
- data/include/grpc/impl/codegen/atm_win32.h +1 -1
- data/include/grpc/impl/codegen/byte_buffer.h +1 -1
- data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
- data/include/grpc/impl/codegen/grpc_types.h +20 -3
- data/include/grpc/impl/codegen/log.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +102 -17
- data/include/grpc/impl/codegen/propagation_bits.h +3 -3
- data/include/grpc/impl/codegen/slice.h +3 -3
- data/include/grpc/impl/codegen/slice_buffer.h +3 -3
- data/include/grpc/impl/codegen/status.h +1 -1
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/include/grpc/impl/codegen/sync_posix.h +1 -1
- data/include/grpc/impl/codegen/sync_win32.h +1 -1
- data/include/grpc/impl/codegen/time.h +3 -3
- data/include/grpc/status.h +1 -1
- data/include/grpc/support/alloc.h +1 -1
- data/include/grpc/support/atm.h +1 -1
- data/include/grpc/support/atm_gcc_atomic.h +4 -4
- data/include/grpc/support/atm_gcc_sync.h +1 -1
- data/include/grpc/support/atm_win32.h +1 -1
- data/include/grpc/support/avl.h +1 -1
- data/include/grpc/support/cmdline.h +1 -1
- data/include/grpc/support/cpu.h +1 -1
- data/include/grpc/support/histogram.h +1 -1
- data/include/grpc/support/host_port.h +1 -1
- data/include/grpc/support/log.h +1 -1
- data/include/grpc/support/log_win32.h +1 -1
- data/include/grpc/support/port_platform.h +1 -1
- data/include/grpc/support/slice.h +1 -1
- data/include/grpc/support/slice_buffer.h +1 -1
- data/include/grpc/support/string_util.h +3 -1
- data/include/grpc/support/subprocess.h +2 -2
- data/include/grpc/support/sync.h +1 -1
- data/include/grpc/support/sync_generic.h +1 -1
- data/include/grpc/support/sync_posix.h +1 -1
- data/include/grpc/support/sync_win32.h +1 -1
- data/include/grpc/support/thd.h +1 -1
- data/include/grpc/support/time.h +1 -1
- data/include/grpc/support/tls.h +1 -1
- data/include/grpc/support/tls_gcc.h +45 -1
- data/include/grpc/support/tls_msvc.h +3 -3
- data/include/grpc/support/tls_pthread.h +1 -1
- data/include/grpc/support/useful.h +1 -1
- data/src/boringssl/err_data.c +258 -252
- data/src/core/{census → ext/census}/aggregation.h +3 -3
- data/src/core/{statistics → ext/census}/census_interface.h +3 -3
- data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
- data/src/core/{census → ext/census}/context.c +2 -2
- data/src/core/{census → ext/census}/grpc_context.c +2 -2
- data/src/core/{census → ext/census}/grpc_filter.c +30 -16
- data/src/core/{census → ext/census}/grpc_filter.h +4 -4
- data/src/core/ext/census/grpc_plugin.c +82 -0
- data/src/core/{census → ext/census}/initialize.c +1 -1
- data/src/core/{census → ext/census}/mlog.c +2 -2
- data/src/core/{census → ext/census}/mlog.h +4 -4
- data/src/core/{census → ext/census}/operation.c +0 -0
- data/src/core/{census → ext/census}/placeholders.c +0 -0
- data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
- data/src/core/{census → ext/census}/tracing.c +0 -0
- data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
- data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
- data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
- data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
- data/src/core/ext/client_config/client_channel_factory.h +85 -0
- data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
- data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
- data/src/core/ext/client_config/client_config_plugin.c +95 -0
- data/src/core/{client_config → ext/client_config}/connector.c +2 -2
- data/src/core/{client_config → ext/client_config}/connector.h +7 -10
- data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
- data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
- data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
- data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
- data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
- data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
- data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
- data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
- data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
- data/src/core/ext/client_config/parse_address.c +137 -0
- data/src/core/ext/client_config/parse_address.h +56 -0
- data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
- data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
- data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
- data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
- data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
- data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
- data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
- data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
- data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
- data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
- data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
- data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
- data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
- data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
- data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
- data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
- data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
- data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
- data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
- data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
- data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
- data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
- data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
- data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
- data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
- data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
- data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
- data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
- data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
- data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
- data/src/core/{channel → lib/channel}/channel_args.c +3 -15
- data/src/core/{channel → lib/channel}/channel_args.h +11 -15
- data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
- data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
- data/src/core/lib/channel/channel_stack_builder.c +277 -0
- data/src/core/lib/channel/channel_stack_builder.h +161 -0
- data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
- data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
- data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
- data/src/core/lib/channel/connected_channel.h +42 -0
- data/src/core/{channel → lib/channel}/context.h +3 -3
- data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
- data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
- data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
- data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
- data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
- data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
- data/src/core/{compression → lib/compression}/message_compress.c +1 -1
- data/src/core/{compression → lib/compression}/message_compress.h +3 -3
- data/src/core/{debug → lib/debug}/trace.c +2 -2
- data/src/core/{debug → lib/debug}/trace.h +3 -3
- data/src/core/{httpcli → lib/http}/format_request.c +8 -8
- data/src/core/{httpcli → lib/http}/format_request.h +4 -4
- data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
- data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
- data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
- data/src/core/lib/http/parser.c +341 -0
- data/src/core/lib/http/parser.h +119 -0
- data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
- data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
- data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
- data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
- data/src/core/lib/iomgr/ev_posix.c +164 -0
- data/src/core/lib/iomgr/ev_posix.h +158 -0
- data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
- data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
- data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
- data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
- data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
- data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
- data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
- data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
- data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
- data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
- data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
- data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
- data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
- data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
- data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
- data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
- data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
- data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
- data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
- data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
- data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
- data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
- data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
- data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
- data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
- data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
- data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
- data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
- data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
- data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
- data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
- data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
- data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
- data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
- data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
- data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
- data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
- data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
- data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
- data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
- data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
- data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
- data/src/core/{json → lib/json}/json.c +1 -1
- data/src/core/{json → lib/json}/json.h +4 -4
- data/src/core/{json → lib/json}/json_common.h +3 -3
- data/src/core/{json → lib/json}/json_reader.c +16 -4
- data/src/core/{json → lib/json}/json_reader.h +4 -4
- data/src/core/{json → lib/json}/json_string.c +4 -4
- data/src/core/{json → lib/json}/json_writer.c +1 -1
- data/src/core/{json → lib/json}/json_writer.h +4 -4
- data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
- data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
- data/src/core/{profiling → lib/profiling}/timers.h +3 -3
- data/src/core/{security → lib/security}/auth_filters.h +4 -4
- data/src/core/{security → lib/security}/b64.c +2 -2
- data/src/core/{security → lib/security}/b64.h +4 -4
- data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
- data/src/core/{security → lib/security}/credentials.c +42 -26
- data/src/core/{security → lib/security}/credentials.h +11 -10
- data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
- data/src/core/{security → lib/security}/credentials_posix.c +3 -3
- data/src/core/{security → lib/security}/credentials_win32.c +3 -3
- data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
- data/src/core/{security → lib/security}/handshake.c +4 -4
- data/src/core/{security → lib/security}/handshake.h +6 -6
- data/src/core/{security → lib/security}/json_token.c +4 -4
- data/src/core/{security → lib/security}/json_token.h +4 -4
- data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
- data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
- data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
- data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
- data/src/core/{security → lib/security}/security_connector.c +53 -21
- data/src/core/{security → lib/security}/security_connector.h +8 -8
- data/src/core/{security → lib/security}/security_context.c +5 -5
- data/src/core/{security → lib/security}/security_context.h +5 -5
- data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
- data/src/core/{support → lib/support}/alloc.c +5 -3
- data/src/core/{support → lib/support}/avl.c +1 -1
- data/src/core/lib/support/backoff.c +76 -0
- data/src/core/lib/support/backoff.h +68 -0
- data/src/core/{support → lib/support}/block_annotate.h +3 -3
- data/src/core/{support → lib/support}/cmdline.c +1 -1
- data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
- data/src/core/{support → lib/support}/cpu_linux.c +2 -2
- data/src/core/{support → lib/support}/cpu_posix.c +2 -2
- data/src/core/{support → lib/support}/cpu_windows.c +0 -0
- data/src/core/{support → lib/support}/env.h +3 -3
- data/src/core/{support → lib/support}/env_linux.c +3 -3
- data/src/core/{support → lib/support}/env_posix.c +2 -2
- data/src/core/{support → lib/support}/env_win32.c +27 -21
- data/src/core/{support → lib/support}/histogram.c +1 -1
- data/src/core/{support → lib/support}/host_port.c +1 -1
- data/src/core/{support → lib/support}/load_file.c +4 -4
- data/src/core/{support → lib/support}/load_file.h +4 -4
- data/src/core/{support → lib/support}/log.c +33 -0
- data/src/core/{support → lib/support}/log_android.c +2 -2
- data/src/core/{support → lib/support}/log_linux.c +6 -5
- data/src/core/{support → lib/support}/log_posix.c +3 -3
- data/src/core/{support → lib/support}/log_win32.c +8 -22
- data/src/core/{support → lib/support}/murmur_hash.c +1 -1
- data/src/core/{support → lib/support}/murmur_hash.h +3 -3
- data/src/core/{support → lib/support}/slice.c +0 -0
- data/src/core/{support → lib/support}/slice_buffer.c +0 -0
- data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
- data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
- data/src/core/{support → lib/support}/string.c +1 -1
- data/src/core/{support → lib/support}/string.h +4 -4
- data/src/core/{support → lib/support}/string_posix.c +1 -1
- data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
- data/src/core/lib/support/string_win32.c +83 -0
- data/src/core/{support → lib/support}/string_win32.h +3 -3
- data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
- data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
- data/src/core/{support → lib/support}/sync.c +2 -2
- data/src/core/{support → lib/support}/sync_posix.c +3 -3
- data/src/core/{support → lib/support}/sync_win32.c +1 -1
- data/src/core/{support → lib/support}/thd.c +0 -0
- data/src/core/{support → lib/support}/thd_internal.h +3 -3
- data/src/core/{support → lib/support}/thd_posix.c +4 -3
- data/src/core/{support → lib/support}/thd_win32.c +1 -1
- data/src/core/{support → lib/support}/time.c +2 -2
- data/src/core/{support → lib/support}/time_posix.c +12 -6
- data/src/core/{support → lib/support}/time_precise.c +0 -0
- data/src/core/{support → lib/support}/time_precise.h +3 -3
- data/src/core/{support → lib/support}/time_win32.c +7 -7
- data/src/core/{support → lib/support}/tls_pthread.c +0 -0
- data/src/core/{support → lib/support}/tmpfile.h +4 -4
- data/src/core/lib/support/tmpfile_msys.c +73 -0
- data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
- data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
- data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
- data/src/core/{surface → lib/surface}/alarm.c +3 -3
- data/src/core/{surface → lib/surface}/api_trace.c +1 -1
- data/src/core/{surface → lib/surface}/api_trace.h +4 -4
- data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
- data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
- data/src/core/{surface → lib/surface}/call.c +145 -73
- data/src/core/{surface → lib/surface}/call.h +14 -7
- data/src/core/{surface → lib/surface}/call_details.c +1 -1
- data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
- data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
- data/src/core/{surface → lib/surface}/channel.c +33 -34
- data/src/core/{surface → lib/surface}/channel.h +9 -9
- data/src/core/lib/surface/channel_init.c +140 -0
- data/src/core/lib/surface/channel_init.h +87 -0
- data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
- data/src/core/lib/surface/channel_stack_type.c +54 -0
- data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
- data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
- data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
- data/src/core/{surface → lib/surface}/event_string.c +2 -2
- data/src/core/{surface → lib/surface}/event_string.h +3 -3
- data/src/core/lib/surface/init.c +217 -0
- data/src/core/{surface → lib/surface}/init.h +4 -3
- data/src/core/lib/surface/init_secure.c +89 -0
- data/src/core/{surface → lib/surface}/lame_client.c +31 -19
- data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
- data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
- data/src/core/{surface → lib/surface}/server.c +208 -183
- data/src/core/{surface → lib/surface}/server.h +6 -11
- data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
- data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
- data/src/core/{surface → lib/surface}/version.c +2 -2
- data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
- data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
- data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
- data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
- data/src/core/{transport → lib/transport}/metadata.c +71 -19
- data/src/core/{transport → lib/transport}/metadata.h +11 -4
- data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
- data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
- data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
- data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
- data/src/core/{transport → lib/transport}/transport.c +25 -5
- data/src/core/{transport → lib/transport}/transport.h +41 -16
- data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
- data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
- data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
- data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
- data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
- data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
- data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
- data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
- data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
- data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
- data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
- data/src/ruby/ext/grpc/extconf.rb +14 -20
- data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
- data/src/ruby/ext/grpc/rb_call.c +37 -4
- data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
- data/src/ruby/ext/grpc/rb_channel.c +2 -3
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
- data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
- data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
- data/src/ruby/ext/grpc/rb_grpc.c +4 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
- data/src/ruby/ext/grpc/rb_server.c +2 -3
- data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
- data/src/ruby/ext/grpc/rb_signal.c +70 -0
- data/src/ruby/ext/grpc/rb_signal.h +39 -0
- data/src/ruby/lib/grpc.rb +21 -13
- data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
- data/src/ruby/lib/grpc/errors.rb +2 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
- data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
- data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
- data/src/ruby/lib/grpc/generic/service.rb +5 -15
- data/src/ruby/lib/grpc/grpc.rb +3 -3
- data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
- data/src/ruby/lib/grpc/version.rb +2 -2
- data/src/ruby/pb/generate_proto_ruby.sh +9 -2
- data/src/ruby/pb/grpc/health/checker.rb +1 -1
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
- data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
- data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
- data/src/ruby/pb/test/client.rb +12 -23
- data/src/ruby/pb/test/server.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
- data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
- data/src/ruby/spec/generic/service_spec.rb +0 -69
- data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
- data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
- data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
- data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
- data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
- data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
- data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
- data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
- data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
- data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
- data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
- data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
- data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
- data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
- data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
- data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
- data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
- data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
- data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
- data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
- data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
- data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
- data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
- data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
- data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
- data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
- data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
- data/third_party/boringssl/crypto/bio/buffer.c +3 -3
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
- data/third_party/boringssl/crypto/bn/bn.c +1 -1
- data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
- data/third_party/boringssl/crypto/bn/convert.c +9 -4
- data/third_party/boringssl/crypto/bn/div.c +0 -20
- data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
- data/third_party/boringssl/crypto/bn/generic.c +6 -242
- data/third_party/boringssl/crypto/bn/internal.h +9 -70
- data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
- data/third_party/boringssl/crypto/bn/mul.c +6 -26
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
- data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
- data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
- data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
- data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
- data/third_party/boringssl/crypto/conf/conf.c +9 -0
- data/third_party/boringssl/crypto/cpu-intel.c +1 -1
- data/third_party/boringssl/crypto/crypto.c +2 -0
- data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
- data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
- data/third_party/boringssl/crypto/dh/check.c +32 -10
- data/third_party/boringssl/crypto/dh/dh.c +1 -1
- data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
- data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
- data/third_party/boringssl/crypto/ec/ec.c +45 -31
- data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
- data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
- data/third_party/boringssl/crypto/ec/internal.h +1 -19
- data/third_party/boringssl/crypto/ec/oct.c +12 -0
- data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
- data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
- data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
- data/third_party/boringssl/crypto/ec/simple.c +0 -76
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
- data/third_party/boringssl/crypto/evp/evp.c +4 -3
- data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
- data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
- data/third_party/boringssl/crypto/evp/internal.h +28 -27
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
- data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
- data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
- data/third_party/boringssl/crypto/internal.h +16 -1
- data/third_party/boringssl/crypto/mem.c +2 -2
- data/third_party/boringssl/crypto/modes/ctr.c +2 -1
- data/third_party/boringssl/crypto/modes/gcm.c +5 -3
- data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
- data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
- data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
- data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
- data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
- data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
- data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
- data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
- data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
- data/third_party/boringssl/crypto/rand/rand.c +2 -0
- data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
- data/third_party/boringssl/crypto/rsa/internal.h +1 -9
- data/third_party/boringssl/crypto/rsa/padding.c +73 -77
- data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
- data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
- data/third_party/boringssl/crypto/thread_win.c +15 -13
- data/third_party/boringssl/crypto/time_support.c +0 -6
- data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
- data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
- data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
- data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
- data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
- data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
- data/third_party/boringssl/crypto/x509/by_file.c +186 -206
- data/third_party/boringssl/crypto/x509/charmap.h +11 -11
- data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
- data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
- data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
- data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
- data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
- data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
- data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
- data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
- data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
- data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
- data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
- data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
- data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
- data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
- data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
- data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
- data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
- data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
- data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
- data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
- data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
- data/third_party/boringssl/crypto/x509/x509name.c +280 -275
- data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
- data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
- data/third_party/boringssl/crypto/x509/x509type.c +58 -60
- data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
- data/third_party/boringssl/crypto/x509/x_all.c +282 -328
- data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
- data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
- data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
- data/third_party/boringssl/crypto/x509/x_info.c +30 -27
- data/third_party/boringssl/crypto/x509/x_name.c +387 -388
- data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
- data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
- data/third_party/boringssl/crypto/x509/x_req.c +30 -33
- data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
- data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
- data/third_party/boringssl/crypto/x509/x_val.c +2 -2
- data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
- data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
- data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
- data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
- data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
- data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
- data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
- data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
- data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
- data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
- data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
- data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
- data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
- data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
- data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
- data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
- data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
- data/third_party/boringssl/include/openssl/asn1.h +40 -38
- data/third_party/boringssl/include/openssl/base.h +10 -1
- data/third_party/boringssl/include/openssl/bio.h +10 -11
- data/third_party/boringssl/include/openssl/bn.h +12 -9
- data/third_party/boringssl/include/openssl/buf.h +1 -1
- data/third_party/boringssl/include/openssl/bytestring.h +29 -0
- data/third_party/boringssl/include/openssl/conf.h +25 -0
- data/third_party/boringssl/include/openssl/crypto.h +6 -1
- data/third_party/boringssl/include/openssl/curve25519.h +6 -3
- data/third_party/boringssl/include/openssl/dh.h +7 -3
- data/third_party/boringssl/include/openssl/dsa.h +108 -51
- data/third_party/boringssl/include/openssl/ec.h +46 -21
- data/third_party/boringssl/include/openssl/ec_key.h +78 -42
- data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -2
- data/third_party/boringssl/include/openssl/evp.h +120 -37
- data/third_party/boringssl/include/openssl/mem.h +4 -13
- data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
- data/third_party/boringssl/include/openssl/pem.h +0 -9
- data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
- data/third_party/boringssl/include/openssl/rand.h +3 -0
- data/third_party/boringssl/include/openssl/rsa.h +42 -42
- data/third_party/boringssl/include/openssl/ssl.h +115 -41
- data/third_party/boringssl/include/openssl/stack.h +0 -3
- data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
- data/third_party/boringssl/include/openssl/tls1.h +1 -1
- data/third_party/boringssl/include/openssl/x509.h +0 -2
- data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
- data/third_party/boringssl/ssl/d1_both.c +102 -101
- data/third_party/boringssl/ssl/d1_clnt.c +145 -150
- data/third_party/boringssl/ssl/d1_lib.c +63 -62
- data/third_party/boringssl/ssl/d1_pkt.c +73 -71
- data/third_party/boringssl/ssl/d1_srvr.c +116 -125
- data/third_party/boringssl/ssl/dtls_record.c +3 -3
- data/third_party/boringssl/ssl/internal.h +210 -208
- data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
- data/third_party/boringssl/ssl/s3_both.c +116 -130
- data/third_party/boringssl/ssl/s3_clnt.c +589 -740
- data/third_party/boringssl/ssl/s3_enc.c +52 -151
- data/third_party/boringssl/ssl/s3_lib.c +70 -76
- data/third_party/boringssl/ssl/s3_pkt.c +105 -144
- data/third_party/boringssl/ssl/s3_srvr.c +542 -806
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
- data/third_party/boringssl/ssl/ssl_cert.c +2 -2
- data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
- data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
- data/third_party/boringssl/ssl/ssl_lib.c +260 -221
- data/third_party/boringssl/ssl/ssl_session.c +17 -17
- data/third_party/boringssl/ssl/t1_enc.c +128 -273
- data/third_party/boringssl/ssl/t1_lib.c +134 -258
- data/third_party/boringssl/ssl/test/test_config.h +2 -0
- data/third_party/boringssl/ssl/tls_record.c +52 -15
- metadata +385 -359
- data/src/core/channel/client_uchannel.c +0 -243
- data/src/core/channel/client_uchannel.h +0 -60
- data/src/core/channel/connected_channel.h +0 -51
- data/src/core/client_config/lb_policies/pick_first.h +0 -43
- data/src/core/client_config/resolvers/dns_resolver.h +0 -42
- data/src/core/client_config/subchannel_factory.h +0 -66
- data/src/core/httpcli/parser.c +0 -211
- data/src/core/iomgr/fd_posix.c +0 -451
- data/src/core/iomgr/fd_posix.h +0 -192
- data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
- data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
- data/src/core/iomgr/pollset_posix.c +0 -633
- data/src/core/iomgr/pollset_posix.h +0 -153
- data/src/core/iomgr/pollset_set_posix.c +0 -202
- data/src/core/iomgr/pollset_set_posix.h +0 -45
- data/src/core/surface/init.c +0 -174
- data/src/core/surface/init_secure.c +0 -42
- data/src/core/surface/server_create.c +0 -48
- data/src/core/transport/chttp2/huffsyms.c +0 -297
- data/src/ruby/bin/grpc_ruby_interop_client +0 -33
- data/src/ruby/bin/grpc_ruby_interop_server +0 -33
- data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -31,10 +31,11 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#ifndef
|
35
|
-
#define
|
34
|
+
#ifndef GRPC_CORE_LIB_SURFACE_INIT_H
|
35
|
+
#define GRPC_CORE_LIB_SURFACE_INIT_H
|
36
36
|
|
37
|
+
void grpc_register_security_filters(void);
|
37
38
|
void grpc_security_pre_init(void);
|
38
39
|
int grpc_is_initialized(void);
|
39
40
|
|
40
|
-
#endif /*
|
41
|
+
#endif /* GRPC_CORE_LIB_SURFACE_INIT_H */
|
@@ -0,0 +1,89 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include "src/core/lib/surface/init.h"
|
35
|
+
|
36
|
+
#include <limits.h>
|
37
|
+
#include <string.h>
|
38
|
+
|
39
|
+
#include "src/core/lib/debug/trace.h"
|
40
|
+
#include "src/core/lib/security/auth_filters.h"
|
41
|
+
#include "src/core/lib/security/credentials.h"
|
42
|
+
#include "src/core/lib/security/secure_endpoint.h"
|
43
|
+
#include "src/core/lib/security/security_connector.h"
|
44
|
+
#include "src/core/lib/surface/channel_init.h"
|
45
|
+
#include "src/core/lib/tsi/transport_security_interface.h"
|
46
|
+
|
47
|
+
void grpc_security_pre_init(void) {
|
48
|
+
grpc_register_tracer("secure_endpoint", &grpc_trace_secure_endpoint);
|
49
|
+
grpc_register_tracer("transport_security", &tsi_tracing_enabled);
|
50
|
+
}
|
51
|
+
|
52
|
+
static bool maybe_prepend_client_auth_filter(
|
53
|
+
grpc_channel_stack_builder *builder, void *arg) {
|
54
|
+
const grpc_channel_args *args =
|
55
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
56
|
+
if (args) {
|
57
|
+
for (size_t i = 0; i < args->num_args; i++) {
|
58
|
+
if (0 == strcmp(GRPC_SECURITY_CONNECTOR_ARG, args->args[i].key)) {
|
59
|
+
return grpc_channel_stack_builder_prepend_filter(
|
60
|
+
builder, &grpc_client_auth_filter, NULL, NULL);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
return true;
|
65
|
+
}
|
66
|
+
|
67
|
+
static bool maybe_prepend_server_auth_filter(
|
68
|
+
grpc_channel_stack_builder *builder, void *arg) {
|
69
|
+
const grpc_channel_args *args =
|
70
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
71
|
+
if (args) {
|
72
|
+
for (size_t i = 0; i < args->num_args; i++) {
|
73
|
+
if (0 == strcmp(GRPC_SERVER_CREDENTIALS_ARG, args->args[i].key)) {
|
74
|
+
return grpc_channel_stack_builder_prepend_filter(
|
75
|
+
builder, &grpc_server_auth_filter, NULL, NULL);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
}
|
79
|
+
return true;
|
80
|
+
}
|
81
|
+
|
82
|
+
void grpc_register_security_filters(void) {
|
83
|
+
grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL, INT_MAX,
|
84
|
+
maybe_prepend_client_auth_filter, NULL);
|
85
|
+
grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX,
|
86
|
+
maybe_prepend_client_auth_filter, NULL);
|
87
|
+
grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
|
88
|
+
maybe_prepend_server_auth_filter, NULL);
|
89
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright 2015
|
3
|
+
* Copyright 2015, Google Inc.
|
4
4
|
* All rights reserved.
|
5
5
|
*
|
6
6
|
* Redistribution and use in source and binary forms, with or without
|
@@ -31,17 +31,19 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
+
#include "src/core/lib/surface/lame_client.h"
|
35
|
+
|
34
36
|
#include <grpc/grpc.h>
|
35
37
|
|
36
38
|
#include <string.h>
|
37
39
|
|
38
|
-
#include "src/core/channel/channel_stack.h"
|
39
|
-
#include "src/core/support/string.h"
|
40
|
-
#include "src/core/surface/api_trace.h"
|
41
|
-
#include "src/core/surface/channel.h"
|
42
|
-
#include "src/core/surface/call.h"
|
43
40
|
#include <grpc/support/alloc.h>
|
44
41
|
#include <grpc/support/log.h>
|
42
|
+
#include "src/core/lib/channel/channel_stack.h"
|
43
|
+
#include "src/core/lib/support/string.h"
|
44
|
+
#include "src/core/lib/surface/api_trace.h"
|
45
|
+
#include "src/core/lib/surface/call.h"
|
46
|
+
#include "src/core/lib/surface/channel.h"
|
45
47
|
|
46
48
|
typedef struct {
|
47
49
|
grpc_linked_mdelem status;
|
@@ -97,13 +99,18 @@ static void lame_start_transport_op(grpc_exec_ctx *exec_ctx,
|
|
97
99
|
if (op->on_consumed != NULL) {
|
98
100
|
op->on_consumed->cb(exec_ctx, op->on_consumed->cb_arg, 1);
|
99
101
|
}
|
102
|
+
if (op->send_ping != NULL) {
|
103
|
+
op->send_ping->cb(exec_ctx, op->send_ping->cb_arg, 0);
|
104
|
+
}
|
100
105
|
}
|
101
106
|
|
102
107
|
static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
103
108
|
grpc_call_element_args *args) {}
|
104
109
|
|
105
|
-
static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
|
106
|
-
|
110
|
+
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
111
|
+
void *and_free_memory) {
|
112
|
+
gpr_free(and_free_memory);
|
113
|
+
}
|
107
114
|
|
108
115
|
static void init_channel_elem(grpc_exec_ctx *exec_ctx,
|
109
116
|
grpc_channel_element *elem,
|
@@ -115,11 +122,18 @@ static void init_channel_elem(grpc_exec_ctx *exec_ctx,
|
|
115
122
|
static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
|
116
123
|
grpc_channel_element *elem) {}
|
117
124
|
|
118
|
-
|
119
|
-
lame_start_transport_stream_op,
|
120
|
-
|
121
|
-
sizeof(
|
122
|
-
|
125
|
+
const grpc_channel_filter grpc_lame_filter = {
|
126
|
+
lame_start_transport_stream_op,
|
127
|
+
lame_start_transport_op,
|
128
|
+
sizeof(call_data),
|
129
|
+
init_call_elem,
|
130
|
+
grpc_call_stack_ignore_set_pollset,
|
131
|
+
destroy_call_elem,
|
132
|
+
sizeof(channel_data),
|
133
|
+
init_channel_elem,
|
134
|
+
destroy_channel_elem,
|
135
|
+
lame_get_peer,
|
136
|
+
"lame-client",
|
123
137
|
};
|
124
138
|
|
125
139
|
#define CHANNEL_STACK_FROM_CHANNEL(c) ((grpc_channel_stack *)((c) + 1))
|
@@ -127,19 +141,17 @@ static const grpc_channel_filter lame_filter = {
|
|
127
141
|
grpc_channel *grpc_lame_client_channel_create(const char *target,
|
128
142
|
grpc_status_code error_code,
|
129
143
|
const char *error_message) {
|
130
|
-
|
144
|
+
grpc_exec_ctx exec_ctx = GRPC_EXEC_CTX_INIT;
|
131
145
|
grpc_channel_element *elem;
|
132
146
|
channel_data *chand;
|
133
|
-
|
134
|
-
|
135
|
-
channel =
|
136
|
-
grpc_channel_create_from_filters(&exec_ctx, target, filters, 1, NULL, 1);
|
147
|
+
grpc_channel *channel = grpc_channel_create(&exec_ctx, target, NULL,
|
148
|
+
GRPC_CLIENT_LAME_CHANNEL, NULL);
|
137
149
|
elem = grpc_channel_stack_element(grpc_channel_get_channel_stack(channel), 0);
|
138
150
|
GRPC_API_TRACE(
|
139
151
|
"grpc_lame_client_channel_create(target=%s, error_code=%d, "
|
140
152
|
"error_message=%s)",
|
141
153
|
3, (target, (int)error_code, error_message));
|
142
|
-
GPR_ASSERT(elem->filter == &
|
154
|
+
GPR_ASSERT(elem->filter == &grpc_lame_filter);
|
143
155
|
chand = (channel_data *)elem->channel_data;
|
144
156
|
chand->error_code = error_code;
|
145
157
|
chand->error_message = error_message;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright
|
3
|
+
* Copyright 2016, Google Inc.
|
4
4
|
* All rights reserved.
|
5
5
|
*
|
6
6
|
* Redistribution and use in source and binary forms, with or without
|
@@ -31,9 +31,11 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#ifndef
|
35
|
-
#define
|
34
|
+
#ifndef GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H
|
35
|
+
#define GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H
|
36
36
|
|
37
|
-
#include "src/core/
|
37
|
+
#include "src/core/lib/channel/channel_stack.h"
|
38
38
|
|
39
|
-
|
39
|
+
extern const grpc_channel_filter grpc_lame_filter;
|
40
|
+
|
41
|
+
#endif /* GRPC_CORE_LIB_SURFACE_LAME_CLIENT_H */
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
*
|
3
|
-
* Copyright 2015
|
3
|
+
* Copyright 2015, Google Inc.
|
4
4
|
* All rights reserved.
|
5
5
|
*
|
6
6
|
* Redistribution and use in source and binary forms, with or without
|
@@ -31,7 +31,7 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#include "src/core/surface/server.h"
|
34
|
+
#include "src/core/lib/surface/server.h"
|
35
35
|
|
36
36
|
#include <limits.h>
|
37
37
|
#include <stdlib.h>
|
@@ -42,19 +42,18 @@
|
|
42
42
|
#include <grpc/support/string_util.h>
|
43
43
|
#include <grpc/support/useful.h>
|
44
44
|
|
45
|
-
#include "src/core/
|
46
|
-
#include "src/core/channel/
|
47
|
-
#include "src/core/
|
48
|
-
#include "src/core/
|
49
|
-
#include "src/core/support/
|
50
|
-
#include "src/core/
|
51
|
-
#include "src/core/surface/
|
52
|
-
#include "src/core/surface/
|
53
|
-
#include "src/core/surface/
|
54
|
-
#include "src/core/surface/
|
55
|
-
#include "src/core/
|
56
|
-
#include "src/core/transport/
|
57
|
-
#include "src/core/transport/static_metadata.h"
|
45
|
+
#include "src/core/lib/channel/channel_args.h"
|
46
|
+
#include "src/core/lib/channel/connected_channel.h"
|
47
|
+
#include "src/core/lib/iomgr/iomgr.h"
|
48
|
+
#include "src/core/lib/support/stack_lockfree.h"
|
49
|
+
#include "src/core/lib/support/string.h"
|
50
|
+
#include "src/core/lib/surface/api_trace.h"
|
51
|
+
#include "src/core/lib/surface/call.h"
|
52
|
+
#include "src/core/lib/surface/channel.h"
|
53
|
+
#include "src/core/lib/surface/completion_queue.h"
|
54
|
+
#include "src/core/lib/surface/init.h"
|
55
|
+
#include "src/core/lib/transport/metadata.h"
|
56
|
+
#include "src/core/lib/transport/static_metadata.h"
|
58
57
|
|
59
58
|
typedef struct listener {
|
60
59
|
void *arg;
|
@@ -96,11 +95,11 @@ typedef struct requested_call {
|
|
96
95
|
grpc_byte_buffer **optional_payload;
|
97
96
|
} registered;
|
98
97
|
} data;
|
99
|
-
grpc_closure publish;
|
100
98
|
} requested_call;
|
101
99
|
|
102
100
|
typedef struct channel_registered_method {
|
103
101
|
registered_method *server_registered_method;
|
102
|
+
uint32_t flags;
|
104
103
|
grpc_mdstr *method;
|
105
104
|
grpc_mdstr *host;
|
106
105
|
} channel_registered_method;
|
@@ -153,17 +152,24 @@ struct call_data {
|
|
153
152
|
grpc_completion_queue *cq_new;
|
154
153
|
|
155
154
|
grpc_metadata_batch *recv_initial_metadata;
|
155
|
+
bool recv_idempotent_request;
|
156
156
|
grpc_metadata_array initial_metadata;
|
157
157
|
|
158
|
+
request_matcher *request_matcher;
|
159
|
+
grpc_byte_buffer *payload;
|
160
|
+
|
158
161
|
grpc_closure got_initial_metadata;
|
159
162
|
grpc_closure server_on_recv_initial_metadata;
|
160
163
|
grpc_closure kill_zombie_closure;
|
161
164
|
grpc_closure *on_done_recv_initial_metadata;
|
162
165
|
|
166
|
+
grpc_closure publish;
|
167
|
+
|
163
168
|
call_data *pending_next;
|
164
169
|
};
|
165
170
|
|
166
171
|
struct request_matcher {
|
172
|
+
grpc_server *server;
|
167
173
|
call_data *pending_head;
|
168
174
|
call_data *pending_tail;
|
169
175
|
gpr_stack_lockfree *requests;
|
@@ -172,6 +178,8 @@ struct request_matcher {
|
|
172
178
|
struct registered_method {
|
173
179
|
char *method;
|
174
180
|
char *host;
|
181
|
+
grpc_server_register_method_payload_handling payload_handling;
|
182
|
+
uint32_t flags;
|
175
183
|
request_matcher request_matcher;
|
176
184
|
registered_method *next;
|
177
185
|
};
|
@@ -182,8 +190,6 @@ typedef struct {
|
|
182
190
|
} channel_broadcaster;
|
183
191
|
|
184
192
|
struct grpc_server {
|
185
|
-
size_t channel_filter_count;
|
186
|
-
grpc_channel_filter const **channel_filters;
|
187
193
|
grpc_channel_args *channel_args;
|
188
194
|
|
189
195
|
grpc_completion_queue **cqs;
|
@@ -226,8 +232,7 @@ struct grpc_server {
|
|
226
232
|
#define SERVER_FROM_CALL_ELEM(elem) \
|
227
233
|
(((channel_data *)(elem)->channel_data)->server)
|
228
234
|
|
229
|
-
static void
|
230
|
-
call_data *calld, requested_call *rc);
|
235
|
+
static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *calld, bool success);
|
231
236
|
static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
|
232
237
|
requested_call *rc);
|
233
238
|
/* Before calling maybe_finish_shutdown, we must hold mu_global and not
|
@@ -303,8 +308,10 @@ static void channel_broadcaster_shutdown(grpc_exec_ctx *exec_ctx,
|
|
303
308
|
* request_matcher
|
304
309
|
*/
|
305
310
|
|
306
|
-
static void request_matcher_init(request_matcher *rm, size_t entries
|
311
|
+
static void request_matcher_init(request_matcher *rm, size_t entries,
|
312
|
+
grpc_server *server) {
|
307
313
|
memset(rm, 0, sizeof(*rm));
|
314
|
+
rm->server = server;
|
308
315
|
rm->requests = gpr_stack_lockfree_create(entries);
|
309
316
|
}
|
310
317
|
|
@@ -355,7 +362,6 @@ static void server_delete(grpc_exec_ctx *exec_ctx, grpc_server *server) {
|
|
355
362
|
grpc_channel_args_destroy(server->channel_args);
|
356
363
|
gpr_mu_destroy(&server->mu_global);
|
357
364
|
gpr_mu_destroy(&server->mu_call);
|
358
|
-
gpr_free((void *)server->channel_filters);
|
359
365
|
while ((rm = server->registered_methods) != NULL) {
|
360
366
|
server->registered_methods = rm->next;
|
361
367
|
request_matcher_destroy(&rm->request_matcher);
|
@@ -418,21 +424,90 @@ static void destroy_channel(grpc_exec_ctx *exec_ctx, channel_data *chand) {
|
|
418
424
|
&op);
|
419
425
|
}
|
420
426
|
|
421
|
-
static void
|
422
|
-
|
423
|
-
|
424
|
-
int request_id;
|
427
|
+
static void cpstr(char **dest, size_t *capacity, grpc_mdstr *value) {
|
428
|
+
gpr_slice slice = value->slice;
|
429
|
+
size_t len = GPR_SLICE_LENGTH(slice);
|
425
430
|
|
426
|
-
if (
|
431
|
+
if (len + 1 > *capacity) {
|
432
|
+
*capacity = GPR_MAX(len + 1, *capacity * 2);
|
433
|
+
*dest = gpr_realloc(*dest, *capacity);
|
434
|
+
}
|
435
|
+
memcpy(*dest, grpc_mdstr_as_c_string(value), len + 1);
|
436
|
+
}
|
437
|
+
|
438
|
+
static void done_request_event(grpc_exec_ctx *exec_ctx, void *req,
|
439
|
+
grpc_cq_completion *c) {
|
440
|
+
requested_call *rc = req;
|
441
|
+
grpc_server *server = rc->server;
|
442
|
+
|
443
|
+
if (rc >= server->requested_calls &&
|
444
|
+
rc < server->requested_calls + server->max_requested_calls) {
|
445
|
+
GPR_ASSERT(rc - server->requested_calls <= INT_MAX);
|
446
|
+
gpr_stack_lockfree_push(server->request_freelist,
|
447
|
+
(int)(rc - server->requested_calls));
|
448
|
+
} else {
|
449
|
+
gpr_free(req);
|
450
|
+
}
|
451
|
+
|
452
|
+
server_unref(exec_ctx, server);
|
453
|
+
}
|
454
|
+
|
455
|
+
static void publish_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
|
456
|
+
call_data *calld, requested_call *rc) {
|
457
|
+
grpc_call_set_completion_queue(exec_ctx, calld->call, rc->cq_bound_to_call);
|
458
|
+
grpc_call *call = calld->call;
|
459
|
+
*rc->call = call;
|
460
|
+
calld->cq_new = rc->cq_for_notification;
|
461
|
+
GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, calld->initial_metadata);
|
462
|
+
switch (rc->type) {
|
463
|
+
case BATCH_CALL:
|
464
|
+
GPR_ASSERT(calld->host != NULL);
|
465
|
+
GPR_ASSERT(calld->path != NULL);
|
466
|
+
cpstr(&rc->data.batch.details->host,
|
467
|
+
&rc->data.batch.details->host_capacity, calld->host);
|
468
|
+
cpstr(&rc->data.batch.details->method,
|
469
|
+
&rc->data.batch.details->method_capacity, calld->path);
|
470
|
+
rc->data.batch.details->deadline = calld->deadline;
|
471
|
+
rc->data.batch.details->flags =
|
472
|
+
0 | (calld->recv_idempotent_request
|
473
|
+
? GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST
|
474
|
+
: 0);
|
475
|
+
break;
|
476
|
+
case REGISTERED_CALL:
|
477
|
+
*rc->data.registered.deadline = calld->deadline;
|
478
|
+
if (rc->data.registered.optional_payload) {
|
479
|
+
*rc->data.registered.optional_payload = calld->payload;
|
480
|
+
}
|
481
|
+
break;
|
482
|
+
default:
|
483
|
+
GPR_UNREACHABLE_CODE(return );
|
484
|
+
}
|
485
|
+
|
486
|
+
grpc_call_element *elem =
|
487
|
+
grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
|
488
|
+
channel_data *chand = elem->channel_data;
|
489
|
+
server_ref(chand->server);
|
490
|
+
grpc_cq_end_op(exec_ctx, calld->cq_new, rc->tag, true, done_request_event, rc,
|
491
|
+
&rc->completion);
|
492
|
+
}
|
493
|
+
|
494
|
+
static void publish_new_rpc(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
|
495
|
+
call_data *calld = arg;
|
496
|
+
request_matcher *rm = calld->request_matcher;
|
497
|
+
grpc_server *server = rm->server;
|
498
|
+
|
499
|
+
if (!success || gpr_atm_acq_load(&server->shutdown_flag)) {
|
427
500
|
gpr_mu_lock(&calld->mu_state);
|
428
501
|
calld->state = ZOMBIED;
|
429
502
|
gpr_mu_unlock(&calld->mu_state);
|
430
|
-
grpc_closure_init(
|
503
|
+
grpc_closure_init(
|
504
|
+
&calld->kill_zombie_closure, kill_zombie,
|
505
|
+
grpc_call_stack_element(grpc_call_get_call_stack(calld->call), 0));
|
431
506
|
grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL);
|
432
507
|
return;
|
433
508
|
}
|
434
509
|
|
435
|
-
request_id = gpr_stack_lockfree_pop(rm->requests);
|
510
|
+
int request_id = gpr_stack_lockfree_pop(rm->requests);
|
436
511
|
if (request_id == -1) {
|
437
512
|
gpr_mu_lock(&server->mu_call);
|
438
513
|
gpr_mu_lock(&calld->mu_state);
|
@@ -450,7 +525,41 @@ static void finish_start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_server *server,
|
|
450
525
|
gpr_mu_lock(&calld->mu_state);
|
451
526
|
calld->state = ACTIVATED;
|
452
527
|
gpr_mu_unlock(&calld->mu_state);
|
453
|
-
|
528
|
+
publish_call(exec_ctx, server, calld, &server->requested_calls[request_id]);
|
529
|
+
}
|
530
|
+
}
|
531
|
+
|
532
|
+
static void finish_start_new_rpc(
|
533
|
+
grpc_exec_ctx *exec_ctx, grpc_server *server, grpc_call_element *elem,
|
534
|
+
request_matcher *rm,
|
535
|
+
grpc_server_register_method_payload_handling payload_handling) {
|
536
|
+
call_data *calld = elem->call_data;
|
537
|
+
|
538
|
+
if (gpr_atm_acq_load(&server->shutdown_flag)) {
|
539
|
+
gpr_mu_lock(&calld->mu_state);
|
540
|
+
calld->state = ZOMBIED;
|
541
|
+
gpr_mu_unlock(&calld->mu_state);
|
542
|
+
grpc_closure_init(&calld->kill_zombie_closure, kill_zombie, elem);
|
543
|
+
grpc_exec_ctx_enqueue(exec_ctx, &calld->kill_zombie_closure, true, NULL);
|
544
|
+
return;
|
545
|
+
}
|
546
|
+
|
547
|
+
calld->request_matcher = rm;
|
548
|
+
|
549
|
+
switch (payload_handling) {
|
550
|
+
case GRPC_SRM_PAYLOAD_NONE:
|
551
|
+
publish_new_rpc(exec_ctx, calld, true);
|
552
|
+
break;
|
553
|
+
case GRPC_SRM_PAYLOAD_READ_INITIAL_BYTE_BUFFER: {
|
554
|
+
grpc_op op;
|
555
|
+
memset(&op, 0, sizeof(op));
|
556
|
+
op.op = GRPC_OP_RECV_MESSAGE;
|
557
|
+
op.data.recv_message = &calld->payload;
|
558
|
+
grpc_closure_init(&calld->publish, publish_new_rpc, calld);
|
559
|
+
grpc_call_start_batch_and_execute(exec_ctx, calld->call, &op, 1,
|
560
|
+
&calld->publish);
|
561
|
+
break;
|
562
|
+
}
|
454
563
|
}
|
455
564
|
}
|
456
565
|
|
@@ -472,8 +581,12 @@ static void start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
|
|
472
581
|
if (!rm) break;
|
473
582
|
if (rm->host != calld->host) continue;
|
474
583
|
if (rm->method != calld->path) continue;
|
584
|
+
if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
|
585
|
+
!calld->recv_idempotent_request)
|
586
|
+
continue;
|
475
587
|
finish_start_new_rpc(exec_ctx, server, elem,
|
476
|
-
&rm->server_registered_method->request_matcher
|
588
|
+
&rm->server_registered_method->request_matcher,
|
589
|
+
rm->server_registered_method->payload_handling);
|
477
590
|
return;
|
478
591
|
}
|
479
592
|
/* check for a wildcard method definition (no host set) */
|
@@ -484,13 +597,18 @@ static void start_new_rpc(grpc_exec_ctx *exec_ctx, grpc_call_element *elem) {
|
|
484
597
|
if (!rm) break;
|
485
598
|
if (rm->host != NULL) continue;
|
486
599
|
if (rm->method != calld->path) continue;
|
600
|
+
if ((rm->flags & GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) &&
|
601
|
+
!calld->recv_idempotent_request)
|
602
|
+
continue;
|
487
603
|
finish_start_new_rpc(exec_ctx, server, elem,
|
488
|
-
&rm->server_registered_method->request_matcher
|
604
|
+
&rm->server_registered_method->request_matcher,
|
605
|
+
rm->server_registered_method->payload_handling);
|
489
606
|
return;
|
490
607
|
}
|
491
608
|
}
|
492
609
|
finish_start_new_rpc(exec_ctx, server, elem,
|
493
|
-
&server->unregistered_request_matcher
|
610
|
+
&server->unregistered_request_matcher,
|
611
|
+
GRPC_SRM_PAYLOAD_NONE);
|
494
612
|
}
|
495
613
|
|
496
614
|
static int num_listeners(grpc_server *server) {
|
@@ -567,10 +685,14 @@ static grpc_mdelem *server_filter(void *user_data, grpc_mdelem *md) {
|
|
567
685
|
grpc_call_element *elem = user_data;
|
568
686
|
call_data *calld = elem->call_data;
|
569
687
|
if (md->key == GRPC_MDSTR_PATH) {
|
570
|
-
calld->path
|
688
|
+
if (calld->path == NULL) {
|
689
|
+
calld->path = GRPC_MDSTR_REF(md->value);
|
690
|
+
}
|
571
691
|
return NULL;
|
572
692
|
} else if (md->key == GRPC_MDSTR_AUTHORITY) {
|
573
|
-
calld->host
|
693
|
+
if (calld->host == NULL) {
|
694
|
+
calld->host = GRPC_MDSTR_REF(md->value);
|
695
|
+
}
|
574
696
|
return NULL;
|
575
697
|
}
|
576
698
|
return md;
|
@@ -602,9 +724,11 @@ static void server_mutate_op(grpc_call_element *elem,
|
|
602
724
|
call_data *calld = elem->call_data;
|
603
725
|
|
604
726
|
if (op->recv_initial_metadata != NULL) {
|
727
|
+
GPR_ASSERT(op->recv_idempotent_request == NULL);
|
605
728
|
calld->recv_initial_metadata = op->recv_initial_metadata;
|
606
729
|
calld->on_done_recv_initial_metadata = op->recv_initial_metadata_ready;
|
607
730
|
op->recv_initial_metadata_ready = &calld->server_on_recv_initial_metadata;
|
731
|
+
op->recv_idempotent_request = &calld->recv_idempotent_request;
|
608
732
|
}
|
609
733
|
}
|
610
734
|
|
@@ -696,8 +820,8 @@ static void init_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
|
696
820
|
server_ref(chand->server);
|
697
821
|
}
|
698
822
|
|
699
|
-
static void destroy_call_elem(grpc_exec_ctx *exec_ctx,
|
700
|
-
|
823
|
+
static void destroy_call_elem(grpc_exec_ctx *exec_ctx, grpc_call_element *elem,
|
824
|
+
void *ignored) {
|
701
825
|
channel_data *chand = elem->channel_data;
|
702
826
|
call_data *calld = elem->call_data;
|
703
827
|
|
@@ -757,11 +881,18 @@ static void destroy_channel_elem(grpc_exec_ctx *exec_ctx,
|
|
757
881
|
}
|
758
882
|
}
|
759
883
|
|
760
|
-
|
761
|
-
server_start_transport_stream_op,
|
762
|
-
|
763
|
-
sizeof(
|
764
|
-
|
884
|
+
const grpc_channel_filter grpc_server_top_filter = {
|
885
|
+
server_start_transport_stream_op,
|
886
|
+
grpc_channel_next_op,
|
887
|
+
sizeof(call_data),
|
888
|
+
init_call_elem,
|
889
|
+
grpc_call_stack_ignore_set_pollset,
|
890
|
+
destroy_call_elem,
|
891
|
+
sizeof(channel_data),
|
892
|
+
init_channel_elem,
|
893
|
+
destroy_channel_elem,
|
894
|
+
grpc_call_next_get_peer,
|
895
|
+
"server",
|
765
896
|
};
|
766
897
|
|
767
898
|
void grpc_server_register_completion_queue(grpc_server *server,
|
@@ -783,11 +914,10 @@ void grpc_server_register_completion_queue(grpc_server *server,
|
|
783
914
|
server->cqs[n] = cq;
|
784
915
|
}
|
785
916
|
|
786
|
-
grpc_server *
|
787
|
-
const grpc_channel_filter **filters, size_t filter_count,
|
788
|
-
const grpc_channel_args *args) {
|
917
|
+
grpc_server *grpc_server_create(const grpc_channel_args *args, void *reserved) {
|
789
918
|
size_t i;
|
790
|
-
|
919
|
+
|
920
|
+
GRPC_API_TRACE("grpc_server_create(%p, %p)", 2, (args, reserved));
|
791
921
|
|
792
922
|
grpc_server *server = gpr_malloc(sizeof(grpc_server));
|
793
923
|
|
@@ -811,27 +941,10 @@ grpc_server *grpc_server_create_from_filters(
|
|
811
941
|
gpr_stack_lockfree_push(server->request_freelist, (int)i);
|
812
942
|
}
|
813
943
|
request_matcher_init(&server->unregistered_request_matcher,
|
814
|
-
server->max_requested_calls);
|
944
|
+
server->max_requested_calls, server);
|
815
945
|
server->requested_calls = gpr_malloc(server->max_requested_calls *
|
816
946
|
sizeof(*server->requested_calls));
|
817
947
|
|
818
|
-
/* Server filter stack is:
|
819
|
-
|
820
|
-
server_surface_filter - for making surface API calls
|
821
|
-
grpc_server_census_filter (optional) - for stats collection and tracing
|
822
|
-
{passed in filter stack}
|
823
|
-
grpc_connected_channel_filter - for interfacing with transports */
|
824
|
-
server->channel_filter_count = filter_count + 1u + (census_enabled ? 1u : 0u);
|
825
|
-
server->channel_filters =
|
826
|
-
gpr_malloc(server->channel_filter_count * sizeof(grpc_channel_filter *));
|
827
|
-
server->channel_filters[0] = &server_surface_filter;
|
828
|
-
if (census_enabled) {
|
829
|
-
server->channel_filters[1] = &grpc_server_census_filter;
|
830
|
-
}
|
831
|
-
for (i = 0; i < filter_count; i++) {
|
832
|
-
server->channel_filters[i + 1u + (census_enabled ? 1u : 0u)] = filters[i];
|
833
|
-
}
|
834
|
-
|
835
948
|
server->channel_args = grpc_channel_args_copy(args);
|
836
949
|
|
837
950
|
return server;
|
@@ -844,11 +957,15 @@ static int streq(const char *a, const char *b) {
|
|
844
957
|
return 0 == strcmp(a, b);
|
845
958
|
}
|
846
959
|
|
847
|
-
void *grpc_server_register_method(
|
848
|
-
|
960
|
+
void *grpc_server_register_method(
|
961
|
+
grpc_server *server, const char *method, const char *host,
|
962
|
+
grpc_server_register_method_payload_handling payload_handling,
|
963
|
+
uint32_t flags) {
|
849
964
|
registered_method *m;
|
850
|
-
GRPC_API_TRACE(
|
851
|
-
|
965
|
+
GRPC_API_TRACE(
|
966
|
+
"grpc_server_register_method(server=%p, method=%s, host=%s, "
|
967
|
+
"flags=0x%08x)",
|
968
|
+
4, (server, method, host, flags));
|
852
969
|
if (!method) {
|
853
970
|
gpr_log(GPR_ERROR,
|
854
971
|
"grpc_server_register_method method string cannot be NULL");
|
@@ -861,12 +978,20 @@ void *grpc_server_register_method(grpc_server *server, const char *method,
|
|
861
978
|
return NULL;
|
862
979
|
}
|
863
980
|
}
|
981
|
+
if ((flags & ~GRPC_INITIAL_METADATA_USED_MASK) != 0) {
|
982
|
+
gpr_log(GPR_ERROR, "grpc_server_register_method invalid flags 0x%08x",
|
983
|
+
flags);
|
984
|
+
return NULL;
|
985
|
+
}
|
864
986
|
m = gpr_malloc(sizeof(registered_method));
|
865
987
|
memset(m, 0, sizeof(*m));
|
866
|
-
request_matcher_init(&m->request_matcher, server->max_requested_calls
|
988
|
+
request_matcher_init(&m->request_matcher, server->max_requested_calls,
|
989
|
+
server);
|
867
990
|
m->method = gpr_strdup(method);
|
868
991
|
m->host = gpr_strdup(host);
|
869
992
|
m->next = server->registered_methods;
|
993
|
+
m->payload_handling = payload_handling;
|
994
|
+
m->flags = flags;
|
870
995
|
server->registered_methods = m;
|
871
996
|
return m;
|
872
997
|
}
|
@@ -892,12 +1017,7 @@ void grpc_server_start(grpc_server *server) {
|
|
892
1017
|
|
893
1018
|
void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
|
894
1019
|
grpc_transport *transport,
|
895
|
-
grpc_channel_filter const **extra_filters,
|
896
|
-
size_t num_extra_filters,
|
897
1020
|
const grpc_channel_args *args) {
|
898
|
-
size_t num_filters = s->channel_filter_count + num_extra_filters + 1;
|
899
|
-
grpc_channel_filter const **filters =
|
900
|
-
gpr_malloc(sizeof(grpc_channel_filter *) * num_filters);
|
901
1021
|
size_t i;
|
902
1022
|
size_t num_registered_methods;
|
903
1023
|
size_t alloc;
|
@@ -913,24 +1033,17 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
|
|
913
1033
|
uint32_t max_probes = 0;
|
914
1034
|
grpc_transport_op op;
|
915
1035
|
|
916
|
-
for (i = 0; i < s->channel_filter_count; i++) {
|
917
|
-
filters[i] = s->channel_filters[i];
|
918
|
-
}
|
919
|
-
for (; i < s->channel_filter_count + num_extra_filters; i++) {
|
920
|
-
filters[i] = extra_filters[i - s->channel_filter_count];
|
921
|
-
}
|
922
|
-
filters[i] = &grpc_connected_channel_filter;
|
923
|
-
|
924
1036
|
for (i = 0; i < s->cq_count; i++) {
|
925
1037
|
memset(&op, 0, sizeof(op));
|
926
1038
|
op.bind_pollset = grpc_cq_pollset(s->cqs[i]);
|
927
1039
|
grpc_transport_perform_op(exec_ctx, transport, &op);
|
928
1040
|
}
|
929
1041
|
|
930
|
-
channel =
|
931
|
-
|
1042
|
+
channel =
|
1043
|
+
grpc_channel_create(exec_ctx, NULL, args, GRPC_SERVER_CHANNEL, transport);
|
932
1044
|
chand = (channel_data *)grpc_channel_stack_element(
|
933
|
-
grpc_channel_get_channel_stack(channel), 0)
|
1045
|
+
grpc_channel_get_channel_stack(channel), 0)
|
1046
|
+
->channel_data;
|
934
1047
|
chand->server = s;
|
935
1048
|
server_ref(s);
|
936
1049
|
chand->channel = channel;
|
@@ -951,12 +1064,13 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
|
|
951
1064
|
method = grpc_mdstr_from_string(rm->method);
|
952
1065
|
hash = GRPC_MDSTR_KV_HASH(host ? host->hash : 0, method->hash);
|
953
1066
|
for (probes = 0; chand->registered_methods[(hash + probes) % slots]
|
954
|
-
|
1067
|
+
.server_registered_method != NULL;
|
955
1068
|
probes++)
|
956
1069
|
;
|
957
1070
|
if (probes > max_probes) max_probes = probes;
|
958
1071
|
crm = &chand->registered_methods[(hash + probes) % slots];
|
959
1072
|
crm->server_registered_method = rm;
|
1073
|
+
crm->flags = rm->flags;
|
960
1074
|
crm->host = host;
|
961
1075
|
crm->method = method;
|
962
1076
|
}
|
@@ -965,17 +1079,12 @@ void grpc_server_setup_transport(grpc_exec_ctx *exec_ctx, grpc_server *s,
|
|
965
1079
|
chand->registered_method_max_probes = max_probes;
|
966
1080
|
}
|
967
1081
|
|
968
|
-
grpc_connected_channel_bind_transport(grpc_channel_get_channel_stack(channel),
|
969
|
-
transport);
|
970
|
-
|
971
1082
|
gpr_mu_lock(&s->mu_global);
|
972
1083
|
chand->next = &s->root_channel_data;
|
973
1084
|
chand->prev = chand->next->prev;
|
974
1085
|
chand->next->prev = chand->prev->next = chand;
|
975
1086
|
gpr_mu_unlock(&s->mu_global);
|
976
1087
|
|
977
|
-
gpr_free((void *)filters);
|
978
|
-
|
979
1088
|
GRPC_CHANNEL_INTERNAL_REF(channel, "connectivity");
|
980
1089
|
memset(&op, 0, sizeof(op));
|
981
1090
|
op.set_accept_stream = true;
|
@@ -1155,8 +1264,8 @@ static grpc_call_error queue_call_request(grpc_exec_ctx *exec_ctx,
|
|
1155
1264
|
GPR_ASSERT(calld->state == PENDING);
|
1156
1265
|
calld->state = ACTIVATED;
|
1157
1266
|
gpr_mu_unlock(&calld->mu_state);
|
1158
|
-
|
1159
|
-
|
1267
|
+
publish_call(exec_ctx, server, calld,
|
1268
|
+
&server->requested_calls[request_id]);
|
1160
1269
|
}
|
1161
1270
|
gpr_mu_lock(&server->mu_call);
|
1162
1271
|
}
|
@@ -1221,6 +1330,12 @@ grpc_call_error grpc_server_request_registered_call(
|
|
1221
1330
|
error = GRPC_CALL_ERROR_NOT_SERVER_COMPLETION_QUEUE;
|
1222
1331
|
goto done;
|
1223
1332
|
}
|
1333
|
+
if ((optional_payload == NULL) !=
|
1334
|
+
(rm->payload_handling == GRPC_SRM_PAYLOAD_NONE)) {
|
1335
|
+
gpr_free(rc);
|
1336
|
+
error = GRPC_CALL_ERROR_PAYLOAD_TYPE_MISMATCH;
|
1337
|
+
goto done;
|
1338
|
+
}
|
1224
1339
|
grpc_cq_begin_op(cq_for_notification, tag);
|
1225
1340
|
rc->type = REGISTERED_CALL;
|
1226
1341
|
rc->server = server;
|
@@ -1238,82 +1353,6 @@ done:
|
|
1238
1353
|
return error;
|
1239
1354
|
}
|
1240
1355
|
|
1241
|
-
static void publish_registered_or_batch(grpc_exec_ctx *exec_ctx,
|
1242
|
-
void *user_data, bool success);
|
1243
|
-
|
1244
|
-
static void cpstr(char **dest, size_t *capacity, grpc_mdstr *value) {
|
1245
|
-
gpr_slice slice = value->slice;
|
1246
|
-
size_t len = GPR_SLICE_LENGTH(slice);
|
1247
|
-
|
1248
|
-
if (len + 1 > *capacity) {
|
1249
|
-
*capacity = GPR_MAX(len + 1, *capacity * 2);
|
1250
|
-
*dest = gpr_realloc(*dest, *capacity);
|
1251
|
-
}
|
1252
|
-
memcpy(*dest, grpc_mdstr_as_c_string(value), len + 1);
|
1253
|
-
}
|
1254
|
-
|
1255
|
-
static void begin_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
|
1256
|
-
call_data *calld, requested_call *rc) {
|
1257
|
-
grpc_op ops[1];
|
1258
|
-
grpc_op *op = ops;
|
1259
|
-
|
1260
|
-
memset(ops, 0, sizeof(ops));
|
1261
|
-
|
1262
|
-
/* called once initial metadata has been read by the call, but BEFORE
|
1263
|
-
the ioreq to fetch it out of the call has been executed.
|
1264
|
-
This means metadata related fields can be relied on in calld, but to
|
1265
|
-
fill in the metadata array passed by the client, we need to perform
|
1266
|
-
an ioreq op, that should complete immediately. */
|
1267
|
-
|
1268
|
-
grpc_call_set_completion_queue(exec_ctx, calld->call, rc->cq_bound_to_call);
|
1269
|
-
grpc_closure_init(&rc->publish, publish_registered_or_batch, rc);
|
1270
|
-
*rc->call = calld->call;
|
1271
|
-
calld->cq_new = rc->cq_for_notification;
|
1272
|
-
GPR_SWAP(grpc_metadata_array, *rc->initial_metadata, calld->initial_metadata);
|
1273
|
-
switch (rc->type) {
|
1274
|
-
case BATCH_CALL:
|
1275
|
-
GPR_ASSERT(calld->host != NULL);
|
1276
|
-
GPR_ASSERT(calld->path != NULL);
|
1277
|
-
cpstr(&rc->data.batch.details->host,
|
1278
|
-
&rc->data.batch.details->host_capacity, calld->host);
|
1279
|
-
cpstr(&rc->data.batch.details->method,
|
1280
|
-
&rc->data.batch.details->method_capacity, calld->path);
|
1281
|
-
rc->data.batch.details->deadline = calld->deadline;
|
1282
|
-
break;
|
1283
|
-
case REGISTERED_CALL:
|
1284
|
-
*rc->data.registered.deadline = calld->deadline;
|
1285
|
-
if (rc->data.registered.optional_payload) {
|
1286
|
-
op->op = GRPC_OP_RECV_MESSAGE;
|
1287
|
-
op->data.recv_message = rc->data.registered.optional_payload;
|
1288
|
-
op++;
|
1289
|
-
}
|
1290
|
-
break;
|
1291
|
-
default:
|
1292
|
-
GPR_UNREACHABLE_CODE(return );
|
1293
|
-
}
|
1294
|
-
|
1295
|
-
GRPC_CALL_INTERNAL_REF(calld->call, "server");
|
1296
|
-
grpc_call_start_batch_and_execute(exec_ctx, calld->call, ops,
|
1297
|
-
(size_t)(op - ops), &rc->publish);
|
1298
|
-
}
|
1299
|
-
|
1300
|
-
static void done_request_event(grpc_exec_ctx *exec_ctx, void *req,
|
1301
|
-
grpc_cq_completion *c) {
|
1302
|
-
requested_call *rc = req;
|
1303
|
-
grpc_server *server = rc->server;
|
1304
|
-
|
1305
|
-
if (rc >= server->requested_calls &&
|
1306
|
-
rc < server->requested_calls + server->max_requested_calls) {
|
1307
|
-
GPR_ASSERT(rc - server->requested_calls <= INT_MAX);
|
1308
|
-
gpr_stack_lockfree_push(server->request_freelist,
|
1309
|
-
(int)(rc - server->requested_calls));
|
1310
|
-
} else {
|
1311
|
-
gpr_free(req);
|
1312
|
-
}
|
1313
|
-
|
1314
|
-
server_unref(exec_ctx, server);
|
1315
|
-
}
|
1316
|
-
|
1317
1356
|
static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
|
1318
1357
|
requested_call *rc) {
|
1319
1358
|
*rc->call = NULL;
|
@@ -1324,20 +1363,6 @@ static void fail_call(grpc_exec_ctx *exec_ctx, grpc_server *server,
|
|
1324
1363
|
done_request_event, rc, &rc->completion);
|
1325
1364
|
}
|
1326
1365
|
|
1327
|
-
static void publish_registered_or_batch(grpc_exec_ctx *exec_ctx, void *prc,
|
1328
|
-
bool success) {
|
1329
|
-
requested_call *rc = prc;
|
1330
|
-
grpc_call *call = *rc->call;
|
1331
|
-
grpc_call_element *elem =
|
1332
|
-
grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
|
1333
|
-
call_data *calld = elem->call_data;
|
1334
|
-
channel_data *chand = elem->channel_data;
|
1335
|
-
server_ref(chand->server);
|
1336
|
-
grpc_cq_end_op(exec_ctx, calld->cq_new, rc->tag, success, done_request_event,
|
1337
|
-
rc, &rc->completion);
|
1338
|
-
GRPC_CALL_INTERNAL_UNREF(exec_ctx, call, "server");
|
1339
|
-
}
|
1340
|
-
|
1341
1366
|
const grpc_channel_args *grpc_server_get_channel_args(grpc_server *server) {
|
1342
1367
|
return server->channel_args;
|
1343
1368
|
}
|