grpc 1.0.1 → 1.1.2
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 +3696 -867
- data/etc/roots.pem +39 -111
- data/include/grpc/byte_buffer.h +64 -1
- data/include/grpc/census.h +40 -96
- data/include/grpc/compression.h +2 -1
- data/include/grpc/grpc.h +42 -7
- data/include/grpc/grpc_posix.h +8 -5
- data/include/grpc/impl/codegen/atm.h +3 -0
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
- data/include/grpc/impl/codegen/compression_types.h +1 -1
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
- data/include/grpc/impl/codegen/gpr_slice.h +84 -0
- data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
- data/include/grpc/impl/codegen/grpc_types.h +91 -9
- data/include/grpc/impl/codegen/port_platform.h +25 -92
- data/include/grpc/impl/codegen/slice.h +54 -97
- data/include/grpc/impl/codegen/sync.h +0 -253
- data/include/grpc/module.modulemap +0 -2
- data/include/grpc/slice.h +132 -0
- data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
- data/include/grpc/support/alloc.h +40 -1
- data/include/grpc/support/log.h +80 -1
- data/include/grpc/support/log_windows.h +2 -0
- data/include/grpc/support/string_util.h +1 -1
- data/include/grpc/support/sync.h +252 -0
- data/include/grpc/support/time.h +67 -1
- data/src/boringssl/err_data.c +639 -627
- data/src/core/ext/census/base_resources.c +71 -0
- data/src/core/ext/census/base_resources.h +39 -0
- data/src/core/ext/census/gen/census.pb.c +26 -29
- data/src/core/ext/census/gen/census.pb.h +68 -67
- data/src/core/ext/census/gen/trace_context.pb.c +81 -0
- data/src/core/ext/census/gen/trace_context.pb.h +99 -0
- data/src/core/ext/census/grpc_filter.c +22 -16
- data/src/core/ext/census/grpc_plugin.c +2 -1
- data/src/core/ext/census/initialize.c +16 -4
- data/src/core/ext/census/mlog.h +1 -1
- data/src/core/ext/census/placeholders.c +0 -45
- data/src/core/ext/census/resource.c +312 -0
- data/src/core/ext/census/resource.h +63 -0
- data/src/core/ext/census/trace_context.c +86 -0
- data/src/core/ext/census/trace_context.h +68 -0
- data/src/core/ext/census/tracing.c +8 -2
- data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
- data/src/core/ext/client_channel/client_channel.c +1218 -0
- data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
- data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
- data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
- data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
- data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
- data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
- data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
- data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
- data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
- data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
- data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
- data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
- data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
- data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
- data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
- data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
- data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
- data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
- data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
- data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
- data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
- data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
- data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
- data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
- data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
- data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
- data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
- data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
- data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
- data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
- data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
- data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
- data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
- data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
- data/src/core/ext/load_reporting/load_reporting.c +7 -56
- data/src/core/ext/load_reporting/load_reporting.h +41 -28
- data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
- data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
- data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
- data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
- data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
- data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
- data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
- data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
- data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
- data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
- data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
- data/src/core/lib/channel/channel_args.c +70 -13
- data/src/core/lib/channel/channel_args.h +28 -2
- data/src/core/lib/channel/channel_stack.c +77 -28
- data/src/core/lib/channel/channel_stack.h +61 -23
- data/src/core/lib/channel/channel_stack_builder.c +33 -25
- data/src/core/lib/channel/channel_stack_builder.h +17 -8
- data/src/core/lib/channel/compress_filter.c +52 -36
- data/src/core/lib/channel/connected_channel.c +20 -12
- data/src/core/lib/channel/connected_channel.h +2 -1
- data/src/core/lib/channel/context.h +13 -1
- data/src/core/lib/channel/deadline_filter.c +344 -0
- data/src/core/lib/channel/deadline_filter.h +99 -0
- data/src/core/lib/channel/handshaker.c +240 -0
- data/src/core/lib/channel/handshaker.h +164 -0
- data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
- data/src/core/lib/channel/handshaker_factory.h +66 -0
- data/src/core/lib/channel/handshaker_registry.c +113 -0
- data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
- data/src/core/lib/channel/http_client_filter.c +248 -46
- data/src/core/lib/channel/http_client_filter.h +3 -0
- data/src/core/lib/channel/http_server_filter.c +136 -24
- data/src/core/lib/channel/message_size_filter.c +261 -0
- data/src/core/lib/channel/message_size_filter.h +39 -0
- data/src/core/lib/compression/message_compress.c +43 -37
- data/src/core/lib/compression/message_compress.h +7 -5
- data/src/core/lib/http/format_request.c +26 -11
- data/src/core/lib/http/format_request.h +7 -5
- data/src/core/lib/http/httpcli.c +45 -27
- data/src/core/lib/http/httpcli.h +4 -4
- data/src/core/lib/http/httpcli_security_connector.c +56 -46
- data/src/core/lib/http/parser.c +17 -14
- data/src/core/lib/http/parser.h +4 -2
- data/src/core/lib/iomgr/closure.c +49 -7
- data/src/core/lib/iomgr/closure.h +56 -14
- data/src/core/lib/iomgr/combiner.c +422 -0
- data/src/core/lib/iomgr/combiner.h +64 -0
- data/src/core/lib/iomgr/endpoint.c +8 -2
- data/src/core/lib/iomgr/endpoint.h +17 -7
- data/src/core/lib/iomgr/endpoint_pair.h +3 -2
- data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
- data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
- data/src/core/lib/iomgr/error.c +72 -6
- data/src/core/lib/iomgr/error.h +30 -3
- data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
- data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
- data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
- data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
- data/src/core/lib/iomgr/ev_posix.c +26 -5
- data/src/core/lib/iomgr/ev_posix.h +12 -1
- data/src/core/lib/iomgr/exec_ctx.c +27 -94
- data/src/core/lib/iomgr/exec_ctx.h +19 -22
- data/src/core/lib/iomgr/executor.c +29 -8
- data/src/core/lib/iomgr/executor.h +2 -4
- data/src/core/lib/iomgr/iocp_windows.c +3 -4
- data/src/core/lib/iomgr/iomgr.c +14 -10
- data/src/core/lib/iomgr/iomgr.h +6 -2
- data/src/core/lib/iomgr/iomgr_posix.c +2 -2
- data/src/core/lib/iomgr/iomgr_uv.c +49 -0
- data/src/core/lib/iomgr/iomgr_windows.c +2 -2
- data/src/core/lib/iomgr/load_file.c +3 -3
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/network_status_tracker.c +1 -1
- data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
- data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
- data/src/core/lib/iomgr/pollset_uv.c +142 -0
- data/src/core/lib/iomgr/pollset_uv.h +42 -0
- data/src/core/lib/iomgr/pollset_windows.c +5 -6
- data/src/core/lib/iomgr/port.h +129 -0
- data/src/core/lib/iomgr/resolve_address.h +2 -1
- data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
- data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
- data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
- data/src/core/lib/iomgr/resource_quota.c +832 -0
- data/src/core/lib/iomgr/resource_quota.h +159 -0
- data/src/core/lib/iomgr/sockaddr.h +10 -2
- data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
- data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
- data/src/core/lib/iomgr/socket_mutator.c +98 -0
- data/src/core/lib/iomgr/socket_mutator.h +80 -0
- data/src/core/lib/iomgr/socket_utils.h +42 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
- data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
- data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
- data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
- data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
- data/src/core/lib/iomgr/socket_windows.c +14 -6
- data/src/core/lib/iomgr/socket_windows.h +1 -0
- data/src/core/lib/iomgr/tcp_client.h +8 -2
- data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
- data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
- data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
- data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
- data/src/core/lib/iomgr/tcp_posix.c +135 -56
- data/src/core/lib/iomgr/tcp_posix.h +2 -2
- data/src/core/lib/iomgr/tcp_server.h +14 -6
- data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
- data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
- data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
- data/src/core/lib/iomgr/tcp_uv.c +367 -0
- data/src/core/lib/iomgr/tcp_uv.h +59 -0
- data/src/core/lib/iomgr/tcp_windows.c +65 -48
- data/src/core/lib/iomgr/tcp_windows.h +3 -1
- data/src/core/lib/iomgr/timer.h +21 -21
- data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
- data/src/core/lib/iomgr/timer_generic.h +49 -0
- data/src/core/lib/iomgr/timer_heap.c +6 -0
- data/src/core/lib/iomgr/timer_uv.c +99 -0
- data/src/core/lib/iomgr/timer_uv.h +47 -0
- data/src/core/lib/iomgr/udp_server.c +116 -98
- data/src/core/lib/iomgr/udp_server.h +5 -3
- data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
- data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
- data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
- data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
- data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
- data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
- data/src/core/lib/iomgr/workqueue.h +12 -20
- data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
- data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
- data/src/core/lib/iomgr/workqueue_windows.c +9 -8
- data/src/core/lib/json/json.c +3 -3
- data/src/core/lib/json/json.h +11 -11
- data/src/core/lib/json/json_reader.c +9 -5
- data/src/core/lib/profiling/basic_timers.c +10 -1
- data/src/core/lib/profiling/timers.h +2 -0
- data/src/core/lib/security/context/security_context.c +13 -3
- data/src/core/lib/security/context/security_context.h +20 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.c +48 -19
- data/src/core/lib/security/credentials/credentials.h +36 -19
- data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
- data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
- data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
- data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
- data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
- data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
- data/src/core/lib/security/transport/client_auth_filter.c +33 -27
- data/src/core/lib/security/transport/secure_endpoint.c +93 -68
- data/src/core/lib/security/transport/secure_endpoint.h +2 -2
- data/src/core/lib/security/transport/security_connector.c +133 -168
- data/src/core/lib/security/transport/security_connector.h +31 -46
- data/src/core/lib/security/transport/security_handshaker.c +501 -0
- data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
- data/src/core/lib/security/transport/server_auth_filter.c +50 -38
- data/src/core/lib/security/util/b64.c +11 -8
- data/src/core/lib/security/util/b64.h +5 -4
- data/src/core/lib/slice/percent_encoding.c +182 -0
- data/src/core/lib/slice/percent_encoding.h +78 -0
- data/src/core/lib/{support → slice}/slice.c +81 -50
- data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
- data/src/core/lib/slice/slice_internal.h +49 -0
- data/src/core/lib/slice/slice_string_helpers.c +90 -0
- data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
- data/src/core/lib/support/backoff.c +24 -13
- data/src/core/lib/support/backoff.h +5 -2
- data/src/core/lib/support/env.h +0 -2
- data/src/core/lib/support/log.c +5 -4
- data/src/core/lib/support/log_linux.c +0 -1
- data/src/core/lib/support/log_posix.c +1 -1
- data/src/core/lib/support/mpscq.c +83 -0
- data/src/core/lib/support/mpscq.h +65 -0
- data/src/core/lib/support/string.c +58 -49
- data/src/core/lib/support/string.h +11 -8
- data/src/core/lib/support/subprocess_posix.c +5 -2
- data/src/core/lib/support/thd.c +1 -1
- data/src/core/lib/support/time.c +43 -79
- data/src/core/lib/support/time_posix.c +1 -1
- data/src/core/lib/support/tmpfile.h +0 -2
- data/src/core/lib/surface/alarm.c +4 -1
- data/src/core/lib/surface/byte_buffer.c +17 -11
- data/src/core/lib/surface/byte_buffer_reader.c +23 -15
- data/src/core/lib/surface/call.c +294 -276
- data/src/core/lib/surface/call.h +24 -9
- data/src/core/lib/surface/call_log_batch.c +5 -3
- data/src/core/lib/surface/channel.c +127 -111
- data/src/core/lib/surface/channel.h +14 -5
- data/src/core/lib/surface/channel_init.c +1 -1
- data/src/core/lib/surface/channel_init.h +10 -1
- data/src/core/lib/surface/channel_ping.c +7 -6
- data/src/core/lib/surface/completion_queue.c +154 -18
- data/src/core/lib/surface/completion_queue.h +5 -0
- data/src/core/lib/surface/init.c +40 -6
- data/src/core/lib/surface/init.h +1 -0
- data/src/core/lib/surface/init_secure.c +5 -2
- data/src/core/lib/surface/lame_client.c +28 -18
- data/src/core/lib/surface/server.c +134 -87
- data/src/core/lib/surface/server.h +8 -0
- data/src/core/lib/surface/validate_metadata.c +1 -1
- data/src/core/lib/surface/version.c +3 -1
- data/src/core/lib/transport/byte_stream.c +7 -4
- data/src/core/lib/transport/byte_stream.h +6 -10
- data/src/core/lib/transport/connectivity_state.c +21 -12
- data/src/core/lib/transport/connectivity_state.h +4 -1
- data/src/core/lib/transport/mdstr_hash_table.c +118 -0
- data/src/core/lib/transport/mdstr_hash_table.h +77 -0
- data/src/core/lib/transport/metadata.c +83 -60
- data/src/core/lib/transport/metadata.h +41 -23
- data/src/core/lib/transport/metadata_batch.c +17 -11
- data/src/core/lib/transport/metadata_batch.h +20 -6
- data/src/core/lib/transport/pid_controller.c +57 -0
- data/src/core/lib/transport/pid_controller.h +64 -0
- data/src/core/lib/transport/service_config.c +251 -0
- data/src/core/lib/transport/service_config.h +71 -0
- data/src/core/lib/transport/static_metadata.c +18 -16
- data/src/core/lib/transport/static_metadata.h +113 -107
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
- data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
- data/src/core/lib/transport/transport.c +84 -23
- data/src/core/lib/transport/transport.h +53 -8
- data/src/core/lib/transport/transport_impl.h +3 -0
- data/src/core/lib/transport/transport_op_string.c +92 -20
- data/src/core/lib/tsi/ssl_transport_security.c +3 -1
- data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
- data/src/ruby/ext/grpc/extconf.rb +0 -1
- data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
- data/src/ruby/ext/grpc/rb_call.c +15 -5
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
- data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
- data/src/ruby/ext/grpc/rb_grpc.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
- data/src/ruby/ext/grpc/rb_server.c +18 -12
- data/src/ruby/lib/grpc/errors.rb +154 -2
- data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
- data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
- data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
- data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
- data/src/ruby/lib/grpc/generic/service.rb +3 -2
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/checker.rb +3 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
- data/src/ruby/pb/test/client.rb +307 -7
- data/src/ruby/pb/test/server.rb +26 -1
- data/src/ruby/spec/compression_options_spec.rb +164 -0
- data/src/ruby/spec/error_sanity_spec.rb +64 -0
- data/src/ruby/spec/generic/active_call_spec.rb +290 -12
- data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
- data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
- data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
- data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
- data/src/ruby/spec/spec_helper.rb +2 -0
- data/third_party/boringssl/crypto/aes/aes.c +12 -12
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
- data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
- data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
- data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
- data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
- data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
- data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
- data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
- data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl/crypto/base64/base64.c +249 -285
- data/third_party/boringssl/crypto/bio/bio.c +13 -23
- data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
- data/third_party/boringssl/crypto/bio/connect.c +12 -3
- data/third_party/boringssl/crypto/bio/fd.c +22 -15
- data/third_party/boringssl/crypto/bio/file.c +2 -38
- data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
- data/third_party/boringssl/crypto/bio/internal.h +3 -0
- data/third_party/boringssl/crypto/bio/pair.c +1 -1
- data/third_party/boringssl/crypto/bio/socket.c +10 -2
- data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
- data/third_party/boringssl/crypto/bn/bn.c +38 -0
- data/third_party/boringssl/crypto/bn/cmp.c +25 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -76
- data/third_party/boringssl/crypto/bn/div.c +136 -70
- data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
- data/third_party/boringssl/crypto/bn/gcd.c +213 -296
- data/third_party/boringssl/crypto/bn/generic.c +0 -80
- data/third_party/boringssl/crypto/bn/internal.h +15 -3
- data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
- data/third_party/boringssl/crypto/bn/mul.c +2 -1
- data/third_party/boringssl/crypto/bn/prime.c +24 -8
- data/third_party/boringssl/crypto/bn/random.c +47 -33
- data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
- data/third_party/boringssl/crypto/buf/buf.c +25 -21
- data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
- data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
- data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
- data/third_party/boringssl/crypto/cipher/aead.c +11 -22
- data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
- data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
- data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
- data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
- data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
- data/third_party/boringssl/crypto/cipher/internal.h +8 -10
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
- data/third_party/boringssl/crypto/conf/conf.c +2 -1
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
- data/third_party/boringssl/crypto/cpu-arm.c +0 -161
- data/third_party/boringssl/crypto/cpu-intel.c +5 -3
- data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
- data/third_party/boringssl/crypto/crypto.c +29 -7
- data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
- data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
- data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
- data/third_party/boringssl/crypto/dh/check.c +22 -6
- data/third_party/boringssl/crypto/dh/dh.c +45 -21
- data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
- data/third_party/boringssl/crypto/dh/params.c +30 -78
- data/third_party/boringssl/crypto/digest/digest.c +3 -3
- data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
- data/third_party/boringssl/crypto/ec/ec.c +84 -140
- data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
- data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
- data/third_party/boringssl/crypto/ec/internal.h +12 -36
- data/third_party/boringssl/crypto/ec/oct.c +11 -11
- data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
- data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
- data/third_party/boringssl/crypto/ec/simple.c +81 -201
- data/third_party/boringssl/crypto/ec/util-64.c +0 -74
- data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
- data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
- data/third_party/boringssl/crypto/engine/engine.c +1 -1
- data/third_party/boringssl/crypto/err/err.c +3 -3
- data/third_party/boringssl/crypto/evp/evp.c +14 -59
- data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
- data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
- data/third_party/boringssl/crypto/evp/internal.h +4 -46
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
- data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
- data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
- data/third_party/boringssl/crypto/evp/print.c +520 -0
- data/third_party/boringssl/crypto/ex_data.c +4 -6
- data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
- data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
- data/third_party/boringssl/crypto/internal.h +57 -77
- data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
- data/third_party/boringssl/crypto/md4/md4.c +9 -0
- data/third_party/boringssl/crypto/mem.c +19 -19
- data/third_party/boringssl/crypto/modes/cfb.c +5 -6
- data/third_party/boringssl/crypto/modes/ctr.c +10 -18
- data/third_party/boringssl/crypto/modes/gcm.c +100 -66
- data/third_party/boringssl/crypto/modes/internal.h +15 -27
- data/third_party/boringssl/crypto/modes/ofb.c +9 -22
- data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
- data/third_party/boringssl/crypto/newhope/internal.h +71 -0
- data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
- data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
- data/third_party/boringssl/crypto/newhope/poly.c +183 -0
- data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
- data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
- data/third_party/boringssl/crypto/obj/obj.c +111 -135
- data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
- data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
- data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
- data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
- data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
- data/third_party/boringssl/crypto/rand/rand.c +4 -1
- data/third_party/boringssl/crypto/rand/urandom.c +5 -7
- data/third_party/boringssl/crypto/rand/windows.c +5 -8
- data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
- data/third_party/boringssl/crypto/rsa/internal.h +5 -13
- data/third_party/boringssl/crypto/rsa/padding.c +64 -63
- data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
- data/third_party/boringssl/crypto/sha/sha256.c +2 -2
- data/third_party/boringssl/crypto/sha/sha512.c +7 -7
- data/third_party/boringssl/crypto/stack/stack.c +13 -22
- data/third_party/boringssl/crypto/thread.c +21 -12
- data/third_party/boringssl/crypto/thread_none.c +6 -2
- data/third_party/boringssl/crypto/thread_pthread.c +16 -7
- data/third_party/boringssl/crypto/thread_win.c +38 -85
- data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
- data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
- data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
- data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
- data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
- data/third_party/boringssl/crypto/x509/internal.h +66 -0
- data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
- data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
- data/third_party/boringssl/crypto/x509/x509.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
- data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
- data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
- data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
- data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
- data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
- data/third_party/boringssl/crypto/x509/x_name.c +14 -17
- data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
- data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
- data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
- data/third_party/boringssl/include/openssl/aead.h +72 -73
- data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
- data/third_party/boringssl/include/openssl/asn1.h +103 -235
- data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
- data/third_party/boringssl/include/openssl/asn1t.h +1 -11
- data/third_party/boringssl/include/openssl/base.h +145 -3
- data/third_party/boringssl/include/openssl/base64.h +20 -17
- data/third_party/boringssl/include/openssl/bio.h +59 -34
- data/third_party/boringssl/include/openssl/bn.h +118 -51
- data/third_party/boringssl/include/openssl/buf.h +15 -0
- data/third_party/boringssl/include/openssl/bytestring.h +52 -4
- data/third_party/boringssl/include/openssl/chacha.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +18 -1
- data/third_party/boringssl/include/openssl/cmac.h +11 -0
- data/third_party/boringssl/include/openssl/conf.h +13 -2
- data/third_party/boringssl/include/openssl/cpu.h +20 -23
- data/third_party/boringssl/include/openssl/crypto.h +22 -1
- data/third_party/boringssl/include/openssl/curve25519.h +96 -4
- data/third_party/boringssl/include/openssl/dh.h +71 -16
- data/third_party/boringssl/include/openssl/digest.h +38 -11
- data/third_party/boringssl/include/openssl/dsa.h +40 -4
- data/third_party/boringssl/include/openssl/ec.h +44 -18
- data/third_party/boringssl/include/openssl/ec_key.h +27 -6
- data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
- data/third_party/boringssl/include/openssl/engine.h +11 -0
- data/third_party/boringssl/include/openssl/evp.h +52 -88
- data/third_party/boringssl/include/openssl/hkdf.h +24 -4
- data/third_party/boringssl/include/openssl/hmac.h +20 -6
- data/third_party/boringssl/include/openssl/md4.h +4 -0
- data/third_party/boringssl/include/openssl/mem.h +19 -0
- data/third_party/boringssl/include/openssl/newhope.h +158 -0
- data/third_party/boringssl/include/openssl/nid.h +4166 -0
- data/third_party/boringssl/include/openssl/obj.h +31 -3
- data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
- data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
- data/third_party/boringssl/include/openssl/pem.h +5 -0
- data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
- data/third_party/boringssl/include/openssl/rand.h +6 -0
- data/third_party/boringssl/include/openssl/rc4.h +6 -0
- data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
- data/third_party/boringssl/include/openssl/rsa.h +127 -65
- data/third_party/boringssl/include/openssl/sha.h +14 -10
- data/third_party/boringssl/include/openssl/ssl.h +561 -275
- data/third_party/boringssl/include/openssl/ssl3.h +18 -25
- data/third_party/boringssl/include/openssl/stack.h +2 -4
- data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
- data/third_party/boringssl/include/openssl/thread.h +31 -13
- data/third_party/boringssl/include/openssl/time_support.h +1 -0
- data/third_party/boringssl/include/openssl/tls1.h +37 -33
- data/third_party/boringssl/include/openssl/x509.h +69 -26
- data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
- data/third_party/boringssl/include/openssl/x509v3.h +23 -2
- data/third_party/boringssl/ssl/custom_extensions.c +3 -5
- data/third_party/boringssl/ssl/d1_both.c +463 -499
- data/third_party/boringssl/ssl/d1_lib.c +38 -109
- data/third_party/boringssl/ssl/d1_pkt.c +173 -334
- data/third_party/boringssl/ssl/d1_srtp.c +20 -18
- data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
- data/third_party/boringssl/ssl/dtls_record.c +27 -26
- data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
- data/third_party/boringssl/ssl/handshake_server.c +1932 -0
- data/third_party/boringssl/ssl/internal.h +712 -439
- data/third_party/boringssl/ssl/s3_both.c +445 -257
- data/third_party/boringssl/ssl/s3_enc.c +53 -36
- data/third_party/boringssl/ssl/s3_lib.c +23 -268
- data/third_party/boringssl/ssl/s3_pkt.c +168 -364
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
- data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
- data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
- data/third_party/boringssl/ssl/ssl_cert.c +324 -49
- data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
- data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
- data/third_party/boringssl/ssl/ssl_file.c +21 -68
- data/third_party/boringssl/ssl/ssl_lib.c +881 -510
- data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
- data/third_party/boringssl/ssl/ssl_session.c +324 -103
- data/third_party/boringssl/ssl/ssl_stat.c +6 -88
- data/third_party/boringssl/ssl/t1_enc.c +23 -39
- data/third_party/boringssl/ssl/t1_lib.c +1120 -622
- data/third_party/boringssl/ssl/tls13_both.c +440 -0
- data/third_party/boringssl/ssl/tls13_client.c +682 -0
- data/third_party/boringssl/ssl/tls13_enc.c +391 -0
- data/third_party/boringssl/ssl/tls13_server.c +672 -0
- data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
- data/third_party/boringssl/ssl/tls_record.c +159 -77
- data/third_party/nanopb/pb.h +60 -28
- data/third_party/nanopb/pb_decode.c +120 -92
- data/third_party/nanopb/pb_decode.h +3 -3
- data/third_party/nanopb/pb_encode.c +73 -67
- data/third_party/nanopb/pb_encode.h +4 -4
- metadata +155 -89
- data/include/grpc/impl/codegen/byte_buffer.h +0 -122
- data/include/grpc/impl/codegen/log.h +0 -118
- data/include/grpc/impl/codegen/time.h +0 -130
- data/src/core/ext/client_config/client_channel.c +0 -593
- data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
- data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
- data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
- data/src/core/lib/iomgr/workqueue_posix.c +0 -151
- data/src/core/lib/security/transport/handshake.c +0 -368
- data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
- data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
- data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
- data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
- data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
- data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
- data/third_party/boringssl/crypto/directory.h +0 -66
- data/third_party/boringssl/crypto/directory_posix.c +0 -108
- data/third_party/boringssl/crypto/directory_win.c +0 -144
- data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
- data/third_party/boringssl/include/openssl/pqueue.h +0 -146
- data/third_party/boringssl/ssl/d1_clnt.c +0 -561
- data/third_party/boringssl/ssl/d1_srvr.c +0 -476
- data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
- data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
- data/third_party/boringssl/ssl/test/async_bio.h +0 -45
- data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
- data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -45,7 +45,8 @@
|
|
45
45
|
typedef struct grpc_chttp2_hpack_parser grpc_chttp2_hpack_parser;
|
46
46
|
|
47
47
|
typedef grpc_error *(*grpc_chttp2_hpack_parser_state)(
|
48
|
-
grpc_chttp2_hpack_parser *p, const uint8_t *beg,
|
48
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_parser *p, const uint8_t *beg,
|
49
|
+
const uint8_t *end);
|
49
50
|
|
50
51
|
typedef struct {
|
51
52
|
char *str;
|
@@ -55,7 +56,7 @@ typedef struct {
|
|
55
56
|
|
56
57
|
struct grpc_chttp2_hpack_parser {
|
57
58
|
/* user specified callback for each header output */
|
58
|
-
void (*on_header)(void *user_data, grpc_mdelem *md);
|
59
|
+
void (*on_header)(grpc_exec_ctx *exec_ctx, void *user_data, grpc_mdelem *md);
|
59
60
|
void *on_header_user_data;
|
60
61
|
|
61
62
|
grpc_error *last_error;
|
@@ -98,21 +99,25 @@ struct grpc_chttp2_hpack_parser {
|
|
98
99
|
grpc_chttp2_hptbl table;
|
99
100
|
};
|
100
101
|
|
101
|
-
void grpc_chttp2_hpack_parser_init(
|
102
|
-
|
102
|
+
void grpc_chttp2_hpack_parser_init(grpc_exec_ctx *exec_ctx,
|
103
|
+
grpc_chttp2_hpack_parser *p);
|
104
|
+
void grpc_chttp2_hpack_parser_destroy(grpc_exec_ctx *exec_ctx,
|
105
|
+
grpc_chttp2_hpack_parser *p);
|
103
106
|
|
104
107
|
void grpc_chttp2_hpack_parser_set_has_priority(grpc_chttp2_hpack_parser *p);
|
105
108
|
|
106
109
|
/* returns 1 on success, 0 on error */
|
107
|
-
grpc_error *grpc_chttp2_hpack_parser_parse(
|
110
|
+
grpc_error *grpc_chttp2_hpack_parser_parse(grpc_exec_ctx *exec_ctx,
|
111
|
+
grpc_chttp2_hpack_parser *p,
|
108
112
|
const uint8_t *beg,
|
109
113
|
const uint8_t *end);
|
110
114
|
|
111
115
|
/* wraps grpc_chttp2_hpack_parser_parse to provide a frame level parser for
|
112
116
|
the transport */
|
113
|
-
grpc_error *grpc_chttp2_header_parser_parse(
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
+
grpc_error *grpc_chttp2_header_parser_parse(grpc_exec_ctx *exec_ctx,
|
118
|
+
void *hpack_parser,
|
119
|
+
grpc_chttp2_transport *t,
|
120
|
+
grpc_chttp2_stream *s,
|
121
|
+
grpc_slice slice, int is_last);
|
117
122
|
|
118
123
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HPACK_PARSER_H */
|
@@ -179,7 +179,7 @@ static uint32_t entries_for_bytes(uint32_t bytes) {
|
|
179
179
|
GRPC_CHTTP2_HPACK_ENTRY_OVERHEAD;
|
180
180
|
}
|
181
181
|
|
182
|
-
void grpc_chttp2_hptbl_init(grpc_chttp2_hptbl *tbl) {
|
182
|
+
void grpc_chttp2_hptbl_init(grpc_exec_ctx *exec_ctx, grpc_chttp2_hptbl *tbl) {
|
183
183
|
size_t i;
|
184
184
|
|
185
185
|
memset(tbl, 0, sizeof(*tbl));
|
@@ -190,18 +190,20 @@ void grpc_chttp2_hptbl_init(grpc_chttp2_hptbl *tbl) {
|
|
190
190
|
tbl->ents = gpr_malloc(sizeof(*tbl->ents) * tbl->cap_entries);
|
191
191
|
memset(tbl->ents, 0, sizeof(*tbl->ents) * tbl->cap_entries);
|
192
192
|
for (i = 1; i <= GRPC_CHTTP2_LAST_STATIC_ENTRY; i++) {
|
193
|
-
tbl->static_ents[i - 1] =
|
194
|
-
|
193
|
+
tbl->static_ents[i - 1] = grpc_mdelem_from_strings(
|
194
|
+
exec_ctx, static_table[i].key, static_table[i].value);
|
195
195
|
}
|
196
196
|
}
|
197
197
|
|
198
|
-
void grpc_chttp2_hptbl_destroy(
|
198
|
+
void grpc_chttp2_hptbl_destroy(grpc_exec_ctx *exec_ctx,
|
199
|
+
grpc_chttp2_hptbl *tbl) {
|
199
200
|
size_t i;
|
200
201
|
for (i = 0; i < GRPC_CHTTP2_LAST_STATIC_ENTRY; i++) {
|
201
|
-
GRPC_MDELEM_UNREF(tbl->static_ents[i]);
|
202
|
+
GRPC_MDELEM_UNREF(exec_ctx, tbl->static_ents[i]);
|
202
203
|
}
|
203
204
|
for (i = 0; i < tbl->num_ents; i++) {
|
204
|
-
GRPC_MDELEM_UNREF(
|
205
|
+
GRPC_MDELEM_UNREF(exec_ctx,
|
206
|
+
tbl->ents[(tbl->first_ent + i) % tbl->cap_entries]);
|
205
207
|
}
|
206
208
|
gpr_free(tbl->ents);
|
207
209
|
}
|
@@ -224,16 +226,16 @@ grpc_mdelem *grpc_chttp2_hptbl_lookup(const grpc_chttp2_hptbl *tbl,
|
|
224
226
|
}
|
225
227
|
|
226
228
|
/* Evict one element from the table */
|
227
|
-
static void evict1(grpc_chttp2_hptbl *tbl) {
|
229
|
+
static void evict1(grpc_exec_ctx *exec_ctx, grpc_chttp2_hptbl *tbl) {
|
228
230
|
grpc_mdelem *first_ent = tbl->ents[tbl->first_ent];
|
229
|
-
size_t elem_bytes =
|
230
|
-
|
231
|
+
size_t elem_bytes = GRPC_SLICE_LENGTH(first_ent->key->slice) +
|
232
|
+
GRPC_SLICE_LENGTH(first_ent->value->slice) +
|
231
233
|
GRPC_CHTTP2_HPACK_ENTRY_OVERHEAD;
|
232
234
|
GPR_ASSERT(elem_bytes <= tbl->mem_used);
|
233
235
|
tbl->mem_used -= (uint32_t)elem_bytes;
|
234
236
|
tbl->first_ent = ((tbl->first_ent + 1) % tbl->cap_entries);
|
235
237
|
tbl->num_ents--;
|
236
|
-
GRPC_MDELEM_UNREF(first_ent);
|
238
|
+
GRPC_MDELEM_UNREF(exec_ctx, first_ent);
|
237
239
|
}
|
238
240
|
|
239
241
|
static void rebuild_ents(grpc_chttp2_hptbl *tbl, uint32_t new_cap) {
|
@@ -249,7 +251,8 @@ static void rebuild_ents(grpc_chttp2_hptbl *tbl, uint32_t new_cap) {
|
|
249
251
|
tbl->first_ent = 0;
|
250
252
|
}
|
251
253
|
|
252
|
-
void grpc_chttp2_hptbl_set_max_bytes(
|
254
|
+
void grpc_chttp2_hptbl_set_max_bytes(grpc_exec_ctx *exec_ctx,
|
255
|
+
grpc_chttp2_hptbl *tbl,
|
253
256
|
uint32_t max_bytes) {
|
254
257
|
if (tbl->max_bytes == max_bytes) {
|
255
258
|
return;
|
@@ -258,12 +261,13 @@ void grpc_chttp2_hptbl_set_max_bytes(grpc_chttp2_hptbl *tbl,
|
|
258
261
|
gpr_log(GPR_DEBUG, "Update hpack parser max size to %d", max_bytes);
|
259
262
|
}
|
260
263
|
while (tbl->mem_used > max_bytes) {
|
261
|
-
evict1(tbl);
|
264
|
+
evict1(exec_ctx, tbl);
|
262
265
|
}
|
263
266
|
tbl->max_bytes = max_bytes;
|
264
267
|
}
|
265
268
|
|
266
|
-
grpc_error *grpc_chttp2_hptbl_set_current_table_size(
|
269
|
+
grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_exec_ctx *exec_ctx,
|
270
|
+
grpc_chttp2_hptbl *tbl,
|
267
271
|
uint32_t bytes) {
|
268
272
|
if (tbl->current_table_bytes == bytes) {
|
269
273
|
return GRPC_ERROR_NONE;
|
@@ -281,7 +285,7 @@ grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl,
|
|
281
285
|
gpr_log(GPR_DEBUG, "Update hpack parser table size to %d", bytes);
|
282
286
|
}
|
283
287
|
while (tbl->mem_used > bytes) {
|
284
|
-
evict1(tbl);
|
288
|
+
evict1(exec_ctx, tbl);
|
285
289
|
}
|
286
290
|
tbl->current_table_bytes = bytes;
|
287
291
|
tbl->max_entries = entries_for_bytes(bytes);
|
@@ -296,10 +300,11 @@ grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_chttp2_hptbl *tbl,
|
|
296
300
|
return GRPC_ERROR_NONE;
|
297
301
|
}
|
298
302
|
|
299
|
-
grpc_error *grpc_chttp2_hptbl_add(
|
303
|
+
grpc_error *grpc_chttp2_hptbl_add(grpc_exec_ctx *exec_ctx,
|
304
|
+
grpc_chttp2_hptbl *tbl, grpc_mdelem *md) {
|
300
305
|
/* determine how many bytes of buffer this entry represents */
|
301
|
-
size_t elem_bytes =
|
302
|
-
|
306
|
+
size_t elem_bytes = GRPC_SLICE_LENGTH(md->key->slice) +
|
307
|
+
GRPC_SLICE_LENGTH(md->value->slice) +
|
303
308
|
GRPC_CHTTP2_HPACK_ENTRY_OVERHEAD;
|
304
309
|
|
305
310
|
if (tbl->current_table_bytes > tbl->max_bytes) {
|
@@ -326,14 +331,14 @@ grpc_error *grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, grpc_mdelem *md) {
|
|
326
331
|
* empty table.
|
327
332
|
*/
|
328
333
|
while (tbl->num_ents) {
|
329
|
-
evict1(tbl);
|
334
|
+
evict1(exec_ctx, tbl);
|
330
335
|
}
|
331
336
|
return GRPC_ERROR_NONE;
|
332
337
|
}
|
333
338
|
|
334
339
|
/* evict entries to ensure no overflow */
|
335
340
|
while (elem_bytes > (size_t)tbl->current_table_bytes - tbl->mem_used) {
|
336
|
-
evict1(tbl);
|
341
|
+
evict1(exec_ctx, tbl);
|
337
342
|
}
|
338
343
|
|
339
344
|
/* copy the finalized entry in */
|
@@ -34,8 +34,8 @@
|
|
34
34
|
#ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HPACK_TABLE_H
|
35
35
|
#define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_HPACK_TABLE_H
|
36
36
|
|
37
|
+
#include <grpc/slice.h>
|
37
38
|
#include <grpc/support/port_platform.h>
|
38
|
-
#include <grpc/support/slice.h>
|
39
39
|
#include "src/core/lib/iomgr/error.h"
|
40
40
|
#include "src/core/lib/transport/metadata.h"
|
41
41
|
|
@@ -84,18 +84,21 @@ typedef struct {
|
|
84
84
|
} grpc_chttp2_hptbl;
|
85
85
|
|
86
86
|
/* initialize a hpack table */
|
87
|
-
void grpc_chttp2_hptbl_init(grpc_chttp2_hptbl *tbl);
|
88
|
-
void grpc_chttp2_hptbl_destroy(grpc_chttp2_hptbl *tbl);
|
89
|
-
void grpc_chttp2_hptbl_set_max_bytes(
|
87
|
+
void grpc_chttp2_hptbl_init(grpc_exec_ctx *exec_ctx, grpc_chttp2_hptbl *tbl);
|
88
|
+
void grpc_chttp2_hptbl_destroy(grpc_exec_ctx *exec_ctx, grpc_chttp2_hptbl *tbl);
|
89
|
+
void grpc_chttp2_hptbl_set_max_bytes(grpc_exec_ctx *exec_ctx,
|
90
|
+
grpc_chttp2_hptbl *tbl,
|
90
91
|
uint32_t max_bytes);
|
91
|
-
grpc_error *grpc_chttp2_hptbl_set_current_table_size(
|
92
|
+
grpc_error *grpc_chttp2_hptbl_set_current_table_size(grpc_exec_ctx *exec_ctx,
|
93
|
+
grpc_chttp2_hptbl *tbl,
|
92
94
|
uint32_t bytes);
|
93
95
|
|
94
96
|
/* lookup a table entry based on its hpack index */
|
95
97
|
grpc_mdelem *grpc_chttp2_hptbl_lookup(const grpc_chttp2_hptbl *tbl,
|
96
98
|
uint32_t index);
|
97
99
|
/* add a table entry to the index */
|
98
|
-
grpc_error *grpc_chttp2_hptbl_add(
|
100
|
+
grpc_error *grpc_chttp2_hptbl_add(grpc_exec_ctx *exec_ctx,
|
101
|
+
grpc_chttp2_hptbl *tbl,
|
99
102
|
grpc_mdelem *md) GRPC_MUST_USE_RESULT;
|
100
103
|
/* Find a key/value pair in the table... returns the index in the table of the
|
101
104
|
most similar entry, or 0 if the value was not found */
|
@@ -46,11 +46,11 @@ void grpc_chttp2_incoming_metadata_buffer_init(
|
|
46
46
|
}
|
47
47
|
|
48
48
|
void grpc_chttp2_incoming_metadata_buffer_destroy(
|
49
|
-
grpc_chttp2_incoming_metadata_buffer *buffer) {
|
49
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer) {
|
50
50
|
size_t i;
|
51
51
|
if (!buffer->published) {
|
52
52
|
for (i = 0; i < buffer->count; i++) {
|
53
|
-
GRPC_MDELEM_UNREF(buffer->elems[i].md);
|
53
|
+
GRPC_MDELEM_UNREF(exec_ctx, buffer->elems[i].md);
|
54
54
|
}
|
55
55
|
}
|
56
56
|
gpr_free(buffer->elems);
|
@@ -49,7 +49,7 @@ typedef struct {
|
|
49
49
|
void grpc_chttp2_incoming_metadata_buffer_init(
|
50
50
|
grpc_chttp2_incoming_metadata_buffer *buffer);
|
51
51
|
void grpc_chttp2_incoming_metadata_buffer_destroy(
|
52
|
-
grpc_chttp2_incoming_metadata_buffer *buffer);
|
52
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_metadata_buffer *buffer);
|
53
53
|
void grpc_chttp2_incoming_metadata_buffer_publish(
|
54
54
|
grpc_chttp2_incoming_metadata_buffer *buffer, grpc_metadata_batch *batch);
|
55
55
|
|
@@ -48,35 +48,30 @@
|
|
48
48
|
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
49
49
|
#include "src/core/ext/transport/chttp2/transport/incoming_metadata.h"
|
50
50
|
#include "src/core/ext/transport/chttp2/transport/stream_map.h"
|
51
|
+
#include "src/core/lib/iomgr/combiner.h"
|
51
52
|
#include "src/core/lib/iomgr/endpoint.h"
|
52
53
|
#include "src/core/lib/transport/connectivity_state.h"
|
53
54
|
#include "src/core/lib/transport/transport_impl.h"
|
54
55
|
|
55
|
-
typedef struct grpc_chttp2_transport grpc_chttp2_transport;
|
56
|
-
typedef struct grpc_chttp2_stream grpc_chttp2_stream;
|
57
|
-
|
58
56
|
/* streams are kept in various linked lists depending on what things need to
|
59
57
|
happen to them... this enum labels each list */
|
60
58
|
typedef enum {
|
61
|
-
GRPC_CHTTP2_LIST_ALL_STREAMS,
|
62
|
-
GRPC_CHTTP2_LIST_CHECK_READ_OPS,
|
63
|
-
GRPC_CHTTP2_LIST_UNANNOUNCED_INCOMING_WINDOW_AVAILABLE,
|
64
59
|
GRPC_CHTTP2_LIST_WRITABLE,
|
65
60
|
GRPC_CHTTP2_LIST_WRITING,
|
66
|
-
GRPC_CHTTP2_LIST_WRITTEN,
|
67
|
-
GRPC_CHTTP2_LIST_PARSING_SEEN,
|
68
|
-
GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING,
|
69
|
-
GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_WRITING,
|
70
61
|
GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT,
|
71
|
-
/* streams waiting for the outgoing window in the writing path, they will be
|
72
|
-
* merged to the stalled list or writable list under transport lock. */
|
73
|
-
GRPC_CHTTP2_LIST_WRITING_STALLED_BY_TRANSPORT,
|
74
62
|
/** streams that are waiting to start because there are too many concurrent
|
75
63
|
streams on the connection */
|
76
64
|
GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY,
|
77
65
|
STREAM_LIST_COUNT /* must be last */
|
78
66
|
} grpc_chttp2_stream_list_id;
|
79
67
|
|
68
|
+
typedef enum {
|
69
|
+
GRPC_CHTTP2_WRITE_STATE_IDLE,
|
70
|
+
GRPC_CHTTP2_WRITE_STATE_WRITING,
|
71
|
+
GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE,
|
72
|
+
GRPC_CHTTP2_WRITE_STATE_WRITING_WITH_MORE_AND_COVERED_BY_POLLER,
|
73
|
+
} grpc_chttp2_write_state;
|
74
|
+
|
80
75
|
/* deframer state for the overall http2 stream of bytes */
|
81
76
|
typedef enum {
|
82
77
|
/* prefix: one entry per http2 connection prefix byte */
|
@@ -143,6 +138,12 @@ typedef enum {
|
|
143
138
|
GRPC_NUM_SETTING_SETS
|
144
139
|
} grpc_chttp2_setting_set;
|
145
140
|
|
141
|
+
typedef enum {
|
142
|
+
GRPC_CHTTP2_NO_GOAWAY_SEND,
|
143
|
+
GRPC_CHTTP2_GOAWAY_SEND_SCHEDULED,
|
144
|
+
GRPC_CHTTP2_GOAWAY_SENT,
|
145
|
+
} grpc_chttp2_sent_goaway_state;
|
146
|
+
|
146
147
|
/* Outstanding ping request data */
|
147
148
|
typedef struct grpc_chttp2_outstanding_ping {
|
148
149
|
uint8_t id[8];
|
@@ -151,6 +152,12 @@ typedef struct grpc_chttp2_outstanding_ping {
|
|
151
152
|
struct grpc_chttp2_outstanding_ping *prev;
|
152
153
|
} grpc_chttp2_outstanding_ping;
|
153
154
|
|
155
|
+
typedef struct grpc_chttp2_write_cb {
|
156
|
+
int64_t call_at_byte;
|
157
|
+
grpc_closure *closure;
|
158
|
+
struct grpc_chttp2_write_cb *next;
|
159
|
+
} grpc_chttp2_write_cb;
|
160
|
+
|
154
161
|
/* forward declared in frame_data.h */
|
155
162
|
struct grpc_chttp2_incoming_byte_stream {
|
156
163
|
grpc_byte_stream base;
|
@@ -160,30 +167,97 @@ struct grpc_chttp2_incoming_byte_stream {
|
|
160
167
|
|
161
168
|
grpc_chttp2_transport *transport;
|
162
169
|
grpc_chttp2_stream *stream;
|
163
|
-
|
164
|
-
|
170
|
+
bool is_tail;
|
171
|
+
|
172
|
+
gpr_mu slice_mu; // protects slices, on_next
|
173
|
+
grpc_slice_buffer slices;
|
165
174
|
grpc_closure *on_next;
|
166
|
-
|
175
|
+
grpc_slice *next;
|
176
|
+
uint32_t remaining_bytes;
|
177
|
+
|
178
|
+
struct {
|
179
|
+
grpc_closure closure;
|
180
|
+
grpc_slice *slice;
|
181
|
+
size_t max_size_hint;
|
182
|
+
grpc_closure *on_complete;
|
183
|
+
} next_action;
|
184
|
+
grpc_closure destroy_action;
|
185
|
+
grpc_closure finished_action;
|
167
186
|
};
|
168
187
|
|
169
|
-
|
170
|
-
|
171
|
-
|
188
|
+
struct grpc_chttp2_transport {
|
189
|
+
grpc_transport base; /* must be first */
|
190
|
+
gpr_refcount refs;
|
191
|
+
grpc_endpoint *ep;
|
192
|
+
char *peer_string;
|
172
193
|
|
173
|
-
|
194
|
+
grpc_combiner *combiner;
|
195
|
+
|
196
|
+
/** write execution state of the transport */
|
197
|
+
grpc_chttp2_write_state write_state;
|
198
|
+
|
199
|
+
/** is the transport destroying itself? */
|
200
|
+
uint8_t destroying;
|
201
|
+
/** has the upper layer closed the transport? */
|
202
|
+
uint8_t closed;
|
203
|
+
|
204
|
+
/** is there a read request to the endpoint outstanding? */
|
205
|
+
uint8_t endpoint_reading;
|
206
|
+
|
207
|
+
/** various lists of streams */
|
208
|
+
grpc_chttp2_stream_list lists[STREAM_LIST_COUNT];
|
209
|
+
|
210
|
+
/** maps stream id to grpc_chttp2_stream objects */
|
211
|
+
grpc_chttp2_stream_map stream_map;
|
212
|
+
|
213
|
+
grpc_closure write_action_begin_locked;
|
214
|
+
grpc_closure write_action;
|
215
|
+
grpc_closure write_action_end_locked;
|
216
|
+
|
217
|
+
grpc_closure read_action_locked;
|
218
|
+
|
219
|
+
/** incoming read bytes */
|
220
|
+
grpc_slice_buffer read_buffer;
|
221
|
+
|
222
|
+
/** address to place a newly accepted stream - set and unset by
|
223
|
+
grpc_chttp2_parsing_accept_stream; used by init_stream to
|
224
|
+
publish the accepted server stream */
|
225
|
+
grpc_chttp2_stream **accepting_stream;
|
226
|
+
|
227
|
+
struct {
|
228
|
+
/* accept stream callback */
|
229
|
+
void (*accept_stream)(grpc_exec_ctx *exec_ctx, void *user_data,
|
230
|
+
grpc_transport *transport, const void *server_data);
|
231
|
+
void *accept_stream_user_data;
|
232
|
+
|
233
|
+
/** connectivity tracking */
|
234
|
+
grpc_connectivity_state_tracker state_tracker;
|
235
|
+
} channel_callback;
|
236
|
+
|
237
|
+
/** data to write now */
|
238
|
+
grpc_slice_buffer outbuf;
|
239
|
+
/** hpack encoding */
|
240
|
+
grpc_chttp2_hpack_compressor hpack_compressor;
|
174
241
|
int64_t outgoing_window;
|
242
|
+
/** is this a client? */
|
243
|
+
uint8_t is_client;
|
244
|
+
|
245
|
+
/** data to write next write */
|
246
|
+
grpc_slice_buffer qbuf;
|
247
|
+
|
175
248
|
/** window available to announce to peer */
|
176
249
|
int64_t announce_incoming_window;
|
177
250
|
/** how much window would we like to have for incoming_window */
|
178
251
|
uint32_t connection_window_target;
|
252
|
+
/** how much data are we willing to buffer when the WRITE_BUFFER_HINT is set?
|
253
|
+
*/
|
254
|
+
uint32_t write_buffer_size;
|
179
255
|
|
180
256
|
/** have we seen a goaway */
|
181
257
|
uint8_t seen_goaway;
|
182
258
|
/** have we sent a goaway */
|
183
|
-
|
259
|
+
grpc_chttp2_sent_goaway_state sent_goaway_state;
|
184
260
|
|
185
|
-
/** is this transport a client? */
|
186
|
-
uint8_t is_client;
|
187
261
|
/** are the local settings dirty and need to be sent? */
|
188
262
|
uint8_t dirtied_local_settings;
|
189
263
|
/** have local settings been sent? */
|
@@ -200,47 +274,14 @@ typedef struct {
|
|
200
274
|
/** how far to lookahead in a stream? */
|
201
275
|
uint32_t stream_lookahead;
|
202
276
|
|
203
|
-
/** last
|
204
|
-
uint32_t
|
277
|
+
/** last new stream id */
|
278
|
+
uint32_t last_new_stream_id;
|
205
279
|
|
206
280
|
/** pings awaiting responses */
|
207
281
|
grpc_chttp2_outstanding_ping pings;
|
208
282
|
/** next payload for an outgoing ping */
|
209
283
|
uint64_t ping_counter;
|
210
284
|
|
211
|
-
/** concurrent stream count: updated when not parsing,
|
212
|
-
so this is a strict over-estimation on the client */
|
213
|
-
uint32_t concurrent_stream_count;
|
214
|
-
} grpc_chttp2_transport_global;
|
215
|
-
|
216
|
-
typedef struct {
|
217
|
-
/** data to write now */
|
218
|
-
gpr_slice_buffer outbuf;
|
219
|
-
/** hpack encoding */
|
220
|
-
grpc_chttp2_hpack_compressor hpack_compressor;
|
221
|
-
int64_t outgoing_window;
|
222
|
-
/** is this a client? */
|
223
|
-
uint8_t is_client;
|
224
|
-
/** callback for when writing is done */
|
225
|
-
grpc_closure done_cb;
|
226
|
-
} grpc_chttp2_transport_writing;
|
227
|
-
|
228
|
-
struct grpc_chttp2_transport_parsing {
|
229
|
-
/** is this transport a client? (boolean) */
|
230
|
-
uint8_t is_client;
|
231
|
-
|
232
|
-
/** were settings updated? */
|
233
|
-
uint8_t settings_updated;
|
234
|
-
/** was a settings ack received? */
|
235
|
-
uint8_t settings_ack_received;
|
236
|
-
/** was a goaway frame received? */
|
237
|
-
uint8_t goaway_received;
|
238
|
-
|
239
|
-
/** initial window change */
|
240
|
-
int64_t initial_window_update;
|
241
|
-
|
242
|
-
/** data to write later - after parsing */
|
243
|
-
gpr_slice_buffer qbuf;
|
244
285
|
/** parser for headers */
|
245
286
|
grpc_chttp2_hpack_parser hpack_parser;
|
246
287
|
/** simple one shot parsers */
|
@@ -253,13 +294,12 @@ struct grpc_chttp2_transport_parsing {
|
|
253
294
|
/** parser for goaway frames */
|
254
295
|
grpc_chttp2_goaway_parser goaway_parser;
|
255
296
|
|
297
|
+
/** initial window change */
|
298
|
+
int64_t initial_window_update;
|
299
|
+
|
256
300
|
/** window available for peer to send to us */
|
257
301
|
int64_t incoming_window;
|
258
302
|
|
259
|
-
/** next stream id available at the time of beginning parsing */
|
260
|
-
uint32_t next_stream_id;
|
261
|
-
uint32_t last_incoming_stream_id;
|
262
|
-
|
263
303
|
/* deframing */
|
264
304
|
grpc_chttp2_deframe_transport_state deframe_state;
|
265
305
|
uint8_t incoming_frame_type;
|
@@ -270,142 +310,55 @@ struct grpc_chttp2_transport_parsing {
|
|
270
310
|
uint32_t incoming_frame_size;
|
271
311
|
uint32_t incoming_stream_id;
|
272
312
|
|
273
|
-
/* current max frame size */
|
274
|
-
uint32_t max_frame_size;
|
275
|
-
|
276
313
|
/* active parser */
|
277
314
|
void *parser_data;
|
278
|
-
|
315
|
+
grpc_chttp2_stream *incoming_stream;
|
279
316
|
grpc_error *(*parser)(grpc_exec_ctx *exec_ctx, void *parser_user_data,
|
280
|
-
|
281
|
-
|
282
|
-
gpr_slice slice, int is_last);
|
283
|
-
|
284
|
-
/* received settings */
|
285
|
-
uint32_t settings[GRPC_CHTTP2_NUM_SETTINGS];
|
286
|
-
/* last settings that were sent */
|
287
|
-
uint32_t last_sent_settings[GRPC_CHTTP2_NUM_SETTINGS];
|
317
|
+
grpc_chttp2_transport *t, grpc_chttp2_stream *s,
|
318
|
+
grpc_slice slice, int is_last);
|
288
319
|
|
289
320
|
/* goaway data */
|
290
321
|
grpc_status_code goaway_error;
|
291
322
|
uint32_t goaway_last_stream_index;
|
292
|
-
|
293
|
-
|
294
|
-
|
323
|
+
grpc_slice goaway_text;
|
324
|
+
|
325
|
+
grpc_chttp2_write_cb *write_cb_pool;
|
326
|
+
|
327
|
+
/* if non-NULL, close the transport with this error when writes are finished
|
328
|
+
*/
|
329
|
+
grpc_error *close_transport_on_writes_finished;
|
330
|
+
|
331
|
+
/* a list of closures to run after writes are finished */
|
332
|
+
grpc_closure_list run_after_write;
|
333
|
+
|
334
|
+
/* buffer pool state */
|
335
|
+
/** have we scheduled a benign cleanup? */
|
336
|
+
bool benign_reclaimer_registered;
|
337
|
+
/** have we scheduled a destructive cleanup? */
|
338
|
+
bool destructive_reclaimer_registered;
|
339
|
+
/** benign cleanup closure */
|
340
|
+
grpc_closure benign_reclaimer_locked;
|
341
|
+
/** destructive cleanup closure */
|
342
|
+
grpc_closure destructive_reclaimer_locked;
|
295
343
|
};
|
296
344
|
|
297
|
-
typedef void (*grpc_chttp2_locked_action)(grpc_exec_ctx *ctx,
|
298
|
-
grpc_chttp2_transport *t,
|
299
|
-
grpc_chttp2_stream *s, void *arg);
|
300
|
-
|
301
|
-
typedef struct grpc_chttp2_executor_action_header {
|
302
|
-
grpc_chttp2_stream *stream;
|
303
|
-
grpc_chttp2_locked_action action;
|
304
|
-
struct grpc_chttp2_executor_action_header *next;
|
305
|
-
void *arg;
|
306
|
-
} grpc_chttp2_executor_action_header;
|
307
|
-
|
308
345
|
typedef enum {
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
/** write has been requested and scheduled against the workqueue */
|
315
|
-
GRPC_CHTTP2_WRITE_SCHEDULED,
|
316
|
-
/** write has been initiated after being reaped from the workqueue */
|
317
|
-
GRPC_CHTTP2_WRITING,
|
318
|
-
/** write has been initiated, AND another write needs to be started once it's
|
319
|
-
done */
|
320
|
-
GRPC_CHTTP2_WRITING_STALE_WITH_POLLER,
|
321
|
-
GRPC_CHTTP2_WRITING_STALE_NO_POLLER,
|
322
|
-
} grpc_chttp2_write_state;
|
323
|
-
|
324
|
-
struct grpc_chttp2_transport {
|
325
|
-
grpc_transport base; /* must be first */
|
326
|
-
gpr_refcount refs;
|
327
|
-
grpc_endpoint *ep;
|
328
|
-
char *peer_string;
|
329
|
-
|
330
|
-
/** when this drops to zero it's safe to shutdown the endpoint */
|
331
|
-
gpr_refcount shutdown_ep_refs;
|
332
|
-
|
333
|
-
struct {
|
334
|
-
gpr_mu mu;
|
335
|
-
|
336
|
-
/** is a thread currently in the global lock */
|
337
|
-
bool global_active;
|
338
|
-
/** is a thread currently parsing */
|
339
|
-
bool parsing_active;
|
340
|
-
/** write execution state of the transport */
|
341
|
-
grpc_chttp2_write_state write_state;
|
342
|
-
|
343
|
-
grpc_chttp2_executor_action_header *pending_actions_head;
|
344
|
-
grpc_chttp2_executor_action_header *pending_actions_tail;
|
345
|
-
} executor;
|
346
|
-
|
347
|
-
/** is the transport destroying itself? */
|
348
|
-
uint8_t destroying;
|
349
|
-
/** has the upper layer closed the transport? */
|
350
|
-
uint8_t closed;
|
351
|
-
|
352
|
-
/** is there a read request to the endpoint outstanding? */
|
353
|
-
uint8_t endpoint_reading;
|
354
|
-
|
355
|
-
/** various lists of streams */
|
356
|
-
grpc_chttp2_stream_list lists[STREAM_LIST_COUNT];
|
357
|
-
|
358
|
-
/** global state for reading/writing */
|
359
|
-
grpc_chttp2_transport_global global;
|
360
|
-
/** state only accessible by the chain of execution that
|
361
|
-
set writing_state >= GRPC_WRITING, and only by the writing closure
|
362
|
-
chain. */
|
363
|
-
grpc_chttp2_transport_writing writing;
|
364
|
-
/** state only accessible by the chain of execution that
|
365
|
-
set parsing_active=1 */
|
366
|
-
grpc_chttp2_transport_parsing parsing;
|
367
|
-
|
368
|
-
/** maps stream id to grpc_chttp2_stream objects;
|
369
|
-
owned by the parsing thread when parsing */
|
370
|
-
grpc_chttp2_stream_map parsing_stream_map;
|
371
|
-
|
372
|
-
/** streams created by the client (possibly during parsing);
|
373
|
-
merged with parsing_stream_map during unlock when no
|
374
|
-
parsing is occurring */
|
375
|
-
grpc_chttp2_stream_map new_stream_map;
|
376
|
-
|
377
|
-
/** closure to execute writing */
|
378
|
-
grpc_closure writing_action;
|
379
|
-
/** closure to start reading from the endpoint */
|
380
|
-
grpc_closure reading_action;
|
381
|
-
/** closure to actually do parsing */
|
382
|
-
grpc_closure parsing_action;
|
383
|
-
/** closure to initiate writing */
|
384
|
-
grpc_closure initiate_writing;
|
346
|
+
GRPC_METADATA_NOT_PUBLISHED,
|
347
|
+
GRPC_METADATA_SYNTHESIZED_FROM_FAKE,
|
348
|
+
GRPC_METADATA_PUBLISHED_FROM_WIRE,
|
349
|
+
GPRC_METADATA_PUBLISHED_AT_CLOSE
|
350
|
+
} grpc_published_metadata_method;
|
385
351
|
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
/** address to place a newly accepted stream - set and unset by
|
390
|
-
grpc_chttp2_parsing_accept_stream; used by init_stream to
|
391
|
-
publish the accepted server stream */
|
392
|
-
grpc_chttp2_stream **accepting_stream;
|
352
|
+
struct grpc_chttp2_stream {
|
353
|
+
grpc_chttp2_transport *t;
|
354
|
+
grpc_stream_refcount *refcount;
|
393
355
|
|
394
|
-
|
395
|
-
|
396
|
-
void (*accept_stream)(grpc_exec_ctx *exec_ctx, void *user_data,
|
397
|
-
grpc_transport *transport, const void *server_data);
|
398
|
-
void *accept_stream_user_data;
|
356
|
+
grpc_closure destroy_stream;
|
357
|
+
void *destroy_stream_arg;
|
399
358
|
|
400
|
-
|
401
|
-
|
402
|
-
} channel_callback;
|
403
|
-
|
404
|
-
/** Transport op to be applied post-parsing */
|
405
|
-
grpc_transport_op *post_parsing_op;
|
406
|
-
};
|
359
|
+
grpc_chttp2_stream_link links[STREAM_LIST_COUNT];
|
360
|
+
uint8_t included[STREAM_LIST_COUNT];
|
407
361
|
|
408
|
-
typedef struct {
|
409
362
|
/** HTTP2 stream id for this stream, or zero if one has not been assigned */
|
410
363
|
uint32_t id;
|
411
364
|
|
@@ -415,20 +368,22 @@ typedef struct {
|
|
415
368
|
As the upper layer offers more bytes, this value increases.
|
416
369
|
As bytes are read, this value decreases. */
|
417
370
|
uint32_t max_recv_bytes;
|
418
|
-
/** The number of bytes the upper layer has offered to read but we have
|
419
|
-
not yet announced to HTTP2 flow control.
|
420
|
-
As the upper layers offer to read more bytes, this value increases.
|
421
|
-
As we advertise incoming flow control window, this value decreases. */
|
422
|
-
uint32_t unannounced_incoming_window_for_parse;
|
423
|
-
uint32_t unannounced_incoming_window_for_writing;
|
424
371
|
/** things the upper layers would like to send */
|
425
372
|
grpc_metadata_batch *send_initial_metadata;
|
426
373
|
grpc_closure *send_initial_metadata_finished;
|
427
|
-
grpc_byte_stream *send_message;
|
428
|
-
grpc_closure *send_message_finished;
|
429
374
|
grpc_metadata_batch *send_trailing_metadata;
|
430
375
|
grpc_closure *send_trailing_metadata_finished;
|
431
376
|
|
377
|
+
grpc_byte_stream *fetching_send_message;
|
378
|
+
uint32_t fetched_send_message_length;
|
379
|
+
grpc_slice fetching_slice;
|
380
|
+
int64_t next_message_end_offset;
|
381
|
+
int64_t flow_controlled_bytes_written;
|
382
|
+
bool complete_fetch_covered_by_poller;
|
383
|
+
grpc_closure complete_fetch;
|
384
|
+
grpc_closure complete_fetch_locked;
|
385
|
+
grpc_closure *fetching_send_message_finished;
|
386
|
+
|
432
387
|
grpc_metadata_batch *recv_initial_metadata;
|
433
388
|
grpc_closure *recv_initial_metadata_ready;
|
434
389
|
grpc_byte_stream **recv_message;
|
@@ -448,90 +403,47 @@ typedef struct {
|
|
448
403
|
bool read_closed;
|
449
404
|
/** Are all published incoming byte streams closed. */
|
450
405
|
bool all_incoming_byte_streams_finished;
|
451
|
-
/** Is this stream in the stream map. */
|
452
|
-
bool in_stream_map;
|
453
406
|
/** Has this stream seen an error.
|
454
407
|
If true, then pending incoming frames can be thrown away. */
|
455
408
|
bool seen_error;
|
456
|
-
|
409
|
+
/** Are we buffering writes on this stream? If yes, we won't become writable
|
410
|
+
until there's enough queued up in the flow_controlled_buffer */
|
411
|
+
bool write_buffering;
|
457
412
|
|
458
413
|
/** the error that resulted in this stream being read-closed */
|
459
414
|
grpc_error *read_closed_error;
|
460
415
|
/** the error that resulted in this stream being write-closed */
|
461
416
|
grpc_error *write_closed_error;
|
462
417
|
|
463
|
-
|
464
|
-
bool published_trailing_metadata;
|
418
|
+
grpc_published_metadata_method published_metadata[2];
|
465
419
|
bool final_metadata_requested;
|
466
420
|
|
467
|
-
grpc_chttp2_incoming_metadata_buffer
|
468
|
-
grpc_chttp2_incoming_metadata_buffer received_trailing_metadata;
|
421
|
+
grpc_chttp2_incoming_metadata_buffer metadata_buffer[2];
|
469
422
|
|
470
423
|
grpc_chttp2_incoming_frame_queue incoming_frames;
|
471
424
|
|
472
425
|
gpr_timespec deadline;
|
473
|
-
} grpc_chttp2_stream_global;
|
474
426
|
|
475
|
-
typedef struct {
|
476
|
-
/** HTTP2 stream id for this stream, or zero if one has not been assigned */
|
477
|
-
uint32_t id;
|
478
|
-
uint8_t fetching;
|
479
|
-
bool sent_initial_metadata;
|
480
|
-
uint8_t sent_message;
|
481
|
-
uint8_t sent_trailing_metadata;
|
482
|
-
uint8_t read_closed;
|
483
|
-
/** send this initial metadata */
|
484
|
-
grpc_metadata_batch *send_initial_metadata;
|
485
|
-
grpc_byte_stream *send_message;
|
486
|
-
grpc_metadata_batch *send_trailing_metadata;
|
487
|
-
int64_t outgoing_window;
|
488
|
-
/** how much window should we announce? */
|
489
|
-
uint32_t announce_window;
|
490
|
-
gpr_slice_buffer flow_controlled_buffer;
|
491
|
-
gpr_slice fetching_slice;
|
492
|
-
size_t stream_fetched;
|
493
|
-
grpc_closure finished_fetch;
|
494
|
-
/** stats gathered during the write */
|
495
|
-
grpc_transport_one_way_stats stats;
|
496
|
-
} grpc_chttp2_stream_writing;
|
497
|
-
|
498
|
-
struct grpc_chttp2_stream_parsing {
|
499
427
|
/** saw some stream level error */
|
500
428
|
grpc_error *forced_close_error;
|
501
|
-
/** HTTP2 stream id for this stream, or zero if one has not been assigned */
|
502
|
-
uint32_t id;
|
503
|
-
/** has this stream received a close */
|
504
|
-
uint8_t received_close;
|
505
429
|
/** how many header frames have we received? */
|
506
430
|
uint8_t header_frames_received;
|
507
|
-
/** which metadata did we get (on this parse) */
|
508
|
-
uint8_t got_metadata_on_parse[2];
|
509
|
-
/** should we raise the seen_error flag in transport_global */
|
510
|
-
bool seen_error;
|
511
|
-
bool exceeded_metadata_size;
|
512
431
|
/** window available for peer to send to us */
|
513
432
|
int64_t incoming_window;
|
514
433
|
/** parsing state for data frames */
|
515
434
|
grpc_chttp2_data_parser data_parser;
|
516
|
-
/** amount of window given */
|
517
|
-
int64_t outgoing_window;
|
518
435
|
/** number of bytes received - reset at end of parse thread execution */
|
519
436
|
int64_t received_bytes;
|
520
|
-
/** stats gathered during the parse */
|
521
|
-
grpc_transport_stream_stats stats;
|
522
437
|
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
grpc_stream_refcount *refcount;
|
529
|
-
grpc_chttp2_stream_global global;
|
530
|
-
grpc_chttp2_stream_writing writing;
|
531
|
-
grpc_chttp2_stream_parsing parsing;
|
438
|
+
bool sent_initial_metadata;
|
439
|
+
bool sent_trailing_metadata;
|
440
|
+
/** how much window should we announce? */
|
441
|
+
uint32_t announce_window;
|
442
|
+
grpc_slice_buffer flow_controlled_buffer;
|
532
443
|
|
533
|
-
|
534
|
-
|
444
|
+
grpc_chttp2_write_cb *on_write_finished_cbs;
|
445
|
+
grpc_chttp2_write_cb *finish_after_write;
|
446
|
+
size_t sending_bytes;
|
535
447
|
};
|
536
448
|
|
537
449
|
/** Transport writing call flow:
|
@@ -547,168 +459,74 @@ struct grpc_chttp2_stream {
|
|
547
459
|
The actual call chain is documented in the implementation of this function.
|
548
460
|
*/
|
549
461
|
void grpc_chttp2_initiate_write(grpc_exec_ctx *exec_ctx,
|
550
|
-
|
462
|
+
grpc_chttp2_transport *t,
|
551
463
|
bool covered_by_poller, const char *reason);
|
552
464
|
|
553
465
|
/** Someone is unlocking the transport mutex: check to see if writes
|
554
|
-
are required, and
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing,
|
560
|
-
grpc_endpoint *endpoint);
|
561
|
-
void grpc_chttp2_terminate_writing(grpc_exec_ctx *exec_ctx,
|
562
|
-
void *transport_writing, grpc_error *error);
|
563
|
-
void grpc_chttp2_cleanup_writing(grpc_exec_ctx *exec_ctx,
|
564
|
-
grpc_chttp2_transport_global *global,
|
565
|
-
grpc_chttp2_transport_writing *writing);
|
566
|
-
|
567
|
-
void grpc_chttp2_prepare_to_read(grpc_chttp2_transport_global *global,
|
568
|
-
grpc_chttp2_transport_parsing *parsing);
|
466
|
+
are required, and frame them if so */
|
467
|
+
bool grpc_chttp2_begin_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t);
|
468
|
+
void grpc_chttp2_end_write(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
469
|
+
grpc_error *error);
|
470
|
+
|
569
471
|
/** Process one slice of incoming data; return 1 if the connection is still
|
570
472
|
viable after reading, or 0 if the connection should be torn down */
|
571
|
-
grpc_error *grpc_chttp2_perform_read(
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
bool grpc_chttp2_list_add_writable_stream(
|
579
|
-
grpc_chttp2_transport_global *transport_global,
|
580
|
-
grpc_chttp2_stream_global *stream_global);
|
473
|
+
grpc_error *grpc_chttp2_perform_read(grpc_exec_ctx *exec_ctx,
|
474
|
+
grpc_chttp2_transport *t,
|
475
|
+
grpc_slice slice);
|
476
|
+
|
477
|
+
bool grpc_chttp2_list_add_writable_stream(grpc_chttp2_transport *t,
|
478
|
+
grpc_chttp2_stream *s);
|
581
479
|
/** Get a writable stream
|
582
480
|
returns non-zero if there was a stream available */
|
583
|
-
int grpc_chttp2_list_pop_writable_stream(
|
584
|
-
|
585
|
-
grpc_chttp2_transport_writing *transport_writing,
|
586
|
-
grpc_chttp2_stream_global **stream_global,
|
587
|
-
grpc_chttp2_stream_writing **stream_writing);
|
481
|
+
int grpc_chttp2_list_pop_writable_stream(grpc_chttp2_transport *t,
|
482
|
+
grpc_chttp2_stream **s);
|
588
483
|
bool grpc_chttp2_list_remove_writable_stream(
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
int
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
void grpc_chttp2_list_add_writing_stalled_by_transport(
|
637
|
-
grpc_chttp2_transport_writing *transport_writing,
|
638
|
-
grpc_chttp2_stream_writing *stream_writing);
|
639
|
-
bool grpc_chttp2_list_flush_writing_stalled_by_transport(
|
640
|
-
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_writing *transport_writing);
|
641
|
-
|
642
|
-
void grpc_chttp2_list_add_stalled_by_transport(
|
643
|
-
grpc_chttp2_transport_writing *transport_writing,
|
644
|
-
grpc_chttp2_stream_writing *stream_writing);
|
645
|
-
int grpc_chttp2_list_pop_stalled_by_transport(
|
646
|
-
grpc_chttp2_transport_global *transport_global,
|
647
|
-
grpc_chttp2_stream_global **stream_global);
|
648
|
-
void grpc_chttp2_list_remove_stalled_by_transport(
|
649
|
-
grpc_chttp2_transport_global *transport_global,
|
650
|
-
grpc_chttp2_stream_global *stream_global);
|
651
|
-
|
652
|
-
void grpc_chttp2_list_add_unannounced_incoming_window_available(
|
653
|
-
grpc_chttp2_transport_global *transport_global,
|
654
|
-
grpc_chttp2_stream_global *stream_global);
|
655
|
-
void grpc_chttp2_list_remove_unannounced_incoming_window_available(
|
656
|
-
grpc_chttp2_transport_global *transport_global,
|
657
|
-
grpc_chttp2_stream_global *stream_global);
|
658
|
-
int grpc_chttp2_list_pop_unannounced_incoming_window_available(
|
659
|
-
grpc_chttp2_transport_global *transport_global,
|
660
|
-
grpc_chttp2_transport_parsing *transport_parsing,
|
661
|
-
grpc_chttp2_stream_global **stream_global,
|
662
|
-
grpc_chttp2_stream_parsing **stream_parsing);
|
663
|
-
|
664
|
-
void grpc_chttp2_list_add_closed_waiting_for_parsing(
|
665
|
-
grpc_chttp2_transport_global *transport_global,
|
666
|
-
grpc_chttp2_stream_global *stream_global);
|
667
|
-
int grpc_chttp2_list_pop_closed_waiting_for_parsing(
|
668
|
-
grpc_chttp2_transport_global *transport_global,
|
669
|
-
grpc_chttp2_stream_global **stream_global);
|
670
|
-
|
671
|
-
void grpc_chttp2_list_add_closed_waiting_for_writing(
|
672
|
-
grpc_chttp2_transport_global *transport_global,
|
673
|
-
grpc_chttp2_stream_global *stream_global);
|
674
|
-
int grpc_chttp2_list_pop_closed_waiting_for_writing(
|
675
|
-
grpc_chttp2_transport_global *transport_global,
|
676
|
-
grpc_chttp2_stream_global **stream_global);
|
677
|
-
|
678
|
-
grpc_chttp2_stream_parsing *grpc_chttp2_parsing_lookup_stream(
|
679
|
-
grpc_chttp2_transport_parsing *transport_parsing, uint32_t id);
|
680
|
-
grpc_chttp2_stream_parsing *grpc_chttp2_parsing_accept_stream(
|
681
|
-
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing,
|
682
|
-
uint32_t id);
|
683
|
-
|
684
|
-
void grpc_chttp2_add_incoming_goaway(
|
685
|
-
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
|
686
|
-
uint32_t goaway_error, gpr_slice goaway_text);
|
687
|
-
|
688
|
-
void grpc_chttp2_register_stream(grpc_chttp2_transport *t,
|
689
|
-
grpc_chttp2_stream *s);
|
690
|
-
/* returns 1 if this is the last stream, 0 otherwise */
|
691
|
-
int grpc_chttp2_unregister_stream(grpc_chttp2_transport *t,
|
692
|
-
grpc_chttp2_stream *s) GRPC_MUST_USE_RESULT;
|
693
|
-
int grpc_chttp2_has_streams(grpc_chttp2_transport *t);
|
694
|
-
void grpc_chttp2_for_all_streams(
|
695
|
-
grpc_chttp2_transport_global *transport_global, void *user_data,
|
696
|
-
void (*cb)(grpc_chttp2_transport_global *transport_global, void *user_data,
|
697
|
-
grpc_chttp2_stream_global *stream_global));
|
698
|
-
|
699
|
-
void grpc_chttp2_parsing_become_skip_parser(
|
700
|
-
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_parsing *transport_parsing);
|
701
|
-
|
702
|
-
void grpc_chttp2_complete_closure_step(
|
703
|
-
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport_global *transport_global,
|
704
|
-
grpc_chttp2_stream_global *stream_global, grpc_closure **pclosure,
|
705
|
-
grpc_error *error);
|
706
|
-
|
707
|
-
void grpc_chttp2_run_with_global_lock(grpc_exec_ctx *exec_ctx,
|
708
|
-
grpc_chttp2_transport *transport,
|
709
|
-
grpc_chttp2_stream *optional_stream,
|
710
|
-
grpc_chttp2_locked_action action,
|
711
|
-
void *arg, size_t sizeof_arg);
|
484
|
+
grpc_chttp2_transport *t, grpc_chttp2_stream *s) GRPC_MUST_USE_RESULT;
|
485
|
+
|
486
|
+
bool grpc_chttp2_list_add_writing_stream(grpc_chttp2_transport *t,
|
487
|
+
grpc_chttp2_stream *s);
|
488
|
+
int grpc_chttp2_list_have_writing_streams(grpc_chttp2_transport *t);
|
489
|
+
int grpc_chttp2_list_pop_writing_stream(grpc_chttp2_transport *t,
|
490
|
+
grpc_chttp2_stream **s);
|
491
|
+
|
492
|
+
void grpc_chttp2_list_add_written_stream(grpc_chttp2_transport *t,
|
493
|
+
grpc_chttp2_stream *s);
|
494
|
+
int grpc_chttp2_list_pop_written_stream(grpc_chttp2_transport *t,
|
495
|
+
grpc_chttp2_stream **s);
|
496
|
+
|
497
|
+
void grpc_chttp2_list_add_waiting_for_concurrency(grpc_chttp2_transport *t,
|
498
|
+
grpc_chttp2_stream *s);
|
499
|
+
int grpc_chttp2_list_pop_waiting_for_concurrency(grpc_chttp2_transport *t,
|
500
|
+
grpc_chttp2_stream **s);
|
501
|
+
void grpc_chttp2_list_remove_waiting_for_concurrency(grpc_chttp2_transport *t,
|
502
|
+
grpc_chttp2_stream *s);
|
503
|
+
|
504
|
+
void grpc_chttp2_list_add_stalled_by_transport(grpc_chttp2_transport *t,
|
505
|
+
grpc_chttp2_stream *s);
|
506
|
+
int grpc_chttp2_list_pop_stalled_by_transport(grpc_chttp2_transport *t,
|
507
|
+
grpc_chttp2_stream **s);
|
508
|
+
void grpc_chttp2_list_remove_stalled_by_transport(grpc_chttp2_transport *t,
|
509
|
+
grpc_chttp2_stream *s);
|
510
|
+
|
511
|
+
grpc_chttp2_stream *grpc_chttp2_parsing_lookup_stream(grpc_chttp2_transport *t,
|
512
|
+
uint32_t id);
|
513
|
+
grpc_chttp2_stream *grpc_chttp2_parsing_accept_stream(grpc_exec_ctx *exec_ctx,
|
514
|
+
grpc_chttp2_transport *t,
|
515
|
+
uint32_t id);
|
516
|
+
|
517
|
+
void grpc_chttp2_add_incoming_goaway(grpc_exec_ctx *exec_ctx,
|
518
|
+
grpc_chttp2_transport *t,
|
519
|
+
uint32_t goaway_error,
|
520
|
+
grpc_slice goaway_text);
|
521
|
+
|
522
|
+
void grpc_chttp2_parsing_become_skip_parser(grpc_exec_ctx *exec_ctx,
|
523
|
+
grpc_chttp2_transport *t);
|
524
|
+
|
525
|
+
void grpc_chttp2_complete_closure_step(grpc_exec_ctx *exec_ctx,
|
526
|
+
grpc_chttp2_transport *t,
|
527
|
+
grpc_chttp2_stream *s,
|
528
|
+
grpc_closure **pclosure,
|
529
|
+
grpc_error *error, const char *desc);
|
712
530
|
|
713
531
|
#define GRPC_CHTTP2_CLIENT_CONNECT_STRING "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
714
532
|
#define GRPC_CHTTP2_CLIENT_CONNECT_STRLEN \
|
@@ -799,57 +617,87 @@ void grpc_chttp2_flowctl_trace(const char *file, int line, const char *phase,
|
|
799
617
|
const char *var2, int is_client,
|
800
618
|
uint32_t stream_id, int64_t val1, int64_t val2);
|
801
619
|
|
802
|
-
void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx,
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
grpc_error *error);
|
620
|
+
void grpc_chttp2_fake_status(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
621
|
+
grpc_chttp2_stream *stream,
|
622
|
+
grpc_status_code status, grpc_slice *details);
|
623
|
+
void grpc_chttp2_mark_stream_closed(grpc_exec_ctx *exec_ctx,
|
624
|
+
grpc_chttp2_transport *t,
|
625
|
+
grpc_chttp2_stream *s, int close_reads,
|
626
|
+
int close_writes, grpc_error *error);
|
810
627
|
void grpc_chttp2_start_writing(grpc_exec_ctx *exec_ctx,
|
811
|
-
|
628
|
+
grpc_chttp2_transport *t);
|
812
629
|
|
813
630
|
#ifdef GRPC_STREAM_REFCOUNT_DEBUG
|
814
|
-
#define GRPC_CHTTP2_STREAM_REF(
|
815
|
-
grpc_chttp2_stream_ref(
|
816
|
-
#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx,
|
817
|
-
grpc_chttp2_stream_unref(exec_ctx,
|
818
|
-
void grpc_chttp2_stream_ref(
|
819
|
-
|
820
|
-
void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx,
|
821
|
-
grpc_chttp2_stream_global *stream_global,
|
631
|
+
#define GRPC_CHTTP2_STREAM_REF(stream, reason) \
|
632
|
+
grpc_chttp2_stream_ref(stream, reason)
|
633
|
+
#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream, reason) \
|
634
|
+
grpc_chttp2_stream_unref(exec_ctx, stream, reason)
|
635
|
+
void grpc_chttp2_stream_ref(grpc_chttp2_stream *s, const char *reason);
|
636
|
+
void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s,
|
822
637
|
const char *reason);
|
823
638
|
#else
|
824
|
-
#define GRPC_CHTTP2_STREAM_REF(
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
void
|
829
|
-
|
830
|
-
|
639
|
+
#define GRPC_CHTTP2_STREAM_REF(stream, reason) grpc_chttp2_stream_ref(stream)
|
640
|
+
#define GRPC_CHTTP2_STREAM_UNREF(exec_ctx, stream, reason) \
|
641
|
+
grpc_chttp2_stream_unref(exec_ctx, stream)
|
642
|
+
void grpc_chttp2_stream_ref(grpc_chttp2_stream *s);
|
643
|
+
void grpc_chttp2_stream_unref(grpc_exec_ctx *exec_ctx, grpc_chttp2_stream *s);
|
644
|
+
#endif
|
645
|
+
|
646
|
+
//#define GRPC_CHTTP2_REFCOUNTING_DEBUG 1
|
647
|
+
#ifdef GRPC_CHTTP2_REFCOUNTING_DEBUG
|
648
|
+
#define GRPC_CHTTP2_REF_TRANSPORT(t, r) \
|
649
|
+
grpc_chttp2_ref_transport(t, r, __FILE__, __LINE__)
|
650
|
+
#define GRPC_CHTTP2_UNREF_TRANSPORT(cl, t, r) \
|
651
|
+
grpc_chttp2_unref_transport(cl, t, r, __FILE__, __LINE__)
|
652
|
+
void grpc_chttp2_unref_transport(grpc_exec_ctx *exec_ctx,
|
653
|
+
grpc_chttp2_transport *t, const char *reason,
|
654
|
+
const char *file, int line);
|
655
|
+
void grpc_chttp2_ref_transport(grpc_chttp2_transport *t, const char *reason,
|
656
|
+
const char *file, int line);
|
657
|
+
#else
|
658
|
+
#define GRPC_CHTTP2_REF_TRANSPORT(t, r) grpc_chttp2_ref_transport(t)
|
659
|
+
#define GRPC_CHTTP2_UNREF_TRANSPORT(cl, t, r) grpc_chttp2_unref_transport(cl, t)
|
660
|
+
void grpc_chttp2_unref_transport(grpc_exec_ctx *exec_ctx,
|
661
|
+
grpc_chttp2_transport *t);
|
662
|
+
void grpc_chttp2_ref_transport(grpc_chttp2_transport *t);
|
831
663
|
#endif
|
832
664
|
|
833
665
|
grpc_chttp2_incoming_byte_stream *grpc_chttp2_incoming_byte_stream_create(
|
834
|
-
grpc_exec_ctx *exec_ctx,
|
835
|
-
|
836
|
-
uint32_t flags, grpc_chttp2_incoming_frame_queue *add_to_queue);
|
666
|
+
grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t, grpc_chttp2_stream *s,
|
667
|
+
uint32_t frame_size, uint32_t flags);
|
837
668
|
void grpc_chttp2_incoming_byte_stream_push(grpc_exec_ctx *exec_ctx,
|
838
669
|
grpc_chttp2_incoming_byte_stream *bs,
|
839
|
-
|
670
|
+
grpc_slice slice);
|
840
671
|
void grpc_chttp2_incoming_byte_stream_finished(
|
841
672
|
grpc_exec_ctx *exec_ctx, grpc_chttp2_incoming_byte_stream *bs,
|
842
|
-
grpc_error *error
|
673
|
+
grpc_error *error);
|
843
674
|
|
844
|
-
void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx,
|
845
|
-
grpc_chttp2_transport_parsing *parsing,
|
675
|
+
void grpc_chttp2_ack_ping(grpc_exec_ctx *exec_ctx, grpc_chttp2_transport *t,
|
846
676
|
const uint8_t *opaque_8bytes);
|
847
677
|
|
848
678
|
/** add a ref to the stream and add it to the writable list;
|
849
679
|
ref will be dropped in writing.c */
|
850
680
|
void grpc_chttp2_become_writable(grpc_exec_ctx *exec_ctx,
|
851
|
-
|
852
|
-
|
853
|
-
|
681
|
+
grpc_chttp2_transport *t,
|
682
|
+
grpc_chttp2_stream *s, bool covered_by_poller,
|
683
|
+
const char *reason);
|
684
|
+
|
685
|
+
void grpc_chttp2_cancel_stream(grpc_exec_ctx *exec_ctx,
|
686
|
+
grpc_chttp2_transport *t, grpc_chttp2_stream *s,
|
687
|
+
grpc_error *due_to_error);
|
688
|
+
|
689
|
+
void grpc_chttp2_maybe_complete_recv_initial_metadata(grpc_exec_ctx *exec_ctx,
|
690
|
+
grpc_chttp2_transport *t,
|
691
|
+
grpc_chttp2_stream *s);
|
692
|
+
void grpc_chttp2_maybe_complete_recv_message(grpc_exec_ctx *exec_ctx,
|
693
|
+
grpc_chttp2_transport *t,
|
694
|
+
grpc_chttp2_stream *s);
|
695
|
+
void grpc_chttp2_maybe_complete_recv_trailing_metadata(grpc_exec_ctx *exec_ctx,
|
696
|
+
grpc_chttp2_transport *t,
|
697
|
+
grpc_chttp2_stream *s);
|
698
|
+
|
699
|
+
void grpc_chttp2_fail_pending_writes(grpc_exec_ctx *exec_ctx,
|
700
|
+
grpc_chttp2_transport *t,
|
701
|
+
grpc_chttp2_stream *s, grpc_error *error);
|
854
702
|
|
855
703
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_INTERNAL_H */
|