grpc 1.41.0.pre2 → 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 +57 -44
- data/etc/roots.pem +335 -326
- 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/err_data.c +278 -272
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
- data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
- data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
- data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
- data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
- data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
- data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
- data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
- data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
- data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
- 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 +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
- 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/mem.c +12 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
- data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
- data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
- data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
- data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
- data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
- data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
- data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
- data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
- data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
- data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
- data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
- data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
- data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
- data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
- 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 +81 -68
- 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
@@ -42,7 +42,7 @@ typedef enum { GRPC_SECURITY_OK = 0, GRPC_SECURITY_ERROR } grpc_security_status;
|
|
42
42
|
A security connector object represents away to configure the underlying
|
43
43
|
transport security mechanism and check the resulting trusted peer. */
|
44
44
|
|
45
|
-
#define GRPC_ARG_SECURITY_CONNECTOR "grpc.security_connector"
|
45
|
+
#define GRPC_ARG_SECURITY_CONNECTOR "grpc.internal.security_connector"
|
46
46
|
|
47
47
|
class grpc_security_connector
|
48
48
|
: public grpc_core::RefCounted<grpc_security_connector> {
|
@@ -523,7 +523,7 @@ static void grpc_ssl_session_cache_arg_destroy(void* p) {
|
|
523
523
|
}
|
524
524
|
|
525
525
|
static int grpc_ssl_session_cache_arg_cmp(void* p, void* q) {
|
526
|
-
return
|
526
|
+
return grpc_core::QsortCompare(p, q);
|
527
527
|
}
|
528
528
|
|
529
529
|
grpc_arg grpc_ssl_session_cache_create_channel_arg(
|
@@ -26,8 +26,6 @@
|
|
26
26
|
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
|
27
27
|
#include "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h"
|
28
28
|
|
29
|
-
#define GRPC_TLS_TRANSPORT_SECURITY_TYPE "tls"
|
30
|
-
|
31
29
|
namespace grpc_core {
|
32
30
|
|
33
31
|
// Channel security connector using TLS as transport security protocol.
|
@@ -372,13 +372,13 @@ static void client_auth_start_transport_stream_op_batch(
|
|
372
372
|
if (batch->send_initial_metadata) {
|
373
373
|
grpc_metadata_batch* metadata =
|
374
374
|
batch->payload->send_initial_metadata.send_initial_metadata;
|
375
|
-
if (metadata->
|
376
|
-
calld->method =
|
377
|
-
|
375
|
+
if (metadata->legacy_index()->named.path != nullptr) {
|
376
|
+
calld->method = grpc_slice_ref_internal(
|
377
|
+
GRPC_MDVALUE(metadata->legacy_index()->named.path->md));
|
378
378
|
}
|
379
|
-
if (metadata->
|
379
|
+
if (metadata->legacy_index()->named.authority != nullptr) {
|
380
380
|
calld->host = grpc_slice_ref_internal(
|
381
|
-
GRPC_MDVALUE(metadata->
|
381
|
+
GRPC_MDVALUE(metadata->legacy_index()->named.authority->md));
|
382
382
|
batch->handler_private.extra_arg = elem;
|
383
383
|
GRPC_CALL_STACK_REF(calld->owning_call, "check_call_host");
|
384
384
|
GRPC_CLOSURE_INIT(&calld->async_result_closure, on_host_checked, batch,
|
@@ -116,13 +116,10 @@ SecurityHandshaker::SecurityHandshaker(tsi_handshaker* handshaker,
|
|
116
116
|
connector_(connector->Ref(DEBUG_LOCATION, "handshake")),
|
117
117
|
handshake_buffer_size_(GRPC_INITIAL_HANDSHAKE_BUFFER_SIZE),
|
118
118
|
handshake_buffer_(
|
119
|
-
static_cast<uint8_t*>(gpr_malloc(handshake_buffer_size_)))
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
max_frame_size_ = grpc_channel_arg_get_integer(
|
124
|
-
arg, {0, 0, std::numeric_limits<int>::max()});
|
125
|
-
}
|
119
|
+
static_cast<uint8_t*>(gpr_malloc(handshake_buffer_size_))),
|
120
|
+
max_frame_size_(grpc_channel_args_find_integer(
|
121
|
+
args, GRPC_ARG_TSI_MAX_FRAME_SIZE,
|
122
|
+
{0, 0, std::numeric_limits<int>::max()})) {
|
126
123
|
grpc_slice_buffer_init(&outgoing_);
|
127
124
|
GRPC_CLOSURE_INIT(&on_peer_checked_, &SecurityHandshaker::OnPeerCheckedFn,
|
128
125
|
this, grpc_schedule_on_exec_ctx);
|
@@ -232,49 +229,83 @@ void SecurityHandshaker::OnPeerCheckedInner(grpc_error_handle error) {
|
|
232
229
|
HandshakeFailedLocked(error);
|
233
230
|
return;
|
234
231
|
}
|
235
|
-
//
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
&
|
240
|
-
if (result != TSI_OK
|
241
|
-
|
232
|
+
// Get unused bytes.
|
233
|
+
const unsigned char* unused_bytes = nullptr;
|
234
|
+
size_t unused_bytes_size = 0;
|
235
|
+
tsi_result result = tsi_handshaker_result_get_unused_bytes(
|
236
|
+
handshaker_result_, &unused_bytes, &unused_bytes_size);
|
237
|
+
if (result != TSI_OK) {
|
238
|
+
HandshakeFailedLocked(grpc_set_tsi_error_result(
|
242
239
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
243
|
-
"
|
244
|
-
result);
|
245
|
-
|
240
|
+
"TSI handshaker result does not provide unused bytes"),
|
241
|
+
result));
|
242
|
+
return;
|
243
|
+
}
|
244
|
+
// Check whether we need to wrap the endpoint.
|
245
|
+
tsi_frame_protector_type frame_protector_type;
|
246
|
+
result = tsi_handshaker_result_get_frame_protector_type(
|
247
|
+
handshaker_result_, &frame_protector_type);
|
248
|
+
if (result != TSI_OK) {
|
249
|
+
HandshakeFailedLocked(grpc_set_tsi_error_result(
|
250
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
251
|
+
"TSI handshaker result does not implement "
|
252
|
+
"get_frame_protector_type"),
|
253
|
+
result));
|
246
254
|
return;
|
247
255
|
}
|
248
|
-
|
256
|
+
tsi_zero_copy_grpc_protector* zero_copy_protector = nullptr;
|
249
257
|
tsi_frame_protector* protector = nullptr;
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
258
|
+
switch (frame_protector_type) {
|
259
|
+
case TSI_FRAME_PROTECTOR_ZERO_COPY:
|
260
|
+
ABSL_FALLTHROUGH_INTENDED;
|
261
|
+
case TSI_FRAME_PROTECTOR_NORMAL_OR_ZERO_COPY:
|
262
|
+
// Create zero-copy frame protector.
|
263
|
+
result = tsi_handshaker_result_create_zero_copy_grpc_protector(
|
264
|
+
handshaker_result_, max_frame_size_ == 0 ? nullptr : &max_frame_size_,
|
265
|
+
&zero_copy_protector);
|
266
|
+
if (result != TSI_OK) {
|
267
|
+
HandshakeFailedLocked(grpc_set_tsi_error_result(
|
268
|
+
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
269
|
+
"Zero-copy frame protector creation failed"),
|
270
|
+
result));
|
271
|
+
return;
|
272
|
+
}
|
273
|
+
break;
|
274
|
+
case TSI_FRAME_PROTECTOR_NORMAL:
|
275
|
+
// Create normal frame protector.
|
276
|
+
result = tsi_handshaker_result_create_frame_protector(
|
277
|
+
handshaker_result_, max_frame_size_ == 0 ? nullptr : &max_frame_size_,
|
278
|
+
&protector);
|
279
|
+
if (result != TSI_OK) {
|
280
|
+
HandshakeFailedLocked(
|
281
|
+
grpc_set_tsi_error_result(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
282
|
+
"Frame protector creation failed"),
|
283
|
+
result));
|
284
|
+
return;
|
285
|
+
}
|
286
|
+
break;
|
287
|
+
case TSI_FRAME_PROTECTOR_NONE:
|
288
|
+
break;
|
261
289
|
}
|
262
|
-
//
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
290
|
+
// If we have a frame protector, create a secure endpoint.
|
291
|
+
if (zero_copy_protector != nullptr || protector != nullptr) {
|
292
|
+
if (unused_bytes_size > 0) {
|
293
|
+
grpc_slice slice = grpc_slice_from_copied_buffer(
|
294
|
+
reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
|
295
|
+
args_->endpoint = grpc_secure_endpoint_create(
|
296
|
+
protector, zero_copy_protector, args_->endpoint, &slice, 1);
|
297
|
+
grpc_slice_unref_internal(slice);
|
298
|
+
} else {
|
299
|
+
args_->endpoint = grpc_secure_endpoint_create(
|
300
|
+
protector, zero_copy_protector, args_->endpoint, nullptr, 0);
|
301
|
+
}
|
302
|
+
} else if (unused_bytes_size > 0) {
|
303
|
+
// Not wrapping the endpoint, so just pass along unused bytes.
|
269
304
|
grpc_slice slice = grpc_slice_from_copied_buffer(
|
270
305
|
reinterpret_cast<const char*>(unused_bytes), unused_bytes_size);
|
271
|
-
args_->
|
272
|
-
protector, zero_copy_protector, args_->endpoint, &slice, 1);
|
273
|
-
grpc_slice_unref_internal(slice);
|
274
|
-
} else {
|
275
|
-
args_->endpoint = grpc_secure_endpoint_create(
|
276
|
-
protector, zero_copy_protector, args_->endpoint, nullptr, 0);
|
306
|
+
grpc_slice_buffer_add(args_->read_buffer, slice);
|
277
307
|
}
|
308
|
+
// Done with handshaker result.
|
278
309
|
tsi_handshaker_result_destroy(handshaker_result_);
|
279
310
|
handshaker_result_ = nullptr;
|
280
311
|
// Add auth context to channel args.
|
@@ -430,7 +461,6 @@ void SecurityHandshaker::OnHandshakeDataReceivedFromPeerFn(
|
|
430
461
|
size_t bytes_received_size = h->MoveReadBufferIntoHandshakeBuffer();
|
431
462
|
// Call TSI handshaker.
|
432
463
|
error = h->DoHandshakerNextLocked(h->handshake_buffer_, bytes_received_size);
|
433
|
-
|
434
464
|
if (error != GRPC_ERROR_NONE) {
|
435
465
|
h->HandshakeFailedLocked(error);
|
436
466
|
} else {
|
@@ -96,23 +96,21 @@ struct call_data {
|
|
96
96
|
|
97
97
|
static grpc_metadata_array metadata_batch_to_md_array(
|
98
98
|
const grpc_metadata_batch* batch) {
|
99
|
-
grpc_linked_mdelem* l;
|
100
99
|
grpc_metadata_array result;
|
101
100
|
grpc_metadata_array_init(&result);
|
102
|
-
|
101
|
+
batch->ForEach([&](grpc_mdelem md) {
|
103
102
|
grpc_metadata* usr_md = nullptr;
|
104
|
-
grpc_mdelem md = l->md;
|
105
103
|
grpc_slice key = GRPC_MDKEY(md);
|
106
104
|
grpc_slice value = GRPC_MDVALUE(md);
|
107
105
|
if (result.count == result.capacity) {
|
108
|
-
result.capacity =
|
106
|
+
result.capacity = std::max(result.capacity + 8, result.capacity * 2);
|
109
107
|
result.metadata = static_cast<grpc_metadata*>(gpr_realloc(
|
110
108
|
result.metadata, result.capacity * sizeof(grpc_metadata)));
|
111
109
|
}
|
112
110
|
usr_md = &result.metadata[result.count++];
|
113
111
|
usr_md->key = grpc_slice_ref_internal(key);
|
114
112
|
usr_md->value = grpc_slice_ref_internal(value);
|
115
|
-
}
|
113
|
+
});
|
116
114
|
return result;
|
117
115
|
}
|
118
116
|
|
@@ -22,9 +22,7 @@
|
|
22
22
|
|
23
23
|
grpc_error_handle grpc_set_tsi_error_result(grpc_error_handle error,
|
24
24
|
tsi_result result) {
|
25
|
-
return grpc_error_set_int(
|
26
|
-
|
27
|
-
|
28
|
-
grpc_slice_from_static_string(tsi_result_to_string(result))),
|
29
|
-
GRPC_ERROR_INT_TSI_CODE, result);
|
25
|
+
return grpc_error_set_int(grpc_error_set_str(error, GRPC_ERROR_STR_TSI_ERROR,
|
26
|
+
tsi_result_to_string(result)),
|
27
|
+
GRPC_ERROR_INT_TSI_CODE, result);
|
30
28
|
}
|
data/src/core/lib/slice/slice.cc
CHANGED
@@ -26,7 +26,6 @@
|
|
26
26
|
|
27
27
|
#include "src/core/lib/gprpp/memory.h"
|
28
28
|
#include "src/core/lib/gprpp/ref_counted.h"
|
29
|
-
#include "src/core/lib/iomgr/exec_ctx.h"
|
30
29
|
#include "src/core/lib/slice/slice_internal.h"
|
31
30
|
|
32
31
|
char* grpc_slice_to_c_string(grpc_slice slice) {
|
@@ -45,21 +44,6 @@ grpc_slice grpc_slice_copy(grpc_slice s) {
|
|
45
44
|
return out;
|
46
45
|
}
|
47
46
|
|
48
|
-
/* Public API */
|
49
|
-
grpc_slice grpc_slice_ref(grpc_slice slice) {
|
50
|
-
return grpc_slice_ref_internal(slice);
|
51
|
-
}
|
52
|
-
|
53
|
-
/* Public API */
|
54
|
-
void grpc_slice_unref(grpc_slice slice) {
|
55
|
-
if (grpc_core::ExecCtx::Get() == nullptr) {
|
56
|
-
grpc_core::ExecCtx exec_ctx;
|
57
|
-
grpc_slice_unref_internal(slice);
|
58
|
-
} else {
|
59
|
-
grpc_slice_unref_internal(slice);
|
60
|
-
}
|
61
|
-
}
|
62
|
-
|
63
47
|
namespace grpc_core {
|
64
48
|
|
65
49
|
/* grpc_slice_from_static_string support structure - a refcount that does
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/*
|
2
|
+
*
|
3
|
+
* Copyright 2015 gRPC authors.
|
4
|
+
*
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
* you may not use this file except in compliance with the License.
|
7
|
+
* You may obtain a copy of the License at
|
8
|
+
*
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
*
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
* See the License for the specific language governing permissions and
|
15
|
+
* limitations under the License.
|
16
|
+
*
|
17
|
+
*/
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include <grpc/slice.h>
|
22
|
+
|
23
|
+
#include "src/core/lib/iomgr/exec_ctx.h"
|
24
|
+
#include "src/core/lib/slice/slice_internal.h"
|
25
|
+
|
26
|
+
/* Public API */
|
27
|
+
grpc_slice grpc_slice_ref(grpc_slice slice) {
|
28
|
+
return grpc_slice_ref_internal(slice);
|
29
|
+
}
|
30
|
+
|
31
|
+
/* Public API */
|
32
|
+
void grpc_slice_unref(grpc_slice slice) {
|
33
|
+
if (grpc_core::ExecCtx::Get() == nullptr) {
|
34
|
+
grpc_core::ExecCtx exec_ctx;
|
35
|
+
grpc_slice_unref_internal(slice);
|
36
|
+
} else {
|
37
|
+
grpc_slice_unref_internal(slice);
|
38
|
+
}
|
39
|
+
}
|
@@ -231,19 +231,19 @@ void grpc_slice_buffer_swap(grpc_slice_buffer* a, grpc_slice_buffer* b) {
|
|
231
231
|
memcpy(a->base_slices, b->inlined, b_count * sizeof(grpc_slice));
|
232
232
|
} else {
|
233
233
|
/* no inlining: easy swap */
|
234
|
-
|
234
|
+
std::swap(a->base_slices, b->base_slices);
|
235
235
|
}
|
236
236
|
|
237
|
-
/* Update the slices pointers (cannot do a
|
237
|
+
/* Update the slices pointers (cannot do a std::swap on slices fields here).
|
238
238
|
* Also note that since the base_slices pointers are already swapped we need
|
239
239
|
* use 'b_offset' for 'a->base_slices' and vice versa */
|
240
240
|
a->slices = a->base_slices + b_offset;
|
241
241
|
b->slices = b->base_slices + a_offset;
|
242
242
|
|
243
243
|
/* base_slices and slices fields are correctly set. Swap all other fields */
|
244
|
-
|
245
|
-
|
246
|
-
|
244
|
+
std::swap(a->count, b->count);
|
245
|
+
std::swap(a->capacity, b->capacity);
|
246
|
+
std::swap(a->length, b->length);
|
247
247
|
}
|
248
248
|
|
249
249
|
void grpc_slice_buffer_move_into(grpc_slice_buffer* src,
|
@@ -136,12 +136,11 @@ grpc_slice grpc_slice_maybe_static_intern(grpc_slice slice,
|
|
136
136
|
for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) {
|
137
137
|
static_metadata_hash_ent ent =
|
138
138
|
static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)];
|
139
|
-
const grpc_core::StaticMetadataSlice* static_slice_table =
|
140
|
-
grpc_static_slice_table();
|
141
139
|
if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT &&
|
142
|
-
grpc_slice_eq_static_interned(
|
140
|
+
grpc_slice_eq_static_interned(
|
141
|
+
slice, grpc_core::g_static_metadata_slice_table[ent.idx])) {
|
143
142
|
*returned_slice_is_different = true;
|
144
|
-
return
|
143
|
+
return grpc_core::g_static_metadata_slice_table[ent.idx];
|
145
144
|
}
|
146
145
|
}
|
147
146
|
|
@@ -167,11 +166,9 @@ static const grpc_core::StaticMetadataSlice* MatchStaticSlice(
|
|
167
166
|
for (uint32_t i = 0; i <= max_static_metadata_hash_probe; i++) {
|
168
167
|
static_metadata_hash_ent ent =
|
169
168
|
static_metadata_hash[(hash + i) % GPR_ARRAY_SIZE(static_metadata_hash)];
|
170
|
-
const grpc_core::StaticMetadataSlice* static_slice_table =
|
171
|
-
grpc_static_slice_table();
|
172
169
|
if (ent.hash == hash && ent.idx < GRPC_STATIC_MDSTR_COUNT &&
|
173
|
-
|
174
|
-
return &
|
170
|
+
grpc_core::g_static_metadata_slice_table[ent.idx] == args) {
|
171
|
+
return &grpc_core::g_static_metadata_slice_table[ent.idx];
|
175
172
|
}
|
176
173
|
}
|
177
174
|
return nullptr;
|
@@ -323,11 +320,9 @@ void grpc_slice_intern_init(void) {
|
|
323
320
|
static_metadata_hash[i].idx = GRPC_STATIC_MDSTR_COUNT;
|
324
321
|
}
|
325
322
|
max_static_metadata_hash_probe = 0;
|
326
|
-
const grpc_core::StaticMetadataSlice* static_slice_table =
|
327
|
-
grpc_static_slice_table();
|
328
323
|
for (size_t i = 0; i < GRPC_STATIC_MDSTR_COUNT; i++) {
|
329
|
-
grpc_static_metadata_hash_values[i] =
|
330
|
-
|
324
|
+
grpc_static_metadata_hash_values[i] = grpc_slice_default_hash_internal(
|
325
|
+
grpc_core::g_static_metadata_slice_table[i]);
|
331
326
|
for (size_t j = 0; j < GPR_ARRAY_SIZE(static_metadata_hash); j++) {
|
332
327
|
size_t slot = (grpc_static_metadata_hash_values[i] + j) %
|
333
328
|
GPR_ARRAY_SIZE(static_metadata_hash);
|
@@ -343,7 +338,7 @@ void grpc_slice_intern_init(void) {
|
|
343
338
|
}
|
344
339
|
// Handle KV hash for all static mdelems.
|
345
340
|
for (size_t i = 0; i < GRPC_STATIC_MDELEM_COUNT; ++i) {
|
346
|
-
|
341
|
+
grpc_core::g_static_mdelem_table[i].HashInit();
|
347
342
|
}
|
348
343
|
}
|
349
344
|
|
@@ -30,251 +30,8 @@
|
|
30
30
|
#include "src/core/lib/gpr/murmur_hash.h"
|
31
31
|
#include "src/core/lib/gprpp/memory.h"
|
32
32
|
#include "src/core/lib/gprpp/ref_counted.h"
|
33
|
+
#include "src/core/lib/slice/slice_refcount.h"
|
33
34
|
#include "src/core/lib/slice/slice_utils.h"
|
34
|
-
#include "src/core/lib/transport/static_metadata.h"
|
35
|
-
|
36
|
-
// Interned slices have specific fast-path operations for hashing. To inline
|
37
|
-
// these operations, we need to forward declare them here.
|
38
|
-
extern uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
|
39
|
-
|
40
|
-
// grpc_slice_refcount : A reference count for grpc_slice.
|
41
|
-
//
|
42
|
-
// Non-inlined grpc_slice objects are refcounted. Historically this was
|
43
|
-
// implemented via grpc_slice_refcount, a C-style polymorphic class using a
|
44
|
-
// manually managed vtable of operations. Subclasses would define their own
|
45
|
-
// vtable; the 'virtual' methods (ref, unref, equals and hash) would simply call
|
46
|
-
// the function pointers in the vtable as necessary.
|
47
|
-
//
|
48
|
-
// Unfortunately, this leads to some inefficiencies in the generated code that
|
49
|
-
// can be improved upon. For example, equality checking for interned slices is a
|
50
|
-
// simple equality check on the refcount pointer. With the vtable approach, this
|
51
|
-
// would translate to roughly the following (high-level) instructions:
|
52
|
-
//
|
53
|
-
// grpc_slice_equals(slice1, slice2):
|
54
|
-
// load vtable->eq -> eq_func
|
55
|
-
// call eq_func(slice1, slice2)
|
56
|
-
//
|
57
|
-
// interned_slice_equals(slice1, slice2)
|
58
|
-
// load slice1.ref -> r1
|
59
|
-
// load slice2.ref -> r2
|
60
|
-
// cmp r1, r2 -> retval
|
61
|
-
// ret retval
|
62
|
-
//
|
63
|
-
// This leads to a function call for a function defined in another translation
|
64
|
-
// unit, which imposes memory barriers, which reduces the compiler's ability to
|
65
|
-
// optimize (in addition to the added overhead of call/ret). Additionally, it
|
66
|
-
// may be harder to reason about branch prediction when we're jumping to
|
67
|
-
// essentially arbitrarily provided function pointers.
|
68
|
-
//
|
69
|
-
// In addition, it is arguable that while virtualization was helpful for
|
70
|
-
// Equals()/Hash() methods, that it was fundamentally unnecessary for
|
71
|
-
// Ref()/Unref().
|
72
|
-
//
|
73
|
-
// Instead, grpc_slice_refcount provides the same functionality as the C-style
|
74
|
-
// virtual class, but in a de-virtualized manner - Eq(), Hash(), Ref() and
|
75
|
-
// Unref() are provided within this header file. Fastpaths for Eq()/Hash()
|
76
|
-
// (interned and static metadata slices), as well as the Ref() operation, can
|
77
|
-
// all be inlined without any memory barriers.
|
78
|
-
//
|
79
|
-
// It does this by:
|
80
|
-
// 1. Using grpc_core::RefCount<> (header-only) for Ref/Unref. Two special cases
|
81
|
-
// need support: No-op ref/unref (eg. static metadata slices) and stream
|
82
|
-
// slice references (where all the slices share the streamref). This is in
|
83
|
-
// addition to the normal case of '1 slice, 1 ref'.
|
84
|
-
// To support these cases, we explicitly track a nullable pointer to the
|
85
|
-
// underlying RefCount<>. No-op ref/unref is used by checking the pointer for
|
86
|
-
// null, and doing nothing if it is. Both stream slice refs and 'normal'
|
87
|
-
// slices use the same path for Ref/Unref (by targeting the non-null
|
88
|
-
// pointer).
|
89
|
-
//
|
90
|
-
// 2. introducing the notion of grpc_slice_refcount::Type. This describes if a
|
91
|
-
// slice ref is used by a static metadata slice, an interned slice, or other
|
92
|
-
// slices. We switch on the slice ref type in order to provide fastpaths for
|
93
|
-
// Equals() and Hash().
|
94
|
-
//
|
95
|
-
// In total, this saves us roughly 1-2% latency for unary calls, with smaller
|
96
|
-
// calls benefitting. The effect is present, but not as useful, for larger calls
|
97
|
-
// where the cost of sending the data dominates.
|
98
|
-
// TODO(arjunroy): Investigate if this can be removed with strongly typed
|
99
|
-
// grpc_slices.
|
100
|
-
struct grpc_slice_refcount {
|
101
|
-
public:
|
102
|
-
enum class Type {
|
103
|
-
STATIC, // Refcount for a static metadata slice.
|
104
|
-
INTERNED, // Refcount for an interned slice.
|
105
|
-
NOP, // No-Op
|
106
|
-
REGULAR // Refcount for non-static-metadata, non-interned slices.
|
107
|
-
};
|
108
|
-
typedef void (*DestroyerFn)(void*);
|
109
|
-
|
110
|
-
grpc_slice_refcount() = default;
|
111
|
-
|
112
|
-
explicit grpc_slice_refcount(Type t) : ref_type_(t) {}
|
113
|
-
|
114
|
-
explicit grpc_slice_refcount(grpc_slice_refcount* sub) : sub_refcount_(sub) {}
|
115
|
-
// Regular constructor for grpc_slice_refcount.
|
116
|
-
//
|
117
|
-
// Parameters:
|
118
|
-
// 1. grpc_slice_refcount::Type type
|
119
|
-
// Whether we are the refcount for a static
|
120
|
-
// metadata slice, an interned slice, or any other kind of slice.
|
121
|
-
//
|
122
|
-
// 2. RefCount* ref
|
123
|
-
// The pointer to the actual underlying grpc_core::RefCount. Rather than
|
124
|
-
// performing struct offset computations as in the original implementation to
|
125
|
-
// get to the refcount, which requires a virtual method, we devirtualize by
|
126
|
-
// using a nullable pointer to allow a single pair of Ref/Unref methods.
|
127
|
-
//
|
128
|
-
// 3. DestroyerFn destroyer_fn
|
129
|
-
// Called when the refcount goes to 0, with destroyer_arg as parameter.
|
130
|
-
//
|
131
|
-
// 4. void* destroyer_arg
|
132
|
-
// Argument for the virtualized destructor.
|
133
|
-
//
|
134
|
-
// 5. grpc_slice_refcount* sub
|
135
|
-
// Argument used for interned slices.
|
136
|
-
grpc_slice_refcount(grpc_slice_refcount::Type type, grpc_core::RefCount* ref,
|
137
|
-
DestroyerFn destroyer_fn, void* destroyer_arg,
|
138
|
-
grpc_slice_refcount* sub)
|
139
|
-
: ref_(ref),
|
140
|
-
ref_type_(type),
|
141
|
-
sub_refcount_(sub),
|
142
|
-
dest_fn_(destroyer_fn),
|
143
|
-
destroy_fn_arg_(destroyer_arg) {}
|
144
|
-
// Initializer for static refcounts.
|
145
|
-
grpc_slice_refcount(grpc_slice_refcount* sub, Type type)
|
146
|
-
: ref_type_(type), sub_refcount_(sub) {}
|
147
|
-
|
148
|
-
Type GetType() const { return ref_type_; }
|
149
|
-
|
150
|
-
int Eq(const grpc_slice& a, const grpc_slice& b);
|
151
|
-
|
152
|
-
uint32_t Hash(const grpc_slice& slice);
|
153
|
-
void Ref() {
|
154
|
-
if (ref_ == nullptr) return;
|
155
|
-
ref_->RefNonZero();
|
156
|
-
}
|
157
|
-
void Unref() {
|
158
|
-
if (ref_ == nullptr) return;
|
159
|
-
if (ref_->Unref()) {
|
160
|
-
dest_fn_(destroy_fn_arg_);
|
161
|
-
}
|
162
|
-
}
|
163
|
-
|
164
|
-
grpc_slice_refcount* sub_refcount() const { return sub_refcount_; }
|
165
|
-
|
166
|
-
private:
|
167
|
-
grpc_core::RefCount* ref_ = nullptr;
|
168
|
-
const Type ref_type_ = Type::REGULAR;
|
169
|
-
grpc_slice_refcount* sub_refcount_ = this;
|
170
|
-
DestroyerFn dest_fn_ = nullptr;
|
171
|
-
void* destroy_fn_arg_ = nullptr;
|
172
|
-
};
|
173
|
-
|
174
|
-
namespace grpc_core {
|
175
|
-
|
176
|
-
struct StaticSliceRefcount {
|
177
|
-
static grpc_slice_refcount kStaticSubRefcount;
|
178
|
-
|
179
|
-
explicit StaticSliceRefcount(uint32_t index)
|
180
|
-
: base(&kStaticSubRefcount, grpc_slice_refcount::Type::STATIC),
|
181
|
-
index(index) {}
|
182
|
-
|
183
|
-
grpc_slice_refcount base;
|
184
|
-
const uint32_t index;
|
185
|
-
};
|
186
|
-
|
187
|
-
extern grpc_slice_refcount kNoopRefcount;
|
188
|
-
|
189
|
-
struct InternedSliceRefcount {
|
190
|
-
static void Destroy(void* arg) {
|
191
|
-
auto* rc = static_cast<InternedSliceRefcount*>(arg);
|
192
|
-
rc->~InternedSliceRefcount();
|
193
|
-
gpr_free(rc);
|
194
|
-
}
|
195
|
-
|
196
|
-
InternedSliceRefcount(size_t length, uint32_t hash,
|
197
|
-
InternedSliceRefcount* bucket_next)
|
198
|
-
: base(grpc_slice_refcount::Type::INTERNED, &refcnt, Destroy, this, &sub),
|
199
|
-
sub(grpc_slice_refcount::Type::REGULAR, &refcnt, Destroy, this, &sub),
|
200
|
-
length(length),
|
201
|
-
hash(hash),
|
202
|
-
bucket_next(bucket_next) {}
|
203
|
-
|
204
|
-
~InternedSliceRefcount();
|
205
|
-
|
206
|
-
grpc_slice_refcount base;
|
207
|
-
grpc_slice_refcount sub;
|
208
|
-
const size_t length;
|
209
|
-
RefCount refcnt;
|
210
|
-
const uint32_t hash;
|
211
|
-
InternedSliceRefcount* bucket_next;
|
212
|
-
};
|
213
|
-
|
214
|
-
} // namespace grpc_core
|
215
|
-
|
216
|
-
inline size_t grpc_refcounted_slice_length(const grpc_slice& slice) {
|
217
|
-
GPR_DEBUG_ASSERT(slice.refcount != nullptr);
|
218
|
-
return slice.data.refcounted.length;
|
219
|
-
}
|
220
|
-
|
221
|
-
inline const uint8_t* grpc_refcounted_slice_data(const grpc_slice& slice) {
|
222
|
-
GPR_DEBUG_ASSERT(slice.refcount != nullptr);
|
223
|
-
return slice.data.refcounted.bytes;
|
224
|
-
}
|
225
|
-
|
226
|
-
inline int grpc_slice_refcount::Eq(const grpc_slice& a, const grpc_slice& b) {
|
227
|
-
GPR_DEBUG_ASSERT(a.refcount != nullptr);
|
228
|
-
GPR_DEBUG_ASSERT(a.refcount == this);
|
229
|
-
switch (ref_type_) {
|
230
|
-
case Type::STATIC:
|
231
|
-
GPR_DEBUG_ASSERT(
|
232
|
-
(GRPC_STATIC_METADATA_INDEX(a) == GRPC_STATIC_METADATA_INDEX(b)) ==
|
233
|
-
(a.refcount == b.refcount));
|
234
|
-
ABSL_FALLTHROUGH_INTENDED;
|
235
|
-
case Type::INTERNED:
|
236
|
-
return a.refcount == b.refcount;
|
237
|
-
case Type::NOP:
|
238
|
-
case Type::REGULAR:
|
239
|
-
break;
|
240
|
-
}
|
241
|
-
if (grpc_refcounted_slice_length(a) != GRPC_SLICE_LENGTH(b)) return false;
|
242
|
-
if (grpc_refcounted_slice_length(a) == 0) return true;
|
243
|
-
return 0 == memcmp(grpc_refcounted_slice_data(a), GRPC_SLICE_START_PTR(b),
|
244
|
-
grpc_refcounted_slice_length(a));
|
245
|
-
}
|
246
|
-
|
247
|
-
inline uint32_t grpc_slice_refcount::Hash(const grpc_slice& slice) {
|
248
|
-
GPR_DEBUG_ASSERT(slice.refcount != nullptr);
|
249
|
-
GPR_DEBUG_ASSERT(slice.refcount == this);
|
250
|
-
switch (ref_type_) {
|
251
|
-
case Type::STATIC:
|
252
|
-
return ::grpc_static_metadata_hash_values[GRPC_STATIC_METADATA_INDEX(
|
253
|
-
slice)];
|
254
|
-
case Type::INTERNED:
|
255
|
-
return reinterpret_cast<grpc_core::InternedSliceRefcount*>(slice.refcount)
|
256
|
-
->hash;
|
257
|
-
case Type::NOP:
|
258
|
-
case Type::REGULAR:
|
259
|
-
break;
|
260
|
-
}
|
261
|
-
return gpr_murmur_hash3(grpc_refcounted_slice_data(slice),
|
262
|
-
grpc_refcounted_slice_length(slice),
|
263
|
-
grpc_core::g_hash_seed);
|
264
|
-
}
|
265
|
-
|
266
|
-
inline const grpc_slice& grpc_slice_ref_internal(const grpc_slice& slice) {
|
267
|
-
if (slice.refcount) {
|
268
|
-
slice.refcount->Ref();
|
269
|
-
}
|
270
|
-
return slice;
|
271
|
-
}
|
272
|
-
|
273
|
-
inline void grpc_slice_unref_internal(const grpc_slice& slice) {
|
274
|
-
if (slice.refcount) {
|
275
|
-
slice.refcount->Unref();
|
276
|
-
}
|
277
|
-
}
|
278
35
|
|
279
36
|
void grpc_slice_buffer_reset_and_unref_internal(grpc_slice_buffer* sb);
|
280
37
|
void grpc_slice_buffer_partial_unref_internal(grpc_slice_buffer* sb,
|
@@ -0,0 +1,17 @@
|
|
1
|
+
// Copyright 2021 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/slice/slice_refcount.h"
|