grpc 1.37.1 → 1.38.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +64 -58
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/channel_args.h +28 -0
- data/include/grpc/event_engine/event_engine.h +336 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/event_engine/slice_allocator.h +81 -0
- data/include/grpc/grpc.h +2 -2
- data/include/grpc/grpc_security_constants.h +14 -0
- data/include/grpc/impl/codegen/grpc_types.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +5 -0
- data/include/grpc/module.modulemap +14 -14
- data/src/core/ext/filters/client_channel/backup_poller.cc +3 -3
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +177 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +628 -3101
- data/src/core/ext/filters/client_channel/client_channel.h +489 -55
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -1
- data/src/core/ext/filters/client_channel/config_selector.h +1 -1
- data/src/core/ext/filters/client_channel/connector.h +1 -1
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +9 -10
- data/src/core/ext/filters/client_channel/dynamic_filters.h +3 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +26 -27
- data/src/core/ext/filters/client_channel/health/health_check_client.h +27 -26
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +24 -21
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +46 -43
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +5 -5
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +15 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +36 -30
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +23 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +31 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +84 -61
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver.h +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +23 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +14 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +33 -24
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +17 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +20 -28
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +7 -5
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +13 -11
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +43 -28
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +32 -239
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +20 -49
- data/src/core/ext/filters/client_channel/retry_filter.cc +2188 -0
- data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
- data/src/core/ext/filters/client_channel/retry_service_config.cc +287 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +90 -0
- data/src/core/ext/filters/client_channel/server_address.cc +1 -1
- data/src/core/ext/filters/client_channel/service_config.cc +15 -14
- data/src/core/ext/filters/client_channel/service_config.h +7 -6
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +5 -4
- data/src/core/ext/filters/client_channel/service_config_parser.cc +6 -6
- data/src/core/ext/filters/client_channel/service_config_parser.h +7 -4
- data/src/core/ext/filters/client_channel/subchannel.cc +17 -16
- data/src/core/ext/filters/client_channel/subchannel.h +7 -6
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +16 -15
- data/src/core/ext/filters/deadline/deadline_filter.cc +10 -10
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -18
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +5 -5
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +28 -21
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -3
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +23 -22
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +21 -21
- data/src/core/ext/filters/http/server/http_server_filter.cc +27 -23
- data/src/core/ext/filters/max_age/max_age_filter.cc +12 -10
- data/src/core/ext/filters/message_size/message_size_filter.cc +14 -11
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -3
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -2
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +3 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -45
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +2 -2
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +3 -4
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -116
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -4
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +8 -8
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +6 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -6
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +4 -6
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +237 -208
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -10
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +4 -4
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +31 -27
- data/src/core/ext/transport/chttp2/transport/parsing.cc +63 -56
- data/src/core/ext/transport/chttp2/transport/writing.cc +7 -3
- data/src/core/ext/transport/inproc/inproc_transport.cc +30 -29
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_store.h +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +3 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +2 -2
- data/src/core/ext/xds/xds_api.cc +101 -93
- data/src/core/ext/xds/xds_api.h +6 -6
- data/src/core/ext/xds/xds_bootstrap.cc +97 -159
- data/src/core/ext/xds/xds_bootstrap.h +19 -24
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -4
- data/src/core/ext/xds/xds_certificate_provider.h +4 -4
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_client.cc +310 -178
- data/src/core/ext/xds/xds_client.h +41 -27
- data/src/core/ext/xds/xds_client_stats.h +3 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +34 -20
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +17 -17
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +7 -7
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +3 -20
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +6 -11
- data/src/core/lib/channel/channel_stack.cc +10 -9
- data/src/core/lib/channel/channel_stack.h +10 -9
- data/src/core/lib/channel/channel_stack_builder.cc +2 -2
- data/src/core/lib/channel/channel_stack_builder.h +1 -1
- data/src/core/lib/channel/channelz.cc +21 -13
- data/src/core/lib/channel/connected_channel.cc +4 -4
- data/src/core/lib/channel/handshaker.cc +7 -6
- data/src/core/lib/channel/handshaker.h +5 -5
- data/src/core/lib/event_engine/slice_allocator.cc +59 -0
- data/src/core/lib/event_engine/sockaddr.cc +38 -0
- data/src/core/lib/gprpp/ref_counted.h +28 -14
- data/src/core/lib/gprpp/status_helper.cc +407 -0
- data/src/core/lib/gprpp/status_helper.h +180 -0
- data/src/core/lib/http/httpcli.cc +11 -11
- data/src/core/lib/http/httpcli_security_connector.cc +11 -7
- data/src/core/lib/http/parser.cc +16 -16
- data/src/core/lib/http/parser.h +4 -4
- data/src/core/lib/iomgr/buffer_list.cc +7 -9
- data/src/core/lib/iomgr/buffer_list.h +4 -5
- data/src/core/lib/iomgr/call_combiner.cc +15 -12
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +3 -3
- data/src/core/lib/iomgr/cfstream_handle.h +1 -1
- data/src/core/lib/iomgr/closure.h +7 -6
- data/src/core/lib/iomgr/combiner.cc +14 -12
- data/src/core/lib/iomgr/combiner.h +2 -2
- data/src/core/lib/iomgr/endpoint.cc +1 -1
- data/src/core/lib/iomgr/endpoint.h +2 -2
- data/src/core/lib/iomgr/endpoint_cfstream.cc +11 -13
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +1 -1
- data/src/core/lib/iomgr/error.cc +167 -61
- data/src/core/lib/iomgr/error.h +217 -106
- data/src/core/lib/iomgr/error_cfstream.cc +3 -2
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +5 -1
- data/src/core/lib/iomgr/ev_apple.cc +5 -5
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
- data/src/core/lib/iomgr/ev_epollex_linux.cc +48 -45
- data/src/core/lib/iomgr/ev_poll_posix.cc +26 -23
- data/src/core/lib/iomgr/ev_posix.cc +9 -8
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/exec_ctx.cc +4 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +8 -8
- data/src/core/lib/iomgr/executor.h +2 -2
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/iomgr.h +1 -1
- data/src/core/lib/iomgr/iomgr_custom.cc +1 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -2
- data/src/core/lib/iomgr/iomgr_internal.h +3 -3
- data/src/core/lib/iomgr/iomgr_posix.cc +1 -1
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -1
- data/src/core/lib/iomgr/load_file.cc +4 -4
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +5 -5
- data/src/core/lib/iomgr/lockfree_event.h +1 -1
- data/src/core/lib/iomgr/pollset.cc +5 -5
- data/src/core/lib/iomgr/pollset.h +9 -9
- data/src/core/lib/iomgr/pollset_custom.cc +5 -5
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +3 -3
- data/src/core/lib/iomgr/resolve_address.h +6 -6
- data/src/core/lib/iomgr/resolve_address_custom.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +3 -3
- data/src/core/lib/iomgr/resolve_address_windows.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +11 -10
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +22 -20
- data/src/core/lib/iomgr/socket_utils_posix.h +20 -20
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +4 -4
- data/src/core/lib/iomgr/tcp_client_custom.cc +5 -6
- data/src/core/lib/iomgr/tcp_client_posix.cc +15 -17
- data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
- data/src/core/lib/iomgr/tcp_client_windows.cc +5 -5
- data/src/core/lib/iomgr/tcp_custom.cc +14 -16
- data/src/core/lib/iomgr/tcp_custom.h +13 -12
- data/src/core/lib/iomgr/tcp_posix.cc +36 -34
- data/src/core/lib/iomgr/tcp_server.cc +6 -6
- data/src/core/lib/iomgr/tcp_server.h +12 -11
- data/src/core/lib/iomgr/tcp_server_custom.cc +23 -21
- data/src/core/lib/iomgr/tcp_server_posix.cc +22 -21
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +13 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +19 -17
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -9
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +26 -25
- data/src/core/lib/iomgr/tcp_uv.cc +25 -23
- data/src/core/lib/iomgr/tcp_windows.cc +13 -13
- data/src/core/lib/iomgr/tcp_windows.h +2 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -1
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +6 -6
- data/src/core/lib/iomgr/udp_server.cc +21 -20
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +10 -7
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +4 -4
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +3 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.h +17 -1
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_reader.cc +4 -4
- data/src/core/lib/matchers/matchers.cc +39 -39
- data/src/core/lib/matchers/matchers.h +28 -28
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.h +2 -2
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +17 -13
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +13 -11
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +2 -1
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +15 -12
- data/src/core/lib/security/credentials/external/external_account_credentials.h +9 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -4
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +9 -7
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +9 -9
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/json_token.cc +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +7 -5
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +21 -19
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +5 -5
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +8 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -9
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +19 -13
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +3 -3
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +13 -3
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +12 -2
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -1
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/security_connector.h +9 -4
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +16 -6
- data/src/core/lib/security/security_connector/ssl_utils.cc +22 -4
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +56 -60
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +66 -48
- data/src/core/lib/security/transport/client_auth_filter.cc +18 -10
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -4
- data/src/core/lib/security/transport/security_handshaker.cc +33 -32
- data/src/core/lib/security/transport/server_auth_filter.cc +19 -13
- data/src/core/lib/security/transport/tsi_error.cc +2 -1
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +2 -2
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/surface/call.cc +46 -45
- data/src/core/lib/surface/call.h +2 -2
- data/src/core/lib/surface/channel.cc +6 -6
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_ping.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +46 -47
- data/src/core/lib/surface/completion_queue.h +2 -1
- data/src/core/lib/surface/lame_client.cc +11 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +28 -22
- data/src/core/lib/surface/server.h +16 -15
- data/src/core/lib/surface/validate_metadata.cc +7 -7
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +4 -2
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +8 -8
- data/src/core/lib/transport/connectivity_state.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +19 -8
- data/src/core/lib/transport/error_utils.h +11 -5
- data/src/core/lib/transport/metadata_batch.cc +37 -37
- data/src/core/lib/transport/metadata_batch.h +19 -18
- data/src/core/lib/transport/transport.cc +4 -3
- data/src/core/lib/transport/transport.h +4 -4
- data/src/core/lib/transport/transport_op_string.cc +5 -5
- data/src/core/tsi/alts/crypt/gsec.h +4 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +5 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +7 -6
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/ssl_transport_security.cc +32 -14
- data/src/core/tsi/ssl_transport_security.h +3 -4
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
- data/third_party/abseil-cpp/absl/algorithm/container.h +3 -3
- data/third_party/abseil-cpp/absl/base/attributes.h +24 -4
- data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
- data/third_party/abseil-cpp/absl/base/config.h +37 -9
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +24 -10
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
- data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +14 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
- data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +11 -11
- data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +5 -2
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +43 -42
- data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -3
- data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
- data/third_party/abseil-cpp/absl/base/macros.h +11 -0
- data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
- data/third_party/abseil-cpp/absl/base/options.h +1 -1
- data/third_party/abseil-cpp/absl/base/port.h +0 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
- data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -2
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +5 -3
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +5 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +141 -66
- data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -1
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +136 -136
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +16 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +3 -12
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +3 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +2 -2
- data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
- data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +25 -10
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -37
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +111 -0
- data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +48 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +16 -2
- data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
- data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -3
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
- data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
- data/third_party/abseil-cpp/absl/status/status.cc +29 -22
- data/third_party/abseil-cpp/absl/status/status.h +81 -20
- data/third_party/abseil-cpp/absl/status/statusor.h +3 -3
- data/third_party/abseil-cpp/absl/strings/charconv.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +326 -371
- data/third_party/abseil-cpp/absl/strings/cord.h +182 -64
- data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +6 -6
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +83 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +387 -17
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +897 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +589 -0
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +114 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +15 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +19 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +14 -0
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +15 -40
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
- data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
- data/third_party/abseil-cpp/absl/strings/match.h +16 -6
- data/third_party/abseil-cpp/absl/strings/numbers.cc +132 -4
- data/third_party/abseil-cpp/absl/strings/numbers.h +10 -10
- data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -65
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +79 -62
- data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
- data/third_party/abseil-cpp/absl/time/clock.h +2 -2
- data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +4 -4
- data/third_party/abseil-cpp/absl/time/time.cc +4 -3
- data/third_party/abseil-cpp/absl/time/time.h +26 -24
- data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
- data/third_party/abseil-cpp/absl/types/variant.h +9 -4
- data/third_party/boringssl-with-bazel/err_data.c +477 -461
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +18 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +11 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +25 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +4 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +104 -93
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +43 -46
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +26 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +14 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +45 -48
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +38 -43
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +37 -45
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +103 -42
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +58 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +65 -0
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +14 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +19 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +19 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +39 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -17
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +0 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +120 -41
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +0 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +19 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -38
- data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +24 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +2 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +185 -17
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +1 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +416 -121
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +5 -0
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +444 -0
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +244 -1
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +43 -12
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +149 -8
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +220 -46
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +7 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +23 -26
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +74 -15
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +98 -64
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +34 -4
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +205 -100
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- metadata +68 -45
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
@@ -67,71 +67,82 @@ typedef enum {
|
|
67
67
|
a set of indirect jumps, and so not waste stack space. */
|
68
68
|
|
69
69
|
/* forward declarations for parsing states */
|
70
|
-
static
|
71
|
-
const uint8_t* end);
|
72
|
-
static grpc_error* parse_error(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
73
|
-
const uint8_t* end, grpc_error* error);
|
74
|
-
static grpc_error* still_parse_error(grpc_chttp2_hpack_parser* p,
|
70
|
+
static grpc_error_handle parse_begin(grpc_chttp2_hpack_parser* p,
|
75
71
|
const uint8_t* cur, const uint8_t* end);
|
76
|
-
static
|
77
|
-
|
78
|
-
|
79
|
-
static
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
72
|
+
static grpc_error_handle parse_error(grpc_chttp2_hpack_parser* p,
|
73
|
+
const uint8_t* cur, const uint8_t* end,
|
74
|
+
grpc_error_handle error);
|
75
|
+
static grpc_error_handle still_parse_error(grpc_chttp2_hpack_parser* p,
|
76
|
+
const uint8_t* cur,
|
77
|
+
const uint8_t* end);
|
78
|
+
static grpc_error_handle parse_illegal_op(grpc_chttp2_hpack_parser* p,
|
79
|
+
const uint8_t* cur,
|
80
|
+
const uint8_t* end);
|
81
|
+
|
82
|
+
static grpc_error_handle parse_string_prefix(grpc_chttp2_hpack_parser* p,
|
83
|
+
const uint8_t* cur,
|
84
|
+
const uint8_t* end);
|
85
|
+
static grpc_error_handle parse_key_string(grpc_chttp2_hpack_parser* p,
|
86
|
+
const uint8_t* cur,
|
87
|
+
const uint8_t* end);
|
88
|
+
static grpc_error_handle parse_value_string_with_indexed_key(
|
84
89
|
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end);
|
85
|
-
static
|
90
|
+
static grpc_error_handle parse_value_string_with_literal_key(
|
86
91
|
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end);
|
87
92
|
|
88
|
-
static
|
89
|
-
|
90
|
-
static
|
91
|
-
const uint8_t* end);
|
92
|
-
static grpc_error* parse_value2(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
93
|
-
const uint8_t* end);
|
94
|
-
static grpc_error* parse_value3(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
95
|
-
const uint8_t* end);
|
96
|
-
static grpc_error* parse_value4(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
97
|
-
const uint8_t* end);
|
98
|
-
static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
|
99
|
-
const uint8_t* cur, const uint8_t* end);
|
100
|
-
|
101
|
-
static grpc_error* parse_indexed_field(grpc_chttp2_hpack_parser* p,
|
102
|
-
const uint8_t* cur, const uint8_t* end);
|
103
|
-
static grpc_error* parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
|
104
|
-
const uint8_t* cur,
|
105
|
-
const uint8_t* end);
|
106
|
-
static grpc_error* parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
|
107
|
-
const uint8_t* cur, const uint8_t* end);
|
108
|
-
static grpc_error* parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
|
109
|
-
const uint8_t* cur,
|
110
|
-
const uint8_t* end);
|
111
|
-
static grpc_error* parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
|
112
|
-
const uint8_t* cur,
|
113
|
-
const uint8_t* end);
|
114
|
-
static grpc_error* parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
|
115
|
-
const uint8_t* cur, const uint8_t* end);
|
116
|
-
static grpc_error* parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
|
117
|
-
const uint8_t* cur,
|
118
|
-
const uint8_t* end);
|
119
|
-
static grpc_error* parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
|
120
|
-
const uint8_t* cur,
|
121
|
-
const uint8_t* end);
|
122
|
-
static grpc_error* parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
|
123
|
-
const uint8_t* cur, const uint8_t* end);
|
124
|
-
static grpc_error* parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
|
125
|
-
const uint8_t* cur,
|
126
|
-
const uint8_t* end);
|
127
|
-
static grpc_error* parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
|
128
|
-
const uint8_t* cur,
|
129
|
-
const uint8_t* end);
|
130
|
-
static grpc_error* parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
|
93
|
+
static grpc_error_handle parse_value0(grpc_chttp2_hpack_parser* p,
|
94
|
+
const uint8_t* cur, const uint8_t* end);
|
95
|
+
static grpc_error_handle parse_value1(grpc_chttp2_hpack_parser* p,
|
131
96
|
const uint8_t* cur, const uint8_t* end);
|
132
|
-
static
|
97
|
+
static grpc_error_handle parse_value2(grpc_chttp2_hpack_parser* p,
|
98
|
+
const uint8_t* cur, const uint8_t* end);
|
99
|
+
static grpc_error_handle parse_value3(grpc_chttp2_hpack_parser* p,
|
100
|
+
const uint8_t* cur, const uint8_t* end);
|
101
|
+
static grpc_error_handle parse_value4(grpc_chttp2_hpack_parser* p,
|
102
|
+
const uint8_t* cur, const uint8_t* end);
|
103
|
+
static grpc_error_handle parse_value5up(grpc_chttp2_hpack_parser* p,
|
133
104
|
const uint8_t* cur, const uint8_t* end);
|
134
105
|
|
106
|
+
static grpc_error_handle parse_indexed_field(grpc_chttp2_hpack_parser* p,
|
107
|
+
const uint8_t* cur,
|
108
|
+
const uint8_t* end);
|
109
|
+
static grpc_error_handle parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
|
110
|
+
const uint8_t* cur,
|
111
|
+
const uint8_t* end);
|
112
|
+
static grpc_error_handle parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
|
113
|
+
const uint8_t* cur,
|
114
|
+
const uint8_t* end);
|
115
|
+
static grpc_error_handle parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
|
116
|
+
const uint8_t* cur,
|
117
|
+
const uint8_t* end);
|
118
|
+
static grpc_error_handle parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
|
119
|
+
const uint8_t* cur,
|
120
|
+
const uint8_t* end);
|
121
|
+
static grpc_error_handle parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
|
122
|
+
const uint8_t* cur,
|
123
|
+
const uint8_t* end);
|
124
|
+
static grpc_error_handle parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
|
125
|
+
const uint8_t* cur,
|
126
|
+
const uint8_t* end);
|
127
|
+
static grpc_error_handle parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
|
128
|
+
const uint8_t* cur,
|
129
|
+
const uint8_t* end);
|
130
|
+
static grpc_error_handle parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
|
131
|
+
const uint8_t* cur,
|
132
|
+
const uint8_t* end);
|
133
|
+
static grpc_error_handle parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
|
134
|
+
const uint8_t* cur,
|
135
|
+
const uint8_t* end);
|
136
|
+
static grpc_error_handle parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
|
137
|
+
const uint8_t* cur,
|
138
|
+
const uint8_t* end);
|
139
|
+
static grpc_error_handle parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
|
140
|
+
const uint8_t* cur,
|
141
|
+
const uint8_t* end);
|
142
|
+
static grpc_error_handle parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
|
143
|
+
const uint8_t* cur,
|
144
|
+
const uint8_t* end);
|
145
|
+
|
135
146
|
/* we translate the first byte of a hpack field into one of these decoding
|
136
147
|
cases, then use a lookup table to jump directly to the appropriate parser.
|
137
148
|
|
@@ -647,14 +658,14 @@ static void GPR_ATTRIBUTE_NOINLINE on_hdr_log(grpc_mdelem md) {
|
|
647
658
|
|
648
659
|
/* emission helpers */
|
649
660
|
template <bool do_add>
|
650
|
-
static
|
661
|
+
static grpc_error_handle on_hdr(grpc_chttp2_hpack_parser* p, grpc_mdelem md) {
|
651
662
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
|
652
663
|
on_hdr_log(md);
|
653
664
|
}
|
654
665
|
if (do_add) {
|
655
666
|
GPR_DEBUG_ASSERT(GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_INTERNED ||
|
656
667
|
GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC);
|
657
|
-
|
668
|
+
grpc_error_handle err = grpc_chttp2_hptbl_add(&p->table, md);
|
658
669
|
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
|
659
670
|
}
|
660
671
|
return p->on_header(p->on_header_user_data, md);
|
@@ -693,16 +704,16 @@ static grpc_core::ManagedMemorySlice take_string_intern(
|
|
693
704
|
}
|
694
705
|
|
695
706
|
/* jump to the next state */
|
696
|
-
static
|
697
|
-
|
707
|
+
static grpc_error_handle parse_next(grpc_chttp2_hpack_parser* p,
|
708
|
+
const uint8_t* cur, const uint8_t* end) {
|
698
709
|
p->state = *p->next_state++;
|
699
710
|
return p->state(p, cur, end);
|
700
711
|
}
|
701
712
|
|
702
713
|
/* begin parsing a header: all functionality is encoded into lookup tables
|
703
714
|
above */
|
704
|
-
static
|
705
|
-
|
715
|
+
static grpc_error_handle parse_begin(grpc_chttp2_hpack_parser* p,
|
716
|
+
const uint8_t* cur, const uint8_t* end) {
|
706
717
|
if (cur == end) {
|
707
718
|
p->state = parse_begin;
|
708
719
|
return GRPC_ERROR_NONE;
|
@@ -712,8 +723,9 @@ static grpc_error* parse_begin(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
712
723
|
}
|
713
724
|
|
714
725
|
/* stream dependency and prioritization data: we just skip it */
|
715
|
-
static
|
716
|
-
|
726
|
+
static grpc_error_handle parse_stream_weight(grpc_chttp2_hpack_parser* p,
|
727
|
+
const uint8_t* cur,
|
728
|
+
const uint8_t* end) {
|
717
729
|
if (cur == end) {
|
718
730
|
p->state = parse_stream_weight;
|
719
731
|
return GRPC_ERROR_NONE;
|
@@ -722,8 +734,9 @@ static grpc_error* parse_stream_weight(grpc_chttp2_hpack_parser* p,
|
|
722
734
|
return p->after_prioritization(p, cur + 1, end);
|
723
735
|
}
|
724
736
|
|
725
|
-
static
|
726
|
-
|
737
|
+
static grpc_error_handle parse_stream_dep3(grpc_chttp2_hpack_parser* p,
|
738
|
+
const uint8_t* cur,
|
739
|
+
const uint8_t* end) {
|
727
740
|
if (cur == end) {
|
728
741
|
p->state = parse_stream_dep3;
|
729
742
|
return GRPC_ERROR_NONE;
|
@@ -732,8 +745,9 @@ static grpc_error* parse_stream_dep3(grpc_chttp2_hpack_parser* p,
|
|
732
745
|
return parse_stream_weight(p, cur + 1, end);
|
733
746
|
}
|
734
747
|
|
735
|
-
static
|
736
|
-
|
748
|
+
static grpc_error_handle parse_stream_dep2(grpc_chttp2_hpack_parser* p,
|
749
|
+
const uint8_t* cur,
|
750
|
+
const uint8_t* end) {
|
737
751
|
if (cur == end) {
|
738
752
|
p->state = parse_stream_dep2;
|
739
753
|
return GRPC_ERROR_NONE;
|
@@ -742,8 +756,9 @@ static grpc_error* parse_stream_dep2(grpc_chttp2_hpack_parser* p,
|
|
742
756
|
return parse_stream_dep3(p, cur + 1, end);
|
743
757
|
}
|
744
758
|
|
745
|
-
static
|
746
|
-
|
759
|
+
static grpc_error_handle parse_stream_dep1(grpc_chttp2_hpack_parser* p,
|
760
|
+
const uint8_t* cur,
|
761
|
+
const uint8_t* end) {
|
747
762
|
if (cur == end) {
|
748
763
|
p->state = parse_stream_dep1;
|
749
764
|
return GRPC_ERROR_NONE;
|
@@ -752,8 +767,9 @@ static grpc_error* parse_stream_dep1(grpc_chttp2_hpack_parser* p,
|
|
752
767
|
return parse_stream_dep2(p, cur + 1, end);
|
753
768
|
}
|
754
769
|
|
755
|
-
static
|
756
|
-
|
770
|
+
static grpc_error_handle parse_stream_dep0(grpc_chttp2_hpack_parser* p,
|
771
|
+
const uint8_t* cur,
|
772
|
+
const uint8_t* end) {
|
757
773
|
if (cur == end) {
|
758
774
|
p->state = parse_stream_dep0;
|
759
775
|
return GRPC_ERROR_NONE;
|
@@ -762,7 +778,7 @@ static grpc_error* parse_stream_dep0(grpc_chttp2_hpack_parser* p,
|
|
762
778
|
return parse_stream_dep1(p, cur + 1, end);
|
763
779
|
}
|
764
780
|
|
765
|
-
static
|
781
|
+
static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
|
766
782
|
on_invalid_hpack_idx(grpc_chttp2_hpack_parser* p) {
|
767
783
|
return grpc_error_set_int(
|
768
784
|
grpc_error_set_int(
|
@@ -772,22 +788,23 @@ on_invalid_hpack_idx(grpc_chttp2_hpack_parser* p) {
|
|
772
788
|
}
|
773
789
|
|
774
790
|
/* emit an indexed field; jumps to begin the next field on completion */
|
775
|
-
static
|
776
|
-
|
777
|
-
|
791
|
+
static grpc_error_handle finish_indexed_field(grpc_chttp2_hpack_parser* p,
|
792
|
+
const uint8_t* cur,
|
793
|
+
const uint8_t* end) {
|
778
794
|
grpc_mdelem md = grpc_chttp2_hptbl_lookup<true>(&p->table, p->index);
|
779
795
|
if (GPR_UNLIKELY(GRPC_MDISNULL(md))) {
|
780
796
|
return on_invalid_hpack_idx(p);
|
781
797
|
}
|
782
798
|
GRPC_STATS_INC_HPACK_RECV_INDEXED();
|
783
|
-
|
799
|
+
grpc_error_handle err = on_hdr<false>(p, md);
|
784
800
|
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
|
785
801
|
return parse_begin(p, cur, end);
|
786
802
|
}
|
787
803
|
|
788
804
|
/* parse an indexed field with index < 127 */
|
789
|
-
static
|
790
|
-
|
805
|
+
static grpc_error_handle parse_indexed_field(grpc_chttp2_hpack_parser* p,
|
806
|
+
const uint8_t* cur,
|
807
|
+
const uint8_t* end) {
|
791
808
|
p->dynamic_table_update_allowed = 0;
|
792
809
|
p->index = (*cur) & 0x7f;
|
793
810
|
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
@@ -795,9 +812,9 @@ static grpc_error* parse_indexed_field(grpc_chttp2_hpack_parser* p,
|
|
795
812
|
}
|
796
813
|
|
797
814
|
/* parse an indexed field with index >= 127 */
|
798
|
-
static
|
799
|
-
|
800
|
-
|
815
|
+
static grpc_error_handle parse_indexed_field_x(grpc_chttp2_hpack_parser* p,
|
816
|
+
const uint8_t* cur,
|
817
|
+
const uint8_t* end) {
|
801
818
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
802
819
|
finish_indexed_field};
|
803
820
|
p->dynamic_table_update_allowed = 0;
|
@@ -830,12 +847,12 @@ static const grpc_core::ManagedMemorySlice& get_indexed_key(grpc_mdelem md) {
|
|
830
847
|
}
|
831
848
|
|
832
849
|
/* finish a literal header with incremental indexing */
|
833
|
-
static
|
834
|
-
|
835
|
-
|
850
|
+
static grpc_error_handle finish_lithdr_incidx(grpc_chttp2_hpack_parser* p,
|
851
|
+
const uint8_t* cur,
|
852
|
+
const uint8_t* end) {
|
836
853
|
GRPC_STATS_INC_HPACK_RECV_LITHDR_INCIDX();
|
837
854
|
grpc_mdelem md = get_precomputed_md_for_idx(p);
|
838
|
-
|
855
|
+
grpc_error_handle err = on_hdr<true>(
|
839
856
|
p, grpc_mdelem_from_slices(get_indexed_key(md),
|
840
857
|
take_string_intern(p, &p->value)));
|
841
858
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -843,11 +860,11 @@ static grpc_error* finish_lithdr_incidx(grpc_chttp2_hpack_parser* p,
|
|
843
860
|
}
|
844
861
|
|
845
862
|
/* finish a literal header with incremental indexing with no index */
|
846
|
-
static
|
847
|
-
|
848
|
-
|
863
|
+
static grpc_error_handle finish_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
|
864
|
+
const uint8_t* cur,
|
865
|
+
const uint8_t* end) {
|
849
866
|
GRPC_STATS_INC_HPACK_RECV_LITHDR_INCIDX_V();
|
850
|
-
|
867
|
+
grpc_error_handle err = on_hdr<true>(
|
851
868
|
p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
|
852
869
|
take_string_intern(p, &p->value)));
|
853
870
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -855,8 +872,9 @@ static grpc_error* finish_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
|
|
855
872
|
}
|
856
873
|
|
857
874
|
/* parse a literal header with incremental indexing; index < 63 */
|
858
|
-
static
|
859
|
-
|
875
|
+
static grpc_error_handle parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
|
876
|
+
const uint8_t* cur,
|
877
|
+
const uint8_t* end) {
|
860
878
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
861
879
|
parse_value_string_with_indexed_key, finish_lithdr_incidx};
|
862
880
|
p->dynamic_table_update_allowed = 0;
|
@@ -867,9 +885,9 @@ static grpc_error* parse_lithdr_incidx(grpc_chttp2_hpack_parser* p,
|
|
867
885
|
}
|
868
886
|
|
869
887
|
/* parse a literal header with incremental indexing; index >= 63 */
|
870
|
-
static
|
871
|
-
|
872
|
-
|
888
|
+
static grpc_error_handle parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
|
889
|
+
const uint8_t* cur,
|
890
|
+
const uint8_t* end) {
|
873
891
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
874
892
|
parse_string_prefix, parse_value_string_with_indexed_key,
|
875
893
|
finish_lithdr_incidx};
|
@@ -882,9 +900,9 @@ static grpc_error* parse_lithdr_incidx_x(grpc_chttp2_hpack_parser* p,
|
|
882
900
|
}
|
883
901
|
|
884
902
|
/* parse a literal header with incremental indexing; index = 0 */
|
885
|
-
static
|
886
|
-
|
887
|
-
|
903
|
+
static grpc_error_handle parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
|
904
|
+
const uint8_t* cur,
|
905
|
+
const uint8_t* end) {
|
888
906
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
889
907
|
parse_key_string, parse_string_prefix,
|
890
908
|
parse_value_string_with_literal_key, finish_lithdr_incidx_v};
|
@@ -894,12 +912,12 @@ static grpc_error* parse_lithdr_incidx_v(grpc_chttp2_hpack_parser* p,
|
|
894
912
|
}
|
895
913
|
|
896
914
|
/* finish a literal header without incremental indexing */
|
897
|
-
static
|
898
|
-
|
899
|
-
|
915
|
+
static grpc_error_handle finish_lithdr_notidx(grpc_chttp2_hpack_parser* p,
|
916
|
+
const uint8_t* cur,
|
917
|
+
const uint8_t* end) {
|
900
918
|
GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX();
|
901
919
|
grpc_mdelem md = get_precomputed_md_for_idx(p);
|
902
|
-
|
920
|
+
grpc_error_handle err = on_hdr<false>(
|
903
921
|
p, grpc_mdelem_from_slices(get_indexed_key(md),
|
904
922
|
take_string_extern(p, &p->value)));
|
905
923
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -907,11 +925,11 @@ static grpc_error* finish_lithdr_notidx(grpc_chttp2_hpack_parser* p,
|
|
907
925
|
}
|
908
926
|
|
909
927
|
/* finish a literal header without incremental indexing with index = 0 */
|
910
|
-
static
|
911
|
-
|
912
|
-
|
928
|
+
static grpc_error_handle finish_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
|
929
|
+
const uint8_t* cur,
|
930
|
+
const uint8_t* end) {
|
913
931
|
GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX_V();
|
914
|
-
|
932
|
+
grpc_error_handle err = on_hdr<false>(
|
915
933
|
p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
|
916
934
|
take_string_extern(p, &p->value)));
|
917
935
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -919,8 +937,9 @@ static grpc_error* finish_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
|
|
919
937
|
}
|
920
938
|
|
921
939
|
/* parse a literal header without incremental indexing; index < 15 */
|
922
|
-
static
|
923
|
-
|
940
|
+
static grpc_error_handle parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
|
941
|
+
const uint8_t* cur,
|
942
|
+
const uint8_t* end) {
|
924
943
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
925
944
|
parse_value_string_with_indexed_key, finish_lithdr_notidx};
|
926
945
|
p->dynamic_table_update_allowed = 0;
|
@@ -931,9 +950,9 @@ static grpc_error* parse_lithdr_notidx(grpc_chttp2_hpack_parser* p,
|
|
931
950
|
}
|
932
951
|
|
933
952
|
/* parse a literal header without incremental indexing; index >= 15 */
|
934
|
-
static
|
935
|
-
|
936
|
-
|
953
|
+
static grpc_error_handle parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
|
954
|
+
const uint8_t* cur,
|
955
|
+
const uint8_t* end) {
|
937
956
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
938
957
|
parse_string_prefix, parse_value_string_with_indexed_key,
|
939
958
|
finish_lithdr_notidx};
|
@@ -946,9 +965,9 @@ static grpc_error* parse_lithdr_notidx_x(grpc_chttp2_hpack_parser* p,
|
|
946
965
|
}
|
947
966
|
|
948
967
|
/* parse a literal header without incremental indexing; index == 0 */
|
949
|
-
static
|
950
|
-
|
951
|
-
|
968
|
+
static grpc_error_handle parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
|
969
|
+
const uint8_t* cur,
|
970
|
+
const uint8_t* end) {
|
952
971
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
953
972
|
parse_key_string, parse_string_prefix,
|
954
973
|
parse_value_string_with_literal_key, finish_lithdr_notidx_v};
|
@@ -958,12 +977,12 @@ static grpc_error* parse_lithdr_notidx_v(grpc_chttp2_hpack_parser* p,
|
|
958
977
|
}
|
959
978
|
|
960
979
|
/* finish a literal header that is never indexed */
|
961
|
-
static
|
962
|
-
|
963
|
-
|
980
|
+
static grpc_error_handle finish_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
|
981
|
+
const uint8_t* cur,
|
982
|
+
const uint8_t* end) {
|
964
983
|
GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX();
|
965
984
|
grpc_mdelem md = get_precomputed_md_for_idx(p);
|
966
|
-
|
985
|
+
grpc_error_handle err = on_hdr<false>(
|
967
986
|
p, grpc_mdelem_from_slices(get_indexed_key(md),
|
968
987
|
take_string_extern(p, &p->value)));
|
969
988
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -971,11 +990,11 @@ static grpc_error* finish_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
|
|
971
990
|
}
|
972
991
|
|
973
992
|
/* finish a literal header that is never indexed with an extra value */
|
974
|
-
static
|
975
|
-
|
976
|
-
|
993
|
+
static grpc_error_handle finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
|
994
|
+
const uint8_t* cur,
|
995
|
+
const uint8_t* end) {
|
977
996
|
GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX_V();
|
978
|
-
|
997
|
+
grpc_error_handle err = on_hdr<false>(
|
979
998
|
p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
|
980
999
|
take_string_extern(p, &p->value)));
|
981
1000
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -983,8 +1002,9 @@ static grpc_error* finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
|
|
983
1002
|
}
|
984
1003
|
|
985
1004
|
/* parse a literal header that is never indexed; index < 15 */
|
986
|
-
static
|
987
|
-
|
1005
|
+
static grpc_error_handle parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
|
1006
|
+
const uint8_t* cur,
|
1007
|
+
const uint8_t* end) {
|
988
1008
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
989
1009
|
parse_value_string_with_indexed_key, finish_lithdr_nvridx};
|
990
1010
|
p->dynamic_table_update_allowed = 0;
|
@@ -995,9 +1015,9 @@ static grpc_error* parse_lithdr_nvridx(grpc_chttp2_hpack_parser* p,
|
|
995
1015
|
}
|
996
1016
|
|
997
1017
|
/* parse a literal header that is never indexed; index >= 15 */
|
998
|
-
static
|
999
|
-
|
1000
|
-
|
1018
|
+
static grpc_error_handle parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
|
1019
|
+
const uint8_t* cur,
|
1020
|
+
const uint8_t* end) {
|
1001
1021
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
1002
1022
|
parse_string_prefix, parse_value_string_with_indexed_key,
|
1003
1023
|
finish_lithdr_nvridx};
|
@@ -1010,9 +1030,9 @@ static grpc_error* parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser* p,
|
|
1010
1030
|
}
|
1011
1031
|
|
1012
1032
|
/* parse a literal header that is never indexed; index == 0 */
|
1013
|
-
static
|
1014
|
-
|
1015
|
-
|
1033
|
+
static grpc_error_handle parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
|
1034
|
+
const uint8_t* cur,
|
1035
|
+
const uint8_t* end) {
|
1016
1036
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
1017
1037
|
parse_key_string, parse_string_prefix,
|
1018
1038
|
parse_value_string_with_literal_key, finish_lithdr_nvridx_v};
|
@@ -1022,20 +1042,22 @@ static grpc_error* parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser* p,
|
|
1022
1042
|
}
|
1023
1043
|
|
1024
1044
|
/* finish parsing a max table size change */
|
1025
|
-
static
|
1026
|
-
|
1045
|
+
static grpc_error_handle finish_max_tbl_size(grpc_chttp2_hpack_parser* p,
|
1046
|
+
const uint8_t* cur,
|
1047
|
+
const uint8_t* end) {
|
1027
1048
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
|
1028
1049
|
gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
|
1029
1050
|
}
|
1030
|
-
|
1051
|
+
grpc_error_handle err =
|
1031
1052
|
grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index);
|
1032
1053
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1033
1054
|
return parse_begin(p, cur, end);
|
1034
1055
|
}
|
1035
1056
|
|
1036
1057
|
/* parse a max table size change, max size < 15 */
|
1037
|
-
static
|
1038
|
-
|
1058
|
+
static grpc_error_handle parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
|
1059
|
+
const uint8_t* cur,
|
1060
|
+
const uint8_t* end) {
|
1039
1061
|
if (p->dynamic_table_update_allowed == 0) {
|
1040
1062
|
return parse_error(
|
1041
1063
|
p, cur, end,
|
@@ -1049,9 +1071,9 @@ static grpc_error* parse_max_tbl_size(grpc_chttp2_hpack_parser* p,
|
|
1049
1071
|
}
|
1050
1072
|
|
1051
1073
|
/* parse a max table size change, max size >= 15 */
|
1052
|
-
static
|
1053
|
-
|
1054
|
-
|
1074
|
+
static grpc_error_handle parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
|
1075
|
+
const uint8_t* cur,
|
1076
|
+
const uint8_t* end) {
|
1055
1077
|
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
1056
1078
|
finish_max_tbl_size};
|
1057
1079
|
if (p->dynamic_table_update_allowed == 0) {
|
@@ -1069,9 +1091,10 @@ static grpc_error* parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
|
|
1069
1091
|
}
|
1070
1092
|
|
1071
1093
|
/* a parse error: jam the parse state into parse_error, and return error */
|
1072
|
-
static
|
1073
|
-
|
1074
|
-
|
1094
|
+
static grpc_error_handle parse_error(grpc_chttp2_hpack_parser* p,
|
1095
|
+
const uint8_t* /*cur*/,
|
1096
|
+
const uint8_t* /*end*/,
|
1097
|
+
grpc_error_handle err) {
|
1075
1098
|
GPR_ASSERT(err != GRPC_ERROR_NONE);
|
1076
1099
|
if (p->last_error == GRPC_ERROR_NONE) {
|
1077
1100
|
p->last_error = GRPC_ERROR_REF(err);
|
@@ -1080,24 +1103,25 @@ static grpc_error* parse_error(grpc_chttp2_hpack_parser* p,
|
|
1080
1103
|
return err;
|
1081
1104
|
}
|
1082
1105
|
|
1083
|
-
static
|
1084
|
-
|
1085
|
-
|
1106
|
+
static grpc_error_handle still_parse_error(grpc_chttp2_hpack_parser* p,
|
1107
|
+
const uint8_t* /*cur*/,
|
1108
|
+
const uint8_t* /*end*/) {
|
1086
1109
|
return GRPC_ERROR_REF(p->last_error);
|
1087
1110
|
}
|
1088
1111
|
|
1089
|
-
static
|
1090
|
-
|
1112
|
+
static grpc_error_handle parse_illegal_op(grpc_chttp2_hpack_parser* p,
|
1113
|
+
const uint8_t* cur,
|
1114
|
+
const uint8_t* end) {
|
1091
1115
|
GPR_ASSERT(cur != end);
|
1092
|
-
|
1116
|
+
grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1093
1117
|
absl::StrCat("Illegal hpack op code ", *cur).c_str());
|
1094
1118
|
return parse_error(p, cur, end, err);
|
1095
1119
|
}
|
1096
1120
|
|
1097
1121
|
/* parse the 1st byte of a varint into p->parsing.value
|
1098
1122
|
no overflow is possible */
|
1099
|
-
static
|
1100
|
-
|
1123
|
+
static grpc_error_handle parse_value0(grpc_chttp2_hpack_parser* p,
|
1124
|
+
const uint8_t* cur, const uint8_t* end) {
|
1101
1125
|
if (cur == end) {
|
1102
1126
|
p->state = parse_value0;
|
1103
1127
|
return GRPC_ERROR_NONE;
|
@@ -1114,8 +1138,8 @@ static grpc_error* parse_value0(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1114
1138
|
|
1115
1139
|
/* parse the 2nd byte of a varint into p->parsing.value
|
1116
1140
|
no overflow is possible */
|
1117
|
-
static
|
1118
|
-
|
1141
|
+
static grpc_error_handle parse_value1(grpc_chttp2_hpack_parser* p,
|
1142
|
+
const uint8_t* cur, const uint8_t* end) {
|
1119
1143
|
if (cur == end) {
|
1120
1144
|
p->state = parse_value1;
|
1121
1145
|
return GRPC_ERROR_NONE;
|
@@ -1132,8 +1156,8 @@ static grpc_error* parse_value1(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1132
1156
|
|
1133
1157
|
/* parse the 3rd byte of a varint into p->parsing.value
|
1134
1158
|
no overflow is possible */
|
1135
|
-
static
|
1136
|
-
|
1159
|
+
static grpc_error_handle parse_value2(grpc_chttp2_hpack_parser* p,
|
1160
|
+
const uint8_t* cur, const uint8_t* end) {
|
1137
1161
|
if (cur == end) {
|
1138
1162
|
p->state = parse_value2;
|
1139
1163
|
return GRPC_ERROR_NONE;
|
@@ -1150,8 +1174,8 @@ static grpc_error* parse_value2(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1150
1174
|
|
1151
1175
|
/* parse the 4th byte of a varint into p->parsing.value
|
1152
1176
|
no overflow is possible */
|
1153
|
-
static
|
1154
|
-
|
1177
|
+
static grpc_error_handle parse_value3(grpc_chttp2_hpack_parser* p,
|
1178
|
+
const uint8_t* cur, const uint8_t* end) {
|
1155
1179
|
if (cur == end) {
|
1156
1180
|
p->state = parse_value3;
|
1157
1181
|
return GRPC_ERROR_NONE;
|
@@ -1168,8 +1192,8 @@ static grpc_error* parse_value3(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1168
1192
|
|
1169
1193
|
/* parse the 5th byte of a varint into p->parsing.value
|
1170
1194
|
depending on the byte, we may overflow, and care must be taken */
|
1171
|
-
static
|
1172
|
-
|
1195
|
+
static grpc_error_handle parse_value4(grpc_chttp2_hpack_parser* p,
|
1196
|
+
const uint8_t* cur, const uint8_t* end) {
|
1173
1197
|
uint8_t c;
|
1174
1198
|
uint32_t cur_value;
|
1175
1199
|
uint32_t add_value;
|
@@ -1199,7 +1223,7 @@ static grpc_error* parse_value4(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1199
1223
|
}
|
1200
1224
|
|
1201
1225
|
error:
|
1202
|
-
|
1226
|
+
grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1203
1227
|
absl::StrFormat(
|
1204
1228
|
"integer overflow in hpack integer decoding: have 0x%08x, "
|
1205
1229
|
"got byte 0x%02x on byte 5",
|
@@ -1211,8 +1235,9 @@ error:
|
|
1211
1235
|
/* parse any trailing bytes in a varint: it's possible to append an arbitrary
|
1212
1236
|
number of 0x80's and not affect the value - a zero will terminate - and
|
1213
1237
|
anything else will overflow */
|
1214
|
-
static
|
1215
|
-
|
1238
|
+
static grpc_error_handle parse_value5up(grpc_chttp2_hpack_parser* p,
|
1239
|
+
const uint8_t* cur,
|
1240
|
+
const uint8_t* end) {
|
1216
1241
|
while (cur != end && *cur == 0x80) {
|
1217
1242
|
++cur;
|
1218
1243
|
}
|
@@ -1226,7 +1251,7 @@ static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
|
|
1226
1251
|
return parse_next(p, cur + 1, end);
|
1227
1252
|
}
|
1228
1253
|
|
1229
|
-
|
1254
|
+
grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1230
1255
|
absl::StrFormat(
|
1231
1256
|
"integer overflow in hpack integer decoding: have 0x%08x, "
|
1232
1257
|
"got byte 0x%02x sometime after byte 5",
|
@@ -1236,8 +1261,9 @@ static grpc_error* parse_value5up(grpc_chttp2_hpack_parser* p,
|
|
1236
1261
|
}
|
1237
1262
|
|
1238
1263
|
/* parse a string prefix */
|
1239
|
-
static
|
1240
|
-
|
1264
|
+
static grpc_error_handle parse_string_prefix(grpc_chttp2_hpack_parser* p,
|
1265
|
+
const uint8_t* cur,
|
1266
|
+
const uint8_t* end) {
|
1241
1267
|
if (cur == end) {
|
1242
1268
|
p->state = parse_string_prefix;
|
1243
1269
|
return GRPC_ERROR_NONE;
|
@@ -1269,8 +1295,8 @@ static void append_bytes(grpc_chttp2_hpack_parser_string* str,
|
|
1269
1295
|
str->data.copied.length += static_cast<uint32_t>(length);
|
1270
1296
|
}
|
1271
1297
|
|
1272
|
-
static
|
1273
|
-
|
1298
|
+
static grpc_error_handle append_string(grpc_chttp2_hpack_parser* p,
|
1299
|
+
const uint8_t* cur, const uint8_t* end) {
|
1274
1300
|
grpc_chttp2_hpack_parser_string* str = p->parsing.str;
|
1275
1301
|
uint32_t bits;
|
1276
1302
|
uint8_t decoded[3];
|
@@ -1372,8 +1398,8 @@ static grpc_error* append_string(grpc_chttp2_hpack_parser* p,
|
|
1372
1398
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Should never reach here")));
|
1373
1399
|
}
|
1374
1400
|
|
1375
|
-
static
|
1376
|
-
|
1401
|
+
static grpc_error_handle finish_str(grpc_chttp2_hpack_parser* p,
|
1402
|
+
const uint8_t* cur, const uint8_t* end) {
|
1377
1403
|
uint8_t decoded[2];
|
1378
1404
|
uint32_t bits;
|
1379
1405
|
grpc_chttp2_hpack_parser_string* str = p->parsing.str;
|
@@ -1391,7 +1417,7 @@ static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1391
1417
|
case B64_BYTE2:
|
1392
1418
|
bits = p->base64_buffer;
|
1393
1419
|
if (bits & 0xffff) {
|
1394
|
-
|
1420
|
+
grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1395
1421
|
absl::StrFormat("trailing bits in base64 encoding: 0x%04x",
|
1396
1422
|
bits & 0xffff)
|
1397
1423
|
.c_str());
|
@@ -1403,7 +1429,7 @@ static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1403
1429
|
case B64_BYTE3:
|
1404
1430
|
bits = p->base64_buffer;
|
1405
1431
|
if (bits & 0xff) {
|
1406
|
-
|
1432
|
+
grpc_error_handle err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1407
1433
|
absl::StrFormat("trailing bits in base64 encoding: 0x%02x",
|
1408
1434
|
bits & 0xff)
|
1409
1435
|
.c_str());
|
@@ -1418,13 +1444,14 @@ static grpc_error* finish_str(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1418
1444
|
}
|
1419
1445
|
|
1420
1446
|
/* decode a nibble from a huffman encoded stream */
|
1421
|
-
static
|
1447
|
+
static grpc_error_handle huff_nibble(grpc_chttp2_hpack_parser* p,
|
1448
|
+
uint8_t nibble) {
|
1422
1449
|
int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble];
|
1423
1450
|
int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble];
|
1424
1451
|
if (emit != -1) {
|
1425
1452
|
if (emit >= 0 && emit < 256) {
|
1426
1453
|
uint8_t c = static_cast<uint8_t>(emit);
|
1427
|
-
|
1454
|
+
grpc_error_handle err = append_string(p, &c, (&c) + 1);
|
1428
1455
|
if (err != GRPC_ERROR_NONE) return err;
|
1429
1456
|
} else {
|
1430
1457
|
assert(emit == 256);
|
@@ -1435,10 +1462,11 @@ static grpc_error* huff_nibble(grpc_chttp2_hpack_parser* p, uint8_t nibble) {
|
|
1435
1462
|
}
|
1436
1463
|
|
1437
1464
|
/* decode full bytes from a huffman encoded stream */
|
1438
|
-
static
|
1439
|
-
|
1465
|
+
static grpc_error_handle add_huff_bytes(grpc_chttp2_hpack_parser* p,
|
1466
|
+
const uint8_t* cur,
|
1467
|
+
const uint8_t* end) {
|
1440
1468
|
for (; cur != end; ++cur) {
|
1441
|
-
|
1469
|
+
grpc_error_handle err = huff_nibble(p, *cur >> 4);
|
1442
1470
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1443
1471
|
err = huff_nibble(p, *cur & 0xf);
|
1444
1472
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
@@ -1448,8 +1476,8 @@ static grpc_error* add_huff_bytes(grpc_chttp2_hpack_parser* p,
|
|
1448
1476
|
|
1449
1477
|
/* decode some string bytes based on the current decoding mode
|
1450
1478
|
(huffman or not) */
|
1451
|
-
static
|
1452
|
-
|
1479
|
+
static grpc_error_handle add_str_bytes(grpc_chttp2_hpack_parser* p,
|
1480
|
+
const uint8_t* cur, const uint8_t* end) {
|
1453
1481
|
if (p->huff) {
|
1454
1482
|
return add_huff_bytes(p, cur, end);
|
1455
1483
|
} else {
|
@@ -1458,18 +1486,18 @@ static grpc_error* add_str_bytes(grpc_chttp2_hpack_parser* p,
|
|
1458
1486
|
}
|
1459
1487
|
|
1460
1488
|
/* parse a string - tries to do large chunks at a time */
|
1461
|
-
static
|
1462
|
-
|
1489
|
+
static grpc_error_handle parse_string(grpc_chttp2_hpack_parser* p,
|
1490
|
+
const uint8_t* cur, const uint8_t* end) {
|
1463
1491
|
size_t remaining = p->strlen - p->strgot;
|
1464
1492
|
size_t given = static_cast<size_t>(end - cur);
|
1465
1493
|
if (remaining <= given) {
|
1466
|
-
|
1494
|
+
grpc_error_handle err = add_str_bytes(p, cur, cur + remaining);
|
1467
1495
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1468
1496
|
err = finish_str(p, cur + remaining, end);
|
1469
1497
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1470
1498
|
return parse_next(p, cur + remaining, end);
|
1471
1499
|
} else {
|
1472
|
-
|
1500
|
+
grpc_error_handle err = add_str_bytes(p, cur, cur + given);
|
1473
1501
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1474
1502
|
GPR_ASSERT(given <= UINT32_MAX - p->strgot);
|
1475
1503
|
p->strgot += static_cast<uint32_t>(given);
|
@@ -1479,10 +1507,9 @@ static grpc_error* parse_string(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
|
1479
1507
|
}
|
1480
1508
|
|
1481
1509
|
/* begin parsing a string - performs setup, calls parse_string */
|
1482
|
-
static
|
1483
|
-
|
1484
|
-
|
1485
|
-
grpc_chttp2_hpack_parser_string* str) {
|
1510
|
+
static grpc_error_handle begin_parse_string(
|
1511
|
+
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end,
|
1512
|
+
uint8_t binary, grpc_chttp2_hpack_parser_string* str) {
|
1486
1513
|
if (!p->huff && binary == NOT_BINARY &&
|
1487
1514
|
static_cast<uint32_t>(end - cur) >= p->strlen &&
|
1488
1515
|
p->current_slice_refcount != nullptr) {
|
@@ -1518,8 +1545,9 @@ static grpc_error* begin_parse_string(grpc_chttp2_hpack_parser* p,
|
|
1518
1545
|
}
|
1519
1546
|
|
1520
1547
|
/* parse the key string */
|
1521
|
-
static
|
1522
|
-
|
1548
|
+
static grpc_error_handle parse_key_string(grpc_chttp2_hpack_parser* p,
|
1549
|
+
const uint8_t* cur,
|
1550
|
+
const uint8_t* end) {
|
1523
1551
|
return begin_parse_string(p, cur, end, NOT_BINARY, &p->key);
|
1524
1552
|
}
|
1525
1553
|
|
@@ -1554,8 +1582,8 @@ static void set_precomputed_md_idx(grpc_chttp2_hpack_parser* p,
|
|
1554
1582
|
is a binary indexed header during string parsing. We'll need to revisit this
|
1555
1583
|
metadata when we're done parsing, so we cache the metadata for this index
|
1556
1584
|
here using set_precomputed_md_idx(). */
|
1557
|
-
static
|
1558
|
-
|
1585
|
+
static grpc_error_handle is_binary_indexed_header(grpc_chttp2_hpack_parser* p,
|
1586
|
+
bool* is) {
|
1559
1587
|
grpc_mdelem elem = grpc_chttp2_hptbl_lookup(&p->table, p->index);
|
1560
1588
|
if (GPR_UNLIKELY(GRPC_MDISNULL(elem))) {
|
1561
1589
|
return on_invalid_hpack_idx(p);
|
@@ -1574,29 +1602,30 @@ static grpc_error* is_binary_indexed_header(grpc_chttp2_hpack_parser* p,
|
|
1574
1602
|
}
|
1575
1603
|
|
1576
1604
|
/* parse the value string */
|
1577
|
-
static
|
1578
|
-
|
1579
|
-
|
1605
|
+
static grpc_error_handle parse_value_string(grpc_chttp2_hpack_parser* p,
|
1606
|
+
const uint8_t* cur,
|
1607
|
+
const uint8_t* end,
|
1608
|
+
bool is_binary) {
|
1580
1609
|
return begin_parse_string(p, cur, end, is_binary ? BINARY_BEGIN : NOT_BINARY,
|
1581
1610
|
&p->value);
|
1582
1611
|
}
|
1583
1612
|
|
1584
|
-
static
|
1613
|
+
static grpc_error_handle parse_value_string_with_indexed_key(
|
1585
1614
|
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end) {
|
1586
1615
|
bool is_binary = false;
|
1587
|
-
|
1616
|
+
grpc_error_handle err = is_binary_indexed_header(p, &is_binary);
|
1588
1617
|
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1589
1618
|
return parse_value_string(p, cur, end, is_binary);
|
1590
1619
|
}
|
1591
1620
|
|
1592
|
-
static
|
1621
|
+
static grpc_error_handle parse_value_string_with_literal_key(
|
1593
1622
|
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end) {
|
1594
1623
|
return parse_value_string(p, cur, end, is_binary_literal_header(p));
|
1595
1624
|
}
|
1596
1625
|
|
1597
1626
|
/* "Uninitialized" header parser to save us a branch in on_hdr(). */
|
1598
|
-
static
|
1599
|
-
|
1627
|
+
static grpc_error_handle on_header_uninitialized(void* /*user_data*/,
|
1628
|
+
grpc_mdelem md) {
|
1600
1629
|
GRPC_MDELEM_UNREF(md);
|
1601
1630
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("on_header callback not set");
|
1602
1631
|
}
|
@@ -1645,15 +1674,15 @@ void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser* p) {
|
|
1645
1674
|
gpr_free(p->value.data.copied.str);
|
1646
1675
|
}
|
1647
1676
|
|
1648
|
-
|
1649
|
-
|
1677
|
+
grpc_error_handle grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser* p,
|
1678
|
+
const grpc_slice& slice) {
|
1650
1679
|
/* max number of bytes to parse at a time... limits call stack depth on
|
1651
1680
|
* compilers without TCO */
|
1652
1681
|
#define MAX_PARSE_LENGTH 1024
|
1653
1682
|
p->current_slice_refcount = slice.refcount;
|
1654
1683
|
const uint8_t* start = GRPC_SLICE_START_PTR(slice);
|
1655
1684
|
const uint8_t* end = GRPC_SLICE_END_PTR(slice);
|
1656
|
-
|
1685
|
+
grpc_error_handle error = GRPC_ERROR_NONE;
|
1657
1686
|
while (start != end && error == GRPC_ERROR_NONE) {
|
1658
1687
|
const uint8_t* target = start + GPR_MIN(MAX_PARSE_LENGTH, end - start);
|
1659
1688
|
error = p->state(p, start, target);
|
@@ -1669,7 +1698,7 @@ static const maybe_complete_func_type maybe_complete_funcs[] = {
|
|
1669
1698
|
grpc_chttp2_maybe_complete_recv_initial_metadata,
|
1670
1699
|
grpc_chttp2_maybe_complete_recv_trailing_metadata};
|
1671
1700
|
|
1672
|
-
static void force_client_rst_stream(void* sp,
|
1701
|
+
static void force_client_rst_stream(void* sp, grpc_error_handle /*error*/) {
|
1673
1702
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
|
1674
1703
|
grpc_chttp2_transport* t = s->t;
|
1675
1704
|
if (!s->write_closed) {
|
@@ -1699,18 +1728,18 @@ static void parse_stream_compression_md(grpc_chttp2_transport* /*t*/,
|
|
1699
1728
|
}
|
1700
1729
|
}
|
1701
1730
|
|
1702
|
-
|
1703
|
-
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1731
|
+
grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
|
1732
|
+
grpc_chttp2_transport* t,
|
1733
|
+
grpc_chttp2_stream* s,
|
1734
|
+
const grpc_slice& slice,
|
1735
|
+
int is_last) {
|
1707
1736
|
GPR_TIMER_SCOPE("grpc_chttp2_header_parser_parse", 0);
|
1708
1737
|
grpc_chttp2_hpack_parser* parser =
|
1709
1738
|
static_cast<grpc_chttp2_hpack_parser*>(hpack_parser);
|
1710
1739
|
if (s != nullptr) {
|
1711
1740
|
s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice);
|
1712
1741
|
}
|
1713
|
-
|
1742
|
+
grpc_error_handle error = grpc_chttp2_hpack_parser_parse(parser, slice);
|
1714
1743
|
if (error != GRPC_ERROR_NONE) {
|
1715
1744
|
return error;
|
1716
1745
|
}
|