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
@@ -26,10 +26,12 @@
|
|
26
26
|
#include "src/core/lib/iomgr/error.h"
|
27
27
|
#include "src/core/lib/slice/slice.h"
|
28
28
|
#include "src/core/lib/surface/validate_metadata.h"
|
29
|
-
#include "src/core/lib/transport/metadata.h"
|
30
29
|
|
31
30
|
namespace grpc_core {
|
32
31
|
|
32
|
+
using MetadataParseErrorFn =
|
33
|
+
absl::FunctionRef<void(absl::string_view error, const Slice& value)>;
|
34
|
+
|
33
35
|
namespace metadata_detail {
|
34
36
|
|
35
37
|
// Helper to determine whether a traits metadata is inlinable inside a memento,
|
@@ -38,15 +40,14 @@ template <typename Which>
|
|
38
40
|
struct HasSimpleMemento {
|
39
41
|
static constexpr bool value =
|
40
42
|
std::is_trivial<typename Which::MementoType>::value &&
|
41
|
-
sizeof(typename Which::MementoType) <= sizeof(
|
43
|
+
sizeof(typename Which::MementoType) <= sizeof(grpc_slice);
|
42
44
|
};
|
43
45
|
|
44
46
|
// Storage type for a single metadata entry.
|
45
47
|
union Buffer {
|
46
|
-
|
48
|
+
char trivial[sizeof(grpc_slice)];
|
47
49
|
void* pointer;
|
48
50
|
grpc_slice slice;
|
49
|
-
grpc_mdelem mdelem;
|
50
51
|
};
|
51
52
|
|
52
53
|
// Given a key and a value, concatenate together to make a debug string.
|
@@ -71,7 +72,9 @@ GPR_ATTRIBUTE_NOINLINE std::string MakeDebugStringPipeline(
|
|
71
72
|
// Extract a trivial field value from a Buffer - for MakeDebugStringPipeline.
|
72
73
|
template <typename Field>
|
73
74
|
Field FieldFromTrivial(const Buffer& value) {
|
74
|
-
|
75
|
+
Field x;
|
76
|
+
memcpy(&x, value.trivial, sizeof(x));
|
77
|
+
return x;
|
75
78
|
}
|
76
79
|
|
77
80
|
// Extract a pointer field value from a Buffer - for MakeDebugStringPipeline.
|
@@ -86,6 +89,9 @@ Slice SliceFromBuffer(const Buffer& buffer);
|
|
86
89
|
// Unref the grpc_slice part of a Buffer (assumes it is in fact a grpc_slice).
|
87
90
|
void DestroySliceValue(const Buffer& value);
|
88
91
|
|
92
|
+
// Destroy a trivial memento (empty function).
|
93
|
+
void DestroyTrivialMemento(const Buffer& value);
|
94
|
+
|
89
95
|
} // namespace metadata_detail
|
90
96
|
|
91
97
|
// A parsed metadata value.
|
@@ -107,7 +113,7 @@ class ParsedMetadata {
|
|
107
113
|
uint32_t transport_size)
|
108
114
|
: vtable_(ParsedMetadata::template TrivialTraitVTable<Which>()),
|
109
115
|
transport_size_(transport_size) {
|
110
|
-
value_.trivial
|
116
|
+
memcpy(value_.trivial, &value, sizeof(value));
|
111
117
|
}
|
112
118
|
template <typename Which>
|
113
119
|
ParsedMetadata(
|
@@ -129,13 +135,12 @@ class ParsedMetadata {
|
|
129
135
|
transport_size_(transport_size) {
|
130
136
|
value_.slice = value.TakeCSlice();
|
131
137
|
}
|
132
|
-
//
|
133
|
-
|
134
|
-
: vtable_(
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
value_.mdelem = elem;
|
138
|
+
// Construct metadata from a string key, slice value pair.
|
139
|
+
ParsedMetadata(Slice key, Slice value)
|
140
|
+
: vtable_(ParsedMetadata::KeyValueVTable(key.as_string_view())),
|
141
|
+
transport_size_(key.size() + value.size() + 32) {
|
142
|
+
value_.pointer =
|
143
|
+
new std::pair<Slice, Slice>(std::move(key), std::move(value));
|
139
144
|
}
|
140
145
|
ParsedMetadata() : vtable_(EmptyVTable()), transport_size_(0) {}
|
141
146
|
~ParsedMetadata() { vtable_->destroy(value_); }
|
@@ -158,9 +163,8 @@ class ParsedMetadata {
|
|
158
163
|
}
|
159
164
|
|
160
165
|
// Set this parsed value on a container.
|
161
|
-
|
162
|
-
|
163
|
-
return vtable_->set(value_, container);
|
166
|
+
void SetOnContainer(MetadataContainer* container) const {
|
167
|
+
vtable_->set(value_, container);
|
164
168
|
}
|
165
169
|
|
166
170
|
// Is this a binary header or not?
|
@@ -168,16 +172,18 @@ class ParsedMetadata {
|
|
168
172
|
// HTTP2 defined storage size of this metadatum.
|
169
173
|
uint32_t transport_size() const { return transport_size_; }
|
170
174
|
// Create a new parsed metadata with the same key but a different value.
|
171
|
-
ParsedMetadata WithNewValue(Slice value
|
175
|
+
ParsedMetadata WithNewValue(Slice value,
|
176
|
+
MetadataParseErrorFn on_error) const {
|
172
177
|
ParsedMetadata result;
|
173
178
|
result.vtable_ = vtable_;
|
174
179
|
result.value_ = value_;
|
175
180
|
result.transport_size_ =
|
176
|
-
TransportSize(vtable_->
|
177
|
-
vtable_->with_new_value(&value, &result);
|
181
|
+
TransportSize(vtable_->key(value_).length(), value.length());
|
182
|
+
vtable_->with_new_value(&value, on_error, &result);
|
178
183
|
return result;
|
179
184
|
}
|
180
185
|
std::string DebugString() const { return vtable_->debug_string(value_); }
|
186
|
+
absl::string_view key() const { return vtable_->key(value_); }
|
181
187
|
|
182
188
|
// TODO(ctiller): move to transport
|
183
189
|
static uint32_t TransportSize(uint32_t key_size, uint32_t value_size) {
|
@@ -191,29 +197,36 @@ class ParsedMetadata {
|
|
191
197
|
struct VTable {
|
192
198
|
const bool is_binary_header;
|
193
199
|
void (*const destroy)(const Buffer& value);
|
194
|
-
|
195
|
-
MetadataContainer* container);
|
200
|
+
void (*const set)(const Buffer& value, MetadataContainer* container);
|
196
201
|
// result is a bitwise copy of the originating ParsedMetadata.
|
197
|
-
void (*const with_new_value)(Slice* new_value,
|
202
|
+
void (*const with_new_value)(Slice* new_value,
|
203
|
+
MetadataParseErrorFn on_error,
|
204
|
+
ParsedMetadata* result);
|
198
205
|
std::string (*const debug_string)(const Buffer& value);
|
199
|
-
|
200
|
-
// on the vtable
|
201
|
-
size_t (*const key_length)(const Buffer& value);
|
206
|
+
absl::string_view (*const key)(const Buffer& value);
|
202
207
|
};
|
203
208
|
|
204
209
|
static const VTable* EmptyVTable();
|
210
|
+
static const VTable* KeyValueVTable(absl::string_view key);
|
205
211
|
template <typename Which>
|
206
212
|
static const VTable* TrivialTraitVTable();
|
207
213
|
template <typename Which>
|
208
214
|
static const VTable* NonTrivialTraitVTable();
|
209
215
|
template <typename Which>
|
210
216
|
static const VTable* SliceTraitVTable();
|
211
|
-
template <bool kIsBinaryHeader>
|
212
|
-
static const VTable* MdelemVtable();
|
213
217
|
|
214
|
-
template <Slice (*ParseMemento)(Slice)>
|
215
|
-
GPR_ATTRIBUTE_NOINLINE void WithNewValueSetSlice(
|
216
|
-
|
218
|
+
template <Slice (*ParseMemento)(Slice, MetadataParseErrorFn)>
|
219
|
+
GPR_ATTRIBUTE_NOINLINE static void WithNewValueSetSlice(
|
220
|
+
Slice* slice, MetadataParseErrorFn on_error, ParsedMetadata* result) {
|
221
|
+
result->value_.slice =
|
222
|
+
ParseMemento(std::move(*slice), on_error).TakeCSlice();
|
223
|
+
}
|
224
|
+
|
225
|
+
template <typename T, T (*ParseMemento)(Slice, MetadataParseErrorFn)>
|
226
|
+
GPR_ATTRIBUTE_NOINLINE static void WithNewValueSetTrivial(
|
227
|
+
Slice* slice, MetadataParseErrorFn on_error, ParsedMetadata* result) {
|
228
|
+
T memento = ParseMemento(std::move(*slice), on_error);
|
229
|
+
memcpy(result->value_.trivial, &memento, sizeof(memento));
|
217
230
|
}
|
218
231
|
|
219
232
|
const VTable* vtable_;
|
@@ -229,15 +242,15 @@ ParsedMetadata<MetadataContainer>::EmptyVTable() {
|
|
229
242
|
static const VTable vtable = {
|
230
243
|
false,
|
231
244
|
// destroy
|
232
|
-
|
245
|
+
metadata_detail::DestroyTrivialMemento,
|
233
246
|
// set
|
234
|
-
[](const Buffer&, MetadataContainer*) {
|
247
|
+
[](const Buffer&, MetadataContainer*) {},
|
235
248
|
// with_new_value
|
236
|
-
[](Slice*, ParsedMetadata*) {},
|
249
|
+
[](Slice*, MetadataParseErrorFn, ParsedMetadata*) {},
|
237
250
|
// debug_string
|
238
251
|
[](const Buffer&) -> std::string { return "empty"; },
|
239
|
-
//
|
240
|
-
[](const Buffer&) ->
|
252
|
+
// key
|
253
|
+
[](const Buffer&) -> absl::string_view { return ""; },
|
241
254
|
};
|
242
255
|
return &vtable;
|
243
256
|
}
|
@@ -249,18 +262,17 @@ ParsedMetadata<MetadataContainer>::TrivialTraitVTable() {
|
|
249
262
|
static const VTable vtable = {
|
250
263
|
absl::EndsWith(Which::key(), "-bin"),
|
251
264
|
// destroy
|
252
|
-
|
265
|
+
metadata_detail::DestroyTrivialMemento,
|
253
266
|
// set
|
254
267
|
[](const Buffer& value, MetadataContainer* map) {
|
255
|
-
map->Set(
|
256
|
-
|
257
|
-
|
258
|
-
|
268
|
+
map->Set(
|
269
|
+
Which(),
|
270
|
+
Which::MementoToValue(
|
271
|
+
metadata_detail::FieldFromTrivial<typename Which::MementoType>(
|
272
|
+
value)));
|
259
273
|
},
|
260
274
|
// with_new_value
|
261
|
-
|
262
|
-
result->value_.trivial = Which::ParseMemento(std::move(*value));
|
263
|
-
},
|
275
|
+
WithNewValueSetTrivial<typename Which::MementoType, Which::ParseMemento>,
|
264
276
|
// debug_string
|
265
277
|
[](const Buffer& value) {
|
266
278
|
return metadata_detail::MakeDebugStringPipeline(
|
@@ -268,8 +280,8 @@ ParsedMetadata<MetadataContainer>::TrivialTraitVTable() {
|
|
268
280
|
metadata_detail::FieldFromTrivial<typename Which::MementoType>,
|
269
281
|
Which::DisplayValue);
|
270
282
|
},
|
271
|
-
//
|
272
|
-
[](const Buffer&) { return Which::key()
|
283
|
+
// key
|
284
|
+
[](const Buffer&) { return Which::key(); },
|
273
285
|
};
|
274
286
|
return &vtable;
|
275
287
|
}
|
@@ -288,12 +300,11 @@ ParsedMetadata<MetadataContainer>::NonTrivialTraitVTable() {
|
|
288
300
|
[](const Buffer& value, MetadataContainer* map) {
|
289
301
|
auto* p = static_cast<typename Which::MementoType*>(value.pointer);
|
290
302
|
map->Set(Which(), Which::MementoToValue(*p));
|
291
|
-
return GRPC_ERROR_NONE;
|
292
303
|
},
|
293
304
|
// with_new_value
|
294
|
-
[](Slice* value, ParsedMetadata* result) {
|
295
|
-
result->value_.pointer = new
|
296
|
-
|
305
|
+
[](Slice* value, MetadataParseErrorFn on_error, ParsedMetadata* result) {
|
306
|
+
result->value_.pointer = new typename Which::MementoType(
|
307
|
+
Which::ParseMemento(std::move(*value), on_error));
|
297
308
|
},
|
298
309
|
// debug_string
|
299
310
|
[](const Buffer& value) {
|
@@ -302,8 +313,8 @@ ParsedMetadata<MetadataContainer>::NonTrivialTraitVTable() {
|
|
302
313
|
metadata_detail::FieldFromPointer<typename Which::MementoType>,
|
303
314
|
Which::DisplayValue);
|
304
315
|
},
|
305
|
-
//
|
306
|
-
[](const Buffer&) { return Which::key()
|
316
|
+
// key
|
317
|
+
[](const Buffer&) { return Which::key(); },
|
307
318
|
};
|
308
319
|
return &vtable;
|
309
320
|
}
|
@@ -320,61 +331,53 @@ ParsedMetadata<MetadataContainer>::SliceTraitVTable() {
|
|
320
331
|
[](const Buffer& value, MetadataContainer* map) {
|
321
332
|
map->Set(Which(), Which::MementoToValue(
|
322
333
|
metadata_detail::SliceFromBuffer(value)));
|
323
|
-
return GRPC_ERROR_NONE;
|
324
334
|
},
|
325
335
|
// with_new_value
|
326
|
-
|
327
|
-
result->WithNewValueSetSlice<Which::ParseMemento>(value);
|
328
|
-
},
|
336
|
+
WithNewValueSetSlice<Which::ParseMemento>,
|
329
337
|
// debug_string
|
330
338
|
[](const Buffer& value) {
|
331
339
|
return metadata_detail::MakeDebugStringPipeline(
|
332
340
|
Which::key(), value, metadata_detail::SliceFromBuffer,
|
333
341
|
Which::DisplayValue);
|
334
342
|
},
|
335
|
-
//
|
336
|
-
[](const Buffer&) { return Which::key()
|
343
|
+
// key
|
344
|
+
[](const Buffer&) { return Which::key(); },
|
337
345
|
};
|
338
346
|
return &vtable;
|
339
347
|
}
|
340
348
|
|
341
349
|
template <typename MetadataContainer>
|
342
|
-
template <bool kIsBinaryHeader>
|
343
350
|
const typename ParsedMetadata<MetadataContainer>::VTable*
|
344
|
-
ParsedMetadata<MetadataContainer>::
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
[](const Buffer& value) {
|
375
|
-
return GRPC_SLICE_LENGTH(GRPC_MDKEY(value.mdelem));
|
376
|
-
}};
|
377
|
-
return &vtable;
|
351
|
+
ParsedMetadata<MetadataContainer>::KeyValueVTable(absl::string_view key) {
|
352
|
+
using KV = std::pair<Slice, Slice>;
|
353
|
+
static const auto destroy = [](const Buffer& value) {
|
354
|
+
delete static_cast<KV*>(value.pointer);
|
355
|
+
};
|
356
|
+
static const auto set = [](const Buffer& value, MetadataContainer* map) {
|
357
|
+
auto* p = static_cast<KV*>(value.pointer);
|
358
|
+
map->AppendUnknown(p->first.as_string_view(), p->second.Ref());
|
359
|
+
};
|
360
|
+
static const auto with_new_value = [](Slice* value, MetadataParseErrorFn,
|
361
|
+
ParsedMetadata* result) {
|
362
|
+
auto* p = new KV{
|
363
|
+
static_cast<KV*>(result->value_.pointer)->first.Ref(),
|
364
|
+
std::move(*value),
|
365
|
+
};
|
366
|
+
result->value_.pointer = p;
|
367
|
+
};
|
368
|
+
static const auto debug_string = [](const Buffer& value) {
|
369
|
+
auto* p = static_cast<KV*>(value.pointer);
|
370
|
+
return absl::StrCat(p->first.as_string_view(), ": ",
|
371
|
+
p->second.as_string_view());
|
372
|
+
};
|
373
|
+
static const auto key_fn = [](const Buffer& value) {
|
374
|
+
return static_cast<KV*>(value.pointer)->first.as_string_view();
|
375
|
+
};
|
376
|
+
static const VTable vtable[2] = {
|
377
|
+
{false, destroy, set, with_new_value, debug_string, key_fn},
|
378
|
+
{true, destroy, set, with_new_value, debug_string, key_fn},
|
379
|
+
};
|
380
|
+
return &vtable[absl::EndsWith(key, "-bin")];
|
378
381
|
}
|
379
382
|
|
380
383
|
} // namespace grpc_core
|
@@ -23,83 +23,215 @@
|
|
23
23
|
#include <stdio.h>
|
24
24
|
#include <string.h>
|
25
25
|
|
26
|
+
#include <grpc/support/log.h>
|
27
|
+
|
26
28
|
#include "src/core/lib/gpr/string.h"
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
+
namespace grpc_core {
|
31
|
+
|
32
|
+
namespace {
|
33
|
+
|
34
|
+
int64_t DivideRoundingUp(int64_t dividend, int64_t divisor) {
|
35
|
+
return (dividend + divisor - 1) / divisor;
|
30
36
|
}
|
31
37
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
if (x < 1000000000) return round_up(x, 1000000);
|
41
|
-
return round_up(x, 10000000);
|
38
|
+
constexpr int64_t kSecondsPerMinute = 60;
|
39
|
+
constexpr int64_t kMinutesPerHour = 60;
|
40
|
+
constexpr int64_t kSecondsPerHour = kSecondsPerMinute * kMinutesPerHour;
|
41
|
+
constexpr int64_t kMaxHours = 27000;
|
42
|
+
|
43
|
+
bool IsAllSpace(const uint8_t* p, const uint8_t* end) {
|
44
|
+
while (p != end && *p == ' ') p++;
|
45
|
+
return p == end;
|
42
46
|
}
|
43
47
|
|
44
|
-
|
45
|
-
static void enc_tiny(char* buffer) { memcpy(buffer, "1n", 3); }
|
48
|
+
} // namespace
|
46
49
|
|
47
|
-
|
48
|
-
|
50
|
+
Timeout Timeout::FromDuration(grpc_millis duration) {
|
51
|
+
return Timeout::FromMillis(duration);
|
52
|
+
}
|
49
53
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
+
double Timeout::RatioVersus(Timeout other) const {
|
55
|
+
double a = AsDuration();
|
56
|
+
double b = other.AsDuration();
|
57
|
+
if (b == 0) {
|
58
|
+
if (a > 0) return 100;
|
59
|
+
if (a < 0) return -100;
|
60
|
+
return 0;
|
61
|
+
}
|
62
|
+
return 100 * (a / b - 1);
|
54
63
|
}
|
55
64
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
65
|
+
grpc_millis Timeout::AsDuration() const {
|
66
|
+
grpc_millis value = value_;
|
67
|
+
switch (unit_) {
|
68
|
+
case Unit::kNanoseconds:
|
69
|
+
return 0;
|
70
|
+
case Unit::kMilliseconds:
|
71
|
+
return value;
|
72
|
+
case Unit::kTenMilliseconds:
|
73
|
+
return value * 10;
|
74
|
+
case Unit::kHundredMilliseconds:
|
75
|
+
return value * 100;
|
76
|
+
case Unit::kSeconds:
|
77
|
+
return value * 1000;
|
78
|
+
case Unit::kTenSeconds:
|
79
|
+
return value * 10000;
|
80
|
+
case Unit::kHundredSeconds:
|
81
|
+
return value * 100000;
|
82
|
+
case Unit::kMinutes:
|
83
|
+
return value * 1000 * kSecondsPerMinute;
|
84
|
+
case Unit::kTenMinutes:
|
85
|
+
return value * 10000 * kSecondsPerMinute;
|
86
|
+
case Unit::kHundredMinutes:
|
87
|
+
return value * 100000 * kSecondsPerMinute;
|
88
|
+
case Unit::kHours:
|
89
|
+
return value * 1000 * kSecondsPerHour;
|
64
90
|
}
|
91
|
+
GPR_UNREACHABLE_CODE(return -1);
|
65
92
|
}
|
66
93
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
94
|
+
Slice Timeout::Encode() const {
|
95
|
+
char buf[10];
|
96
|
+
char* p = buf;
|
97
|
+
uint16_t n = value_;
|
98
|
+
int digits;
|
99
|
+
if (n >= 10000) {
|
100
|
+
digits = 5;
|
101
|
+
} else if (n >= 1000) {
|
102
|
+
digits = 4;
|
103
|
+
} else if (n >= 100) {
|
104
|
+
digits = 3;
|
105
|
+
} else if (n >= 10) {
|
106
|
+
digits = 2;
|
71
107
|
} else {
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
108
|
+
digits = 1;
|
109
|
+
}
|
110
|
+
switch (digits) {
|
111
|
+
case 5:
|
112
|
+
*p++ = '0' + n / 10000;
|
113
|
+
n %= 10000;
|
114
|
+
ABSL_FALLTHROUGH_INTENDED;
|
115
|
+
case 4:
|
116
|
+
*p++ = '0' + n / 1000;
|
117
|
+
n %= 1000;
|
118
|
+
ABSL_FALLTHROUGH_INTENDED;
|
119
|
+
case 3:
|
120
|
+
*p++ = '0' + n / 100;
|
121
|
+
n %= 100;
|
122
|
+
ABSL_FALLTHROUGH_INTENDED;
|
123
|
+
case 2:
|
124
|
+
*p++ = '0' + n / 10;
|
125
|
+
n %= 10;
|
126
|
+
ABSL_FALLTHROUGH_INTENDED;
|
127
|
+
case 1:
|
128
|
+
*p++ = '0' + n;
|
129
|
+
}
|
130
|
+
switch (unit_) {
|
131
|
+
case Unit::kNanoseconds:
|
132
|
+
*p++ = 'n';
|
133
|
+
break;
|
134
|
+
case Unit::kHundredMilliseconds:
|
135
|
+
*p++ = '0';
|
136
|
+
ABSL_FALLTHROUGH_INTENDED;
|
137
|
+
case Unit::kTenMilliseconds:
|
138
|
+
*p++ = '0';
|
139
|
+
ABSL_FALLTHROUGH_INTENDED;
|
140
|
+
case Unit::kMilliseconds:
|
141
|
+
*p++ = 'm';
|
142
|
+
break;
|
143
|
+
case Unit::kHundredSeconds:
|
144
|
+
*p++ = '0';
|
145
|
+
ABSL_FALLTHROUGH_INTENDED;
|
146
|
+
case Unit::kTenSeconds:
|
147
|
+
*p++ = '0';
|
148
|
+
ABSL_FALLTHROUGH_INTENDED;
|
149
|
+
case Unit::kSeconds:
|
150
|
+
*p++ = 'S';
|
151
|
+
break;
|
152
|
+
case Unit::kHundredMinutes:
|
153
|
+
*p++ = '0';
|
154
|
+
ABSL_FALLTHROUGH_INTENDED;
|
155
|
+
case Unit::kTenMinutes:
|
156
|
+
*p++ = '0';
|
157
|
+
ABSL_FALLTHROUGH_INTENDED;
|
158
|
+
case Unit::kMinutes:
|
159
|
+
*p++ = 'M';
|
160
|
+
break;
|
161
|
+
case Unit::kHours:
|
162
|
+
*p++ = 'H';
|
163
|
+
break;
|
164
|
+
}
|
165
|
+
return Slice::FromCopiedBuffer(buf, p - buf);
|
166
|
+
}
|
167
|
+
|
168
|
+
Timeout Timeout::FromMillis(int64_t millis) {
|
169
|
+
if (millis <= 0) {
|
170
|
+
return Timeout(1, Unit::kNanoseconds);
|
171
|
+
} else if (millis < 1000) {
|
172
|
+
return Timeout(millis, Unit::kMilliseconds);
|
173
|
+
} else if (millis < 10000) {
|
174
|
+
int64_t value = DivideRoundingUp(millis, 10);
|
175
|
+
if (value % 100 != 0) return Timeout(value, Unit::kTenMilliseconds);
|
176
|
+
} else if (millis < 100000) {
|
177
|
+
int64_t value = DivideRoundingUp(millis, 100);
|
178
|
+
if (value % 10 != 0) return Timeout(value, Unit::kHundredMilliseconds);
|
179
|
+
}
|
180
|
+
return Timeout::FromSeconds(DivideRoundingUp(millis, 1000));
|
181
|
+
}
|
182
|
+
|
183
|
+
Timeout Timeout::FromSeconds(int64_t seconds) {
|
184
|
+
GPR_DEBUG_ASSERT(seconds != 0);
|
185
|
+
if (seconds < 1000) {
|
186
|
+
if (seconds % kSecondsPerMinute != 0) {
|
187
|
+
return Timeout(seconds, Unit::kSeconds);
|
188
|
+
}
|
189
|
+
} else if (seconds < 10000) {
|
190
|
+
int64_t value = DivideRoundingUp(seconds, 10);
|
191
|
+
if ((value * 10) % kSecondsPerMinute != 0) {
|
192
|
+
return Timeout(value, Unit::kTenSeconds);
|
193
|
+
}
|
194
|
+
} else if (seconds < 100000) {
|
195
|
+
int64_t value = DivideRoundingUp(seconds, 100);
|
196
|
+
if ((value * 100) % kSecondsPerMinute != 0) {
|
197
|
+
return Timeout(value, Unit::kHundredSeconds);
|
76
198
|
}
|
77
199
|
}
|
200
|
+
return Timeout::FromMinutes(DivideRoundingUp(seconds, kSecondsPerMinute));
|
78
201
|
}
|
79
202
|
|
80
|
-
|
81
|
-
|
82
|
-
if (
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
} else if (
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
203
|
+
Timeout Timeout::FromMinutes(int64_t minutes) {
|
204
|
+
GPR_DEBUG_ASSERT(minutes != 0);
|
205
|
+
if (minutes < 1000) {
|
206
|
+
if (minutes % kMinutesPerHour != 0) {
|
207
|
+
return Timeout(minutes, Unit::kMinutes);
|
208
|
+
}
|
209
|
+
} else if (minutes < 10000) {
|
210
|
+
int64_t value = DivideRoundingUp(minutes, 10);
|
211
|
+
if ((value * 10) % kMinutesPerHour != 0) {
|
212
|
+
return Timeout(value, Unit::kTenMinutes);
|
213
|
+
}
|
214
|
+
} else if (minutes < 100000) {
|
215
|
+
int64_t value = DivideRoundingUp(minutes, 100);
|
216
|
+
if ((value * 100) % kMinutesPerHour != 0) {
|
217
|
+
return Timeout(value, Unit::kHundredMinutes);
|
218
|
+
}
|
91
219
|
}
|
220
|
+
return Timeout::FromHours(DivideRoundingUp(minutes, kMinutesPerHour));
|
92
221
|
}
|
93
222
|
|
94
|
-
|
95
|
-
|
96
|
-
|
223
|
+
Timeout Timeout::FromHours(int64_t hours) {
|
224
|
+
GPR_DEBUG_ASSERT(hours != 0);
|
225
|
+
if (hours < kMaxHours) {
|
226
|
+
return Timeout(hours, Unit::kHours);
|
227
|
+
}
|
228
|
+
return Timeout(kMaxHours, Unit::kHours);
|
97
229
|
}
|
98
230
|
|
99
|
-
|
231
|
+
absl::optional<grpc_millis> ParseTimeout(const Slice& text) {
|
100
232
|
grpc_millis x = 0;
|
101
|
-
const uint8_t* p =
|
102
|
-
const uint8_t* end =
|
233
|
+
const uint8_t* p = text.begin();
|
234
|
+
const uint8_t* end = text.end();
|
103
235
|
int have_digit = 0;
|
104
236
|
/* skip whitespace */
|
105
237
|
for (; p != end && *p == ' '; p++) {
|
@@ -111,41 +243,43 @@ int grpc_http2_decode_timeout(const grpc_slice& text, grpc_millis* timeout) {
|
|
111
243
|
/* spec allows max. 8 digits, but we allow values up to 1,000,000,000 */
|
112
244
|
if (x >= (100 * 1000 * 1000)) {
|
113
245
|
if (x != (100 * 1000 * 1000) || digit != 0) {
|
114
|
-
|
115
|
-
return 1;
|
246
|
+
return GRPC_MILLIS_INF_FUTURE;
|
116
247
|
}
|
117
248
|
}
|
118
249
|
x = x * 10 + digit;
|
119
250
|
}
|
120
|
-
if (!have_digit) return
|
251
|
+
if (!have_digit) return absl::nullopt;
|
121
252
|
/* skip whitespace */
|
122
253
|
for (; p != end && *p == ' '; p++) {
|
123
254
|
}
|
124
|
-
if (p == end) return
|
255
|
+
if (p == end) return absl::nullopt;
|
125
256
|
/* decode unit specifier */
|
257
|
+
int64_t timeout;
|
126
258
|
switch (*p) {
|
127
259
|
case 'n':
|
128
|
-
|
260
|
+
timeout = x / GPR_NS_PER_MS + (x % GPR_NS_PER_MS != 0);
|
129
261
|
break;
|
130
262
|
case 'u':
|
131
|
-
|
263
|
+
timeout = x / GPR_US_PER_MS + (x % GPR_US_PER_MS != 0);
|
132
264
|
break;
|
133
265
|
case 'm':
|
134
|
-
|
266
|
+
timeout = x;
|
135
267
|
break;
|
136
268
|
case 'S':
|
137
|
-
|
269
|
+
timeout = x * GPR_MS_PER_SEC;
|
138
270
|
break;
|
139
271
|
case 'M':
|
140
|
-
|
272
|
+
timeout = x * 60 * GPR_MS_PER_SEC;
|
141
273
|
break;
|
142
274
|
case 'H':
|
143
|
-
|
275
|
+
timeout = x * 60 * 60 * GPR_MS_PER_SEC;
|
144
276
|
break;
|
145
277
|
default:
|
146
|
-
return
|
278
|
+
return absl::nullopt;
|
147
279
|
}
|
148
280
|
p++;
|
149
|
-
|
150
|
-
|
281
|
+
if (!IsAllSpace(p, end)) return absl::nullopt;
|
282
|
+
return timeout;
|
151
283
|
}
|
284
|
+
|
285
|
+
} // namespace grpc_core
|