grpc 1.43.1 → 1.44.0.pre2
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 +84 -64
- data/include/grpc/grpc_security.h +10 -0
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +6 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
- data/src/core/ext/filters/client_channel/client_channel.h +8 -8
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
- data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
- data/src/core/ext/filters/client_channel/subchannel.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
- data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
- data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
- data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
- data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
- data/src/core/ext/xds/upb_utils.h +65 -0
- data/src/core/ext/xds/xds_api.cc +81 -3458
- data/src/core/ext/xds/xds_api.h +56 -611
- data/src/core/ext/xds/xds_bootstrap.cc +189 -125
- data/src/core/ext/xds/xds_bootstrap.h +20 -15
- data/src/core/ext/xds/xds_certificate_provider.h +1 -0
- data/src/core/ext/xds/xds_channel_creds.cc +108 -0
- data/src/core/ext/xds/xds_channel_creds.h +50 -0
- data/src/core/ext/xds/xds_client.cc +584 -994
- data/src/core/ext/xds/xds_client.h +78 -135
- data/src/core/ext/xds/xds_cluster.cc +451 -0
- data/src/core/ext/xds/xds_cluster.h +111 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +110 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_filters.cc +5 -0
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1036 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +993 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +11 -8
- data/src/core/ext/xds/xds_routing.h +8 -5
- data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
- data/src/core/lib/address_utils/parse_address.cc +20 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/backoff/backoff.cc +4 -30
- data/src/core/lib/backoff/backoff.h +3 -3
- data/src/core/lib/channel/channel_args.cc +0 -1
- data/src/core/lib/channel/channel_stack.cc +8 -0
- data/src/core/lib/channel/channel_stack.h +1 -1
- data/src/core/lib/channel/channel_stack_builder.cc +5 -9
- data/src/core/lib/channel/channel_stack_builder.h +4 -7
- data/src/core/lib/channel/channelz.cc +1 -0
- data/src/core/lib/compression/compression.cc +19 -111
- data/src/core/lib/compression/compression_internal.cc +142 -202
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/gpr/useful.h +4 -0
- data/src/core/lib/gprpp/bitset.h +7 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/status_helper.cc +20 -28
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +11 -0
- data/src/core/lib/http/httpcli.cc +37 -46
- data/src/core/lib/http/httpcli.h +3 -15
- data/src/core/lib/iomgr/call_combiner.cc +15 -4
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/error.cc +2 -0
- data/src/core/lib/iomgr/error.h +3 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/exec_ctx.cc +22 -9
- data/src/core/lib/iomgr/executor.cc +10 -1
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
- data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.h +49 -20
- data/src/core/lib/promise/detail/status.h +5 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.h +0 -1
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
- data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
- data/src/core/lib/security/authorization/evaluate_args.h +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +170 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
- data/src/core/lib/security/credentials/credentials.h +10 -20
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +0 -4
- data/src/core/lib/security/security_connector/security_connector.h +5 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
- data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
- data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
- data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
- data/src/core/{ext → lib}/service_config/service_config.h +4 -4
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
- data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
- data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
- data/src/core/lib/slice/slice.cc +3 -1
- data/src/core/lib/slice/slice.h +43 -13
- data/src/core/lib/slice/slice_intern.cc +3 -101
- data/src/core/lib/slice/slice_internal.h +1 -2
- data/src/core/lib/slice/slice_refcount.h +4 -13
- data/src/core/lib/slice/slice_refcount_base.h +0 -16
- data/src/core/lib/surface/call.cc +140 -382
- data/src/core/lib/surface/call.h +4 -4
- data/src/core/lib/surface/channel.cc +42 -44
- data/src/core/lib/surface/channel.h +4 -4
- data/src/core/lib/surface/init.cc +0 -2
- data/src/core/lib/surface/lame_client.cc +0 -1
- data/src/core/lib/surface/server.cc +12 -29
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.h +14 -0
- data/src/core/lib/transport/metadata_batch.h +799 -717
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +95 -92
- data/src/core/lib/transport/timeout_encoding.cc +200 -66
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +6 -39
- data/src/core/lib/uri/uri_parser.cc +223 -53
- data/src/core/lib/uri/uri_parser.h +36 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
- data/src/core/tsi/ssl_transport_security.cc +53 -13
- data/src/core/tsi/ssl_transport_security.h +18 -6
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +149 -77
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -140
- data/src/core/lib/compression/compression_args.h +0 -58
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/slice/static_slice.cc +0 -377
- data/src/core/lib/slice/static_slice.h +0 -300
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/metadata_batch.cc +0 -99
- data/src/core/lib/transport/static_metadata.cc +0 -1032
- data/src/core/lib/transport/static_metadata.h +0 -322
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
@@ -39,7 +39,6 @@
|
|
39
39
|
#include "src/core/lib/slice/percent_encoding.h"
|
40
40
|
#include "src/core/lib/slice/slice_internal.h"
|
41
41
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
42
|
-
#include "src/core/lib/transport/static_metadata.h"
|
43
42
|
#include "src/core/lib/transport/status_conversion.h"
|
44
43
|
#include "src/core/lib/transport/transport_impl.h"
|
45
44
|
|
@@ -75,10 +74,6 @@ struct call_data {
|
|
75
74
|
~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_error); }
|
76
75
|
|
77
76
|
grpc_core::CallCombiner* call_combiner;
|
78
|
-
// State for handling send_initial_metadata ops.
|
79
|
-
grpc_linked_mdelem method;
|
80
|
-
grpc_linked_mdelem scheme;
|
81
|
-
grpc_linked_mdelem content_type;
|
82
77
|
// State for handling recv_initial_metadata ops.
|
83
78
|
grpc_metadata_batch* recv_initial_metadata;
|
84
79
|
grpc_error_handle recv_initial_metadata_error = GRPC_ERROR_NONE;
|
@@ -102,7 +97,7 @@ struct call_data {
|
|
102
97
|
};
|
103
98
|
|
104
99
|
struct channel_data {
|
105
|
-
|
100
|
+
grpc_core::HttpSchemeMetadata::ValueType static_scheme;
|
106
101
|
grpc_core::Slice user_agent;
|
107
102
|
size_t max_payload_size_for_get;
|
108
103
|
};
|
@@ -110,30 +105,27 @@ struct channel_data {
|
|
110
105
|
|
111
106
|
static grpc_error_handle client_filter_incoming_metadata(
|
112
107
|
grpc_metadata_batch* b) {
|
113
|
-
if (b->
|
108
|
+
if (auto* status = b->get_pointer(grpc_core::HttpStatusMetadata())) {
|
114
109
|
/* If both gRPC status and HTTP status are provided in the response, we
|
115
110
|
* should prefer the gRPC status code, as mentioned in
|
116
111
|
* https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
|
117
112
|
*/
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
b->Remove(
|
113
|
+
const grpc_status_code* grpc_status =
|
114
|
+
b->get_pointer(grpc_core::GrpcStatusMetadata());
|
115
|
+
if (grpc_status != nullptr || *status == 200) {
|
116
|
+
b->Remove(grpc_core::HttpStatusMetadata());
|
122
117
|
} else {
|
123
|
-
char* val = grpc_dump_slice(
|
124
|
-
GRPC_MDVALUE(b->legacy_index()->named.status->md), GPR_DUMP_ASCII);
|
125
118
|
std::string msg =
|
126
|
-
absl::StrCat("Received http2 header with status: ",
|
119
|
+
absl::StrCat("Received http2 header with status: ", *status);
|
127
120
|
grpc_error_handle e = grpc_error_set_str(
|
128
121
|
grpc_error_set_int(
|
129
122
|
grpc_error_set_str(
|
130
123
|
GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
131
124
|
"Received http2 :status header with non-200 OK status"),
|
132
|
-
GRPC_ERROR_STR_VALUE,
|
125
|
+
GRPC_ERROR_STR_VALUE, std::to_string(*status)),
|
133
126
|
GRPC_ERROR_INT_GRPC_STATUS,
|
134
|
-
grpc_http2_status_to_grpc_status(
|
127
|
+
grpc_http2_status_to_grpc_status(*status)),
|
135
128
|
GRPC_ERROR_STR_GRPC_MESSAGE, msg);
|
136
|
-
gpr_free(val);
|
137
129
|
return e;
|
138
130
|
}
|
139
131
|
}
|
@@ -144,38 +136,7 @@ static grpc_error_handle client_filter_incoming_metadata(
|
|
144
136
|
grpc_core::PermissivePercentDecodeSlice(std::move(*grpc_message));
|
145
137
|
}
|
146
138
|
|
147
|
-
|
148
|
-
if (!grpc_mdelem_static_value_eq(
|
149
|
-
b->legacy_index()->named.content_type->md,
|
150
|
-
GRPC_MDELEM_CONTENT_TYPE_APPLICATION_SLASH_GRPC)) {
|
151
|
-
if (grpc_slice_buf_start_eq(
|
152
|
-
GRPC_MDVALUE(b->legacy_index()->named.content_type->md),
|
153
|
-
EXPECTED_CONTENT_TYPE, EXPECTED_CONTENT_TYPE_LENGTH) &&
|
154
|
-
(GRPC_SLICE_START_PTR(GRPC_MDVALUE(
|
155
|
-
b->legacy_index()
|
156
|
-
->named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
|
157
|
-
'+' ||
|
158
|
-
GRPC_SLICE_START_PTR(GRPC_MDVALUE(
|
159
|
-
b->legacy_index()
|
160
|
-
->named.content_type->md))[EXPECTED_CONTENT_TYPE_LENGTH] ==
|
161
|
-
';')) {
|
162
|
-
/* Although the C implementation doesn't (currently) generate them,
|
163
|
-
any custom +-suffix is explicitly valid. */
|
164
|
-
/* TODO(klempner): We should consider preallocating common values such
|
165
|
-
as +proto or +json, or at least stashing them if we see them. */
|
166
|
-
/* TODO(klempner): Should we be surfacing this to application code? */
|
167
|
-
} else {
|
168
|
-
/* TODO(klempner): We're currently allowing this, but we shouldn't
|
169
|
-
see it without a proxy so log for now. */
|
170
|
-
char* val = grpc_dump_slice(
|
171
|
-
GRPC_MDVALUE(b->legacy_index()->named.content_type->md),
|
172
|
-
GPR_DUMP_ASCII);
|
173
|
-
gpr_log(GPR_INFO, "Unexpected content-type '%s'", val);
|
174
|
-
gpr_free(val);
|
175
|
-
}
|
176
|
-
}
|
177
|
-
b->Remove(GRPC_BATCH_CONTENT_TYPE);
|
178
|
-
}
|
139
|
+
b->Remove(grpc_core::ContentTypeMetadata());
|
179
140
|
|
180
141
|
return GRPC_ERROR_NONE;
|
181
142
|
}
|
@@ -306,53 +267,41 @@ static char* slice_buffer_to_string(grpc_slice_buffer* slice_buffer) {
|
|
306
267
|
|
307
268
|
// Modifies the path entry in the batch's send_initial_metadata to
|
308
269
|
// append the base64-encoded query for a GET request.
|
309
|
-
static
|
310
|
-
|
270
|
+
static void update_path_for_get(grpc_call_element* elem,
|
271
|
+
grpc_transport_stream_op_batch* batch) {
|
272
|
+
grpc_metadata_batch* b =
|
273
|
+
batch->payload->send_initial_metadata.send_initial_metadata;
|
311
274
|
call_data* calld = static_cast<call_data*>(elem->call_data);
|
312
|
-
|
313
|
-
|
314
|
-
->legacy_index()
|
315
|
-
->named.path->md);
|
275
|
+
const grpc_core::Slice& path_slice =
|
276
|
+
*b->get_pointer(grpc_core::HttpPathMetadata());
|
316
277
|
/* sum up individual component's lengths and allocate enough memory to
|
317
278
|
* hold combined path+query */
|
318
|
-
size_t estimated_len =
|
279
|
+
size_t estimated_len = path_slice.size();
|
319
280
|
estimated_len++; /* for the '?' */
|
320
281
|
estimated_len += grpc_base64_estimate_encoded_size(
|
321
282
|
batch->payload->send_message.send_message->length(),
|
322
283
|
false /* multi_line */);
|
323
|
-
grpc_core::
|
284
|
+
grpc_core::MutableSlice path_with_query_slice =
|
285
|
+
grpc_core::MutableSlice::CreateUninitialized(estimated_len);
|
324
286
|
/* memcopy individual pieces into this slice */
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
memcpy(write_ptr, original_path, GRPC_SLICE_LENGTH(path_slice));
|
330
|
-
write_ptr += GRPC_SLICE_LENGTH(path_slice);
|
287
|
+
uint8_t* write_ptr = path_with_query_slice.begin();
|
288
|
+
const uint8_t* original_path = path_slice.data();
|
289
|
+
memcpy(write_ptr, original_path, path_slice.size());
|
290
|
+
write_ptr += path_slice.size();
|
331
291
|
*write_ptr++ = '?';
|
332
292
|
char* payload_bytes =
|
333
293
|
slice_buffer_to_string(calld->send_message_cache->cache_buffer());
|
334
|
-
grpc_base64_encode_core(write_ptr, payload_bytes,
|
294
|
+
grpc_base64_encode_core(reinterpret_cast<char*>(write_ptr), payload_bytes,
|
335
295
|
batch->payload->send_message.send_message->length(),
|
336
296
|
true /* url_safe */, false /* multi_line */);
|
337
297
|
gpr_free(payload_bytes);
|
338
|
-
|
339
|
-
|
340
|
-
reinterpret_cast<char*> GRPC_SLICE_START_PTR(path_with_query_slice) +
|
341
|
-
GRPC_SLICE_LENGTH(path_slice);
|
298
|
+
char* t = reinterpret_cast<char*>(path_with_query_slice.begin()) +
|
299
|
+
path_slice.size();
|
342
300
|
/* safe to use strlen since base64_encode will always add '\0' */
|
343
|
-
path_with_query_slice = grpc_slice_sub_no_ref(
|
344
|
-
path_with_query_slice, 0, GRPC_SLICE_LENGTH(path_slice) + strlen(t));
|
345
301
|
/* substitute previous path with the new path+query */
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
batch->payload->send_initial_metadata.send_initial_metadata;
|
350
|
-
return b->Substitute(b->legacy_index()->named.path, mdelem_path_and_query);
|
351
|
-
}
|
352
|
-
|
353
|
-
static void remove_if_present(grpc_metadata_batch* batch,
|
354
|
-
grpc_metadata_batch_callouts_index idx) {
|
355
|
-
batch->Remove(idx);
|
302
|
+
b->Set(grpc_core::HttpPathMetadata(),
|
303
|
+
grpc_core::Slice(path_with_query_slice.TakeSubSlice(
|
304
|
+
0, path_slice.size() + strlen(t))));
|
356
305
|
}
|
357
306
|
|
358
307
|
static void http_client_start_transport_stream_op_batch(
|
@@ -388,7 +337,8 @@ static void http_client_start_transport_stream_op_batch(
|
|
388
337
|
// cacheable, and the operation contains both initial metadata and send
|
389
338
|
// message, and the payload is below the size threshold, and all the data
|
390
339
|
// for this request is immediately available.
|
391
|
-
|
340
|
+
grpc_core::HttpMethodMetadata::ValueType method =
|
341
|
+
grpc_core::HttpMethodMetadata::kPost;
|
392
342
|
if (batch->send_message &&
|
393
343
|
(batch->payload->send_initial_metadata.send_initial_metadata_flags &
|
394
344
|
GRPC_INITIAL_METADATA_CACHEABLE_REQUEST) &&
|
@@ -408,9 +358,8 @@ static void http_client_start_transport_stream_op_batch(
|
|
408
358
|
// If all the data has been read, then we can use GET.
|
409
359
|
if (calld->send_message_bytes_read ==
|
410
360
|
calld->send_message_caching_stream->length()) {
|
411
|
-
method =
|
412
|
-
|
413
|
-
if (error != GRPC_ERROR_NONE) goto done;
|
361
|
+
method = grpc_core::HttpMethodMetadata::kGet;
|
362
|
+
update_path_for_get(elem, batch);
|
414
363
|
batch->send_message = false;
|
415
364
|
calld->send_message_caching_stream->Orphan();
|
416
365
|
} else {
|
@@ -425,36 +374,20 @@ static void http_client_start_transport_stream_op_batch(
|
|
425
374
|
} else if (batch->payload->send_initial_metadata
|
426
375
|
.send_initial_metadata_flags &
|
427
376
|
GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST) {
|
428
|
-
method =
|
377
|
+
method = grpc_core::HttpMethodMetadata::kPut;
|
429
378
|
}
|
430
379
|
|
431
|
-
remove_if_present(
|
432
|
-
batch->payload->send_initial_metadata.send_initial_metadata,
|
433
|
-
GRPC_BATCH_METHOD);
|
434
|
-
remove_if_present(
|
435
|
-
batch->payload->send_initial_metadata.send_initial_metadata,
|
436
|
-
GRPC_BATCH_SCHEME);
|
437
|
-
remove_if_present(
|
438
|
-
batch->payload->send_initial_metadata.send_initial_metadata,
|
439
|
-
GRPC_BATCH_CONTENT_TYPE);
|
440
|
-
|
441
380
|
/* Send : prefixed headers, which have to be before any application
|
442
381
|
layer headers. */
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
error = grpc_metadata_batch_add_head(
|
448
|
-
batch->payload->send_initial_metadata.send_initial_metadata,
|
449
|
-
&calld->scheme, channeld->static_scheme, GRPC_BATCH_SCHEME);
|
450
|
-
if (error != GRPC_ERROR_NONE) goto done;
|
382
|
+
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
383
|
+
grpc_core::HttpMethodMetadata(), method);
|
384
|
+
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
385
|
+
grpc_core::HttpSchemeMetadata(), channeld->static_scheme);
|
451
386
|
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
452
387
|
grpc_core::TeMetadata(), grpc_core::TeMetadata::kTrailers);
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
GRPC_BATCH_CONTENT_TYPE);
|
457
|
-
if (error != GRPC_ERROR_NONE) goto done;
|
388
|
+
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
389
|
+
grpc_core::ContentTypeMetadata(),
|
390
|
+
grpc_core::ContentTypeMetadata::kApplicationGrpc);
|
458
391
|
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
459
392
|
grpc_core::UserAgentMetadata(), channeld->user_agent.Ref());
|
460
393
|
}
|
@@ -483,25 +416,21 @@ static void http_client_destroy_call_elem(
|
|
483
416
|
calld->~call_data();
|
484
417
|
}
|
485
418
|
|
486
|
-
static
|
487
|
-
|
488
|
-
size_t j;
|
489
|
-
grpc_mdelem valid_schemes[] = {GRPC_MDELEM_SCHEME_HTTP,
|
490
|
-
GRPC_MDELEM_SCHEME_HTTPS};
|
419
|
+
static grpc_core::HttpSchemeMetadata::ValueType scheme_from_args(
|
420
|
+
const grpc_channel_args* args) {
|
491
421
|
if (args != nullptr) {
|
492
|
-
for (i = 0; i < args->num_args; ++i) {
|
422
|
+
for (size_t i = 0; i < args->num_args; ++i) {
|
493
423
|
if (args->args[i].type == GRPC_ARG_STRING &&
|
494
|
-
strcmp(args->args[i].key, GRPC_ARG_HTTP2_SCHEME)
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
}
|
424
|
+
0 == strcmp(args->args[i].key, GRPC_ARG_HTTP2_SCHEME)) {
|
425
|
+
grpc_core::HttpSchemeMetadata::ValueType scheme =
|
426
|
+
grpc_core::HttpSchemeMetadata::Parse(
|
427
|
+
args->args[i].value.string,
|
428
|
+
[](absl::string_view, const grpc_core::Slice&) {});
|
429
|
+
if (scheme != grpc_core::HttpSchemeMetadata::kInvalid) return scheme;
|
501
430
|
}
|
502
431
|
}
|
503
432
|
}
|
504
|
-
return
|
433
|
+
return grpc_core::HttpSchemeMetadata::kHttp;
|
505
434
|
}
|
506
435
|
|
507
436
|
static size_t max_payload_size_from_args(const grpc_channel_args* args) {
|
@@ -36,39 +36,27 @@
|
|
36
36
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
37
37
|
#include "src/core/lib/surface/call.h"
|
38
38
|
#include "src/core/lib/surface/channel_stack_type.h"
|
39
|
-
#include "src/core/lib/transport/static_metadata.h"
|
40
39
|
|
41
40
|
namespace {
|
42
41
|
|
43
42
|
struct call_data {
|
44
|
-
grpc_linked_mdelem authority_storage;
|
45
43
|
grpc_core::CallCombiner* call_combiner;
|
46
44
|
};
|
47
45
|
|
48
46
|
struct channel_data {
|
49
|
-
grpc_core::
|
50
|
-
grpc_mdelem default_authority_mdelem;
|
47
|
+
grpc_core::Slice default_authority;
|
51
48
|
};
|
52
49
|
|
53
50
|
void client_authority_start_transport_stream_op_batch(
|
54
51
|
grpc_call_element* elem, grpc_transport_stream_op_batch* batch) {
|
55
52
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data);
|
56
|
-
call_data* calld = static_cast<call_data*>(elem->call_data);
|
57
53
|
// Handle send_initial_metadata.
|
58
54
|
// If the initial metadata doesn't already contain :authority, add it.
|
59
55
|
if (batch->send_initial_metadata &&
|
60
|
-
batch->payload->send_initial_metadata.send_initial_metadata
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
batch->payload->send_initial_metadata.send_initial_metadata,
|
65
|
-
&calld->authority_storage,
|
66
|
-
GRPC_MDELEM_REF(chand->default_authority_mdelem), GRPC_BATCH_AUTHORITY);
|
67
|
-
if (error != GRPC_ERROR_NONE) {
|
68
|
-
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
69
|
-
calld->call_combiner);
|
70
|
-
return;
|
71
|
-
}
|
56
|
+
batch->payload->send_initial_metadata.send_initial_metadata->get_pointer(
|
57
|
+
grpc_core::HttpAuthorityMetadata()) == nullptr) {
|
58
|
+
batch->payload->send_initial_metadata.send_initial_metadata->Set(
|
59
|
+
grpc_core::HttpAuthorityMetadata(), chand->default_authority.Ref());
|
72
60
|
}
|
73
61
|
// Pass control down the stack.
|
74
62
|
grpc_call_next_op(elem, batch);
|
@@ -90,7 +78,7 @@ void client_authority_destroy_call_elem(
|
|
90
78
|
/* Constructor for channel_data */
|
91
79
|
grpc_error_handle client_authority_init_channel_elem(
|
92
80
|
grpc_channel_element* elem, grpc_channel_element_args* args) {
|
93
|
-
channel_data* chand =
|
81
|
+
channel_data* chand = new (elem->channel_data) channel_data;
|
94
82
|
const grpc_arg* default_authority_arg =
|
95
83
|
grpc_channel_args_find(args->channel_args, GRPC_ARG_DEFAULT_AUTHORITY);
|
96
84
|
if (default_authority_arg == nullptr) {
|
@@ -105,18 +93,14 @@ grpc_error_handle client_authority_init_channel_elem(
|
|
105
93
|
"GRPC_ARG_DEFAULT_AUTHORITY channel arg. must be a string");
|
106
94
|
}
|
107
95
|
chand->default_authority =
|
108
|
-
grpc_core::
|
109
|
-
chand->default_authority_mdelem = grpc_mdelem_create(
|
110
|
-
GRPC_MDSTR_AUTHORITY, chand->default_authority, nullptr);
|
96
|
+
grpc_core::Slice::FromCopiedString(default_authority_str);
|
111
97
|
GPR_ASSERT(!args->is_last);
|
112
98
|
return GRPC_ERROR_NONE;
|
113
99
|
}
|
114
100
|
|
115
101
|
/* Destructor for channel data */
|
116
102
|
void client_authority_destroy_channel_elem(grpc_channel_element* elem) {
|
117
|
-
|
118
|
-
grpc_slice_unref_internal(chand->default_authority);
|
119
|
-
GRPC_MDELEM_UNREF(chand->default_authority_mdelem);
|
103
|
+
static_cast<channel_data*>(elem->channel_data)->~channel_data();
|
120
104
|
}
|
121
105
|
} // namespace
|
122
106
|
|
@@ -31,8 +31,6 @@
|
|
31
31
|
#include <grpc/support/log.h>
|
32
32
|
|
33
33
|
#include "src/core/lib/channel/channel_args.h"
|
34
|
-
#include "src/core/lib/compression/algorithm_metadata.h"
|
35
|
-
#include "src/core/lib/compression/compression_args.h"
|
36
34
|
#include "src/core/lib/compression/compression_internal.h"
|
37
35
|
#include "src/core/lib/compression/message_compress.h"
|
38
36
|
#include "src/core/lib/gpr/string.h"
|
@@ -41,7 +39,6 @@
|
|
41
39
|
#include "src/core/lib/slice/slice_internal.h"
|
42
40
|
#include "src/core/lib/slice/slice_string_helpers.h"
|
43
41
|
#include "src/core/lib/surface/call.h"
|
44
|
-
#include "src/core/lib/transport/static_metadata.h"
|
45
42
|
|
46
43
|
namespace {
|
47
44
|
|
@@ -49,15 +46,15 @@ class ChannelData {
|
|
49
46
|
public:
|
50
47
|
explicit ChannelData(grpc_channel_element_args* args) {
|
51
48
|
// Get the enabled and the default algorithms from channel args.
|
52
|
-
|
53
|
-
|
49
|
+
enabled_compression_algorithms_ =
|
50
|
+
grpc_core::CompressionAlgorithmSet::FromChannelArgs(args->channel_args);
|
54
51
|
default_compression_algorithm_ =
|
55
|
-
|
56
|
-
args->channel_args)
|
52
|
+
grpc_core::DefaultCompressionAlgorithmFromChannelArgs(
|
53
|
+
args->channel_args)
|
54
|
+
.value_or(GRPC_COMPRESS_NONE);
|
57
55
|
// Make sure the default is enabled.
|
58
|
-
if (
|
59
|
-
|
60
|
-
default_compression_algorithm_)) {
|
56
|
+
if (!enabled_compression_algorithms_.IsSet(
|
57
|
+
default_compression_algorithm_)) {
|
61
58
|
const char* name;
|
62
59
|
if (!grpc_compression_algorithm_name(default_compression_algorithm_,
|
63
60
|
&name)) {
|
@@ -68,12 +65,6 @@ class ChannelData {
|
|
68
65
|
name);
|
69
66
|
default_compression_algorithm_ = GRPC_COMPRESS_NONE;
|
70
67
|
}
|
71
|
-
enabled_message_compression_algorithms_bitset_ =
|
72
|
-
grpc_compression_bitset_to_message_bitset(
|
73
|
-
enabled_compression_algorithms_bitset_);
|
74
|
-
enabled_stream_compression_algorithms_bitset_ =
|
75
|
-
grpc_compression_bitset_to_stream_bitset(
|
76
|
-
enabled_compression_algorithms_bitset_);
|
77
68
|
GPR_ASSERT(!args->is_last);
|
78
69
|
}
|
79
70
|
|
@@ -81,27 +72,15 @@ class ChannelData {
|
|
81
72
|
return default_compression_algorithm_;
|
82
73
|
}
|
83
74
|
|
84
|
-
|
85
|
-
return
|
86
|
-
}
|
87
|
-
|
88
|
-
uint32_t enabled_message_compression_algorithms_bitset() const {
|
89
|
-
return enabled_message_compression_algorithms_bitset_;
|
90
|
-
}
|
91
|
-
|
92
|
-
uint32_t enabled_stream_compression_algorithms_bitset() const {
|
93
|
-
return enabled_stream_compression_algorithms_bitset_;
|
75
|
+
grpc_core::CompressionAlgorithmSet enabled_compression_algorithms() const {
|
76
|
+
return enabled_compression_algorithms_;
|
94
77
|
}
|
95
78
|
|
96
79
|
private:
|
97
80
|
/** The default, channel-level, compression algorithm */
|
98
81
|
grpc_compression_algorithm default_compression_algorithm_;
|
99
|
-
/**
|
100
|
-
|
101
|
-
/** Bitset of enabled message compression algorithms */
|
102
|
-
uint32_t enabled_message_compression_algorithms_bitset_;
|
103
|
-
/** Bitset of enabled stream compression algorithms */
|
104
|
-
uint32_t enabled_stream_compression_algorithms_bitset_;
|
82
|
+
/** Enabled compression algorithms */
|
83
|
+
grpc_core::CompressionAlgorithmSet enabled_compression_algorithms_;
|
105
84
|
};
|
106
85
|
|
107
86
|
class CallData {
|
@@ -111,12 +90,9 @@ class CallData {
|
|
111
90
|
ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
|
112
91
|
// The call's message compression algorithm is set to channel's default
|
113
92
|
// setting. It can be overridden later by initial metadata.
|
114
|
-
if (GPR_LIKELY(
|
115
|
-
|
116
|
-
|
117
|
-
message_compression_algorithm_ =
|
118
|
-
grpc_compression_algorithm_to_message_compression_algorithm(
|
119
|
-
channeld->default_compression_algorithm());
|
93
|
+
if (GPR_LIKELY(channeld->enabled_compression_algorithms().IsSet(
|
94
|
+
channeld->default_compression_algorithm()))) {
|
95
|
+
compression_algorithm_ = channeld->default_compression_algorithm();
|
120
96
|
}
|
121
97
|
GRPC_CLOSURE_INIT(&start_send_message_batch_in_call_combiner_,
|
122
98
|
StartSendMessageBatch, elem, grpc_schedule_on_exec_ctx);
|
@@ -136,8 +112,8 @@ class CallData {
|
|
136
112
|
bool SkipMessageCompression();
|
137
113
|
void InitializeState(grpc_call_element* elem);
|
138
114
|
|
139
|
-
|
140
|
-
|
115
|
+
void ProcessSendInitialMetadata(grpc_call_element* elem,
|
116
|
+
grpc_metadata_batch* initial_metadata);
|
141
117
|
|
142
118
|
// Methods for processing a send_message batch
|
143
119
|
static void StartSendMessageBatch(void* elem_arg, grpc_error_handle unused);
|
@@ -152,8 +128,7 @@ class CallData {
|
|
152
128
|
static void SendMessageOnComplete(void* calld_arg, grpc_error_handle error);
|
153
129
|
|
154
130
|
grpc_core::CallCombiner* call_combiner_;
|
155
|
-
|
156
|
-
GRPC_MESSAGE_COMPRESS_NONE;
|
131
|
+
grpc_compression_algorithm compression_algorithm_ = GRPC_COMPRESS_NONE;
|
157
132
|
grpc_error_handle cancel_error_ = GRPC_ERROR_NONE;
|
158
133
|
grpc_transport_stream_op_batch* send_message_batch_ = nullptr;
|
159
134
|
bool seen_initial_metadata_ = false;
|
@@ -163,10 +138,6 @@ class CallData {
|
|
163
138
|
/* The fields below are only initialized when we compress the payload.
|
164
139
|
* Keep them at the bottom of the struct, so they don't pollute the
|
165
140
|
* cache-lines. */
|
166
|
-
grpc_linked_mdelem message_compression_algorithm_storage_;
|
167
|
-
grpc_linked_mdelem stream_compression_algorithm_storage_;
|
168
|
-
grpc_linked_mdelem accept_encoding_storage_;
|
169
|
-
grpc_linked_mdelem accept_stream_encoding_storage_;
|
170
141
|
grpc_slice_buffer slices_; /**< Buffers up input slices to be compressed */
|
171
142
|
// Allocate space for the replacement stream
|
172
143
|
std::aligned_storage<sizeof(grpc_core::SliceBufferByteStream),
|
@@ -188,44 +159,7 @@ bool CallData::SkipMessageCompression() {
|
|
188
159
|
}
|
189
160
|
// If this call doesn't have any message compression algorithm set, skip
|
190
161
|
// message compression.
|
191
|
-
return
|
192
|
-
}
|
193
|
-
|
194
|
-
// Determines the compression algorithm from the initial metadata and the
|
195
|
-
// channel's default setting.
|
196
|
-
grpc_compression_algorithm FindCompressionAlgorithm(
|
197
|
-
grpc_metadata_batch* initial_metadata, ChannelData* channeld) {
|
198
|
-
if (initial_metadata->legacy_index()->named.grpc_internal_encoding_request ==
|
199
|
-
nullptr) {
|
200
|
-
return channeld->default_compression_algorithm();
|
201
|
-
}
|
202
|
-
grpc_compression_algorithm compression_algorithm;
|
203
|
-
// Parse the compression algorithm from the initial metadata.
|
204
|
-
grpc_mdelem md = initial_metadata->legacy_index()
|
205
|
-
->named.grpc_internal_encoding_request->md;
|
206
|
-
GPR_ASSERT(grpc_compression_algorithm_parse(GRPC_MDVALUE(md),
|
207
|
-
&compression_algorithm));
|
208
|
-
// Remove this metadata since it's an internal one (i.e., it won't be
|
209
|
-
// transmitted out).
|
210
|
-
initial_metadata->Remove(GRPC_BATCH_GRPC_INTERNAL_ENCODING_REQUEST);
|
211
|
-
// Check if that algorithm is enabled. Note that GRPC_COMPRESS_NONE is always
|
212
|
-
// enabled.
|
213
|
-
// TODO(juanlishen): Maybe use channel default or abort() if the algorithm
|
214
|
-
// from the initial metadata is disabled.
|
215
|
-
if (GPR_LIKELY(
|
216
|
-
grpc_core::GetBit(channeld->enabled_compression_algorithms_bitset(),
|
217
|
-
compression_algorithm))) {
|
218
|
-
return compression_algorithm;
|
219
|
-
}
|
220
|
-
const char* algorithm_name;
|
221
|
-
GPR_ASSERT(
|
222
|
-
grpc_compression_algorithm_name(compression_algorithm, &algorithm_name));
|
223
|
-
gpr_log(GPR_ERROR,
|
224
|
-
"Invalid compression algorithm from initial metadata: '%s' "
|
225
|
-
"(previously disabled). "
|
226
|
-
"Will not compress.",
|
227
|
-
algorithm_name);
|
228
|
-
return GRPC_COMPRESS_NONE;
|
162
|
+
return compression_algorithm_ == GRPC_COMPRESS_NONE;
|
229
163
|
}
|
230
164
|
|
231
165
|
void CallData::InitializeState(grpc_call_element* elem) {
|
@@ -238,53 +172,28 @@ void CallData::InitializeState(grpc_call_element* elem) {
|
|
238
172
|
grpc_schedule_on_exec_ctx);
|
239
173
|
}
|
240
174
|
|
241
|
-
|
175
|
+
void CallData::ProcessSendInitialMetadata(
|
242
176
|
grpc_call_element* elem, grpc_metadata_batch* initial_metadata) {
|
243
177
|
ChannelData* channeld = static_cast<ChannelData*>(elem->channel_data);
|
244
178
|
// Find the compression algorithm.
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
initial_metadata, &message_compression_algorithm_storage_,
|
260
|
-
grpc_message_compression_encoding_mdelem(
|
261
|
-
message_compression_algorithm_),
|
262
|
-
GRPC_BATCH_GRPC_ENCODING);
|
263
|
-
} else if (stream_compression_algorithm != GRPC_STREAM_COMPRESS_NONE) {
|
264
|
-
InitializeState(elem);
|
265
|
-
error = grpc_metadata_batch_add_tail(
|
266
|
-
initial_metadata, &stream_compression_algorithm_storage_,
|
267
|
-
grpc_stream_compression_encoding_mdelem(stream_compression_algorithm),
|
268
|
-
GRPC_BATCH_CONTENT_ENCODING);
|
179
|
+
compression_algorithm_ =
|
180
|
+
initial_metadata->Take(grpc_core::GrpcInternalEncodingRequest())
|
181
|
+
.value_or(channeld->default_compression_algorithm());
|
182
|
+
switch (compression_algorithm_) {
|
183
|
+
case GRPC_COMPRESS_NONE:
|
184
|
+
break;
|
185
|
+
case GRPC_COMPRESS_DEFLATE:
|
186
|
+
case GRPC_COMPRESS_GZIP:
|
187
|
+
InitializeState(elem);
|
188
|
+
initial_metadata->Set(grpc_core::GrpcEncodingMetadata(),
|
189
|
+
compression_algorithm_);
|
190
|
+
break;
|
191
|
+
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
192
|
+
abort();
|
269
193
|
}
|
270
|
-
if (error != GRPC_ERROR_NONE) return error;
|
271
194
|
// Convey supported compression algorithms.
|
272
|
-
|
273
|
-
|
274
|
-
GRPC_MDELEM_ACCEPT_ENCODING_FOR_ALGORITHMS(
|
275
|
-
channeld->enabled_message_compression_algorithms_bitset()),
|
276
|
-
GRPC_BATCH_GRPC_ACCEPT_ENCODING);
|
277
|
-
if (error != GRPC_ERROR_NONE) return error;
|
278
|
-
// Do not overwrite accept-encoding header if it already presents (e.g., added
|
279
|
-
// by some proxy).
|
280
|
-
if (!initial_metadata->legacy_index()->named.accept_encoding) {
|
281
|
-
error = grpc_metadata_batch_add_tail(
|
282
|
-
initial_metadata, &accept_stream_encoding_storage_,
|
283
|
-
GRPC_MDELEM_ACCEPT_STREAM_ENCODING_FOR_ALGORITHMS(
|
284
|
-
channeld->enabled_stream_compression_algorithms_bitset()),
|
285
|
-
GRPC_BATCH_ACCEPT_ENCODING);
|
286
|
-
}
|
287
|
-
return error;
|
195
|
+
initial_metadata->Set(grpc_core::GrpcAcceptEncodingMetadata(),
|
196
|
+
channeld->enabled_compression_algorithms());
|
288
197
|
}
|
289
198
|
|
290
199
|
void CallData::SendMessageOnComplete(void* calld_arg, grpc_error_handle error) {
|
@@ -304,15 +213,13 @@ void CallData::SendMessageBatchContinue(grpc_call_element* elem) {
|
|
304
213
|
}
|
305
214
|
|
306
215
|
void CallData::FinishSendMessage(grpc_call_element* elem) {
|
307
|
-
GPR_DEBUG_ASSERT(
|
308
|
-
GRPC_MESSAGE_COMPRESS_NONE);
|
216
|
+
GPR_DEBUG_ASSERT(compression_algorithm_ != GRPC_COMPRESS_NONE);
|
309
217
|
// Compress the data if appropriate.
|
310
218
|
grpc_slice_buffer tmp;
|
311
219
|
grpc_slice_buffer_init(&tmp);
|
312
220
|
uint32_t send_flags =
|
313
221
|
send_message_batch_->payload->send_message.send_message->flags();
|
314
|
-
bool did_compress =
|
315
|
-
grpc_msg_compress(message_compression_algorithm_, &slices_, &tmp);
|
222
|
+
bool did_compress = grpc_msg_compress(compression_algorithm_, &slices_, &tmp);
|
316
223
|
if (did_compress) {
|
317
224
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
318
225
|
const char* algo_name;
|
@@ -320,8 +227,8 @@ void CallData::FinishSendMessage(grpc_call_element* elem) {
|
|
320
227
|
const size_t after_size = tmp.length;
|
321
228
|
const float savings_ratio = 1.0f - static_cast<float>(after_size) /
|
322
229
|
static_cast<float>(before_size);
|
323
|
-
GPR_ASSERT(
|
324
|
-
|
230
|
+
GPR_ASSERT(
|
231
|
+
grpc_compression_algorithm_name(compression_algorithm_, &algo_name));
|
325
232
|
gpr_log(GPR_INFO,
|
326
233
|
"Compressed[%s] %" PRIuPTR " bytes vs. %" PRIuPTR
|
327
234
|
" bytes (%.2f%% savings)",
|
@@ -332,8 +239,8 @@ void CallData::FinishSendMessage(grpc_call_element* elem) {
|
|
332
239
|
} else {
|
333
240
|
if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
|
334
241
|
const char* algo_name;
|
335
|
-
GPR_ASSERT(
|
336
|
-
|
242
|
+
GPR_ASSERT(
|
243
|
+
grpc_compression_algorithm_name(compression_algorithm_, &algo_name));
|
337
244
|
gpr_log(GPR_INFO,
|
338
245
|
"Algorithm '%s' enabled but decided not to compress. Input size: "
|
339
246
|
"%" PRIuPTR,
|
@@ -465,13 +372,8 @@ void CallData::CompressStartTransportStreamOpBatch(
|
|
465
372
|
// Handle send_initial_metadata.
|
466
373
|
if (batch->send_initial_metadata) {
|
467
374
|
GPR_ASSERT(!seen_initial_metadata_);
|
468
|
-
|
375
|
+
ProcessSendInitialMetadata(
|
469
376
|
elem, batch->payload->send_initial_metadata.send_initial_metadata);
|
470
|
-
if (error != GRPC_ERROR_NONE) {
|
471
|
-
grpc_transport_stream_op_batch_finish_with_failure(batch, error,
|
472
|
-
call_combiner_);
|
473
|
-
return;
|
474
|
-
}
|
475
377
|
seen_initial_metadata_ = true;
|
476
378
|
// If we had previously received a batch containing a send_message op,
|
477
379
|
// handle it now. Note that we need to re-enter the call combiner
|