grpc 1.34.0 → 1.42.0
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 +978 -2868
- data/etc/roots.pem +592 -899
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -1
- data/include/grpc/compression.h +1 -1
- data/include/grpc/event_engine/README.md +38 -0
- data/include/grpc/event_engine/endpoint_config.h +43 -0
- data/include/grpc/event_engine/event_engine.h +375 -0
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/event_engine/port.h +39 -0
- data/include/grpc/fork.h +1 -1
- data/include/grpc/grpc.h +49 -4
- data/include/grpc/grpc_posix.h +5 -2
- data/include/grpc/grpc_security.h +127 -14
- data/include/grpc/grpc_security_constants.h +16 -0
- data/include/grpc/impl/codegen/atm.h +5 -3
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
- data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
- data/include/grpc/impl/codegen/atm_windows.h +6 -0
- data/include/grpc/impl/codegen/byte_buffer.h +3 -1
- data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
- data/include/grpc/impl/codegen/compression_types.h +2 -0
- data/include/grpc/impl/codegen/connectivity_state.h +2 -0
- data/include/grpc/impl/codegen/fork.h +2 -0
- data/include/grpc/impl/codegen/gpr_slice.h +2 -0
- data/include/grpc/impl/codegen/gpr_types.h +2 -0
- data/include/grpc/impl/codegen/grpc_types.h +49 -25
- data/include/grpc/impl/codegen/log.h +2 -2
- data/include/grpc/impl/codegen/port_platform.h +81 -22
- data/include/grpc/impl/codegen/propagation_bits.h +2 -0
- data/include/grpc/impl/codegen/slice.h +2 -0
- data/include/grpc/impl/codegen/status.h +2 -0
- data/include/grpc/impl/codegen/sync.h +8 -5
- data/include/grpc/impl/codegen/sync_abseil.h +2 -0
- data/include/grpc/impl/codegen/sync_custom.h +2 -0
- data/include/grpc/impl/codegen/sync_generic.h +3 -0
- data/include/grpc/impl/codegen/sync_posix.h +4 -2
- data/include/grpc/impl/codegen/sync_windows.h +6 -0
- data/include/grpc/module.modulemap +14 -14
- data/include/grpc/slice.h +1 -1
- data/include/grpc/slice_buffer.h +3 -3
- data/include/grpc/status.h +1 -1
- data/include/grpc/support/atm.h +1 -1
- data/include/grpc/support/atm_gcc_atomic.h +1 -1
- data/include/grpc/support/atm_gcc_sync.h +1 -1
- data/include/grpc/support/atm_windows.h +1 -1
- data/include/grpc/support/log.h +1 -1
- data/include/grpc/support/port_platform.h +1 -1
- data/include/grpc/support/sync.h +4 -4
- data/include/grpc/support/sync_abseil.h +1 -1
- data/include/grpc/support/sync_custom.h +1 -1
- data/include/grpc/support/sync_generic.h +1 -1
- data/include/grpc/support/sync_posix.h +1 -1
- data/include/grpc/support/sync_windows.h +1 -1
- data/include/grpc/support/time.h +9 -9
- data/src/core/ext/filters/census/grpc_context.cc +1 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +20 -24
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
- data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
- data/src/core/ext/filters/client_channel/client_channel.cc +2009 -3145
- data/src/core/ext/filters/client_channel/client_channel.h +559 -60
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +18 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +18 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
- data/src/core/ext/filters/client_channel/config_selector.h +33 -9
- data/src/core/ext/filters/client_channel/connector.h +19 -19
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +190 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +24 -142
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +15 -11
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +53 -50
- data/src/core/ext/filters/client_channel/health/health_check_client.h +35 -33
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +37 -34
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.cc +36 -20
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -21
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +246 -166
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +5 -6
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +37 -30
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +53 -55
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +757 -0
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +37 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +16 -18
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +24 -27
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +385 -135
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +57 -71
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +43 -64
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1362 -0
- data/src/core/ext/filters/client_channel/lb_policy.cc +6 -17
- data/src/core/ext/filters/client_channel/lb_policy.h +93 -93
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -11
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +27 -67
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +10 -9
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +76 -88
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +3 -33
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +26 -23
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +473 -74
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +27 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
- 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 +45 -35
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +43 -46
- 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 +384 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +22 -35
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +466 -254
- data/src/core/ext/filters/client_channel/resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver.h +4 -15
- data/src/core/ext/filters/client_channel/resolver_factory.h +8 -6
- data/src/core/ext/filters/client_channel/resolver_registry.cc +43 -44
- data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +42 -252
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +25 -54
- data/src/core/ext/filters/client_channel/retry_filter.cc +2573 -0
- data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
- data/src/core/ext/filters/client_channel/retry_service_config.cc +316 -0
- data/src/core/ext/filters/client_channel/retry_service_config.h +96 -0
- data/src/core/ext/filters/client_channel/retry_throttle.cc +20 -49
- data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
- data/src/core/ext/filters/client_channel/server_address.cc +10 -1
- data/src/core/ext/filters/client_channel/server_address.h +31 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +54 -40
- data/src/core/ext/filters/client_channel/subchannel.cc +179 -329
- data/src/core/ext/filters/client_channel/subchannel.h +101 -158
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +38 -9
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +21 -10
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +47 -223
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +33 -34
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +503 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +39 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +181 -0
- data/src/core/ext/filters/fault_injection/service_config_parser.h +85 -0
- data/src/core/ext/filters/http/client/http_client_filter.cc +77 -69
- data/src/core/ext/filters/http/client_authority_filter.cc +19 -19
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -68
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -35
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +29 -30
- data/src/core/ext/filters/http/server/http_server_filter.cc +104 -95
- data/src/core/ext/filters/max_age/max_age_filter.cc +71 -68
- data/src/core/ext/filters/message_size/message_size_filter.cc +43 -41
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +17 -16
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +11 -10
- data/src/core/ext/{filters/client_channel → service_config}/service_config_call_data.h +23 -19
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +9 -9
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +15 -10
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +37 -23
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +42 -35
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +32 -16
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +51 -62
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +664 -236
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +13 -5
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +25 -11
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +61 -22
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -2
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +264 -223
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -2
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/context_list.h +5 -6
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +59 -40
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +28 -24
- data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -20
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +13 -13
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +12 -15
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +7 -6
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +49 -17
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +22 -19
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +311 -665
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +240 -70
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +107 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +69 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +865 -1172
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +100 -81
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +146 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +137 -0
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
- data/src/core/{lib/transport/authority_override.h → ext/transport/chttp2/transport/hpack_utils.h} +8 -12
- data/src/core/ext/transport/chttp2/transport/internal.h +40 -33
- data/src/core/ext/transport/chttp2/transport/parsing.cc +156 -286
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +60 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
- data/src/core/ext/transport/chttp2/transport/writing.cc +69 -54
- data/src/core/ext/transport/inproc/inproc_transport.cc +204 -160
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +406 -0
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +1591 -0
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +48 -49
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +245 -56
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +371 -0
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1554 -0
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +66 -21
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +178 -142
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +795 -314
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +21 -7
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +25 -24
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +70 -23
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +29 -29
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +138 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +23 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +147 -75
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +522 -96
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +27 -27
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +116 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +42 -14
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +63 -63
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +228 -63
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +57 -56
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +244 -98
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +25 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +125 -57
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +533 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +3 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +133 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +17 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +15 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +56 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +35 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +96 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +16 -17
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +81 -40
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +56 -22
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +223 -34
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +137 -72
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +19 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +48 -38
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +276 -103
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +51 -45
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +203 -62
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +48 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +177 -0
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +10 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +55 -22
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +144 -0
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +536 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +153 -0
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +550 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +51 -44
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +165 -43
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +35 -16
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +148 -40
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +339 -279
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +1466 -543
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +48 -10
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +6 -7
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +32 -6
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +73 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +298 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +79 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +303 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +42 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +123 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +151 -112
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +693 -244
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +1 -2
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +52 -32
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +231 -59
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +15 -18
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +51 -28
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +45 -44
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +178 -74
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +58 -51
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +221 -135
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +2 -5
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +2 -5
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +9 -10
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +46 -19
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +2 -4
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +121 -0
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +468 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +60 -0
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +205 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +9 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +44 -14
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +36 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +96 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +10 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +51 -12
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +10 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +31 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +46 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +136 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +11 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +41 -4
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +96 -11
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +19 -19
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +77 -14
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -1
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +30 -5
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +41 -4
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +15 -2
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +2 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +62 -62
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +227 -84
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +86 -69
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +256 -72
- data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
- data/src/core/ext/upb-generated/google/api/http.upb.h +47 -10
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +154 -154
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +645 -320
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +44 -7
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +15 -2
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +119 -10
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +18 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +12 -12
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +19 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +63 -63
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +220 -87
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +8 -8
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +36 -9
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +5 -5
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +28 -3
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +31 -31
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +146 -35
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +41 -4
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +4 -6
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +15 -2
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +2 -1
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +17 -4
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +15 -2
- data/src/core/ext/upb-generated/validate/validate.upb.c +243 -227
- data/src/core/ext/upb-generated/validate/validate.upb.h +626 -253
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +28 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +66 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +155 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +90 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +100 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +178 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +91 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +33 -0
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +354 -0
- data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +15 -7
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -170
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +424 -0
- data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +467 -429
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +12 -2
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +156 -109
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +25 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +89 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +156 -153
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +240 -168
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +20 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +37 -20
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +52 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +90 -63
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +137 -122
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +136 -120
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +90 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +31 -26
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +141 -0
- data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +69 -51
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +748 -681
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +15 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +102 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +123 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +79 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +435 -379
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +121 -91
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +182 -180
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +163 -0
- data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +14 -13
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +35 -32
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +8 -7
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +100 -100
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +9 -8
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +8 -8
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +4 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +182 -157
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +63 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/certificate_provider_factory.h +1 -1
- data/src/core/ext/xds/certificate_provider_registry.cc +2 -2
- data/src/core/ext/xds/certificate_provider_store.cc +10 -7
- data/src/core/ext/xds/certificate_provider_store.h +15 -10
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +28 -3
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +3 -6
- data/src/core/ext/xds/xds_api.cc +2654 -808
- data/src/core/ext/xds/xds_api.h +460 -154
- data/src/core/ext/xds/xds_bootstrap.cc +139 -188
- data/src/core/ext/xds/xds_bootstrap.h +34 -18
- data/src/core/ext/xds/xds_certificate_provider.cc +237 -72
- data/src/core/ext/xds/xds_certificate_provider.h +104 -27
- data/src/core/ext/xds/xds_channel_args.h +5 -2
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +985 -429
- data/src/core/ext/xds/xds_client.h +100 -51
- data/src/core/ext/xds/xds_client_stats.cc +18 -16
- data/src/core/ext/xds/xds_client_stats.h +12 -11
- data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
- data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
- data/src/core/ext/xds/xds_http_filters.cc +116 -0
- data/src/core/ext/xds/xds_http_filters.h +133 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +544 -0
- data/src/core/lib/{iomgr → address_utils}/parse_address.cc +72 -68
- data/src/core/lib/{iomgr → address_utils}/parse_address.h +20 -16
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +131 -15
- data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +37 -7
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/call_tracer.h +85 -0
- data/src/core/lib/channel/channel_args.cc +34 -15
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack.cc +27 -12
- data/src/core/lib/channel/channel_stack.h +18 -10
- data/src/core/lib/channel/channel_stack_builder.cc +6 -16
- data/src/core/lib/channel/channel_stack_builder.h +1 -9
- data/src/core/lib/channel/channel_trace.cc +5 -4
- data/src/core/lib/channel/channel_trace.h +3 -2
- data/src/core/lib/channel/channelz.cc +162 -63
- data/src/core/lib/channel/channelz.h +62 -31
- data/src/core/lib/channel/channelz_registry.cc +22 -7
- data/src/core/lib/channel/channelz_registry.h +1 -2
- data/src/core/lib/channel/connected_channel.cc +6 -7
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/channel/context.h +3 -0
- data/src/core/lib/channel/handshaker.cc +13 -53
- data/src/core/lib/channel/handshaker.h +7 -25
- data/src/core/lib/channel/handshaker_factory.h +10 -2
- data/src/core/lib/channel/handshaker_registry.cc +15 -70
- data/src/core/lib/channel/handshaker_registry.h +29 -12
- data/src/core/lib/channel/status_util.cc +12 -2
- data/src/core/lib/channel/status_util.h +11 -2
- data/src/core/lib/compression/algorithm_metadata.h +1 -0
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +11 -7
- data/src/core/lib/compression/compression_internal.cc +4 -6
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/compression/message_compress.cc +2 -2
- data/src/core/lib/compression/stream_compression.cc +2 -1
- data/src/core/lib/compression/stream_compression.h +3 -2
- data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
- data/src/core/lib/compression/stream_compression_gzip.h +1 -1
- data/src/core/lib/compression/stream_compression_identity.cc +2 -1
- data/src/core/lib/compression/stream_compression_identity.h +1 -1
- data/src/core/lib/config/core_configuration.cc +96 -0
- data/src/core/lib/config/core_configuration.h +146 -0
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats.h +4 -3
- data/src/core/lib/debug/stats_data.cc +15 -14
- data/src/core/lib/debug/stats_data.h +14 -13
- data/src/core/lib/debug/trace.cc +1 -0
- data/src/core/lib/debug/trace.h +2 -1
- data/src/core/lib/event_engine/endpoint_config.cc +45 -0
- data/src/core/lib/event_engine/endpoint_config_internal.h +42 -0
- data/src/core/lib/event_engine/event_engine.cc +50 -0
- data/src/core/lib/event_engine/sockaddr.cc +40 -0
- data/src/core/lib/event_engine/sockaddr.h +44 -0
- data/src/core/lib/gpr/alloc.cc +7 -5
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/env_linux.cc +1 -2
- data/src/core/lib/gpr/env_posix.cc +2 -3
- data/src/core/lib/gpr/log.cc +61 -19
- data/src/core/lib/gpr/log_android.cc +3 -2
- data/src/core/lib/gpr/log_linux.cc +10 -5
- data/src/core/lib/gpr/log_posix.cc +9 -4
- data/src/core/lib/gpr/log_windows.cc +3 -1
- data/src/core/lib/gpr/murmur_hash.cc +4 -2
- data/src/core/lib/gpr/spinlock.h +10 -2
- data/src/core/lib/gpr/string.cc +24 -23
- data/src/core/lib/gpr/string.h +7 -8
- data/src/core/lib/gpr/sync.cc +6 -6
- data/src/core/lib/gpr/sync_abseil.cc +10 -12
- data/src/core/lib/gpr/sync_posix.cc +3 -3
- data/src/core/lib/gpr/sync_windows.cc +2 -2
- data/src/core/lib/gpr/time.cc +15 -14
- data/src/core/lib/gpr/time_windows.cc +3 -2
- data/src/core/lib/gpr/tls.h +119 -40
- data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
- data/src/core/lib/gprpp/arena.cc +2 -1
- data/src/core/lib/gprpp/arena.h +18 -7
- data/src/core/lib/gprpp/atomic_utils.h +47 -0
- data/src/core/lib/gprpp/bitset.h +188 -0
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +39 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +28 -29
- data/src/core/lib/gprpp/fork.cc +14 -12
- data/src/core/lib/gprpp/fork.h +4 -4
- data/src/core/lib/gprpp/global_config.h +1 -2
- data/src/core/lib/gprpp/global_config_env.cc +7 -7
- data/src/core/lib/gprpp/global_config_generic.h +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +9 -6
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/memory.h +9 -3
- data/src/core/lib/gprpp/mpscq.cc +9 -9
- data/src/core/lib/gprpp/mpscq.h +6 -5
- data/src/core/lib/gprpp/orphanable.h +6 -6
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +48 -34
- data/src/core/lib/gprpp/ref_counted_ptr.h +11 -1
- data/src/core/lib/gprpp/status_helper.cc +427 -0
- data/src/core/lib/gprpp/status_helper.h +194 -0
- data/src/core/lib/gprpp/sync.h +106 -43
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/gprpp/thd.h +1 -1
- data/src/core/lib/gprpp/thd_posix.cc +11 -6
- data/src/core/lib/gprpp/thd_windows.cc +7 -12
- data/src/core/lib/gprpp/time_util.cc +77 -0
- data/src/core/lib/gprpp/time_util.h +42 -0
- data/src/core/lib/http/format_request.cc +1 -0
- data/src/core/lib/http/format_request.h +1 -0
- data/src/core/lib/http/httpcli.cc +203 -185
- data/src/core/lib/http/httpcli.h +5 -3
- data/src/core/lib/http/httpcli_security_connector.cc +19 -18
- data/src/core/lib/http/parser.cc +19 -20
- data/src/core/lib/http/parser.h +5 -4
- data/src/core/lib/iomgr/buffer_list.cc +10 -11
- data/src/core/lib/iomgr/buffer_list.h +6 -8
- data/src/core/lib/iomgr/call_combiner.cc +46 -21
- data/src/core/lib/iomgr/call_combiner.h +12 -14
- data/src/core/lib/iomgr/cfstream_handle.cc +6 -6
- 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 +25 -36
- data/src/core/lib/iomgr/combiner.h +3 -2
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
- data/src/core/lib/iomgr/endpoint.cc +1 -5
- data/src/core/lib/iomgr/endpoint.h +3 -5
- data/src/core/lib/iomgr/endpoint_cfstream.cc +27 -39
- data/src/core/lib/iomgr/endpoint_cfstream.h +1 -1
- data/src/core/lib/iomgr/endpoint_pair.h +1 -0
- data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
- data/src/core/lib/iomgr/endpoint_pair_windows.cc +17 -9
- data/src/core/lib/iomgr/error.cc +277 -105
- data/src/core/lib/iomgr/error.h +280 -114
- data/src/core/lib/iomgr/error_cfstream.cc +10 -4
- data/src/core/lib/iomgr/error_cfstream.h +2 -2
- data/src/core/lib/iomgr/error_internal.h +7 -2
- data/src/core/lib/iomgr/ev_apple.cc +16 -13
- data/src/core/lib/iomgr/ev_apple.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +53 -53
- data/src/core/lib/iomgr/ev_epollex_linux.cc +81 -81
- data/src/core/lib/iomgr/ev_poll_posix.cc +70 -68
- data/src/core/lib/iomgr/ev_posix.cc +13 -13
- data/src/core/lib/iomgr/ev_posix.h +9 -9
- data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
- data/src/core/lib/iomgr/event_engine/closure.h +42 -0
- data/src/core/lib/iomgr/event_engine/endpoint.cc +173 -0
- data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +104 -0
- data/src/core/lib/iomgr/event_engine/iomgr.h +42 -0
- data/src/core/lib/iomgr/event_engine/pollset.cc +88 -0
- data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
- data/src/core/lib/iomgr/event_engine/promise.h +51 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +41 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +35 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +114 -0
- data/src/core/lib/iomgr/event_engine/tcp.cc +293 -0
- data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
- data/src/core/lib/iomgr/exec_ctx.cc +14 -11
- data/src/core/lib/iomgr/exec_ctx.h +21 -28
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
- data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
- data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
- data/src/core/lib/iomgr/executor/threadpool.h +5 -4
- data/src/core/lib/iomgr/executor.cc +19 -33
- data/src/core/lib/iomgr/executor.h +3 -3
- data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
- data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
- data/src/core/lib/iomgr/iocp_windows.cc +1 -0
- data/src/core/lib/iomgr/iomgr.cc +6 -4
- data/src/core/lib/iomgr/iomgr.h +3 -3
- data/src/core/lib/iomgr/iomgr_custom.cc +3 -3
- data/src/core/lib/iomgr/iomgr_custom.h +2 -2
- data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
- data/src/core/lib/iomgr/iomgr_internal.h +6 -5
- data/src/core/lib/iomgr/iomgr_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +42 -13
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -3
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
- data/src/core/lib/iomgr/load_file.cc +6 -6
- data/src/core/lib/iomgr/load_file.h +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +38 -15
- data/src/core/lib/iomgr/lockfree_event.h +2 -2
- data/src/core/lib/iomgr/polling_entity.cc +2 -2
- 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 +10 -11
- data/src/core/lib/iomgr/pollset_custom.h +3 -1
- data/src/core/lib/iomgr/pollset_set_custom.cc +2 -3
- data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
- data/src/core/lib/iomgr/pollset_windows.cc +5 -5
- data/src/core/lib/iomgr/port.h +7 -10
- data/src/core/lib/iomgr/python_util.h +4 -3
- data/src/core/lib/iomgr/resolve_address.cc +14 -9
- data/src/core/lib/iomgr/resolve_address.h +12 -10
- data/src/core/lib/iomgr/resolve_address_custom.cc +14 -13
- data/src/core/lib/iomgr/resolve_address_custom.h +3 -4
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -14
- data/src/core/lib/iomgr/resolve_address_windows.cc +10 -12
- data/src/core/lib/iomgr/resource_quota.cc +152 -62
- data/src/core/lib/iomgr/resource_quota.h +66 -17
- data/src/core/lib/iomgr/sockaddr.h +2 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +8 -7
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.cc +20 -6
- data/src/core/lib/iomgr/socket_mutator.h +27 -3
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -27
- data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
- data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
- data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client.cc +5 -3
- data/src/core/lib/iomgr/tcp_client.h +4 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +18 -26
- data/src/core/lib/iomgr/tcp_client_custom.cc +19 -27
- data/src/core/lib/iomgr/tcp_client_posix.cc +56 -47
- data/src/core/lib/iomgr/tcp_client_posix.h +8 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +23 -14
- data/src/core/lib/iomgr/tcp_custom.cc +46 -55
- data/src/core/lib/iomgr/tcp_custom.h +15 -13
- data/src/core/lib/iomgr/tcp_posix.cc +119 -145
- data/src/core/lib/iomgr/tcp_posix.h +19 -12
- data/src/core/lib/iomgr/tcp_server.cc +9 -7
- data/src/core/lib/iomgr/tcp_server.h +18 -14
- data/src/core/lib/iomgr/tcp_server_custom.cc +63 -73
- data/src/core/lib/iomgr/tcp_server_posix.cc +49 -35
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +16 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +22 -20
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +11 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +40 -36
- data/src/core/lib/iomgr/tcp_windows.cc +21 -40
- data/src/core/lib/iomgr/tcp_windows.h +4 -3
- data/src/core/lib/iomgr/timer.cc +1 -0
- data/src/core/lib/iomgr/timer.h +7 -3
- data/src/core/lib/iomgr/timer_custom.cc +7 -6
- data/src/core/lib/iomgr/timer_custom.h +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +32 -62
- data/src/core/lib/iomgr/timer_generic.h +1 -0
- data/src/core/lib/iomgr/timer_heap.cc +2 -3
- data/src/core/lib/iomgr/timer_manager.cc +4 -4
- data/src/core/lib/iomgr/unix_sockets_posix.cc +21 -24
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -5
- 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_nospecial.cc +2 -1
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
- data/src/core/lib/iomgr/work_serializer.cc +4 -4
- data/src/core/lib/iomgr/work_serializer.h +18 -2
- data/src/core/lib/json/json.h +11 -1
- data/src/core/lib/json/json_reader.cc +14 -23
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +65 -115
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/matchers/matchers.cc +327 -0
- data/src/core/lib/matchers/matchers.h +160 -0
- data/src/core/lib/profiling/basic_timers.cc +8 -6
- data/src/core/lib/profiling/stap_timers.cc +2 -2
- data/src/core/lib/security/authorization/authorization_engine.h +13 -53
- data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +126 -66
- data/src/core/lib/security/authorization/evaluate_args.h +47 -15
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +171 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
- data/src/core/lib/security/context/security_context.cc +15 -11
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
- data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
- data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +9 -8
- data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
- data/src/core/lib/security/credentials/credentials.cc +16 -14
- data/src/core/lib/security/credentials/credentials.h +11 -5
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +404 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +81 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +20 -14
- data/src/core/lib/security/credentials/external/aws_request_signer.h +2 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +270 -54
- data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -12
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +8 -8
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -6
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +26 -26
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +13 -12
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +92 -31
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -7
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +34 -17
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +13 -5
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +15 -22
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
- data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
- data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +57 -66
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +11 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +10 -12
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +2 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +11 -10
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +2 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +12 -15
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +20 -21
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +382 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +74 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +5 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +2 -3
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +3 -2
- data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +123 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +209 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +14 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +20 -12
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +50 -17
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +35 -8
- data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +4 -4
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +23 -10
- data/src/core/lib/security/security_connector/security_connector.cc +12 -6
- data/src/core/lib/security/security_connector/security_connector.h +10 -5
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +24 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +41 -14
- data/src/core/lib/security/security_connector/ssl_utils.h +16 -23
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +156 -113
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +67 -52
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +27 -21
- data/src/core/lib/security/transport/secure_endpoint.cc +10 -20
- data/src/core/lib/security/transport/secure_endpoint.h +1 -0
- data/src/core/lib/security/transport/security_handshaker.cc +158 -90
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +20 -16
- data/src/core/lib/security/transport/tsi_error.cc +5 -6
- data/src/core/lib/security/transport/tsi_error.h +2 -1
- data/src/core/lib/security/util/json_util.cc +8 -10
- data/src/core/lib/security/util/json_util.h +1 -1
- data/src/core/lib/slice/percent_encoding.cc +73 -30
- data/src/core/lib/slice/percent_encoding.h +29 -28
- data/src/core/lib/slice/slice.cc +14 -21
- data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
- data/src/core/lib/slice/slice_buffer.cc +6 -7
- data/src/core/lib/slice/slice_intern.cc +19 -27
- data/src/core/lib/slice/slice_internal.h +4 -246
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/api_trace.cc +2 -1
- data/src/core/lib/surface/api_trace.h +1 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/lib/surface/builtins.h +26 -0
- data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
- data/src/core/lib/surface/call.cc +198 -186
- data/src/core/lib/surface/call.h +10 -5
- data/src/core/lib/surface/call_details.cc +10 -10
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/channel.cc +57 -51
- data/src/core/lib/surface/channel.h +19 -14
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/channel_ping.cc +2 -3
- data/src/core/lib/surface/channel_stack_type.cc +2 -1
- data/src/core/lib/surface/completion_queue.cc +140 -145
- data/src/core/lib/surface/completion_queue.h +18 -17
- data/src/core/lib/surface/completion_queue_factory.cc +3 -3
- data/src/core/lib/surface/completion_queue_factory.h +1 -0
- data/src/core/lib/surface/event_string.cc +1 -0
- data/src/core/lib/surface/init.cc +18 -65
- data/src/core/lib/surface/init.h +10 -2
- data/src/core/lib/surface/init_secure.cc +36 -14
- data/src/core/lib/surface/lame_client.cc +62 -61
- data/src/core/lib/surface/lame_client.h +5 -0
- data/src/core/lib/surface/metadata_array.cc +2 -2
- data/src/core/lib/surface/server.cc +167 -116
- data/src/core/lib/surface/server.h +140 -40
- data/src/core/lib/surface/validate_metadata.cc +55 -24
- data/src/core/lib/surface/validate_metadata.h +3 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.cc +5 -5
- data/src/core/lib/transport/byte_stream.h +9 -8
- data/src/core/lib/transport/connectivity_state.cc +9 -6
- data/src/core/lib/transport/connectivity_state.h +8 -6
- data/src/core/lib/transport/error_utils.cc +64 -27
- data/src/core/lib/transport/error_utils.h +13 -7
- data/src/core/lib/transport/metadata.cc +47 -22
- data/src/core/lib/transport/metadata.h +15 -12
- data/src/core/lib/transport/metadata_batch.cc +41 -339
- data/src/core/lib/transport/metadata_batch.h +932 -68
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +715 -847
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +5 -3
- data/src/core/lib/transport/transport.cc +8 -8
- data/src/core/lib/transport/transport.h +12 -10
- data/src/core/lib/transport/transport_op_string.cc +46 -26
- data/src/core/lib/uri/uri_parser.cc +131 -249
- data/src/core/lib/uri/uri_parser.h +57 -21
- data/src/core/plugin_registry/grpc_plugin_registry.cc +101 -44
- data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
- data/src/core/tsi/alts/crypt/gsec.cc +5 -4
- data/src/core/tsi/alts/crypt/gsec.h +5 -0
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +18 -17
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +27 -33
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +57 -51
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +6 -6
- data/src/core/tsi/fake_transport_security.cc +31 -12
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
- data/src/core/tsi/ssl_transport_security.cc +115 -77
- data/src/core/tsi/ssl_transport_security.h +12 -14
- data/src/core/tsi/transport_security.cc +21 -9
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_grpc.h +1 -0
- data/src/core/tsi/transport_security_interface.h +27 -1
- data/src/ruby/bin/math_services_pb.rb +1 -1
- data/src/ruby/ext/grpc/extconf.rb +21 -8
- data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
- data/src/ruby/ext/grpc/rb_call.c +5 -5
- data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
- data/src/ruby/ext/grpc/rb_channel.c +19 -8
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
- data/src/ruby/ext/grpc/rb_channel_credentials.c +15 -5
- data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
- data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
- data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
- data/src/ruby/ext/grpc/rb_grpc.c +9 -4
- data/src/ruby/ext/grpc/rb_grpc.h +1 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +24 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +50 -14
- data/src/ruby/ext/grpc/rb_server.c +19 -6
- data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
- data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
- 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/messages_pb.rb +35 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +23 -5
- data/src/ruby/spec/call_spec.rb +1 -1
- data/src/ruby/spec/channel_credentials_spec.rb +32 -0
- data/src/ruby/spec/channel_spec.rb +17 -6
- data/src/ruby/spec/client_auth_spec.rb +27 -1
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/src/ruby/spec/errors_spec.rb +1 -1
- data/src/ruby/spec/generic/active_call_spec.rb +2 -2
- data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
- data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
- data/src/ruby/spec/server_credentials_spec.rb +25 -0
- data/src/ruby/spec/server_spec.rb +22 -0
- 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 +9 -6
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +54 -48
- 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/flat_hash_map.h +606 -0
- 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_map.h +197 -0
- 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 +396 -0
- 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.cc +71 -0
- data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
- 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/graphcycles.cc +1 -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/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/err_data.c +756 -724
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +55 -50
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +26 -24
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +16 -16
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +196 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +35 -86
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +326 -281
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
- data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
- 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 +101 -3
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
- data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
- data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
- data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +15 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +32 -16
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
- 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 +87 -160
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
- 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 +56 -72
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
- 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/gcm_nohw.c +1 -1
- 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/internal.h +30 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +65 -41
- 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 +161 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +400 -325
- data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
- data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
- data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +28 -9
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +95 -48
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/is_fips.c → rand_extra/passive.c} +16 -11
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
- data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
- data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +345 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +4 -31
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +26 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +61 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +15 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +50 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +23 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +28 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +26 -25
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -12
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +27 -36
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +69 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1026 -615
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -176
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +63 -13
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
- data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +23 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +33 -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 +38 -51
- 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/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
- data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +33 -8
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +9 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +104 -63
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +406 -108
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +48 -36
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1425 -377
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +188 -49
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
- data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
- data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +847 -622
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +92 -44
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +314 -217
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +177 -35
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +491 -152
- data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -2
- data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +60 -112
- data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +136 -104
- data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
- data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +7 -3
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
- data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +160 -91
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +269 -118
- data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- data/third_party/upb/upb/decode.c +354 -204
- data/third_party/upb/upb/decode.h +50 -3
- data/third_party/upb/upb/decode_fast.c +1053 -0
- data/third_party/upb/upb/decode_fast.h +153 -0
- data/third_party/upb/upb/decode_internal.h +193 -0
- data/third_party/upb/upb/def.c +609 -610
- data/third_party/upb/upb/def.h +57 -50
- data/third_party/upb/upb/def.hpp +66 -123
- data/third_party/upb/upb/encode.c +267 -176
- data/third_party/upb/upb/encode.h +56 -4
- data/third_party/upb/upb/msg.c +304 -84
- data/third_party/upb/upb/msg.h +76 -441
- data/third_party/upb/upb/msg_internal.h +687 -0
- data/third_party/upb/upb/port_def.inc +156 -82
- data/third_party/upb/upb/port_undef.inc +41 -8
- data/third_party/upb/upb/reflection.c +64 -55
- data/third_party/upb/upb/reflection.h +36 -8
- data/third_party/upb/upb/reflection.hpp +37 -0
- data/third_party/upb/upb/table.c +238 -276
- data/third_party/upb/upb/{table.int.h → table_internal.h} +66 -181
- data/third_party/upb/upb/text_encode.c +77 -26
- data/third_party/upb/upb/text_encode.h +30 -1
- data/third_party/upb/upb/upb.c +75 -47
- data/third_party/upb/upb/upb.h +72 -13
- data/third_party/upb/upb/upb.hpp +28 -4
- data/third_party/upb/upb/upb_internal.h +58 -0
- data/third_party/xxhash/xxhash.h +5325 -0
- metadata +287 -137
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +0 -28
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -53
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -129
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -77
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -85
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -160
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -84
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -117
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
- data/src/core/lib/gpr/arena.h +0 -47
- data/src/core/lib/gpr/tls_gcc.h +0 -52
- data/src/core/lib/gpr/tls_msvc.h +0 -54
- data/src/core/lib/gpr/tls_pthread.h +0 -56
- data/src/core/lib/gpr/tls_stdcpp.h +0 -48
- data/src/core/lib/gprpp/atomic.h +0 -104
- data/src/core/lib/gprpp/map.h +0 -53
- data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
- data/src/core/lib/iomgr/iomgr_posix.h +0 -26
- data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
- data/src/core/lib/iomgr/pollset_uv.cc +0 -93
- data/src/core/lib/iomgr/pollset_uv.h +0 -32
- data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
- data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
- data/src/core/lib/iomgr/tcp_uv.cc +0 -419
- data/src/core/lib/iomgr/timer_uv.cc +0 -66
- data/src/core/lib/iomgr/udp_server.cc +0 -748
- data/src/core/lib/iomgr/udp_server.h +0 -104
- data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
- data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
- data/src/core/lib/transport/authority_override.cc +0 -38
- data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +0 -504
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
- data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -237
- data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
- data/third_party/upb/upb/port.c +0 -26
@@ -19,7 +19,6 @@
|
|
19
19
|
#include <grpc/support/port_platform.h>
|
20
20
|
|
21
21
|
#include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
|
22
|
-
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
23
22
|
|
24
23
|
#include <assert.h>
|
25
24
|
#include <stddef.h>
|
@@ -32,206 +31,27 @@
|
|
32
31
|
#include <grpc/support/log.h>
|
33
32
|
|
34
33
|
#include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
|
34
|
+
#include "src/core/ext/transport/chttp2/transport/internal.h"
|
35
35
|
#include "src/core/lib/debug/stats.h"
|
36
36
|
#include "src/core/lib/gpr/string.h"
|
37
|
+
#include "src/core/lib/gprpp/match.h"
|
37
38
|
#include "src/core/lib/profiling/timers.h"
|
38
39
|
#include "src/core/lib/slice/slice_internal.h"
|
39
40
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
40
41
|
#include "src/core/lib/surface/validate_metadata.h"
|
41
42
|
#include "src/core/lib/transport/http2_errors.h"
|
42
43
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
/* How parsing works:
|
56
|
-
|
57
|
-
The parser object keeps track of a function pointer which represents the
|
58
|
-
current parse state.
|
59
|
-
|
60
|
-
Each time new bytes are presented, we call into the current state, which
|
61
|
-
recursively parses until all bytes in the given chunk are exhausted.
|
62
|
-
|
63
|
-
The parse state that terminates then saves its function pointer to be the
|
64
|
-
current state so that it can resume when more bytes are available.
|
65
|
-
|
66
|
-
It's expected that most optimizing compilers will turn this code into
|
67
|
-
a set of indirect jumps, and so not waste stack space. */
|
68
|
-
|
69
|
-
/* forward declarations for parsing states */
|
70
|
-
static grpc_error* parse_begin(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
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,
|
75
|
-
const uint8_t* cur, const uint8_t* end);
|
76
|
-
static grpc_error* parse_illegal_op(grpc_chttp2_hpack_parser* p,
|
77
|
-
const uint8_t* cur, const uint8_t* end);
|
78
|
-
|
79
|
-
static grpc_error* parse_string_prefix(grpc_chttp2_hpack_parser* p,
|
80
|
-
const uint8_t* cur, const uint8_t* end);
|
81
|
-
static grpc_error* parse_key_string(grpc_chttp2_hpack_parser* p,
|
82
|
-
const uint8_t* cur, const uint8_t* end);
|
83
|
-
static grpc_error* parse_value_string_with_indexed_key(
|
84
|
-
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end);
|
85
|
-
static grpc_error* parse_value_string_with_literal_key(
|
86
|
-
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end);
|
87
|
-
|
88
|
-
static grpc_error* parse_value0(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
89
|
-
const uint8_t* end);
|
90
|
-
static grpc_error* parse_value1(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
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,
|
131
|
-
const uint8_t* cur, const uint8_t* end);
|
132
|
-
static grpc_error* parse_max_tbl_size_x(grpc_chttp2_hpack_parser* p,
|
133
|
-
const uint8_t* cur, const uint8_t* end);
|
134
|
-
|
135
|
-
/* we translate the first byte of a hpack field into one of these decoding
|
136
|
-
cases, then use a lookup table to jump directly to the appropriate parser.
|
137
|
-
|
138
|
-
_X => the integer index is all ones, meaning we need to do varint decoding
|
139
|
-
_V => the integer index is all zeros, meaning we need to decode an additional
|
140
|
-
string value */
|
141
|
-
typedef enum {
|
142
|
-
INDEXED_FIELD,
|
143
|
-
INDEXED_FIELD_X,
|
144
|
-
LITHDR_INCIDX,
|
145
|
-
LITHDR_INCIDX_X,
|
146
|
-
LITHDR_INCIDX_V,
|
147
|
-
LITHDR_NOTIDX,
|
148
|
-
LITHDR_NOTIDX_X,
|
149
|
-
LITHDR_NOTIDX_V,
|
150
|
-
LITHDR_NVRIDX,
|
151
|
-
LITHDR_NVRIDX_X,
|
152
|
-
LITHDR_NVRIDX_V,
|
153
|
-
MAX_TBL_SIZE,
|
154
|
-
MAX_TBL_SIZE_X,
|
155
|
-
ILLEGAL
|
156
|
-
} first_byte_type;
|
157
|
-
|
158
|
-
/* jump table of parse state functions -- order must match first_byte_type
|
159
|
-
above */
|
160
|
-
static const grpc_chttp2_hpack_parser_state first_byte_action[] = {
|
161
|
-
parse_indexed_field, parse_indexed_field_x, parse_lithdr_incidx,
|
162
|
-
parse_lithdr_incidx_x, parse_lithdr_incidx_v, parse_lithdr_notidx,
|
163
|
-
parse_lithdr_notidx_x, parse_lithdr_notidx_v, parse_lithdr_nvridx,
|
164
|
-
parse_lithdr_nvridx_x, parse_lithdr_nvridx_v, parse_max_tbl_size,
|
165
|
-
parse_max_tbl_size_x, parse_illegal_op};
|
166
|
-
|
167
|
-
/* indexes the first byte to a parse state function - generated by
|
168
|
-
gen_hpack_tables.c */
|
169
|
-
static const uint8_t first_byte_lut[256] = {
|
170
|
-
LITHDR_NOTIDX_V, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
|
171
|
-
LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
|
172
|
-
LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
|
173
|
-
LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX_X,
|
174
|
-
LITHDR_NVRIDX_V, LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX,
|
175
|
-
LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX,
|
176
|
-
LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX,
|
177
|
-
LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX, LITHDR_NVRIDX_X,
|
178
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
179
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
180
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
181
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
182
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
183
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
184
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE,
|
185
|
-
MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE, MAX_TBL_SIZE_X,
|
186
|
-
LITHDR_INCIDX_V, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
187
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
188
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
189
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
190
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
191
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
192
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
193
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
194
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
195
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
196
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
197
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
198
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
199
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
200
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX,
|
201
|
-
LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX, LITHDR_INCIDX_X,
|
202
|
-
ILLEGAL, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
203
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
204
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
205
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
206
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
207
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
208
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
209
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
210
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
211
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
212
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
213
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
214
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
215
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
216
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
217
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
218
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
219
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
220
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
221
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
222
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
223
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
224
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
225
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
226
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
227
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
228
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
229
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
230
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
231
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
232
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD,
|
233
|
-
INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD, INDEXED_FIELD_X,
|
234
|
-
};
|
44
|
+
#if __cplusplus > 201103L
|
45
|
+
#define GRPC_HPACK_CONSTEXPR_FN constexpr
|
46
|
+
#define GRPC_HPACK_CONSTEXPR_VALUE constexpr
|
47
|
+
#else
|
48
|
+
#define GRPC_HPACK_CONSTEXPR_FN
|
49
|
+
#define GRPC_HPACK_CONSTEXPR_VALUE const
|
50
|
+
#endif
|
51
|
+
|
52
|
+
namespace grpc_core {
|
53
|
+
|
54
|
+
TraceFlag grpc_trace_chttp2_hpack_parser(false, "chttp2_hpack_parser");
|
235
55
|
|
236
56
|
/* state table for huffman decoding: given a state, gives an index/16 into
|
237
57
|
next_sub_tbl. Taking that index and adding the value of the nibble being
|
@@ -606,1062 +426,943 @@ static const int16_t emit_sub_tbl[249 * 16] = {
|
|
606
426
|
13, 22, 22, 22, 22, 256, 256, 256, 256,
|
607
427
|
};
|
608
428
|
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
429
|
+
namespace {
|
430
|
+
// The alphabet used for base64 encoding binary metadata.
|
431
|
+
static constexpr char kBase64Alphabet[] =
|
432
|
+
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
433
|
+
|
434
|
+
// An inverted table: for each value in kBase64Alphabet, table contains the
|
435
|
+
// index with which it's stored, so we can quickly invert the encoding without
|
436
|
+
// any complicated runtime logic.
|
437
|
+
struct Base64InverseTable {
|
438
|
+
uint8_t table[256]{};
|
439
|
+
GRPC_HPACK_CONSTEXPR_FN Base64InverseTable() {
|
440
|
+
for (int i = 0; i < 256; i++) {
|
441
|
+
table[i] = 255;
|
442
|
+
}
|
443
|
+
for (const char* p = kBase64Alphabet; *p; p++) {
|
444
|
+
uint8_t idx = *p;
|
445
|
+
uint8_t ofs = p - kBase64Alphabet;
|
446
|
+
table[idx] = ofs;
|
447
|
+
}
|
448
|
+
}
|
628
449
|
};
|
629
450
|
|
630
|
-
static
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
451
|
+
static GRPC_HPACK_CONSTEXPR_VALUE Base64InverseTable kBase64InverseTable;
|
452
|
+
} // namespace
|
453
|
+
|
454
|
+
// Input tracks the current byte through the input data and provides it
|
455
|
+
// via a simple stream interface.
|
456
|
+
class HPackParser::Input {
|
457
|
+
public:
|
458
|
+
Input(grpc_slice_refcount* current_slice_refcount, const uint8_t* begin,
|
459
|
+
const uint8_t* end)
|
460
|
+
: current_slice_refcount_(current_slice_refcount),
|
461
|
+
begin_(begin),
|
462
|
+
end_(end),
|
463
|
+
frontier_(begin) {}
|
464
|
+
|
465
|
+
// If input is backed by a slice, retrieve its refcount. If not, return
|
466
|
+
// nullptr.
|
467
|
+
grpc_slice_refcount* slice_refcount() { return current_slice_refcount_; }
|
468
|
+
|
469
|
+
// Have we reached the end of input?
|
470
|
+
bool end_of_stream() const { return begin_ == end_; }
|
471
|
+
// How many bytes until end of input
|
472
|
+
size_t remaining() const { return end_ - begin_; }
|
473
|
+
// Current position, as a pointer
|
474
|
+
const uint8_t* cur_ptr() const { return begin_; }
|
475
|
+
// End position, as a pointer
|
476
|
+
const uint8_t* end_ptr() const { return end_; }
|
477
|
+
// Move read position forward by n, unchecked
|
478
|
+
void Advance(size_t n) { begin_ += n; }
|
479
|
+
|
480
|
+
// Retrieve the current character, or nullopt if end of stream
|
481
|
+
// Do not advance
|
482
|
+
absl::optional<uint8_t> peek() const {
|
483
|
+
if (end_of_stream()) {
|
484
|
+
return {};
|
485
|
+
}
|
486
|
+
return *begin_;
|
637
487
|
}
|
638
|
-
gpr_log(
|
639
|
-
GPR_INFO,
|
640
|
-
"Decode: '%s: %s', elem_interned=%d [%d], k_interned=%d, v_interned=%d",
|
641
|
-
k, v, GRPC_MDELEM_IS_INTERNED(md), GRPC_MDELEM_STORAGE(md),
|
642
|
-
grpc_slice_is_interned(GRPC_MDKEY(md)),
|
643
|
-
grpc_slice_is_interned(GRPC_MDVALUE(md)));
|
644
|
-
gpr_free(k);
|
645
|
-
gpr_free(v);
|
646
|
-
}
|
647
488
|
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
GPR_DEBUG_ASSERT(GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_INTERNED ||
|
656
|
-
GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC);
|
657
|
-
grpc_error* err = grpc_chttp2_hptbl_add(&p->table, md);
|
658
|
-
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
|
489
|
+
// Retrieve and advance past the current character, or return nullopt if end
|
490
|
+
// of stream
|
491
|
+
absl::optional<uint8_t> Next() {
|
492
|
+
if (end_of_stream()) {
|
493
|
+
return UnexpectedEOF(absl::optional<uint8_t>());
|
494
|
+
}
|
495
|
+
return *begin_++;
|
659
496
|
}
|
660
|
-
return p->on_header(p->on_header_user_data, md);
|
661
|
-
}
|
662
497
|
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
498
|
+
// Helper to parse a varint delta on top of value, return nullopt on failure
|
499
|
+
// (setting error)
|
500
|
+
absl::optional<uint32_t> ParseVarint(uint32_t value) {
|
501
|
+
// TODO(ctiller): break out a variant of this when we know there are at
|
502
|
+
// least 5 bytes in input_
|
503
|
+
auto cur = Next();
|
504
|
+
if (!cur) return {};
|
505
|
+
value += *cur & 0x7f;
|
506
|
+
if ((*cur & 0x80) == 0) return value;
|
507
|
+
|
508
|
+
cur = Next();
|
509
|
+
if (!cur) return {};
|
510
|
+
value += (*cur & 0x7f) << 7;
|
511
|
+
if ((*cur & 0x80) == 0) return value;
|
512
|
+
|
513
|
+
cur = Next();
|
514
|
+
if (!cur) return {};
|
515
|
+
value += (*cur & 0x7f) << 14;
|
516
|
+
if ((*cur & 0x80) == 0) return value;
|
517
|
+
|
518
|
+
cur = Next();
|
519
|
+
if (!cur) return {};
|
520
|
+
value += (*cur & 0x7f) << 21;
|
521
|
+
if ((*cur & 0x80) == 0) return value;
|
522
|
+
|
523
|
+
cur = Next();
|
524
|
+
if (!cur) return {};
|
525
|
+
uint32_t c = (*cur) & 0x7f;
|
526
|
+
// We might overflow here, so we need to be a little careful about the
|
527
|
+
// addition
|
528
|
+
if (c > 0xf) return ParseVarintOutOfRange(value, *cur);
|
529
|
+
const uint32_t add = c << 28;
|
530
|
+
if (add > 0xffffffffu - value) {
|
531
|
+
return ParseVarintOutOfRange(value, *cur);
|
532
|
+
}
|
533
|
+
value += add;
|
534
|
+
if ((*cur & 0x80) == 0) return value;
|
535
|
+
|
536
|
+
// Spec weirdness: we can add an infinite stream of 0x80 at the end of a
|
537
|
+
// varint and still end up with a correctly encoded varint.
|
538
|
+
do {
|
539
|
+
cur = Next();
|
540
|
+
if (!cur.has_value()) return {};
|
541
|
+
} while (*cur == 0x80);
|
542
|
+
|
543
|
+
// BUT... the last byte needs to be 0x00 or we'll overflow dramatically!
|
544
|
+
if (*cur == 0) return value;
|
545
|
+
return ParseVarintOutOfRange(value, *cur);
|
674
546
|
}
|
675
|
-
str->data.copied.length = 0;
|
676
|
-
return s;
|
677
|
-
}
|
678
547
|
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
548
|
+
// Prefix for a string
|
549
|
+
struct StringPrefix {
|
550
|
+
// Number of bytes in input for string
|
551
|
+
uint32_t length;
|
552
|
+
// Is it huffman compressed
|
553
|
+
bool huff;
|
554
|
+
};
|
555
|
+
|
556
|
+
// Parse a string prefix
|
557
|
+
absl::optional<StringPrefix> ParseStringPrefix() {
|
558
|
+
auto cur = Next();
|
559
|
+
if (!cur.has_value()) return {};
|
560
|
+
// Huffman if the top bit is 1
|
561
|
+
const bool huff = (*cur & 0x80) != 0;
|
562
|
+
// String length
|
563
|
+
uint32_t strlen = (*cur & 0x7f);
|
564
|
+
if (strlen == 0x7f) {
|
565
|
+
// all ones ==> varint string length
|
566
|
+
auto v = ParseVarint(0x7f);
|
567
|
+
if (!v.has_value()) return {};
|
568
|
+
strlen = *v;
|
569
|
+
}
|
570
|
+
return StringPrefix{strlen, huff};
|
690
571
|
}
|
691
|
-
str->data.copied.length = 0;
|
692
|
-
return s;
|
693
|
-
}
|
694
572
|
|
695
|
-
|
696
|
-
|
697
|
-
const uint8_t* end) {
|
698
|
-
p->state = *p->next_state++;
|
699
|
-
return p->state(p, cur, end);
|
700
|
-
}
|
573
|
+
// Check if we saw an EOF.. must be verified before looking at TakeError
|
574
|
+
bool eof_error() const { return eof_error_; }
|
701
575
|
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
p->state = parse_begin;
|
708
|
-
return GRPC_ERROR_NONE;
|
576
|
+
// Extract the parse error, leaving the current error as NONE.
|
577
|
+
grpc_error_handle TakeError() {
|
578
|
+
grpc_error_handle out = error_;
|
579
|
+
error_ = GRPC_ERROR_NONE;
|
580
|
+
return out;
|
709
581
|
}
|
710
582
|
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
583
|
+
// Set the current error - allows the rest of the code not to need to pass
|
584
|
+
// around StatusOr<> which would be prohibitive here.
|
585
|
+
GPR_ATTRIBUTE_NOINLINE void SetError(grpc_error_handle error) {
|
586
|
+
if (error_ != GRPC_ERROR_NONE || eof_error_) {
|
587
|
+
GRPC_ERROR_UNREF(error);
|
588
|
+
return;
|
589
|
+
}
|
590
|
+
error_ = error;
|
591
|
+
begin_ = end_;
|
720
592
|
}
|
721
593
|
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
594
|
+
// If no error is set, set it to the value produced by error_factory.
|
595
|
+
// Return return_value unchanged.
|
596
|
+
template <typename F, typename T>
|
597
|
+
GPR_ATTRIBUTE_NOINLINE T MaybeSetErrorAndReturn(F error_factory,
|
598
|
+
T return_value) {
|
599
|
+
if (error_ != GRPC_ERROR_NONE || eof_error_) return return_value;
|
600
|
+
error_ = error_factory();
|
601
|
+
begin_ = end_;
|
602
|
+
return return_value;
|
730
603
|
}
|
731
604
|
|
732
|
-
return
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
return GRPC_ERROR_NONE;
|
605
|
+
// Set the error to an unexpected eof, and return result (code golfed as this
|
606
|
+
// is a common case)
|
607
|
+
template <typename T>
|
608
|
+
T UnexpectedEOF(T return_value) {
|
609
|
+
if (error_ != GRPC_ERROR_NONE) return return_value;
|
610
|
+
eof_error_ = true;
|
611
|
+
return return_value;
|
740
612
|
}
|
741
613
|
|
742
|
-
|
743
|
-
}
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
614
|
+
// Update the frontier - signifies we've successfully parsed another element
|
615
|
+
void UpdateFrontier() { frontier_ = begin_; }
|
616
|
+
|
617
|
+
// Get the frontier - for buffering should we fail due to eof
|
618
|
+
const uint8_t* frontier() const { return frontier_; }
|
619
|
+
|
620
|
+
private:
|
621
|
+
// Helper to set the error to out of range for ParseVarint
|
622
|
+
absl::optional<uint32_t> ParseVarintOutOfRange(uint32_t value,
|
623
|
+
uint8_t last_byte) {
|
624
|
+
return MaybeSetErrorAndReturn(
|
625
|
+
[value, last_byte] {
|
626
|
+
return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
|
627
|
+
"integer overflow in hpack integer decoding: have 0x%08x, "
|
628
|
+
"got byte 0x%02x on byte 5",
|
629
|
+
value, last_byte));
|
630
|
+
},
|
631
|
+
absl::optional<uint32_t>());
|
750
632
|
}
|
751
633
|
|
752
|
-
|
753
|
-
|
634
|
+
// Refcount if we are backed by a slice
|
635
|
+
grpc_slice_refcount* current_slice_refcount_;
|
636
|
+
// Current input point
|
637
|
+
const uint8_t* begin_;
|
638
|
+
// End of stream point
|
639
|
+
const uint8_t* const end_;
|
640
|
+
// Frontier denotes the first byte past successfully processed input
|
641
|
+
const uint8_t* frontier_;
|
642
|
+
// Current error
|
643
|
+
grpc_error_handle error_ = GRPC_ERROR_NONE;
|
644
|
+
// If the error was EOF, we flag it here..
|
645
|
+
bool eof_error_ = false;
|
646
|
+
};
|
754
647
|
|
755
|
-
|
756
|
-
|
757
|
-
|
758
|
-
|
759
|
-
|
648
|
+
// Helper to parse a string and turn it into a slice with appropriate memory
|
649
|
+
// management characteristics
|
650
|
+
class HPackParser::String {
|
651
|
+
public:
|
652
|
+
// Helper to specify a string should be internalized
|
653
|
+
struct Intern {};
|
654
|
+
// Helper to specify a string should be externalized
|
655
|
+
struct Extern {};
|
656
|
+
|
657
|
+
private:
|
658
|
+
// Forward declare take functions... we'll need them in the public interface
|
659
|
+
UnmanagedMemorySlice Take(Extern);
|
660
|
+
ManagedMemorySlice Take(Intern);
|
661
|
+
|
662
|
+
public:
|
663
|
+
// If a String is a Slice then unref
|
664
|
+
~String() {
|
665
|
+
if (auto* p = absl::get_if<grpc_slice>(&value_)) {
|
666
|
+
grpc_slice_unref_internal(*p);
|
667
|
+
}
|
760
668
|
}
|
761
669
|
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
grpc_error_set_int(
|
769
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid HPACK index received"),
|
770
|
-
GRPC_ERROR_INT_INDEX, static_cast<intptr_t>(p->index)),
|
771
|
-
GRPC_ERROR_INT_SIZE, static_cast<intptr_t>(p->table.num_ents));
|
772
|
-
}
|
670
|
+
// Take the value and leave this empty
|
671
|
+
// Use Intern/Extern to choose memory management
|
672
|
+
template <typename T>
|
673
|
+
auto Take() -> decltype(this->Take(T())) {
|
674
|
+
return Take(T());
|
675
|
+
}
|
773
676
|
|
774
|
-
|
775
|
-
|
776
|
-
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
677
|
+
String(const String&) = delete;
|
678
|
+
String& operator=(const String&) = delete;
|
679
|
+
String(String&& other) noexcept : value_(std::move(other.value_)) {
|
680
|
+
other.value_ = absl::Span<const uint8_t>();
|
681
|
+
}
|
682
|
+
String& operator=(String&& other) noexcept {
|
683
|
+
value_ = std::move(other.value_);
|
684
|
+
other.value_ = absl::Span<const uint8_t>();
|
685
|
+
return *this;
|
781
686
|
}
|
782
|
-
GRPC_STATS_INC_HPACK_RECV_INDEXED();
|
783
|
-
grpc_error* err = on_hdr<false>(p, md);
|
784
|
-
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) return err;
|
785
|
-
return parse_begin(p, cur, end);
|
786
|
-
}
|
787
687
|
|
788
|
-
|
789
|
-
static
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
688
|
+
// Parse a non-binary string
|
689
|
+
static absl::optional<String> Parse(Input* input) {
|
690
|
+
auto pfx = input->ParseStringPrefix();
|
691
|
+
if (!pfx.has_value()) return {};
|
692
|
+
if (pfx->huff) {
|
693
|
+
// Huffman coded
|
694
|
+
std::vector<uint8_t> output;
|
695
|
+
auto v = ParseHuff(input, pfx->length,
|
696
|
+
[&output](uint8_t c) { output.push_back(c); });
|
697
|
+
if (!v) return {};
|
698
|
+
return String(std::move(output));
|
699
|
+
}
|
700
|
+
return ParseUncompressed(input, pfx->length);
|
701
|
+
}
|
796
702
|
|
797
|
-
|
798
|
-
static
|
799
|
-
|
800
|
-
|
801
|
-
|
802
|
-
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
}
|
703
|
+
// Parse a binary string
|
704
|
+
static absl::optional<String> ParseBinary(Input* input) {
|
705
|
+
auto pfx = input->ParseStringPrefix();
|
706
|
+
if (!pfx.has_value()) return {};
|
707
|
+
if (!pfx->huff) {
|
708
|
+
if (pfx->length > 0 && input->peek() == 0) {
|
709
|
+
// 'true-binary'
|
710
|
+
input->Advance(1);
|
711
|
+
return ParseUncompressed(input, pfx->length - 1);
|
712
|
+
}
|
713
|
+
// Base64 encoded... pull out the string, then unbase64 it
|
714
|
+
auto base64 = ParseUncompressed(input, pfx->length);
|
715
|
+
if (!base64.has_value()) return {};
|
716
|
+
return Unbase64(input, std::move(*base64));
|
717
|
+
} else {
|
718
|
+
// Huffman encoded...
|
719
|
+
std::vector<uint8_t> decompressed;
|
720
|
+
// State here says either we don't know if it's base64 or binary, or we do
|
721
|
+
// and what is it.
|
722
|
+
enum class State { kUnsure, kBinary, kBase64 };
|
723
|
+
State state = State::kUnsure;
|
724
|
+
auto decompressed_ok =
|
725
|
+
ParseHuff(input, pfx->length, [&state, &decompressed](uint8_t c) {
|
726
|
+
if (state == State::kUnsure) {
|
727
|
+
// First byte... if it's zero it's binary
|
728
|
+
if (c == 0) {
|
729
|
+
// Save the type, and skip the zero
|
730
|
+
state = State::kBinary;
|
731
|
+
return;
|
732
|
+
} else {
|
733
|
+
// Flag base64, store this value
|
734
|
+
state = State::kBase64;
|
735
|
+
}
|
736
|
+
}
|
737
|
+
// Non-first byte, or base64 first byte
|
738
|
+
decompressed.push_back(c);
|
739
|
+
});
|
740
|
+
if (!decompressed_ok) return {};
|
741
|
+
switch (state) {
|
742
|
+
case State::kUnsure:
|
743
|
+
// No bytes, empty span
|
744
|
+
return String(absl::Span<const uint8_t>());
|
745
|
+
case State::kBinary:
|
746
|
+
// Binary, we're done
|
747
|
+
return String(std::move(decompressed));
|
748
|
+
case State::kBase64:
|
749
|
+
// Base64 - unpack it
|
750
|
+
return Unbase64(input, String(std::move(decompressed)));
|
751
|
+
}
|
752
|
+
GPR_UNREACHABLE_CODE(abort(););
|
753
|
+
}
|
754
|
+
}
|
810
755
|
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
grpc_mdelem md = p->md_for_index;
|
818
|
-
GPR_DEBUG_ASSERT(!GRPC_MDISNULL(md)); /* handled in string parsing */
|
819
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
820
|
-
#ifndef NDEBUG
|
821
|
-
p->precomputed_md_index = -1;
|
822
|
-
#endif
|
823
|
-
return md;
|
824
|
-
}
|
756
|
+
private:
|
757
|
+
void AppendBytes(const uint8_t* data, size_t length);
|
758
|
+
explicit String(std::vector<uint8_t> v) : value_(std::move(v)) {}
|
759
|
+
explicit String(absl::Span<const uint8_t> v) : value_(v) {}
|
760
|
+
String(grpc_slice_refcount* r, const uint8_t* begin, const uint8_t* end)
|
761
|
+
: value_(MakeSlice(r, begin, end)) {}
|
825
762
|
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
763
|
+
// Given a refcount and a byte range, make a slice
|
764
|
+
static grpc_slice MakeSlice(grpc_slice_refcount* r, const uint8_t* begin,
|
765
|
+
const uint8_t* end) {
|
766
|
+
grpc_slice out;
|
767
|
+
out.refcount = r;
|
768
|
+
r->Ref();
|
769
|
+
out.data.refcounted.bytes = const_cast<uint8_t*>(begin);
|
770
|
+
out.data.refcounted.length = end - begin;
|
771
|
+
return out;
|
772
|
+
}
|
831
773
|
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
843
|
-
|
774
|
+
// Parse some huffman encoded bytes, using output(uint8_t b) to emit each
|
775
|
+
// decoded byte.
|
776
|
+
template <typename Out>
|
777
|
+
static bool ParseHuff(Input* input, uint32_t length, Out output) {
|
778
|
+
GRPC_STATS_INC_HPACK_RECV_HUFFMAN();
|
779
|
+
int16_t state = 0;
|
780
|
+
// Parse one half byte... we leverage some lookup tables to keep the logic
|
781
|
+
// here really simple.
|
782
|
+
auto nibble = [&output, &state](uint8_t nibble) {
|
783
|
+
int16_t emit = emit_sub_tbl[16 * emit_tbl[state] + nibble];
|
784
|
+
int16_t next = next_sub_tbl[16 * next_tbl[state] + nibble];
|
785
|
+
if (emit != -1) {
|
786
|
+
if (emit >= 0 && emit < 256) {
|
787
|
+
output(static_cast<uint8_t>(emit));
|
788
|
+
} else {
|
789
|
+
assert(emit == 256);
|
790
|
+
}
|
791
|
+
}
|
792
|
+
state = next;
|
793
|
+
};
|
794
|
+
// If there's insufficient bytes remaining, return now.
|
795
|
+
if (input->remaining() < length) {
|
796
|
+
return input->UnexpectedEOF(false);
|
797
|
+
}
|
798
|
+
// Grab the byte range, and iterate through it.
|
799
|
+
const uint8_t* p = input->cur_ptr();
|
800
|
+
input->Advance(length);
|
801
|
+
for (uint32_t i = 0; i < length; i++) {
|
802
|
+
nibble(p[i] >> 4);
|
803
|
+
nibble(p[i] & 0xf);
|
804
|
+
}
|
805
|
+
return true;
|
806
|
+
}
|
844
807
|
|
845
|
-
|
846
|
-
static
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
808
|
+
// Parse some uncompressed string bytes.
|
809
|
+
static absl::optional<String> ParseUncompressed(Input* input,
|
810
|
+
uint32_t length) {
|
811
|
+
GRPC_STATS_INC_HPACK_RECV_UNCOMPRESSED();
|
812
|
+
// Check there's enough bytes
|
813
|
+
if (input->remaining() < length) {
|
814
|
+
return input->UnexpectedEOF(absl::optional<String>());
|
815
|
+
}
|
816
|
+
auto* refcount = input->slice_refcount();
|
817
|
+
auto* p = input->cur_ptr();
|
818
|
+
input->Advance(length);
|
819
|
+
if (refcount != nullptr) {
|
820
|
+
return String(refcount, p, p + length);
|
821
|
+
} else {
|
822
|
+
return String(absl::Span<const uint8_t>(p, length));
|
823
|
+
}
|
824
|
+
}
|
856
825
|
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
|
865
|
-
|
866
|
-
|
867
|
-
|
826
|
+
// Turn base64 encoded bytes into not base64 encoded bytes.
|
827
|
+
// Only takes input to set an error on failure.
|
828
|
+
static absl::optional<String> Unbase64(Input* input, String s) {
|
829
|
+
auto v = Match(
|
830
|
+
s.value_,
|
831
|
+
[](const grpc_slice& slice) {
|
832
|
+
return Unbase64Loop(GRPC_SLICE_START_PTR(slice),
|
833
|
+
GRPC_SLICE_END_PTR(slice));
|
834
|
+
},
|
835
|
+
[](absl::Span<const uint8_t> span) {
|
836
|
+
return Unbase64Loop(span.begin(), span.end());
|
837
|
+
},
|
838
|
+
[](const std::vector<uint8_t>& vec) {
|
839
|
+
return Unbase64Loop(vec.data(), vec.data() + vec.size());
|
840
|
+
});
|
841
|
+
if (!v.has_value()) {
|
842
|
+
return input->MaybeSetErrorAndReturn(
|
843
|
+
[] {
|
844
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
845
|
+
"illegal base64 encoding");
|
846
|
+
},
|
847
|
+
absl::optional<String>());
|
848
|
+
}
|
849
|
+
return String(std::move(*v));
|
850
|
+
}
|
868
851
|
|
869
|
-
|
870
|
-
static
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
|
875
|
-
finish_lithdr_incidx};
|
876
|
-
p->dynamic_table_update_allowed = 0;
|
877
|
-
p->next_state = and_then;
|
878
|
-
p->index = 0x3f;
|
879
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
880
|
-
p->parsing.value = &p->index;
|
881
|
-
return parse_value0(p, cur + 1, end);
|
882
|
-
}
|
852
|
+
// Main loop for Unbase64
|
853
|
+
static absl::optional<std::vector<uint8_t>> Unbase64Loop(const uint8_t* cur,
|
854
|
+
const uint8_t* end) {
|
855
|
+
while (cur != end && end[-1] == '=') {
|
856
|
+
--end;
|
857
|
+
}
|
883
858
|
|
884
|
-
|
885
|
-
|
886
|
-
const uint8_t* cur,
|
887
|
-
const uint8_t* end) {
|
888
|
-
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
889
|
-
parse_key_string, parse_string_prefix,
|
890
|
-
parse_value_string_with_literal_key, finish_lithdr_incidx_v};
|
891
|
-
p->dynamic_table_update_allowed = 0;
|
892
|
-
p->next_state = and_then;
|
893
|
-
return parse_string_prefix(p, cur + 1, end);
|
894
|
-
}
|
859
|
+
std::vector<uint8_t> out;
|
860
|
+
out.reserve(3 * (end - cur) / 4 + 3);
|
895
861
|
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
grpc_error* err = on_hdr<false>(
|
903
|
-
p, grpc_mdelem_from_slices(get_indexed_key(md),
|
904
|
-
take_string_extern(p, &p->value)));
|
905
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
906
|
-
return parse_begin(p, cur, end);
|
907
|
-
}
|
862
|
+
// Decode 4 bytes at a time while we can
|
863
|
+
while (end - cur >= 4) {
|
864
|
+
uint32_t bits = kBase64InverseTable.table[*cur];
|
865
|
+
if (bits > 63) return {};
|
866
|
+
uint32_t buffer = bits << 18;
|
867
|
+
++cur;
|
908
868
|
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
GRPC_STATS_INC_HPACK_RECV_LITHDR_NOTIDX_V();
|
914
|
-
grpc_error* err = on_hdr<false>(
|
915
|
-
p, grpc_mdelem_from_slices(take_string_intern(p, &p->key),
|
916
|
-
take_string_extern(p, &p->value)));
|
917
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
918
|
-
return parse_begin(p, cur, end);
|
919
|
-
}
|
869
|
+
bits = kBase64InverseTable.table[*cur];
|
870
|
+
if (bits > 63) return {};
|
871
|
+
buffer |= bits << 12;
|
872
|
+
++cur;
|
920
873
|
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
parse_value_string_with_indexed_key, finish_lithdr_notidx};
|
926
|
-
p->dynamic_table_update_allowed = 0;
|
927
|
-
p->next_state = and_then;
|
928
|
-
p->index = (*cur) & 0xf;
|
929
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
930
|
-
return parse_string_prefix(p, cur + 1, end);
|
931
|
-
}
|
874
|
+
bits = kBase64InverseTable.table[*cur];
|
875
|
+
if (bits > 63) return {};
|
876
|
+
buffer |= bits << 6;
|
877
|
+
++cur;
|
932
878
|
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
938
|
-
parse_string_prefix, parse_value_string_with_indexed_key,
|
939
|
-
finish_lithdr_notidx};
|
940
|
-
p->dynamic_table_update_allowed = 0;
|
941
|
-
p->next_state = and_then;
|
942
|
-
p->index = 0xf;
|
943
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
944
|
-
p->parsing.value = &p->index;
|
945
|
-
return parse_value0(p, cur + 1, end);
|
946
|
-
}
|
879
|
+
bits = kBase64InverseTable.table[*cur];
|
880
|
+
if (bits > 63) return {};
|
881
|
+
buffer |= bits;
|
882
|
+
++cur;
|
947
883
|
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
954
|
-
|
955
|
-
|
956
|
-
|
957
|
-
|
958
|
-
|
884
|
+
out.insert(out.end(), {static_cast<uint8_t>(buffer >> 16),
|
885
|
+
static_cast<uint8_t>(buffer >> 8),
|
886
|
+
static_cast<uint8_t>(buffer)});
|
887
|
+
}
|
888
|
+
// Deal with the last 0, 1, 2, or 3 bytes.
|
889
|
+
switch (end - cur) {
|
890
|
+
case 0:
|
891
|
+
return out;
|
892
|
+
case 1:
|
893
|
+
return {};
|
894
|
+
case 2: {
|
895
|
+
uint32_t bits = kBase64InverseTable.table[*cur];
|
896
|
+
if (bits > 63) return {};
|
897
|
+
uint32_t buffer = bits << 18;
|
959
898
|
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
964
|
-
GRPC_STATS_INC_HPACK_RECV_LITHDR_NVRIDX();
|
965
|
-
grpc_mdelem md = get_precomputed_md_for_idx(p);
|
966
|
-
grpc_error* err = on_hdr<false>(
|
967
|
-
p, grpc_mdelem_from_slices(get_indexed_key(md),
|
968
|
-
take_string_extern(p, &p->value)));
|
969
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
970
|
-
return parse_begin(p, cur, end);
|
971
|
-
}
|
899
|
+
++cur;
|
900
|
+
bits = kBase64InverseTable.table[*cur];
|
901
|
+
if (bits > 63) return {};
|
902
|
+
buffer |= bits << 12;
|
972
903
|
|
973
|
-
|
974
|
-
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
982
|
-
return parse_begin(p, cur, end);
|
983
|
-
}
|
904
|
+
if (buffer & 0xffff) return {};
|
905
|
+
out.push_back(static_cast<uint8_t>(buffer >> 16));
|
906
|
+
return out;
|
907
|
+
}
|
908
|
+
case 3: {
|
909
|
+
uint32_t bits = kBase64InverseTable.table[*cur];
|
910
|
+
if (bits > 63) return {};
|
911
|
+
uint32_t buffer = bits << 18;
|
984
912
|
|
985
|
-
|
986
|
-
|
987
|
-
|
988
|
-
|
989
|
-
parse_value_string_with_indexed_key, finish_lithdr_nvridx};
|
990
|
-
p->dynamic_table_update_allowed = 0;
|
991
|
-
p->next_state = and_then;
|
992
|
-
p->index = (*cur) & 0xf;
|
993
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
994
|
-
return parse_string_prefix(p, cur + 1, end);
|
995
|
-
}
|
913
|
+
++cur;
|
914
|
+
bits = kBase64InverseTable.table[*cur];
|
915
|
+
if (bits > 63) return {};
|
916
|
+
buffer |= bits << 12;
|
996
917
|
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
static const grpc_chttp2_hpack_parser_state and_then[] = {
|
1002
|
-
parse_string_prefix, parse_value_string_with_indexed_key,
|
1003
|
-
finish_lithdr_nvridx};
|
1004
|
-
p->dynamic_table_update_allowed = 0;
|
1005
|
-
p->next_state = and_then;
|
1006
|
-
p->index = 0xf;
|
1007
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
1008
|
-
p->parsing.value = &p->index;
|
1009
|
-
return parse_value0(p, cur + 1, end);
|
1010
|
-
}
|
918
|
+
++cur;
|
919
|
+
bits = kBase64InverseTable.table[*cur];
|
920
|
+
if (bits > 63) return {};
|
921
|
+
buffer |= bits << 6;
|
1011
922
|
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
p->dynamic_table_update_allowed = 0;
|
1020
|
-
p->next_state = and_then;
|
1021
|
-
return parse_string_prefix(p, cur + 1, end);
|
1022
|
-
}
|
923
|
+
++cur;
|
924
|
+
if (buffer & 0xff) return {};
|
925
|
+
out.push_back(static_cast<uint8_t>(buffer >> 16));
|
926
|
+
out.push_back(static_cast<uint8_t>(buffer >> 8));
|
927
|
+
return out;
|
928
|
+
}
|
929
|
+
}
|
1023
930
|
|
1024
|
-
|
1025
|
-
static grpc_error* finish_max_tbl_size(grpc_chttp2_hpack_parser* p,
|
1026
|
-
const uint8_t* cur, const uint8_t* end) {
|
1027
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
|
1028
|
-
gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
|
931
|
+
GPR_UNREACHABLE_CODE(return out;);
|
1029
932
|
}
|
1030
|
-
grpc_error* err =
|
1031
|
-
grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index);
|
1032
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1033
|
-
return parse_begin(p, cur, end);
|
1034
|
-
}
|
1035
933
|
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
if (p->dynamic_table_update_allowed == 0) {
|
1040
|
-
return parse_error(
|
1041
|
-
p, cur, end,
|
1042
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1043
|
-
"More than two max table size changes in a single frame"));
|
1044
|
-
}
|
1045
|
-
p->dynamic_table_update_allowed--;
|
1046
|
-
p->index = (*cur) & 0x1f;
|
1047
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
1048
|
-
return finish_max_tbl_size(p, cur + 1, end);
|
1049
|
-
}
|
934
|
+
absl::variant<grpc_slice, absl::Span<const uint8_t>, std::vector<uint8_t>>
|
935
|
+
value_;
|
936
|
+
};
|
1050
937
|
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
938
|
+
// Parser parses one key/value pair from a byte stream.
|
939
|
+
class HPackParser::Parser {
|
940
|
+
public:
|
941
|
+
Parser(Input* input, grpc_metadata_batch* metadata_buffer,
|
942
|
+
uint32_t metadata_size_limit, HPackTable* table,
|
943
|
+
uint8_t* dynamic_table_updates_allowed, uint32_t* frame_length,
|
944
|
+
LogInfo log_info)
|
945
|
+
: input_(input),
|
946
|
+
metadata_buffer_(metadata_buffer),
|
947
|
+
table_(table),
|
948
|
+
dynamic_table_updates_allowed_(dynamic_table_updates_allowed),
|
949
|
+
frame_length_(frame_length),
|
950
|
+
metadata_size_limit_(metadata_size_limit),
|
951
|
+
log_info_(log_info) {}
|
952
|
+
|
953
|
+
// Skip any priority bits, or return false on failure
|
954
|
+
bool SkipPriority() {
|
955
|
+
if (input_->remaining() < 5) return input_->UnexpectedEOF(false);
|
956
|
+
input_->Advance(5);
|
957
|
+
return true;
|
1062
958
|
}
|
1063
|
-
p->dynamic_table_update_allowed--;
|
1064
|
-
p->next_state = and_then;
|
1065
|
-
p->index = 0x1f;
|
1066
|
-
p->md_for_index.payload = 0; /* Invalidate cached md when index changes. */
|
1067
|
-
p->parsing.value = &p->index;
|
1068
|
-
return parse_value0(p, cur + 1, end);
|
1069
|
-
}
|
1070
959
|
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
960
|
+
bool Parse() {
|
961
|
+
auto cur = *input_->Next();
|
962
|
+
switch (cur >> 4) {
|
963
|
+
// Literal header not indexed - First byte format: 0000xxxx
|
964
|
+
// Literal header never indexed - First byte format: 0001xxxx
|
965
|
+
// Where xxxx:
|
966
|
+
// 0000 - literal key
|
967
|
+
// 1111 - indexed key, varint encoded index
|
968
|
+
// other - indexed key, inline encoded index
|
969
|
+
case 0:
|
970
|
+
case 1:
|
971
|
+
switch (cur & 0xf) {
|
972
|
+
case 0: // literal key
|
973
|
+
return FinishHeaderOmitFromTable(ParseLiteralKey<String::Extern>());
|
974
|
+
case 0xf: // varint encoded key index
|
975
|
+
return FinishHeaderOmitFromTable(
|
976
|
+
ParseVarIdxKey<String::Extern>(0xf));
|
977
|
+
default: // inline encoded key index
|
978
|
+
return FinishHeaderOmitFromTable(
|
979
|
+
ParseIdxKey<String::Extern>(cur & 0xf));
|
980
|
+
}
|
981
|
+
// Update max table size.
|
982
|
+
// First byte format: 001xxxxx
|
983
|
+
// Where xxxxx:
|
984
|
+
// 11111 - max size is varint encoded
|
985
|
+
// other - max size is stored inline
|
986
|
+
case 2:
|
987
|
+
// inline encoded max table size
|
988
|
+
return FinishMaxTableSize(cur & 0x1f);
|
989
|
+
case 3:
|
990
|
+
if (cur == 0x3f) {
|
991
|
+
// varint encoded max table size
|
992
|
+
return FinishMaxTableSize(input_->ParseVarint(0x1f));
|
993
|
+
} else {
|
994
|
+
// inline encoded max table size
|
995
|
+
return FinishMaxTableSize(cur & 0x1f);
|
996
|
+
}
|
997
|
+
// Literal header with incremental indexing.
|
998
|
+
// First byte format: 01xxxxxx
|
999
|
+
// Where xxxxxx:
|
1000
|
+
// 000000 - literal key
|
1001
|
+
// 111111 - indexed key, varint encoded index
|
1002
|
+
// other - indexed key, inline encoded index
|
1003
|
+
case 4:
|
1004
|
+
if (cur == 0x40) {
|
1005
|
+
// literal key
|
1006
|
+
return FinishHeaderAndAddToTable(ParseLiteralKey<String::Intern>());
|
1007
|
+
}
|
1008
|
+
ABSL_FALLTHROUGH_INTENDED;
|
1009
|
+
case 5:
|
1010
|
+
case 6:
|
1011
|
+
// inline encoded key index
|
1012
|
+
return FinishHeaderAndAddToTable(
|
1013
|
+
ParseIdxKey<String::Intern>(cur & 0x3f));
|
1014
|
+
case 7:
|
1015
|
+
if (cur == 0x7f) {
|
1016
|
+
// varint encoded key index
|
1017
|
+
return FinishHeaderAndAddToTable(
|
1018
|
+
ParseVarIdxKey<String::Intern>(0x3f));
|
1019
|
+
} else {
|
1020
|
+
// inline encoded key index
|
1021
|
+
return FinishHeaderAndAddToTable(
|
1022
|
+
ParseIdxKey<String::Intern>(cur & 0x3f));
|
1023
|
+
}
|
1024
|
+
// Indexed Header Field Representation
|
1025
|
+
// First byte format: 1xxxxxxx
|
1026
|
+
// Where xxxxxxx:
|
1027
|
+
// 0000000 - illegal
|
1028
|
+
// 1111111 - varint encoded field index
|
1029
|
+
// other - inline encoded field index
|
1030
|
+
case 8:
|
1031
|
+
if (cur == 0x80) {
|
1032
|
+
// illegal value.
|
1033
|
+
return input_->MaybeSetErrorAndReturn(
|
1034
|
+
[] {
|
1035
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1036
|
+
"Illegal hpack op code");
|
1037
|
+
},
|
1038
|
+
false);
|
1039
|
+
}
|
1040
|
+
ABSL_FALLTHROUGH_INTENDED;
|
1041
|
+
case 9:
|
1042
|
+
case 10:
|
1043
|
+
case 11:
|
1044
|
+
case 12:
|
1045
|
+
case 13:
|
1046
|
+
case 14:
|
1047
|
+
// inline encoded field index
|
1048
|
+
return FinishIndexed(cur & 0x7f);
|
1049
|
+
case 15:
|
1050
|
+
if (cur == 0xff) {
|
1051
|
+
// varint encoded field index
|
1052
|
+
return FinishIndexed(input_->ParseVarint(0x7f));
|
1053
|
+
} else {
|
1054
|
+
// inline encoded field index
|
1055
|
+
return FinishIndexed(cur & 0x7f);
|
1056
|
+
}
|
1057
|
+
}
|
1058
|
+
GPR_UNREACHABLE_CODE(abort());
|
1078
1059
|
}
|
1079
|
-
p->state = still_parse_error;
|
1080
|
-
return err;
|
1081
|
-
}
|
1082
|
-
|
1083
|
-
static grpc_error* still_parse_error(grpc_chttp2_hpack_parser* p,
|
1084
|
-
const uint8_t* /*cur*/,
|
1085
|
-
const uint8_t* /*end*/) {
|
1086
|
-
return GRPC_ERROR_REF(p->last_error);
|
1087
|
-
}
|
1088
|
-
|
1089
|
-
static grpc_error* parse_illegal_op(grpc_chttp2_hpack_parser* p,
|
1090
|
-
const uint8_t* cur, const uint8_t* end) {
|
1091
|
-
GPR_ASSERT(cur != end);
|
1092
|
-
grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1093
|
-
absl::StrCat("Illegal hpack op code ", *cur).c_str());
|
1094
|
-
return parse_error(p, cur, end, err);
|
1095
|
-
}
|
1096
1060
|
|
1097
|
-
|
1098
|
-
|
1099
|
-
|
1100
|
-
|
1101
|
-
|
1102
|
-
|
1103
|
-
|
1061
|
+
private:
|
1062
|
+
void GPR_ATTRIBUTE_NOINLINE LogHeader(const HPackTable::Memento& memento) {
|
1063
|
+
const char* type;
|
1064
|
+
switch (log_info_.type) {
|
1065
|
+
case LogInfo::kHeaders:
|
1066
|
+
type = "HDR";
|
1067
|
+
break;
|
1068
|
+
case LogInfo::kTrailers:
|
1069
|
+
type = "TRL";
|
1070
|
+
break;
|
1071
|
+
case LogInfo::kDontKnow:
|
1072
|
+
type = "???";
|
1073
|
+
break;
|
1074
|
+
}
|
1075
|
+
gpr_log(GPR_DEBUG, "HTTP:%d:%s:%s: %s", log_info_.stream_id, type,
|
1076
|
+
log_info_.is_client ? "CLI" : "SVR", memento.DebugString().c_str());
|
1104
1077
|
}
|
1105
1078
|
|
1106
|
-
|
1079
|
+
bool EmitHeader(const HPackTable::Memento& md) {
|
1080
|
+
// Pass up to the transport
|
1081
|
+
if (GPR_UNLIKELY(metadata_buffer_ == nullptr)) return true;
|
1082
|
+
*frame_length_ += md.transport_size();
|
1083
|
+
if (GPR_UNLIKELY(*frame_length_ > metadata_size_limit_)) {
|
1084
|
+
return HandleMetadataSizeLimitExceeded(md);
|
1085
|
+
}
|
1107
1086
|
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1087
|
+
grpc_error_handle err = metadata_buffer_->Set(md);
|
1088
|
+
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
|
1089
|
+
input_->SetError(err);
|
1090
|
+
return false;
|
1091
|
+
}
|
1092
|
+
return true;
|
1112
1093
|
}
|
1113
|
-
}
|
1114
1094
|
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1095
|
+
bool FinishHeaderAndAddToTable(absl::optional<HPackTable::Memento> md) {
|
1096
|
+
// Allow higher code to just pass in failures ... simplifies things a bit.
|
1097
|
+
if (!md.has_value()) return false;
|
1098
|
+
// Log if desired
|
1099
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
|
1100
|
+
LogHeader(*md);
|
1101
|
+
}
|
1102
|
+
// Emit whilst we own the metadata.
|
1103
|
+
auto r = EmitHeader(*md);
|
1104
|
+
// Add to the hpack table
|
1105
|
+
grpc_error_handle err = table_->Add(std::move(*md));
|
1106
|
+
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
|
1107
|
+
input_->SetError(err);
|
1108
|
+
return false;
|
1109
|
+
};
|
1110
|
+
return r;
|
1122
1111
|
}
|
1123
1112
|
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
return
|
1128
|
-
} else {
|
1129
|
-
return parse_next(p, cur + 1, end);
|
1113
|
+
bool FinishHeaderOmitFromTable(absl::optional<HPackTable::Memento> md) {
|
1114
|
+
// Allow higher code to just pass in failures ... simplifies things a bit.
|
1115
|
+
if (!md.has_value()) return false;
|
1116
|
+
return FinishHeaderOmitFromTable(*md);
|
1130
1117
|
}
|
1131
|
-
}
|
1132
1118
|
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
return GRPC_ERROR_NONE;
|
1119
|
+
bool FinishHeaderOmitFromTable(const HPackTable::Memento& md) {
|
1120
|
+
// Log if desired
|
1121
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_chttp2_hpack_parser)) {
|
1122
|
+
LogHeader(md);
|
1123
|
+
}
|
1124
|
+
return EmitHeader(md);
|
1140
1125
|
}
|
1141
1126
|
|
1142
|
-
|
1143
|
-
|
1144
|
-
|
1145
|
-
|
1146
|
-
|
1147
|
-
|
1127
|
+
// Parse a string encoded key and a string encoded value
|
1128
|
+
template <typename TakeValueType>
|
1129
|
+
absl::optional<HPackTable::Memento> ParseLiteralKey() {
|
1130
|
+
auto key = String::Parse(input_);
|
1131
|
+
if (!key.has_value()) return {};
|
1132
|
+
auto key_slice = key->Take<String::Intern>();
|
1133
|
+
auto value =
|
1134
|
+
ParseValueString(grpc_is_refcounted_slice_binary_header(key_slice));
|
1135
|
+
if (GPR_UNLIKELY(!value.has_value())) {
|
1136
|
+
grpc_slice_unref_internal(key_slice);
|
1137
|
+
return {};
|
1138
|
+
}
|
1139
|
+
return grpc_metadata_batch::Parse(key_slice, value->Take<TakeValueType>());
|
1148
1140
|
}
|
1149
|
-
}
|
1150
1141
|
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
|
1155
|
-
|
1156
|
-
|
1157
|
-
|
1142
|
+
// Parse an index encoded key and a string encoded value
|
1143
|
+
template <typename TakeValueType>
|
1144
|
+
absl::optional<HPackTable::Memento> ParseIdxKey(uint32_t index) {
|
1145
|
+
const auto* elem = table_->Lookup(index);
|
1146
|
+
if (GPR_UNLIKELY(elem == nullptr)) {
|
1147
|
+
return InvalidHPackIndexError(index,
|
1148
|
+
absl::optional<HPackTable::Memento>());
|
1149
|
+
}
|
1150
|
+
auto value = ParseValueString(elem->is_binary_header());
|
1151
|
+
if (GPR_UNLIKELY(!value.has_value())) return {};
|
1152
|
+
return elem->WithNewValue(value->Take<TakeValueType>());
|
1158
1153
|
}
|
1159
1154
|
|
1160
|
-
|
1161
|
-
|
1162
|
-
|
1163
|
-
|
1164
|
-
|
1165
|
-
return
|
1155
|
+
// Parse a varint index encoded key and a string encoded value
|
1156
|
+
template <typename TakeValueType>
|
1157
|
+
absl::optional<HPackTable::Memento> ParseVarIdxKey(uint32_t offset) {
|
1158
|
+
auto index = input_->ParseVarint(offset);
|
1159
|
+
if (GPR_UNLIKELY(!index.has_value())) return {};
|
1160
|
+
return ParseIdxKey<TakeValueType>(*index);
|
1166
1161
|
}
|
1167
|
-
}
|
1168
|
-
|
1169
|
-
/* parse the 5th byte of a varint into p->parsing.value
|
1170
|
-
depending on the byte, we may overflow, and care must be taken */
|
1171
|
-
static grpc_error* parse_value4(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
1172
|
-
const uint8_t* end) {
|
1173
|
-
uint8_t c;
|
1174
|
-
uint32_t cur_value;
|
1175
|
-
uint32_t add_value;
|
1176
1162
|
|
1177
|
-
if
|
1178
|
-
|
1179
|
-
|
1163
|
+
// Parse a string, figuring out if it's binary or not by the key name.
|
1164
|
+
absl::optional<String> ParseValueString(bool is_binary) {
|
1165
|
+
if (is_binary) {
|
1166
|
+
return String::ParseBinary(input_);
|
1167
|
+
} else {
|
1168
|
+
return String::Parse(input_);
|
1169
|
+
}
|
1180
1170
|
}
|
1181
1171
|
|
1182
|
-
|
1183
|
-
|
1184
|
-
|
1172
|
+
// Emit an indexed field
|
1173
|
+
bool FinishIndexed(absl::optional<uint32_t> index) {
|
1174
|
+
*dynamic_table_updates_allowed_ = 0;
|
1175
|
+
if (!index.has_value()) return false;
|
1176
|
+
const auto* elem = table_->Lookup(*index);
|
1177
|
+
if (GPR_UNLIKELY(elem == nullptr)) {
|
1178
|
+
return InvalidHPackIndexError(*index, false);
|
1179
|
+
}
|
1180
|
+
GRPC_STATS_INC_HPACK_RECV_INDEXED();
|
1181
|
+
return FinishHeaderOmitFromTable(*elem);
|
1185
1182
|
}
|
1186
1183
|
|
1187
|
-
|
1188
|
-
|
1189
|
-
|
1190
|
-
|
1184
|
+
// finish parsing a max table size change
|
1185
|
+
bool FinishMaxTableSize(absl::optional<uint32_t> size) {
|
1186
|
+
if (!size.has_value()) return false;
|
1187
|
+
if (*dynamic_table_updates_allowed_ == 0) {
|
1188
|
+
return input_->MaybeSetErrorAndReturn(
|
1189
|
+
[] {
|
1190
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1191
|
+
"More than two max table size changes in a single frame");
|
1192
|
+
},
|
1193
|
+
false);
|
1194
|
+
}
|
1195
|
+
(*dynamic_table_updates_allowed_)--;
|
1196
|
+
grpc_error_handle err = table_->SetCurrentTableSize(*size);
|
1197
|
+
if (err != GRPC_ERROR_NONE) {
|
1198
|
+
input_->SetError(err);
|
1199
|
+
return false;
|
1200
|
+
}
|
1201
|
+
return true;
|
1191
1202
|
}
|
1192
1203
|
|
1193
|
-
|
1194
|
-
|
1195
|
-
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1204
|
+
// Set an invalid hpack index error if no error has been set. Returns result
|
1205
|
+
// unmodified.
|
1206
|
+
template <typename R>
|
1207
|
+
R InvalidHPackIndexError(uint32_t index, R result) {
|
1208
|
+
return input_->MaybeSetErrorAndReturn(
|
1209
|
+
[this, index] {
|
1210
|
+
return grpc_error_set_int(
|
1211
|
+
grpc_error_set_int(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1212
|
+
"Invalid HPACK index received"),
|
1213
|
+
GRPC_ERROR_INT_INDEX,
|
1214
|
+
static_cast<intptr_t>(index)),
|
1215
|
+
GRPC_ERROR_INT_SIZE,
|
1216
|
+
static_cast<intptr_t>(this->table_->num_entries()));
|
1217
|
+
},
|
1218
|
+
std::move(result));
|
1199
1219
|
}
|
1200
1220
|
|
1201
|
-
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1209
|
-
|
1210
|
-
|
1211
|
-
|
1212
|
-
|
1213
|
-
|
1214
|
-
|
1215
|
-
|
1216
|
-
while (cur != end && *cur == 0x80) {
|
1217
|
-
++cur;
|
1221
|
+
GPR_ATTRIBUTE_NOINLINE
|
1222
|
+
bool HandleMetadataSizeLimitExceeded(const HPackTable::Memento&) {
|
1223
|
+
gpr_log(GPR_DEBUG,
|
1224
|
+
"received initial metadata size exceeds limit (%" PRIu32
|
1225
|
+
" vs. %" PRIu32
|
1226
|
+
"). GRPC_ARG_MAX_METADATA_SIZE can be set to increase this limit.",
|
1227
|
+
*frame_length_, metadata_size_limit_);
|
1228
|
+
return input_->MaybeSetErrorAndReturn(
|
1229
|
+
[] {
|
1230
|
+
return grpc_error_set_int(
|
1231
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1232
|
+
"received initial metadata size exceeds limit"),
|
1233
|
+
GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_RESOURCE_EXHAUSTED);
|
1234
|
+
},
|
1235
|
+
false);
|
1218
1236
|
}
|
1219
1237
|
|
1220
|
-
|
1221
|
-
|
1222
|
-
|
1223
|
-
|
1224
|
-
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1238
|
+
Input* const input_;
|
1239
|
+
grpc_metadata_batch* const metadata_buffer_;
|
1240
|
+
HPackTable* const table_;
|
1241
|
+
uint8_t* const dynamic_table_updates_allowed_;
|
1242
|
+
uint32_t* const frame_length_;
|
1243
|
+
const uint32_t metadata_size_limit_;
|
1244
|
+
const LogInfo log_info_;
|
1245
|
+
};
|
1228
1246
|
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1247
|
+
UnmanagedMemorySlice HPackParser::String::Take(Extern) {
|
1248
|
+
auto s = Match(
|
1249
|
+
value_,
|
1250
|
+
[](const grpc_slice& slice) {
|
1251
|
+
// TODO(ctiller): Think about this before submission.
|
1252
|
+
GPR_DEBUG_ASSERT(!grpc_slice_is_interned(slice));
|
1253
|
+
auto out_slice = grpc_slice_copy(slice);
|
1254
|
+
grpc_slice_unref_internal(slice);
|
1255
|
+
return static_cast<const UnmanagedMemorySlice&>(out_slice);
|
1256
|
+
},
|
1257
|
+
[](absl::Span<const uint8_t> span) {
|
1258
|
+
return UnmanagedMemorySlice(
|
1259
|
+
reinterpret_cast<char*>(const_cast<uint8_t*>(span.begin())),
|
1260
|
+
span.size());
|
1261
|
+
},
|
1262
|
+
[](const std::vector<uint8_t>& v) {
|
1263
|
+
return UnmanagedMemorySlice(reinterpret_cast<const char*>(v.data()),
|
1264
|
+
v.size());
|
1265
|
+
});
|
1266
|
+
value_ = absl::Span<const uint8_t>();
|
1267
|
+
return s;
|
1236
1268
|
}
|
1237
1269
|
|
1238
|
-
|
1239
|
-
|
1240
|
-
|
1241
|
-
|
1242
|
-
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1270
|
+
ManagedMemorySlice HPackParser::String::Take(Intern) {
|
1271
|
+
auto s = Match(
|
1272
|
+
value_,
|
1273
|
+
[](const grpc_slice& slice) {
|
1274
|
+
ManagedMemorySlice s(&slice);
|
1275
|
+
grpc_slice_unref_internal(slice);
|
1276
|
+
return s;
|
1277
|
+
},
|
1278
|
+
[](absl::Span<const uint8_t> span) {
|
1279
|
+
return ManagedMemorySlice(
|
1280
|
+
reinterpret_cast<char*>(const_cast<uint8_t*>(span.data())),
|
1281
|
+
span.size());
|
1282
|
+
},
|
1283
|
+
[](const std::vector<uint8_t>& v) {
|
1284
|
+
return ManagedMemorySlice(reinterpret_cast<const char*>(v.data()),
|
1285
|
+
v.size());
|
1286
|
+
});
|
1287
|
+
value_ = absl::Span<const uint8_t>();
|
1288
|
+
return s;
|
1254
1289
|
}
|
1255
1290
|
|
1256
|
-
/*
|
1257
|
-
static void append_bytes(grpc_chttp2_hpack_parser_string* str,
|
1258
|
-
const uint8_t* data, size_t length) {
|
1259
|
-
if (length == 0) return;
|
1260
|
-
if (length + str->data.copied.length > str->data.copied.capacity) {
|
1261
|
-
GPR_ASSERT(str->data.copied.length + length <= UINT32_MAX);
|
1262
|
-
str->data.copied.capacity =
|
1263
|
-
static_cast<uint32_t>(str->data.copied.length + length);
|
1264
|
-
str->data.copied.str = static_cast<char*>(
|
1265
|
-
gpr_realloc(str->data.copied.str, str->data.copied.capacity));
|
1266
|
-
}
|
1267
|
-
memcpy(str->data.copied.str + str->data.copied.length, data, length);
|
1268
|
-
GPR_ASSERT(length <= UINT32_MAX - str->data.copied.length);
|
1269
|
-
str->data.copied.length += static_cast<uint32_t>(length);
|
1270
|
-
}
|
1291
|
+
/* PUBLIC INTERFACE */
|
1271
1292
|
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
|
1277
|
-
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
|
1282
|
-
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
|
1287
|
-
|
1288
|
-
|
1289
|
-
|
1290
|
-
|
1291
|
-
|
1292
|
-
|
1293
|
-
|
1294
|
-
|
1295
|
-
/* fallthrough */
|
1296
|
-
b64_byte0:
|
1297
|
-
case B64_BYTE0:
|
1298
|
-
if (cur == end) {
|
1299
|
-
p->binary = B64_BYTE0;
|
1300
|
-
return GRPC_ERROR_NONE;
|
1301
|
-
}
|
1302
|
-
bits = inverse_base64[*cur];
|
1303
|
-
++cur;
|
1304
|
-
if (bits == 255) {
|
1305
|
-
return parse_error(
|
1306
|
-
p, cur, end,
|
1307
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
|
1308
|
-
} else if (bits == 64) {
|
1309
|
-
goto b64_byte0;
|
1310
|
-
}
|
1311
|
-
p->base64_buffer = bits << 18;
|
1312
|
-
/* fallthrough */
|
1313
|
-
b64_byte1:
|
1314
|
-
case B64_BYTE1:
|
1315
|
-
if (cur == end) {
|
1316
|
-
p->binary = B64_BYTE1;
|
1317
|
-
return GRPC_ERROR_NONE;
|
1318
|
-
}
|
1319
|
-
bits = inverse_base64[*cur];
|
1320
|
-
++cur;
|
1321
|
-
if (bits == 255) {
|
1322
|
-
return parse_error(
|
1323
|
-
p, cur, end,
|
1324
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
|
1325
|
-
} else if (bits == 64) {
|
1326
|
-
goto b64_byte1;
|
1327
|
-
}
|
1328
|
-
p->base64_buffer |= bits << 12;
|
1329
|
-
/* fallthrough */
|
1330
|
-
b64_byte2:
|
1331
|
-
case B64_BYTE2:
|
1332
|
-
if (cur == end) {
|
1333
|
-
p->binary = B64_BYTE2;
|
1334
|
-
return GRPC_ERROR_NONE;
|
1335
|
-
}
|
1336
|
-
bits = inverse_base64[*cur];
|
1337
|
-
++cur;
|
1338
|
-
if (bits == 255) {
|
1339
|
-
return parse_error(
|
1340
|
-
p, cur, end,
|
1341
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
|
1342
|
-
} else if (bits == 64) {
|
1343
|
-
goto b64_byte2;
|
1344
|
-
}
|
1345
|
-
p->base64_buffer |= bits << 6;
|
1346
|
-
/* fallthrough */
|
1347
|
-
b64_byte3:
|
1348
|
-
case B64_BYTE3:
|
1349
|
-
if (cur == end) {
|
1350
|
-
p->binary = B64_BYTE3;
|
1351
|
-
return GRPC_ERROR_NONE;
|
1352
|
-
}
|
1353
|
-
bits = inverse_base64[*cur];
|
1354
|
-
++cur;
|
1355
|
-
if (bits == 255) {
|
1356
|
-
return parse_error(
|
1357
|
-
p, cur, end,
|
1358
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Illegal base64 character"));
|
1359
|
-
} else if (bits == 64) {
|
1360
|
-
goto b64_byte3;
|
1361
|
-
}
|
1362
|
-
p->base64_buffer |= bits;
|
1363
|
-
bits = p->base64_buffer;
|
1364
|
-
decoded[0] = static_cast<uint8_t>(bits >> 16);
|
1365
|
-
decoded[1] = static_cast<uint8_t>(bits >> 8);
|
1366
|
-
decoded[2] = static_cast<uint8_t>(bits);
|
1367
|
-
append_bytes(str, decoded, 3);
|
1368
|
-
goto b64_byte0;
|
1293
|
+
HPackParser::HPackParser() = default;
|
1294
|
+
|
1295
|
+
HPackParser::~HPackParser() = default;
|
1296
|
+
|
1297
|
+
void HPackParser::BeginFrame(grpc_metadata_batch* metadata_buffer,
|
1298
|
+
uint32_t metadata_size_limit, Boundary boundary,
|
1299
|
+
Priority priority, LogInfo log_info) {
|
1300
|
+
metadata_buffer_ = metadata_buffer;
|
1301
|
+
boundary_ = boundary;
|
1302
|
+
priority_ = priority;
|
1303
|
+
dynamic_table_updates_allowed_ = 2;
|
1304
|
+
frame_length_ = 0;
|
1305
|
+
metadata_size_limit_ = metadata_size_limit;
|
1306
|
+
log_info_ = log_info;
|
1307
|
+
}
|
1308
|
+
|
1309
|
+
grpc_error_handle HPackParser::Parse(const grpc_slice& slice, bool is_last) {
|
1310
|
+
if (GPR_UNLIKELY(!unparsed_bytes_.empty())) {
|
1311
|
+
std::vector<uint8_t> buffer = std::move(unparsed_bytes_);
|
1312
|
+
buffer.insert(buffer.end(), GRPC_SLICE_START_PTR(slice),
|
1313
|
+
GRPC_SLICE_END_PTR(slice));
|
1314
|
+
return ParseInput(
|
1315
|
+
Input(nullptr, buffer.data(), buffer.data() + buffer.size()), is_last);
|
1369
1316
|
}
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1317
|
+
return ParseInput(Input(slice.refcount, GRPC_SLICE_START_PTR(slice),
|
1318
|
+
GRPC_SLICE_END_PTR(slice)),
|
1319
|
+
is_last);
|
1373
1320
|
}
|
1374
1321
|
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
uint32_t bits;
|
1379
|
-
grpc_chttp2_hpack_parser_string* str = p->parsing.str;
|
1380
|
-
switch (static_cast<binary_state>(p->binary)) {
|
1381
|
-
case NOT_BINARY:
|
1382
|
-
break;
|
1383
|
-
case BINARY_BEGIN:
|
1384
|
-
break;
|
1385
|
-
case B64_BYTE0:
|
1386
|
-
break;
|
1387
|
-
case B64_BYTE1:
|
1388
|
-
return parse_error(p, cur, end,
|
1389
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1390
|
-
"illegal base64 encoding")); /* illegal encoding */
|
1391
|
-
case B64_BYTE2:
|
1392
|
-
bits = p->base64_buffer;
|
1393
|
-
if (bits & 0xffff) {
|
1394
|
-
grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1395
|
-
absl::StrFormat("trailing bits in base64 encoding: 0x%04x",
|
1396
|
-
bits & 0xffff)
|
1397
|
-
.c_str());
|
1398
|
-
return parse_error(p, cur, end, err);
|
1399
|
-
}
|
1400
|
-
decoded[0] = static_cast<uint8_t>(bits >> 16);
|
1401
|
-
append_bytes(str, decoded, 1);
|
1402
|
-
break;
|
1403
|
-
case B64_BYTE3:
|
1404
|
-
bits = p->base64_buffer;
|
1405
|
-
if (bits & 0xff) {
|
1406
|
-
grpc_error* err = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
1407
|
-
absl::StrFormat("trailing bits in base64 encoding: 0x%02x",
|
1408
|
-
bits & 0xff)
|
1409
|
-
.c_str());
|
1410
|
-
return parse_error(p, cur, end, err);
|
1411
|
-
}
|
1412
|
-
decoded[0] = static_cast<uint8_t>(bits >> 16);
|
1413
|
-
decoded[1] = static_cast<uint8_t>(bits >> 8);
|
1414
|
-
append_bytes(str, decoded, 2);
|
1415
|
-
break;
|
1322
|
+
grpc_error_handle HPackParser::ParseInput(Input input, bool is_last) {
|
1323
|
+
if (ParseInputInner(&input)) {
|
1324
|
+
return GRPC_ERROR_NONE;
|
1416
1325
|
}
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
static grpc_error* huff_nibble(grpc_chttp2_hpack_parser* p, uint8_t nibble) {
|
1422
|
-
int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble];
|
1423
|
-
int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble];
|
1424
|
-
if (emit != -1) {
|
1425
|
-
if (emit >= 0 && emit < 256) {
|
1426
|
-
uint8_t c = static_cast<uint8_t>(emit);
|
1427
|
-
grpc_error* err = append_string(p, &c, (&c) + 1);
|
1428
|
-
if (err != GRPC_ERROR_NONE) return err;
|
1429
|
-
} else {
|
1430
|
-
assert(emit == 256);
|
1326
|
+
if (input.eof_error()) {
|
1327
|
+
if (GPR_UNLIKELY(is_last && is_boundary())) {
|
1328
|
+
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1329
|
+
"Incomplete header at the end of a header/continuation sequence");
|
1431
1330
|
}
|
1432
|
-
|
1433
|
-
p->huff_state = next;
|
1434
|
-
return GRPC_ERROR_NONE;
|
1435
|
-
}
|
1436
|
-
|
1437
|
-
/* decode full bytes from a huffman encoded stream */
|
1438
|
-
static grpc_error* add_huff_bytes(grpc_chttp2_hpack_parser* p,
|
1439
|
-
const uint8_t* cur, const uint8_t* end) {
|
1440
|
-
for (; cur != end; ++cur) {
|
1441
|
-
grpc_error* err = huff_nibble(p, *cur >> 4);
|
1442
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1443
|
-
err = huff_nibble(p, *cur & 0xf);
|
1444
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1445
|
-
}
|
1446
|
-
return GRPC_ERROR_NONE;
|
1447
|
-
}
|
1448
|
-
|
1449
|
-
/* decode some string bytes based on the current decoding mode
|
1450
|
-
(huffman or not) */
|
1451
|
-
static grpc_error* add_str_bytes(grpc_chttp2_hpack_parser* p,
|
1452
|
-
const uint8_t* cur, const uint8_t* end) {
|
1453
|
-
if (p->huff) {
|
1454
|
-
return add_huff_bytes(p, cur, end);
|
1455
|
-
} else {
|
1456
|
-
return append_string(p, cur, end);
|
1457
|
-
}
|
1458
|
-
}
|
1459
|
-
|
1460
|
-
/* parse a string - tries to do large chunks at a time */
|
1461
|
-
static grpc_error* parse_string(grpc_chttp2_hpack_parser* p, const uint8_t* cur,
|
1462
|
-
const uint8_t* end) {
|
1463
|
-
size_t remaining = p->strlen - p->strgot;
|
1464
|
-
size_t given = static_cast<size_t>(end - cur);
|
1465
|
-
if (remaining <= given) {
|
1466
|
-
grpc_error* err = add_str_bytes(p, cur, cur + remaining);
|
1467
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1468
|
-
err = finish_str(p, cur + remaining, end);
|
1469
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1470
|
-
return parse_next(p, cur + remaining, end);
|
1471
|
-
} else {
|
1472
|
-
grpc_error* err = add_str_bytes(p, cur, cur + given);
|
1473
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1474
|
-
GPR_ASSERT(given <= UINT32_MAX - p->strgot);
|
1475
|
-
p->strgot += static_cast<uint32_t>(given);
|
1476
|
-
p->state = parse_string;
|
1331
|
+
unparsed_bytes_ = std::vector<uint8_t>(input.frontier(), input.end_ptr());
|
1477
1332
|
return GRPC_ERROR_NONE;
|
1478
1333
|
}
|
1334
|
+
return input.TakeError();
|
1479
1335
|
}
|
1480
1336
|
|
1481
|
-
|
1482
|
-
|
1483
|
-
|
1484
|
-
uint8_t binary,
|
1485
|
-
grpc_chttp2_hpack_parser_string* str) {
|
1486
|
-
if (!p->huff && binary == NOT_BINARY &&
|
1487
|
-
static_cast<uint32_t>(end - cur) >= p->strlen &&
|
1488
|
-
p->current_slice_refcount != nullptr) {
|
1489
|
-
GRPC_STATS_INC_HPACK_RECV_UNCOMPRESSED();
|
1490
|
-
str->copied = false;
|
1491
|
-
str->data.referenced.refcount = p->current_slice_refcount;
|
1492
|
-
str->data.referenced.data.refcounted.bytes = const_cast<uint8_t*>(cur);
|
1493
|
-
str->data.referenced.data.refcounted.length = p->strlen;
|
1494
|
-
grpc_slice_ref_internal(str->data.referenced);
|
1495
|
-
return parse_next(p, cur + p->strlen, end);
|
1496
|
-
}
|
1497
|
-
p->strgot = 0;
|
1498
|
-
str->copied = true;
|
1499
|
-
str->data.copied.length = 0;
|
1500
|
-
p->parsing.str = str;
|
1501
|
-
p->huff_state = 0;
|
1502
|
-
p->binary = binary;
|
1503
|
-
switch (p->binary) {
|
1504
|
-
case NOT_BINARY:
|
1505
|
-
if (p->huff) {
|
1506
|
-
GRPC_STATS_INC_HPACK_RECV_HUFFMAN();
|
1507
|
-
} else {
|
1508
|
-
GRPC_STATS_INC_HPACK_RECV_UNCOMPRESSED();
|
1509
|
-
}
|
1337
|
+
bool HPackParser::ParseInputInner(Input* input) {
|
1338
|
+
switch (priority_) {
|
1339
|
+
case Priority::None:
|
1510
1340
|
break;
|
1511
|
-
case
|
1512
|
-
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1341
|
+
case Priority::Included: {
|
1342
|
+
if (input->remaining() < 5) return input->UnexpectedEOF(false);
|
1343
|
+
input->Advance(5);
|
1344
|
+
input->UpdateFrontier();
|
1345
|
+
priority_ = Priority::None;
|
1346
|
+
}
|
1516
1347
|
}
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
|
1524
|
-
|
1525
|
-
|
1526
|
-
/* check if a key represents a binary header or not */
|
1527
|
-
|
1528
|
-
static bool is_binary_literal_header(grpc_chttp2_hpack_parser* p) {
|
1529
|
-
/* We know that either argument here is a reference counter slice.
|
1530
|
-
* 1. If it is a grpc_core::StaticSlice, the refcount is set to kNoopRefcount.
|
1531
|
-
* 2. If it's p->key.data.referenced, then p->key.copied was set to false,
|
1532
|
-
* which occurs in begin_parse_string() - where the refcount is set to
|
1533
|
-
* p->current_slice_refcount, which is not null. */
|
1534
|
-
return grpc_is_refcounted_slice_binary_header(
|
1535
|
-
p->key.copied ? grpc_core::ExternallyManagedSlice(
|
1536
|
-
p->key.data.copied.str, p->key.data.copied.length)
|
1537
|
-
: p->key.data.referenced);
|
1538
|
-
}
|
1539
|
-
|
1540
|
-
/* Cache the metadata for the given index during initial parsing. This avoids a
|
1541
|
-
pointless recomputation of the metadata when finishing a header. We read the
|
1542
|
-
cached value in get_precomputed_md_for_idx(). */
|
1543
|
-
static void set_precomputed_md_idx(grpc_chttp2_hpack_parser* p,
|
1544
|
-
grpc_mdelem md) {
|
1545
|
-
GPR_DEBUG_ASSERT(p->md_for_index.payload == 0);
|
1546
|
-
GPR_DEBUG_ASSERT(p->precomputed_md_index == -1);
|
1547
|
-
p->md_for_index = md;
|
1548
|
-
#ifndef NDEBUG
|
1549
|
-
p->precomputed_md_index = p->index;
|
1550
|
-
#endif
|
1551
|
-
}
|
1552
|
-
|
1553
|
-
/* Determines if a metadata element key associated with the current parser index
|
1554
|
-
is a binary indexed header during string parsing. We'll need to revisit this
|
1555
|
-
metadata when we're done parsing, so we cache the metadata for this index
|
1556
|
-
here using set_precomputed_md_idx(). */
|
1557
|
-
static grpc_error* is_binary_indexed_header(grpc_chttp2_hpack_parser* p,
|
1558
|
-
bool* is) {
|
1559
|
-
grpc_mdelem elem = grpc_chttp2_hptbl_lookup(&p->table, p->index);
|
1560
|
-
if (GPR_UNLIKELY(GRPC_MDISNULL(elem))) {
|
1561
|
-
return on_invalid_hpack_idx(p);
|
1348
|
+
while (!input->end_of_stream()) {
|
1349
|
+
if (GPR_UNLIKELY(!Parser(input, metadata_buffer_, metadata_size_limit_,
|
1350
|
+
&table_, &dynamic_table_updates_allowed_,
|
1351
|
+
&frame_length_, log_info_)
|
1352
|
+
.Parse())) {
|
1353
|
+
return false;
|
1354
|
+
}
|
1355
|
+
input->UpdateFrontier();
|
1562
1356
|
}
|
1563
|
-
|
1564
|
-
* 1. elem was a result of grpc_chttp2_hptbl_lookup
|
1565
|
-
* 2. An item in this table is either static (see entries with
|
1566
|
-
* index < GRPC_CHTTP2_LAST_STATIC_ENTRY or added via
|
1567
|
-
* grpc_chttp2_hptbl_add).
|
1568
|
-
* 3. If added via grpc_chttp2_hptbl_add, the entry is either static or
|
1569
|
-
* interned.
|
1570
|
-
* 4. Both static and interned element slices have non-null refcounts. */
|
1571
|
-
*is = grpc_is_refcounted_slice_binary_header(GRPC_MDKEY(elem));
|
1572
|
-
set_precomputed_md_idx(p, elem);
|
1573
|
-
return GRPC_ERROR_NONE;
|
1357
|
+
return true;
|
1574
1358
|
}
|
1575
1359
|
|
1576
|
-
|
1577
|
-
static grpc_error* parse_value_string(grpc_chttp2_hpack_parser* p,
|
1578
|
-
const uint8_t* cur, const uint8_t* end,
|
1579
|
-
bool is_binary) {
|
1580
|
-
return begin_parse_string(p, cur, end, is_binary ? BINARY_BEGIN : NOT_BINARY,
|
1581
|
-
&p->value);
|
1582
|
-
}
|
1360
|
+
void HPackParser::FinishFrame() { metadata_buffer_ = nullptr; }
|
1583
1361
|
|
1584
|
-
|
1585
|
-
grpc_chttp2_hpack_parser* p, const uint8_t* cur, const uint8_t* end) {
|
1586
|
-
bool is_binary = false;
|
1587
|
-
grpc_error* err = is_binary_indexed_header(p, &is_binary);
|
1588
|
-
if (err != GRPC_ERROR_NONE) return parse_error(p, cur, end, err);
|
1589
|
-
return parse_value_string(p, cur, end, is_binary);
|
1590
|
-
}
|
1362
|
+
} // namespace grpc_core
|
1591
1363
|
|
1592
|
-
|
1593
|
-
|
1594
|
-
return parse_value_string(p, cur, end, is_binary_literal_header(p));
|
1595
|
-
}
|
1596
|
-
|
1597
|
-
/* "Uninitialized" header parser to save us a branch in on_hdr(). */
|
1598
|
-
static grpc_error* on_header_uninitialized(void* /*user_data*/,
|
1599
|
-
grpc_mdelem md) {
|
1600
|
-
GRPC_MDELEM_UNREF(md);
|
1601
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING("on_header callback not set");
|
1602
|
-
}
|
1603
|
-
|
1604
|
-
/* PUBLIC INTERFACE */
|
1605
|
-
|
1606
|
-
void grpc_chttp2_hpack_parser_init(grpc_chttp2_hpack_parser* p) {
|
1607
|
-
p->on_header = on_header_uninitialized;
|
1608
|
-
p->on_header_user_data = nullptr;
|
1609
|
-
p->state = parse_begin;
|
1610
|
-
p->key.data.referenced = grpc_empty_slice();
|
1611
|
-
p->key.data.copied.str = nullptr;
|
1612
|
-
p->key.data.copied.capacity = 0;
|
1613
|
-
p->key.data.copied.length = 0;
|
1614
|
-
p->value.data.referenced = grpc_empty_slice();
|
1615
|
-
p->value.data.copied.str = nullptr;
|
1616
|
-
p->value.data.copied.capacity = 0;
|
1617
|
-
p->value.data.copied.length = 0;
|
1618
|
-
/* Cached metadata for the current index the parser is handling. This is set
|
1619
|
-
to 0 initially, invalidated when the index changes, and invalidated when it
|
1620
|
-
is read (by get_precomputed_md_for_idx()). It is set during string parsing,
|
1621
|
-
by set_precomputed_md_idx() - which is called by parse_value_string().
|
1622
|
-
The goal here is to avoid recomputing the metadata for the index when
|
1623
|
-
finishing with a header as well as the initial parse. */
|
1624
|
-
p->md_for_index.payload = 0;
|
1625
|
-
#ifndef NDEBUG
|
1626
|
-
/* In debug mode, this ensures that the cached metadata we're reading is in
|
1627
|
-
* fact correct for the index we are examining. */
|
1628
|
-
p->precomputed_md_index = -1;
|
1629
|
-
#endif
|
1630
|
-
p->dynamic_table_update_allowed = 2;
|
1631
|
-
p->last_error = GRPC_ERROR_NONE;
|
1632
|
-
}
|
1633
|
-
|
1634
|
-
void grpc_chttp2_hpack_parser_set_has_priority(grpc_chttp2_hpack_parser* p) {
|
1635
|
-
p->after_prioritization = p->state;
|
1636
|
-
p->state = parse_stream_dep0;
|
1637
|
-
}
|
1638
|
-
|
1639
|
-
void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser* p) {
|
1640
|
-
grpc_chttp2_hptbl_destroy(&p->table);
|
1641
|
-
GRPC_ERROR_UNREF(p->last_error);
|
1642
|
-
grpc_slice_unref_internal(p->key.data.referenced);
|
1643
|
-
grpc_slice_unref_internal(p->value.data.referenced);
|
1644
|
-
gpr_free(p->key.data.copied.str);
|
1645
|
-
gpr_free(p->value.data.copied.str);
|
1646
|
-
}
|
1647
|
-
|
1648
|
-
grpc_error* grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser* p,
|
1649
|
-
const grpc_slice& slice) {
|
1650
|
-
/* max number of bytes to parse at a time... limits call stack depth on
|
1651
|
-
* compilers without TCO */
|
1652
|
-
#define MAX_PARSE_LENGTH 1024
|
1653
|
-
p->current_slice_refcount = slice.refcount;
|
1654
|
-
const uint8_t* start = GRPC_SLICE_START_PTR(slice);
|
1655
|
-
const uint8_t* end = GRPC_SLICE_END_PTR(slice);
|
1656
|
-
grpc_error* error = GRPC_ERROR_NONE;
|
1657
|
-
while (start != end && error == GRPC_ERROR_NONE) {
|
1658
|
-
const uint8_t* target = start + GPR_MIN(MAX_PARSE_LENGTH, end - start);
|
1659
|
-
error = p->state(p, start, target);
|
1660
|
-
start = target;
|
1661
|
-
}
|
1662
|
-
p->current_slice_refcount = nullptr;
|
1663
|
-
return error;
|
1664
|
-
}
|
1364
|
+
// TODO(ctiller): this serves as an eviction notice for the remainder of this
|
1365
|
+
// file... it belongs elsewhere!
|
1665
1366
|
|
1666
1367
|
typedef void (*maybe_complete_func_type)(grpc_chttp2_transport* t,
|
1667
1368
|
grpc_chttp2_stream* s);
|
@@ -1669,7 +1370,7 @@ static const maybe_complete_func_type maybe_complete_funcs[] = {
|
|
1669
1370
|
grpc_chttp2_maybe_complete_recv_initial_metadata,
|
1670
1371
|
grpc_chttp2_maybe_complete_recv_trailing_metadata};
|
1671
1372
|
|
1672
|
-
static void force_client_rst_stream(void* sp,
|
1373
|
+
static void force_client_rst_stream(void* sp, grpc_error_handle /*error*/) {
|
1673
1374
|
grpc_chttp2_stream* s = static_cast<grpc_chttp2_stream*>(sp);
|
1674
1375
|
grpc_chttp2_transport* t = s->t;
|
1675
1376
|
if (!s->write_closed) {
|
@@ -1684,10 +1385,11 @@ static void force_client_rst_stream(void* sp, grpc_error* /*error*/) {
|
|
1684
1385
|
static void parse_stream_compression_md(grpc_chttp2_transport* /*t*/,
|
1685
1386
|
grpc_chttp2_stream* s,
|
1686
1387
|
grpc_metadata_batch* initial_metadata) {
|
1687
|
-
if (initial_metadata->
|
1388
|
+
if (initial_metadata->legacy_index()->named.content_encoding == nullptr ||
|
1688
1389
|
grpc_stream_compression_method_parse(
|
1689
|
-
GRPC_MDVALUE(
|
1690
|
-
|
1390
|
+
GRPC_MDVALUE(
|
1391
|
+
initial_metadata->legacy_index()->named.content_encoding->md),
|
1392
|
+
false, &s->stream_decompression_method) == 0) {
|
1691
1393
|
s->stream_decompression_method =
|
1692
1394
|
GRPC_STREAM_COMPRESSION_IDENTITY_DECOMPRESS;
|
1693
1395
|
}
|
@@ -1699,45 +1401,40 @@ static void parse_stream_compression_md(grpc_chttp2_transport* /*t*/,
|
|
1699
1401
|
}
|
1700
1402
|
}
|
1701
1403
|
|
1702
|
-
|
1703
|
-
|
1704
|
-
|
1705
|
-
|
1706
|
-
|
1404
|
+
grpc_error_handle grpc_chttp2_header_parser_parse(void* hpack_parser,
|
1405
|
+
grpc_chttp2_transport* t,
|
1406
|
+
grpc_chttp2_stream* s,
|
1407
|
+
const grpc_slice& slice,
|
1408
|
+
int is_last) {
|
1707
1409
|
GPR_TIMER_SCOPE("grpc_chttp2_header_parser_parse", 0);
|
1708
|
-
|
1709
|
-
static_cast<grpc_chttp2_hpack_parser*>(hpack_parser);
|
1410
|
+
auto* parser = static_cast<grpc_core::HPackParser*>(hpack_parser);
|
1710
1411
|
if (s != nullptr) {
|
1711
1412
|
s->stats.incoming.header_bytes += GRPC_SLICE_LENGTH(slice);
|
1712
1413
|
}
|
1713
|
-
|
1414
|
+
grpc_error_handle error = parser->Parse(slice, is_last != 0);
|
1714
1415
|
if (error != GRPC_ERROR_NONE) {
|
1715
1416
|
return error;
|
1716
1417
|
}
|
1717
1418
|
if (is_last) {
|
1718
|
-
if (parser->is_boundary && parser->state != parse_begin) {
|
1719
|
-
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1720
|
-
"end of header frame not aligned with a hpack record boundary");
|
1721
|
-
}
|
1722
1419
|
/* need to check for null stream: this can occur if we receive an invalid
|
1723
1420
|
stream id on a header */
|
1724
1421
|
if (s != nullptr) {
|
1725
|
-
if (parser->is_boundary) {
|
1726
|
-
if (s->header_frames_received ==
|
1422
|
+
if (parser->is_boundary()) {
|
1423
|
+
if (s->header_frames_received == 2) {
|
1727
1424
|
return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
1728
1425
|
"Too many trailer frames");
|
1729
1426
|
}
|
1730
1427
|
/* Process stream compression md element if it exists */
|
1731
1428
|
if (s->header_frames_received ==
|
1732
1429
|
0) { /* Only acts on initial metadata */
|
1733
|
-
parse_stream_compression_md(t, s, &s->
|
1430
|
+
parse_stream_compression_md(t, s, &s->initial_metadata_buffer);
|
1734
1431
|
}
|
1735
1432
|
s->published_metadata[s->header_frames_received] =
|
1736
1433
|
GRPC_METADATA_PUBLISHED_FROM_WIRE;
|
1737
1434
|
maybe_complete_funcs[s->header_frames_received](t, s);
|
1738
1435
|
s->header_frames_received++;
|
1739
1436
|
}
|
1740
|
-
if (parser->is_eof) {
|
1437
|
+
if (parser->is_eof()) {
|
1741
1438
|
if (t->is_client && !s->write_closed) {
|
1742
1439
|
/* server eof ==> complete closure; we may need to forcefully close
|
1743
1440
|
the stream. Wait until the combiner lock is ready to be released
|
@@ -1751,11 +1448,7 @@ grpc_error* grpc_chttp2_header_parser_parse(void* hpack_parser,
|
|
1751
1448
|
grpc_chttp2_mark_stream_closed(t, s, true, false, GRPC_ERROR_NONE);
|
1752
1449
|
}
|
1753
1450
|
}
|
1754
|
-
parser->
|
1755
|
-
parser->on_header_user_data = nullptr;
|
1756
|
-
parser->is_boundary = 0xde;
|
1757
|
-
parser->is_eof = 0xde;
|
1758
|
-
parser->dynamic_table_update_allowed = 2;
|
1451
|
+
parser->FinishFrame();
|
1759
1452
|
}
|
1760
1453
|
return GRPC_ERROR_NONE;
|
1761
1454
|
}
|