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
@@ -39,13 +39,15 @@
|
|
39
39
|
#include <grpc/support/string_util.h>
|
40
40
|
|
41
41
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
42
|
+
#include "src/core/ext/transport/chttp2/transport/http2_errors.h"
|
43
|
+
#include "src/core/ext/transport/chttp2/transport/status_conversion.h"
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
+
grpc_slice grpc_chttp2_rst_stream_create(uint32_t id, uint32_t code,
|
46
|
+
grpc_transport_one_way_stats *stats) {
|
45
47
|
static const size_t frame_size = 13;
|
46
|
-
|
48
|
+
grpc_slice slice = grpc_slice_malloc(frame_size);
|
47
49
|
stats->framing_bytes += frame_size;
|
48
|
-
uint8_t *p =
|
50
|
+
uint8_t *p = GRPC_SLICE_START_PTR(slice);
|
49
51
|
|
50
52
|
// Frame size.
|
51
53
|
*p++ = 0;
|
@@ -83,12 +85,13 @@ grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
|
|
83
85
|
return GRPC_ERROR_NONE;
|
84
86
|
}
|
85
87
|
|
86
|
-
grpc_error *grpc_chttp2_rst_stream_parser_parse(
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
uint8_t *const
|
88
|
+
grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
|
89
|
+
void *parser,
|
90
|
+
grpc_chttp2_transport *t,
|
91
|
+
grpc_chttp2_stream *s,
|
92
|
+
grpc_slice slice, int is_last) {
|
93
|
+
uint8_t *const beg = GRPC_SLICE_START_PTR(slice);
|
94
|
+
uint8_t *const end = GRPC_SLICE_END_PTR(slice);
|
92
95
|
uint8_t *cur = beg;
|
93
96
|
grpc_chttp2_rst_stream_parser *p = parser;
|
94
97
|
|
@@ -97,19 +100,28 @@ grpc_error *grpc_chttp2_rst_stream_parser_parse(
|
|
97
100
|
cur++;
|
98
101
|
p->byte++;
|
99
102
|
}
|
100
|
-
|
103
|
+
s->stats.incoming.framing_bytes += (uint64_t)(end - cur);
|
101
104
|
|
102
105
|
if (p->byte == 4) {
|
103
106
|
GPR_ASSERT(is_last);
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
107
|
+
uint32_t reason = (((uint32_t)p->reason_bytes[0]) << 24) |
|
108
|
+
(((uint32_t)p->reason_bytes[1]) << 16) |
|
109
|
+
(((uint32_t)p->reason_bytes[2]) << 8) |
|
110
|
+
(((uint32_t)p->reason_bytes[3]));
|
111
|
+
grpc_error *error = GRPC_ERROR_NONE;
|
112
|
+
if (reason != GRPC_CHTTP2_NO_ERROR || s->header_frames_received < 2) {
|
113
|
+
error = grpc_error_set_int(GRPC_ERROR_CREATE("RST_STREAM"),
|
114
|
+
GRPC_ERROR_INT_HTTP2_ERROR, (intptr_t)reason);
|
115
|
+
grpc_status_code status_code = grpc_chttp2_http2_error_to_grpc_status(
|
116
|
+
(grpc_chttp2_error_code)reason, s->deadline);
|
117
|
+
char *status_details;
|
118
|
+
gpr_asprintf(&status_details, "Received RST_STREAM with error code %d",
|
119
|
+
reason);
|
120
|
+
grpc_slice slice_details = grpc_slice_from_copied_string(status_details);
|
121
|
+
gpr_free(status_details);
|
122
|
+
grpc_chttp2_fake_status(exec_ctx, t, s, status_code, &slice_details);
|
112
123
|
}
|
124
|
+
grpc_chttp2_mark_stream_closed(exec_ctx, t, s, true, true, error);
|
113
125
|
}
|
114
126
|
|
115
127
|
return GRPC_ERROR_NONE;
|
@@ -34,7 +34,7 @@
|
|
34
34
|
#ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H
|
35
35
|
#define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H
|
36
36
|
|
37
|
-
#include <grpc/
|
37
|
+
#include <grpc/slice.h>
|
38
38
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
39
39
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
40
40
|
#include "src/core/lib/transport/transport.h"
|
@@ -44,14 +44,15 @@ typedef struct {
|
|
44
44
|
uint8_t reason_bytes[4];
|
45
45
|
} grpc_chttp2_rst_stream_parser;
|
46
46
|
|
47
|
-
|
48
|
-
|
47
|
+
grpc_slice grpc_chttp2_rst_stream_create(uint32_t stream_id, uint32_t code,
|
48
|
+
grpc_transport_one_way_stats *stats);
|
49
49
|
|
50
50
|
grpc_error *grpc_chttp2_rst_stream_parser_begin_frame(
|
51
51
|
grpc_chttp2_rst_stream_parser *parser, uint32_t length, uint8_t flags);
|
52
|
-
grpc_error *grpc_chttp2_rst_stream_parser_parse(
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
grpc_error *grpc_chttp2_rst_stream_parser_parse(grpc_exec_ctx *exec_ctx,
|
53
|
+
void *parser,
|
54
|
+
grpc_chttp2_transport *t,
|
55
|
+
grpc_chttp2_stream *s,
|
56
|
+
grpc_slice slice, int is_last);
|
56
57
|
|
57
58
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_RST_STREAM_H */
|
@@ -82,19 +82,19 @@ static uint8_t *fill_header(uint8_t *out, uint32_t length, uint8_t flags) {
|
|
82
82
|
return out;
|
83
83
|
}
|
84
84
|
|
85
|
-
|
86
|
-
|
85
|
+
grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
|
86
|
+
uint32_t force_mask, size_t count) {
|
87
87
|
size_t i;
|
88
88
|
uint32_t n = 0;
|
89
|
-
|
89
|
+
grpc_slice output;
|
90
90
|
uint8_t *p;
|
91
91
|
|
92
92
|
for (i = 0; i < count; i++) {
|
93
93
|
n += (new[i] != old[i] || (force_mask & (1u << i)) != 0);
|
94
94
|
}
|
95
95
|
|
96
|
-
output =
|
97
|
-
p = fill_header(
|
96
|
+
output = grpc_slice_malloc(9 + 6 * n);
|
97
|
+
p = fill_header(GRPC_SLICE_START_PTR(output), 6 * n, 0);
|
98
98
|
|
99
99
|
for (i = 0; i < count; i++) {
|
100
100
|
if (new[i] != old[i] || (force_mask & (1u << i)) != 0) {
|
@@ -109,14 +109,14 @@ gpr_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
|
|
109
109
|
}
|
110
110
|
}
|
111
111
|
|
112
|
-
GPR_ASSERT(p ==
|
112
|
+
GPR_ASSERT(p == GRPC_SLICE_END_PTR(output));
|
113
113
|
|
114
114
|
return output;
|
115
115
|
}
|
116
116
|
|
117
|
-
|
118
|
-
|
119
|
-
fill_header(
|
117
|
+
grpc_slice grpc_chttp2_settings_ack_create(void) {
|
118
|
+
grpc_slice output = grpc_slice_malloc(9);
|
119
|
+
fill_header(GRPC_SLICE_START_PTR(output), 0, GRPC_CHTTP2_FLAG_ACK);
|
120
120
|
return output;
|
121
121
|
}
|
122
122
|
|
@@ -143,13 +143,13 @@ grpc_error *grpc_chttp2_settings_parser_begin_frame(
|
|
143
143
|
}
|
144
144
|
}
|
145
145
|
|
146
|
-
grpc_error *grpc_chttp2_settings_parser_parse(
|
147
|
-
|
148
|
-
|
149
|
-
|
146
|
+
grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx, void *p,
|
147
|
+
grpc_chttp2_transport *t,
|
148
|
+
grpc_chttp2_stream *s,
|
149
|
+
grpc_slice slice, int is_last) {
|
150
150
|
grpc_chttp2_settings_parser *parser = p;
|
151
|
-
const uint8_t *cur =
|
152
|
-
const uint8_t *end =
|
151
|
+
const uint8_t *cur = GRPC_SLICE_START_PTR(slice);
|
152
|
+
const uint8_t *end = GRPC_SLICE_END_PTR(slice);
|
153
153
|
char *msg;
|
154
154
|
|
155
155
|
if (parser->is_ack) {
|
@@ -162,11 +162,9 @@ grpc_error *grpc_chttp2_settings_parser_parse(
|
|
162
162
|
if (cur == end) {
|
163
163
|
parser->state = GRPC_CHTTP2_SPS_ID0;
|
164
164
|
if (is_last) {
|
165
|
-
transport_parsing->settings_updated = 1;
|
166
165
|
memcpy(parser->target_settings, parser->incoming_settings,
|
167
166
|
GRPC_CHTTP2_NUM_SETTINGS * sizeof(uint32_t));
|
168
|
-
|
169
|
-
grpc_chttp2_settings_ack_create());
|
167
|
+
grpc_slice_buffer_add(&t->qbuf, grpc_chttp2_settings_ack_create());
|
170
168
|
}
|
171
169
|
return GRPC_ERROR_NONE;
|
172
170
|
}
|
@@ -226,9 +224,9 @@ grpc_error *grpc_chttp2_settings_parser_parse(
|
|
226
224
|
break;
|
227
225
|
case GRPC_CHTTP2_DISCONNECT_ON_INVALID_VALUE:
|
228
226
|
grpc_chttp2_goaway_append(
|
229
|
-
|
230
|
-
|
231
|
-
&
|
227
|
+
t->last_new_stream_id, sp->error_value,
|
228
|
+
grpc_slice_from_static_string("HTTP2 settings error"),
|
229
|
+
&t->qbuf);
|
232
230
|
gpr_asprintf(&msg, "invalid value %u passed for %s",
|
233
231
|
parser->value, sp->name);
|
234
232
|
grpc_error *err = GRPC_ERROR_CREATE(msg);
|
@@ -238,18 +236,17 @@ grpc_error *grpc_chttp2_settings_parser_parse(
|
|
238
236
|
}
|
239
237
|
if (parser->id == GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE &&
|
240
238
|
parser->incoming_settings[parser->id] != parser->value) {
|
241
|
-
|
239
|
+
t->initial_window_update =
|
242
240
|
(int64_t)parser->value - parser->incoming_settings[parser->id];
|
243
241
|
if (grpc_http_trace) {
|
244
242
|
gpr_log(GPR_DEBUG, "adding %d for initial_window change",
|
245
|
-
(int)
|
243
|
+
(int)t->initial_window_update);
|
246
244
|
}
|
247
245
|
}
|
248
246
|
parser->incoming_settings[parser->id] = parser->value;
|
249
247
|
if (grpc_http_trace) {
|
250
248
|
gpr_log(GPR_DEBUG, "CHTTP2:%s: got setting %d = %d",
|
251
|
-
|
252
|
-
parser->value);
|
249
|
+
t->is_client ? "CLI" : "SVR", parser->id, parser->value);
|
253
250
|
}
|
254
251
|
} else if (grpc_http_trace) {
|
255
252
|
gpr_log(GPR_ERROR, "CHTTP2: Ignoring unknown setting %d (value %d)",
|
@@ -34,8 +34,8 @@
|
|
34
34
|
#ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H
|
35
35
|
#define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_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/ext/transport/chttp2/transport/frame.h"
|
40
40
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
41
41
|
|
@@ -87,17 +87,18 @@ extern const grpc_chttp2_setting_parameters
|
|
87
87
|
grpc_chttp2_settings_parameters[GRPC_CHTTP2_NUM_SETTINGS];
|
88
88
|
|
89
89
|
/* Create a settings frame by diffing old & new, and updating old to be new */
|
90
|
-
|
91
|
-
|
90
|
+
grpc_slice grpc_chttp2_settings_create(uint32_t *old, const uint32_t *new,
|
91
|
+
uint32_t force_mask, size_t count);
|
92
92
|
/* Create an ack settings frame */
|
93
|
-
|
93
|
+
grpc_slice grpc_chttp2_settings_ack_create(void);
|
94
94
|
|
95
95
|
grpc_error *grpc_chttp2_settings_parser_begin_frame(
|
96
96
|
grpc_chttp2_settings_parser *parser, uint32_t length, uint8_t flags,
|
97
97
|
uint32_t *settings);
|
98
|
-
grpc_error *grpc_chttp2_settings_parser_parse(
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
grpc_error *grpc_chttp2_settings_parser_parse(grpc_exec_ctx *exec_ctx,
|
99
|
+
void *parser,
|
100
|
+
grpc_chttp2_transport *t,
|
101
|
+
grpc_chttp2_stream *s,
|
102
|
+
grpc_slice slice, int is_last);
|
102
103
|
|
103
104
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_SETTINGS_H */
|
@@ -38,12 +38,12 @@
|
|
38
38
|
#include <grpc/support/log.h>
|
39
39
|
#include <grpc/support/string_util.h>
|
40
40
|
|
41
|
-
|
41
|
+
grpc_slice grpc_chttp2_window_update_create(
|
42
42
|
uint32_t id, uint32_t window_update, grpc_transport_one_way_stats *stats) {
|
43
43
|
static const size_t frame_size = 13;
|
44
|
-
|
44
|
+
grpc_slice slice = grpc_slice_malloc(frame_size);
|
45
45
|
stats->header_bytes += frame_size;
|
46
|
-
uint8_t *p =
|
46
|
+
uint8_t *p = GRPC_SLICE_START_PTR(slice);
|
47
47
|
|
48
48
|
GPR_ASSERT(window_update);
|
49
49
|
|
@@ -80,11 +80,10 @@ grpc_error *grpc_chttp2_window_update_parser_begin_frame(
|
|
80
80
|
}
|
81
81
|
|
82
82
|
grpc_error *grpc_chttp2_window_update_parser_parse(
|
83
|
-
grpc_exec_ctx *exec_ctx, void *parser,
|
84
|
-
|
85
|
-
|
86
|
-
uint8_t *const
|
87
|
-
uint8_t *const end = GPR_SLICE_END_PTR(slice);
|
83
|
+
grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
|
84
|
+
grpc_chttp2_stream *s, grpc_slice slice, int is_last) {
|
85
|
+
uint8_t *const beg = GRPC_SLICE_START_PTR(slice);
|
86
|
+
uint8_t *const end = GRPC_SLICE_END_PTR(slice);
|
88
87
|
uint8_t *cur = beg;
|
89
88
|
grpc_chttp2_window_update_parser *p = parser;
|
90
89
|
|
@@ -94,8 +93,8 @@ grpc_error *grpc_chttp2_window_update_parser_parse(
|
|
94
93
|
p->byte++;
|
95
94
|
}
|
96
95
|
|
97
|
-
if (
|
98
|
-
|
96
|
+
if (s != NULL) {
|
97
|
+
s->stats.incoming.framing_bytes += (uint32_t)(end - cur);
|
99
98
|
}
|
100
99
|
|
101
100
|
if (p->byte == 4) {
|
@@ -109,17 +108,26 @@ grpc_error *grpc_chttp2_window_update_parser_parse(
|
|
109
108
|
}
|
110
109
|
GPR_ASSERT(is_last);
|
111
110
|
|
112
|
-
if (
|
113
|
-
if (
|
114
|
-
|
115
|
-
|
111
|
+
if (t->incoming_stream_id != 0) {
|
112
|
+
if (s != NULL) {
|
113
|
+
bool was_zero = s->outgoing_window <= 0;
|
114
|
+
GRPC_CHTTP2_FLOW_CREDIT_STREAM("parse", t, s, outgoing_window,
|
116
115
|
received_update);
|
117
|
-
|
118
|
-
|
116
|
+
bool is_zero = s->outgoing_window <= 0;
|
117
|
+
if (was_zero && !is_zero) {
|
118
|
+
grpc_chttp2_become_writable(exec_ctx, t, s, false,
|
119
|
+
"stream.read_flow_control");
|
120
|
+
}
|
119
121
|
}
|
120
122
|
} else {
|
121
|
-
|
122
|
-
|
123
|
+
bool was_zero = t->outgoing_window <= 0;
|
124
|
+
GRPC_CHTTP2_FLOW_CREDIT_TRANSPORT("parse", t, outgoing_window,
|
125
|
+
received_update);
|
126
|
+
bool is_zero = t->outgoing_window <= 0;
|
127
|
+
if (was_zero && !is_zero) {
|
128
|
+
grpc_chttp2_initiate_write(exec_ctx, t, false,
|
129
|
+
"new_global_flow_control");
|
130
|
+
}
|
123
131
|
}
|
124
132
|
}
|
125
133
|
|
@@ -34,7 +34,7 @@
|
|
34
34
|
#ifndef GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H
|
35
35
|
#define GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H
|
36
36
|
|
37
|
-
#include <grpc/
|
37
|
+
#include <grpc/slice.h>
|
38
38
|
#include "src/core/ext/transport/chttp2/transport/frame.h"
|
39
39
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
40
40
|
#include "src/core/lib/transport/transport.h"
|
@@ -45,14 +45,13 @@ typedef struct {
|
|
45
45
|
uint32_t amount;
|
46
46
|
} grpc_chttp2_window_update_parser;
|
47
47
|
|
48
|
-
|
49
|
-
|
48
|
+
grpc_slice grpc_chttp2_window_update_create(
|
49
|
+
uint32_t id, uint32_t window_delta, grpc_transport_one_way_stats *stats);
|
50
50
|
|
51
51
|
grpc_error *grpc_chttp2_window_update_parser_begin_frame(
|
52
52
|
grpc_chttp2_window_update_parser *parser, uint32_t length, uint8_t flags);
|
53
53
|
grpc_error *grpc_chttp2_window_update_parser_parse(
|
54
|
-
grpc_exec_ctx *exec_ctx, void *parser,
|
55
|
-
|
56
|
-
grpc_chttp2_stream_parsing *stream_parsing, gpr_slice slice, int is_last);
|
54
|
+
grpc_exec_ctx *exec_ctx, void *parser, grpc_chttp2_transport *t,
|
55
|
+
grpc_chttp2_stream *s, grpc_slice slice, int is_last);
|
57
56
|
|
58
57
|
#endif /* GRPC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_WINDOW_UPDATE_H */
|
@@ -47,10 +47,11 @@
|
|
47
47
|
|
48
48
|
#include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
|
49
49
|
#include "src/core/ext/transport/chttp2/transport/hpack_table.h"
|
50
|
-
#include "src/core/ext/transport/chttp2/transport/timeout_encoding.h"
|
51
50
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
51
|
+
#include "src/core/lib/slice/slice_internal.h"
|
52
52
|
#include "src/core/lib/transport/metadata.h"
|
53
53
|
#include "src/core/lib/transport/static_metadata.h"
|
54
|
+
#include "src/core/lib/transport/timeout_encoding.h"
|
54
55
|
|
55
56
|
#define HASH_FRAGMENT_1(x) ((x)&255)
|
56
57
|
#define HASH_FRAGMENT_2(x) ((x >> 8) & 255)
|
@@ -76,8 +77,10 @@ typedef struct {
|
|
76
77
|
uint8_t seen_regular_header;
|
77
78
|
/* output stream id */
|
78
79
|
uint32_t stream_id;
|
79
|
-
|
80
|
+
grpc_slice_buffer *output;
|
80
81
|
grpc_transport_one_way_stats *stats;
|
82
|
+
/* maximum size of a frame */
|
83
|
+
size_t max_frame_size;
|
81
84
|
} framer_state;
|
82
85
|
|
83
86
|
/* fills p (which is expected to be 9 bytes long) with a data frame header */
|
@@ -102,7 +105,7 @@ static void finish_frame(framer_state *st, int is_header_boundary,
|
|
102
105
|
type = st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
|
103
106
|
: GRPC_CHTTP2_FRAME_CONTINUATION;
|
104
107
|
fill_header(
|
105
|
-
|
108
|
+
GRPC_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
|
106
109
|
st->stream_id, st->output->length - st->output_length_at_start_of_frame,
|
107
110
|
(uint8_t)((is_last_in_stream ? GRPC_CHTTP2_DATA_FLAG_END_STREAM : 0) |
|
108
111
|
(is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
|
@@ -114,7 +117,7 @@ static void finish_frame(framer_state *st, int is_header_boundary,
|
|
114
117
|
output before beginning */
|
115
118
|
static void begin_frame(framer_state *st) {
|
116
119
|
st->header_idx =
|
117
|
-
|
120
|
+
grpc_slice_buffer_add_indexed(st->output, grpc_slice_malloc(9));
|
118
121
|
st->output_length_at_start_of_frame = st->output->length;
|
119
122
|
}
|
120
123
|
|
@@ -123,7 +126,7 @@ static void begin_frame(framer_state *st) {
|
|
123
126
|
needed */
|
124
127
|
static void ensure_space(framer_state *st, size_t need_bytes) {
|
125
128
|
if (st->output->length - st->output_length_at_start_of_frame + need_bytes <=
|
126
|
-
|
129
|
+
st->max_frame_size) {
|
127
130
|
return;
|
128
131
|
}
|
129
132
|
finish_frame(st, 0, 0);
|
@@ -145,18 +148,18 @@ static void inc_filter(uint8_t idx, uint32_t *sum, uint8_t *elems) {
|
|
145
148
|
}
|
146
149
|
}
|
147
150
|
|
148
|
-
static void add_header_data(framer_state *st,
|
149
|
-
size_t len =
|
151
|
+
static void add_header_data(framer_state *st, grpc_slice slice) {
|
152
|
+
size_t len = GRPC_SLICE_LENGTH(slice);
|
150
153
|
size_t remaining;
|
151
154
|
if (len == 0) return;
|
152
|
-
remaining =
|
153
|
-
st->
|
155
|
+
remaining = st->max_frame_size + st->output_length_at_start_of_frame -
|
156
|
+
st->output->length;
|
154
157
|
if (len <= remaining) {
|
155
158
|
st->stats->header_bytes += len;
|
156
|
-
|
159
|
+
grpc_slice_buffer_add(st->output, slice);
|
157
160
|
} else {
|
158
161
|
st->stats->header_bytes += remaining;
|
159
|
-
|
162
|
+
grpc_slice_buffer_add(st->output, grpc_slice_split_head(&slice, remaining));
|
160
163
|
finish_frame(st, 0, 0);
|
161
164
|
begin_frame(st);
|
162
165
|
add_header_data(st, slice);
|
@@ -165,7 +168,7 @@ static void add_header_data(framer_state *st, gpr_slice slice) {
|
|
165
168
|
|
166
169
|
static uint8_t *add_tiny_header_data(framer_state *st, size_t len) {
|
167
170
|
ensure_space(st, len);
|
168
|
-
return
|
171
|
+
return grpc_slice_buffer_tiny_add(st->output, len);
|
169
172
|
}
|
170
173
|
|
171
174
|
static void evict_entry(grpc_chttp2_hpack_compressor *c) {
|
@@ -181,7 +184,8 @@ static void evict_entry(grpc_chttp2_hpack_compressor *c) {
|
|
181
184
|
}
|
182
185
|
|
183
186
|
/* add an element to the decoder table */
|
184
|
-
static void add_elem(
|
187
|
+
static void add_elem(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
|
188
|
+
grpc_mdelem *elem) {
|
185
189
|
uint32_t key_hash = elem->key->hash;
|
186
190
|
uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
|
187
191
|
uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
|
@@ -225,12 +229,12 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
|
|
225
229
|
} else if (c->indices_elems[HASH_FRAGMENT_2(elem_hash)] <
|
226
230
|
c->indices_elems[HASH_FRAGMENT_3(elem_hash)]) {
|
227
231
|
/* not there: replace oldest */
|
228
|
-
GRPC_MDELEM_UNREF(c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
|
232
|
+
GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_2(elem_hash)]);
|
229
233
|
c->entries_elems[HASH_FRAGMENT_2(elem_hash)] = GRPC_MDELEM_REF(elem);
|
230
234
|
c->indices_elems[HASH_FRAGMENT_2(elem_hash)] = new_index;
|
231
235
|
} else {
|
232
236
|
/* not there: replace oldest */
|
233
|
-
GRPC_MDELEM_UNREF(c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
|
237
|
+
GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[HASH_FRAGMENT_3(elem_hash)]);
|
234
238
|
c->entries_elems[HASH_FRAGMENT_3(elem_hash)] = GRPC_MDELEM_REF(elem);
|
235
239
|
c->indices_elems[HASH_FRAGMENT_3(elem_hash)] = new_index;
|
236
240
|
}
|
@@ -249,11 +253,11 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
|
|
249
253
|
c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
|
250
254
|
} else if (c->indices_keys[HASH_FRAGMENT_2(key_hash)] <
|
251
255
|
c->indices_keys[HASH_FRAGMENT_3(key_hash)]) {
|
252
|
-
GRPC_MDSTR_UNREF(c->entries_keys[HASH_FRAGMENT_2(key_hash)]);
|
256
|
+
GRPC_MDSTR_UNREF(exec_ctx, c->entries_keys[HASH_FRAGMENT_2(key_hash)]);
|
253
257
|
c->entries_keys[HASH_FRAGMENT_2(key_hash)] = GRPC_MDSTR_REF(elem->key);
|
254
258
|
c->indices_keys[HASH_FRAGMENT_2(key_hash)] = new_index;
|
255
259
|
} else {
|
256
|
-
GRPC_MDSTR_UNREF(c->entries_keys[HASH_FRAGMENT_3(key_hash)]);
|
260
|
+
GRPC_MDSTR_UNREF(exec_ctx, c->entries_keys[HASH_FRAGMENT_3(key_hash)]);
|
257
261
|
c->entries_keys[HASH_FRAGMENT_3(key_hash)] = GRPC_MDSTR_REF(elem->key);
|
258
262
|
c->indices_keys[HASH_FRAGMENT_3(key_hash)] = new_index;
|
259
263
|
}
|
@@ -266,9 +270,10 @@ static void emit_indexed(grpc_chttp2_hpack_compressor *c, uint32_t elem_index,
|
|
266
270
|
len);
|
267
271
|
}
|
268
272
|
|
269
|
-
static
|
270
|
-
if (grpc_is_binary_header(
|
271
|
-
|
273
|
+
static grpc_slice get_wire_value(grpc_mdelem *elem, uint8_t *huffman_prefix) {
|
274
|
+
if (grpc_is_binary_header(
|
275
|
+
(const char *)GRPC_SLICE_START_PTR(elem->key->slice),
|
276
|
+
GRPC_SLICE_LENGTH(elem->key->slice))) {
|
272
277
|
*huffman_prefix = 0x80;
|
273
278
|
return grpc_mdstr_as_base64_encoded_and_huffman_compressed(elem->value);
|
274
279
|
}
|
@@ -282,8 +287,8 @@ static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor *c,
|
|
282
287
|
framer_state *st) {
|
283
288
|
uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 2);
|
284
289
|
uint8_t huffman_prefix;
|
285
|
-
|
286
|
-
size_t len_val =
|
290
|
+
grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
291
|
+
size_t len_val = GRPC_SLICE_LENGTH(value_slice);
|
287
292
|
uint32_t len_val_len;
|
288
293
|
GPR_ASSERT(len_val <= UINT32_MAX);
|
289
294
|
len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
|
@@ -291,7 +296,7 @@ static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor *c,
|
|
291
296
|
add_tiny_header_data(st, len_pfx), len_pfx);
|
292
297
|
GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
|
293
298
|
add_tiny_header_data(st, len_val_len), len_val_len);
|
294
|
-
add_header_data(st,
|
299
|
+
add_header_data(st, grpc_slice_ref_internal(value_slice));
|
295
300
|
}
|
296
301
|
|
297
302
|
static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
|
@@ -299,8 +304,8 @@ static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
|
|
299
304
|
framer_state *st) {
|
300
305
|
uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
|
301
306
|
uint8_t huffman_prefix;
|
302
|
-
|
303
|
-
size_t len_val =
|
307
|
+
grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
308
|
+
size_t len_val = GRPC_SLICE_LENGTH(value_slice);
|
304
309
|
uint32_t len_val_len;
|
305
310
|
GPR_ASSERT(len_val <= UINT32_MAX);
|
306
311
|
len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
|
@@ -308,45 +313,45 @@ static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
|
|
308
313
|
add_tiny_header_data(st, len_pfx), len_pfx);
|
309
314
|
GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
|
310
315
|
add_tiny_header_data(st, len_val_len), len_val_len);
|
311
|
-
add_header_data(st,
|
316
|
+
add_header_data(st, grpc_slice_ref_internal(value_slice));
|
312
317
|
}
|
313
318
|
|
314
319
|
static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor *c,
|
315
320
|
grpc_mdelem *elem, framer_state *st) {
|
316
|
-
uint32_t len_key = (uint32_t)
|
321
|
+
uint32_t len_key = (uint32_t)GRPC_SLICE_LENGTH(elem->key->slice);
|
317
322
|
uint8_t huffman_prefix;
|
318
|
-
|
319
|
-
uint32_t len_val = (uint32_t)
|
323
|
+
grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
324
|
+
uint32_t len_val = (uint32_t)GRPC_SLICE_LENGTH(value_slice);
|
320
325
|
uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
|
321
326
|
uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
|
322
327
|
GPR_ASSERT(len_key <= UINT32_MAX);
|
323
|
-
GPR_ASSERT(
|
328
|
+
GPR_ASSERT(GRPC_SLICE_LENGTH(value_slice) <= UINT32_MAX);
|
324
329
|
*add_tiny_header_data(st, 1) = 0x40;
|
325
330
|
GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
|
326
331
|
add_tiny_header_data(st, len_key_len), len_key_len);
|
327
|
-
add_header_data(st,
|
332
|
+
add_header_data(st, grpc_slice_ref_internal(elem->key->slice));
|
328
333
|
GRPC_CHTTP2_WRITE_VARINT(len_val, 1, huffman_prefix,
|
329
334
|
add_tiny_header_data(st, len_val_len), len_val_len);
|
330
|
-
add_header_data(st,
|
335
|
+
add_header_data(st, grpc_slice_ref_internal(value_slice));
|
331
336
|
}
|
332
337
|
|
333
338
|
static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor *c,
|
334
339
|
grpc_mdelem *elem, framer_state *st) {
|
335
|
-
uint32_t len_key = (uint32_t)
|
340
|
+
uint32_t len_key = (uint32_t)GRPC_SLICE_LENGTH(elem->key->slice);
|
336
341
|
uint8_t huffman_prefix;
|
337
|
-
|
338
|
-
uint32_t len_val = (uint32_t)
|
342
|
+
grpc_slice value_slice = get_wire_value(elem, &huffman_prefix);
|
343
|
+
uint32_t len_val = (uint32_t)GRPC_SLICE_LENGTH(value_slice);
|
339
344
|
uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
|
340
345
|
uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
|
341
346
|
GPR_ASSERT(len_key <= UINT32_MAX);
|
342
|
-
GPR_ASSERT(
|
347
|
+
GPR_ASSERT(GRPC_SLICE_LENGTH(value_slice) <= UINT32_MAX);
|
343
348
|
*add_tiny_header_data(st, 1) = 0x00;
|
344
349
|
GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
|
345
350
|
add_tiny_header_data(st, len_key_len), len_key_len);
|
346
|
-
add_header_data(st,
|
351
|
+
add_header_data(st, grpc_slice_ref_internal(elem->key->slice));
|
347
352
|
GRPC_CHTTP2_WRITE_VARINT(len_val, 1, huffman_prefix,
|
348
353
|
add_tiny_header_data(st, len_val_len), len_val_len);
|
349
|
-
add_header_data(st,
|
354
|
+
add_header_data(st, grpc_slice_ref_internal(value_slice));
|
350
355
|
}
|
351
356
|
|
352
357
|
static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor *c,
|
@@ -363,16 +368,16 @@ static uint32_t dynidx(grpc_chttp2_hpack_compressor *c, uint32_t elem_index) {
|
|
363
368
|
}
|
364
369
|
|
365
370
|
/* encode an mdelem */
|
366
|
-
static void hpack_enc(
|
367
|
-
framer_state *st) {
|
371
|
+
static void hpack_enc(grpc_exec_ctx *exec_ctx, grpc_chttp2_hpack_compressor *c,
|
372
|
+
grpc_mdelem *elem, framer_state *st) {
|
368
373
|
uint32_t key_hash = elem->key->hash;
|
369
374
|
uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
|
370
375
|
size_t decoder_space_usage;
|
371
376
|
uint32_t indices_key;
|
372
377
|
int should_add_elem;
|
373
378
|
|
374
|
-
GPR_ASSERT(
|
375
|
-
if (
|
379
|
+
GPR_ASSERT(GRPC_SLICE_LENGTH(elem->key->slice) > 0);
|
380
|
+
if (GRPC_SLICE_START_PTR(elem->key->slice)[0] != ':') { /* regular header */
|
376
381
|
st->seen_regular_header = 1;
|
377
382
|
} else {
|
378
383
|
GPR_ASSERT(
|
@@ -414,7 +419,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
|
|
414
419
|
/* HIT: key (first cuckoo hash) */
|
415
420
|
if (should_add_elem) {
|
416
421
|
emit_lithdr_incidx(c, dynidx(c, indices_key), elem, st);
|
417
|
-
add_elem(c, elem);
|
422
|
+
add_elem(exec_ctx, c, elem);
|
418
423
|
return;
|
419
424
|
} else {
|
420
425
|
emit_lithdr_noidx(c, dynidx(c, indices_key), elem, st);
|
@@ -429,7 +434,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
|
|
429
434
|
/* HIT: key (first cuckoo hash) */
|
430
435
|
if (should_add_elem) {
|
431
436
|
emit_lithdr_incidx(c, dynidx(c, indices_key), elem, st);
|
432
|
-
add_elem(c, elem);
|
437
|
+
add_elem(exec_ctx, c, elem);
|
433
438
|
return;
|
434
439
|
} else {
|
435
440
|
emit_lithdr_noidx(c, dynidx(c, indices_key), elem, st);
|
@@ -442,7 +447,7 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
|
|
442
447
|
|
443
448
|
if (should_add_elem) {
|
444
449
|
emit_lithdr_incidx_v(c, elem, st);
|
445
|
-
add_elem(c, elem);
|
450
|
+
add_elem(exec_ctx, c, elem);
|
446
451
|
return;
|
447
452
|
} else {
|
448
453
|
emit_lithdr_noidx_v(c, elem, st);
|
@@ -454,16 +459,17 @@ static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
|
|
454
459
|
#define STRLEN_LIT(x) (sizeof(x) - 1)
|
455
460
|
#define TIMEOUT_KEY "grpc-timeout"
|
456
461
|
|
457
|
-
static void deadline_enc(
|
462
|
+
static void deadline_enc(grpc_exec_ctx *exec_ctx,
|
463
|
+
grpc_chttp2_hpack_compressor *c, gpr_timespec deadline,
|
458
464
|
framer_state *st) {
|
459
|
-
char timeout_str[
|
465
|
+
char timeout_str[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
|
460
466
|
grpc_mdelem *mdelem;
|
461
|
-
|
467
|
+
grpc_http2_encode_timeout(
|
462
468
|
gpr_time_sub(deadline, gpr_now(deadline.clock_type)), timeout_str);
|
463
469
|
mdelem = grpc_mdelem_from_metadata_strings(
|
464
|
-
GRPC_MDSTR_GRPC_TIMEOUT, grpc_mdstr_from_string(timeout_str));
|
465
|
-
hpack_enc(c, mdelem, st);
|
466
|
-
GRPC_MDELEM_UNREF(mdelem);
|
470
|
+
exec_ctx, GRPC_MDSTR_GRPC_TIMEOUT, grpc_mdstr_from_string(timeout_str));
|
471
|
+
hpack_enc(exec_ctx, c, mdelem, st);
|
472
|
+
GRPC_MDELEM_UNREF(exec_ctx, mdelem);
|
467
473
|
}
|
468
474
|
|
469
475
|
static uint32_t elems_for_bytes(uint32_t bytes) { return (bytes + 31) / 32; }
|
@@ -480,11 +486,12 @@ void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c) {
|
|
480
486
|
sizeof(*c->table_elem_size) * c->cap_table_elems);
|
481
487
|
}
|
482
488
|
|
483
|
-
void grpc_chttp2_hpack_compressor_destroy(
|
489
|
+
void grpc_chttp2_hpack_compressor_destroy(grpc_exec_ctx *exec_ctx,
|
490
|
+
grpc_chttp2_hpack_compressor *c) {
|
484
491
|
int i;
|
485
492
|
for (i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
|
486
|
-
if (c->entries_keys[i]) GRPC_MDSTR_UNREF(c->entries_keys[i]);
|
487
|
-
if (c->entries_elems[i]) GRPC_MDELEM_UNREF(c->entries_elems[i]);
|
493
|
+
if (c->entries_keys[i]) GRPC_MDSTR_UNREF(exec_ctx, c->entries_keys[i]);
|
494
|
+
if (c->entries_elems[i]) GRPC_MDELEM_UNREF(exec_ctx, c->entries_elems[i]);
|
488
495
|
}
|
489
496
|
gpr_free(c->table_elem_size);
|
490
497
|
}
|
@@ -539,11 +546,13 @@ void grpc_chttp2_hpack_compressor_set_max_table_size(
|
|
539
546
|
}
|
540
547
|
}
|
541
548
|
|
542
|
-
void grpc_chttp2_encode_header(
|
549
|
+
void grpc_chttp2_encode_header(grpc_exec_ctx *exec_ctx,
|
550
|
+
grpc_chttp2_hpack_compressor *c,
|
543
551
|
uint32_t stream_id,
|
544
552
|
grpc_metadata_batch *metadata, int is_eof,
|
553
|
+
size_t max_frame_size,
|
545
554
|
grpc_transport_one_way_stats *stats,
|
546
|
-
|
555
|
+
grpc_slice_buffer *outbuf) {
|
547
556
|
framer_state st;
|
548
557
|
grpc_linked_mdelem *l;
|
549
558
|
gpr_timespec deadline;
|
@@ -555,6 +564,7 @@ void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
|
|
555
564
|
st.output = outbuf;
|
556
565
|
st.is_first_frame = 1;
|
557
566
|
st.stats = stats;
|
567
|
+
st.max_frame_size = max_frame_size;
|
558
568
|
|
559
569
|
/* Encode a metadata batch; store the returned values, representing
|
560
570
|
a metadata element that needs to be unreffed back into the metadata
|
@@ -566,11 +576,11 @@ void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
|
|
566
576
|
}
|
567
577
|
grpc_metadata_batch_assert_ok(metadata);
|
568
578
|
for (l = metadata->list.head; l; l = l->next) {
|
569
|
-
hpack_enc(c, l->md, &st);
|
579
|
+
hpack_enc(exec_ctx, c, l->md, &st);
|
570
580
|
}
|
571
581
|
deadline = metadata->deadline;
|
572
582
|
if (gpr_time_cmp(deadline, gpr_inf_future(deadline.clock_type)) != 0) {
|
573
|
-
deadline_enc(c, deadline, &st);
|
583
|
+
deadline_enc(exec_ctx, c, deadline, &st);
|
574
584
|
}
|
575
585
|
|
576
586
|
finish_frame(&st, 1, is_eof);
|