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
@@ -23,181 +23,51 @@
|
|
23
23
|
#include <stdlib.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include <cstdint>
|
27
|
+
|
28
|
+
#include "absl/container/inlined_vector.h"
|
29
|
+
#include "absl/strings/str_join.h"
|
30
|
+
#include "absl/strings/str_split.h"
|
31
|
+
|
26
32
|
#include <grpc/compression.h>
|
27
33
|
|
28
|
-
#include "src/core/lib/
|
34
|
+
#include "src/core/lib/channel/channel_args.h"
|
29
35
|
#include "src/core/lib/gpr/useful.h"
|
30
36
|
#include "src/core/lib/slice/slice_utils.h"
|
31
37
|
#include "src/core/lib/surface/api_trace.h"
|
32
|
-
#include "src/core/lib/transport/static_metadata.h"
|
33
|
-
|
34
|
-
/* Interfaces related to MD */
|
35
|
-
|
36
|
-
grpc_message_compression_algorithm
|
37
|
-
grpc_message_compression_algorithm_from_slice(const grpc_slice& str) {
|
38
|
-
if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_IDENTITY)) {
|
39
|
-
return GRPC_MESSAGE_COMPRESS_NONE;
|
40
|
-
}
|
41
|
-
if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_DEFLATE)) {
|
42
|
-
return GRPC_MESSAGE_COMPRESS_DEFLATE;
|
43
|
-
}
|
44
|
-
if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_GZIP)) {
|
45
|
-
return GRPC_MESSAGE_COMPRESS_GZIP;
|
46
|
-
}
|
47
|
-
return GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT;
|
48
|
-
}
|
49
|
-
|
50
|
-
grpc_stream_compression_algorithm grpc_stream_compression_algorithm_from_slice(
|
51
|
-
const grpc_slice& str) {
|
52
|
-
if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_IDENTITY)) {
|
53
|
-
return GRPC_STREAM_COMPRESS_NONE;
|
54
|
-
}
|
55
|
-
if (grpc_slice_eq_static_interned(str, GRPC_MDSTR_GZIP)) {
|
56
|
-
return GRPC_STREAM_COMPRESS_GZIP;
|
57
|
-
}
|
58
|
-
return GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT;
|
59
|
-
}
|
60
38
|
|
61
|
-
|
62
|
-
grpc_message_compression_algorithm algorithm) {
|
63
|
-
switch (algorithm) {
|
64
|
-
case GRPC_MESSAGE_COMPRESS_NONE:
|
65
|
-
return GRPC_MDELEM_GRPC_ENCODING_IDENTITY;
|
66
|
-
case GRPC_MESSAGE_COMPRESS_DEFLATE:
|
67
|
-
return GRPC_MDELEM_GRPC_ENCODING_DEFLATE;
|
68
|
-
case GRPC_MESSAGE_COMPRESS_GZIP:
|
69
|
-
return GRPC_MDELEM_GRPC_ENCODING_GZIP;
|
70
|
-
default:
|
71
|
-
break;
|
72
|
-
}
|
73
|
-
return GRPC_MDNULL;
|
74
|
-
}
|
39
|
+
namespace grpc_core {
|
75
40
|
|
76
|
-
|
77
|
-
grpc_stream_compression_algorithm algorithm) {
|
41
|
+
const char* CompressionAlgorithmAsString(grpc_compression_algorithm algorithm) {
|
78
42
|
switch (algorithm) {
|
79
|
-
case
|
80
|
-
return
|
81
|
-
case GRPC_STREAM_COMPRESS_GZIP:
|
82
|
-
return GRPC_MDELEM_CONTENT_ENCODING_GZIP;
|
83
|
-
default:
|
84
|
-
break;
|
85
|
-
}
|
86
|
-
return GRPC_MDNULL;
|
87
|
-
}
|
88
|
-
|
89
|
-
/* Interfaces performing transformation between compression algorithms and
|
90
|
-
* levels. */
|
91
|
-
grpc_message_compression_algorithm
|
92
|
-
grpc_compression_algorithm_to_message_compression_algorithm(
|
93
|
-
grpc_compression_algorithm algo) {
|
94
|
-
switch (algo) {
|
43
|
+
case GRPC_COMPRESS_NONE:
|
44
|
+
return "identity";
|
95
45
|
case GRPC_COMPRESS_DEFLATE:
|
96
|
-
return
|
46
|
+
return "deflate";
|
97
47
|
case GRPC_COMPRESS_GZIP:
|
98
|
-
return
|
48
|
+
return "gzip";
|
49
|
+
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
99
50
|
default:
|
100
|
-
return
|
51
|
+
return nullptr;
|
101
52
|
}
|
102
53
|
}
|
103
54
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
}
|
113
|
-
}
|
114
|
-
|
115
|
-
uint32_t grpc_compression_bitset_to_message_bitset(uint32_t bitset) {
|
116
|
-
return bitset & ((1u << GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT) - 1);
|
117
|
-
}
|
118
|
-
|
119
|
-
uint32_t grpc_compression_bitset_to_stream_bitset(uint32_t bitset) {
|
120
|
-
uint32_t identity = (bitset & 1u);
|
121
|
-
uint32_t other_bits =
|
122
|
-
(bitset >> (GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT - 1)) &
|
123
|
-
((1u << GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT) - 2);
|
124
|
-
return identity | other_bits;
|
125
|
-
}
|
126
|
-
|
127
|
-
uint32_t grpc_compression_bitset_from_message_stream_compression_bitset(
|
128
|
-
uint32_t message_bitset, uint32_t stream_bitset) {
|
129
|
-
uint32_t offset_stream_bitset =
|
130
|
-
(stream_bitset & 1u) |
|
131
|
-
((stream_bitset & (~1u)) << (GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT - 1));
|
132
|
-
return message_bitset | offset_stream_bitset;
|
133
|
-
}
|
134
|
-
|
135
|
-
int grpc_compression_algorithm_from_message_stream_compression_algorithm(
|
136
|
-
grpc_compression_algorithm* algorithm,
|
137
|
-
grpc_message_compression_algorithm message_algorithm,
|
138
|
-
grpc_stream_compression_algorithm stream_algorithm) {
|
139
|
-
if (message_algorithm != GRPC_MESSAGE_COMPRESS_NONE &&
|
140
|
-
stream_algorithm != GRPC_STREAM_COMPRESS_NONE) {
|
141
|
-
*algorithm = GRPC_COMPRESS_NONE;
|
142
|
-
return 0;
|
143
|
-
}
|
144
|
-
if (message_algorithm == GRPC_MESSAGE_COMPRESS_NONE) {
|
145
|
-
switch (stream_algorithm) {
|
146
|
-
case GRPC_STREAM_COMPRESS_NONE:
|
147
|
-
*algorithm = GRPC_COMPRESS_NONE;
|
148
|
-
return 1;
|
149
|
-
case GRPC_STREAM_COMPRESS_GZIP:
|
150
|
-
*algorithm = GRPC_COMPRESS_STREAM_GZIP;
|
151
|
-
return 1;
|
152
|
-
default:
|
153
|
-
*algorithm = GRPC_COMPRESS_NONE;
|
154
|
-
return 0;
|
155
|
-
}
|
55
|
+
absl::optional<grpc_compression_algorithm> ParseCompressionAlgorithm(
|
56
|
+
absl::string_view algorithm) {
|
57
|
+
if (algorithm == "identity") {
|
58
|
+
return GRPC_COMPRESS_NONE;
|
59
|
+
} else if (algorithm == "deflate") {
|
60
|
+
return GRPC_COMPRESS_DEFLATE;
|
61
|
+
} else if (algorithm == "gzip") {
|
62
|
+
return GRPC_COMPRESS_GZIP;
|
156
63
|
} else {
|
157
|
-
|
158
|
-
case GRPC_MESSAGE_COMPRESS_NONE:
|
159
|
-
*algorithm = GRPC_COMPRESS_NONE;
|
160
|
-
return 1;
|
161
|
-
case GRPC_MESSAGE_COMPRESS_DEFLATE:
|
162
|
-
*algorithm = GRPC_COMPRESS_DEFLATE;
|
163
|
-
return 1;
|
164
|
-
case GRPC_MESSAGE_COMPRESS_GZIP:
|
165
|
-
*algorithm = GRPC_COMPRESS_GZIP;
|
166
|
-
return 1;
|
167
|
-
default:
|
168
|
-
*algorithm = GRPC_COMPRESS_NONE;
|
169
|
-
return 0;
|
170
|
-
}
|
171
|
-
}
|
172
|
-
}
|
173
|
-
|
174
|
-
/* Interfaces for message compression. */
|
175
|
-
|
176
|
-
int grpc_message_compression_algorithm_name(
|
177
|
-
grpc_message_compression_algorithm algorithm, const char** name) {
|
178
|
-
GRPC_API_TRACE(
|
179
|
-
"grpc_message_compression_algorithm_name(algorithm=%d, name=%p)", 2,
|
180
|
-
((int)algorithm, name));
|
181
|
-
switch (algorithm) {
|
182
|
-
case GRPC_MESSAGE_COMPRESS_NONE:
|
183
|
-
*name = "identity";
|
184
|
-
return 1;
|
185
|
-
case GRPC_MESSAGE_COMPRESS_DEFLATE:
|
186
|
-
*name = "deflate";
|
187
|
-
return 1;
|
188
|
-
case GRPC_MESSAGE_COMPRESS_GZIP:
|
189
|
-
*name = "gzip";
|
190
|
-
return 1;
|
191
|
-
case GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT:
|
192
|
-
return 0;
|
64
|
+
return absl::nullopt;
|
193
65
|
}
|
194
|
-
return 0;
|
195
66
|
}
|
196
67
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
grpc_compression_level level, uint32_t accepted_encodings) {
|
68
|
+
grpc_compression_algorithm
|
69
|
+
CompressionAlgorithmSet::CompressionAlgorithmForLevel(
|
70
|
+
grpc_compression_level level) const {
|
201
71
|
GRPC_API_TRACE("grpc_message_compression_algorithm_for_level(level=%d)", 1,
|
202
72
|
((int)level));
|
203
73
|
if (level > GRPC_COMPRESS_LEVEL_HIGH) {
|
@@ -206,10 +76,8 @@ grpc_message_compression_algorithm grpc_message_compression_algorithm_for_level(
|
|
206
76
|
abort();
|
207
77
|
}
|
208
78
|
|
209
|
-
|
210
|
-
|
211
|
-
if (level == GRPC_COMPRESS_LEVEL_NONE || num_supported == 0) {
|
212
|
-
return GRPC_MESSAGE_COMPRESS_NONE;
|
79
|
+
if (level == GRPC_COMPRESS_LEVEL_NONE) {
|
80
|
+
return GRPC_COMPRESS_NONE;
|
213
81
|
}
|
214
82
|
|
215
83
|
GPR_ASSERT(level > 0);
|
@@ -218,66 +86,138 @@ grpc_message_compression_algorithm grpc_message_compression_algorithm_for_level(
|
|
218
86
|
* compression.
|
219
87
|
* This is simplistic and we will probably want to introduce other dimensions
|
220
88
|
* in the future (cpu/memory cost, etc). */
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
size_t algos_supported_idx = 0;
|
228
|
-
for (size_t i = 0; i < GPR_ARRAY_SIZE(algos_ranking); i++) {
|
229
|
-
const grpc_message_compression_algorithm alg = algos_ranking[i];
|
230
|
-
for (size_t j = 0; j < num_supported; j++) {
|
231
|
-
if (grpc_core::GetBit(accepted_encodings, alg) == 1) {
|
232
|
-
/* if \a alg in supported */
|
233
|
-
sorted_supported_algos[algos_supported_idx++] = alg;
|
234
|
-
break;
|
235
|
-
}
|
89
|
+
absl::InlinedVector<grpc_compression_algorithm,
|
90
|
+
GRPC_COMPRESS_ALGORITHMS_COUNT>
|
91
|
+
algos;
|
92
|
+
for (auto algo : {GRPC_COMPRESS_GZIP, GRPC_COMPRESS_DEFLATE}) {
|
93
|
+
if (set_.is_set(algo)) {
|
94
|
+
algos.push_back(algo);
|
236
95
|
}
|
237
|
-
|
96
|
+
}
|
97
|
+
|
98
|
+
if (algos.empty()) {
|
99
|
+
return GRPC_COMPRESS_NONE;
|
238
100
|
}
|
239
101
|
|
240
102
|
switch (level) {
|
241
103
|
case GRPC_COMPRESS_LEVEL_NONE:
|
242
104
|
abort(); /* should have been handled already */
|
243
105
|
case GRPC_COMPRESS_LEVEL_LOW:
|
244
|
-
return
|
106
|
+
return algos[0];
|
245
107
|
case GRPC_COMPRESS_LEVEL_MED:
|
246
|
-
return
|
108
|
+
return algos[algos.size() / 2];
|
247
109
|
case GRPC_COMPRESS_LEVEL_HIGH:
|
248
|
-
return
|
110
|
+
return algos.back();
|
249
111
|
default:
|
250
112
|
abort();
|
251
113
|
};
|
252
114
|
}
|
253
115
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
116
|
+
CompressionAlgorithmSet CompressionAlgorithmSet::FromUint32(uint32_t value) {
|
117
|
+
CompressionAlgorithmSet set;
|
118
|
+
for (size_t i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
|
119
|
+
if (value & (1u << i)) {
|
120
|
+
set.set_.set(i);
|
121
|
+
}
|
122
|
+
}
|
123
|
+
return set;
|
124
|
+
}
|
125
|
+
|
126
|
+
CompressionAlgorithmSet CompressionAlgorithmSet::FromChannelArgs(
|
127
|
+
const grpc_channel_args* args) {
|
128
|
+
CompressionAlgorithmSet set;
|
129
|
+
static const uint32_t kEverything =
|
130
|
+
(1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1;
|
131
|
+
if (args != nullptr) {
|
132
|
+
set = CompressionAlgorithmSet::FromUint32(grpc_channel_args_find_integer(
|
133
|
+
args, GRPC_COMPRESSION_CHANNEL_ENABLED_ALGORITHMS_BITSET,
|
134
|
+
grpc_integer_options{kEverything, 0, kEverything}));
|
135
|
+
set.Set(GRPC_COMPRESS_NONE);
|
265
136
|
} else {
|
266
|
-
|
137
|
+
set = CompressionAlgorithmSet::FromUint32(kEverything);
|
267
138
|
}
|
139
|
+
return set;
|
268
140
|
}
|
269
141
|
|
270
|
-
|
142
|
+
CompressionAlgorithmSet::CompressionAlgorithmSet() = default;
|
271
143
|
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
144
|
+
CompressionAlgorithmSet::CompressionAlgorithmSet(
|
145
|
+
std::initializer_list<grpc_compression_algorithm> algorithms) {
|
146
|
+
for (auto algorithm : algorithms) {
|
147
|
+
Set(algorithm);
|
148
|
+
}
|
149
|
+
}
|
150
|
+
|
151
|
+
bool CompressionAlgorithmSet::IsSet(
|
152
|
+
grpc_compression_algorithm algorithm) const {
|
153
|
+
size_t i = static_cast<size_t>(algorithm);
|
154
|
+
if (i < GRPC_COMPRESS_ALGORITHMS_COUNT) {
|
155
|
+
return set_.is_set(i);
|
280
156
|
} else {
|
281
|
-
return
|
157
|
+
return false;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
void CompressionAlgorithmSet::Set(grpc_compression_algorithm algorithm) {
|
162
|
+
size_t i = static_cast<size_t>(algorithm);
|
163
|
+
if (i < GRPC_COMPRESS_ALGORITHMS_COUNT) {
|
164
|
+
set_.set(i);
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
std::string CompressionAlgorithmSet::ToString() const {
|
169
|
+
absl::InlinedVector<const char*, GRPC_COMPRESS_ALGORITHMS_COUNT> segments;
|
170
|
+
for (size_t i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
|
171
|
+
if (set_.is_set(i)) {
|
172
|
+
segments.push_back(CompressionAlgorithmAsString(
|
173
|
+
static_cast<grpc_compression_algorithm>(i)));
|
174
|
+
}
|
175
|
+
}
|
176
|
+
return absl::StrJoin(segments, ", ");
|
177
|
+
}
|
178
|
+
|
179
|
+
Slice CompressionAlgorithmSet::ToSlice() const {
|
180
|
+
return Slice::FromCopiedString(ToString());
|
181
|
+
}
|
182
|
+
|
183
|
+
CompressionAlgorithmSet CompressionAlgorithmSet::FromString(
|
184
|
+
absl::string_view str) {
|
185
|
+
CompressionAlgorithmSet set{GRPC_COMPRESS_NONE};
|
186
|
+
for (auto algorithm : absl::StrSplit(str, ',')) {
|
187
|
+
auto parsed =
|
188
|
+
ParseCompressionAlgorithm(absl::StripAsciiWhitespace(algorithm));
|
189
|
+
if (parsed.has_value()) {
|
190
|
+
set.Set(*parsed);
|
191
|
+
}
|
192
|
+
}
|
193
|
+
return set;
|
194
|
+
}
|
195
|
+
|
196
|
+
uint32_t CompressionAlgorithmSet::ToLegacyBitmask() const {
|
197
|
+
uint32_t x = 0;
|
198
|
+
for (size_t i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
|
199
|
+
if (set_.is_set(i)) {
|
200
|
+
x |= (1u << i);
|
201
|
+
}
|
282
202
|
}
|
203
|
+
return x;
|
283
204
|
}
|
205
|
+
|
206
|
+
absl::optional<grpc_compression_algorithm>
|
207
|
+
DefaultCompressionAlgorithmFromChannelArgs(const grpc_channel_args* args) {
|
208
|
+
if (args == nullptr) return absl::nullopt;
|
209
|
+
for (size_t i = 0; i < args->num_args; i++) {
|
210
|
+
if (strcmp(args->args[i].key, GRPC_COMPRESSION_CHANNEL_DEFAULT_ALGORITHM) ==
|
211
|
+
0) {
|
212
|
+
if (args->args[i].type == GRPC_ARG_INTEGER) {
|
213
|
+
return static_cast<grpc_compression_algorithm>(
|
214
|
+
args->args[i].value.integer);
|
215
|
+
} else if (args->args[i].type == GRPC_ARG_STRING) {
|
216
|
+
return ParseCompressionAlgorithm(args->args[i].value.string);
|
217
|
+
}
|
218
|
+
}
|
219
|
+
}
|
220
|
+
return absl::nullopt;
|
221
|
+
}
|
222
|
+
|
223
|
+
} // namespace grpc_core
|
@@ -21,77 +21,72 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <
|
25
|
-
#include <grpc/slice.h>
|
26
|
-
|
27
|
-
#include "src/core/lib/gpr/useful.h"
|
28
|
-
|
29
|
-
#ifdef __cplusplus
|
30
|
-
extern "C" {
|
31
|
-
#endif
|
32
|
-
|
33
|
-
typedef enum {
|
34
|
-
GRPC_MESSAGE_COMPRESS_NONE = 0,
|
35
|
-
GRPC_MESSAGE_COMPRESS_DEFLATE,
|
36
|
-
GRPC_MESSAGE_COMPRESS_GZIP,
|
37
|
-
/* TODO(ctiller): snappy */
|
38
|
-
GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT
|
39
|
-
} grpc_message_compression_algorithm;
|
40
|
-
|
41
|
-
/** Stream compression algorithms supported by gRPC */
|
42
|
-
typedef enum {
|
43
|
-
GRPC_STREAM_COMPRESS_NONE = 0,
|
44
|
-
GRPC_STREAM_COMPRESS_GZIP,
|
45
|
-
GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT
|
46
|
-
} grpc_stream_compression_algorithm;
|
47
|
-
|
48
|
-
/* Interfaces performing transformation between compression algorithms and
|
49
|
-
* levels. */
|
50
|
-
|
51
|
-
grpc_message_compression_algorithm
|
52
|
-
grpc_compression_algorithm_to_message_compression_algorithm(
|
53
|
-
grpc_compression_algorithm algo);
|
54
|
-
|
55
|
-
grpc_stream_compression_algorithm
|
56
|
-
grpc_compression_algorithm_to_stream_compression_algorithm(
|
57
|
-
grpc_compression_algorithm algo);
|
58
|
-
|
59
|
-
uint32_t grpc_compression_bitset_to_message_bitset(uint32_t bitset);
|
24
|
+
#include <initializer_list>
|
60
25
|
|
61
|
-
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
#include "absl/types/optional.h"
|
62
28
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
int grpc_compression_algorithm_from_message_stream_compression_algorithm(
|
67
|
-
grpc_compression_algorithm* algorithm,
|
68
|
-
grpc_message_compression_algorithm message_algorithm,
|
69
|
-
grpc_stream_compression_algorithm stream_algorithm);
|
70
|
-
|
71
|
-
/* Interfaces for message compression. */
|
72
|
-
|
73
|
-
int grpc_message_compression_algorithm_name(
|
74
|
-
grpc_message_compression_algorithm algorithm, const char** name);
|
75
|
-
|
76
|
-
grpc_message_compression_algorithm grpc_message_compression_algorithm_for_level(
|
77
|
-
grpc_compression_level level, uint32_t accepted_encodings);
|
78
|
-
|
79
|
-
int grpc_message_compression_algorithm_parse(
|
80
|
-
grpc_slice value, grpc_message_compression_algorithm* algorithm);
|
81
|
-
|
82
|
-
/* Interfaces for stream compression. */
|
83
|
-
|
84
|
-
int grpc_stream_compression_algorithm_parse(
|
85
|
-
grpc_slice value, grpc_stream_compression_algorithm* algorithm);
|
86
|
-
|
87
|
-
#ifdef __cplusplus
|
88
|
-
}
|
89
|
-
#endif
|
29
|
+
#include <grpc/compression.h>
|
30
|
+
#include <grpc/impl/codegen/grpc_types.h>
|
31
|
+
#include <grpc/slice.h>
|
90
32
|
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
33
|
+
#include "src/core/lib/gprpp/bitset.h"
|
34
|
+
#include "src/core/lib/slice/slice.h"
|
35
|
+
|
36
|
+
namespace grpc_core {
|
37
|
+
|
38
|
+
// Given a string naming a compression algorithm, return the corresponding enum
|
39
|
+
// or nullopt on error.
|
40
|
+
absl::optional<grpc_compression_algorithm> ParseCompressionAlgorithm(
|
41
|
+
absl::string_view algorithm);
|
42
|
+
// Convert a compression algorithm to a string. Returns nullptr if a name is not
|
43
|
+
// known.
|
44
|
+
const char* CompressionAlgorithmAsString(grpc_compression_algorithm algorithm);
|
45
|
+
// Retrieve the default compression algorithm from channel args, return nullopt
|
46
|
+
// if not found.
|
47
|
+
absl::optional<grpc_compression_algorithm>
|
48
|
+
DefaultCompressionAlgorithmFromChannelArgs(const grpc_channel_args* args);
|
49
|
+
|
50
|
+
// A set of grpc_compression_algorithm values.
|
51
|
+
class CompressionAlgorithmSet {
|
52
|
+
public:
|
53
|
+
// Construct from a uint32_t bitmask - bit 0 => algorithm 0, bit 1 =>
|
54
|
+
// algorithm 1, etc.
|
55
|
+
static CompressionAlgorithmSet FromUint32(uint32_t value);
|
56
|
+
// Locate in channel args and construct from the found value.
|
57
|
+
static CompressionAlgorithmSet FromChannelArgs(const grpc_channel_args* args);
|
58
|
+
// Parse a string of comma-separated compression algorithms.
|
59
|
+
static CompressionAlgorithmSet FromString(absl::string_view str);
|
60
|
+
// Construct an empty set.
|
61
|
+
CompressionAlgorithmSet();
|
62
|
+
// Construct from a std::initializer_list of grpc_compression_algorithm
|
63
|
+
// values.
|
64
|
+
CompressionAlgorithmSet(
|
65
|
+
std::initializer_list<grpc_compression_algorithm> algorithms);
|
66
|
+
|
67
|
+
// Given a compression level, choose an appropriate algorithm from this set.
|
68
|
+
grpc_compression_algorithm CompressionAlgorithmForLevel(
|
69
|
+
grpc_compression_level level) const;
|
70
|
+
// Return true if this set contains algorithm, false otherwise.
|
71
|
+
bool IsSet(grpc_compression_algorithm algorithm) const;
|
72
|
+
// Add algorithm to this set.
|
73
|
+
void Set(grpc_compression_algorithm algorithm);
|
74
|
+
|
75
|
+
// Return a comma separated string of the algorithms in this set.
|
76
|
+
std::string ToString() const;
|
77
|
+
Slice ToSlice() const;
|
78
|
+
|
79
|
+
// Return a bitmask of the algorithms in this set.
|
80
|
+
uint32_t ToLegacyBitmask() const;
|
81
|
+
|
82
|
+
bool operator==(const CompressionAlgorithmSet& other) const {
|
83
|
+
return set_ == other.set_;
|
84
|
+
}
|
85
|
+
|
86
|
+
private:
|
87
|
+
BitSet<GRPC_COMPRESS_ALGORITHMS_COUNT> set_;
|
88
|
+
};
|
89
|
+
|
90
|
+
} // namespace grpc_core
|
96
91
|
|
97
92
|
#endif /* GRPC_CORE_LIB_COMPRESSION_COMPRESSION_INTERNAL_H */
|
@@ -148,25 +148,25 @@ static int copy(grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
|
148
148
|
return 1;
|
149
149
|
}
|
150
150
|
|
151
|
-
static int compress_inner(
|
151
|
+
static int compress_inner(grpc_compression_algorithm algorithm,
|
152
152
|
grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
153
153
|
switch (algorithm) {
|
154
|
-
case
|
154
|
+
case GRPC_COMPRESS_NONE:
|
155
155
|
/* the fallback path always needs to be send uncompressed: we simply
|
156
156
|
rely on that here */
|
157
157
|
return 0;
|
158
|
-
case
|
158
|
+
case GRPC_COMPRESS_DEFLATE:
|
159
159
|
return zlib_compress(input, output, 0);
|
160
|
-
case
|
160
|
+
case GRPC_COMPRESS_GZIP:
|
161
161
|
return zlib_compress(input, output, 1);
|
162
|
-
case
|
162
|
+
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
163
163
|
break;
|
164
164
|
}
|
165
165
|
gpr_log(GPR_ERROR, "invalid compression algorithm %d", algorithm);
|
166
166
|
return 0;
|
167
167
|
}
|
168
168
|
|
169
|
-
int grpc_msg_compress(
|
169
|
+
int grpc_msg_compress(grpc_compression_algorithm algorithm,
|
170
170
|
grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
171
171
|
if (!compress_inner(algorithm, input, output)) {
|
172
172
|
copy(input, output);
|
@@ -175,16 +175,16 @@ int grpc_msg_compress(grpc_message_compression_algorithm algorithm,
|
|
175
175
|
return 1;
|
176
176
|
}
|
177
177
|
|
178
|
-
int grpc_msg_decompress(
|
178
|
+
int grpc_msg_decompress(grpc_compression_algorithm algorithm,
|
179
179
|
grpc_slice_buffer* input, grpc_slice_buffer* output) {
|
180
180
|
switch (algorithm) {
|
181
|
-
case
|
181
|
+
case GRPC_COMPRESS_NONE:
|
182
182
|
return copy(input, output);
|
183
|
-
case
|
183
|
+
case GRPC_COMPRESS_DEFLATE:
|
184
184
|
return zlib_decompress(input, output, 0);
|
185
|
-
case
|
185
|
+
case GRPC_COMPRESS_GZIP:
|
186
186
|
return zlib_decompress(input, output, 1);
|
187
|
-
case
|
187
|
+
case GRPC_COMPRESS_ALGORITHMS_COUNT:
|
188
188
|
break;
|
189
189
|
}
|
190
190
|
gpr_log(GPR_ERROR, "invalid compression algorithm %d", algorithm);
|
@@ -28,13 +28,13 @@
|
|
28
28
|
/* compress 'input' to 'output' using 'algorithm'.
|
29
29
|
On success, appends compressed slices to output and returns 1.
|
30
30
|
On failure, appends uncompressed slices to output and returns 0. */
|
31
|
-
int grpc_msg_compress(
|
31
|
+
int grpc_msg_compress(grpc_compression_algorithm algorithm,
|
32
32
|
grpc_slice_buffer* input, grpc_slice_buffer* output);
|
33
33
|
|
34
34
|
/* decompress 'input' to 'output' using 'algorithm'.
|
35
35
|
On success, appends slices to output and returns 1.
|
36
36
|
On failure, output is unchanged, and returns 0. */
|
37
|
-
int grpc_msg_decompress(
|
37
|
+
int grpc_msg_decompress(grpc_compression_algorithm algorithm,
|
38
38
|
grpc_slice_buffer* input, grpc_slice_buffer* output);
|
39
39
|
|
40
40
|
#endif /* GRPC_CORE_LIB_COMPRESSION_MESSAGE_COMPRESS_H */
|
data/src/core/lib/gpr/useful.h
CHANGED
@@ -106,6 +106,10 @@ constexpr size_t HashPointer(T* p, size_t range) {
|
|
106
106
|
range;
|
107
107
|
}
|
108
108
|
|
109
|
+
inline uint32_t MixHash32(uint32_t a, uint32_t b) {
|
110
|
+
return RotateLeft(a, 2u) ^ b;
|
111
|
+
}
|
112
|
+
|
109
113
|
} // namespace grpc_core
|
110
114
|
|
111
115
|
#define GPR_ARRAY_SIZE(array) (sizeof(array) / sizeof(*(array)))
|
data/src/core/lib/gprpp/bitset.h
CHANGED
@@ -146,6 +146,13 @@ class BitSet {
|
|
146
146
|
return count;
|
147
147
|
}
|
148
148
|
|
149
|
+
bool operator==(const BitSet& other) const {
|
150
|
+
for (size_t i = 0; i < kUnits; i++) {
|
151
|
+
if (units_[i] != other.units_[i]) return false;
|
152
|
+
}
|
153
|
+
return true;
|
154
|
+
}
|
155
|
+
|
149
156
|
private:
|
150
157
|
// Given a bit index, return which unit it's stored in.
|
151
158
|
static constexpr size_t unit_for(size_t bit) { return bit / kUnitBits; }
|