grpc 1.40.0 → 1.41.0.pre2
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 +27 -36
- data/include/grpc/byte_buffer.h +1 -1
- data/include/grpc/byte_buffer_reader.h +1 -1
- data/include/grpc/event_engine/endpoint_config.h +6 -11
- data/include/grpc/event_engine/event_engine.h +63 -58
- data/include/grpc/event_engine/port.h +1 -3
- data/include/grpc/event_engine/slice_allocator.h +6 -1
- data/include/grpc/fork.h +1 -1
- data/include/grpc/grpc.h +10 -4
- data/include/grpc/grpc_posix.h +5 -2
- 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 +2 -0
- data/include/grpc/impl/codegen/byte_buffer.h +2 -0
- 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 +4 -5
- data/include/grpc/impl/codegen/log.h +2 -0
- data/include/grpc/impl/codegen/port_platform.h +26 -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 +2 -0
- data/include/grpc/slice.h +1 -1
- 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 +1 -1
- 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 +2 -2
- data/src/core/ext/filters/census/grpc_context.cc +1 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +0 -1
- data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +24 -52
- data/src/core/ext/filters/client_channel/client_channel.h +3 -3
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -1
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +7 -6
- data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +8 -7
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +2 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
- 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 +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +14 -23
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +2 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +15 -18
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +10 -7
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -44
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +4 -7
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -10
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +14 -19
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +5 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -3
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +36 -30
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +8 -6
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -13
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +2 -1
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +7 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +5 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +9 -13
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +29 -12
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -0
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +2 -3
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +10 -6
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +2 -3
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +60 -37
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -1
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -6
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -1
- 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_slice_allocator.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +2 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +24 -30
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -1
- data/src/core/ext/transport/chttp2/transport/context_list.h +1 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +39 -23
- data/src/core/ext/transport/chttp2/transport/flow_control.h +9 -3
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +4 -3
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +3 -5
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +36 -5
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +12 -7
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +1 -0
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +272 -666
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +236 -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 +776 -1037
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +48 -169
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +159 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +130 -0
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +46 -0
- data/src/core/ext/transport/chttp2/transport/hpack_utils.h +30 -0
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +20 -30
- 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 +7 -3
- data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
- data/src/core/ext/transport/chttp2/transport/writing.cc +32 -28
- data/src/core/ext/transport/inproc/inproc_transport.cc +6 -4
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +96 -96
- data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +221 -89
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -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 +11 -5
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +48 -48
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +151 -61
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +99 -99
- data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +171 -69
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +15 -15
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +126 -127
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +229 -101
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +23 -23
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +28 -28
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +71 -29
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +82 -82
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +201 -81
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +24 -24
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +51 -21
- 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 +11 -5
- 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 +21 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +62 -62
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +131 -53
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +51 -51
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +81 -33
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +62 -62
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +141 -57
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +21 -9
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +57 -22
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +174 -17
- 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 +51 -21
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -37
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +61 -25
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +40 -40
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +71 -29
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +30 -30
- data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +81 -33
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +41 -29
- data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +141 -43
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +46 -43
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +88 -29
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +18 -18
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +281 -277
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +569 -248
- 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 +31 -13
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +51 -21
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +23 -23
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +115 -116
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +191 -77
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -1
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +46 -32
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +118 -34
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +12 -12
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +44 -42
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +108 -55
- 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 +11 -5
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +42 -42
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +61 -25
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +11 -5
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +11 -5
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +28 -28
- data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +51 -21
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +41 -17
- 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 +25 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +11 -5
- 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 +11 -5
- 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 +11 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +9 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +31 -13
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +10 -10
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +21 -9
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +21 -9
- 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 +31 -13
- 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 +71 -29
- 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 +51 -21
- 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 +1 -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 +21 -9
- 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 +31 -13
- 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 +11 -5
- data/src/core/ext/upb-generated/google/api/annotations.upb.c +1 -1
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +58 -58
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +111 -45
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +68 -68
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +121 -49
- data/src/core/ext/upb-generated/google/api/http.upb.c +18 -18
- data/src/core/ext/upb-generated/google/api/http.upb.h +31 -13
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +153 -153
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +271 -109
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +2 -2
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +15 -15
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +31 -13
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +11 -5
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +19 -19
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +91 -37
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +5 -5
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +11 -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 +11 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +60 -60
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +101 -41
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +7 -7
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -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 +21 -9
- 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 +91 -37
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +8 -8
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +31 -13
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -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 +11 -5
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +13 -13
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +11 -5
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +11 -5
- data/src/core/ext/upb-generated/validate/validate.upb.c +220 -220
- data/src/core/ext/upb-generated/validate/validate.upb.h +231 -93
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +3 -3
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +11 -5
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +8 -8
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +21 -9
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +11 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +5 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +11 -5
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +11 -11
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +21 -9
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +6 -6
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +11 -5
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +384 -382
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +94 -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/overload/v3/overload.upbdefs.c +30 -19
- data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +791 -780
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +96 -100
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +133 -115
- 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/tls.upbdefs.c +178 -173
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +14 -13
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +103 -103
- data/src/core/ext/xds/certificate_provider_registry.cc +2 -2
- data/src/core/ext/xds/xds_api.cc +788 -910
- data/src/core/ext/xds/xds_api.h +16 -33
- data/src/core/ext/xds/xds_bootstrap.cc +27 -52
- data/src/core/ext/xds/xds_client.cc +69 -30
- data/src/core/ext/xds/xds_client_stats.cc +16 -15
- data/src/core/ext/xds/xds_client_stats.h +6 -6
- data/src/core/ext/xds/xds_http_fault_filter.cc +4 -3
- data/src/core/ext/xds/xds_http_fault_filter.h +3 -2
- data/src/core/ext/xds/xds_http_filters.cc +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +10 -10
- data/src/core/lib/address_utils/parse_address.cc +4 -8
- data/src/core/lib/address_utils/sockaddr_utils.cc +2 -2
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_stack.cc +5 -3
- data/src/core/lib/channel/channel_stack_builder.cc +1 -11
- data/src/core/lib/channel/channel_stack_builder.h +0 -8
- data/src/core/lib/channel/channel_trace.cc +4 -3
- data/src/core/lib/channel/channel_trace.h +1 -0
- data/src/core/lib/channel/channelz.cc +40 -36
- data/src/core/lib/channel/channelz.h +27 -27
- data/src/core/lib/channel/channelz_registry.cc +7 -6
- data/src/core/lib/channel/connected_channel.cc +1 -0
- data/src/core/lib/channel/handshaker.cc +2 -1
- data/src/core/lib/channel/handshaker.h +1 -2
- 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.h +2 -2
- data/src/core/lib/compression/algorithm_metadata.h +1 -0
- data/src/core/lib/compression/compression_args.cc +2 -1
- data/src/core/lib/compression/compression_internal.cc +2 -4
- 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 +2 -1
- data/src/core/lib/compression/stream_compression_gzip.cc +2 -1
- data/src/core/lib/compression/stream_compression_identity.cc +2 -1
- data/src/core/lib/config/core_configuration.cc +54 -0
- data/src/core/lib/config/core_configuration.h +108 -0
- data/src/core/lib/debug/stats.h +1 -0
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/stats_data.h +1 -0
- 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 +0 -1
- data/src/core/lib/event_engine/event_engine.cc +3 -3
- data/src/core/lib/event_engine/sockaddr.cc +3 -3
- data/src/core/lib/gpr/alloc.cc +4 -3
- 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 +3 -3
- data/src/core/lib/gpr/log_android.cc +3 -2
- data/src/core/lib/gpr/log_linux.cc +7 -4
- data/src/core/lib/gpr/log_posix.cc +6 -3
- data/src/core/lib/gpr/string.h +2 -2
- data/src/core/lib/gpr/sync.cc +2 -2
- data/src/core/lib/gpr/sync_abseil.cc +7 -6
- data/src/core/lib/gpr/sync_posix.cc +3 -3
- data/src/core/lib/gpr/time.cc +3 -2
- data/src/core/lib/gpr/time_windows.cc +3 -2
- data/src/core/lib/gpr/tls.h +120 -41
- data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
- data/src/core/lib/gprpp/arena.cc +2 -1
- data/src/core/lib/gprpp/arena.h +5 -5
- data/src/core/lib/gprpp/atomic_utils.h +47 -0
- data/src/core/lib/gprpp/bitset.h +166 -0
- data/src/core/lib/gprpp/construct_destruct.h +39 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
- 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 +8 -5
- data/src/core/lib/gprpp/match.h +73 -0
- data/src/core/lib/gprpp/memory.h +3 -3
- data/src/core/lib/gprpp/mpscq.cc +7 -7
- data/src/core/lib/gprpp/mpscq.h +6 -5
- data/src/core/lib/gprpp/orphanable.h +3 -3
- data/src/core/lib/gprpp/overload.h +59 -0
- data/src/core/lib/gprpp/ref_counted.h +18 -18
- data/src/core/lib/gprpp/status_helper.cc +4 -4
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/thd_posix.cc +5 -5
- data/src/core/lib/gprpp/thd_windows.cc +4 -11
- data/src/core/lib/gprpp/time_util.cc +2 -2
- data/src/core/lib/gprpp/time_util.h +2 -2
- 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 +9 -9
- data/src/core/lib/http/httpcli.h +3 -0
- data/src/core/lib/http/httpcli_security_connector.cc +5 -8
- data/src/core/lib/http/parser.h +1 -0
- data/src/core/lib/iomgr/buffer_list.cc +2 -1
- data/src/core/lib/iomgr/buffer_list.h +1 -2
- data/src/core/lib/iomgr/call_combiner.cc +1 -0
- data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
- data/src/core/lib/iomgr/combiner.cc +3 -2
- data/src/core/lib/iomgr/combiner.h +1 -0
- data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
- data/src/core/lib/iomgr/endpoint.cc +0 -4
- data/src/core/lib/iomgr/endpoint.h +1 -3
- data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -20
- 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 +1 -2
- 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.h +23 -9
- data/src/core/lib/iomgr/error_cfstream.cc +2 -2
- data/src/core/lib/iomgr/error_internal.h +1 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +14 -22
- data/src/core/lib/iomgr/ev_epollex_linux.cc +15 -22
- data/src/core/lib/iomgr/ev_poll_posix.cc +13 -25
- data/src/core/lib/iomgr/ev_posix.cc +1 -2
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -22
- data/src/core/lib/iomgr/event_engine/endpoint.h +1 -2
- data/src/core/lib/iomgr/event_engine/iomgr.cc +17 -18
- data/src/core/lib/iomgr/event_engine/iomgr.h +20 -2
- data/src/core/lib/iomgr/event_engine/resolver.cc +2 -1
- data/src/core/lib/iomgr/event_engine/tcp.cc +53 -24
- data/src/core/lib/iomgr/exec_ctx.cc +3 -4
- data/src/core/lib/iomgr/exec_ctx.h +11 -19
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +10 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.h +4 -3
- data/src/core/lib/iomgr/executor/threadpool.cc +2 -2
- data/src/core/lib/iomgr/executor/threadpool.h +2 -1
- data/src/core/lib/iomgr/executor.cc +5 -6
- 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.h +2 -2
- data/src/core/lib/iomgr/iomgr_custom.cc +2 -2
- data/src/core/lib/iomgr/iomgr_custom.h +2 -2
- data/src/core/lib/iomgr/iomgr_internal.cc +2 -1
- data/src/core/lib/iomgr/iomgr_windows.cc +1 -2
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
- data/src/core/lib/iomgr/polling_entity.cc +2 -2
- data/src/core/lib/iomgr/pollset_custom.cc +3 -4
- data/src/core/lib/iomgr/pollset_custom.h +2 -2
- data/src/core/lib/iomgr/pollset_set_custom.cc +1 -2
- data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
- data/src/core/lib/iomgr/port.h +0 -5
- data/src/core/lib/iomgr/python_util.h +1 -0
- data/src/core/lib/iomgr/resolve_address.cc +2 -1
- data/src/core/lib/iomgr/resolve_address.h +0 -4
- data/src/core/lib/iomgr/resolve_address_custom.cc +4 -4
- data/src/core/lib/iomgr/resolve_address_custom.h +0 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +2 -4
- data/src/core/lib/iomgr/resolve_address_windows.cc +6 -8
- data/src/core/lib/iomgr/resource_quota.cc +127 -42
- data/src/core/lib/iomgr/resource_quota.h +66 -17
- data/src/core/lib/iomgr/sockaddr.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +3 -3
- data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
- data/src/core/lib/iomgr/socket_mutator.h +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -3
- 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 +2 -2
- data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
- data/src/core/lib/iomgr/tcp_client.cc +4 -2
- data/src/core/lib/iomgr/tcp_client.h +4 -0
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +9 -19
- data/src/core/lib/iomgr/tcp_client_custom.cc +9 -17
- data/src/core/lib/iomgr/tcp_client_posix.cc +24 -9
- data/src/core/lib/iomgr/tcp_client_posix.h +5 -2
- data/src/core/lib/iomgr/tcp_client_windows.cc +14 -6
- data/src/core/lib/iomgr/tcp_custom.cc +11 -23
- data/src/core/lib/iomgr/tcp_custom.h +2 -1
- data/src/core/lib/iomgr/tcp_posix.cc +29 -59
- data/src/core/lib/iomgr/tcp_posix.h +11 -12
- data/src/core/lib/iomgr/tcp_server.cc +6 -4
- data/src/core/lib/iomgr/tcp_server.h +12 -9
- data/src/core/lib/iomgr/tcp_server_custom.cc +15 -33
- data/src/core/lib/iomgr/tcp_server_posix.cc +20 -13
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +3 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -2
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -9
- data/src/core/lib/iomgr/tcp_windows.cc +6 -25
- data/src/core/lib/iomgr/tcp_windows.h +2 -1
- data/src/core/lib/iomgr/timer.cc +1 -0
- data/src/core/lib/iomgr/timer.h +1 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +8 -38
- data/src/core/lib/iomgr/timer_generic.h +1 -0
- data/src/core/lib/iomgr/timer_heap.cc +1 -2
- data/src/core/lib/iomgr/udp_server.cc +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -5
- data/src/core/lib/iomgr/unix_sockets_posix.h +2 -3
- data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -3
- data/src/core/lib/iomgr/wakeup_fd_posix.cc +1 -0
- data/src/core/lib/iomgr/work_serializer.cc +4 -4
- data/src/core/lib/iomgr/work_serializer.h +1 -1
- data/src/core/lib/json/json_reader.cc +9 -17
- data/src/core/lib/json/json_util.h +18 -26
- data/src/core/lib/matchers/matchers.h +0 -1
- 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_policy_provider.h +5 -4
- data/src/core/lib/security/authorization/evaluate_args.cc +2 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +159 -0
- data/src/core/lib/security/authorization/sdk_server_authz_filter.h +67 -0
- data/src/core/lib/security/context/security_context.cc +7 -6
- 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 +4 -3
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -3
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +13 -26
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -2
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +3 -3
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +13 -22
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
- 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 +55 -3
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +2 -1
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +31 -14
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -2
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +3 -7
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +4 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +0 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +3 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +10 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +4 -6
- 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 +3 -3
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -7
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -3
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +9 -14
- data/src/core/lib/security/transport/auth_filters.h +1 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +4 -6
- data/src/core/lib/security/transport/secure_endpoint.cc +4 -14
- data/src/core/lib/security/transport/secure_endpoint.h +1 -0
- data/src/core/lib/security/transport/security_handshaker.cc +5 -4
- data/src/core/lib/security/transport/security_handshaker.h +2 -1
- data/src/core/lib/security/util/json_util.cc +6 -8
- 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 +2 -3
- data/src/core/lib/slice/slice_buffer.cc +1 -2
- data/src/core/lib/slice/slice_intern.cc +2 -3
- data/src/core/lib/slice/slice_internal.h +2 -2
- 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/byte_buffer_reader.cc +1 -1
- data/src/core/lib/surface/call.cc +9 -8
- data/src/core/lib/surface/call.h +3 -3
- data/src/core/lib/surface/call_details.cc +2 -2
- data/src/core/lib/surface/call_log_batch.cc +2 -2
- data/src/core/lib/surface/channel.cc +22 -9
- data/src/core/lib/surface/channel.h +14 -2
- data/src/core/lib/surface/channel_ping.cc +1 -2
- data/src/core/lib/surface/channel_stack_type.cc +2 -1
- data/src/core/lib/surface/completion_queue.cc +54 -64
- data/src/core/lib/surface/completion_queue_factory.cc +2 -1
- 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 +4 -9
- data/src/core/lib/surface/init.h +0 -1
- data/src/core/lib/surface/init_secure.cc +23 -4
- data/src/core/lib/surface/lame_client.cc +6 -5
- data/src/core/lib/surface/metadata_array.cc +2 -2
- data/src/core/lib/surface/server.cc +17 -33
- data/src/core/lib/surface/server.h +11 -13
- data/src/core/lib/surface/validate_metadata.cc +44 -16
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/byte_stream.h +1 -0
- data/src/core/lib/transport/connectivity_state.cc +8 -5
- data/src/core/lib/transport/connectivity_state.h +2 -2
- data/src/core/lib/transport/error_utils.cc +1 -0
- data/src/core/lib/transport/metadata.cc +10 -10
- data/src/core/lib/transport/metadata.h +13 -11
- data/src/core/lib/transport/metadata_batch.h +8 -0
- data/src/core/lib/transport/transport_op_string.cc +2 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +14 -0
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -2
- data/src/core/tsi/alts/crypt/gsec.h +2 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -2
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +4 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
- data/src/core/tsi/ssl_transport_security.cc +11 -9
- data/src/core/tsi/ssl_transport_security.h +3 -1
- data/src/core/tsi/transport_security.cc +3 -3
- data/src/core/tsi/transport_security_grpc.h +1 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- 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 +10 -8
- data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
- data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
- data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
- data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
- data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
- data/src/ruby/ext/grpc/rb_grpc.c +5 -4
- data/src/ruby/ext/grpc/rb_grpc.h +1 -0
- data/src/ruby/ext/grpc/rb_server.c +6 -5
- data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
- data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
- data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
- data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
- data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/boringssl-with-bazel/err_data.c +294 -292
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +52 -47
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +20 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +5 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +34 -0
- 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 +23 -2
- 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 +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +7 -3
- data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
- 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/rand_extra/windows.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +2 -2
- 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/internal.h +45 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +6 -23
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +9 -11
- 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 +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -11
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +5 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +160 -74
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +25 -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 +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +5 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +58 -6
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +184 -55
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +0 -5
- data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +9 -16
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +44 -2
- data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +24 -11
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +9 -0
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -68
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +17 -9
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +25 -6
- data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +1 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +11 -5
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +0 -49
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +121 -65
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -6
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +9 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +2 -2
- data/third_party/upb/upb/decode.c +129 -60
- data/third_party/upb/upb/decode.h +32 -4
- data/third_party/upb/upb/decode_fast.c +513 -500
- data/third_party/upb/upb/decode_fast.h +27 -0
- data/third_party/upb/upb/{decode.int.h → decode_internal.h} +38 -8
- data/third_party/upb/upb/def.c +171 -181
- data/third_party/upb/upb/def.h +41 -19
- data/third_party/upb/upb/def.hpp +29 -0
- data/third_party/upb/upb/encode.c +49 -16
- data/third_party/upb/upb/encode.h +29 -2
- data/third_party/upb/upb/msg.c +169 -28
- data/third_party/upb/upb/msg.h +75 -580
- data/third_party/upb/upb/msg_internal.h +687 -0
- data/third_party/upb/upb/port_def.inc +85 -24
- data/third_party/upb/upb/port_undef.inc +38 -1
- data/third_party/upb/upb/reflection.c +29 -37
- 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 +211 -86
- data/third_party/upb/upb/{table.int.h → table_internal.h} +56 -180
- data/third_party/upb/upb/text_encode.c +32 -4
- data/third_party/upb/upb/text_encode.h +26 -0
- data/third_party/upb/upb/upb.c +59 -8
- data/third_party/upb/upb/upb.h +36 -6
- data/third_party/upb/upb/upb.hpp +24 -0
- data/third_party/upb/upb/upb_internal.h +58 -0
- metadata +64 -62
- 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_libuv.cc +0 -38
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -243
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
- 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.cc +0 -30
- 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/iomgr/endpoint_pair_uv.cc +0 -40
- data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
- data/src/core/lib/iomgr/pollset_uv.cc +0 -95
- data/src/core/lib/iomgr/pollset_uv.h +0 -36
- 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 -421
- data/src/core/lib/iomgr/timer_uv.cc +0 -66
- data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
- data/third_party/upb/upb/upb.int.h +0 -29
@@ -27,12 +27,11 @@
|
|
27
27
|
* TODO(murgatroid99): Remove this
|
28
28
|
*/
|
29
29
|
#include <grpc/grpc.h>
|
30
|
-
|
31
30
|
#include <grpc/support/alloc.h>
|
32
31
|
#include <grpc/support/log.h>
|
33
32
|
|
34
33
|
#include "src/core/ext/transport/chttp2/transport/bin_encoder.h"
|
35
|
-
#include "src/core/ext/transport/chttp2/transport/
|
34
|
+
#include "src/core/ext/transport/chttp2/transport/hpack_utils.h"
|
36
35
|
#include "src/core/ext/transport/chttp2/transport/varint.h"
|
37
36
|
#include "src/core/lib/debug/stats.h"
|
38
37
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -42,257 +41,30 @@
|
|
42
41
|
#include "src/core/lib/transport/static_metadata.h"
|
43
42
|
#include "src/core/lib/transport/timeout_encoding.h"
|
44
43
|
|
44
|
+
namespace grpc_core {
|
45
|
+
|
45
46
|
namespace {
|
46
|
-
/* (Maybe-cuckoo) hpack encoder hash table implementation.
|
47
|
-
|
48
|
-
This hashtable implementation is a subset of a proper cuckoo hash; while we
|
49
|
-
have fallback cells that a value can be hashed to if the first cell is full,
|
50
|
-
we do not attempt to iteratively rearrange entries into backup cells to get
|
51
|
-
things to fit. Instead, if both a cell and the backup cell for a value are
|
52
|
-
occupied, the older existing entry is evicted.
|
53
|
-
|
54
|
-
Note that we can disable backup-cell picking by setting
|
55
|
-
GRPC_HPACK_ENCODER_USE_CUCKOO_HASH to 0. In that case, we simply evict an
|
56
|
-
existing entry rather than try to use a backup. Hence, "maybe-cuckoo."
|
57
|
-
TODO(arjunroy): Add unit tests for hashtable implementation. */
|
58
|
-
#define GRPC_HPACK_ENCODER_USE_CUCKOO_HASH 1
|
59
|
-
#define HASH_FRAGMENT_MASK (GRPC_CHTTP2_HPACKC_NUM_VALUES - 1)
|
60
|
-
#define HASH_FRAGMENT_1(x) ((x)&HASH_FRAGMENT_MASK)
|
61
|
-
#define HASH_FRAGMENT_2(x) \
|
62
|
-
(((x) >> GRPC_CHTTP2_HPACKC_NUM_VALUES_BITS) & HASH_FRAGMENT_MASK)
|
63
|
-
#define HASH_FRAGMENT_3(x) \
|
64
|
-
(((x) >> (GRPC_CHTTP2_HPACKC_NUM_VALUES_BITS * 2)) & HASH_FRAGMENT_MASK)
|
65
|
-
#define HASH_FRAGMENT_4(x) \
|
66
|
-
(((x) >> (GRPC_CHTTP2_HPACKC_NUM_VALUES_BITS * 3)) & HASH_FRAGMENT_MASK)
|
67
47
|
|
68
48
|
/* don't consider adding anything bigger than this to the hpack table */
|
69
49
|
constexpr size_t kMaxDecoderSpaceUsage = 512;
|
70
50
|
constexpr size_t kDataFrameHeaderSize = 9;
|
71
|
-
constexpr uint8_t kMaxFilterValue = 255;
|
72
|
-
|
73
|
-
/* if the probability of this item being seen again is < 1/x then don't add
|
74
|
-
it to the table */
|
75
|
-
#define ONE_ON_ADD_PROBABILITY (GRPC_CHTTP2_HPACKC_NUM_VALUES >> 1)
|
76
|
-
/* The hpack index we encode over the wire. Meaningful to the hpack encoder and
|
77
|
-
parser on the remote end as well as HTTP2. *Not* the same as
|
78
|
-
HpackEncoderSlotHash, which is only meaningful to the hpack encoder
|
79
|
-
implementation (HpackEncoderSlotHash is used for the hashtable implementation
|
80
|
-
when mapping from metadata to HpackEncoderIndex. */
|
81
|
-
typedef uint32_t HpackEncoderIndex;
|
82
|
-
/* Internal-table bookkeeping (*not* the hpack index). */
|
83
|
-
typedef uint32_t HpackEncoderSlotHash;
|
84
|
-
|
85
|
-
struct SliceRefComparator {
|
86
|
-
typedef grpc_slice_refcount* Type;
|
87
|
-
static grpc_slice_refcount* Null() { return nullptr; }
|
88
|
-
static bool IsNull(const grpc_slice_refcount* sref) {
|
89
|
-
return sref == nullptr;
|
90
|
-
}
|
91
|
-
static bool Equals(const grpc_slice_refcount* s1,
|
92
|
-
const grpc_slice_refcount* s2) {
|
93
|
-
return s1 == s2;
|
94
|
-
}
|
95
|
-
static void Ref(grpc_slice_refcount* sref) {
|
96
|
-
GPR_DEBUG_ASSERT(sref != nullptr);
|
97
|
-
sref->Ref();
|
98
|
-
}
|
99
|
-
static void Unref(grpc_slice_refcount* sref) {
|
100
|
-
GPR_DEBUG_ASSERT(sref != nullptr);
|
101
|
-
sref->Unref();
|
102
|
-
}
|
103
|
-
};
|
104
51
|
|
105
|
-
struct MetadataComparator {
|
106
|
-
typedef grpc_mdelem Type;
|
107
|
-
static grpc_mdelem Null() { return {0}; }
|
108
|
-
static bool IsNull(const grpc_mdelem md) { return md.payload == 0; }
|
109
|
-
static bool Equals(const grpc_mdelem md1, const grpc_mdelem md2) {
|
110
|
-
return md1.payload == md2.payload;
|
111
|
-
}
|
112
|
-
static void Ref(grpc_mdelem md) {
|
113
|
-
GPR_DEBUG_ASSERT(md.payload != 0);
|
114
|
-
GRPC_MDELEM_REF(md);
|
115
|
-
}
|
116
|
-
static void Unref(grpc_mdelem md) {
|
117
|
-
GPR_DEBUG_ASSERT(md.payload != 0);
|
118
|
-
GRPC_MDELEM_UNREF(md);
|
119
|
-
}
|
120
|
-
};
|
121
|
-
|
122
|
-
/* Index table management */
|
123
|
-
template <typename Hashtable>
|
124
|
-
static HpackEncoderIndex HpackIndex(const Hashtable* hashtable,
|
125
|
-
HpackEncoderSlotHash hash_index) {
|
126
|
-
return hashtable[hash_index].index;
|
127
|
-
}
|
128
|
-
|
129
|
-
template <typename ValueType, typename Hashtable>
|
130
|
-
static const ValueType& GetEntry(const Hashtable* hashtable,
|
131
|
-
HpackEncoderSlotHash hash_index) {
|
132
|
-
return hashtable[hash_index].value;
|
133
|
-
}
|
134
|
-
|
135
|
-
template <typename Cmp, typename Hashtable>
|
136
|
-
static bool TableEmptyAt(const Hashtable* hashtable,
|
137
|
-
HpackEncoderSlotHash hash_index) {
|
138
|
-
return Cmp::Equals(hashtable[hash_index].value, Cmp::Null());
|
139
|
-
}
|
140
|
-
|
141
|
-
template <typename Cmp, typename Hashtable, typename ValueType>
|
142
|
-
static bool Matches(const Hashtable* hashtable, const ValueType& value,
|
143
|
-
HpackEncoderSlotHash hash_index) {
|
144
|
-
return Cmp::Equals(value, hashtable[hash_index].value);
|
145
|
-
}
|
146
|
-
|
147
|
-
template <typename Hashtable>
|
148
|
-
static void UpdateIndex(Hashtable* hashtable, HpackEncoderSlotHash hash_index,
|
149
|
-
HpackEncoderIndex hpack_index) {
|
150
|
-
hashtable[hash_index].index = hpack_index;
|
151
|
-
}
|
152
|
-
|
153
|
-
template <typename Hashtable, typename ValueType>
|
154
|
-
static void SetIndex(Hashtable* hashtable, HpackEncoderSlotHash hash_index,
|
155
|
-
const ValueType& value, HpackEncoderIndex hpack_index) {
|
156
|
-
hashtable[hash_index].value = value;
|
157
|
-
UpdateIndex(hashtable, hash_index, hpack_index);
|
158
|
-
}
|
159
|
-
|
160
|
-
template <typename Cmp, typename Hashtable, typename ValueType>
|
161
|
-
static bool GetMatchingIndex(Hashtable* hashtable, const ValueType& value,
|
162
|
-
uint32_t value_hash, HpackEncoderIndex* index) {
|
163
|
-
const HpackEncoderSlotHash cuckoo_first = HASH_FRAGMENT_2(value_hash);
|
164
|
-
if (Matches<Cmp>(hashtable, value, cuckoo_first)) {
|
165
|
-
*index = HpackIndex(hashtable, cuckoo_first);
|
166
|
-
return true;
|
167
|
-
}
|
168
|
-
#if GRPC_HPACK_ENCODER_USE_CUCKOO_HASH
|
169
|
-
const HpackEncoderSlotHash cuckoo_second = HASH_FRAGMENT_3(value_hash);
|
170
|
-
|
171
|
-
if (Matches<Cmp>(hashtable, value, cuckoo_second)) {
|
172
|
-
*index = HpackIndex(hashtable, cuckoo_second);
|
173
|
-
return true;
|
174
|
-
}
|
175
|
-
#endif
|
176
|
-
return false;
|
177
|
-
}
|
178
|
-
|
179
|
-
template <typename Cmp, typename Hashtable, typename ValueType>
|
180
|
-
static ValueType ReplaceOlderIndex(Hashtable* hashtable, const ValueType& value,
|
181
|
-
HpackEncoderSlotHash hash_index_a,
|
182
|
-
HpackEncoderSlotHash hash_index_b,
|
183
|
-
HpackEncoderIndex new_index) {
|
184
|
-
const HpackEncoderIndex hpack_idx_a = hashtable[hash_index_a].index;
|
185
|
-
const HpackEncoderIndex hpack_idx_b = hashtable[hash_index_b].index;
|
186
|
-
const HpackEncoderSlotHash id =
|
187
|
-
hpack_idx_a < hpack_idx_b ? hash_index_a : hash_index_b;
|
188
|
-
ValueType old = GetEntry<typename Cmp::Type>(hashtable, id);
|
189
|
-
SetIndex(hashtable, id, value, new_index);
|
190
|
-
return old;
|
191
|
-
}
|
192
|
-
|
193
|
-
template <typename Cmp, typename Hashtable, typename ValueType>
|
194
|
-
static void UpdateAddOrEvict(Hashtable hashtable, const ValueType& value,
|
195
|
-
uint32_t value_hash, HpackEncoderIndex new_index) {
|
196
|
-
const HpackEncoderSlotHash cuckoo_first = HASH_FRAGMENT_2(value_hash);
|
197
|
-
if (Matches<Cmp>(hashtable, value, cuckoo_first)) {
|
198
|
-
UpdateIndex(hashtable, cuckoo_first, new_index);
|
199
|
-
return;
|
200
|
-
}
|
201
|
-
if (TableEmptyAt<Cmp>(hashtable, cuckoo_first)) {
|
202
|
-
Cmp::Ref(value);
|
203
|
-
SetIndex(hashtable, cuckoo_first, value, new_index);
|
204
|
-
return;
|
205
|
-
}
|
206
|
-
#if GRPC_HPACK_ENCODER_USE_CUCKOO_HASH
|
207
|
-
const HpackEncoderSlotHash cuckoo_second = HASH_FRAGMENT_3(value_hash);
|
208
|
-
if (Matches<Cmp>(hashtable, value, cuckoo_second)) {
|
209
|
-
UpdateIndex(hashtable, cuckoo_second, new_index);
|
210
|
-
return;
|
211
|
-
}
|
212
|
-
Cmp::Ref(value);
|
213
|
-
if (TableEmptyAt<Cmp>(hashtable, cuckoo_second)) {
|
214
|
-
SetIndex(hashtable, cuckoo_second, value, new_index);
|
215
|
-
return;
|
216
|
-
}
|
217
|
-
Cmp::Unref(ReplaceOlderIndex<Cmp>(hashtable, value, cuckoo_first,
|
218
|
-
cuckoo_second, new_index));
|
219
|
-
#else
|
220
|
-
ValueType old = GetEntry<typename Cmp::Type>(hashtable, cuckoo_first);
|
221
|
-
SetIndex(hashtable, cuckoo_first, value, new_index);
|
222
|
-
Cmp::Unref(old);
|
223
|
-
#endif
|
224
|
-
}
|
225
|
-
|
226
|
-
/* halve all counts because an element reached max */
|
227
|
-
static void HalveFilter(uint8_t /*idx*/, uint32_t* sum, uint8_t* elems) {
|
228
|
-
*sum = 0;
|
229
|
-
for (int i = 0; i < GRPC_CHTTP2_HPACKC_NUM_VALUES; i++) {
|
230
|
-
elems[i] /= 2;
|
231
|
-
(*sum) += elems[i];
|
232
|
-
}
|
233
|
-
}
|
234
|
-
|
235
|
-
/* increment a filter count, halve all counts if one element reaches max */
|
236
|
-
static void IncrementFilter(uint8_t idx, uint32_t* sum, uint8_t* elems) {
|
237
|
-
elems[idx]++;
|
238
|
-
if (GPR_LIKELY(elems[idx] < kMaxFilterValue)) {
|
239
|
-
(*sum)++;
|
240
|
-
} else {
|
241
|
-
HalveFilter(idx, sum, elems);
|
242
|
-
}
|
243
|
-
}
|
244
|
-
|
245
|
-
static uint32_t UpdateHashtablePopularity(
|
246
|
-
grpc_chttp2_hpack_compressor* hpack_compressor, uint32_t elem_hash) {
|
247
|
-
const uint32_t popularity_hash = HASH_FRAGMENT_1(elem_hash);
|
248
|
-
IncrementFilter(popularity_hash, &hpack_compressor->filter_elems_sum,
|
249
|
-
hpack_compressor->filter_elems);
|
250
|
-
return popularity_hash;
|
251
|
-
}
|
252
|
-
|
253
|
-
static bool CanAddToHashtable(grpc_chttp2_hpack_compressor* hpack_compressor,
|
254
|
-
uint32_t popularity_hash) {
|
255
|
-
const bool can_add =
|
256
|
-
hpack_compressor->filter_elems[popularity_hash] >=
|
257
|
-
hpack_compressor->filter_elems_sum / ONE_ON_ADD_PROBABILITY;
|
258
|
-
return can_add;
|
259
|
-
}
|
260
52
|
} /* namespace */
|
261
53
|
|
262
|
-
struct framer_state {
|
263
|
-
int is_first_frame;
|
264
|
-
/* number of bytes in 'output' when we started the frame - used to calculate
|
265
|
-
frame length */
|
266
|
-
size_t output_length_at_start_of_frame;
|
267
|
-
/* index (in output) of the header for the current frame */
|
268
|
-
size_t header_idx;
|
269
|
-
#ifndef NDEBUG
|
270
|
-
/* have we seen a regular (non-colon-prefixed) header yet? */
|
271
|
-
uint8_t seen_regular_header;
|
272
|
-
#endif
|
273
|
-
/* output stream id */
|
274
|
-
uint32_t stream_id;
|
275
|
-
grpc_slice_buffer* output;
|
276
|
-
grpc_transport_one_way_stats* stats;
|
277
|
-
/* maximum size of a frame */
|
278
|
-
size_t max_frame_size;
|
279
|
-
bool use_true_binary_metadata;
|
280
|
-
bool is_end_of_stream;
|
281
|
-
};
|
282
54
|
/* fills p (which is expected to be kDataFrameHeaderSize bytes long)
|
283
55
|
* with a data frame header */
|
284
|
-
static void
|
285
|
-
|
56
|
+
static void FillHeader(uint8_t* p, uint8_t type, uint32_t id, size_t len,
|
57
|
+
uint8_t flags) {
|
286
58
|
/* len is the current frame size (i.e. for the frame we're finishing).
|
287
59
|
We finish a frame if:
|
288
60
|
1) We called ensure_space(), (i.e. add_tiny_header_data()) and adding
|
289
|
-
'need_bytes' to the frame would cause us to exceed
|
61
|
+
'need_bytes' to the frame would cause us to exceed max_frame_size.
|
290
62
|
2) We called add_header_data, and adding the slice would cause us to exceed
|
291
|
-
|
63
|
+
max_frame_size.
|
292
64
|
3) We're done encoding the header.
|
293
65
|
|
294
|
-
Thus, len is always <=
|
295
|
-
|
66
|
+
Thus, len is always <= max_frame_size.
|
67
|
+
max_frame_size is derived from GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE,
|
296
68
|
which has a max allowable value of 16777215 (see chttp_transport.cc).
|
297
69
|
Thus, the following assert can be a debug assert. */
|
298
70
|
GPR_DEBUG_ASSERT(len < 16777316);
|
@@ -307,174 +79,123 @@ static void fill_header(uint8_t* p, uint8_t type, uint32_t id, size_t len,
|
|
307
79
|
*p++ = static_cast<uint8_t>(id);
|
308
80
|
}
|
309
81
|
|
310
|
-
|
82
|
+
size_t HPackCompressor::Framer::CurrentFrameSize() const {
|
311
83
|
const size_t frame_size =
|
312
|
-
|
313
|
-
GPR_DEBUG_ASSERT(frame_size <=
|
84
|
+
output_->length - prefix_.output_length_at_start_of_frame;
|
85
|
+
GPR_DEBUG_ASSERT(frame_size <= max_frame_size_);
|
314
86
|
return frame_size;
|
315
87
|
}
|
316
88
|
|
317
|
-
|
318
|
-
|
319
|
-
uint8_t type =
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
static void begin_frame(framer_state* st) {
|
89
|
+
// finish a frame - fill in the previously reserved header
|
90
|
+
void HPackCompressor::Framer::FinishFrame(bool is_header_boundary) {
|
91
|
+
const uint8_t type = is_first_frame_ ? GRPC_CHTTP2_FRAME_HEADER
|
92
|
+
: GRPC_CHTTP2_FRAME_CONTINUATION;
|
93
|
+
uint8_t flags = 0;
|
94
|
+
// per the HTTP/2 spec:
|
95
|
+
// A HEADERS frame carries the END_STREAM flag that signals the end of a
|
96
|
+
// stream. However, a HEADERS frame with the END_STREAM flag set can be
|
97
|
+
// followed by CONTINUATION frames on the same stream. Logically, the
|
98
|
+
// CONTINUATION frames are part of the HEADERS frame.
|
99
|
+
// Thus, we add the END_STREAM flag to the HEADER frame (the first frame).
|
100
|
+
if (is_first_frame_ && is_end_of_stream_) {
|
101
|
+
flags |= GRPC_CHTTP2_DATA_FLAG_END_STREAM;
|
102
|
+
}
|
103
|
+
// per the HTTP/2 spec:
|
104
|
+
// A HEADERS frame without the END_HEADERS flag set MUST be followed by
|
105
|
+
// a CONTINUATION frame for the same stream.
|
106
|
+
// Thus, we add the END_HEADER flag to the last frame.
|
107
|
+
if (is_header_boundary) {
|
108
|
+
flags |= GRPC_CHTTP2_DATA_FLAG_END_HEADERS;
|
109
|
+
}
|
110
|
+
FillHeader(GRPC_SLICE_START_PTR(output_->slices[prefix_.header_idx]), type,
|
111
|
+
stream_id_, CurrentFrameSize(), flags);
|
112
|
+
stats_->framing_bytes += kDataFrameHeaderSize;
|
113
|
+
is_first_frame_ = false;
|
114
|
+
}
|
115
|
+
|
116
|
+
// begin a new frame: reserve off header space, remember how many bytes we'd
|
117
|
+
// output before beginning
|
118
|
+
HPackCompressor::Framer::FramePrefix HPackCompressor::Framer::BeginFrame() {
|
348
119
|
grpc_slice reserved;
|
349
120
|
reserved.refcount = nullptr;
|
350
121
|
reserved.data.inlined.length = kDataFrameHeaderSize;
|
351
|
-
|
352
|
-
|
122
|
+
return FramePrefix{grpc_slice_buffer_add_indexed(output_, reserved),
|
123
|
+
output_->length};
|
353
124
|
}
|
354
125
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
if (GPR_LIKELY(
|
126
|
+
// make sure that the current frame is of the type desired, and has sufficient
|
127
|
+
// space to add at least about_to_add bytes -- finishes the current frame if
|
128
|
+
// needed
|
129
|
+
void HPackCompressor::Framer::EnsureSpace(size_t need_bytes) {
|
130
|
+
if (GPR_LIKELY(CurrentFrameSize() + need_bytes <= max_frame_size_)) {
|
360
131
|
return;
|
361
132
|
}
|
362
|
-
|
363
|
-
|
133
|
+
FinishFrame(false);
|
134
|
+
prefix_ = BeginFrame();
|
364
135
|
}
|
365
136
|
|
366
|
-
|
367
|
-
size_t len = GRPC_SLICE_LENGTH(slice);
|
368
|
-
size_t remaining;
|
137
|
+
void HPackCompressor::Framer::Add(grpc_slice slice) {
|
138
|
+
const size_t len = GRPC_SLICE_LENGTH(slice);
|
369
139
|
if (len == 0) return;
|
370
|
-
remaining =
|
140
|
+
const size_t remaining = max_frame_size_ - CurrentFrameSize();
|
371
141
|
if (len <= remaining) {
|
372
|
-
|
373
|
-
grpc_slice_buffer_add(
|
142
|
+
stats_->header_bytes += len;
|
143
|
+
grpc_slice_buffer_add(output_, slice);
|
374
144
|
} else {
|
375
|
-
|
376
|
-
grpc_slice_buffer_add(
|
377
|
-
|
378
|
-
|
379
|
-
|
145
|
+
stats_->header_bytes += remaining;
|
146
|
+
grpc_slice_buffer_add(output_, grpc_slice_split_head(&slice, remaining));
|
147
|
+
FinishFrame(false);
|
148
|
+
prefix_ = BeginFrame();
|
149
|
+
Add(slice);
|
380
150
|
}
|
381
151
|
}
|
382
152
|
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
return grpc_slice_buffer_tiny_add(
|
387
|
-
}
|
388
|
-
|
389
|
-
static void evict_entry(grpc_chttp2_hpack_compressor* c) {
|
390
|
-
c->tail_remote_index++;
|
391
|
-
GPR_ASSERT(c->tail_remote_index > 0);
|
392
|
-
GPR_ASSERT(c->table_size >=
|
393
|
-
c->table_elem_size[c->tail_remote_index % c->cap_table_elems]);
|
394
|
-
GPR_ASSERT(c->table_elems > 0);
|
395
|
-
c->table_size = static_cast<uint16_t>(
|
396
|
-
c->table_size -
|
397
|
-
c->table_elem_size[c->tail_remote_index % c->cap_table_elems]);
|
398
|
-
c->table_elems--;
|
399
|
-
}
|
400
|
-
|
401
|
-
// Reserve space in table for the new element, evict entries if needed.
|
402
|
-
// Return the new index of the element. Return 0 to indicate not adding to
|
403
|
-
// table.
|
404
|
-
static uint32_t prepare_space_for_new_elem(grpc_chttp2_hpack_compressor* c,
|
405
|
-
size_t elem_size) {
|
406
|
-
uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
|
407
|
-
GPR_DEBUG_ASSERT(elem_size < 65536);
|
408
|
-
|
409
|
-
// TODO(arjunroy): Re-examine semantics
|
410
|
-
if (elem_size > c->max_table_size) {
|
411
|
-
while (c->table_size > 0) {
|
412
|
-
evict_entry(c);
|
413
|
-
}
|
414
|
-
return 0;
|
415
|
-
}
|
416
|
-
|
417
|
-
/* Reserve space for this element in the remote table: if this overflows
|
418
|
-
the current table, drop elements until it fits, matching the decompressor
|
419
|
-
algorithm */
|
420
|
-
while (c->table_size + elem_size > c->max_table_size) {
|
421
|
-
evict_entry(c);
|
422
|
-
}
|
423
|
-
GPR_ASSERT(c->table_elems < c->max_table_size);
|
424
|
-
c->table_elem_size[new_index % c->cap_table_elems] =
|
425
|
-
static_cast<uint16_t>(elem_size);
|
426
|
-
c->table_size = static_cast<uint16_t>(c->table_size + elem_size);
|
427
|
-
c->table_elems++;
|
428
|
-
|
429
|
-
return new_index;
|
153
|
+
uint8_t* HPackCompressor::Framer::AddTiny(size_t len) {
|
154
|
+
EnsureSpace(len);
|
155
|
+
stats_->header_bytes += len;
|
156
|
+
return grpc_slice_buffer_tiny_add(output_, len);
|
430
157
|
}
|
431
158
|
|
432
159
|
// Add a key to the dynamic table. Both key and value will be added to table at
|
433
160
|
// the decoder.
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
UpdateAddOrEvict<SliceRefComparator>(c->key_table.entries, key_ref, key_hash,
|
438
|
-
new_index);
|
161
|
+
void HPackCompressor::AddKeyWithIndex(grpc_slice_refcount* key_ref,
|
162
|
+
uint32_t new_index, uint32_t key_hash) {
|
163
|
+
key_index_.Insert(KeySliceRef(key_ref, key_hash), new_index);
|
439
164
|
}
|
440
165
|
|
441
166
|
/* add an element to the decoder table */
|
442
|
-
|
443
|
-
|
444
|
-
uint32_t key_hash) {
|
167
|
+
void HPackCompressor::AddElemWithIndex(grpc_mdelem elem, uint32_t new_index,
|
168
|
+
uint32_t elem_hash, uint32_t key_hash) {
|
445
169
|
GPR_DEBUG_ASSERT(GRPC_MDELEM_IS_INTERNED(elem));
|
446
|
-
|
447
|
-
|
448
|
-
AddKeyWithIndex(c, GRPC_MDKEY(elem).refcount, new_index, key_hash);
|
170
|
+
elem_index_.Insert(KeyElem(elem, elem_hash), new_index);
|
171
|
+
AddKeyWithIndex(GRPC_MDKEY(elem).refcount, new_index, key_hash);
|
449
172
|
}
|
450
173
|
|
451
|
-
|
452
|
-
|
453
|
-
uint32_t new_index =
|
174
|
+
void HPackCompressor::AddElem(grpc_mdelem elem, size_t elem_size,
|
175
|
+
uint32_t elem_hash, uint32_t key_hash) {
|
176
|
+
uint32_t new_index = table_.AllocateIndex(elem_size);
|
454
177
|
if (new_index != 0) {
|
455
|
-
AddElemWithIndex(
|
178
|
+
AddElemWithIndex(elem, new_index, elem_hash, key_hash);
|
456
179
|
}
|
457
180
|
}
|
458
181
|
|
459
|
-
|
460
|
-
|
461
|
-
uint32_t new_index =
|
182
|
+
void HPackCompressor::AddKey(grpc_mdelem elem, size_t elem_size,
|
183
|
+
uint32_t key_hash) {
|
184
|
+
uint32_t new_index = table_.AllocateIndex(elem_size);
|
462
185
|
if (new_index != 0) {
|
463
|
-
AddKeyWithIndex(
|
186
|
+
AddKeyWithIndex(GRPC_MDKEY(elem).refcount, new_index, key_hash);
|
464
187
|
}
|
465
188
|
}
|
466
189
|
|
467
|
-
|
468
|
-
uint32_t elem_index, framer_state* st) {
|
190
|
+
void HPackCompressor::Framer::EmitIndexed(uint32_t elem_index) {
|
469
191
|
GRPC_STATS_INC_HPACK_SEND_INDEXED();
|
470
|
-
|
471
|
-
|
472
|
-
len);
|
192
|
+
VarintWriter<1> w(elem_index);
|
193
|
+
w.Write(0x80, AddTiny(w.length()));
|
473
194
|
}
|
474
195
|
|
475
|
-
struct
|
476
|
-
|
477
|
-
|
196
|
+
struct WireValue {
|
197
|
+
WireValue(uint8_t huffman_prefix, bool insert_null_before_wire_value,
|
198
|
+
const grpc_slice& slice)
|
478
199
|
: data(slice),
|
479
200
|
huffman_prefix(huffman_prefix),
|
480
201
|
insert_null_before_wire_value(insert_null_before_wire_value),
|
@@ -488,124 +209,131 @@ struct wire_value {
|
|
488
209
|
const size_t length;
|
489
210
|
};
|
490
211
|
|
491
|
-
|
492
|
-
|
493
|
-
const bool is_bin_hdr =
|
494
|
-
mdkey_definitely_interned
|
495
|
-
? grpc_is_refcounted_slice_binary_header(GRPC_MDKEY(elem))
|
496
|
-
: grpc_is_binary_header_internal(GRPC_MDKEY(elem));
|
497
|
-
const grpc_slice& value = GRPC_MDVALUE(elem);
|
212
|
+
static WireValue GetWireValue(const grpc_slice& value, bool true_binary_enabled,
|
213
|
+
bool is_bin_hdr) {
|
498
214
|
if (is_bin_hdr) {
|
499
215
|
if (true_binary_enabled) {
|
500
216
|
GRPC_STATS_INC_HPACK_SEND_BINARY();
|
501
|
-
return
|
217
|
+
return WireValue(0x00, true, grpc_slice_ref_internal(value));
|
502
218
|
} else {
|
503
219
|
GRPC_STATS_INC_HPACK_SEND_BINARY_BASE64();
|
504
|
-
return
|
505
|
-
|
220
|
+
return WireValue(0x80, false,
|
221
|
+
grpc_chttp2_base64_encode_and_huffman_compress(value));
|
506
222
|
}
|
507
223
|
} else {
|
508
224
|
/* TODO(ctiller): opportunistically compress non-binary headers */
|
509
225
|
GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED();
|
510
|
-
return
|
226
|
+
return WireValue(0x00, false, grpc_slice_ref_internal(value));
|
511
227
|
}
|
512
228
|
}
|
513
229
|
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
}
|
230
|
+
struct DefinitelyInterned {
|
231
|
+
static bool IsBinary(grpc_slice key) {
|
232
|
+
return grpc_is_refcounted_slice_binary_header(key);
|
233
|
+
}
|
234
|
+
};
|
235
|
+
struct UnsureIfInterned {
|
236
|
+
static bool IsBinary(grpc_slice key) {
|
237
|
+
return grpc_is_binary_header_internal(key);
|
238
|
+
}
|
239
|
+
};
|
518
240
|
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX();
|
531
|
-
break;
|
532
|
-
case EmitLitHdrType::NO_IDX:
|
533
|
-
GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX();
|
534
|
-
break;
|
241
|
+
class StringValue {
|
242
|
+
public:
|
243
|
+
template <typename MetadataKeyType>
|
244
|
+
StringValue(MetadataKeyType, grpc_mdelem elem, bool use_true_binary_metadata)
|
245
|
+
: wire_value_(GetWireValue(GRPC_MDVALUE(elem), use_true_binary_metadata,
|
246
|
+
MetadataKeyType::IsBinary(GRPC_MDKEY(elem)))),
|
247
|
+
len_val_(wire_value_.length) {}
|
248
|
+
|
249
|
+
size_t prefix_length() const {
|
250
|
+
return len_val_.length() +
|
251
|
+
(wire_value_.insert_null_before_wire_value ? 1 : 0);
|
535
252
|
}
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
const uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
|
543
|
-
GPR_DEBUG_ASSERT(len_pfx + len_val_len < GRPC_SLICE_INLINED_SIZE);
|
544
|
-
uint8_t* data = add_tiny_header_data(
|
545
|
-
st,
|
546
|
-
len_pfx + len_val_len + (value.insert_null_before_wire_value ? 1 : 0));
|
547
|
-
switch (type) {
|
548
|
-
case EmitLitHdrType::INC_IDX:
|
549
|
-
GRPC_CHTTP2_WRITE_VARINT(key_index, 2, 0x40, data, len_pfx);
|
550
|
-
break;
|
551
|
-
case EmitLitHdrType::NO_IDX:
|
552
|
-
GRPC_CHTTP2_WRITE_VARINT(key_index, 4, 0x00, data, len_pfx);
|
553
|
-
break;
|
253
|
+
|
254
|
+
void WritePrefix(uint8_t* prefix_data) {
|
255
|
+
len_val_.Write(wire_value_.huffman_prefix, prefix_data);
|
256
|
+
if (wire_value_.insert_null_before_wire_value) {
|
257
|
+
prefix_data[len_val_.length()] = 0;
|
258
|
+
}
|
554
259
|
}
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
260
|
+
|
261
|
+
const grpc_slice& data() { return wire_value_.data; }
|
262
|
+
|
263
|
+
private:
|
264
|
+
WireValue wire_value_;
|
265
|
+
VarintWriter<1> len_val_;
|
266
|
+
};
|
267
|
+
|
268
|
+
class StringKey {
|
269
|
+
public:
|
270
|
+
explicit StringKey(grpc_slice key)
|
271
|
+
: key_(key), len_key_(GRPC_SLICE_LENGTH(key)) {}
|
272
|
+
|
273
|
+
size_t prefix_length() const { return 1 + len_key_.length(); }
|
274
|
+
|
275
|
+
void WritePrefix(uint8_t type, uint8_t* data) {
|
276
|
+
data[0] = type;
|
277
|
+
len_key_.Write(0x00, data + 1);
|
559
278
|
}
|
560
|
-
|
279
|
+
|
280
|
+
grpc_slice key() const { return key_; }
|
281
|
+
|
282
|
+
private:
|
283
|
+
grpc_slice key_;
|
284
|
+
VarintWriter<1> len_key_;
|
285
|
+
};
|
286
|
+
|
287
|
+
void HPackCompressor::Framer::EmitLitHdrIncIdx(uint32_t key_index,
|
288
|
+
grpc_mdelem elem) {
|
289
|
+
GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX();
|
290
|
+
StringValue emit(DefinitelyInterned(), elem, use_true_binary_metadata_);
|
291
|
+
VarintWriter<2> key(key_index);
|
292
|
+
uint8_t* data = AddTiny(key.length() + emit.prefix_length());
|
293
|
+
key.Write(0x40, data);
|
294
|
+
emit.WritePrefix(data + key.length());
|
295
|
+
Add(emit.data());
|
296
|
+
}
|
297
|
+
|
298
|
+
void HPackCompressor::Framer::EmitLitHdrNotIdx(uint32_t key_index,
|
299
|
+
grpc_mdelem elem) {
|
300
|
+
GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX();
|
301
|
+
StringValue emit(DefinitelyInterned(), elem, use_true_binary_metadata_);
|
302
|
+
VarintWriter<4> key(key_index);
|
303
|
+
uint8_t* data = AddTiny(key.length() + emit.prefix_length());
|
304
|
+
key.Write(0x00, data);
|
305
|
+
emit.WritePrefix(data + key.length());
|
306
|
+
Add(emit.data());
|
307
|
+
}
|
308
|
+
|
309
|
+
void HPackCompressor::Framer::EmitLitHdrWithStringKeyIncIdx(grpc_mdelem elem) {
|
310
|
+
GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX_V();
|
311
|
+
GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED();
|
312
|
+
StringKey key(GRPC_MDKEY(elem));
|
313
|
+
key.WritePrefix(0x40, AddTiny(key.prefix_length()));
|
314
|
+
Add(grpc_slice_ref_internal(key.key()));
|
315
|
+
StringValue emit(DefinitelyInterned(), elem, use_true_binary_metadata_);
|
316
|
+
emit.WritePrefix(AddTiny(emit.prefix_length()));
|
317
|
+
Add(emit.data());
|
561
318
|
}
|
562
319
|
|
563
|
-
|
564
|
-
|
565
|
-
framer_state* st) {
|
566
|
-
switch (type) {
|
567
|
-
case EmitLitHdrVType::INC_IDX_V:
|
568
|
-
GRPC_STATS_INC_HPACK_SEND_LITHDR_INCIDX_V();
|
569
|
-
break;
|
570
|
-
case EmitLitHdrVType::NO_IDX_V:
|
571
|
-
GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX_V();
|
572
|
-
break;
|
573
|
-
}
|
320
|
+
void HPackCompressor::Framer::EmitLitHdrWithStringKeyNotIdx(grpc_mdelem elem) {
|
321
|
+
GRPC_STATS_INC_HPACK_SEND_LITHDR_NOTIDX_V();
|
574
322
|
GRPC_STATS_INC_HPACK_SEND_UNCOMPRESSED();
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
const uint32_t len_val = wire_value_length(value);
|
582
|
-
const uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
|
583
|
-
const uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
|
584
|
-
GPR_DEBUG_ASSERT(len_key <= UINT32_MAX);
|
585
|
-
GPR_DEBUG_ASSERT(1 + len_key_len < GRPC_SLICE_INLINED_SIZE);
|
586
|
-
uint8_t* key_buf = add_tiny_header_data(st, 1 + len_key_len);
|
587
|
-
key_buf[0] = type == EmitLitHdrVType::INC_IDX_V ? 0x40 : 0x00;
|
588
|
-
GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00, &key_buf[1], len_key_len);
|
589
|
-
add_header_data(st, grpc_slice_ref_internal(GRPC_MDKEY(elem)));
|
590
|
-
uint8_t* value_buf = add_tiny_header_data(
|
591
|
-
st, len_val_len + (value.insert_null_before_wire_value ? 1 : 0));
|
592
|
-
GRPC_CHTTP2_WRITE_VARINT(len_val, 1, value.huffman_prefix, value_buf,
|
593
|
-
len_val_len);
|
594
|
-
if (value.insert_null_before_wire_value) {
|
595
|
-
value_buf[len_val_len] = 0;
|
596
|
-
}
|
597
|
-
add_header_data(st, value.data);
|
323
|
+
StringKey key(GRPC_MDKEY(elem));
|
324
|
+
key.WritePrefix(0x00, AddTiny(key.prefix_length()));
|
325
|
+
Add(grpc_slice_ref_internal(key.key()));
|
326
|
+
StringValue emit(UnsureIfInterned(), elem, use_true_binary_metadata_);
|
327
|
+
emit.WritePrefix(AddTiny(emit.prefix_length()));
|
328
|
+
Add(emit.data());
|
598
329
|
}
|
599
330
|
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
GRPC_CHTTP2_WRITE_VARINT(c->max_table_size, 3, 0x20,
|
604
|
-
add_tiny_header_data(st, len), len);
|
605
|
-
c->advertise_table_size_change = 0;
|
331
|
+
void HPackCompressor::Framer::AdvertiseTableSizeChange() {
|
332
|
+
VarintWriter<3> w(compressor_->table_.max_size());
|
333
|
+
w.Write(0x20, AddTiny(w.length()));
|
606
334
|
}
|
607
335
|
|
608
|
-
|
336
|
+
void HPackCompressor::Framer::Log(grpc_mdelem elem) {
|
609
337
|
char* k = grpc_slice_to_c_string(GRPC_MDKEY(elem));
|
610
338
|
char* v = nullptr;
|
611
339
|
if (grpc_is_binary_header_internal(GRPC_MDKEY(elem))) {
|
@@ -623,11 +351,6 @@ static void GPR_ATTRIBUTE_NOINLINE hpack_enc_log(grpc_mdelem elem) {
|
|
623
351
|
gpr_free(v);
|
624
352
|
}
|
625
353
|
|
626
|
-
static uint32_t dynidx(grpc_chttp2_hpack_compressor* c, uint32_t elem_index) {
|
627
|
-
return 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY + c->tail_remote_index +
|
628
|
-
c->table_elems - elem_index;
|
629
|
-
}
|
630
|
-
|
631
354
|
struct EmitIndexedStatus {
|
632
355
|
EmitIndexedStatus() = default;
|
633
356
|
EmitIndexedStatus(uint32_t elem_hash, bool emitted, bool can_add)
|
@@ -637,264 +360,147 @@ struct EmitIndexedStatus {
|
|
637
360
|
const bool can_add = false;
|
638
361
|
};
|
639
362
|
|
640
|
-
static EmitIndexedStatus maybe_emit_indexed(grpc_chttp2_hpack_compressor* c,
|
641
|
-
grpc_mdelem elem,
|
642
|
-
framer_state* st) {
|
643
|
-
const uint32_t elem_hash =
|
644
|
-
GRPC_MDELEM_STORAGE(elem) == GRPC_MDELEM_STORAGE_INTERNED
|
645
|
-
? reinterpret_cast<grpc_core::InternedMetadata*>(
|
646
|
-
GRPC_MDELEM_DATA(elem))
|
647
|
-
->hash()
|
648
|
-
: reinterpret_cast<grpc_core::StaticMetadata*>(GRPC_MDELEM_DATA(elem))
|
649
|
-
->hash();
|
650
|
-
/* Update filter to see if we can perhaps add this elem. */
|
651
|
-
const uint32_t popularity_hash = UpdateHashtablePopularity(c, elem_hash);
|
652
|
-
/* is this elem currently in the decoders table? */
|
653
|
-
HpackEncoderIndex indices_key;
|
654
|
-
if (GetMatchingIndex<MetadataComparator>(c->elem_table.entries, elem,
|
655
|
-
elem_hash, &indices_key) &&
|
656
|
-
indices_key > c->tail_remote_index) {
|
657
|
-
emit_indexed(c, dynidx(c, indices_key), st);
|
658
|
-
return EmitIndexedStatus(elem_hash, true, false);
|
659
|
-
}
|
660
|
-
/* Didn't hit either cuckoo index, so no emit. */
|
661
|
-
return EmitIndexedStatus(elem_hash, false,
|
662
|
-
CanAddToHashtable(c, popularity_hash));
|
663
|
-
}
|
664
|
-
|
665
|
-
static void emit_maybe_add(grpc_chttp2_hpack_compressor* c, grpc_mdelem elem,
|
666
|
-
framer_state* st, uint32_t indices_key,
|
667
|
-
bool should_add_elem, size_t decoder_space_usage,
|
668
|
-
uint32_t elem_hash, uint32_t key_hash) {
|
669
|
-
if (should_add_elem) {
|
670
|
-
emit_lithdr<EmitLitHdrType::INC_IDX>(c, dynidx(c, indices_key), elem, st);
|
671
|
-
add_elem(c, elem, decoder_space_usage, elem_hash, key_hash);
|
672
|
-
} else {
|
673
|
-
emit_lithdr<EmitLitHdrType::NO_IDX>(c, dynidx(c, indices_key), elem, st);
|
674
|
-
}
|
675
|
-
}
|
676
|
-
|
677
363
|
/* encode an mdelem */
|
678
|
-
|
679
|
-
framer_state* st) {
|
364
|
+
void HPackCompressor::Framer::EncodeDynamic(grpc_mdelem elem) {
|
680
365
|
const grpc_slice& elem_key = GRPC_MDKEY(elem);
|
681
|
-
|
366
|
+
// User-provided key len validated in grpc_validate_header_key_is_legal().
|
682
367
|
GPR_DEBUG_ASSERT(GRPC_SLICE_LENGTH(elem_key) > 0);
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
368
|
+
// Header ordering: all reserved headers (prefixed with ':') must precede
|
369
|
+
// regular headers. This can be a debug assert, since:
|
370
|
+
// 1) User cannot give us ':' headers (grpc_validate_header_key_is_legal()).
|
371
|
+
// 2) grpc filters/core should be checked during debug builds. */
|
687
372
|
#ifndef NDEBUG
|
688
373
|
if (GRPC_SLICE_START_PTR(elem_key)[0] != ':') { /* regular header */
|
689
|
-
|
374
|
+
seen_regular_header_ = true;
|
690
375
|
} else {
|
691
376
|
GPR_DEBUG_ASSERT(
|
692
|
-
|
377
|
+
!seen_regular_header_ &&
|
693
378
|
"Reserved header (colon-prefixed) happening after regular ones.");
|
694
379
|
}
|
695
380
|
#endif
|
696
381
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
697
|
-
|
382
|
+
Log(elem);
|
698
383
|
}
|
699
384
|
const bool elem_interned = GRPC_MDELEM_IS_INTERNED(elem);
|
700
385
|
const bool key_interned = elem_interned || grpc_slice_is_interned(elem_key);
|
701
|
-
|
386
|
+
// Key is not interned, emit literals.
|
702
387
|
if (!key_interned) {
|
703
|
-
|
388
|
+
EmitLitHdrWithStringKeyNotIdx(elem);
|
704
389
|
return;
|
705
390
|
}
|
706
391
|
/* Interned metadata => maybe already indexed. */
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
392
|
+
uint32_t elem_hash = 0;
|
393
|
+
if (elem_interned) {
|
394
|
+
// Update filter to see if we can perhaps add this elem.
|
395
|
+
elem_hash = GRPC_MDELEM_STORAGE(elem) == GRPC_MDELEM_STORAGE_INTERNED
|
396
|
+
? reinterpret_cast<grpc_core::InternedMetadata*>(
|
397
|
+
GRPC_MDELEM_DATA(elem))
|
398
|
+
->hash()
|
399
|
+
: reinterpret_cast<grpc_core::StaticMetadata*>(
|
400
|
+
GRPC_MDELEM_DATA(elem))
|
401
|
+
->hash();
|
402
|
+
bool can_add_to_hashtable =
|
403
|
+
compressor_->filter_elems_.AddElement(elem_hash % kNumFilterValues);
|
404
|
+
/* is this elem currently in the decoders table? */
|
405
|
+
auto indices_key =
|
406
|
+
compressor_->elem_index_.Lookup(KeyElem(elem, elem_hash));
|
407
|
+
if (indices_key.has_value() &&
|
408
|
+
compressor_->table_.ConvertableToDynamicIndex(*indices_key)) {
|
409
|
+
EmitIndexed(compressor_->table_.DynamicIndex(*indices_key));
|
410
|
+
return;
|
411
|
+
}
|
412
|
+
/* Didn't hit either cuckoo index, so no emit. */
|
413
|
+
if (!can_add_to_hashtable) elem_hash = 0;
|
711
414
|
}
|
415
|
+
|
712
416
|
/* should this elem be in the table? */
|
713
417
|
const size_t decoder_space_usage =
|
714
|
-
|
418
|
+
grpc_core::MetadataSizeInHPackTable(elem, use_true_binary_metadata_);
|
715
419
|
const bool decoder_space_available =
|
716
420
|
decoder_space_usage < kMaxDecoderSpaceUsage;
|
717
421
|
const bool should_add_elem =
|
718
|
-
elem_interned && decoder_space_available &&
|
719
|
-
const uint32_t elem_hash = ret.elem_hash;
|
422
|
+
elem_interned && decoder_space_available && elem_hash != 0;
|
720
423
|
/* no hits for the elem... maybe there's a key? */
|
721
424
|
const uint32_t key_hash = elem_key.refcount->Hash(elem_key);
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
indices_key
|
726
|
-
|
727
|
-
|
425
|
+
auto indices_key =
|
426
|
+
compressor_->key_index_.Lookup(KeySliceRef(elem_key.refcount, key_hash));
|
427
|
+
if (indices_key.has_value() &&
|
428
|
+
compressor_->table_.ConvertableToDynamicIndex(*indices_key)) {
|
429
|
+
if (should_add_elem) {
|
430
|
+
EmitLitHdrIncIdx(compressor_->table_.DynamicIndex(*indices_key), elem);
|
431
|
+
compressor_->AddElem(elem, decoder_space_usage, elem_hash, key_hash);
|
432
|
+
} else {
|
433
|
+
EmitLitHdrNotIdx(compressor_->table_.DynamicIndex(*indices_key), elem);
|
434
|
+
}
|
728
435
|
return;
|
729
436
|
}
|
730
437
|
/* no elem, key in the table... fall back to literal emission */
|
731
438
|
const bool should_add_key = !elem_interned && decoder_space_available;
|
732
439
|
if (should_add_elem || should_add_key) {
|
733
|
-
|
440
|
+
EmitLitHdrWithStringKeyIncIdx(elem);
|
734
441
|
} else {
|
735
|
-
|
442
|
+
EmitLitHdrWithStringKeyNotIdx(elem);
|
736
443
|
}
|
737
444
|
if (should_add_elem) {
|
738
|
-
|
445
|
+
compressor_->AddElem(elem, decoder_space_usage, elem_hash, key_hash);
|
739
446
|
} else if (should_add_key) {
|
740
|
-
|
447
|
+
compressor_->AddKey(elem, decoder_space_usage, key_hash);
|
741
448
|
}
|
742
449
|
}
|
743
450
|
|
744
|
-
|
745
|
-
#define TIMEOUT_KEY "grpc-timeout"
|
746
|
-
|
747
|
-
static void deadline_enc(grpc_chttp2_hpack_compressor* c, grpc_millis deadline,
|
748
|
-
framer_state* st) {
|
451
|
+
void HPackCompressor::Framer::EncodeDeadline(grpc_millis deadline) {
|
749
452
|
char timeout_str[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
|
750
453
|
grpc_mdelem mdelem;
|
751
454
|
grpc_http2_encode_timeout(deadline - grpc_core::ExecCtx::Get()->Now(),
|
752
455
|
timeout_str);
|
753
456
|
mdelem = grpc_mdelem_from_slices(
|
754
457
|
GRPC_MDSTR_GRPC_TIMEOUT, grpc_core::UnmanagedMemorySlice(timeout_str));
|
755
|
-
|
458
|
+
EncodeDynamic(mdelem);
|
756
459
|
GRPC_MDELEM_UNREF(mdelem);
|
757
460
|
}
|
758
461
|
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
memset(c, 0, sizeof(*c));
|
763
|
-
c->max_table_size = GRPC_CHTTP2_HPACKC_INITIAL_TABLE_SIZE;
|
764
|
-
c->cap_table_elems = elems_for_bytes(c->max_table_size);
|
765
|
-
c->max_table_elems = c->cap_table_elems;
|
766
|
-
c->max_usable_size = GRPC_CHTTP2_HPACKC_INITIAL_TABLE_SIZE;
|
767
|
-
const size_t alloc_size = sizeof(*c->table_elem_size) * c->cap_table_elems;
|
768
|
-
c->table_elem_size = static_cast<uint16_t*>(gpr_malloc(alloc_size));
|
769
|
-
memset(c->table_elem_size, 0, alloc_size);
|
462
|
+
void HPackCompressor::SetMaxUsableSize(uint32_t max_table_size) {
|
463
|
+
max_usable_size_ = max_table_size;
|
464
|
+
SetMaxTableSize(std::min(table_.max_size(), max_table_size));
|
770
465
|
}
|
771
466
|
|
772
|
-
void
|
773
|
-
|
774
|
-
|
775
|
-
if (
|
776
|
-
|
467
|
+
void HPackCompressor::SetMaxTableSize(uint32_t max_table_size) {
|
468
|
+
if (table_.SetMaxSize(std::min(max_usable_size_, max_table_size))) {
|
469
|
+
advertise_table_size_change_ = true;
|
470
|
+
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
471
|
+
gpr_log(GPR_INFO, "set max table size from encoder to %d",
|
472
|
+
max_table_size);
|
777
473
|
}
|
778
|
-
GRPC_MDELEM_UNREF(GetEntry<grpc_mdelem>(c->elem_table.entries, i));
|
779
474
|
}
|
780
|
-
gpr_free(c->table_elem_size);
|
781
|
-
}
|
782
|
-
|
783
|
-
void grpc_chttp2_hpack_compressor_set_max_usable_size(
|
784
|
-
grpc_chttp2_hpack_compressor* c, uint32_t max_table_size) {
|
785
|
-
c->max_usable_size = max_table_size;
|
786
|
-
grpc_chttp2_hpack_compressor_set_max_table_size(
|
787
|
-
c, GPR_MIN(c->max_table_size, max_table_size));
|
788
475
|
}
|
789
476
|
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
|
477
|
+
HPackCompressor::Framer::Framer(const EncodeHeaderOptions& options,
|
478
|
+
HPackCompressor* compressor,
|
479
|
+
grpc_slice_buffer* output)
|
480
|
+
: max_frame_size_(options.max_frame_size),
|
481
|
+
use_true_binary_metadata_(options.use_true_binary_metadata),
|
482
|
+
is_end_of_stream_(options.is_end_of_stream),
|
483
|
+
stream_id_(options.stream_id),
|
484
|
+
output_(output),
|
485
|
+
stats_(options.stats),
|
486
|
+
compressor_(compressor),
|
487
|
+
prefix_(BeginFrame()) {
|
488
|
+
if (absl::exchange(compressor_->advertise_table_size_change_, false)) {
|
489
|
+
AdvertiseTableSizeChange();
|
802
490
|
}
|
803
|
-
|
804
|
-
c->cap_table_elems = new_cap;
|
805
|
-
gpr_free(c->table_elem_size);
|
806
|
-
c->table_elem_size = table_elem_size;
|
807
491
|
}
|
808
492
|
|
809
|
-
void
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
}
|
818
|
-
c->max_table_size = max_table_size;
|
819
|
-
c->max_table_elems = elems_for_bytes(max_table_size);
|
820
|
-
if (c->max_table_elems > c->cap_table_elems) {
|
821
|
-
rebuild_elems(c, GPR_MAX(c->max_table_elems, 2 * c->cap_table_elems));
|
822
|
-
} else if (c->max_table_elems < c->cap_table_elems / 3) {
|
823
|
-
uint32_t new_cap = GPR_MAX(c->max_table_elems, 16);
|
824
|
-
if (new_cap != c->cap_table_elems) {
|
825
|
-
rebuild_elems(c, new_cap);
|
493
|
+
void HPackCompressor::Framer::Encode(grpc_mdelem md) {
|
494
|
+
if (GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC) {
|
495
|
+
const uintptr_t static_index =
|
496
|
+
reinterpret_cast<grpc_core::StaticMetadata*>(GRPC_MDELEM_DATA(md))
|
497
|
+
->StaticIndex();
|
498
|
+
if (static_index < hpack_constants::kLastStaticEntry) {
|
499
|
+
EmitIndexed(static_cast<uint32_t>(static_index + 1));
|
500
|
+
return;
|
826
501
|
}
|
827
502
|
}
|
828
|
-
|
829
|
-
if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
|
830
|
-
gpr_log(GPR_INFO, "set max table size from encoder to %d", max_table_size);
|
831
|
-
}
|
503
|
+
EncodeDynamic(md);
|
832
504
|
}
|
833
505
|
|
834
|
-
|
835
|
-
grpc_mdelem** extra_headers,
|
836
|
-
size_t extra_headers_size,
|
837
|
-
grpc_metadata_batch* metadata,
|
838
|
-
const grpc_encode_header_options* options,
|
839
|
-
grpc_slice_buffer* outbuf) {
|
840
|
-
/* grpc_chttp2_encode_header is called by FlushInitial/TrailingMetadata in
|
841
|
-
writing.cc. Specifically, on streams returned by NextStream(), which
|
842
|
-
returns streams from the list GRPC_CHTTP2_LIST_WRITABLE. The only way to be
|
843
|
-
added to the list is via grpc_chttp2_list_add_writable_stream(), which
|
844
|
-
validates that stream_id is not 0. So, this can be a debug assert. */
|
845
|
-
GPR_DEBUG_ASSERT(options->stream_id != 0);
|
846
|
-
framer_state st;
|
847
|
-
#ifndef NDEBUG
|
848
|
-
st.seen_regular_header = 0;
|
849
|
-
#endif
|
850
|
-
st.stream_id = options->stream_id;
|
851
|
-
st.output = outbuf;
|
852
|
-
st.is_first_frame = 1;
|
853
|
-
st.stats = options->stats;
|
854
|
-
st.max_frame_size = options->max_frame_size;
|
855
|
-
st.use_true_binary_metadata = options->use_true_binary_metadata;
|
856
|
-
st.is_end_of_stream = options->is_eof;
|
857
|
-
|
858
|
-
/* Encode a metadata batch; store the returned values, representing
|
859
|
-
a metadata element that needs to be unreffed back into the metadata
|
860
|
-
slot. THIS MAY NOT BE THE SAME ELEMENT (if a decoder table slot got
|
861
|
-
updated). After this loop, we'll do a batch unref of elements. */
|
862
|
-
begin_frame(&st);
|
863
|
-
if (c->advertise_table_size_change != 0) {
|
864
|
-
emit_advertise_table_size_change(c, &st);
|
865
|
-
}
|
866
|
-
for (size_t i = 0; i < extra_headers_size; ++i) {
|
867
|
-
grpc_mdelem md = *extra_headers[i];
|
868
|
-
const bool is_static =
|
869
|
-
GRPC_MDELEM_STORAGE(md) == GRPC_MDELEM_STORAGE_STATIC;
|
870
|
-
uintptr_t static_index;
|
871
|
-
if (is_static &&
|
872
|
-
(static_index =
|
873
|
-
reinterpret_cast<grpc_core::StaticMetadata*>(GRPC_MDELEM_DATA(md))
|
874
|
-
->StaticIndex()) < GRPC_CHTTP2_LAST_STATIC_ENTRY) {
|
875
|
-
emit_indexed(c, static_cast<uint32_t>(static_index + 1), &st);
|
876
|
-
} else {
|
877
|
-
hpack_enc(c, md, &st);
|
878
|
-
}
|
879
|
-
}
|
880
|
-
grpc_metadata_batch_assert_ok(metadata);
|
881
|
-
for (grpc_linked_mdelem* l = metadata->list.head; l; l = l->next) {
|
882
|
-
const bool is_static =
|
883
|
-
GRPC_MDELEM_STORAGE(l->md) == GRPC_MDELEM_STORAGE_STATIC;
|
884
|
-
uintptr_t static_index;
|
885
|
-
if (is_static &&
|
886
|
-
(static_index = reinterpret_cast<grpc_core::StaticMetadata*>(
|
887
|
-
GRPC_MDELEM_DATA(l->md))
|
888
|
-
->StaticIndex()) < GRPC_CHTTP2_LAST_STATIC_ENTRY) {
|
889
|
-
emit_indexed(c, static_cast<uint32_t>(static_index + 1), &st);
|
890
|
-
} else {
|
891
|
-
hpack_enc(c, l->md, &st);
|
892
|
-
}
|
893
|
-
}
|
894
|
-
grpc_millis deadline = metadata->deadline;
|
895
|
-
if (deadline != GRPC_MILLIS_INF_FUTURE) {
|
896
|
-
deadline_enc(c, deadline, &st);
|
897
|
-
}
|
898
|
-
|
899
|
-
finish_frame(&st, 1);
|
900
|
-
}
|
506
|
+
} // namespace grpc_core
|