grpc 1.46.3-x86_64-linux → 1.47.0-x86_64-linux
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +49 -97
- data/include/grpc/event_engine/event_engine.h +42 -7
- data/include/grpc/event_engine/memory_allocator.h +0 -15
- data/include/grpc/event_engine/port.h +1 -1
- data/include/grpc/event_engine/slice.h +286 -0
- data/include/grpc/event_engine/slice_buffer.h +112 -0
- data/include/grpc/grpc_security.h +11 -0
- data/include/grpc/impl/codegen/port_platform.h +100 -36
- data/include/grpc/impl/codegen/slice.h +1 -1
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
- data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
- data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
- data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
- data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
- data/src/core/ext/filters/client_channel/client_channel.h +26 -6
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
- data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
- data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
- data/src/core/ext/filters/client_channel/config_selector.h +7 -5
- data/src/core/ext/filters/client_channel/connector.h +8 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
- data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
- data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
- data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
- data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
- data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
- data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
- data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
- data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
- data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
- data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
- data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
- data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
- data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
- data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
- data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
- data/src/core/ext/filters/client_channel/subchannel.h +80 -20
- data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
- data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
- data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
- data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
- data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
- data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
- data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
- data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
- data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
- data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
- data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
- data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
- data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
- data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
- data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
- data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
- data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
- data/src/core/ext/xds/certificate_provider_store.cc +4 -2
- data/src/core/ext/xds/certificate_provider_store.h +1 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
- data/src/core/ext/xds/xds_certificate_provider.h +1 -1
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
- data/src/core/ext/xds/xds_client.cc +46 -22
- data/src/core/ext/xds/xds_cluster.cc +106 -16
- data/src/core/ext/xds/xds_cluster.h +3 -0
- data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
- data/src/core/ext/xds/xds_listener.cc +19 -9
- data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
- data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
- data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
- data/src/core/lib/avl/avl.h +3 -1
- data/src/core/lib/channel/call_finalization.h +4 -0
- data/src/core/lib/channel/call_tracer.h +8 -2
- data/src/core/lib/channel/channel_args.cc +41 -22
- data/src/core/lib/channel/channel_args.h +33 -3
- data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
- data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
- data/src/core/lib/channel/channel_stack.cc +41 -3
- data/src/core/lib/channel/channel_stack.h +49 -3
- data/src/core/lib/channel/channel_stack_builder.cc +9 -19
- data/src/core/lib/channel/channel_stack_builder.h +15 -27
- data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
- data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
- data/src/core/lib/channel/channel_trace.cc +8 -13
- data/src/core/lib/channel/channel_trace.h +6 -3
- data/src/core/lib/channel/channelz.cc +8 -13
- data/src/core/lib/channel/channelz.h +13 -4
- data/src/core/lib/channel/channelz_registry.cc +7 -14
- data/src/core/lib/channel/channelz_registry.h +10 -9
- data/src/core/lib/channel/connected_channel.cc +21 -31
- data/src/core/lib/channel/connected_channel.h +1 -0
- data/src/core/lib/channel/promise_based_filter.cc +444 -189
- data/src/core/lib/channel/promise_based_filter.h +160 -27
- data/src/core/lib/channel/status_util.cc +2 -0
- data/src/core/lib/channel/status_util.h +0 -3
- data/src/core/lib/compression/compression_internal.cc +45 -10
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +3 -0
- data/src/core/lib/config/core_configuration.h +2 -1
- data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
- data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
- data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
- data/src/core/lib/event_engine/event_engine.cc +12 -2
- data/src/core/lib/event_engine/event_engine_factory.h +5 -0
- data/src/core/lib/event_engine/handle_containers.h +67 -0
- data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
- data/src/core/lib/event_engine/iomgr_engine.h +118 -0
- data/src/core/lib/event_engine/memory_allocator.cc +12 -4
- data/src/core/lib/event_engine/resolved_address.cc +4 -2
- data/src/core/lib/event_engine/slice.cc +102 -0
- data/src/core/lib/event_engine/slice_buffer.cc +50 -0
- data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
- data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
- data/src/core/lib/gpr/log.cc +5 -0
- data/src/core/lib/gpr/tls.h +3 -5
- data/src/core/lib/gprpp/bitset.h +5 -1
- data/src/core/lib/gprpp/chunked_vector.h +4 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
- data/src/core/lib/gprpp/examine_stack.h +0 -1
- data/src/core/lib/gprpp/fork.cc +3 -6
- data/src/core/lib/gprpp/global_config.h +2 -4
- data/src/core/lib/gprpp/global_config_env.cc +3 -2
- data/src/core/lib/gprpp/global_config_env.h +3 -1
- data/src/core/lib/gprpp/global_config_generic.h +0 -4
- data/src/core/lib/gprpp/host_port.cc +2 -0
- data/src/core/lib/gprpp/manual_constructor.h +0 -1
- data/src/core/lib/gprpp/match.h +2 -0
- data/src/core/lib/gprpp/memory.h +1 -5
- data/src/core/lib/gprpp/orphanable.h +1 -4
- data/src/core/lib/gprpp/ref_counted.h +1 -3
- data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
- data/src/core/lib/gprpp/stat.h +0 -2
- data/src/core/lib/gprpp/stat_posix.cc +7 -2
- data/src/core/lib/gprpp/status_helper.cc +8 -4
- data/src/core/lib/gprpp/status_helper.h +4 -0
- data/src/core/lib/gprpp/sync.h +3 -1
- data/src/core/lib/gprpp/table.h +10 -0
- data/src/core/lib/gprpp/thd.h +2 -5
- data/src/core/lib/gprpp/thd_posix.cc +4 -2
- data/src/core/lib/gprpp/thd_windows.cc +2 -0
- data/src/core/lib/gprpp/time.cc +8 -0
- data/src/core/lib/gprpp/time.h +6 -1
- data/src/core/lib/gprpp/time_util.cc +4 -0
- data/src/core/lib/gprpp/time_util.h +1 -1
- data/src/core/lib/gprpp/unique_type_name.h +104 -0
- data/src/core/lib/http/format_request.cc +29 -0
- data/src/core/lib/http/format_request.h +2 -0
- data/src/core/lib/http/httpcli.cc +88 -81
- data/src/core/lib/http/httpcli.h +39 -7
- data/src/core/lib/http/httpcli_security_connector.cc +3 -4
- data/src/core/lib/iomgr/endpoint.cc +4 -4
- data/src/core/lib/iomgr/endpoint.h +6 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
- data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
- data/src/core/lib/iomgr/ev_posix.cc +1 -4
- data/src/core/lib/iomgr/exec_ctx.h +1 -2
- data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
- data/src/core/lib/iomgr/internal_errqueue.h +1 -6
- data/src/core/lib/iomgr/iomgr.cc +0 -1
- data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
- data/src/core/lib/iomgr/pollset_set.h +1 -2
- data/src/core/lib/iomgr/port.h +25 -6
- data/src/core/lib/iomgr/resolve_address.cc +8 -0
- data/src/core/lib/iomgr/resolve_address.h +21 -14
- data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
- data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
- data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
- data/src/core/lib/iomgr/sockaddr.h +2 -3
- data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
- data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
- data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
- data/src/core/lib/iomgr/tcp_posix.cc +9 -27
- data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
- data/src/core/lib/iomgr/tcp_windows.cc +7 -4
- data/src/core/lib/json/json.h +1 -2
- data/src/core/lib/json/json_reader.cc +9 -1
- data/src/core/lib/json/json_util.cc +7 -0
- data/src/core/lib/json/json_util.h +10 -1
- data/src/core/lib/json/json_writer.cc +6 -1
- data/src/core/lib/promise/activity.cc +1 -1
- data/src/core/lib/promise/activity.h +6 -6
- data/src/core/lib/promise/arena_promise.h +11 -1
- data/src/core/lib/promise/call_push_pull.h +4 -0
- data/src/core/lib/promise/context.h +1 -1
- data/src/core/lib/promise/detail/basic_seq.h +2 -2
- data/src/core/lib/promise/detail/promise_factory.h +0 -1
- data/src/core/lib/promise/latch.h +0 -1
- data/src/core/lib/promise/loop.h +1 -0
- data/src/core/lib/promise/race.h +0 -1
- data/src/core/lib/promise/seq.h +0 -2
- data/src/core/lib/promise/sleep.cc +2 -0
- data/src/core/lib/promise/sleep.h +10 -0
- data/src/core/lib/promise/try_seq.h +2 -2
- data/src/core/lib/resolver/resolver_factory.h +1 -2
- data/src/core/lib/resolver/server_address.cc +9 -3
- data/src/core/lib/resolver/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.cc +14 -1
- data/src/core/lib/resource_quota/api.h +4 -1
- data/src/core/lib/resource_quota/arena.cc +0 -6
- data/src/core/lib/resource_quota/arena.h +1 -2
- data/src/core/lib/resource_quota/memory_quota.cc +47 -5
- data/src/core/lib/resource_quota/memory_quota.h +24 -5
- data/src/core/lib/resource_quota/resource_quota.h +8 -0
- data/src/core/lib/resource_quota/thread_quota.cc +2 -0
- data/src/core/lib/resource_quota/thread_quota.h +4 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
- data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
- data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
- data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
- data/src/core/lib/security/credentials/credentials.h +17 -10
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
- data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
- data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
- data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
- data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
- data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
- data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
- data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
- data/src/core/lib/security/transport/security_handshaker.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
- data/src/core/lib/service_config/service_config.h +4 -8
- data/src/core/lib/service_config/service_config_call_data.h +4 -1
- data/src/core/lib/service_config/service_config_impl.cc +7 -0
- data/src/core/lib/service_config/service_config_impl.h +9 -2
- data/src/core/lib/service_config/service_config_parser.cc +8 -0
- data/src/core/lib/service_config/service_config_parser.h +7 -0
- data/src/core/lib/slice/b64.cc +1 -1
- data/src/core/lib/slice/b64.h +2 -0
- data/src/core/lib/slice/percent_encoding.cc +4 -1
- data/src/core/lib/slice/percent_encoding.h +0 -6
- data/src/core/lib/slice/slice.cc +2 -1
- data/src/core/lib/slice/slice.h +10 -5
- data/src/core/lib/slice/slice_api.cc +1 -1
- data/src/core/lib/slice/slice_buffer.cc +50 -23
- data/src/core/lib/slice/slice_buffer.h +106 -0
- data/src/core/lib/slice/slice_buffer_api.cc +35 -0
- data/src/core/lib/slice/slice_internal.h +4 -3
- data/src/core/lib/slice/slice_refcount.h +2 -3
- data/src/core/lib/slice/slice_refcount_base.h +2 -3
- data/src/core/lib/slice/slice_split.cc +3 -0
- data/src/core/lib/slice/slice_split.h +0 -4
- data/src/core/lib/slice/slice_string_helpers.cc +4 -0
- data/src/core/lib/slice/slice_string_helpers.h +1 -4
- data/src/core/lib/surface/builtins.cc +7 -2
- data/src/core/lib/surface/byte_buffer.cc +7 -1
- data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
- data/src/core/lib/surface/call.cc +41 -26
- data/src/core/lib/surface/call.h +16 -2
- data/src/core/lib/surface/call_details.cc +4 -4
- data/src/core/lib/surface/call_log_batch.cc +7 -1
- data/src/core/lib/surface/call_test_only.h +4 -1
- data/src/core/lib/surface/channel.cc +179 -242
- data/src/core/lib/surface/channel.h +94 -57
- data/src/core/lib/surface/channel_init.h +2 -0
- data/src/core/lib/surface/channel_ping.cc +8 -2
- data/src/core/lib/surface/channel_stack_type.cc +0 -2
- data/src/core/lib/surface/channel_stack_type.h +0 -2
- data/src/core/lib/surface/completion_queue.cc +14 -6
- data/src/core/lib/surface/completion_queue.h +5 -1
- data/src/core/lib/surface/completion_queue_factory.cc +1 -0
- data/src/core/lib/surface/completion_queue_factory.h +1 -3
- data/src/core/lib/surface/event_string.cc +1 -7
- data/src/core/lib/surface/event_string.h +1 -1
- data/src/core/lib/surface/init.cc +17 -45
- data/src/core/lib/surface/init.h +0 -8
- data/src/core/lib/surface/lame_client.cc +64 -110
- data/src/core/lib/surface/lame_client.h +40 -2
- data/src/core/lib/surface/metadata_array.cc +2 -0
- data/src/core/lib/surface/server.cc +69 -56
- data/src/core/lib/surface/server.h +39 -9
- data/src/core/lib/surface/validate_metadata.cc +2 -5
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +3 -1
- data/src/core/lib/transport/bdp_estimator.h +2 -3
- data/src/core/lib/transport/byte_stream.cc +4 -3
- data/src/core/lib/transport/byte_stream.h +5 -1
- data/src/core/lib/transport/connectivity_state.cc +6 -4
- data/src/core/lib/transport/connectivity_state.h +2 -3
- data/src/core/lib/transport/error_utils.cc +4 -2
- data/src/core/lib/transport/error_utils.h +5 -1
- data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
- data/src/core/lib/{channel → transport}/handshaker.h +13 -6
- data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
- data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
- data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
- data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
- data/src/core/lib/transport/metadata_batch.cc +287 -0
- data/src/core/lib/transport/metadata_batch.h +133 -264
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +10 -3
- data/src/core/lib/transport/status_conversion.cc +2 -0
- data/src/core/lib/transport/status_conversion.h +2 -2
- data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
- data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
- data/src/core/lib/transport/timeout_encoding.cc +2 -6
- data/src/core/lib/transport/timeout_encoding.h +5 -1
- data/src/core/lib/transport/transport.cc +18 -17
- data/src/core/lib/transport/transport.h +28 -2
- data/src/core/lib/transport/transport_impl.h +10 -0
- data/src/core/lib/transport/transport_op_string.cc +9 -10
- data/src/core/lib/uri/uri_parser.cc +11 -3
- data/src/core/lib/uri/uri_parser.h +0 -2
- data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
- data/src/ruby/ext/grpc/extconf.rb +2 -2
- data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/grpc_c.so +0 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
- metadata +36 -29
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
- data/src/core/lib/event_engine/sockaddr.cc +0 -40
- data/src/core/lib/event_engine/sockaddr.h +0 -44
- data/src/core/lib/gprpp/capture.h +0 -76
- data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
- data/src/core/lib/iomgr/event_engine/closure.h +0 -42
- data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
- data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
- data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
- data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
- data/src/core/lib/iomgr/event_engine/promise.h +0 -51
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
- data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
- data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
- data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
- data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -22,301 +22,134 @@
|
|
22
22
|
|
23
23
|
#include <string.h>
|
24
24
|
|
25
|
+
#include <grpc/grpc.h>
|
25
26
|
#include <grpc/support/alloc.h>
|
26
27
|
#include <grpc/support/log.h>
|
27
28
|
|
28
29
|
#include "src/core/lib/channel/channel_args.h"
|
29
30
|
#include "src/core/lib/gprpp/manual_constructor.h"
|
30
31
|
#include "src/core/lib/profiling/timers.h"
|
32
|
+
#include "src/core/lib/promise/call_push_pull.h"
|
33
|
+
#include "src/core/lib/promise/promise.h"
|
34
|
+
#include "src/core/lib/promise/seq.h"
|
31
35
|
#include "src/core/lib/slice/b64.h"
|
32
36
|
#include "src/core/lib/slice/percent_encoding.h"
|
33
37
|
#include "src/core/lib/slice/slice_internal.h"
|
34
38
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
35
39
|
|
36
|
-
|
37
|
-
grpc_error_handle err);
|
38
|
-
static void hs_recv_trailing_metadata_ready(void* user_data,
|
39
|
-
grpc_error_handle err);
|
40
|
+
namespace grpc_core {
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
call_data(grpc_call_element* elem, const grpc_call_element_args& args)
|
45
|
-
: call_combiner(args.call_combiner) {
|
46
|
-
GRPC_CLOSURE_INIT(&recv_initial_metadata_ready,
|
47
|
-
hs_recv_initial_metadata_ready, elem,
|
48
|
-
grpc_schedule_on_exec_ctx);
|
49
|
-
GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
|
50
|
-
hs_recv_trailing_metadata_ready, elem,
|
51
|
-
grpc_schedule_on_exec_ctx);
|
52
|
-
}
|
53
|
-
|
54
|
-
~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_ready_error); }
|
55
|
-
|
56
|
-
grpc_core::CallCombiner* call_combiner;
|
57
|
-
|
58
|
-
// State for intercepting recv_initial_metadata.
|
59
|
-
grpc_closure recv_initial_metadata_ready;
|
60
|
-
grpc_error_handle recv_initial_metadata_ready_error = GRPC_ERROR_NONE;
|
61
|
-
grpc_closure* original_recv_initial_metadata_ready;
|
62
|
-
grpc_metadata_batch* recv_initial_metadata = nullptr;
|
63
|
-
uint32_t* recv_initial_metadata_flags;
|
64
|
-
bool seen_recv_initial_metadata_ready = false;
|
65
|
-
|
66
|
-
// State for intercepting recv_trailing_metadata
|
67
|
-
grpc_closure recv_trailing_metadata_ready;
|
68
|
-
grpc_closure* original_recv_trailing_metadata_ready;
|
69
|
-
grpc_error_handle recv_trailing_metadata_ready_error;
|
70
|
-
bool seen_recv_trailing_metadata_ready = false;
|
71
|
-
};
|
72
|
-
|
73
|
-
struct channel_data {
|
74
|
-
bool surface_user_agent;
|
75
|
-
};
|
76
|
-
|
77
|
-
} // namespace
|
78
|
-
|
79
|
-
static grpc_error_handle hs_filter_outgoing_metadata(grpc_metadata_batch* b) {
|
80
|
-
if (grpc_core::Slice* grpc_message =
|
81
|
-
b->get_pointer(grpc_core::GrpcMessageMetadata())) {
|
82
|
-
*grpc_message = grpc_core::PercentEncodeSlice(
|
83
|
-
std::move(*grpc_message), grpc_core::PercentEncodingType::Compatible);
|
84
|
-
}
|
85
|
-
return GRPC_ERROR_NONE;
|
86
|
-
}
|
42
|
+
const grpc_channel_filter HttpServerFilter::kFilter =
|
43
|
+
MakePromiseBasedFilter<HttpServerFilter, FilterEndpoint::kServer,
|
44
|
+
kFilterExaminesServerInitialMetadata>("http-server");
|
87
45
|
|
88
|
-
|
89
|
-
|
90
|
-
if (
|
91
|
-
|
92
|
-
|
46
|
+
namespace {
|
47
|
+
void FilterOutgoingMetadata(ServerMetadata* md) {
|
48
|
+
if (Slice* grpc_message = md->get_pointer(GrpcMessageMetadata())) {
|
49
|
+
*grpc_message = PercentEncodeSlice(std::move(*grpc_message),
|
50
|
+
PercentEncodingType::Compatible);
|
93
51
|
}
|
94
|
-
*cumulative = grpc_error_add_child(*cumulative, new_err);
|
95
52
|
}
|
53
|
+
} // namespace
|
96
54
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
static const char* error_name = "Failed processing incoming headers";
|
55
|
+
ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
|
56
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) {
|
57
|
+
const auto& md = call_args.client_initial_metadata;
|
101
58
|
|
102
|
-
auto method =
|
59
|
+
auto method = md->get(HttpMethodMetadata());
|
103
60
|
if (method.has_value()) {
|
104
61
|
switch (*method) {
|
105
|
-
case
|
106
|
-
break;
|
107
|
-
case grpc_core::HttpMethodMetadata::kInvalid:
|
108
|
-
case grpc_core::HttpMethodMetadata::kGet:
|
109
|
-
hs_add_error(error_name, &error,
|
110
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad method header"));
|
62
|
+
case HttpMethodMetadata::kPost:
|
111
63
|
break;
|
64
|
+
case HttpMethodMetadata::kPut:
|
65
|
+
if (allow_put_requests_) {
|
66
|
+
break;
|
67
|
+
}
|
68
|
+
ABSL_FALLTHROUGH_INTENDED;
|
69
|
+
case HttpMethodMetadata::kInvalid:
|
70
|
+
case HttpMethodMetadata::kGet:
|
71
|
+
return Immediate(
|
72
|
+
ServerMetadataHandle(absl::UnknownError("Bad method header")));
|
112
73
|
}
|
113
74
|
} else {
|
114
|
-
|
115
|
-
|
116
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
|
117
|
-
GRPC_ERROR_STR_KEY, ":method"));
|
75
|
+
return Immediate(
|
76
|
+
ServerMetadataHandle(absl::UnknownError("Missing :method header")));
|
118
77
|
}
|
119
78
|
|
120
|
-
auto te =
|
121
|
-
if (te ==
|
79
|
+
auto te = md->Take(TeMetadata());
|
80
|
+
if (te == TeMetadata::kTrailers) {
|
122
81
|
// Do nothing, ok.
|
123
82
|
} else if (!te.has_value()) {
|
124
|
-
|
125
|
-
|
126
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
|
127
|
-
GRPC_ERROR_STR_KEY, "te"));
|
83
|
+
return Immediate(
|
84
|
+
ServerMetadataHandle(absl::UnknownError("Missing :te header")));
|
128
85
|
} else {
|
129
|
-
|
130
|
-
|
86
|
+
return Immediate(
|
87
|
+
ServerMetadataHandle(absl::UnknownError("Bad :te header")));
|
131
88
|
}
|
132
89
|
|
133
|
-
auto scheme =
|
90
|
+
auto scheme = md->Take(HttpSchemeMetadata());
|
134
91
|
if (scheme.has_value()) {
|
135
|
-
if (*scheme ==
|
136
|
-
|
137
|
-
|
92
|
+
if (*scheme == HttpSchemeMetadata::kInvalid) {
|
93
|
+
return Immediate(
|
94
|
+
ServerMetadataHandle(absl::UnknownError("Bad :scheme header")));
|
138
95
|
}
|
139
96
|
} else {
|
140
|
-
|
141
|
-
|
142
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
|
143
|
-
GRPC_ERROR_STR_KEY, ":scheme"));
|
97
|
+
return Immediate(
|
98
|
+
ServerMetadataHandle(absl::UnknownError("Missing :scheme header")));
|
144
99
|
}
|
145
100
|
|
146
|
-
|
101
|
+
md->Remove(ContentTypeMetadata());
|
147
102
|
|
148
|
-
|
103
|
+
Slice* path_slice = md->get_pointer(HttpPathMetadata());
|
149
104
|
if (path_slice == nullptr) {
|
150
|
-
|
151
|
-
|
152
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
|
153
|
-
GRPC_ERROR_STR_KEY, ":path"));
|
105
|
+
return Immediate(
|
106
|
+
ServerMetadataHandle(absl::UnknownError("Missing :path header")));
|
154
107
|
}
|
155
108
|
|
156
|
-
if (
|
157
|
-
absl::optional<
|
109
|
+
if (md->get_pointer(HttpAuthorityMetadata()) == nullptr) {
|
110
|
+
absl::optional<Slice> host = md->Take(HostMetadata());
|
158
111
|
if (host.has_value()) {
|
159
|
-
|
112
|
+
md->Set(HttpAuthorityMetadata(), std::move(*host));
|
160
113
|
}
|
161
114
|
}
|
162
115
|
|
163
|
-
if (
|
164
|
-
|
165
|
-
|
166
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
|
167
|
-
GRPC_ERROR_STR_KEY, ":authority"));
|
116
|
+
if (md->get_pointer(HttpAuthorityMetadata()) == nullptr) {
|
117
|
+
return Immediate(
|
118
|
+
ServerMetadataHandle(absl::UnknownError("Missing :authority header")));
|
168
119
|
}
|
169
120
|
|
170
|
-
|
171
|
-
|
172
|
-
b->Remove(grpc_core::UserAgentMetadata());
|
121
|
+
if (!surface_user_agent_) {
|
122
|
+
md->Remove(UserAgentMetadata());
|
173
123
|
}
|
174
124
|
|
175
|
-
|
176
|
-
|
125
|
+
auto* read_latch = GetContext<Arena>()->New<Latch<ServerMetadata*>>();
|
126
|
+
auto* write_latch =
|
127
|
+
absl::exchange(call_args.server_initial_metadata, read_latch);
|
177
128
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
"resuming hs_recv_trailing_metadata_ready from "
|
194
|
-
"hs_recv_initial_metadata_ready");
|
195
|
-
}
|
196
|
-
grpc_core::Closure::Run(DEBUG_LOCATION,
|
197
|
-
calld->original_recv_initial_metadata_ready, err);
|
129
|
+
return CallPushPull(Seq(next_promise_factory(std::move(call_args)),
|
130
|
+
[](ServerMetadataHandle md) -> ServerMetadataHandle {
|
131
|
+
FilterOutgoingMetadata(md.get());
|
132
|
+
return md;
|
133
|
+
}),
|
134
|
+
Seq(read_latch->Wait(),
|
135
|
+
[write_latch](ServerMetadata** md) {
|
136
|
+
FilterOutgoingMetadata(*md);
|
137
|
+
(*md)->Set(HttpStatusMetadata(), 200);
|
138
|
+
(*md)->Set(ContentTypeMetadata(),
|
139
|
+
ContentTypeMetadata::kApplicationGrpc);
|
140
|
+
write_latch->Set(*md);
|
141
|
+
return absl::OkStatus();
|
142
|
+
}),
|
143
|
+
[]() { return absl::OkStatus(); });
|
198
144
|
}
|
199
145
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
GRPC_CALL_COMBINER_STOP(calld->call_combiner,
|
208
|
-
"deferring hs_recv_trailing_metadata_ready until "
|
209
|
-
"ater hs_recv_initial_metadata_ready");
|
210
|
-
return;
|
211
|
-
}
|
212
|
-
err = grpc_error_add_child(
|
213
|
-
GRPC_ERROR_REF(err),
|
214
|
-
GRPC_ERROR_REF(calld->recv_initial_metadata_ready_error));
|
215
|
-
grpc_core::Closure::Run(DEBUG_LOCATION,
|
216
|
-
calld->original_recv_trailing_metadata_ready, err);
|
146
|
+
absl::StatusOr<HttpServerFilter> HttpServerFilter::Create(ChannelArgs args,
|
147
|
+
ChannelFilter::Args) {
|
148
|
+
return HttpServerFilter(
|
149
|
+
args.GetBool(GRPC_ARG_SURFACE_USER_AGENT).value_or(true),
|
150
|
+
args.GetBool(
|
151
|
+
GRPC_ARG_DO_NOT_USE_UNLESS_YOU_HAVE_PERMISSION_FROM_GRPC_TEAM_ALLOW_BROKEN_PUT_REQUESTS)
|
152
|
+
.value_or(false));
|
217
153
|
}
|
218
154
|
|
219
|
-
|
220
|
-
grpc_transport_stream_op_batch* op) {
|
221
|
-
/* grab pointers to our data from the call element */
|
222
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
223
|
-
|
224
|
-
if (op->send_initial_metadata) {
|
225
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
226
|
-
static const char* error_name = "Failed sending initial metadata";
|
227
|
-
op->payload->send_initial_metadata.send_initial_metadata->Set(
|
228
|
-
grpc_core::HttpStatusMetadata(), 200);
|
229
|
-
op->payload->send_initial_metadata.send_initial_metadata->Set(
|
230
|
-
grpc_core::ContentTypeMetadata(),
|
231
|
-
grpc_core::ContentTypeMetadata::kApplicationGrpc);
|
232
|
-
hs_add_error(error_name, &error,
|
233
|
-
hs_filter_outgoing_metadata(
|
234
|
-
op->payload->send_initial_metadata.send_initial_metadata));
|
235
|
-
if (error != GRPC_ERROR_NONE) return error;
|
236
|
-
}
|
237
|
-
|
238
|
-
if (op->recv_initial_metadata) {
|
239
|
-
/* substitute our callback for the higher callback */
|
240
|
-
GPR_ASSERT(op->payload->recv_initial_metadata.recv_flags != nullptr);
|
241
|
-
calld->recv_initial_metadata =
|
242
|
-
op->payload->recv_initial_metadata.recv_initial_metadata;
|
243
|
-
calld->recv_initial_metadata_flags =
|
244
|
-
op->payload->recv_initial_metadata.recv_flags;
|
245
|
-
calld->original_recv_initial_metadata_ready =
|
246
|
-
op->payload->recv_initial_metadata.recv_initial_metadata_ready;
|
247
|
-
op->payload->recv_initial_metadata.recv_initial_metadata_ready =
|
248
|
-
&calld->recv_initial_metadata_ready;
|
249
|
-
}
|
250
|
-
|
251
|
-
if (op->recv_trailing_metadata) {
|
252
|
-
calld->original_recv_trailing_metadata_ready =
|
253
|
-
op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
|
254
|
-
op->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
|
255
|
-
&calld->recv_trailing_metadata_ready;
|
256
|
-
}
|
257
|
-
|
258
|
-
if (op->send_trailing_metadata) {
|
259
|
-
grpc_error_handle error = hs_filter_outgoing_metadata(
|
260
|
-
op->payload->send_trailing_metadata.send_trailing_metadata);
|
261
|
-
if (error != GRPC_ERROR_NONE) return error;
|
262
|
-
}
|
263
|
-
|
264
|
-
return GRPC_ERROR_NONE;
|
265
|
-
}
|
266
|
-
|
267
|
-
static void hs_start_transport_stream_op_batch(
|
268
|
-
grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
|
269
|
-
GPR_TIMER_SCOPE("hs_start_transport_stream_op_batch", 0);
|
270
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
271
|
-
grpc_error_handle error = hs_mutate_op(elem, op);
|
272
|
-
if (error != GRPC_ERROR_NONE) {
|
273
|
-
grpc_transport_stream_op_batch_finish_with_failure(op, error,
|
274
|
-
calld->call_combiner);
|
275
|
-
} else {
|
276
|
-
grpc_call_next_op(elem, op);
|
277
|
-
}
|
278
|
-
}
|
279
|
-
|
280
|
-
/* Constructor for call_data */
|
281
|
-
static grpc_error_handle hs_init_call_elem(grpc_call_element* elem,
|
282
|
-
const grpc_call_element_args* args) {
|
283
|
-
new (elem->call_data) call_data(elem, *args);
|
284
|
-
return GRPC_ERROR_NONE;
|
285
|
-
}
|
286
|
-
|
287
|
-
/* Destructor for call_data */
|
288
|
-
static void hs_destroy_call_elem(grpc_call_element* elem,
|
289
|
-
const grpc_call_final_info* /*final_info*/,
|
290
|
-
grpc_closure* /*ignored*/) {
|
291
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
292
|
-
calld->~call_data();
|
293
|
-
}
|
294
|
-
|
295
|
-
/* Constructor for channel_data */
|
296
|
-
static grpc_error_handle hs_init_channel_elem(grpc_channel_element* elem,
|
297
|
-
grpc_channel_element_args* args) {
|
298
|
-
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
299
|
-
GPR_ASSERT(!args->is_last);
|
300
|
-
chand->surface_user_agent = grpc_channel_arg_get_bool(
|
301
|
-
grpc_channel_args_find(args->channel_args,
|
302
|
-
const_cast<char*>(GRPC_ARG_SURFACE_USER_AGENT)),
|
303
|
-
true);
|
304
|
-
return GRPC_ERROR_NONE;
|
305
|
-
}
|
306
|
-
|
307
|
-
/* Destructor for channel data */
|
308
|
-
static void hs_destroy_channel_elem(grpc_channel_element* /*elem*/) {}
|
309
|
-
|
310
|
-
const grpc_channel_filter grpc_http_server_filter = {
|
311
|
-
hs_start_transport_stream_op_batch,
|
312
|
-
nullptr,
|
313
|
-
grpc_channel_next_op,
|
314
|
-
sizeof(call_data),
|
315
|
-
hs_init_call_elem,
|
316
|
-
grpc_call_stack_ignore_set_pollset_or_pollset_set,
|
317
|
-
hs_destroy_call_elem,
|
318
|
-
sizeof(channel_data),
|
319
|
-
hs_init_channel_elem,
|
320
|
-
hs_destroy_channel_elem,
|
321
|
-
grpc_channel_next_get_info,
|
322
|
-
"http-server"};
|
155
|
+
} // namespace grpc_core
|
@@ -22,8 +22,37 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
24
|
#include "src/core/lib/channel/channel_stack.h"
|
25
|
+
#include "src/core/lib/channel/promise_based_filter.h"
|
25
26
|
|
26
|
-
|
27
|
-
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
// Processes metadata on the server side for HTTP2 transports
|
30
|
+
class HttpServerFilter : public ChannelFilter {
|
31
|
+
public:
|
32
|
+
static const grpc_channel_filter kFilter;
|
33
|
+
|
34
|
+
static absl::StatusOr<HttpServerFilter> Create(
|
35
|
+
ChannelArgs args, ChannelFilter::Args filter_args);
|
36
|
+
|
37
|
+
// Construct a promise for one call.
|
38
|
+
ArenaPromise<ServerMetadataHandle> MakeCallPromise(
|
39
|
+
CallArgs call_args, NextPromiseFactory next_promise_factory) override;
|
40
|
+
|
41
|
+
private:
|
42
|
+
HttpServerFilter(bool surface_user_agent, bool allow_put_requests)
|
43
|
+
: surface_user_agent_(surface_user_agent),
|
44
|
+
allow_put_requests_(allow_put_requests) {}
|
45
|
+
|
46
|
+
bool surface_user_agent_;
|
47
|
+
bool allow_put_requests_;
|
48
|
+
};
|
49
|
+
|
50
|
+
} // namespace grpc_core
|
51
|
+
|
52
|
+
// A Temporary channel arg that allows servers to accept PUT requests. DO NOT
|
53
|
+
// USE WITHOUT PERMISSION.
|
54
|
+
#define GRPC_ARG_DO_NOT_USE_UNLESS_YOU_HAVE_PERMISSION_FROM_GRPC_TEAM_ALLOW_BROKEN_PUT_REQUESTS \
|
55
|
+
"grpc.http.do_not_use_unless_you_have_permission_from_grpc_team_allow_" \
|
56
|
+
"broken_put_requests"
|
28
57
|
|
29
58
|
#endif /* GRPC_CORE_EXT_FILTERS_HTTP_SERVER_HTTP_SERVER_FILTER_H */
|
@@ -120,18 +120,16 @@ size_t MessageSizeParser::ParserIndex() {
|
|
120
120
|
parser_name());
|
121
121
|
}
|
122
122
|
|
123
|
-
int GetMaxRecvSizeFromChannelArgs(const
|
124
|
-
if (
|
125
|
-
return
|
126
|
-
|
127
|
-
{GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH, -1, INT_MAX});
|
123
|
+
int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args) {
|
124
|
+
if (args.WantMinimalStack()) return -1;
|
125
|
+
return std::max(-1, args.GetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH)
|
126
|
+
.value_or(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH));
|
128
127
|
}
|
129
128
|
|
130
|
-
int GetMaxSendSizeFromChannelArgs(const
|
131
|
-
if (
|
132
|
-
return
|
133
|
-
|
134
|
-
{GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH, -1, INT_MAX});
|
129
|
+
int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args) {
|
130
|
+
if (args.WantMinimalStack()) return -1;
|
131
|
+
return std::max(-1, args.GetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH)
|
132
|
+
.value_or(GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH));
|
135
133
|
}
|
136
134
|
|
137
135
|
} // namespace grpc_core
|
@@ -308,7 +306,7 @@ static void message_size_destroy_call_elem(
|
|
308
306
|
}
|
309
307
|
|
310
308
|
grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
|
311
|
-
const
|
309
|
+
const grpc_core::ChannelArgs& channel_args) {
|
312
310
|
grpc_core::MessageSizeParsedConfig::message_size_limits lim;
|
313
311
|
lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
|
314
312
|
lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
|
@@ -321,7 +319,8 @@ static grpc_error_handle message_size_init_channel_elem(
|
|
321
319
|
GPR_ASSERT(!args->is_last);
|
322
320
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
323
321
|
new (chand) channel_data();
|
324
|
-
chand->limits = get_message_size_limits(
|
322
|
+
chand->limits = get_message_size_limits(
|
323
|
+
grpc_core::ChannelArgs::FromC(args->channel_args));
|
325
324
|
return GRPC_ERROR_NONE;
|
326
325
|
}
|
327
326
|
|
@@ -341,6 +340,7 @@ const grpc_channel_filter grpc_message_size_filter = {
|
|
341
340
|
message_size_destroy_call_elem,
|
342
341
|
sizeof(channel_data),
|
343
342
|
message_size_init_channel_elem,
|
343
|
+
grpc_channel_stack_no_post_init,
|
344
344
|
message_size_destroy_channel_elem,
|
345
345
|
grpc_channel_next_get_info,
|
346
346
|
"message_size"};
|
@@ -348,11 +348,10 @@ const grpc_channel_filter grpc_message_size_filter = {
|
|
348
348
|
// Used for GRPC_CLIENT_SUBCHANNEL
|
349
349
|
static bool maybe_add_message_size_filter_subchannel(
|
350
350
|
grpc_core::ChannelStackBuilder* builder) {
|
351
|
-
|
352
|
-
if (grpc_channel_args_want_minimal_stack(channel_args)) {
|
351
|
+
if (builder->channel_args().WantMinimalStack()) {
|
353
352
|
return true;
|
354
353
|
}
|
355
|
-
builder->PrependFilter(&grpc_message_size_filter
|
354
|
+
builder->PrependFilter(&grpc_message_size_filter);
|
356
355
|
return true;
|
357
356
|
}
|
358
357
|
|
@@ -360,21 +359,16 @@ static bool maybe_add_message_size_filter_subchannel(
|
|
360
359
|
// only if message size limits or service config is specified.
|
361
360
|
static bool maybe_add_message_size_filter(
|
362
361
|
grpc_core::ChannelStackBuilder* builder) {
|
363
|
-
|
364
|
-
if (
|
362
|
+
auto channel_args = builder->channel_args();
|
363
|
+
if (channel_args.WantMinimalStack()) {
|
365
364
|
return true;
|
366
365
|
}
|
367
|
-
bool enable = false;
|
368
366
|
grpc_core::MessageSizeParsedConfig::message_size_limits lim =
|
369
367
|
get_message_size_limits(channel_args);
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
grpc_channel_args_find(channel_args, GRPC_ARG_SERVICE_CONFIG);
|
375
|
-
const char* svc_cfg_str = grpc_channel_arg_get_string(a);
|
376
|
-
if (svc_cfg_str != nullptr) enable = true;
|
377
|
-
if (enable) builder->PrependFilter(&grpc_message_size_filter, nullptr);
|
368
|
+
const bool enable =
|
369
|
+
lim.max_send_size != -1 || lim.max_recv_size != -1 ||
|
370
|
+
channel_args.GetString(GRPC_ARG_SERVICE_CONFIG).has_value();
|
371
|
+
if (enable) builder->PrependFilter(&grpc_message_size_filter);
|
378
372
|
return true;
|
379
373
|
}
|
380
374
|
|
@@ -65,8 +65,8 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
|
|
65
65
|
static absl::string_view parser_name() { return "message_size"; }
|
66
66
|
};
|
67
67
|
|
68
|
-
int GetMaxRecvSizeFromChannelArgs(const
|
69
|
-
int GetMaxSendSizeFromChannelArgs(const
|
68
|
+
int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args);
|
69
|
+
int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args);
|
70
70
|
|
71
71
|
} // namespace grpc_core
|
72
72
|
|