grpc 1.41.0 → 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 +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 +83 -70
- 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
@@ -0,0 +1,121 @@
|
|
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
|
+
#ifndef GRPC_CORE_LIB_SLICE_SLICE_REFCOUNT_H
|
16
|
+
#define GRPC_CORE_LIB_SLICE_SLICE_REFCOUNT_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/lib/slice/slice_refcount_base.h"
|
21
|
+
#include "src/core/lib/slice/static_slice.h"
|
22
|
+
|
23
|
+
// Interned slices have specific fast-path operations for hashing. To inline
|
24
|
+
// these operations, we need to forward declare them here.
|
25
|
+
extern uint32_t grpc_static_metadata_hash_values[GRPC_STATIC_MDSTR_COUNT];
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
extern grpc_slice_refcount kNoopRefcount;
|
30
|
+
|
31
|
+
struct InternedSliceRefcount {
|
32
|
+
static void Destroy(void* arg) {
|
33
|
+
auto* rc = static_cast<InternedSliceRefcount*>(arg);
|
34
|
+
rc->~InternedSliceRefcount();
|
35
|
+
gpr_free(rc);
|
36
|
+
}
|
37
|
+
|
38
|
+
InternedSliceRefcount(size_t length, uint32_t hash,
|
39
|
+
InternedSliceRefcount* bucket_next)
|
40
|
+
: base(grpc_slice_refcount::Type::INTERNED, &refcnt, Destroy, this, &sub),
|
41
|
+
sub(grpc_slice_refcount::Type::REGULAR, &refcnt, Destroy, this, &sub),
|
42
|
+
length(length),
|
43
|
+
hash(hash),
|
44
|
+
bucket_next(bucket_next) {}
|
45
|
+
|
46
|
+
~InternedSliceRefcount();
|
47
|
+
|
48
|
+
grpc_slice_refcount base;
|
49
|
+
grpc_slice_refcount sub;
|
50
|
+
const size_t length;
|
51
|
+
RefCount refcnt;
|
52
|
+
const uint32_t hash;
|
53
|
+
InternedSliceRefcount* bucket_next;
|
54
|
+
};
|
55
|
+
|
56
|
+
} // namespace grpc_core
|
57
|
+
|
58
|
+
inline size_t grpc_refcounted_slice_length(const grpc_slice& slice) {
|
59
|
+
GPR_DEBUG_ASSERT(slice.refcount != nullptr);
|
60
|
+
return slice.data.refcounted.length;
|
61
|
+
}
|
62
|
+
|
63
|
+
inline const uint8_t* grpc_refcounted_slice_data(const grpc_slice& slice) {
|
64
|
+
GPR_DEBUG_ASSERT(slice.refcount != nullptr);
|
65
|
+
return slice.data.refcounted.bytes;
|
66
|
+
}
|
67
|
+
|
68
|
+
inline int grpc_slice_refcount::Eq(const grpc_slice& a, const grpc_slice& b) {
|
69
|
+
GPR_DEBUG_ASSERT(a.refcount != nullptr);
|
70
|
+
GPR_DEBUG_ASSERT(a.refcount == this);
|
71
|
+
switch (ref_type_) {
|
72
|
+
case Type::STATIC:
|
73
|
+
GPR_DEBUG_ASSERT(
|
74
|
+
(GRPC_STATIC_METADATA_INDEX(a) == GRPC_STATIC_METADATA_INDEX(b)) ==
|
75
|
+
(a.refcount == b.refcount));
|
76
|
+
ABSL_FALLTHROUGH_INTENDED;
|
77
|
+
case Type::INTERNED:
|
78
|
+
return a.refcount == b.refcount;
|
79
|
+
case Type::NOP:
|
80
|
+
case Type::REGULAR:
|
81
|
+
break;
|
82
|
+
}
|
83
|
+
if (grpc_refcounted_slice_length(a) != GRPC_SLICE_LENGTH(b)) return false;
|
84
|
+
if (grpc_refcounted_slice_length(a) == 0) return true;
|
85
|
+
return 0 == memcmp(grpc_refcounted_slice_data(a), GRPC_SLICE_START_PTR(b),
|
86
|
+
grpc_refcounted_slice_length(a));
|
87
|
+
}
|
88
|
+
|
89
|
+
inline uint32_t grpc_slice_refcount::Hash(const grpc_slice& slice) {
|
90
|
+
GPR_DEBUG_ASSERT(slice.refcount != nullptr);
|
91
|
+
GPR_DEBUG_ASSERT(slice.refcount == this);
|
92
|
+
switch (ref_type_) {
|
93
|
+
case Type::STATIC:
|
94
|
+
return ::grpc_static_metadata_hash_values[GRPC_STATIC_METADATA_INDEX(
|
95
|
+
slice)];
|
96
|
+
case Type::INTERNED:
|
97
|
+
return reinterpret_cast<grpc_core::InternedSliceRefcount*>(slice.refcount)
|
98
|
+
->hash;
|
99
|
+
case Type::NOP:
|
100
|
+
case Type::REGULAR:
|
101
|
+
break;
|
102
|
+
}
|
103
|
+
return gpr_murmur_hash3(grpc_refcounted_slice_data(slice),
|
104
|
+
grpc_refcounted_slice_length(slice),
|
105
|
+
grpc_core::g_hash_seed);
|
106
|
+
}
|
107
|
+
|
108
|
+
inline const grpc_slice& grpc_slice_ref_internal(const grpc_slice& slice) {
|
109
|
+
if (slice.refcount) {
|
110
|
+
slice.refcount->Ref();
|
111
|
+
}
|
112
|
+
return slice;
|
113
|
+
}
|
114
|
+
|
115
|
+
inline void grpc_slice_unref_internal(const grpc_slice& slice) {
|
116
|
+
if (slice.refcount) {
|
117
|
+
slice.refcount->Unref();
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
#endif /* GRPC_CORE_LIB_SLICE_SLICE_REFCOUNT_H */
|
@@ -0,0 +1,173 @@
|
|
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
|
+
#ifndef GRPC_CORE_LIB_SLICE_SLICE_REFCOUNT_BASE_H
|
16
|
+
#define GRPC_CORE_LIB_SLICE_SLICE_REFCOUNT_BASE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <grpc/slice.h>
|
21
|
+
|
22
|
+
#include "src/core/lib/gprpp/ref_counted.h"
|
23
|
+
|
24
|
+
// grpc_slice_refcount : A reference count for grpc_slice.
|
25
|
+
//
|
26
|
+
// Non-inlined grpc_slice objects are refcounted. Historically this was
|
27
|
+
// implemented via grpc_slice_refcount, a C-style polymorphic class using a
|
28
|
+
// manually managed vtable of operations. Subclasses would define their own
|
29
|
+
// vtable; the 'virtual' methods (ref, unref, equals and hash) would simply call
|
30
|
+
// the function pointers in the vtable as necessary.
|
31
|
+
//
|
32
|
+
// Unfortunately, this leads to some inefficiencies in the generated code that
|
33
|
+
// can be improved upon. For example, equality checking for interned slices is a
|
34
|
+
// simple equality check on the refcount pointer. With the vtable approach, this
|
35
|
+
// would translate to roughly the following (high-level) instructions:
|
36
|
+
//
|
37
|
+
// grpc_slice_equals(slice1, slice2):
|
38
|
+
// load vtable->eq -> eq_func
|
39
|
+
// call eq_func(slice1, slice2)
|
40
|
+
//
|
41
|
+
// interned_slice_equals(slice1, slice2)
|
42
|
+
// load slice1.ref -> r1
|
43
|
+
// load slice2.ref -> r2
|
44
|
+
// cmp r1, r2 -> retval
|
45
|
+
// ret retval
|
46
|
+
//
|
47
|
+
// This leads to a function call for a function defined in another translation
|
48
|
+
// unit, which imposes memory barriers, which reduces the compiler's ability to
|
49
|
+
// optimize (in addition to the added overhead of call/ret). Additionally, it
|
50
|
+
// may be harder to reason about branch prediction when we're jumping to
|
51
|
+
// essentially arbitrarily provided function pointers.
|
52
|
+
//
|
53
|
+
// In addition, it is arguable that while virtualization was helpful for
|
54
|
+
// Equals()/Hash() methods, that it was fundamentally unnecessary for
|
55
|
+
// Ref()/Unref().
|
56
|
+
//
|
57
|
+
// Instead, grpc_slice_refcount provides the same functionality as the C-style
|
58
|
+
// virtual class, but in a de-virtualized manner - Eq(), Hash(), Ref() and
|
59
|
+
// Unref() are provided within this header file. Fastpaths for Eq()/Hash()
|
60
|
+
// (interned and static metadata slices), as well as the Ref() operation, can
|
61
|
+
// all be inlined without any memory barriers.
|
62
|
+
//
|
63
|
+
// It does this by:
|
64
|
+
// 1. Using grpc_core::RefCount<> (header-only) for Ref/Unref. Two special cases
|
65
|
+
// need support: No-op ref/unref (eg. static metadata slices) and stream
|
66
|
+
// slice references (where all the slices share the streamref). This is in
|
67
|
+
// addition to the normal case of '1 slice, 1 ref'.
|
68
|
+
// To support these cases, we explicitly track a nullable pointer to the
|
69
|
+
// underlying RefCount<>. No-op ref/unref is used by checking the pointer for
|
70
|
+
// null, and doing nothing if it is. Both stream slice refs and 'normal'
|
71
|
+
// slices use the same path for Ref/Unref (by targeting the non-null
|
72
|
+
// pointer).
|
73
|
+
//
|
74
|
+
// 2. introducing the notion of grpc_slice_refcount::Type. This describes if a
|
75
|
+
// slice ref is used by a static metadata slice, an interned slice, or other
|
76
|
+
// slices. We switch on the slice ref type in order to provide fastpaths for
|
77
|
+
// Equals() and Hash().
|
78
|
+
//
|
79
|
+
// In total, this saves us roughly 1-2% latency for unary calls, with smaller
|
80
|
+
// calls benefitting. The effect is present, but not as useful, for larger calls
|
81
|
+
// where the cost of sending the data dominates.
|
82
|
+
// TODO(arjunroy): Investigate if this can be removed with strongly typed
|
83
|
+
// grpc_slices.
|
84
|
+
struct grpc_slice_refcount {
|
85
|
+
public:
|
86
|
+
enum class Type {
|
87
|
+
STATIC, // Refcount for a static metadata slice.
|
88
|
+
INTERNED, // Refcount for an interned slice.
|
89
|
+
NOP, // No-Op
|
90
|
+
REGULAR // Refcount for non-static-metadata, non-interned slices.
|
91
|
+
};
|
92
|
+
typedef void (*DestroyerFn)(void*);
|
93
|
+
|
94
|
+
grpc_slice_refcount() = default;
|
95
|
+
|
96
|
+
explicit grpc_slice_refcount(Type t) : ref_type_(t) {}
|
97
|
+
|
98
|
+
explicit grpc_slice_refcount(grpc_slice_refcount* sub) : sub_refcount_(sub) {}
|
99
|
+
// Regular constructor for grpc_slice_refcount.
|
100
|
+
//
|
101
|
+
// Parameters:
|
102
|
+
// 1. grpc_slice_refcount::Type type
|
103
|
+
// Whether we are the refcount for a static
|
104
|
+
// metadata slice, an interned slice, or any other kind of slice.
|
105
|
+
//
|
106
|
+
// 2. RefCount* ref
|
107
|
+
// The pointer to the actual underlying grpc_core::RefCount. Rather than
|
108
|
+
// performing struct offset computations as in the original implementation to
|
109
|
+
// get to the refcount, which requires a virtual method, we devirtualize by
|
110
|
+
// using a nullable pointer to allow a single pair of Ref/Unref methods.
|
111
|
+
//
|
112
|
+
// 3. DestroyerFn destroyer_fn
|
113
|
+
// Called when the refcount goes to 0, with destroyer_arg as parameter.
|
114
|
+
//
|
115
|
+
// 4. void* destroyer_arg
|
116
|
+
// Argument for the virtualized destructor.
|
117
|
+
//
|
118
|
+
// 5. grpc_slice_refcount* sub
|
119
|
+
// Argument used for interned slices.
|
120
|
+
grpc_slice_refcount(grpc_slice_refcount::Type type, grpc_core::RefCount* ref,
|
121
|
+
DestroyerFn destroyer_fn, void* destroyer_arg,
|
122
|
+
grpc_slice_refcount* sub)
|
123
|
+
: ref_(ref),
|
124
|
+
ref_type_(type),
|
125
|
+
sub_refcount_(sub),
|
126
|
+
dest_fn_(destroyer_fn),
|
127
|
+
destroy_fn_arg_(destroyer_arg) {}
|
128
|
+
// Initializer for static refcounts.
|
129
|
+
grpc_slice_refcount(grpc_slice_refcount* sub, Type type)
|
130
|
+
: ref_type_(type), sub_refcount_(sub) {}
|
131
|
+
|
132
|
+
Type GetType() const { return ref_type_; }
|
133
|
+
|
134
|
+
int Eq(const grpc_slice& a, const grpc_slice& b);
|
135
|
+
|
136
|
+
uint32_t Hash(const grpc_slice& slice);
|
137
|
+
void Ref() {
|
138
|
+
if (ref_ == nullptr) return;
|
139
|
+
ref_->RefNonZero();
|
140
|
+
}
|
141
|
+
void Unref() {
|
142
|
+
if (ref_ == nullptr) return;
|
143
|
+
if (ref_->Unref()) {
|
144
|
+
dest_fn_(destroy_fn_arg_);
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
grpc_slice_refcount* sub_refcount() const { return sub_refcount_; }
|
149
|
+
|
150
|
+
private:
|
151
|
+
grpc_core::RefCount* ref_ = nullptr;
|
152
|
+
const Type ref_type_ = Type::REGULAR;
|
153
|
+
grpc_slice_refcount* sub_refcount_ = this;
|
154
|
+
DestroyerFn dest_fn_ = nullptr;
|
155
|
+
void* destroy_fn_arg_ = nullptr;
|
156
|
+
};
|
157
|
+
|
158
|
+
namespace grpc_core {
|
159
|
+
|
160
|
+
struct StaticSliceRefcount {
|
161
|
+
static grpc_slice_refcount kStaticSubRefcount;
|
162
|
+
|
163
|
+
explicit StaticSliceRefcount(uint32_t index)
|
164
|
+
: base(&kStaticSubRefcount, grpc_slice_refcount::Type::STATIC),
|
165
|
+
index(index) {}
|
166
|
+
|
167
|
+
grpc_slice_refcount base;
|
168
|
+
const uint32_t index;
|
169
|
+
};
|
170
|
+
|
171
|
+
} // namespace grpc_core
|
172
|
+
|
173
|
+
#endif // GRPC_CORE_LIB_SLICE_SLICE_REFCOUNT_BASE_H
|
@@ -0,0 +1,100 @@
|
|
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_split.h"
|
18
|
+
|
19
|
+
#include <string.h>
|
20
|
+
|
21
|
+
#include <grpc/support/log.h>
|
22
|
+
|
23
|
+
/** Finds the initial (\a begin) and final (\a end) offsets of the next
|
24
|
+
* substring from \a str + \a read_offset until the next \a sep or the end of \a
|
25
|
+
* str.
|
26
|
+
*
|
27
|
+
* Returns 1 and updates \a begin and \a end. Returns 0 otherwise. */
|
28
|
+
static int slice_find_separator_offset(const grpc_slice str, const char* sep,
|
29
|
+
const size_t read_offset, size_t* begin,
|
30
|
+
size_t* end) {
|
31
|
+
size_t i;
|
32
|
+
const uint8_t* str_ptr = GRPC_SLICE_START_PTR(str) + read_offset;
|
33
|
+
const size_t str_len = GRPC_SLICE_LENGTH(str) - read_offset;
|
34
|
+
const size_t sep_len = strlen(sep);
|
35
|
+
if (str_len < sep_len) {
|
36
|
+
return 0;
|
37
|
+
}
|
38
|
+
|
39
|
+
for (i = 0; i <= str_len - sep_len; i++) {
|
40
|
+
if (memcmp(str_ptr + i, sep, sep_len) == 0) {
|
41
|
+
*begin = read_offset;
|
42
|
+
*end = read_offset + i;
|
43
|
+
return 1;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
return 0;
|
47
|
+
}
|
48
|
+
|
49
|
+
static void skip_leading_trailing_spaces(const uint8_t* str_buffer,
|
50
|
+
size_t* begin, size_t* end) {
|
51
|
+
while (*begin < *end && str_buffer[*begin] == ' ') {
|
52
|
+
(*begin)++;
|
53
|
+
}
|
54
|
+
while (*begin < *end && str_buffer[*end - 1] == ' ') {
|
55
|
+
(*end)--;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
static void grpc_slice_split_inner(grpc_slice str, const char* sep,
|
60
|
+
grpc_slice_buffer* dst, bool no_space) {
|
61
|
+
const size_t sep_len = strlen(sep);
|
62
|
+
size_t begin, end;
|
63
|
+
const uint8_t* str_buffer = GRPC_SLICE_START_PTR(str);
|
64
|
+
size_t sep_pos;
|
65
|
+
|
66
|
+
GPR_ASSERT(sep_len > 0);
|
67
|
+
|
68
|
+
if (slice_find_separator_offset(str, sep, 0, &begin, &end) != 0) {
|
69
|
+
do {
|
70
|
+
sep_pos = end;
|
71
|
+
if (no_space) {
|
72
|
+
skip_leading_trailing_spaces(str_buffer, &begin, &end);
|
73
|
+
}
|
74
|
+
grpc_slice_buffer_add_indexed(dst, grpc_slice_sub(str, begin, end));
|
75
|
+
} while (slice_find_separator_offset(str, sep, sep_pos + sep_len, &begin,
|
76
|
+
&end) != 0);
|
77
|
+
begin = sep_pos + sep_len;
|
78
|
+
end = GRPC_SLICE_LENGTH(str);
|
79
|
+
if (no_space) {
|
80
|
+
skip_leading_trailing_spaces(str_buffer, &begin, &end);
|
81
|
+
}
|
82
|
+
grpc_slice_buffer_add_indexed(dst, grpc_slice_sub(str, begin, end));
|
83
|
+
} else { /* no sep found, add whole input */
|
84
|
+
begin = 0;
|
85
|
+
end = GRPC_SLICE_LENGTH(str);
|
86
|
+
if (no_space) {
|
87
|
+
skip_leading_trailing_spaces(str_buffer, &begin, &end);
|
88
|
+
}
|
89
|
+
grpc_slice_buffer_add_indexed(dst, grpc_slice_sub(str, begin, end));
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
void grpc_slice_split(grpc_slice str, const char* sep, grpc_slice_buffer* dst) {
|
94
|
+
grpc_slice_split_inner(str, sep, dst, false);
|
95
|
+
}
|
96
|
+
|
97
|
+
void grpc_slice_split_without_space(grpc_slice str, const char* sep,
|
98
|
+
grpc_slice_buffer* dst) {
|
99
|
+
grpc_slice_split_inner(str, sep, dst, true);
|
100
|
+
}
|
@@ -0,0 +1,40 @@
|
|
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
|
+
#ifndef GRPC_CORE_LIB_SLICE_SLICE_SPLIT_H
|
20
|
+
#define GRPC_CORE_LIB_SLICE_SLICE_SPLIT_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <stdbool.h>
|
25
|
+
#include <stddef.h>
|
26
|
+
|
27
|
+
#include <grpc/slice.h>
|
28
|
+
#include <grpc/slice_buffer.h>
|
29
|
+
|
30
|
+
/** Split \a str by the separator \a sep. Results are stored in \a dst, which
|
31
|
+
* should be a properly initialized instance. */
|
32
|
+
void grpc_slice_split(grpc_slice str, const char* sep, grpc_slice_buffer* dst);
|
33
|
+
|
34
|
+
/** Split \a str by the separator \a sep and remove the leading and trailing
|
35
|
+
* spaces of each resulting token. Results are stored in \a dst, which should be
|
36
|
+
* a properly initialized instance. */
|
37
|
+
void grpc_slice_split_without_space(grpc_slice str, const char* sep,
|
38
|
+
grpc_slice_buffer* dst);
|
39
|
+
|
40
|
+
#endif /* GRPC_CORE_LIB_SLICE_SLICE_SPLIT_H */
|
@@ -20,10 +20,6 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
22
22
|
|
23
|
-
#include <string.h>
|
24
|
-
|
25
|
-
#include <grpc/support/log.h>
|
26
|
-
|
27
23
|
#include "src/core/lib/gpr/string.h"
|
28
24
|
#include "src/core/lib/gprpp/memory.h"
|
29
25
|
#include "src/core/lib/slice/slice_internal.h"
|
@@ -41,85 +37,6 @@ grpc_slice grpc_dump_slice_to_slice(const grpc_slice& s, uint32_t flags) {
|
|
41
37
|
return grpc_slice_from_moved_buffer(std::move(ptr), len);
|
42
38
|
}
|
43
39
|
|
44
|
-
/** Finds the initial (\a begin) and final (\a end) offsets of the next
|
45
|
-
* substring from \a str + \a read_offset until the next \a sep or the end of \a
|
46
|
-
* str.
|
47
|
-
*
|
48
|
-
* Returns 1 and updates \a begin and \a end. Returns 0 otherwise. */
|
49
|
-
static int slice_find_separator_offset(const grpc_slice str, const char* sep,
|
50
|
-
const size_t read_offset, size_t* begin,
|
51
|
-
size_t* end) {
|
52
|
-
size_t i;
|
53
|
-
const uint8_t* str_ptr = GRPC_SLICE_START_PTR(str) + read_offset;
|
54
|
-
const size_t str_len = GRPC_SLICE_LENGTH(str) - read_offset;
|
55
|
-
const size_t sep_len = strlen(sep);
|
56
|
-
if (str_len < sep_len) {
|
57
|
-
return 0;
|
58
|
-
}
|
59
|
-
|
60
|
-
for (i = 0; i <= str_len - sep_len; i++) {
|
61
|
-
if (memcmp(str_ptr + i, sep, sep_len) == 0) {
|
62
|
-
*begin = read_offset;
|
63
|
-
*end = read_offset + i;
|
64
|
-
return 1;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
return 0;
|
68
|
-
}
|
69
|
-
|
70
|
-
static void skip_leading_trailing_spaces(const uint8_t* str_buffer,
|
71
|
-
size_t* begin, size_t* end) {
|
72
|
-
while (*begin < *end && str_buffer[*begin] == ' ') {
|
73
|
-
(*begin)++;
|
74
|
-
}
|
75
|
-
while (*begin < *end && str_buffer[*end - 1] == ' ') {
|
76
|
-
(*end)--;
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
static void grpc_slice_split_inner(grpc_slice str, const char* sep,
|
81
|
-
grpc_slice_buffer* dst, bool no_space) {
|
82
|
-
const size_t sep_len = strlen(sep);
|
83
|
-
size_t begin, end;
|
84
|
-
const uint8_t* str_buffer = GRPC_SLICE_START_PTR(str);
|
85
|
-
size_t sep_pos;
|
86
|
-
|
87
|
-
GPR_ASSERT(sep_len > 0);
|
88
|
-
|
89
|
-
if (slice_find_separator_offset(str, sep, 0, &begin, &end) != 0) {
|
90
|
-
do {
|
91
|
-
sep_pos = end;
|
92
|
-
if (no_space) {
|
93
|
-
skip_leading_trailing_spaces(str_buffer, &begin, &end);
|
94
|
-
}
|
95
|
-
grpc_slice_buffer_add_indexed(dst, grpc_slice_sub(str, begin, end));
|
96
|
-
} while (slice_find_separator_offset(str, sep, sep_pos + sep_len, &begin,
|
97
|
-
&end) != 0);
|
98
|
-
begin = sep_pos + sep_len;
|
99
|
-
end = GRPC_SLICE_LENGTH(str);
|
100
|
-
if (no_space) {
|
101
|
-
skip_leading_trailing_spaces(str_buffer, &begin, &end);
|
102
|
-
}
|
103
|
-
grpc_slice_buffer_add_indexed(dst, grpc_slice_sub(str, begin, end));
|
104
|
-
} else { /* no sep found, add whole input */
|
105
|
-
begin = 0;
|
106
|
-
end = GRPC_SLICE_LENGTH(str);
|
107
|
-
if (no_space) {
|
108
|
-
skip_leading_trailing_spaces(str_buffer, &begin, &end);
|
109
|
-
}
|
110
|
-
grpc_slice_buffer_add_indexed(dst, grpc_slice_sub(str, begin, end));
|
111
|
-
}
|
112
|
-
}
|
113
|
-
|
114
|
-
void grpc_slice_split(grpc_slice str, const char* sep, grpc_slice_buffer* dst) {
|
115
|
-
grpc_slice_split_inner(str, sep, dst, false);
|
116
|
-
}
|
117
|
-
|
118
|
-
void grpc_slice_split_without_space(grpc_slice str, const char* sep,
|
119
|
-
grpc_slice_buffer* dst) {
|
120
|
-
grpc_slice_split_inner(str, sep, dst, true);
|
121
|
-
}
|
122
|
-
|
123
40
|
bool grpc_parse_slice_to_uint32(grpc_slice str, uint32_t* result) {
|
124
41
|
return gpr_parse_bytes_to_uint32(
|
125
42
|
reinterpret_cast<const char*> GRPC_SLICE_START_PTR(str),
|
@@ -25,7 +25,6 @@
|
|
25
25
|
#include <stddef.h>
|
26
26
|
|
27
27
|
#include <grpc/slice.h>
|
28
|
-
#include <grpc/slice_buffer.h>
|
29
28
|
|
30
29
|
#include "src/core/lib/gpr/string.h"
|
31
30
|
|
@@ -34,16 +33,6 @@ char* grpc_dump_slice(const grpc_slice& slice, uint32_t flags);
|
|
34
33
|
/* Calls gpr_dump on a slice and returns the result as a slice. */
|
35
34
|
grpc_slice grpc_dump_slice_to_slice(const grpc_slice& slice, uint32_t flags);
|
36
35
|
|
37
|
-
/** Split \a str by the separator \a sep. Results are stored in \a dst, which
|
38
|
-
* should be a properly initialized instance. */
|
39
|
-
void grpc_slice_split(grpc_slice str, const char* sep, grpc_slice_buffer* dst);
|
40
|
-
|
41
|
-
/** Split \a str by the separator \a sep and remove the leading and trailing
|
42
|
-
* spaces of each resulting token. Results are stored in \a dst, which should be
|
43
|
-
* a properly initialized instance. */
|
44
|
-
void grpc_slice_split_without_space(grpc_slice str, const char* sep,
|
45
|
-
grpc_slice_buffer* dst);
|
46
|
-
|
47
36
|
bool grpc_parse_slice_to_uint32(grpc_slice str, uint32_t* result);
|
48
37
|
|
49
38
|
#endif /* GRPC_CORE_LIB_SLICE_SLICE_STRING_HELPERS_H */
|