grpc 1.41.1 → 1.42.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +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 +78 -66
- 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
@@ -24,7 +24,6 @@
|
|
24
24
|
#include <string.h>
|
25
25
|
|
26
26
|
#include "absl/container/inlined_vector.h"
|
27
|
-
#include "absl/strings/str_join.h"
|
28
27
|
|
29
28
|
#include <grpc/support/alloc.h>
|
30
29
|
#include <grpc/support/log.h>
|
@@ -33,264 +32,6 @@
|
|
33
32
|
#include "src/core/lib/slice/slice_internal.h"
|
34
33
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
35
34
|
|
36
|
-
static void assert_valid_list(grpc_mdelem_list* list) {
|
37
|
-
#ifndef NDEBUG
|
38
|
-
grpc_linked_mdelem* l;
|
39
|
-
|
40
|
-
GPR_ASSERT((list->head == nullptr) == (list->tail == nullptr));
|
41
|
-
if (!list->head) return;
|
42
|
-
GPR_ASSERT(list->head->prev == nullptr);
|
43
|
-
GPR_ASSERT(list->tail->next == nullptr);
|
44
|
-
GPR_ASSERT((list->head == list->tail) == (list->head->next == nullptr));
|
45
|
-
|
46
|
-
size_t verified_count = 0;
|
47
|
-
for (l = list->head; l; l = l->next) {
|
48
|
-
GPR_ASSERT(!GRPC_MDISNULL(l->md));
|
49
|
-
GPR_ASSERT((l->prev == nullptr) == (l == list->head));
|
50
|
-
GPR_ASSERT((l->next == nullptr) == (l == list->tail));
|
51
|
-
if (l->next) GPR_ASSERT(l->next->prev == l);
|
52
|
-
if (l->prev) GPR_ASSERT(l->prev->next == l);
|
53
|
-
verified_count++;
|
54
|
-
}
|
55
|
-
GPR_ASSERT(list->count == verified_count);
|
56
|
-
#else
|
57
|
-
// Avoid unused-parameter warning for debug-only parameter
|
58
|
-
(void)list;
|
59
|
-
#endif /* NDEBUG */
|
60
|
-
}
|
61
|
-
|
62
|
-
static void assert_valid_callouts(grpc_metadata_batch* batch) {
|
63
|
-
#ifndef NDEBUG
|
64
|
-
for (grpc_linked_mdelem* l = batch->list.head; l != nullptr; l = l->next) {
|
65
|
-
grpc_slice key_interned = grpc_slice_intern(GRPC_MDKEY(l->md));
|
66
|
-
grpc_metadata_batch_callouts_index callout_idx =
|
67
|
-
GRPC_BATCH_INDEX_OF(key_interned);
|
68
|
-
if (callout_idx != GRPC_BATCH_CALLOUTS_COUNT) {
|
69
|
-
GPR_ASSERT(batch->idx.array[callout_idx] == l);
|
70
|
-
}
|
71
|
-
grpc_slice_unref_internal(key_interned);
|
72
|
-
}
|
73
|
-
#else
|
74
|
-
// Avoid unused-parameter warning for debug-only parameter
|
75
|
-
(void)batch;
|
76
|
-
#endif
|
77
|
-
}
|
78
|
-
|
79
|
-
#ifndef NDEBUG
|
80
|
-
void grpc_metadata_batch_assert_ok(grpc_metadata_batch* batch) {
|
81
|
-
assert_valid_list(&batch->list);
|
82
|
-
}
|
83
|
-
#endif /* NDEBUG */
|
84
|
-
|
85
|
-
void grpc_metadata_batch_init(grpc_metadata_batch* batch) {
|
86
|
-
memset(batch, 0, sizeof(*batch));
|
87
|
-
batch->deadline = GRPC_MILLIS_INF_FUTURE;
|
88
|
-
}
|
89
|
-
|
90
|
-
void grpc_metadata_batch_destroy(grpc_metadata_batch* batch) {
|
91
|
-
grpc_linked_mdelem* l;
|
92
|
-
for (l = batch->list.head; l; l = l->next) {
|
93
|
-
GRPC_MDELEM_UNREF(l->md);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
|
97
|
-
grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
|
98
|
-
grpc_mdelem md) {
|
99
|
-
grpc_error_handle out = grpc_error_set_str(
|
100
|
-
grpc_error_set_str(src, GRPC_ERROR_STR_KEY,
|
101
|
-
grpc_slice_ref_internal(GRPC_MDKEY(md))),
|
102
|
-
GRPC_ERROR_STR_VALUE, grpc_slice_ref_internal(GRPC_MDVALUE(md)));
|
103
|
-
return out;
|
104
|
-
}
|
105
|
-
|
106
|
-
static grpc_error_handle GPR_ATTRIBUTE_NOINLINE error_with_md(grpc_mdelem md) {
|
107
|
-
return grpc_attach_md_to_error(
|
108
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unallowed duplicate metadata"), md);
|
109
|
-
}
|
110
|
-
|
111
|
-
static grpc_error_handle link_callout(grpc_metadata_batch* batch,
|
112
|
-
grpc_linked_mdelem* storage,
|
113
|
-
grpc_metadata_batch_callouts_index idx) {
|
114
|
-
GPR_DEBUG_ASSERT(idx >= 0 && idx < GRPC_BATCH_CALLOUTS_COUNT);
|
115
|
-
if (GPR_LIKELY(batch->idx.array[idx] == nullptr)) {
|
116
|
-
++batch->list.default_count;
|
117
|
-
batch->idx.array[idx] = storage;
|
118
|
-
return GRPC_ERROR_NONE;
|
119
|
-
}
|
120
|
-
return error_with_md(storage->md);
|
121
|
-
}
|
122
|
-
|
123
|
-
static grpc_error_handle maybe_link_callout(grpc_metadata_batch* batch,
|
124
|
-
grpc_linked_mdelem* storage)
|
125
|
-
GRPC_MUST_USE_RESULT;
|
126
|
-
|
127
|
-
static grpc_error_handle maybe_link_callout(grpc_metadata_batch* batch,
|
128
|
-
grpc_linked_mdelem* storage) {
|
129
|
-
grpc_metadata_batch_callouts_index idx =
|
130
|
-
GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
|
131
|
-
if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
|
132
|
-
return GRPC_ERROR_NONE;
|
133
|
-
}
|
134
|
-
return link_callout(batch, storage, idx);
|
135
|
-
}
|
136
|
-
|
137
|
-
static void maybe_unlink_callout(grpc_metadata_batch* batch,
|
138
|
-
grpc_linked_mdelem* storage) {
|
139
|
-
grpc_metadata_batch_callouts_index idx =
|
140
|
-
GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
|
141
|
-
if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
|
142
|
-
return;
|
143
|
-
}
|
144
|
-
--batch->list.default_count;
|
145
|
-
GPR_DEBUG_ASSERT(batch->idx.array[idx] != nullptr);
|
146
|
-
batch->idx.array[idx] = nullptr;
|
147
|
-
}
|
148
|
-
|
149
|
-
grpc_error_handle grpc_metadata_batch_add_head(grpc_metadata_batch* batch,
|
150
|
-
grpc_linked_mdelem* storage,
|
151
|
-
grpc_mdelem elem_to_add) {
|
152
|
-
GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
|
153
|
-
storage->md = elem_to_add;
|
154
|
-
return grpc_metadata_batch_link_head(batch, storage);
|
155
|
-
}
|
156
|
-
|
157
|
-
static void link_head(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
|
158
|
-
assert_valid_list(list);
|
159
|
-
GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
|
160
|
-
storage->prev = nullptr;
|
161
|
-
storage->next = list->head;
|
162
|
-
storage->reserved = nullptr;
|
163
|
-
if (list->head != nullptr) {
|
164
|
-
list->head->prev = storage;
|
165
|
-
} else {
|
166
|
-
list->tail = storage;
|
167
|
-
}
|
168
|
-
list->head = storage;
|
169
|
-
list->count++;
|
170
|
-
assert_valid_list(list);
|
171
|
-
}
|
172
|
-
|
173
|
-
grpc_error_handle grpc_metadata_batch_link_head(grpc_metadata_batch* batch,
|
174
|
-
grpc_linked_mdelem* storage) {
|
175
|
-
assert_valid_callouts(batch);
|
176
|
-
grpc_error_handle err = maybe_link_callout(batch, storage);
|
177
|
-
if (err != GRPC_ERROR_NONE) {
|
178
|
-
assert_valid_callouts(batch);
|
179
|
-
return err;
|
180
|
-
}
|
181
|
-
link_head(&batch->list, storage);
|
182
|
-
assert_valid_callouts(batch);
|
183
|
-
return GRPC_ERROR_NONE;
|
184
|
-
}
|
185
|
-
|
186
|
-
// TODO(arjunroy): Need to revisit this and see what guarantees exist between
|
187
|
-
// C-core and the internal-metadata subsystem. E.g. can we ensure a particular
|
188
|
-
// metadata is never added twice, even in the presence of user supplied data?
|
189
|
-
grpc_error_handle grpc_metadata_batch_link_head(
|
190
|
-
grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
|
191
|
-
grpc_metadata_batch_callouts_index idx) {
|
192
|
-
GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
|
193
|
-
assert_valid_callouts(batch);
|
194
|
-
grpc_error_handle err = link_callout(batch, storage, idx);
|
195
|
-
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
|
196
|
-
assert_valid_callouts(batch);
|
197
|
-
return err;
|
198
|
-
}
|
199
|
-
link_head(&batch->list, storage);
|
200
|
-
assert_valid_callouts(batch);
|
201
|
-
return GRPC_ERROR_NONE;
|
202
|
-
}
|
203
|
-
|
204
|
-
grpc_error_handle grpc_metadata_batch_add_tail(grpc_metadata_batch* batch,
|
205
|
-
grpc_linked_mdelem* storage,
|
206
|
-
grpc_mdelem elem_to_add) {
|
207
|
-
GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
|
208
|
-
storage->md = elem_to_add;
|
209
|
-
return grpc_metadata_batch_link_tail(batch, storage);
|
210
|
-
}
|
211
|
-
|
212
|
-
static void link_tail(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
|
213
|
-
assert_valid_list(list);
|
214
|
-
GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
|
215
|
-
storage->prev = list->tail;
|
216
|
-
storage->next = nullptr;
|
217
|
-
storage->reserved = nullptr;
|
218
|
-
if (list->tail != nullptr) {
|
219
|
-
list->tail->next = storage;
|
220
|
-
} else {
|
221
|
-
list->head = storage;
|
222
|
-
}
|
223
|
-
list->tail = storage;
|
224
|
-
list->count++;
|
225
|
-
assert_valid_list(list);
|
226
|
-
}
|
227
|
-
|
228
|
-
grpc_error_handle grpc_metadata_batch_link_tail(grpc_metadata_batch* batch,
|
229
|
-
grpc_linked_mdelem* storage) {
|
230
|
-
assert_valid_callouts(batch);
|
231
|
-
grpc_error_handle err = maybe_link_callout(batch, storage);
|
232
|
-
if (err != GRPC_ERROR_NONE) {
|
233
|
-
assert_valid_callouts(batch);
|
234
|
-
return err;
|
235
|
-
}
|
236
|
-
link_tail(&batch->list, storage);
|
237
|
-
assert_valid_callouts(batch);
|
238
|
-
return GRPC_ERROR_NONE;
|
239
|
-
}
|
240
|
-
|
241
|
-
grpc_error_handle grpc_metadata_batch_link_tail(
|
242
|
-
grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
|
243
|
-
grpc_metadata_batch_callouts_index idx) {
|
244
|
-
GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
|
245
|
-
assert_valid_callouts(batch);
|
246
|
-
grpc_error_handle err = link_callout(batch, storage, idx);
|
247
|
-
if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
|
248
|
-
assert_valid_callouts(batch);
|
249
|
-
return err;
|
250
|
-
}
|
251
|
-
link_tail(&batch->list, storage);
|
252
|
-
assert_valid_callouts(batch);
|
253
|
-
return GRPC_ERROR_NONE;
|
254
|
-
}
|
255
|
-
|
256
|
-
static void unlink_storage(grpc_mdelem_list* list,
|
257
|
-
grpc_linked_mdelem* storage) {
|
258
|
-
assert_valid_list(list);
|
259
|
-
if (storage->prev != nullptr) {
|
260
|
-
storage->prev->next = storage->next;
|
261
|
-
} else {
|
262
|
-
list->head = storage->next;
|
263
|
-
}
|
264
|
-
if (storage->next != nullptr) {
|
265
|
-
storage->next->prev = storage->prev;
|
266
|
-
} else {
|
267
|
-
list->tail = storage->prev;
|
268
|
-
}
|
269
|
-
list->count--;
|
270
|
-
assert_valid_list(list);
|
271
|
-
}
|
272
|
-
|
273
|
-
void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
|
274
|
-
grpc_linked_mdelem* storage) {
|
275
|
-
assert_valid_callouts(batch);
|
276
|
-
maybe_unlink_callout(batch, storage);
|
277
|
-
unlink_storage(&batch->list, storage);
|
278
|
-
GRPC_MDELEM_UNREF(storage->md);
|
279
|
-
assert_valid_callouts(batch);
|
280
|
-
}
|
281
|
-
|
282
|
-
void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
|
283
|
-
grpc_metadata_batch_callouts_index idx) {
|
284
|
-
assert_valid_callouts(batch);
|
285
|
-
grpc_linked_mdelem* storage = batch->idx.array[idx];
|
286
|
-
GPR_DEBUG_ASSERT(storage != nullptr);
|
287
|
-
--batch->list.default_count;
|
288
|
-
batch->idx.array[idx] = nullptr;
|
289
|
-
unlink_storage(&batch->list, storage);
|
290
|
-
GRPC_MDELEM_UNREF(storage->md);
|
291
|
-
assert_valid_callouts(batch);
|
292
|
-
}
|
293
|
-
|
294
35
|
void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
|
295
36
|
const grpc_slice& value) {
|
296
37
|
grpc_mdelem old_mdelem = storage->md;
|
@@ -300,131 +41,54 @@ void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
|
|
300
41
|
GRPC_MDELEM_UNREF(old_mdelem);
|
301
42
|
}
|
302
43
|
|
303
|
-
|
304
|
-
grpc_metadata_batch* batch, absl::string_view target_key,
|
305
|
-
std::string* concatenated_value) {
|
306
|
-
// Find all values for the specified key.
|
307
|
-
GPR_DEBUG_ASSERT(batch != nullptr);
|
308
|
-
absl::InlinedVector<absl::string_view, 1> values;
|
309
|
-
for (grpc_linked_mdelem* md = batch->list.head; md != nullptr;
|
310
|
-
md = md->next) {
|
311
|
-
absl::string_view key = grpc_core::StringViewFromSlice(GRPC_MDKEY(md->md));
|
312
|
-
absl::string_view value =
|
313
|
-
grpc_core::StringViewFromSlice(GRPC_MDVALUE(md->md));
|
314
|
-
if (target_key == key) values.push_back(value);
|
315
|
-
}
|
316
|
-
// If none found, no match.
|
317
|
-
if (values.empty()) return absl::nullopt;
|
318
|
-
// If exactly one found, return it as-is.
|
319
|
-
if (values.size() == 1) return values.front();
|
320
|
-
// If more than one found, concatenate the values, using
|
321
|
-
// *concatenated_values as a temporary holding place for the
|
322
|
-
// concatenated string.
|
323
|
-
*concatenated_value = absl::StrJoin(values, ",");
|
324
|
-
return *concatenated_value;
|
325
|
-
}
|
326
|
-
|
327
|
-
grpc_error_handle grpc_metadata_batch_substitute(grpc_metadata_batch* batch,
|
328
|
-
grpc_linked_mdelem* storage,
|
329
|
-
grpc_mdelem new_mdelem) {
|
330
|
-
assert_valid_callouts(batch);
|
331
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
332
|
-
grpc_mdelem old_mdelem = storage->md;
|
333
|
-
if (!grpc_slice_eq(GRPC_MDKEY(new_mdelem), GRPC_MDKEY(old_mdelem))) {
|
334
|
-
maybe_unlink_callout(batch, storage);
|
335
|
-
storage->md = new_mdelem;
|
336
|
-
error = maybe_link_callout(batch, storage);
|
337
|
-
if (error != GRPC_ERROR_NONE) {
|
338
|
-
unlink_storage(&batch->list, storage);
|
339
|
-
GRPC_MDELEM_UNREF(storage->md);
|
340
|
-
}
|
341
|
-
} else {
|
342
|
-
storage->md = new_mdelem;
|
343
|
-
}
|
344
|
-
GRPC_MDELEM_UNREF(old_mdelem);
|
345
|
-
assert_valid_callouts(batch);
|
346
|
-
return error;
|
347
|
-
}
|
44
|
+
namespace {
|
348
45
|
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
}
|
46
|
+
class CopySink {
|
47
|
+
public:
|
48
|
+
explicit CopySink(grpc_metadata_batch* dst) : dst_(dst) {}
|
353
49
|
|
354
|
-
|
355
|
-
return batch->list.head == nullptr &&
|
356
|
-
batch->deadline == GRPC_MILLIS_INF_FUTURE;
|
357
|
-
}
|
358
|
-
|
359
|
-
size_t grpc_metadata_batch_size(grpc_metadata_batch* batch) {
|
360
|
-
size_t size = 0;
|
361
|
-
for (grpc_linked_mdelem* elem = batch->list.head; elem != nullptr;
|
362
|
-
elem = elem->next) {
|
363
|
-
size += GRPC_MDELEM_LENGTH(elem->md);
|
364
|
-
}
|
365
|
-
return size;
|
366
|
-
}
|
367
|
-
|
368
|
-
static void add_error(grpc_error_handle* composite, grpc_error_handle error,
|
369
|
-
const char* composite_error_string) {
|
370
|
-
if (error == GRPC_ERROR_NONE) return;
|
371
|
-
if (*composite == GRPC_ERROR_NONE) {
|
372
|
-
*composite = GRPC_ERROR_CREATE_FROM_COPIED_STRING(composite_error_string);
|
373
|
-
}
|
374
|
-
*composite = grpc_error_add_child(*composite, error);
|
375
|
-
}
|
376
|
-
|
377
|
-
grpc_error_handle grpc_metadata_batch_filter(
|
378
|
-
grpc_metadata_batch* batch, grpc_metadata_batch_filter_func func,
|
379
|
-
void* user_data, const char* composite_error_string) {
|
380
|
-
grpc_linked_mdelem* l = batch->list.head;
|
381
|
-
grpc_error_handle error = GRPC_ERROR_NONE;
|
382
|
-
while (l) {
|
383
|
-
grpc_linked_mdelem* next = l->next;
|
384
|
-
grpc_filtered_mdelem new_mdelem = func(user_data, l->md);
|
385
|
-
add_error(&error, new_mdelem.error, composite_error_string);
|
386
|
-
if (GRPC_MDISNULL(new_mdelem.md)) {
|
387
|
-
grpc_metadata_batch_remove(batch, l);
|
388
|
-
} else if (new_mdelem.md.payload != l->md.payload) {
|
389
|
-
grpc_metadata_batch_substitute(batch, l, new_mdelem.md);
|
390
|
-
}
|
391
|
-
l = next;
|
392
|
-
}
|
393
|
-
return error;
|
394
|
-
}
|
395
|
-
|
396
|
-
void grpc_metadata_batch_copy(grpc_metadata_batch* src,
|
397
|
-
grpc_metadata_batch* dst,
|
398
|
-
grpc_linked_mdelem* storage) {
|
399
|
-
grpc_metadata_batch_init(dst);
|
400
|
-
dst->deadline = src->deadline;
|
401
|
-
size_t i = 0;
|
402
|
-
for (grpc_linked_mdelem* elem = src->list.head; elem != nullptr;
|
403
|
-
elem = elem->next) {
|
50
|
+
void Encode(grpc_mdelem md) {
|
404
51
|
// If the mdelem is not external, take a ref.
|
405
52
|
// Otherwise, create a new copy, holding its own refs to the
|
406
53
|
// underlying slices.
|
407
|
-
|
408
|
-
|
409
|
-
md = GRPC_MDELEM_REF(elem->md);
|
54
|
+
if (GRPC_MDELEM_STORAGE(md) != GRPC_MDELEM_STORAGE_EXTERNAL) {
|
55
|
+
md = GRPC_MDELEM_REF(md);
|
410
56
|
} else {
|
411
|
-
md = grpc_mdelem_from_slices(
|
412
|
-
|
413
|
-
grpc_slice_ref_internal(GRPC_MDVALUE(elem->md)));
|
57
|
+
md = grpc_mdelem_from_slices(grpc_slice_copy(GRPC_MDKEY(md)),
|
58
|
+
grpc_slice_copy(GRPC_MDVALUE(md)));
|
414
59
|
}
|
415
60
|
// Error unused in non-debug builds.
|
416
|
-
grpc_error_handle GRPC_UNUSED error =
|
417
|
-
|
418
|
-
// The only way that grpc_metadata_batch_add_tail() can fail is if
|
61
|
+
grpc_error_handle GRPC_UNUSED error = dst_->Append(md);
|
62
|
+
// The only way that Append() can fail is if
|
419
63
|
// there's a duplicate entry for a callout. However, that can't be
|
420
64
|
// the case here, because we would not have been allowed to create
|
421
65
|
// a source batch that had that kind of conflict.
|
422
66
|
GPR_DEBUG_ASSERT(error == GRPC_ERROR_NONE);
|
423
67
|
}
|
424
|
-
}
|
425
68
|
|
426
|
-
|
69
|
+
template <class T, class V>
|
70
|
+
void Encode(T trait, V value) {
|
71
|
+
dst_->Set(trait, value);
|
72
|
+
}
|
73
|
+
|
74
|
+
private:
|
75
|
+
grpc_metadata_batch* dst_;
|
76
|
+
};
|
77
|
+
|
78
|
+
} // namespace
|
79
|
+
|
80
|
+
void grpc_metadata_batch_copy(const grpc_metadata_batch* src,
|
427
81
|
grpc_metadata_batch* dst) {
|
428
|
-
|
429
|
-
|
82
|
+
dst->Clear();
|
83
|
+
CopySink sink(dst);
|
84
|
+
src->Encode(&sink);
|
85
|
+
}
|
86
|
+
|
87
|
+
grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
|
88
|
+
grpc_mdelem md) {
|
89
|
+
grpc_error_handle out = grpc_error_set_str(
|
90
|
+
grpc_error_set_str(src, GRPC_ERROR_STR_KEY,
|
91
|
+
grpc_core::StringViewFromSlice(GRPC_MDKEY(md))),
|
92
|
+
GRPC_ERROR_STR_VALUE, grpc_core::StringViewFromSlice(GRPC_MDVALUE(md)));
|
93
|
+
return out;
|
430
94
|
}
|