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
@@ -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,8 +31,8 @@
|
|
31
31
|
*
|
32
32
|
*/
|
33
33
|
|
34
|
-
#ifndef
|
35
|
-
#define
|
34
|
+
#ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_BIN_ENCODER_H
|
35
|
+
#define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_BIN_ENCODER_H
|
36
36
|
|
37
37
|
#include <grpc/support/slice.h>
|
38
38
|
|
@@ -49,6 +49,6 @@ gpr_slice grpc_chttp2_huffman_compress(gpr_slice input);
|
|
49
49
|
gpr_slice y = grpc_chttp2_huffman_compress(x);
|
50
50
|
gpr_slice_unref(x);
|
51
51
|
return y; */
|
52
|
-
gpr_slice
|
52
|
+
gpr_slice grpc_chttp2_base64_encode_and_huffman_compress_impl(gpr_slice input);
|
53
53
|
|
54
|
-
#endif /*
|
54
|
+
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_BIN_ENCODER_H */
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015, Google Inc.
|
4
|
+
* All rights reserved.
|
5
|
+
*
|
6
|
+
* Redistribution and use in source and binary forms, with or without
|
7
|
+
* modification, are permitted provided that the following conditions are
|
8
|
+
* met:
|
9
|
+
*
|
10
|
+
* * Redistributions of source code must retain the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer.
|
12
|
+
* * Redistributions in binary form must reproduce the above
|
13
|
+
* copyright notice, this list of conditions and the following disclaimer
|
14
|
+
* in the documentation and/or other materials provided with the
|
15
|
+
* distribution.
|
16
|
+
* * Neither the name of Google Inc. nor the names of its
|
17
|
+
* contributors may be used to endorse or promote products derived from
|
18
|
+
* this software without specific prior written permission.
|
19
|
+
*
|
20
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
21
|
+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
22
|
+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
23
|
+
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
24
|
+
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
25
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
26
|
+
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
27
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
28
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
29
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
30
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
31
|
+
*
|
32
|
+
*/
|
33
|
+
|
34
|
+
#include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
|
35
|
+
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
36
|
+
#include "src/core/lib/debug/trace.h"
|
37
|
+
#include "src/core/lib/transport/metadata.h"
|
38
|
+
|
39
|
+
void grpc_chttp2_plugin_init(void) {
|
40
|
+
grpc_chttp2_base64_encode_and_huffman_compress =
|
41
|
+
grpc_chttp2_base64_encode_and_huffman_compress_impl;
|
42
|
+
grpc_register_tracer("http", &grpc_http_trace);
|
43
|
+
grpc_register_tracer("flowctl", &grpc_flowctl_trace);
|
44
|
+
}
|
45
|
+
|
46
|
+
void grpc_chttp2_plugin_shutdown(void) {}
|
@@ -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/transport/chttp2_transport.h"
|
34
|
+
#include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
|
35
35
|
|
36
36
|
#include <math.h>
|
37
37
|
#include <stdio.h>
|
@@ -43,14 +43,14 @@
|
|
43
43
|
#include <grpc/support/string_util.h>
|
44
44
|
#include <grpc/support/useful.h>
|
45
45
|
|
46
|
-
#include "src/core/
|
47
|
-
#include "src/core/
|
48
|
-
#include "src/core/transport/chttp2/
|
49
|
-
#include "src/core/transport/chttp2/
|
50
|
-
#include "src/core/
|
51
|
-
#include "src/core/
|
52
|
-
#include "src/core/transport/static_metadata.h"
|
53
|
-
#include "src/core/transport/transport_impl.h"
|
46
|
+
#include "src/core/ext/transport/chttp2/transport/http2_errors.h"
|
47
|
+
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
48
|
+
#include "src/core/ext/transport/chttp2/transport/status_conversion.h"
|
49
|
+
#include "src/core/ext/transport/chttp2/transport/timeout_encoding.h"
|
50
|
+
#include "src/core/lib/profiling/timers.h"
|
51
|
+
#include "src/core/lib/support/string.h"
|
52
|
+
#include "src/core/lib/transport/static_metadata.h"
|
53
|
+
#include "src/core/lib/transport/transport_impl.h"
|
54
54
|
|
55
55
|
#define DEFAULT_WINDOW 65535
|
56
56
|
#define DEFAULT_CONNECTION_WINDOW_TARGET (1024 * 1024)
|
@@ -81,27 +81,25 @@ int grpc_flowctl_trace = 0;
|
|
81
81
|
|
82
82
|
static const grpc_transport_vtable vtable;
|
83
83
|
|
84
|
-
static void lock(grpc_chttp2_transport *t);
|
85
|
-
static void unlock(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
|
86
|
-
|
87
84
|
/* forward declarations of various callbacks that we'll build closures around */
|
88
85
|
static void writing_action(grpc_exec_ctx *exec_ctx, void *t,
|
89
86
|
bool iomgr_success_ignored);
|
87
|
+
static void reading_action(grpc_exec_ctx *exec_ctx, void *t,
|
88
|
+
bool iomgr_success_ignored);
|
89
|
+
static void parsing_action(grpc_exec_ctx *exec_ctx, void *t,
|
90
|
+
bool iomgr_success_ignored);
|
90
91
|
|
91
92
|
/** Set a transport level setting, and push it to our peer */
|
92
93
|
static void push_setting(grpc_chttp2_transport *t, grpc_chttp2_setting_id id,
|
93
94
|
uint32_t value);
|
94
95
|
|
95
|
-
/** Endpoint callback to process incoming data */
|
96
|
-
static void recv_data(grpc_exec_ctx *exec_ctx, void *tp, bool success);
|
97
|
-
|
98
96
|
/** Start disconnection chain */
|
99
97
|
static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
|
100
98
|
|
101
99
|
/** Perform a transport_op */
|
102
|
-
static void perform_stream_op_locked(
|
103
|
-
|
104
|
-
|
100
|
+
static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx,
|
101
|
+
grpc_chttp2_transport *t,
|
102
|
+
grpc_chttp2_stream *s, void *transport_op);
|
105
103
|
|
106
104
|
/** Cancel a stream: coming from the transport API */
|
107
105
|
static void cancel_from_api(grpc_exec_ctx *exec_ctx,
|
@@ -118,15 +116,19 @@ static void close_from_api(grpc_exec_ctx *exec_ctx,
|
|
118
116
|
/** Add endpoint from this transport to pollset */
|
119
117
|
static void add_to_pollset_locked(grpc_exec_ctx *exec_ctx,
|
120
118
|
grpc_chttp2_transport *t,
|
121
|
-
|
119
|
+
grpc_chttp2_stream *s_ignored, void *pollset);
|
122
120
|
static void add_to_pollset_set_locked(grpc_exec_ctx *exec_ctx,
|
123
121
|
grpc_chttp2_transport *t,
|
124
|
-
|
122
|
+
grpc_chttp2_stream *s_ignored,
|
123
|
+
void *pollset_set);
|
125
124
|
|
126
125
|
/** Start new streams that have been created if we can */
|
127
126
|
static void maybe_start_some_streams(
|
128
127
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global);
|
129
128
|
|
129
|
+
static void finish_global_actions(grpc_exec_ctx *exec_ctx,
|
130
|
+
grpc_chttp2_transport *t);
|
131
|
+
|
130
132
|
static void connectivity_state_set(
|
131
133
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
|
132
134
|
grpc_connectivity_state state, const char *reason);
|
@@ -138,7 +140,10 @@ static void incoming_byte_stream_update_flow_control(
|
|
138
140
|
grpc_chttp2_transport_global *transport_global,
|
139
141
|
grpc_chttp2_stream_global *stream_global, size_t max_size_hint,
|
140
142
|
size_t have_already);
|
141
|
-
|
143
|
+
static void incoming_byte_stream_destroy_locked(grpc_exec_ctx *exec_ctx,
|
144
|
+
grpc_chttp2_transport *t,
|
145
|
+
grpc_chttp2_stream *s,
|
146
|
+
void *byte_stream);
|
142
147
|
static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
|
143
148
|
grpc_chttp2_stream_global *stream_global);
|
144
149
|
|
@@ -150,7 +155,7 @@ static void destruct_transport(grpc_exec_ctx *exec_ctx,
|
|
150
155
|
grpc_chttp2_transport *t) {
|
151
156
|
size_t i;
|
152
157
|
|
153
|
-
gpr_mu_lock(&t->mu);
|
158
|
+
gpr_mu_lock(&t->executor.mu);
|
154
159
|
|
155
160
|
GPR_ASSERT(t->ep == NULL);
|
156
161
|
|
@@ -176,8 +181,8 @@ static void destruct_transport(grpc_exec_ctx *exec_ctx,
|
|
176
181
|
grpc_chttp2_stream_map_destroy(&t->new_stream_map);
|
177
182
|
grpc_connectivity_state_destroy(exec_ctx, &t->channel_callback.state_tracker);
|
178
183
|
|
179
|
-
gpr_mu_unlock(&t->mu);
|
180
|
-
gpr_mu_destroy(&t->mu);
|
184
|
+
gpr_mu_unlock(&t->executor.mu);
|
185
|
+
gpr_mu_destroy(&t->executor.mu);
|
181
186
|
|
182
187
|
/* callback remaining pings: they're not allowed to call into the transpot,
|
183
188
|
and maybe they hold resources that need to be freed */
|
@@ -238,7 +243,7 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
|
238
243
|
gpr_ref_init(&t->refs, 2);
|
239
244
|
/* ref is dropped at transport close() */
|
240
245
|
gpr_ref_init(&t->shutdown_ep_refs, 1);
|
241
|
-
gpr_mu_init(&t->mu);
|
246
|
+
gpr_mu_init(&t->executor.mu);
|
242
247
|
t->peer_string = grpc_endpoint_get_peer(ep);
|
243
248
|
t->endpoint_reading = 1;
|
244
249
|
t->global.next_stream_id = is_client ? 1 : 2;
|
@@ -262,6 +267,8 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
|
262
267
|
gpr_slice_buffer_init(&t->writing.outbuf);
|
263
268
|
grpc_chttp2_hpack_compressor_init(&t->writing.hpack_compressor);
|
264
269
|
grpc_closure_init(&t->writing_action, writing_action, t);
|
270
|
+
grpc_closure_init(&t->reading_action, reading_action, t);
|
271
|
+
grpc_closure_init(&t->parsing_action, parsing_action, t);
|
265
272
|
|
266
273
|
gpr_slice_buffer_init(&t->parsing.qbuf);
|
267
274
|
grpc_chttp2_goaway_parser_init(&t->parsing.goaway_parser);
|
@@ -269,7 +276,6 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
|
269
276
|
|
270
277
|
grpc_closure_init(&t->writing.done_cb, grpc_chttp2_terminate_writing,
|
271
278
|
&t->writing);
|
272
|
-
grpc_closure_init(&t->recv_data, recv_data, t);
|
273
279
|
gpr_slice_buffer_init(&t->read_buffer);
|
274
280
|
|
275
281
|
if (is_client) {
|
@@ -377,14 +383,18 @@ static void init_transport(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
|
377
383
|
}
|
378
384
|
}
|
379
385
|
|
380
|
-
static void
|
381
|
-
|
382
|
-
|
383
|
-
|
386
|
+
static void destroy_transport_locked(grpc_exec_ctx *exec_ctx,
|
387
|
+
grpc_chttp2_transport *t,
|
388
|
+
grpc_chttp2_stream *s_ignored,
|
389
|
+
void *arg_ignored) {
|
384
390
|
t->destroying = 1;
|
385
391
|
drop_connection(exec_ctx, t);
|
386
|
-
|
392
|
+
}
|
387
393
|
|
394
|
+
static void destroy_transport(grpc_exec_ctx *exec_ctx, grpc_transport *gt) {
|
395
|
+
grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
|
396
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, t, NULL, destroy_transport_locked,
|
397
|
+
NULL, 0);
|
388
398
|
UNREF_TRANSPORT(exec_ctx, t, "destroy");
|
389
399
|
}
|
390
400
|
|
@@ -404,17 +414,6 @@ static void allow_endpoint_shutdown_locked(grpc_exec_ctx *exec_ctx,
|
|
404
414
|
}
|
405
415
|
}
|
406
416
|
|
407
|
-
static void allow_endpoint_shutdown_unlocked(grpc_exec_ctx *exec_ctx,
|
408
|
-
grpc_chttp2_transport *t) {
|
409
|
-
if (gpr_unref(&t->shutdown_ep_refs)) {
|
410
|
-
gpr_mu_lock(&t->mu);
|
411
|
-
if (t->ep) {
|
412
|
-
grpc_endpoint_shutdown(exec_ctx, t->ep);
|
413
|
-
}
|
414
|
-
gpr_mu_unlock(&t->mu);
|
415
|
-
}
|
416
|
-
}
|
417
|
-
|
418
417
|
static void destroy_endpoint(grpc_exec_ctx *exec_ctx,
|
419
418
|
grpc_chttp2_transport *t) {
|
420
419
|
grpc_endpoint_destroy(exec_ctx, t->ep);
|
@@ -424,7 +423,9 @@ static void destroy_endpoint(grpc_exec_ctx *exec_ctx,
|
|
424
423
|
}
|
425
424
|
|
426
425
|
static void close_transport_locked(grpc_exec_ctx *exec_ctx,
|
427
|
-
grpc_chttp2_transport *t
|
426
|
+
grpc_chttp2_transport *t,
|
427
|
+
grpc_chttp2_stream *s_ignored,
|
428
|
+
void *arg_ignored) {
|
428
429
|
if (!t->closed) {
|
429
430
|
t->closed = 1;
|
430
431
|
connectivity_state_set(exec_ctx, &t->global, GRPC_CHANNEL_FATAL_FAILURE,
|
@@ -464,6 +465,13 @@ void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx,
|
|
464
465
|
}
|
465
466
|
#endif
|
466
467
|
|
468
|
+
static void finish_init_stream_locked(grpc_exec_ctx *exec_ctx,
|
469
|
+
grpc_chttp2_transport *t,
|
470
|
+
grpc_chttp2_stream *s,
|
471
|
+
void *arg_ignored) {
|
472
|
+
grpc_chttp2_register_stream(t, s);
|
473
|
+
}
|
474
|
+
|
467
475
|
static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
468
476
|
grpc_stream *gs, grpc_stream_refcount *refcount,
|
469
477
|
const void *server_data) {
|
@@ -473,6 +481,10 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
473
481
|
memset(s, 0, sizeof(*s));
|
474
482
|
|
475
483
|
s->refcount = refcount;
|
484
|
+
/* We reserve one 'active stream' that's dropped when the stream is
|
485
|
+
read-closed. The others are for incoming_byte_streams that are actively
|
486
|
+
reading */
|
487
|
+
gpr_ref_init(&s->global.active_streams, 1);
|
476
488
|
GRPC_CHTTP2_STREAM_REF(&s->global, "chttp2");
|
477
489
|
|
478
490
|
grpc_chttp2_incoming_metadata_buffer_init(&s->parsing.metadata_buffer[0]);
|
@@ -486,10 +498,8 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
486
498
|
|
487
499
|
REF_TRANSPORT(t, "stream");
|
488
500
|
|
489
|
-
lock(t);
|
490
|
-
grpc_chttp2_register_stream(t, s);
|
491
501
|
if (server_data) {
|
492
|
-
GPR_ASSERT(t->parsing_active);
|
502
|
+
GPR_ASSERT(t->executor.parsing_active);
|
493
503
|
s->global.id = (uint32_t)(uintptr_t)server_data;
|
494
504
|
s->parsing.id = s->global.id;
|
495
505
|
s->global.outgoing_window =
|
@@ -502,40 +512,42 @@ static int init_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
502
512
|
grpc_chttp2_stream_map_add(&t->parsing_stream_map, s->global.id, s);
|
503
513
|
s->global.in_stream_map = 1;
|
504
514
|
}
|
505
|
-
|
515
|
+
|
516
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, t, s, finish_init_stream_locked,
|
517
|
+
NULL, 0);
|
506
518
|
|
507
519
|
return 0;
|
508
520
|
}
|
509
521
|
|
510
|
-
static void
|
511
|
-
|
512
|
-
|
513
|
-
grpc_chttp2_stream *s = (grpc_chttp2_stream *)gs;
|
514
|
-
int i;
|
522
|
+
static void destroy_stream_locked(grpc_exec_ctx *exec_ctx,
|
523
|
+
grpc_chttp2_transport *t,
|
524
|
+
grpc_chttp2_stream *s, void *arg) {
|
515
525
|
grpc_byte_stream *bs;
|
516
526
|
|
517
527
|
GPR_TIMER_BEGIN("destroy_stream", 0);
|
518
528
|
|
519
|
-
gpr_mu_lock(&t->mu);
|
520
|
-
|
521
529
|
GPR_ASSERT((s->global.write_closed && s->global.read_closed) ||
|
522
530
|
s->global.id == 0);
|
523
531
|
GPR_ASSERT(!s->global.in_stream_map);
|
524
532
|
if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) {
|
525
|
-
close_transport_locked(exec_ctx, t);
|
533
|
+
close_transport_locked(exec_ctx, t, NULL, NULL);
|
526
534
|
}
|
527
|
-
if (!t->parsing_active && s->global.id) {
|
535
|
+
if (!t->executor.parsing_active && s->global.id) {
|
528
536
|
GPR_ASSERT(grpc_chttp2_stream_map_find(&t->parsing_stream_map,
|
529
537
|
s->global.id) == NULL);
|
530
538
|
}
|
531
539
|
|
540
|
+
while (
|
541
|
+
(bs = grpc_chttp2_incoming_frame_queue_pop(&s->global.incoming_frames))) {
|
542
|
+
incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs);
|
543
|
+
}
|
544
|
+
|
532
545
|
grpc_chttp2_list_remove_unannounced_incoming_window_available(&t->global,
|
533
546
|
&s->global);
|
534
547
|
grpc_chttp2_list_remove_stalled_by_transport(&t->global, &s->global);
|
548
|
+
grpc_chttp2_list_remove_check_read_ops(&t->global, &s->global);
|
535
549
|
|
536
|
-
|
537
|
-
|
538
|
-
for (i = 0; i < STREAM_LIST_COUNT; i++) {
|
550
|
+
for (int i = 0; i < STREAM_LIST_COUNT; i++) {
|
539
551
|
if (s->included[i]) {
|
540
552
|
gpr_log(GPR_ERROR, "%s stream %d still included in list %d",
|
541
553
|
t->global.is_client ? "client" : "server", s->global.id, i);
|
@@ -543,11 +555,6 @@ static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
543
555
|
}
|
544
556
|
}
|
545
557
|
|
546
|
-
while (
|
547
|
-
(bs = grpc_chttp2_incoming_frame_queue_pop(&s->global.incoming_frames))) {
|
548
|
-
grpc_byte_stream_destroy(exec_ctx, bs);
|
549
|
-
}
|
550
|
-
|
551
558
|
GPR_ASSERT(s->global.send_initial_metadata_finished == NULL);
|
552
559
|
GPR_ASSERT(s->global.send_message_finished == NULL);
|
553
560
|
GPR_ASSERT(s->global.send_trailing_metadata_finished == NULL);
|
@@ -566,6 +573,17 @@ static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
566
573
|
UNREF_TRANSPORT(exec_ctx, t, "stream");
|
567
574
|
|
568
575
|
GPR_TIMER_END("destroy_stream", 0);
|
576
|
+
|
577
|
+
gpr_free(arg);
|
578
|
+
}
|
579
|
+
|
580
|
+
static void destroy_stream(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
581
|
+
grpc_stream *gs, void *and_free_memory) {
|
582
|
+
grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
|
583
|
+
grpc_chttp2_stream *s = (grpc_chttp2_stream *)gs;
|
584
|
+
|
585
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, t, s, destroy_stream_locked,
|
586
|
+
and_free_memory, 0);
|
569
587
|
}
|
570
588
|
|
571
589
|
grpc_chttp2_stream_parsing *grpc_chttp2_parsing_lookup_stream(
|
@@ -594,28 +612,96 @@ grpc_chttp2_stream_parsing *grpc_chttp2_parsing_accept_stream(
|
|
594
612
|
* LOCK MANAGEMENT
|
595
613
|
*/
|
596
614
|
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
615
|
+
static void finish_global_actions(grpc_exec_ctx *exec_ctx,
|
616
|
+
grpc_chttp2_transport *t) {
|
617
|
+
grpc_chttp2_executor_action_header *hdr;
|
618
|
+
grpc_chttp2_executor_action_header *next;
|
619
|
+
|
620
|
+
for (;;) {
|
621
|
+
if (!t->executor.writing_active && !t->closed &&
|
622
|
+
grpc_chttp2_unlocking_check_writes(exec_ctx, &t->global, &t->writing,
|
623
|
+
t->executor.parsing_active)) {
|
624
|
+
t->executor.writing_active = 1;
|
625
|
+
REF_TRANSPORT(t, "writing");
|
626
|
+
prevent_endpoint_shutdown(t);
|
627
|
+
grpc_exec_ctx_enqueue(exec_ctx, &t->writing_action, true, NULL);
|
628
|
+
}
|
629
|
+
check_read_ops(exec_ctx, &t->global);
|
630
|
+
|
631
|
+
gpr_mu_lock(&t->executor.mu);
|
632
|
+
if (t->executor.pending_actions_head != NULL) {
|
633
|
+
hdr = t->executor.pending_actions_head;
|
634
|
+
t->executor.pending_actions_head = t->executor.pending_actions_tail =
|
635
|
+
NULL;
|
636
|
+
gpr_mu_unlock(&t->executor.mu);
|
637
|
+
while (hdr != NULL) {
|
638
|
+
hdr->action(exec_ctx, t, hdr->stream, hdr->arg);
|
639
|
+
next = hdr->next;
|
640
|
+
gpr_free(hdr);
|
641
|
+
UNREF_TRANSPORT(exec_ctx, t, "pending_action");
|
642
|
+
hdr = next;
|
643
|
+
}
|
644
|
+
continue;
|
645
|
+
} else {
|
646
|
+
t->executor.global_active = false;
|
647
|
+
}
|
648
|
+
gpr_mu_unlock(&t->executor.mu);
|
649
|
+
break;
|
650
|
+
}
|
651
|
+
}
|
652
|
+
|
653
|
+
void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx,
|
654
|
+
grpc_chttp2_transport *t,
|
655
|
+
grpc_chttp2_stream *optional_stream,
|
656
|
+
grpc_chttp2_locked_action action,
|
657
|
+
void *arg, size_t sizeof_arg) {
|
658
|
+
grpc_chttp2_executor_action_header *hdr;
|
659
|
+
|
660
|
+
REF_TRANSPORT(t, "run_global");
|
661
|
+
gpr_mu_lock(&t->executor.mu);
|
662
|
+
|
663
|
+
for (;;) {
|
664
|
+
if (!t->executor.global_active) {
|
665
|
+
t->executor.global_active = 1;
|
666
|
+
gpr_mu_unlock(&t->executor.mu);
|
667
|
+
|
668
|
+
action(exec_ctx, t, optional_stream, arg);
|
669
|
+
|
670
|
+
finish_global_actions(exec_ctx, t);
|
671
|
+
} else {
|
672
|
+
gpr_mu_unlock(&t->executor.mu);
|
673
|
+
|
674
|
+
hdr = gpr_malloc(sizeof(*hdr) + sizeof_arg);
|
675
|
+
hdr->stream = optional_stream;
|
676
|
+
hdr->action = action;
|
677
|
+
if (sizeof_arg == 0) {
|
678
|
+
hdr->arg = arg;
|
679
|
+
} else {
|
680
|
+
hdr->arg = hdr + 1;
|
681
|
+
memcpy(hdr->arg, arg, sizeof_arg);
|
682
|
+
}
|
683
|
+
|
684
|
+
gpr_mu_lock(&t->executor.mu);
|
685
|
+
if (!t->executor.global_active) {
|
686
|
+
/* global lock was released while allocating memory: release & retry */
|
687
|
+
gpr_free(hdr);
|
688
|
+
continue;
|
689
|
+
}
|
690
|
+
hdr->next = NULL;
|
691
|
+
if (t->executor.pending_actions_head != NULL) {
|
692
|
+
t->executor.pending_actions_tail =
|
693
|
+
t->executor.pending_actions_tail->next = hdr;
|
694
|
+
} else {
|
695
|
+
t->executor.pending_actions_tail = t->executor.pending_actions_head =
|
696
|
+
hdr;
|
697
|
+
}
|
698
|
+
REF_TRANSPORT(t, "pending_action");
|
699
|
+
gpr_mu_unlock(&t->executor.mu);
|
700
|
+
}
|
701
|
+
break;
|
614
702
|
}
|
615
|
-
check_read_ops(exec_ctx, &t->global);
|
616
703
|
|
617
|
-
|
618
|
-
GPR_TIMER_END("unlock", 0);
|
704
|
+
UNREF_TRANSPORT(exec_ctx, t, "run_global");
|
619
705
|
}
|
620
706
|
|
621
707
|
/*******************************************************************************
|
@@ -645,15 +731,11 @@ static void push_setting(grpc_chttp2_transport *t, grpc_chttp2_setting_id id,
|
|
645
731
|
}
|
646
732
|
}
|
647
733
|
|
648
|
-
void
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
GPR_TIMER_BEGIN("grpc_chttp2_terminate_writing", 0);
|
655
|
-
|
656
|
-
lock(t);
|
734
|
+
static void terminate_writing_with_lock(grpc_exec_ctx *exec_ctx,
|
735
|
+
grpc_chttp2_transport *t,
|
736
|
+
grpc_chttp2_stream *s_ignored,
|
737
|
+
void *a) {
|
738
|
+
bool success = (bool)(uintptr_t)a;
|
657
739
|
|
658
740
|
allow_endpoint_shutdown_locked(exec_ctx, t);
|
659
741
|
|
@@ -663,24 +745,30 @@ void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
|
|
663
745
|
|
664
746
|
grpc_chttp2_cleanup_writing(exec_ctx, &t->global, &t->writing);
|
665
747
|
|
748
|
+
grpc_chttp2_stream_global *stream_global;
|
666
749
|
while (grpc_chttp2_list_pop_closed_waiting_for_writing(&t->global,
|
667
750
|
&stream_global)) {
|
668
751
|
fail_pending_writes(exec_ctx, stream_global);
|
669
752
|
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "finish_writes");
|
670
753
|
}
|
671
754
|
|
672
|
-
/* leave the writing flag up on shutdown to prevent further writes in
|
755
|
+
/* leave the writing flag up on shutdown to prevent further writes in
|
756
|
+
unlock()
|
673
757
|
from starting */
|
674
|
-
t->writing_active = 0;
|
758
|
+
t->executor.writing_active = 0;
|
675
759
|
if (t->ep && !t->endpoint_reading) {
|
676
760
|
destroy_endpoint(exec_ctx, t);
|
677
761
|
}
|
678
762
|
|
679
|
-
unlock(exec_ctx, t);
|
680
|
-
|
681
763
|
UNREF_TRANSPORT(exec_ctx, t, "writing");
|
764
|
+
}
|
682
765
|
|
683
|
-
|
766
|
+
void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
|
767
|
+
void *transport_writing, bool success) {
|
768
|
+
grpc_chttp2_transport *t = TRANSPORT_FROM_WRITING(transport_writing);
|
769
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, t, NULL,
|
770
|
+
terminate_writing_with_lock,
|
771
|
+
(void *)(uintptr_t)success, 0);
|
684
772
|
}
|
685
773
|
|
686
774
|
static void writing_action(grpc_exec_ctx *exec_ctx, void *gt,
|
@@ -695,7 +783,8 @@ void grpc_chttp2_add_incoming_goaway(
|
|
695
783
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
|
696
784
|
uint32_t goaway_error, gpr_slice goaway_text) {
|
697
785
|
char *msg = gpr_dump_slice(goaway_text, GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
698
|
-
|
786
|
+
GRPC_CHTTP2_IF_TRACING(
|
787
|
+
gpr_log(GPR_DEBUG, "got goaway [%d]: %s", goaway_error, msg));
|
699
788
|
gpr_free(msg);
|
700
789
|
gpr_slice_unref(goaway_text);
|
701
790
|
transport_global->seen_goaway = 1;
|
@@ -758,23 +847,35 @@ static void maybe_start_some_streams(
|
|
758
847
|
}
|
759
848
|
}
|
760
849
|
|
850
|
+
#define CLOSURE_BARRIER_STATS_BIT (1 << 0)
|
851
|
+
#define CLOSURE_BARRIER_FAILURE_BIT (1 << 1)
|
852
|
+
#define CLOSURE_BARRIER_FIRST_REF_BIT (1 << 16)
|
853
|
+
|
761
854
|
static grpc_closure *add_closure_barrier(grpc_closure *closure) {
|
762
|
-
closure->final_data +=
|
855
|
+
closure->final_data += CLOSURE_BARRIER_FIRST_REF_BIT;
|
763
856
|
return closure;
|
764
857
|
}
|
765
858
|
|
766
859
|
void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
|
860
|
+
grpc_chttp2_stream_global *stream_global,
|
767
861
|
grpc_closure **pclosure, int success) {
|
768
862
|
grpc_closure *closure = *pclosure;
|
769
863
|
if (closure == NULL) {
|
770
864
|
return;
|
771
865
|
}
|
772
|
-
closure->final_data -=
|
866
|
+
closure->final_data -= CLOSURE_BARRIER_FIRST_REF_BIT;
|
773
867
|
if (!success) {
|
774
|
-
closure->final_data |=
|
868
|
+
closure->final_data |= CLOSURE_BARRIER_FAILURE_BIT;
|
775
869
|
}
|
776
|
-
if (closure->final_data <
|
777
|
-
|
870
|
+
if (closure->final_data < CLOSURE_BARRIER_FIRST_REF_BIT) {
|
871
|
+
if (closure->final_data & CLOSURE_BARRIER_STATS_BIT) {
|
872
|
+
grpc_transport_move_stats(&stream_global->stats,
|
873
|
+
stream_global->collecting_stats);
|
874
|
+
stream_global->collecting_stats = NULL;
|
875
|
+
}
|
876
|
+
grpc_exec_ctx_enqueue(
|
877
|
+
exec_ctx, closure,
|
878
|
+
(closure->final_data & CLOSURE_BARRIER_FAILURE_BIT) == 0, NULL);
|
778
879
|
}
|
779
880
|
*pclosure = NULL;
|
780
881
|
}
|
@@ -794,20 +895,28 @@ static int contains_non_ok_status(
|
|
794
895
|
|
795
896
|
static void do_nothing(grpc_exec_ctx *exec_ctx, void *arg, bool success) {}
|
796
897
|
|
797
|
-
static void perform_stream_op_locked(
|
798
|
-
|
799
|
-
|
800
|
-
grpc_closure *on_complete;
|
801
|
-
|
898
|
+
static void perform_stream_op_locked(grpc_exec_ctx *exec_ctx,
|
899
|
+
grpc_chttp2_transport *t,
|
900
|
+
grpc_chttp2_stream *s, void *stream_op) {
|
802
901
|
GPR_TIMER_BEGIN("perform_stream_op_locked", 0);
|
803
902
|
|
804
|
-
|
903
|
+
grpc_transport_stream_op *op = stream_op;
|
904
|
+
grpc_chttp2_transport_global *transport_global = &t->global;
|
905
|
+
grpc_chttp2_stream_global *stream_global = &s->global;
|
906
|
+
|
907
|
+
grpc_closure *on_complete = op->on_complete;
|
805
908
|
if (on_complete == NULL) {
|
806
909
|
on_complete = grpc_closure_create(do_nothing, NULL);
|
807
910
|
}
|
808
911
|
/* use final_data as a barrier until enqueue time; the inital counter is
|
809
912
|
dropped at the end of this function */
|
810
|
-
on_complete->final_data =
|
913
|
+
on_complete->final_data = CLOSURE_BARRIER_FIRST_REF_BIT;
|
914
|
+
|
915
|
+
if (op->collect_stats != NULL) {
|
916
|
+
GPR_ASSERT(stream_global->collecting_stats == NULL);
|
917
|
+
stream_global->collecting_stats = op->collect_stats;
|
918
|
+
on_complete->final_data |= CLOSURE_BARRIER_STATS_BIT;
|
919
|
+
}
|
811
920
|
|
812
921
|
if (op->cancel_with_status != GRPC_STATUS_OK) {
|
813
922
|
cancel_from_api(exec_ctx, transport_global, stream_global,
|
@@ -840,7 +949,8 @@ static void perform_stream_op_locked(
|
|
840
949
|
}
|
841
950
|
} else {
|
842
951
|
grpc_chttp2_complete_closure_step(
|
843
|
-
exec_ctx,
|
952
|
+
exec_ctx, stream_global,
|
953
|
+
&stream_global->send_initial_metadata_finished, 0);
|
844
954
|
}
|
845
955
|
}
|
846
956
|
|
@@ -850,10 +960,12 @@ static void perform_stream_op_locked(
|
|
850
960
|
stream_global->send_message_finished = add_closure_barrier(on_complete);
|
851
961
|
if (stream_global->write_closed) {
|
852
962
|
grpc_chttp2_complete_closure_step(
|
853
|
-
exec_ctx, &stream_global->send_message_finished, 0);
|
854
|
-
} else
|
963
|
+
exec_ctx, stream_global, &stream_global->send_message_finished, 0);
|
964
|
+
} else {
|
855
965
|
stream_global->send_message = op->send_message;
|
856
|
-
|
966
|
+
if (stream_global->id != 0) {
|
967
|
+
grpc_chttp2_become_writable(transport_global, stream_global);
|
968
|
+
}
|
857
969
|
}
|
858
970
|
}
|
859
971
|
|
@@ -868,7 +980,8 @@ static void perform_stream_op_locked(
|
|
868
980
|
}
|
869
981
|
if (stream_global->write_closed) {
|
870
982
|
grpc_chttp2_complete_closure_step(
|
871
|
-
exec_ctx,
|
983
|
+
exec_ctx, stream_global,
|
984
|
+
&stream_global->send_trailing_metadata_finished,
|
872
985
|
grpc_metadata_batch_is_empty(op->send_trailing_metadata));
|
873
986
|
} else if (stream_global->id != 0) {
|
874
987
|
/* TODO(ctiller): check if there's flow control for any outstanding
|
@@ -907,7 +1020,7 @@ static void perform_stream_op_locked(
|
|
907
1020
|
grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
|
908
1021
|
}
|
909
1022
|
|
910
|
-
grpc_chttp2_complete_closure_step(exec_ctx, &on_complete, 1);
|
1023
|
+
grpc_chttp2_complete_closure_step(exec_ctx, stream_global, &on_complete, 1);
|
911
1024
|
|
912
1025
|
GPR_TIMER_END("perform_stream_op_locked", 0);
|
913
1026
|
}
|
@@ -916,10 +1029,8 @@ static void perform_stream_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
|
916
1029
|
grpc_stream *gs, grpc_transport_stream_op *op) {
|
917
1030
|
grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
|
918
1031
|
grpc_chttp2_stream *s = (grpc_chttp2_stream *)gs;
|
919
|
-
|
920
|
-
|
921
|
-
perform_stream_op_locked(exec_ctx, &t->global, &s->global, op);
|
922
|
-
unlock(exec_ctx, t);
|
1032
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, t, s, perform_stream_op_locked, op,
|
1033
|
+
sizeof(*op));
|
923
1034
|
}
|
924
1035
|
|
925
1036
|
static void send_ping_locked(grpc_chttp2_transport *t, grpc_closure *on_recv) {
|
@@ -939,13 +1050,10 @@ static void send_ping_locked(grpc_chttp2_transport *t, grpc_closure *on_recv) {
|
|
939
1050
|
gpr_slice_buffer_add(&t->global.qbuf, grpc_chttp2_ping_create(0, p->id));
|
940
1051
|
}
|
941
1052
|
|
942
|
-
void
|
943
|
-
|
944
|
-
const uint8_t *opaque_8bytes) {
|
1053
|
+
static void ack_ping_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
1054
|
+
grpc_chttp2_stream *s, void *opaque_8bytes) {
|
945
1055
|
grpc_chttp2_outstanding_ping *ping;
|
946
|
-
grpc_chttp2_transport *t = TRANSPORT_FROM_PARSING(transport_parsing);
|
947
1056
|
grpc_chttp2_transport_global *transport_global = &t->global;
|
948
|
-
lock(t);
|
949
1057
|
for (ping = transport_global->pings.next; ping != &transport_global->pings;
|
950
1058
|
ping = ping->next) {
|
951
1059
|
if (0 == memcmp(opaque_8bytes, ping->id, 8)) {
|
@@ -956,13 +1064,31 @@ void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx,
|
|
956
1064
|
break;
|
957
1065
|
}
|
958
1066
|
}
|
959
|
-
|
1067
|
+
}
|
1068
|
+
|
1069
|
+
void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx,
|
1070
|
+
grpc_chttp2_transport_parsing *transport_parsing,
|
1071
|
+
const uint8_t *opaque_8bytes) {
|
1072
|
+
grpc_chttp2_run_with_global_lock(
|
1073
|
+
exec_ctx, TRANSPORT_FROM_PARSING(transport_parsing), NULL,
|
1074
|
+
ack_ping_locked, (void *)opaque_8bytes, 8);
|
960
1075
|
}
|
961
1076
|
|
962
1077
|
static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx,
|
963
1078
|
grpc_chttp2_transport *t,
|
964
|
-
|
965
|
-
|
1079
|
+
grpc_chttp2_stream *s_unused,
|
1080
|
+
void *stream_op) {
|
1081
|
+
grpc_transport_op *op = stream_op;
|
1082
|
+
bool close_transport = op->disconnect;
|
1083
|
+
|
1084
|
+
/* If there's a set_accept_stream ensure that we're not parsing
|
1085
|
+
to avoid changing things out from underneath */
|
1086
|
+
if (t->executor.parsing_active && op->set_accept_stream) {
|
1087
|
+
GPR_ASSERT(t->post_parsing_op == NULL);
|
1088
|
+
t->post_parsing_op = gpr_malloc(sizeof(*op));
|
1089
|
+
memcpy(t->post_parsing_op, op, sizeof(*op));
|
1090
|
+
return;
|
1091
|
+
}
|
966
1092
|
|
967
1093
|
grpc_exec_ctx_enqueue(exec_ctx, op->on_consumed, true, NULL);
|
968
1094
|
|
@@ -988,47 +1114,31 @@ static void perform_transport_op_locked(grpc_exec_ctx *exec_ctx,
|
|
988
1114
|
}
|
989
1115
|
|
990
1116
|
if (op->bind_pollset) {
|
991
|
-
add_to_pollset_locked(exec_ctx, t, op->bind_pollset);
|
1117
|
+
add_to_pollset_locked(exec_ctx, t, NULL, op->bind_pollset);
|
992
1118
|
}
|
993
1119
|
|
994
1120
|
if (op->bind_pollset_set) {
|
995
|
-
add_to_pollset_set_locked(exec_ctx, t, op->bind_pollset_set);
|
1121
|
+
add_to_pollset_set_locked(exec_ctx, t, NULL, op->bind_pollset_set);
|
996
1122
|
}
|
997
1123
|
|
998
1124
|
if (op->send_ping) {
|
999
1125
|
send_ping_locked(t, op->send_ping);
|
1000
1126
|
}
|
1001
1127
|
|
1002
|
-
if (op->disconnect) {
|
1003
|
-
close_transport_locked(exec_ctx, t);
|
1004
|
-
}
|
1005
|
-
|
1006
1128
|
if (close_transport) {
|
1007
|
-
close_transport_locked(exec_ctx, t);
|
1129
|
+
close_transport_locked(exec_ctx, t, NULL, NULL);
|
1008
1130
|
}
|
1009
1131
|
}
|
1010
1132
|
|
1011
1133
|
static void perform_transport_op(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
1012
1134
|
grpc_transport_op *op) {
|
1013
1135
|
grpc_chttp2_transport *t = (grpc_chttp2_transport *)gt;
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
/* If there's a set_accept_stream ensure that we're not parsing
|
1018
|
-
to avoid changing things out from underneath */
|
1019
|
-
if (t->parsing_active && op->set_accept_stream) {
|
1020
|
-
GPR_ASSERT(t->post_parsing_op == NULL);
|
1021
|
-
t->post_parsing_op = gpr_malloc(sizeof(*op));
|
1022
|
-
memcpy(t->post_parsing_op, op, sizeof(*op));
|
1023
|
-
} else {
|
1024
|
-
perform_transport_op_locked(exec_ctx, t, op);
|
1025
|
-
}
|
1026
|
-
|
1027
|
-
unlock(exec_ctx, t);
|
1136
|
+
grpc_chttp2_run_with_global_lock(
|
1137
|
+
exec_ctx, t, NULL, perform_transport_op_locked, op, sizeof(*op));
|
1028
1138
|
}
|
1029
1139
|
|
1030
1140
|
/*******************************************************************************
|
1031
|
-
* INPUT PROCESSING
|
1141
|
+
* INPUT PROCESSING - GENERAL
|
1032
1142
|
*/
|
1033
1143
|
|
1034
1144
|
static void check_read_ops(grpc_exec_ctx *exec_ctx,
|
@@ -1050,7 +1160,7 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx,
|
|
1050
1160
|
while (stream_global->seen_error &&
|
1051
1161
|
(bs = grpc_chttp2_incoming_frame_queue_pop(
|
1052
1162
|
&stream_global->incoming_frames)) != NULL) {
|
1053
|
-
|
1163
|
+
incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs);
|
1054
1164
|
}
|
1055
1165
|
if (stream_global->incoming_frames.head != NULL) {
|
1056
1166
|
*stream_global->recv_message = grpc_chttp2_incoming_frame_queue_pop(
|
@@ -1071,19 +1181,29 @@ static void check_read_ops(grpc_exec_ctx *exec_ctx,
|
|
1071
1181
|
while (stream_global->seen_error &&
|
1072
1182
|
(bs = grpc_chttp2_incoming_frame_queue_pop(
|
1073
1183
|
&stream_global->incoming_frames)) != NULL) {
|
1074
|
-
|
1184
|
+
incoming_byte_stream_destroy_locked(exec_ctx, NULL, NULL, bs);
|
1075
1185
|
}
|
1076
|
-
if (stream_global->
|
1186
|
+
if (stream_global->all_incoming_byte_streams_finished) {
|
1077
1187
|
grpc_chttp2_incoming_metadata_buffer_publish(
|
1078
1188
|
&stream_global->received_trailing_metadata,
|
1079
1189
|
stream_global->recv_trailing_metadata);
|
1080
1190
|
grpc_chttp2_complete_closure_step(
|
1081
|
-
exec_ctx,
|
1191
|
+
exec_ctx, stream_global,
|
1192
|
+
&stream_global->recv_trailing_metadata_finished, 1);
|
1082
1193
|
}
|
1083
1194
|
}
|
1084
1195
|
}
|
1085
1196
|
}
|
1086
1197
|
|
1198
|
+
static void decrement_active_streams_locked(
|
1199
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
|
1200
|
+
grpc_chttp2_stream_global *stream_global) {
|
1201
|
+
if ((stream_global->all_incoming_byte_streams_finished =
|
1202
|
+
gpr_unref(&stream_global->active_streams))) {
|
1203
|
+
grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
|
1204
|
+
}
|
1205
|
+
}
|
1206
|
+
|
1087
1207
|
static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
1088
1208
|
uint32_t id) {
|
1089
1209
|
size_t new_stream_count;
|
@@ -1105,7 +1225,7 @@ static void remove_stream(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
|
1105
1225
|
}
|
1106
1226
|
|
1107
1227
|
if (grpc_chttp2_unregister_stream(t, s) && t->global.sent_goaway) {
|
1108
|
-
close_transport_locked(exec_ctx, t);
|
1228
|
+
close_transport_locked(exec_ctx, t, NULL, NULL);
|
1109
1229
|
}
|
1110
1230
|
if (grpc_chttp2_list_remove_writable_stream(&t->global, &s->global)) {
|
1111
1231
|
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, &s->global, "chttp2_writing");
|
@@ -1124,15 +1244,22 @@ static void cancel_from_api(grpc_exec_ctx *exec_ctx,
|
|
1124
1244
|
grpc_chttp2_transport_global *transport_global,
|
1125
1245
|
grpc_chttp2_stream_global *stream_global,
|
1126
1246
|
grpc_status_code status) {
|
1127
|
-
if (stream_global->
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1247
|
+
if (!stream_global->read_closed || !stream_global->write_closed) {
|
1248
|
+
if (stream_global->id != 0) {
|
1249
|
+
gpr_slice_buffer_add(
|
1250
|
+
&transport_global->qbuf,
|
1251
|
+
grpc_chttp2_rst_stream_create(
|
1252
|
+
stream_global->id,
|
1253
|
+
(uint32_t)grpc_chttp2_grpc_status_to_http2_error(status),
|
1254
|
+
&stream_global->stats.outgoing));
|
1255
|
+
}
|
1256
|
+
grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global, status,
|
1257
|
+
NULL);
|
1258
|
+
}
|
1259
|
+
if (status != GRPC_STATUS_OK && !stream_global->seen_error) {
|
1260
|
+
stream_global->seen_error = 1;
|
1261
|
+
grpc_chttp2_list_add_check_read_ops(transport_global, stream_global);
|
1133
1262
|
}
|
1134
|
-
grpc_chttp2_fake_status(exec_ctx, transport_global, stream_global, status,
|
1135
|
-
NULL);
|
1136
1263
|
grpc_chttp2_mark_stream_closed(exec_ctx, transport_global, stream_global, 1,
|
1137
1264
|
1);
|
1138
1265
|
}
|
@@ -1177,10 +1304,12 @@ void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx,
|
|
1177
1304
|
static void fail_pending_writes(grpc_exec_ctx *exec_ctx,
|
1178
1305
|
grpc_chttp2_stream_global *stream_global) {
|
1179
1306
|
grpc_chttp2_complete_closure_step(
|
1180
|
-
exec_ctx, &stream_global->send_initial_metadata_finished,
|
1307
|
+
exec_ctx, stream_global, &stream_global->send_initial_metadata_finished,
|
1308
|
+
0);
|
1181
1309
|
grpc_chttp2_complete_closure_step(
|
1182
|
-
exec_ctx, &stream_global->send_trailing_metadata_finished,
|
1183
|
-
|
1310
|
+
exec_ctx, stream_global, &stream_global->send_trailing_metadata_finished,
|
1311
|
+
0);
|
1312
|
+
grpc_chttp2_complete_closure_step(exec_ctx, stream_global,
|
1184
1313
|
&stream_global->send_message_finished, 0);
|
1185
1314
|
}
|
1186
1315
|
|
@@ -1197,10 +1326,11 @@ void grpc_chttp2_mark_stream_closed(
|
|
1197
1326
|
stream_global->read_closed = 1;
|
1198
1327
|
stream_global->published_initial_metadata = 1;
|
1199
1328
|
stream_global->published_trailing_metadata = 1;
|
1329
|
+
decrement_active_streams_locked(exec_ctx, transport_global, stream_global);
|
1200
1330
|
}
|
1201
1331
|
if (close_writes && !stream_global->write_closed) {
|
1202
1332
|
stream_global->write_closed = 1;
|
1203
|
-
if (TRANSPORT_FROM_GLOBAL(transport_global)->writing_active) {
|
1333
|
+
if (TRANSPORT_FROM_GLOBAL(transport_global)->executor.writing_active) {
|
1204
1334
|
GRPC_CHTTP2_STREAM_REF(stream_global, "finish_writes");
|
1205
1335
|
grpc_chttp2_list_add_closed_waiting_for_writing(transport_global,
|
1206
1336
|
stream_global);
|
@@ -1210,7 +1340,7 @@ void grpc_chttp2_mark_stream_closed(
|
|
1210
1340
|
}
|
1211
1341
|
if (stream_global->read_closed && stream_global->write_closed) {
|
1212
1342
|
if (stream_global->id != 0 &&
|
1213
|
-
TRANSPORT_FROM_GLOBAL(transport_global)->parsing_active) {
|
1343
|
+
TRANSPORT_FROM_GLOBAL(transport_global)->executor.parsing_active) {
|
1214
1344
|
grpc_chttp2_list_add_closed_waiting_for_parsing(transport_global,
|
1215
1345
|
stream_global);
|
1216
1346
|
} else {
|
@@ -1317,7 +1447,8 @@ static void close_from_api(grpc_exec_ctx *exec_ctx,
|
|
1317
1447
|
|
1318
1448
|
gpr_slice_buffer_add(
|
1319
1449
|
&transport_global->qbuf,
|
1320
|
-
grpc_chttp2_rst_stream_create(stream_global->id, GRPC_CHTTP2_NO_ERROR
|
1450
|
+
grpc_chttp2_rst_stream_create(stream_global->id, GRPC_CHTTP2_NO_ERROR,
|
1451
|
+
&stream_global->stats.outgoing));
|
1321
1452
|
|
1322
1453
|
if (optional_message) {
|
1323
1454
|
gpr_slice_ref(*optional_message);
|
@@ -1341,7 +1472,7 @@ static void end_all_the_calls(grpc_exec_ctx *exec_ctx,
|
|
1341
1472
|
}
|
1342
1473
|
|
1343
1474
|
static void drop_connection(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t) {
|
1344
|
-
close_transport_locked(exec_ctx, t);
|
1475
|
+
close_transport_locked(exec_ctx, t, NULL, NULL);
|
1345
1476
|
end_all_the_calls(exec_ctx, t);
|
1346
1477
|
}
|
1347
1478
|
|
@@ -1365,102 +1496,136 @@ static void update_global_window(void *args, uint32_t id, void *stream) {
|
|
1365
1496
|
}
|
1366
1497
|
}
|
1367
1498
|
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1371
|
-
if (!t->writing_active && t->ep) {
|
1372
|
-
destroy_endpoint(exec_ctx, t);
|
1373
|
-
}
|
1374
|
-
}
|
1499
|
+
/*******************************************************************************
|
1500
|
+
* INPUT PROCESSING - PARSING
|
1501
|
+
*/
|
1375
1502
|
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1503
|
+
static void reading_action_locked(grpc_exec_ctx *exec_ctx,
|
1504
|
+
grpc_chttp2_transport *t,
|
1505
|
+
grpc_chttp2_stream *s_unused, void *arg);
|
1506
|
+
static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, bool success);
|
1507
|
+
static void post_reading_action_locked(grpc_exec_ctx *exec_ctx,
|
1508
|
+
grpc_chttp2_transport *t,
|
1509
|
+
grpc_chttp2_stream *s_unused, void *arg);
|
1510
|
+
static void post_parse_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
1511
|
+
grpc_chttp2_stream *s_unused, void *arg);
|
1512
|
+
|
1513
|
+
static void reading_action(grpc_exec_ctx *exec_ctx, void *tp, bool success) {
|
1514
|
+
/* Control flow:
|
1515
|
+
reading_action_locked ->
|
1516
|
+
(parse_unlocked -> post_parse_locked)? ->
|
1517
|
+
post_reading_action_locked */
|
1518
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, tp, NULL, reading_action_locked,
|
1519
|
+
(void *)(uintptr_t)success, 0);
|
1520
|
+
}
|
1521
|
+
|
1522
|
+
static void reading_action_locked(grpc_exec_ctx *exec_ctx,
|
1523
|
+
grpc_chttp2_transport *t,
|
1524
|
+
grpc_chttp2_stream *s_unused, void *arg) {
|
1381
1525
|
grpc_chttp2_transport_global *transport_global = &t->global;
|
1382
1526
|
grpc_chttp2_transport_parsing *transport_parsing = &t->parsing;
|
1383
|
-
|
1384
|
-
|
1385
|
-
GPR_TIMER_BEGIN("recv_data", 0);
|
1527
|
+
bool success = (bool)(uintptr_t)arg;
|
1386
1528
|
|
1387
|
-
|
1388
|
-
i = 0;
|
1389
|
-
GPR_ASSERT(!t->parsing_active);
|
1529
|
+
GPR_ASSERT(!t->executor.parsing_active);
|
1390
1530
|
if (!t->closed) {
|
1391
|
-
t->parsing_active = 1;
|
1531
|
+
t->executor.parsing_active = 1;
|
1392
1532
|
/* merge stream lists */
|
1393
1533
|
grpc_chttp2_stream_map_move_into(&t->new_stream_map,
|
1394
1534
|
&t->parsing_stream_map);
|
1395
1535
|
grpc_chttp2_prepare_to_read(transport_global, transport_parsing);
|
1396
|
-
|
1397
|
-
|
1398
|
-
|
1399
|
-
|
1400
|
-
|
1401
|
-
|
1402
|
-
|
1403
|
-
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
|
1426
|
-
|
1427
|
-
|
1428
|
-
t->
|
1429
|
-
|
1430
|
-
|
1431
|
-
|
1432
|
-
|
1433
|
-
|
1434
|
-
|
1435
|
-
|
1436
|
-
|
1437
|
-
|
1438
|
-
|
1439
|
-
|
1440
|
-
|
1441
|
-
|
1442
|
-
|
1536
|
+
grpc_exec_ctx_enqueue(exec_ctx, &t->parsing_action, success, NULL);
|
1537
|
+
} else {
|
1538
|
+
post_reading_action_locked(exec_ctx, t, s_unused, arg);
|
1539
|
+
}
|
1540
|
+
}
|
1541
|
+
|
1542
|
+
static void parsing_action(grpc_exec_ctx *exec_ctx, void *arg, bool success) {
|
1543
|
+
grpc_chttp2_transport *t = arg;
|
1544
|
+
GPR_TIMER_BEGIN("reading_action.parse", 0);
|
1545
|
+
size_t i = 0;
|
1546
|
+
for (; i < t->read_buffer.count &&
|
1547
|
+
grpc_chttp2_perform_read(exec_ctx, &t->parsing,
|
1548
|
+
t->read_buffer.slices[i]);
|
1549
|
+
i++)
|
1550
|
+
;
|
1551
|
+
if (i != t->read_buffer.count) {
|
1552
|
+
success = false;
|
1553
|
+
}
|
1554
|
+
GPR_TIMER_END("reading_action.parse", 0);
|
1555
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, t, NULL, post_parse_locked,
|
1556
|
+
(void *)(uintptr_t)success, 0);
|
1557
|
+
}
|
1558
|
+
|
1559
|
+
static void post_parse_locked(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
1560
|
+
grpc_chttp2_stream *s_unused, void *arg) {
|
1561
|
+
grpc_chttp2_transport_global *transport_global = &t->global;
|
1562
|
+
grpc_chttp2_transport_parsing *transport_parsing = &t->parsing;
|
1563
|
+
/* copy parsing qbuf to global qbuf */
|
1564
|
+
gpr_slice_buffer_move_into(&t->parsing.qbuf, &t->global.qbuf);
|
1565
|
+
/* merge stream lists */
|
1566
|
+
grpc_chttp2_stream_map_move_into(&t->new_stream_map, &t->parsing_stream_map);
|
1567
|
+
transport_global->concurrent_stream_count =
|
1568
|
+
(uint32_t)grpc_chttp2_stream_map_size(&t->parsing_stream_map);
|
1569
|
+
if (transport_parsing->initial_window_update != 0) {
|
1570
|
+
grpc_chttp2_stream_map_for_each(&t->parsing_stream_map,
|
1571
|
+
update_global_window, t);
|
1572
|
+
transport_parsing->initial_window_update = 0;
|
1573
|
+
}
|
1574
|
+
/* handle higher level things */
|
1575
|
+
grpc_chttp2_publish_reads(exec_ctx, transport_global, transport_parsing);
|
1576
|
+
t->executor.parsing_active = 0;
|
1577
|
+
/* handle delayed transport ops (if there is one) */
|
1578
|
+
if (t->post_parsing_op) {
|
1579
|
+
grpc_transport_op *op = t->post_parsing_op;
|
1580
|
+
t->post_parsing_op = NULL;
|
1581
|
+
perform_transport_op_locked(exec_ctx, t, NULL, op);
|
1582
|
+
gpr_free(op);
|
1583
|
+
}
|
1584
|
+
/* if a stream is in the stream map, and gets cancelled, we need to
|
1585
|
+
* ensure we are not parsing before continuing the cancellation to keep
|
1586
|
+
* things in a sane state */
|
1587
|
+
grpc_chttp2_stream_global *stream_global;
|
1588
|
+
while (grpc_chttp2_list_pop_closed_waiting_for_parsing(transport_global,
|
1589
|
+
&stream_global)) {
|
1590
|
+
GPR_ASSERT(stream_global->in_stream_map);
|
1591
|
+
GPR_ASSERT(stream_global->write_closed);
|
1592
|
+
GPR_ASSERT(stream_global->read_closed);
|
1593
|
+
remove_stream(exec_ctx, t, stream_global->id);
|
1594
|
+
GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream_global, "chttp2");
|
1443
1595
|
}
|
1444
|
-
|
1596
|
+
|
1597
|
+
post_reading_action_locked(exec_ctx, t, s_unused, arg);
|
1598
|
+
}
|
1599
|
+
|
1600
|
+
static void post_reading_action_locked(grpc_exec_ctx *exec_ctx,
|
1601
|
+
grpc_chttp2_transport *t,
|
1602
|
+
grpc_chttp2_stream *s_unused,
|
1603
|
+
void *arg) {
|
1604
|
+
bool success = (bool)(uintptr_t)arg;
|
1605
|
+
bool keep_reading = false;
|
1606
|
+
if (!success || t->closed) {
|
1445
1607
|
drop_connection(exec_ctx, t);
|
1446
|
-
|
1608
|
+
t->endpoint_reading = 0;
|
1609
|
+
if (!t->executor.writing_active && t->ep) {
|
1610
|
+
grpc_endpoint_destroy(exec_ctx, t->ep);
|
1611
|
+
t->ep = NULL;
|
1612
|
+
/* safe as we still have a ref for read */
|
1613
|
+
UNREF_TRANSPORT(exec_ctx, t, "disconnect");
|
1614
|
+
}
|
1447
1615
|
} else if (!t->closed) {
|
1448
|
-
keep_reading =
|
1616
|
+
keep_reading = true;
|
1449
1617
|
REF_TRANSPORT(t, "keep_reading");
|
1450
1618
|
prevent_endpoint_shutdown(t);
|
1451
1619
|
}
|
1452
1620
|
gpr_slice_buffer_reset_and_unref(&t->read_buffer);
|
1453
|
-
unlock(exec_ctx, t);
|
1454
1621
|
|
1455
1622
|
if (keep_reading) {
|
1456
|
-
grpc_endpoint_read(exec_ctx, t->ep, &t->read_buffer, &t->
|
1457
|
-
|
1623
|
+
grpc_endpoint_read(exec_ctx, t->ep, &t->read_buffer, &t->reading_action);
|
1624
|
+
allow_endpoint_shutdown_locked(exec_ctx, t);
|
1458
1625
|
UNREF_TRANSPORT(exec_ctx, t, "keep_reading");
|
1459
1626
|
} else {
|
1460
|
-
UNREF_TRANSPORT(exec_ctx, t, "
|
1627
|
+
UNREF_TRANSPORT(exec_ctx, t, "reading_action");
|
1461
1628
|
}
|
1462
|
-
|
1463
|
-
GPR_TIMER_END("recv_data", 0);
|
1464
1629
|
}
|
1465
1630
|
|
1466
1631
|
/*******************************************************************************
|
@@ -1472,9 +1637,10 @@ static void connectivity_state_set(
|
|
1472
1637
|
grpc_connectivity_state state, const char *reason) {
|
1473
1638
|
GRPC_CHTTP2_IF_TRACING(
|
1474
1639
|
gpr_log(GPR_DEBUG, "set connectivity_state=%d", state));
|
1475
|
-
grpc_connectivity_state_set(
|
1476
|
-
|
1477
|
-
|
1640
|
+
grpc_connectivity_state_set(
|
1641
|
+
exec_ctx,
|
1642
|
+
&TRANSPORT_FROM_GLOBAL(transport_global)->channel_callback.state_tracker,
|
1643
|
+
state, reason);
|
1478
1644
|
}
|
1479
1645
|
|
1480
1646
|
/*******************************************************************************
|
@@ -1483,7 +1649,7 @@ static void connectivity_state_set(
|
|
1483
1649
|
|
1484
1650
|
static void add_to_pollset_locked(grpc_exec_ctx *exec_ctx,
|
1485
1651
|
grpc_chttp2_transport *t,
|
1486
|
-
|
1652
|
+
grpc_chttp2_stream *s_unused, void *pollset) {
|
1487
1653
|
if (t->ep) {
|
1488
1654
|
grpc_endpoint_add_to_pollset(exec_ctx, t->ep, pollset);
|
1489
1655
|
}
|
@@ -1491,7 +1657,8 @@ static void add_to_pollset_locked(grpc_exec_ctx *exec_ctx,
|
|
1491
1657
|
|
1492
1658
|
static void add_to_pollset_set_locked(grpc_exec_ctx *exec_ctx,
|
1493
1659
|
grpc_chttp2_transport *t,
|
1494
|
-
|
1660
|
+
grpc_chttp2_stream *s_unused,
|
1661
|
+
void *pollset_set) {
|
1495
1662
|
if (t->ep) {
|
1496
1663
|
grpc_endpoint_add_to_pollset_set(exec_ctx, t->ep, pollset_set);
|
1497
1664
|
}
|
@@ -1499,16 +1666,24 @@ static void add_to_pollset_set_locked(grpc_exec_ctx *exec_ctx,
|
|
1499
1666
|
|
1500
1667
|
static void set_pollset(grpc_exec_ctx *exec_ctx, grpc_transport *gt,
|
1501
1668
|
grpc_stream *gs, grpc_pollset *pollset) {
|
1502
|
-
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1669
|
+
/* TODO(ctiller): keep pollset alive */
|
1670
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, (grpc_chttp2_transport *)gt,
|
1671
|
+
(grpc_chttp2_stream *)gs,
|
1672
|
+
add_to_pollset_locked, pollset, 0);
|
1506
1673
|
}
|
1507
1674
|
|
1508
1675
|
/*******************************************************************************
|
1509
1676
|
* BYTE STREAM
|
1510
1677
|
*/
|
1511
1678
|
|
1679
|
+
static void incoming_byte_stream_unref(grpc_exec_ctx *exec_ctx,
|
1680
|
+
grpc_chttp2_incoming_byte_stream *bs) {
|
1681
|
+
if (gpr_unref(&bs->refs)) {
|
1682
|
+
gpr_slice_buffer_destroy(&bs->slices);
|
1683
|
+
gpr_free(bs);
|
1684
|
+
}
|
1685
|
+
}
|
1686
|
+
|
1512
1687
|
static void incoming_byte_stream_update_flow_control(
|
1513
1688
|
grpc_chttp2_transport_global *transport_global,
|
1514
1689
|
grpc_chttp2_stream_global *stream_global, size_t max_size_hint,
|
@@ -1549,87 +1724,146 @@ static void incoming_byte_stream_update_flow_control(
|
|
1549
1724
|
}
|
1550
1725
|
}
|
1551
1726
|
|
1552
|
-
|
1553
|
-
|
1554
|
-
|
1555
|
-
|
1727
|
+
typedef struct {
|
1728
|
+
grpc_chttp2_incoming_byte_stream *byte_stream;
|
1729
|
+
gpr_slice *slice;
|
1730
|
+
size_t max_size_hint;
|
1731
|
+
grpc_closure *on_complete;
|
1732
|
+
} incoming_byte_stream_next_arg;
|
1733
|
+
|
1734
|
+
static void incoming_byte_stream_next_locked(grpc_exec_ctx *exec_ctx,
|
1735
|
+
grpc_chttp2_transport *t,
|
1736
|
+
grpc_chttp2_stream *s,
|
1737
|
+
void *argp) {
|
1738
|
+
incoming_byte_stream_next_arg *arg = argp;
|
1556
1739
|
grpc_chttp2_incoming_byte_stream *bs =
|
1557
|
-
(grpc_chttp2_incoming_byte_stream *)byte_stream;
|
1740
|
+
(grpc_chttp2_incoming_byte_stream *)arg->byte_stream;
|
1558
1741
|
grpc_chttp2_transport_global *transport_global = &bs->transport->global;
|
1559
1742
|
grpc_chttp2_stream_global *stream_global = &bs->stream->global;
|
1560
1743
|
|
1561
|
-
lock(bs->transport);
|
1562
1744
|
if (bs->is_tail) {
|
1563
|
-
incoming_byte_stream_update_flow_control(
|
1564
|
-
|
1745
|
+
incoming_byte_stream_update_flow_control(
|
1746
|
+
transport_global, stream_global, arg->max_size_hint, bs->slices.length);
|
1565
1747
|
}
|
1566
1748
|
if (bs->slices.count > 0) {
|
1567
|
-
*slice = gpr_slice_buffer_take_first(&bs->slices);
|
1568
|
-
|
1569
|
-
return 1;
|
1749
|
+
*arg->slice = gpr_slice_buffer_take_first(&bs->slices);
|
1750
|
+
grpc_exec_ctx_enqueue(exec_ctx, arg->on_complete, true, NULL);
|
1570
1751
|
} else if (bs->failed) {
|
1571
|
-
grpc_exec_ctx_enqueue(exec_ctx, on_complete, false, NULL);
|
1572
|
-
unlock(exec_ctx, bs->transport);
|
1573
|
-
return 0;
|
1752
|
+
grpc_exec_ctx_enqueue(exec_ctx, arg->on_complete, false, NULL);
|
1574
1753
|
} else {
|
1575
|
-
bs->on_next = on_complete;
|
1576
|
-
bs->next = slice;
|
1577
|
-
unlock(exec_ctx, bs->transport);
|
1578
|
-
return 0;
|
1754
|
+
bs->on_next = arg->on_complete;
|
1755
|
+
bs->next = arg->slice;
|
1579
1756
|
}
|
1757
|
+
incoming_byte_stream_unref(exec_ctx, bs);
|
1580
1758
|
}
|
1581
1759
|
|
1582
|
-
static
|
1583
|
-
|
1584
|
-
|
1585
|
-
|
1586
|
-
|
1760
|
+
static int incoming_byte_stream_next(grpc_exec_ctx *exec_ctx,
|
1761
|
+
grpc_byte_stream *byte_stream,
|
1762
|
+
gpr_slice *slice, size_t max_size_hint,
|
1763
|
+
grpc_closure *on_complete) {
|
1764
|
+
grpc_chttp2_incoming_byte_stream *bs =
|
1765
|
+
(grpc_chttp2_incoming_byte_stream *)byte_stream;
|
1766
|
+
incoming_byte_stream_next_arg arg = {bs, slice, max_size_hint, on_complete};
|
1767
|
+
gpr_ref(&bs->refs);
|
1768
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, bs->transport, bs->stream,
|
1769
|
+
incoming_byte_stream_next_locked, &arg,
|
1770
|
+
sizeof(arg));
|
1771
|
+
return 0;
|
1772
|
+
}
|
1773
|
+
|
1774
|
+
static void incoming_byte_stream_destroy(grpc_exec_ctx *exec_ctx,
|
1775
|
+
grpc_byte_stream *byte_stream);
|
1776
|
+
|
1777
|
+
static void incoming_byte_stream_destroy_locked(grpc_exec_ctx *exec_ctx,
|
1778
|
+
grpc_chttp2_transport *t,
|
1779
|
+
grpc_chttp2_stream *s,
|
1780
|
+
void *byte_stream) {
|
1781
|
+
grpc_chttp2_incoming_byte_stream *bs = byte_stream;
|
1782
|
+
GPR_ASSERT(bs->base.destroy == incoming_byte_stream_destroy);
|
1783
|
+
decrement_active_streams_locked(exec_ctx, &bs->transport->global,
|
1784
|
+
&bs->stream->global);
|
1785
|
+
incoming_byte_stream_unref(exec_ctx, bs);
|
1587
1786
|
}
|
1588
1787
|
|
1589
1788
|
static void incoming_byte_stream_destroy(grpc_exec_ctx *exec_ctx,
|
1590
1789
|
grpc_byte_stream *byte_stream) {
|
1591
|
-
|
1790
|
+
grpc_chttp2_incoming_byte_stream *bs =
|
1791
|
+
(grpc_chttp2_incoming_byte_stream *)byte_stream;
|
1792
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, bs->transport, bs->stream,
|
1793
|
+
incoming_byte_stream_destroy_locked, bs, 0);
|
1592
1794
|
}
|
1593
1795
|
|
1594
|
-
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1796
|
+
typedef struct {
|
1797
|
+
grpc_chttp2_incoming_byte_stream *byte_stream;
|
1798
|
+
gpr_slice slice;
|
1799
|
+
} incoming_byte_stream_push_arg;
|
1800
|
+
|
1801
|
+
static void incoming_byte_stream_push_locked(grpc_exec_ctx *exec_ctx,
|
1802
|
+
grpc_chttp2_transport *t,
|
1803
|
+
grpc_chttp2_stream *s,
|
1804
|
+
void *argp) {
|
1805
|
+
incoming_byte_stream_push_arg *arg = argp;
|
1806
|
+
grpc_chttp2_incoming_byte_stream *bs = arg->byte_stream;
|
1598
1807
|
if (bs->on_next != NULL) {
|
1599
|
-
*bs->next = slice;
|
1808
|
+
*bs->next = arg->slice;
|
1600
1809
|
grpc_exec_ctx_enqueue(exec_ctx, bs->on_next, true, NULL);
|
1601
1810
|
bs->on_next = NULL;
|
1602
1811
|
} else {
|
1603
|
-
gpr_slice_buffer_add(&bs->slices, slice);
|
1812
|
+
gpr_slice_buffer_add(&bs->slices, arg->slice);
|
1604
1813
|
}
|
1605
|
-
|
1814
|
+
incoming_byte_stream_unref(exec_ctx, bs);
|
1815
|
+
}
|
1816
|
+
|
1817
|
+
void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx,
|
1818
|
+
grpc_chttp2_incoming_byte_stream *bs,
|
1819
|
+
gpr_slice slice) {
|
1820
|
+
incoming_byte_stream_push_arg arg = {bs, slice};
|
1821
|
+
gpr_ref(&bs->refs);
|
1822
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, bs->transport, bs->stream,
|
1823
|
+
incoming_byte_stream_push_locked, &arg,
|
1824
|
+
sizeof(arg));
|
1825
|
+
}
|
1826
|
+
|
1827
|
+
static void incoming_byte_stream_finished_failed_locked(
|
1828
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s,
|
1829
|
+
void *argp) {
|
1830
|
+
grpc_chttp2_incoming_byte_stream *bs = argp;
|
1831
|
+
grpc_exec_ctx_enqueue(exec_ctx, bs->on_next, false, NULL);
|
1832
|
+
bs->on_next = NULL;
|
1833
|
+
bs->failed = 1;
|
1834
|
+
incoming_byte_stream_unref(exec_ctx, bs);
|
1835
|
+
}
|
1836
|
+
|
1837
|
+
static void incoming_byte_stream_finished_ok_locked(grpc_exec_ctx *exec_ctx,
|
1838
|
+
grpc_chttp2_transport *t,
|
1839
|
+
grpc_chttp2_stream *s,
|
1840
|
+
void *argp) {
|
1841
|
+
grpc_chttp2_incoming_byte_stream *bs = argp;
|
1842
|
+
incoming_byte_stream_unref(exec_ctx, bs);
|
1606
1843
|
}
|
1607
1844
|
|
1608
1845
|
void grpc_chttp2_incoming_byte_stream_finished(
|
1609
1846
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs, int success,
|
1610
1847
|
int from_parsing_thread) {
|
1611
|
-
if (
|
1612
|
-
if (
|
1613
|
-
|
1614
|
-
|
1615
|
-
|
1616
|
-
|
1617
|
-
|
1618
|
-
|
1619
|
-
gpr_mu_unlock(&bs->transport->mu);
|
1848
|
+
if (from_parsing_thread) {
|
1849
|
+
if (success) {
|
1850
|
+
grpc_chttp2_run_with_global_lock(exec_ctx, bs->transport, bs->stream,
|
1851
|
+
incoming_byte_stream_finished_ok_locked,
|
1852
|
+
bs, 0);
|
1853
|
+
} else {
|
1854
|
+
incoming_byte_stream_finished_ok_locked(exec_ctx, bs->transport,
|
1855
|
+
bs->stream, bs);
|
1620
1856
|
}
|
1621
1857
|
} else {
|
1622
|
-
|
1623
|
-
|
1624
|
-
|
1625
|
-
|
1626
|
-
|
1627
|
-
|
1628
|
-
|
1858
|
+
if (success) {
|
1859
|
+
grpc_chttp2_run_with_global_lock(
|
1860
|
+
exec_ctx, bs->transport, bs->stream,
|
1861
|
+
incoming_byte_stream_finished_failed_locked, bs, 0);
|
1862
|
+
} else {
|
1863
|
+
incoming_byte_stream_finished_failed_locked(exec_ctx, bs->transport,
|
1864
|
+
bs->stream, bs);
|
1629
1865
|
}
|
1630
|
-
#endif
|
1631
1866
|
}
|
1632
|
-
incoming_byte_stream_unref(bs);
|
1633
1867
|
}
|
1634
1868
|
|
1635
1869
|
grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
|
@@ -1646,6 +1880,7 @@ grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
|
|
1646
1880
|
incoming_byte_stream->next_message = NULL;
|
1647
1881
|
incoming_byte_stream->transport = TRANSPORT_FROM_PARSING(transport_parsing);
|
1648
1882
|
incoming_byte_stream->stream = STREAM_FROM_PARSING(stream_parsing);
|
1883
|
+
gpr_ref(&incoming_byte_stream->stream->global.active_streams);
|
1649
1884
|
gpr_slice_buffer_init(&incoming_byte_stream->slices);
|
1650
1885
|
incoming_byte_stream->on_next = NULL;
|
1651
1886
|
incoming_byte_stream->is_tail = 1;
|
@@ -1754,9 +1989,15 @@ static char *chttp2_get_peer(grpc_exec_ctx *exec_ctx, grpc_transport *t) {
|
|
1754
1989
|
return gpr_strdup(((grpc_chttp2_transport *)t)->peer_string);
|
1755
1990
|
}
|
1756
1991
|
|
1757
|
-
static const grpc_transport_vtable vtable = {
|
1758
|
-
|
1759
|
-
|
1992
|
+
static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream),
|
1993
|
+
"chttp2",
|
1994
|
+
init_stream,
|
1995
|
+
set_pollset,
|
1996
|
+
perform_stream_op,
|
1997
|
+
perform_transport_op,
|
1998
|
+
destroy_stream,
|
1999
|
+
destroy_transport,
|
2000
|
+
chttp2_get_peer};
|
1760
2001
|
|
1761
2002
|
grpc_transport *grpc_create_chttp2_transport(
|
1762
2003
|
grpc_exec_ctx *exec_ctx, const grpc_channel_args *channel_args,
|
@@ -1770,7 +2011,7 @@ void grpc_chttp2_transport_start_reading(grpc_exec_ctx *exec_ctx,
|
|
1770
2011
|
grpc_transport *transport,
|
1771
2012
|
gpr_slice *slices, size_t nslices) {
|
1772
2013
|
grpc_chttp2_transport *t = (grpc_chttp2_transport *)transport;
|
1773
|
-
REF_TRANSPORT(t, "
|
2014
|
+
REF_TRANSPORT(t, "reading_action"); /* matches unref inside reading_action */
|
1774
2015
|
gpr_slice_buffer_addn(&t->read_buffer, slices, nslices);
|
1775
|
-
|
2016
|
+
reading_action(exec_ctx, t, 1);
|
1776
2017
|
}
|