grpc 1.41.1 → 1.42.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +55 -43
- data/include/grpc/event_engine/event_engine.h +82 -42
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
- data/include/grpc/event_engine/memory_allocator.h +210 -0
- data/include/grpc/grpc.h +4 -0
- data/include/grpc/grpc_security.h +18 -0
- data/include/grpc/grpc_security_constants.h +1 -0
- data/include/grpc/impl/codegen/port_platform.h +7 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
- data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
- data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
- data/src/core/ext/filters/client_channel/client_channel.h +74 -27
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
- data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
- data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -5
- data/src/core/ext/filters/client_channel/connector.h +18 -18
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
- data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
- data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
- data/src/core/ext/filters/client_channel/resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
- data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
- data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
- data/src/core/ext/filters/client_channel/server_address.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
- data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
- data/src/core/ext/filters/client_channel/subchannel.h +29 -49
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
- data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
- data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
- data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
- data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
- data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
- data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
- data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
- data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
- data/src/core/ext/service_config/service_config_call_data.h +72 -0
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
- data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
- data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
- data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
- data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
- data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
- data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
- data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
- data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
- data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
- data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
- data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
- data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
- data/src/core/ext/xds/xds_api.cc +325 -362
- data/src/core/ext/xds/xds_api.h +134 -82
- data/src/core/ext/xds/xds_bootstrap.h +10 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
- data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
- data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
- data/src/core/ext/xds/xds_client.cc +527 -314
- data/src/core/ext/xds/xds_client.h +42 -37
- data/src/core/ext/xds/xds_client_stats.h +1 -1
- data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
- data/src/core/lib/address_utils/parse_address.cc +2 -0
- data/src/core/lib/avl/avl.cc +5 -5
- data/src/core/lib/backoff/backoff.cc +1 -1
- data/src/core/lib/channel/channel_args.cc +24 -6
- data/src/core/lib/channel/channel_args.h +9 -0
- data/src/core/lib/channel/channel_stack_builder.cc +3 -3
- data/src/core/lib/channel/channel_trace.cc +1 -1
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +3 -3
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/channelz_registry.cc +1 -1
- data/src/core/lib/channel/channelz_registry.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +1 -3
- data/src/core/lib/channel/connected_channel.h +1 -2
- data/src/core/lib/compression/compression.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +6 -4
- data/src/core/lib/compression/compression_internal.cc +2 -2
- data/src/core/lib/compression/compression_internal.h +1 -1
- data/src/core/lib/config/core_configuration.cc +44 -2
- data/src/core/lib/config/core_configuration.h +39 -1
- data/src/core/lib/debug/stats.cc +1 -1
- data/src/core/lib/debug/stats_data.cc +13 -13
- data/src/core/lib/gpr/atm.cc +1 -1
- data/src/core/lib/gpr/cpu_posix.cc +1 -1
- data/src/core/lib/gpr/string.cc +2 -2
- data/src/core/lib/gpr/tls.h +1 -1
- data/src/core/lib/gpr/useful.h +79 -32
- data/src/core/lib/gprpp/arena.h +10 -0
- data/src/core/lib/gprpp/bitset.h +38 -16
- data/src/core/lib/gprpp/chunked_vector.h +211 -0
- data/src/core/lib/gprpp/construct_destruct.h +1 -1
- data/src/core/lib/gprpp/match.h +1 -1
- data/src/core/lib/gprpp/memory.h +6 -0
- data/src/core/lib/gprpp/overload.h +1 -1
- data/src/core/lib/gprpp/status_helper.cc +23 -3
- data/src/core/lib/gprpp/status_helper.h +12 -1
- data/src/core/lib/gprpp/table.h +411 -0
- data/src/core/lib/http/httpcli.cc +200 -182
- data/src/core/lib/http/parser.cc +2 -2
- data/src/core/lib/iomgr/call_combiner.cc +28 -10
- data/src/core/lib/iomgr/combiner.cc +6 -21
- data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
- data/src/core/lib/iomgr/error.cc +113 -52
- data/src/core/lib/iomgr/error.h +50 -9
- data/src/core/lib/iomgr/error_cfstream.cc +5 -0
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
- data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
- data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
- data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
- data/src/core/lib/iomgr/event_engine/closure.h +10 -1
- data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
- data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
- data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
- data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
- data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
- data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
- data/src/core/lib/iomgr/exec_ctx.cc +1 -9
- data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
- data/src/core/lib/iomgr/executor.cc +6 -20
- data/src/core/lib/iomgr/iomgr.cc +3 -1
- data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
- data/src/core/lib/iomgr/iomgr_internal.h +3 -2
- data/src/core/lib/iomgr/load_file.cc +2 -2
- data/src/core/lib/iomgr/lockfree_event.cc +18 -0
- data/src/core/lib/iomgr/pollset_custom.cc +1 -1
- data/src/core/lib/iomgr/pollset_custom.h +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
- data/src/core/lib/iomgr/resource_quota.cc +13 -11
- data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
- data/src/core/lib/iomgr/socket_mutator.cc +2 -2
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
- data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
- data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
- data/src/core/lib/iomgr/tcp_posix.cc +4 -5
- data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
- data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
- data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
- data/src/core/lib/iomgr/tcp_windows.cc +2 -2
- data/src/core/lib/iomgr/timer_generic.cc +13 -13
- data/src/core/lib/iomgr/timer_heap.cc +1 -1
- data/src/core/lib/json/json_util.cc +68 -0
- data/src/core/lib/json/json_util.h +57 -99
- data/src/core/lib/json/json_writer.cc +0 -3
- data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
- data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
- data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
- data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +4 -2
- data/src/core/lib/security/credentials/credentials.h +6 -1
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
- data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +9 -4
- data/src/core/lib/security/security_connector/security_connector.h +1 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
- data/src/core/lib/security/transport/security_handshaker.cc +73 -43
- data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
- data/src/core/lib/security/transport/tsi_error.cc +3 -5
- data/src/core/lib/slice/slice.cc +0 -16
- data/src/core/lib/slice/slice_api.cc +39 -0
- data/src/core/lib/slice/slice_buffer.cc +5 -5
- data/src/core/lib/slice/slice_intern.cc +8 -13
- data/src/core/lib/slice/slice_internal.h +1 -244
- data/src/core/lib/slice/slice_refcount.cc +17 -0
- data/src/core/lib/slice/slice_refcount.h +121 -0
- data/src/core/lib/slice/slice_refcount_base.h +173 -0
- data/src/core/lib/slice/slice_split.cc +100 -0
- data/src/core/lib/slice/slice_split.h +40 -0
- data/src/core/lib/slice/slice_string_helpers.cc +0 -83
- data/src/core/lib/slice/slice_string_helpers.h +0 -11
- data/src/core/lib/slice/static_slice.cc +529 -0
- data/src/core/lib/slice/static_slice.h +331 -0
- data/src/core/lib/surface/builtins.cc +49 -0
- data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
- data/src/core/lib/surface/call.cc +103 -120
- data/src/core/lib/surface/call.h +0 -6
- data/src/core/lib/surface/channel.cc +19 -32
- data/src/core/lib/surface/channel.h +0 -9
- data/src/core/lib/surface/channel_init.cc +23 -76
- data/src/core/lib/surface/channel_init.h +52 -44
- data/src/core/lib/surface/completion_queue.cc +6 -5
- data/src/core/lib/surface/init.cc +0 -39
- data/src/core/lib/surface/init_secure.cc +17 -14
- data/src/core/lib/surface/lame_client.cc +18 -11
- data/src/core/lib/surface/lame_client.h +1 -1
- data/src/core/lib/surface/server.cc +25 -17
- data/src/core/lib/surface/server.h +17 -10
- data/src/core/lib/surface/validate_metadata.cc +5 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/error_utils.cc +42 -17
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata.cc +31 -10
- data/src/core/lib/transport/metadata.h +2 -1
- data/src/core/lib/transport/metadata_batch.cc +35 -371
- data/src/core/lib/transport/metadata_batch.h +905 -71
- data/src/core/lib/transport/parsed_metadata.h +263 -0
- data/src/core/lib/transport/pid_controller.cc +4 -4
- data/src/core/lib/transport/static_metadata.cc +714 -846
- data/src/core/lib/transport/static_metadata.h +115 -379
- data/src/core/lib/transport/status_metadata.cc +1 -0
- data/src/core/lib/transport/transport.cc +4 -5
- data/src/core/lib/transport/transport_op_string.cc +40 -20
- data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
- data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
- data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
- data/src/core/tsi/fake_transport_security.cc +15 -7
- data/src/core/tsi/local_transport_security.cc +36 -73
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
- data/src/core/tsi/ssl_transport_security.cc +10 -2
- data/src/core/tsi/transport_security.cc +12 -0
- data/src/core/tsi/transport_security.h +16 -1
- data/src/core/tsi/transport_security_interface.h +26 -0
- data/src/ruby/ext/grpc/extconf.rb +12 -9
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
- data/src/ruby/spec/client_server_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
- data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
- data/third_party/address_sorting/address_sorting_posix.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
- data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +72 -45
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +2 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +479 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
- data/third_party/re2/re2/compile.cc +91 -109
- data/third_party/re2/re2/dfa.cc +27 -39
- data/third_party/re2/re2/filtered_re2.cc +18 -2
- data/third_party/re2/re2/filtered_re2.h +10 -5
- data/third_party/re2/re2/nfa.cc +1 -1
- data/third_party/re2/re2/parse.cc +42 -23
- data/third_party/re2/re2/perl_groups.cc +34 -34
- data/third_party/re2/re2/prefilter.cc +3 -2
- data/third_party/re2/re2/prog.cc +182 -4
- data/third_party/re2/re2/prog.h +28 -9
- data/third_party/re2/re2/re2.cc +87 -118
- data/third_party/re2/re2/re2.h +156 -141
- data/third_party/re2/re2/regexp.cc +12 -5
- data/third_party/re2/re2/regexp.h +8 -2
- data/third_party/re2/re2/set.cc +31 -9
- data/third_party/re2/re2/set.h +9 -4
- data/third_party/re2/re2/simplify.cc +11 -3
- data/third_party/re2/re2/tostring.cc +1 -1
- data/third_party/re2/re2/walker-inl.h +1 -1
- data/third_party/re2/util/mutex.h +2 -2
- data/third_party/re2/util/pcre.h +3 -3
- metadata +75 -63
- data/include/grpc/event_engine/slice_allocator.h +0 -71
- data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
- data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
- data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
- data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
- data/src/core/ext/transport/chttp2/client/authority.h +0 -36
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
- data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
- data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
- data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
- data/src/core/lib/iomgr/udp_server.cc +0 -747
- data/src/core/lib/iomgr/udp_server.h +0 -103
- data/src/core/lib/transport/authority_override.cc +0 -40
- data/src/core/lib/transport/authority_override.h +0 -37
@@ -23,7 +23,6 @@
|
|
23
23
|
#include "absl/strings/str_cat.h"
|
24
24
|
#include "absl/strings/string_view.h"
|
25
25
|
|
26
|
-
#include "src/core/ext/filters/client_channel/service_config.h"
|
27
26
|
#include "src/core/ext/filters/fault_injection/fault_injection_filter.h"
|
28
27
|
#include "src/core/lib/channel/channel_args.h"
|
29
28
|
#include "src/core/lib/channel/status_util.h"
|
@@ -78,8 +78,6 @@ struct call_data {
|
|
78
78
|
// State for handling send_initial_metadata ops.
|
79
79
|
grpc_linked_mdelem method;
|
80
80
|
grpc_linked_mdelem scheme;
|
81
|
-
grpc_linked_mdelem authority;
|
82
|
-
grpc_linked_mdelem te_trailers;
|
83
81
|
grpc_linked_mdelem content_type;
|
84
82
|
grpc_linked_mdelem user_agent;
|
85
83
|
// State for handling recv_initial_metadata ops.
|
@@ -113,18 +111,18 @@ struct channel_data {
|
|
113
111
|
|
114
112
|
static grpc_error_handle client_filter_incoming_metadata(
|
115
113
|
grpc_metadata_batch* b) {
|
116
|
-
if (b->
|
114
|
+
if (b->legacy_index()->named.status != nullptr) {
|
117
115
|
/* If both gRPC status and HTTP status are provided in the response, we
|
118
116
|
* should prefer the gRPC status code, as mentioned in
|
119
117
|
* https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
|
120
118
|
*/
|
121
|
-
if (b->
|
122
|
-
grpc_mdelem_static_value_eq(b->
|
119
|
+
if (b->legacy_index()->named.grpc_status != nullptr ||
|
120
|
+
grpc_mdelem_static_value_eq(b->legacy_index()->named.status->md,
|
123
121
|
GRPC_MDELEM_STATUS_200)) {
|
124
|
-
|
122
|
+
b->Remove(GRPC_BATCH_STATUS);
|
125
123
|
} else {
|
126
|
-
char* val = grpc_dump_slice(
|
127
|
-
|
124
|
+
char* val = grpc_dump_slice(
|
125
|
+
GRPC_MDVALUE(b->legacy_index()->named.status->md), GPR_DUMP_ASCII);
|
128
126
|
std::string msg =
|
129
127
|
absl::StrCat("Received http2 header with status: ", val);
|
130
128
|
grpc_error_handle e = grpc_error_set_str(
|
@@ -132,39 +130,42 @@ static grpc_error_handle client_filter_incoming_metadata(
|
|
132
130
|
grpc_error_set_str(
|
133
131
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
134
132
|
"Received http2 :status header with non-200 OK status"),
|
135
|
-
GRPC_ERROR_STR_VALUE,
|
133
|
+
GRPC_ERROR_STR_VALUE, val),
|
136
134
|
GRPC_ERROR_INT_GRPC_STATUS,
|
137
135
|
grpc_http2_status_to_grpc_status(atoi(val))),
|
138
|
-
GRPC_ERROR_STR_GRPC_MESSAGE,
|
139
|
-
grpc_slice_from_cpp_string(std::move(msg)));
|
136
|
+
GRPC_ERROR_STR_GRPC_MESSAGE, msg);
|
140
137
|
gpr_free(val);
|
141
138
|
return e;
|
142
139
|
}
|
143
140
|
}
|
144
141
|
|
145
|
-
if (b->
|
142
|
+
if (b->legacy_index()->named.grpc_message != nullptr) {
|
146
143
|
grpc_slice pct_decoded_msg = grpc_core::PermissivePercentDecodeSlice(
|
147
|
-
GRPC_MDVALUE(b->
|
148
|
-
if (grpc_slice_is_equivalent(
|
149
|
-
|
144
|
+
GRPC_MDVALUE(b->legacy_index()->named.grpc_message->md));
|
145
|
+
if (grpc_slice_is_equivalent(
|
146
|
+
pct_decoded_msg,
|
147
|
+
GRPC_MDVALUE(b->legacy_index()->named.grpc_message->md))) {
|
150
148
|
grpc_slice_unref_internal(pct_decoded_msg);
|
151
149
|
} else {
|
152
|
-
grpc_metadata_batch_set_value(b->
|
150
|
+
grpc_metadata_batch_set_value(b->legacy_index()->named.grpc_message,
|
151
|
+
pct_decoded_msg);
|
153
152
|
}
|
154
153
|
}
|
155
154
|
|
156
|
-
if (b->
|
155
|
+
if (b->legacy_index()->named.content_type != nullptr) {
|
157
156
|
if (!grpc_mdelem_static_value_eq(
|
158
|
-
b->
|
157
|
+
b->legacy_index()->named.content_type->md,
|
159
158
|
GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
|
160
|
-
if (grpc_slice_buf_start_eq(
|
161
|
-
|
162
|
-
|
159
|
+
if (grpc_slice_buf_start_eq(
|
160
|
+
GRPC_MDVALUE(b->legacy_index()->named.content_type->md),
|
161
|
+
EXPECTED_CONTENT_TYPE, EXPECTED_CONTENT_TYPE_LENGTH) &&
|
163
162
|
(GRPC_SLICE_START_PTR(GRPC_MDVALUE(
|
164
|
-
b->
|
163
|
+
b->legacy_index()
|
164
|
+
->named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
|
165
165
|
'+' ||
|
166
166
|
GRPC_SLICE_START_PTR(GRPC_MDVALUE(
|
167
|
-
b->
|
167
|
+
b->legacy_index()
|
168
|
+
->named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
|
168
169
|
';')) {
|
169
170
|
/* Although the C implementation doesn't (currently) generate them,
|
170
171
|
any custom +-suffix is explicitly valid. */
|
@@ -174,13 +175,14 @@ static grpc_error_handle client_filter_incoming_metadata(
|
|
174
175
|
} else {
|
175
176
|
/* TODO(klempner): We're currently allowing this, but we shouldn't
|
176
177
|
see it without a proxy so log for now. */
|
177
|
-
char* val = grpc_dump_slice(
|
178
|
-
|
178
|
+
char* val = grpc_dump_slice(
|
179
|
+
GRPC_MDVALUE(b->legacy_index()->named.content_type->md),
|
180
|
+
GPR_DUMP_ASCII);
|
179
181
|
gpr_log(GPR_INFO, "Unexpected content-type '%s'", val);
|
180
182
|
gpr_free(val);
|
181
183
|
}
|
182
184
|
}
|
183
|
-
|
185
|
+
b->Remove(GRPC_BATCH_CONTENT_TYPE);
|
184
186
|
}
|
185
187
|
|
186
188
|
return GRPC_ERROR_NONE;
|
@@ -194,7 +196,7 @@ static void recv_initial_metadata_ready(void* user_data,
|
|
194
196
|
error = client_filter_incoming_metadata(calld->recv_initial_metadata);
|
195
197
|
calld->recv_initial_metadata_error = GRPC_ERROR_REF(error);
|
196
198
|
} else {
|
197
|
-
GRPC_ERROR_REF(error);
|
199
|
+
(void)GRPC_ERROR_REF(error);
|
198
200
|
}
|
199
201
|
grpc_closure* closure = calld->original_recv_initial_metadata_ready;
|
200
202
|
calld->original_recv_initial_metadata_ready = nullptr;
|
@@ -221,7 +223,7 @@ static void recv_trailing_metadata_ready(void* user_data,
|
|
221
223
|
if (error == GRPC_ERROR_NONE) {
|
222
224
|
error = client_filter_incoming_metadata(calld->recv_trailing_metadata);
|
223
225
|
} else {
|
224
|
-
GRPC_ERROR_REF(error);
|
226
|
+
(void)GRPC_ERROR_REF(error);
|
225
227
|
}
|
226
228
|
error = grpc_error_add_child(
|
227
229
|
error, GRPC_ERROR_REF(calld->recv_initial_metadata_error));
|
@@ -317,7 +319,8 @@ static grpc_error_handle update_path_for_get(
|
|
317
319
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
318
320
|
grpc_slice path_slice =
|
319
321
|
GRPC_MDVALUE(batch->payload->send_initial_metadata.send_initial_metadata
|
320
|
-
->
|
322
|
+
->legacy_index()
|
323
|
+
->named.path->md);
|
321
324
|
/* sum up individual component's lengths and allocate enough memory to
|
322
325
|
* hold combined path+query */
|
323
326
|
size_t estimated_len = GRPC_SLICE_LENGTH(path_slice);
|
@@ -341,24 +344,23 @@ static grpc_error_handle update_path_for_get(
|
|
341
344
|
true /* url_safe */, false /* multi_line */);
|
342
345
|
gpr_free(payload_bytes);
|
343
346
|
/* remove trailing unused memory and add trailing 0 to terminate string */
|
344
|
-
char* t =
|
347
|
+
char* t =
|
348
|
+
reinterpret_cast<char*> GRPC_SLICE_START_PTR(path_with_query_slice) +
|
349
|
+
GRPC_SLICE_LENGTH(path_slice);
|
345
350
|
/* safe to use strlen since base64_encode will always add '\0' */
|
346
|
-
path_with_query_slice =
|
347
|
-
|
351
|
+
path_with_query_slice = grpc_slice_sub_no_ref(
|
352
|
+
path_with_query_slice, 0, GRPC_SLICE_LENGTH(path_slice) + strlen(t));
|
348
353
|
/* substitute previous path with the new path+query */
|
349
354
|
grpc_mdelem mdelem_path_and_query =
|
350
355
|
grpc_mdelem_from_slices(GRPC_MDSTR_PATH, path_with_query_slice);
|
351
356
|
grpc_metadata_batch* b =
|
352
357
|
batch->payload->send_initial_metadata.send_initial_metadata;
|
353
|
-
return
|
354
|
-
mdelem_path_and_query);
|
358
|
+
return b->Substitute(b->legacy_index()->named.path, mdelem_path_and_query);
|
355
359
|
}
|
356
360
|
|
357
361
|
static void remove_if_present(grpc_metadata_batch* batch,
|
358
362
|
grpc_metadata_batch_callouts_index idx) {
|
359
|
-
|
360
|
-
grpc_metadata_batch_remove(batch, idx);
|
361
|
-
}
|
363
|
+
batch->Remove(idx);
|
362
364
|
}
|
363
365
|
|
364
366
|
static void http_client_start_transport_stream_op_batch(
|
@@ -440,9 +442,6 @@ static void http_client_start_transport_stream_op_batch(
|
|
440
442
|
remove_if_present(
|
441
443
|
batch->payload->send_initial_metadata.send_initial_metadata,
|
442
444
|
GRPC_BATCH_SCHEME);
|
443
|
-
remove_if_present(
|
444
|
-
batch->payload->send_initial_metadata.send_initial_metadata,
|
445
|
-
GRPC_BATCH_TE);
|
446
445
|
remove_if_present(
|
447
446
|
batch->payload->send_initial_metadata.send_initial_metadata,
|
448
447
|
GRPC_BATCH_CONTENT_TYPE);
|
@@ -460,10 +459,8 @@ static void http_client_start_transport_stream_op_batch(
|
|
460
459
|
batch->payload->send_initial_metadata.send_initial_metadata,
|
461
460
|
&calld->scheme, channeld->static_scheme, GRPC_BATCH_SCHEME);
|
462
461
|
if (error != GRPC_ERROR_NONE) goto done;
|
463
|
-
|
464
|
-
|
465
|
-
&calld->te_trailers, GRPC_MDELEM_TE_TRAILERS, GRPC_BATCH_TE);
|
466
|
-
if (error != GRPC_ERROR_NONE) goto done;
|
462
|
+
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
463
|
+
grpc_core::TeMetadata(), grpc_core::TeMetadata::kTrailers);
|
467
464
|
error = grpc_metadata_batch_add_tail(
|
468
465
|
batch->payload->send_initial_metadata.send_initial_metadata,
|
469
466
|
&calld->content_type, GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC,
|
@@ -29,11 +29,12 @@
|
|
29
29
|
#include <grpc/support/string_util.h>
|
30
30
|
|
31
31
|
#include "src/core/lib/channel/channel_args.h"
|
32
|
+
#include "src/core/lib/channel/channel_stack_builder.h"
|
33
|
+
#include "src/core/lib/config/core_configuration.h"
|
32
34
|
#include "src/core/lib/gpr/string.h"
|
33
35
|
#include "src/core/lib/slice/slice_internal.h"
|
34
36
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
35
37
|
#include "src/core/lib/surface/call.h"
|
36
|
-
#include "src/core/lib/surface/channel_init.h"
|
37
38
|
#include "src/core/lib/surface/channel_stack_type.h"
|
38
39
|
#include "src/core/lib/transport/static_metadata.h"
|
39
40
|
|
@@ -56,8 +57,9 @@ void client_authority_start_transport_stream_op_batch(
|
|
56
57
|
// Handle send_initial_metadata.
|
57
58
|
// If the initial metadata doesn't already contain :authority, add it.
|
58
59
|
if (batch->send_initial_metadata &&
|
59
|
-
batch->payload->send_initial_metadata.send_initial_metadata
|
60
|
-
|
60
|
+
batch->payload->send_initial_metadata.send_initial_metadata
|
61
|
+
->legacy_index()
|
62
|
+
->named.authority == nullptr) {
|
61
63
|
grpc_error_handle error = grpc_metadata_batch_add_head(
|
62
64
|
batch->payload->send_initial_metadata.send_initial_metadata,
|
63
65
|
&calld->authority_storage,
|
@@ -131,8 +133,7 @@ const grpc_channel_filter grpc_client_authority_filter = {
|
|
131
133
|
grpc_channel_next_get_info,
|
132
134
|
"authority"};
|
133
135
|
|
134
|
-
static bool add_client_authority_filter(grpc_channel_stack_builder* builder
|
135
|
-
void* arg) {
|
136
|
+
static bool add_client_authority_filter(grpc_channel_stack_builder* builder) {
|
136
137
|
const grpc_channel_args* channel_args =
|
137
138
|
grpc_channel_stack_builder_get_channel_arguments(builder);
|
138
139
|
const grpc_arg* disable_client_authority_filter_arg = grpc_channel_args_find(
|
@@ -145,16 +146,14 @@ static bool add_client_authority_filter(grpc_channel_stack_builder* builder,
|
|
145
146
|
}
|
146
147
|
}
|
147
148
|
return grpc_channel_stack_builder_prepend_filter(
|
148
|
-
builder,
|
149
|
+
builder, &grpc_client_authority_filter, nullptr, nullptr);
|
149
150
|
}
|
150
151
|
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
const_cast<grpc_channel_filter*>(&grpc_client_authority_filter));
|
152
|
+
namespace grpc_core {
|
153
|
+
void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder) {
|
154
|
+
builder->channel_init()->RegisterStage(GRPC_CLIENT_SUBCHANNEL, INT_MAX,
|
155
|
+
add_client_authority_filter);
|
156
|
+
builder->channel_init()->RegisterStage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX,
|
157
|
+
add_client_authority_filter);
|
158
158
|
}
|
159
|
-
|
160
|
-
void grpc_client_authority_filter_shutdown(void) {}
|
159
|
+
} // namespace grpc_core
|
@@ -25,84 +25,66 @@
|
|
25
25
|
#include "src/core/ext/filters/http/message_compress/message_decompress_filter.h"
|
26
26
|
#include "src/core/ext/filters/http/server/http_server_filter.h"
|
27
27
|
#include "src/core/lib/channel/channel_stack_builder.h"
|
28
|
+
#include "src/core/lib/config/core_configuration.h"
|
28
29
|
#include "src/core/lib/surface/call.h"
|
29
|
-
#include "src/core/lib/surface/channel_init.h"
|
30
30
|
#include "src/core/lib/transport/transport_impl.h"
|
31
31
|
|
32
|
-
struct optional_filter {
|
33
|
-
const grpc_channel_filter* filter;
|
34
|
-
const char* control_channel_arg;
|
35
|
-
};
|
36
|
-
|
37
|
-
static optional_filter compress_filter = {
|
38
|
-
&grpc_message_compress_filter, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION};
|
39
|
-
|
40
|
-
static optional_filter decompress_filter = {
|
41
|
-
&grpc_core::MessageDecompressFilter,
|
42
|
-
GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION};
|
43
|
-
|
44
32
|
static bool is_building_http_like_transport(
|
45
33
|
grpc_channel_stack_builder* builder) {
|
46
34
|
grpc_transport* t = grpc_channel_stack_builder_get_transport(builder);
|
47
35
|
return t != nullptr && strstr(t->vtable->name, "http");
|
48
36
|
}
|
49
37
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
!
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
const_cast<grpc_channel_filter*>(&grpc_http_client_filter));
|
102
|
-
grpc_channel_init_register_stage(
|
103
|
-
GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
104
|
-
maybe_add_required_filter,
|
105
|
-
const_cast<grpc_channel_filter*>(&grpc_http_server_filter));
|
38
|
+
namespace grpc_core {
|
39
|
+
void RegisterHttpFilters(CoreConfiguration::Builder* builder) {
|
40
|
+
auto optional = [builder](grpc_channel_stack_type channel_type,
|
41
|
+
bool enable_in_minimal_stack,
|
42
|
+
const char* control_channel_arg,
|
43
|
+
const grpc_channel_filter* filter) {
|
44
|
+
builder->channel_init()->RegisterStage(
|
45
|
+
channel_type, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
46
|
+
[enable_in_minimal_stack, control_channel_arg,
|
47
|
+
filter](grpc_channel_stack_builder* builder) {
|
48
|
+
if (!is_building_http_like_transport(builder)) return true;
|
49
|
+
const grpc_channel_args* channel_args =
|
50
|
+
grpc_channel_stack_builder_get_channel_arguments(builder);
|
51
|
+
bool enable = grpc_channel_arg_get_bool(
|
52
|
+
grpc_channel_args_find(channel_args, control_channel_arg),
|
53
|
+
enable_in_minimal_stack ||
|
54
|
+
!grpc_channel_args_want_minimal_stack(channel_args));
|
55
|
+
if (!enable) return true;
|
56
|
+
return grpc_channel_stack_builder_prepend_filter(builder, filter,
|
57
|
+
nullptr, nullptr);
|
58
|
+
});
|
59
|
+
};
|
60
|
+
auto required = [builder](grpc_channel_stack_type channel_type,
|
61
|
+
const grpc_channel_filter* filter) {
|
62
|
+
builder->channel_init()->RegisterStage(
|
63
|
+
channel_type, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
|
64
|
+
[filter](grpc_channel_stack_builder* builder) {
|
65
|
+
if (!is_building_http_like_transport(builder)) return true;
|
66
|
+
return grpc_channel_stack_builder_prepend_filter(builder, filter,
|
67
|
+
nullptr, nullptr);
|
68
|
+
});
|
69
|
+
};
|
70
|
+
optional(GRPC_CLIENT_SUBCHANNEL, false,
|
71
|
+
GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
|
72
|
+
&grpc_message_compress_filter);
|
73
|
+
optional(GRPC_CLIENT_DIRECT_CHANNEL, false,
|
74
|
+
GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
|
75
|
+
&grpc_message_compress_filter);
|
76
|
+
optional(GRPC_SERVER_CHANNEL, false, GRPC_ARG_ENABLE_PER_MESSAGE_COMPRESSION,
|
77
|
+
&grpc_message_compress_filter);
|
78
|
+
optional(GRPC_CLIENT_SUBCHANNEL, true,
|
79
|
+
GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
|
80
|
+
&grpc_core::MessageDecompressFilter);
|
81
|
+
optional(GRPC_CLIENT_DIRECT_CHANNEL, true,
|
82
|
+
GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
|
83
|
+
&grpc_core::MessageDecompressFilter);
|
84
|
+
optional(GRPC_SERVER_CHANNEL, true, GRPC_ARG_ENABLE_PER_MESSAGE_DECOMPRESSION,
|
85
|
+
&grpc_core::MessageDecompressFilter);
|
86
|
+
required(GRPC_CLIENT_SUBCHANNEL, &grpc_http_client_filter);
|
87
|
+
required(GRPC_CLIENT_DIRECT_CHANNEL, &grpc_http_client_filter);
|
88
|
+
required(GRPC_SERVER_CHANNEL, &grpc_http_server_filter);
|
106
89
|
}
|
107
|
-
|
108
|
-
void grpc_http_filters_shutdown(void) {}
|
90
|
+
} // namespace grpc_core
|
@@ -55,11 +55,14 @@ class ChannelData {
|
|
55
55
|
grpc_channel_args_get_channel_default_compression_algorithm(
|
56
56
|
args->channel_args);
|
57
57
|
// Make sure the default is enabled.
|
58
|
-
if (
|
59
|
-
|
58
|
+
if (size_t(default_compression_algorithm_) >= 32 ||
|
59
|
+
!grpc_core::GetBit(enabled_compression_algorithms_bitset_,
|
60
|
+
default_compression_algorithm_)) {
|
60
61
|
const char* name;
|
61
|
-
|
62
|
-
|
62
|
+
if (!grpc_compression_algorithm_name(default_compression_algorithm_,
|
63
|
+
&name)) {
|
64
|
+
name = "<unknown>";
|
65
|
+
}
|
63
66
|
gpr_log(GPR_ERROR,
|
64
67
|
"default compression algorithm %s not enabled: switching to none",
|
65
68
|
name);
|
@@ -108,7 +111,8 @@ class CallData {
|
|
108
111
|
ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
|
109
112
|
// The call's message compression algorithm is set to channel's default
|
110
113
|
// setting. It can be overridden later by initial metadata.
|
111
|
-
if (GPR_LIKELY(
|
114
|
+
if (GPR_LIKELY(
|
115
|
+
grpc_core::GetBit(channeld->enabled_compression_algorithms_bitset(),
|
112
116
|
channeld->default_compression_algorithm()))) {
|
113
117
|
message_compression_algorithm_ =
|
114
118
|
grpc_compression_algorithm_to_message_compression_algorithm(
|
@@ -191,24 +195,25 @@ bool CallData::SkipMessageCompression() {
|
|
191
195
|
// channel's default setting.
|
192
196
|
grpc_compression_algorithm FindCompressionAlgorithm(
|
193
197
|
grpc_metadata_batch* initial_metadata, ChannelData* channeld) {
|
194
|
-
if (initial_metadata->
|
198
|
+
if (initial_metadata->legacy_index()->named.grpc_internal_encoding_request ==
|
199
|
+
nullptr) {
|
195
200
|
return channeld->default_compression_algorithm();
|
196
201
|
}
|
197
202
|
grpc_compression_algorithm compression_algorithm;
|
198
203
|
// Parse the compression algorithm from the initial metadata.
|
199
|
-
grpc_mdelem md =
|
200
|
-
|
204
|
+
grpc_mdelem md = initial_metadata->legacy_index()
|
205
|
+
->named.grpc_internal_encoding_request->md;
|
201
206
|
GPR_ASSERT(grpc_compression_algorithm_parse(GRPC_MDVALUE(md),
|
202
207
|
&compression_algorithm));
|
203
208
|
// Remove this metadata since it's an internal one (i.e., it won't be
|
204
209
|
// transmitted out).
|
205
|
-
|
206
|
-
GRPC_BATCH_GRPC_INTERNAL_ENCODING_REQUEST);
|
210
|
+
initial_metadata->Remove(GRPC_BATCH_GRPC_INTERNAL_ENCODING_REQUEST);
|
207
211
|
// Check if that algorithm is enabled. Note that GRPC_COMPRESS_NONE is always
|
208
212
|
// enabled.
|
209
213
|
// TODO(juanlishen): Maybe use channel default or abort() if the algorithm
|
210
214
|
// from the initial metadata is disabled.
|
211
|
-
if (GPR_LIKELY(
|
215
|
+
if (GPR_LIKELY(
|
216
|
+
grpc_core::GetBit(channeld->enabled_compression_algorithms_bitset(),
|
212
217
|
compression_algorithm))) {
|
213
218
|
return compression_algorithm;
|
214
219
|
}
|
@@ -272,7 +277,7 @@ grpc_error_handle CallData::ProcessSendInitialMetadata(
|
|
272
277
|
if (error != GRPC_ERROR_NONE) return error;
|
273
278
|
// Do not overwrite accept-encoding header if it already presents (e.g., added
|
274
279
|
// by some proxy).
|
275
|
-
if (!initial_metadata->
|
280
|
+
if (!initial_metadata->legacy_index()->named.accept_encoding) {
|
276
281
|
error = grpc_metadata_batch_add_tail(
|
277
282
|
initial_metadata, &accept_stream_encoding_storage_,
|
278
283
|
GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(
|
@@ -153,7 +153,7 @@ void CallData::OnRecvInitialMetadataReady(void* arg, grpc_error_handle error) {
|
|
153
153
|
CallData* calld = static_cast<CallData*>(arg);
|
154
154
|
if (error == GRPC_ERROR_NONE) {
|
155
155
|
grpc_linked_mdelem* grpc_encoding =
|
156
|
-
calld->recv_initial_metadata_->
|
156
|
+
calld->recv_initial_metadata_->legacy_index()->named.grpc_encoding;
|
157
157
|
if (grpc_encoding != nullptr) {
|
158
158
|
calld->algorithm_ = DecodeMessageCompressionAlgorithm(grpc_encoding->md);
|
159
159
|
}
|