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
@@ -21,18 +21,48 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <grpc/slice.h>
|
25
|
-
#include <grpc/support/time.h>
|
26
|
-
|
27
|
-
#include "src/core/lib/gpr/string.h"
|
28
24
|
#include "src/core/lib/iomgr/exec_ctx.h"
|
25
|
+
#include "src/core/lib/slice/slice.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
class Timeout {
|
30
|
+
public:
|
31
|
+
static Timeout FromDuration(grpc_millis duration);
|
32
|
+
|
33
|
+
// Computes: 100 * ((this - other) / other)
|
34
|
+
double RatioVersus(Timeout other) const;
|
35
|
+
Slice Encode() const;
|
36
|
+
grpc_millis AsDuration() const;
|
37
|
+
|
38
|
+
private:
|
39
|
+
enum class Unit : uint8_t {
|
40
|
+
kNanoseconds,
|
41
|
+
kMilliseconds,
|
42
|
+
kTenMilliseconds,
|
43
|
+
kHundredMilliseconds,
|
44
|
+
kSeconds,
|
45
|
+
kTenSeconds,
|
46
|
+
kHundredSeconds,
|
47
|
+
kMinutes,
|
48
|
+
kTenMinutes,
|
49
|
+
kHundredMinutes,
|
50
|
+
kHours,
|
51
|
+
};
|
52
|
+
|
53
|
+
Timeout(uint16_t value, Unit unit) : value_(value), unit_(unit) {}
|
54
|
+
|
55
|
+
static Timeout FromMillis(int64_t millis);
|
56
|
+
static Timeout FromSeconds(int64_t seconds);
|
57
|
+
static Timeout FromMinutes(int64_t minutes);
|
58
|
+
static Timeout FromHours(int64_t hours);
|
59
|
+
|
60
|
+
uint16_t value_;
|
61
|
+
Unit unit_;
|
62
|
+
};
|
29
63
|
|
30
|
-
|
64
|
+
absl::optional<grpc_millis> ParseTimeout(const Slice& text);
|
31
65
|
|
32
|
-
|
33
|
-
encoding may round up arbitrarily. If the timeout is larger than about 1157
|
34
|
-
days, it will be capped and "99999999S" will be sent on the wire. */
|
35
|
-
void grpc_http2_encode_timeout(grpc_millis timeout, char* buffer);
|
36
|
-
int grpc_http2_decode_timeout(const grpc_slice& text, grpc_millis* timeout);
|
66
|
+
} // namespace grpc_core
|
37
67
|
|
38
68
|
#endif /* GRPC_CORE_LIB_TRANSPORT_TIMEOUT_ENCODING_H */
|
@@ -24,13 +24,13 @@
|
|
24
24
|
#include <stddef.h>
|
25
25
|
|
26
26
|
#include "src/core/lib/channel/context.h"
|
27
|
-
#include "src/core/lib/gprpp/arena.h"
|
28
27
|
#include "src/core/lib/gprpp/orphanable.h"
|
29
28
|
#include "src/core/lib/iomgr/call_combiner.h"
|
30
29
|
#include "src/core/lib/iomgr/endpoint.h"
|
31
30
|
#include "src/core/lib/iomgr/polling_entity.h"
|
32
31
|
#include "src/core/lib/iomgr/pollset.h"
|
33
32
|
#include "src/core/lib/iomgr/pollset_set.h"
|
33
|
+
#include "src/core/lib/resource_quota/arena.h"
|
34
34
|
#include "src/core/lib/slice/slice_internal.h"
|
35
35
|
#include "src/core/lib/transport/byte_stream.h"
|
36
36
|
#include "src/core/lib/transport/connectivity_state.h"
|
@@ -40,47 +40,14 @@
|
|
40
40
|
/* These routines are here to facilitate debugging - they produce string
|
41
41
|
representations of various transport data structures */
|
42
42
|
|
43
|
-
namespace {
|
44
|
-
class MetadataListEncoder {
|
45
|
-
public:
|
46
|
-
explicit MetadataListEncoder(std::vector<std::string>* out) : out_(out) {}
|
47
|
-
void Encode(const grpc_mdelem& md) {
|
48
|
-
MaybeAddComma();
|
49
|
-
out_->push_back("key=");
|
50
|
-
char* dump = grpc_dump_slice(GRPC_MDKEY(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
51
|
-
out_->push_back(dump);
|
52
|
-
gpr_free(dump);
|
53
|
-
out_->push_back(" value=");
|
54
|
-
dump = grpc_dump_slice(GRPC_MDVALUE(md), GPR_DUMP_HEX | GPR_DUMP_ASCII);
|
55
|
-
out_->push_back(dump);
|
56
|
-
gpr_free(dump);
|
57
|
-
}
|
58
|
-
|
59
|
-
void Encode(grpc_core::GrpcTimeoutMetadata, grpc_millis deadline) {
|
60
|
-
MaybeAddComma();
|
61
|
-
out_->push_back(absl::StrFormat("deadline=%" PRId64, deadline));
|
62
|
-
}
|
63
|
-
|
64
|
-
template <typename Which>
|
65
|
-
void Encode(Which, const typename Which::ValueType& value) {
|
66
|
-
MaybeAddComma();
|
67
|
-
out_->push_back(
|
68
|
-
absl::StrCat(Which::key(), "=", Which::DisplayValue(value)));
|
69
|
-
}
|
70
|
-
|
71
|
-
private:
|
72
|
-
void MaybeAddComma() {
|
73
|
-
if (out_->size() != initial_size_) out_->push_back(", ");
|
74
|
-
}
|
75
|
-
std::vector<std::string>* const out_;
|
76
|
-
const size_t initial_size_ = out_->size();
|
77
|
-
};
|
78
|
-
} // namespace
|
79
|
-
|
80
43
|
static void put_metadata_list(const grpc_metadata_batch& md,
|
81
44
|
std::vector<std::string>* out) {
|
82
|
-
|
83
|
-
md.
|
45
|
+
bool first = true;
|
46
|
+
md.Log([out, &first](absl::string_view key, absl::string_view value) {
|
47
|
+
if (!first) out->push_back(", ");
|
48
|
+
first = false;
|
49
|
+
out->push_back(absl::StrCat(key, "=", value));
|
50
|
+
});
|
84
51
|
}
|
85
52
|
|
86
53
|
std::string grpc_transport_stream_op_batch_string(
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2015 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#include <grpc/support/port_platform.h>
|
20
18
|
|
@@ -36,14 +34,127 @@
|
|
36
34
|
namespace grpc_core {
|
37
35
|
|
38
36
|
namespace {
|
39
|
-
|
37
|
+
|
38
|
+
// Returns true for any sub-delim character, as defined in:
|
39
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-2.2
|
40
|
+
bool IsSubDelimChar(char c) {
|
41
|
+
switch (c) {
|
42
|
+
case '!':
|
43
|
+
case '$':
|
44
|
+
case '&':
|
45
|
+
case '\'':
|
46
|
+
case '(':
|
47
|
+
case ')':
|
48
|
+
case '*':
|
49
|
+
case '+':
|
50
|
+
case ',':
|
51
|
+
case ';':
|
52
|
+
case '=':
|
53
|
+
return true;
|
54
|
+
}
|
55
|
+
return false;
|
56
|
+
}
|
57
|
+
|
58
|
+
// Returns true for any unreserved character, as defined in:
|
59
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-2.3
|
60
|
+
bool IsUnreservedChar(char c) {
|
61
|
+
if (absl::ascii_isalnum(c)) return true;
|
62
|
+
switch (c) {
|
63
|
+
case '-':
|
64
|
+
case '.':
|
65
|
+
case '_':
|
66
|
+
case '~':
|
67
|
+
return true;
|
68
|
+
}
|
69
|
+
return false;
|
70
|
+
}
|
71
|
+
|
72
|
+
// Returns true for any character in scheme, as defined in:
|
73
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-3.1
|
74
|
+
bool IsSchemeChar(char c) {
|
75
|
+
if (absl::ascii_isalnum(c)) return true;
|
76
|
+
switch (c) {
|
77
|
+
case '+':
|
78
|
+
case '-':
|
79
|
+
case '.':
|
80
|
+
return true;
|
81
|
+
}
|
82
|
+
return false;
|
83
|
+
}
|
84
|
+
|
85
|
+
// Returns true for any character in authority, as defined in:
|
86
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-3.2
|
87
|
+
bool IsAuthorityChar(char c) {
|
88
|
+
if (IsUnreservedChar(c)) return true;
|
89
|
+
if (IsSubDelimChar(c)) return true;
|
90
|
+
switch (c) {
|
91
|
+
case ':':
|
92
|
+
case '[':
|
93
|
+
case ']':
|
94
|
+
case '@':
|
95
|
+
return true;
|
96
|
+
}
|
97
|
+
return false;
|
98
|
+
}
|
99
|
+
|
100
|
+
// Returns true for any character in pchar, as defined in:
|
101
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-3.3
|
102
|
+
bool IsPChar(char c) {
|
103
|
+
if (IsUnreservedChar(c)) return true;
|
104
|
+
if (IsSubDelimChar(c)) return true;
|
105
|
+
switch (c) {
|
106
|
+
case ':':
|
107
|
+
case '@':
|
108
|
+
return true;
|
109
|
+
}
|
110
|
+
return false;
|
111
|
+
}
|
112
|
+
|
113
|
+
// Returns true for any character allowed in a URI path, as defined in:
|
114
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-3.3
|
115
|
+
bool IsPathChar(char c) { return IsPChar(c) || c == '/'; }
|
116
|
+
|
117
|
+
// Returns true for any character allowed in a URI query or fragment,
|
118
|
+
// as defined in:
|
40
119
|
// See https://tools.ietf.org/html/rfc3986#section-3.4
|
41
|
-
bool
|
42
|
-
return (
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
120
|
+
bool IsQueryOrFragmentChar(char c) {
|
121
|
+
return IsPChar(c) || c == '/' || c == '?';
|
122
|
+
}
|
123
|
+
|
124
|
+
// Same as IsQueryOrFragmentChar(), but excludes '&' and '='.
|
125
|
+
bool IsQueryKeyOrValueChar(char c) {
|
126
|
+
return c != '&' && c != '=' && IsQueryOrFragmentChar(c);
|
127
|
+
}
|
128
|
+
|
129
|
+
// Returns a copy of str, percent-encoding any character for which
|
130
|
+
// is_allowed_char() returns false.
|
131
|
+
std::string PercentEncode(absl::string_view str,
|
132
|
+
std::function<bool(char)> is_allowed_char) {
|
133
|
+
std::string out;
|
134
|
+
for (char c : str) {
|
135
|
+
if (!is_allowed_char(c)) {
|
136
|
+
std::string hex = absl::BytesToHexString(absl::string_view(&c, 1));
|
137
|
+
GPR_ASSERT(hex.size() == 2);
|
138
|
+
// BytesToHexString() returns lower case, but
|
139
|
+
// https://datatracker.ietf.org/doc/html/rfc3986#section-6.2.2.1 says
|
140
|
+
// to prefer upper-case.
|
141
|
+
absl::AsciiStrToUpper(&hex);
|
142
|
+
out.push_back('%');
|
143
|
+
out.append(hex);
|
144
|
+
} else {
|
145
|
+
out.push_back(c);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
return out;
|
149
|
+
}
|
150
|
+
|
151
|
+
// Checks if this string is made up of query/fragment chars and '%' exclusively.
|
152
|
+
// See https://tools.ietf.org/html/rfc3986#section-3.4
|
153
|
+
bool IsQueryOrFragmentString(absl::string_view str) {
|
154
|
+
for (char c : str) {
|
155
|
+
if (!IsQueryOrFragmentChar(c) && c != '%') return false;
|
156
|
+
}
|
157
|
+
return true;
|
47
158
|
}
|
48
159
|
|
49
160
|
absl::Status MakeInvalidURIStatus(absl::string_view part_name,
|
@@ -52,8 +163,13 @@ absl::Status MakeInvalidURIStatus(absl::string_view part_name,
|
|
52
163
|
return absl::InvalidArgumentError(absl::StrFormat(
|
53
164
|
"Could not parse '%s' from uri '%s'. %s", part_name, uri, extra));
|
54
165
|
}
|
166
|
+
|
55
167
|
} // namespace
|
56
168
|
|
169
|
+
std::string URI::PercentEncodePath(absl::string_view str) {
|
170
|
+
return PercentEncode(str, IsPathChar);
|
171
|
+
}
|
172
|
+
|
57
173
|
// Similar to `grpc_permissive_percent_decode_slice`, this %-decodes all valid
|
58
174
|
// triplets, and passes through the rest verbatim.
|
59
175
|
std::string URI::PercentDecode(absl::string_view str) {
|
@@ -65,18 +181,14 @@ std::string URI::PercentDecode(absl::string_view str) {
|
|
65
181
|
out.reserve(str.size());
|
66
182
|
for (size_t i = 0; i < str.length(); i++) {
|
67
183
|
unescaped = "";
|
68
|
-
if (str[i]
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
if (i + 3 >= str.length() ||
|
73
|
-
!absl::CUnescape(absl::StrCat("\\x", str.substr(i + 1, 2)),
|
74
|
-
&unescaped) ||
|
75
|
-
unescaped.length() > 1) {
|
76
|
-
out += str[i];
|
77
|
-
} else {
|
184
|
+
if (str[i] == '%' && i + 3 <= str.length() &&
|
185
|
+
absl::CUnescape(absl::StrCat("\\x", str.substr(i + 1, 2)),
|
186
|
+
&unescaped) &&
|
187
|
+
unescaped.length() == 1) {
|
78
188
|
out += unescaped[0];
|
79
189
|
i += 2;
|
190
|
+
} else {
|
191
|
+
out += str[i];
|
80
192
|
}
|
81
193
|
}
|
82
194
|
return out;
|
@@ -86,11 +198,11 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
|
|
86
198
|
absl::StatusOr<std::string> decoded;
|
87
199
|
absl::string_view remaining = uri_text;
|
88
200
|
// parse scheme
|
89
|
-
size_t
|
90
|
-
if (
|
201
|
+
size_t offset = remaining.find(':');
|
202
|
+
if (offset == remaining.npos || offset == 0) {
|
91
203
|
return MakeInvalidURIStatus("scheme", uri_text, "Scheme not found.");
|
92
204
|
}
|
93
|
-
std::string scheme(remaining.substr(0,
|
205
|
+
std::string scheme(remaining.substr(0, offset));
|
94
206
|
if (scheme.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
95
207
|
"abcdefghijklmnopqrstuvwxyz"
|
96
208
|
"0123456789+-.") != std::string::npos) {
|
@@ -102,30 +214,38 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
|
|
102
214
|
"scheme", uri_text,
|
103
215
|
"Scheme must begin with an alpha character [A-Za-z].");
|
104
216
|
}
|
105
|
-
remaining.remove_prefix(
|
217
|
+
remaining.remove_prefix(offset + 1);
|
106
218
|
// parse authority
|
107
219
|
std::string authority;
|
108
|
-
if (absl::
|
109
|
-
remaining.
|
110
|
-
authority =
|
111
|
-
|
112
|
-
|
220
|
+
if (absl::ConsumePrefix(&remaining, "//")) {
|
221
|
+
offset = remaining.find_first_of("/?#");
|
222
|
+
authority = PercentDecode(remaining.substr(0, offset));
|
223
|
+
if (offset == remaining.npos) {
|
224
|
+
remaining = "";
|
225
|
+
} else {
|
226
|
+
remaining.remove_prefix(offset);
|
227
|
+
}
|
113
228
|
}
|
114
229
|
// parse path
|
115
230
|
std::string path;
|
116
231
|
if (!remaining.empty()) {
|
117
|
-
|
118
|
-
remaining.
|
232
|
+
offset = remaining.find_first_of("?#");
|
233
|
+
path = PercentDecode(remaining.substr(0, offset));
|
234
|
+
if (offset == remaining.npos) {
|
235
|
+
remaining = "";
|
236
|
+
} else {
|
237
|
+
remaining.remove_prefix(offset);
|
238
|
+
}
|
119
239
|
}
|
120
240
|
// parse query
|
121
241
|
std::vector<QueryParam> query_param_pairs;
|
122
|
-
if (
|
123
|
-
remaining.
|
124
|
-
absl::string_view tmp_query = remaining.substr(0,
|
242
|
+
if (absl::ConsumePrefix(&remaining, "?")) {
|
243
|
+
offset = remaining.find('#');
|
244
|
+
absl::string_view tmp_query = remaining.substr(0, offset);
|
125
245
|
if (tmp_query.empty()) {
|
126
246
|
return MakeInvalidURIStatus("query", uri_text, "Invalid query string.");
|
127
247
|
}
|
128
|
-
if (!
|
248
|
+
if (!IsQueryOrFragmentString(tmp_query)) {
|
129
249
|
return MakeInvalidURIStatus("query string", uri_text,
|
130
250
|
"Query string contains invalid characters.");
|
131
251
|
}
|
@@ -136,12 +256,15 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
|
|
136
256
|
query_param_pairs.push_back({PercentDecode(possible_kv.first),
|
137
257
|
PercentDecode(possible_kv.second)});
|
138
258
|
}
|
139
|
-
remaining.
|
259
|
+
if (offset == remaining.npos) {
|
260
|
+
remaining = "";
|
261
|
+
} else {
|
262
|
+
remaining.remove_prefix(offset);
|
263
|
+
}
|
140
264
|
}
|
141
265
|
std::string fragment;
|
142
|
-
if (
|
143
|
-
remaining
|
144
|
-
if (!IsPCharString(remaining)) {
|
266
|
+
if (absl::ConsumePrefix(&remaining, "#")) {
|
267
|
+
if (!IsQueryOrFragmentString(remaining)) {
|
145
268
|
return MakeInvalidURIStatus("fragment", uri_text,
|
146
269
|
"Fragment contains invalid characters.");
|
147
270
|
}
|
@@ -151,6 +274,18 @@ absl::StatusOr<URI> URI::Parse(absl::string_view uri_text) {
|
|
151
274
|
std::move(query_param_pairs), std::move(fragment));
|
152
275
|
}
|
153
276
|
|
277
|
+
absl::StatusOr<URI> URI::Create(std::string scheme, std::string authority,
|
278
|
+
std::string path,
|
279
|
+
std::vector<QueryParam> query_parameter_pairs,
|
280
|
+
std::string fragment) {
|
281
|
+
if (!authority.empty() && !path.empty() && path[0] != '/') {
|
282
|
+
return absl::InvalidArgumentError(
|
283
|
+
"if authority is present, path must start with a '/'");
|
284
|
+
}
|
285
|
+
return URI(std::move(scheme), std::move(authority), std::move(path),
|
286
|
+
std::move(query_parameter_pairs), std::move(fragment));
|
287
|
+
}
|
288
|
+
|
154
289
|
URI::URI(std::string scheme, std::string authority, std::string path,
|
155
290
|
std::vector<QueryParam> query_parameter_pairs, std::string fragment)
|
156
291
|
: scheme_(std::move(scheme)),
|
@@ -188,4 +323,39 @@ URI& URI::operator=(const URI& other) {
|
|
188
323
|
}
|
189
324
|
return *this;
|
190
325
|
}
|
326
|
+
|
327
|
+
namespace {
|
328
|
+
|
329
|
+
// A pair formatter for use with absl::StrJoin() for formatting query params.
|
330
|
+
struct QueryParameterFormatter {
|
331
|
+
void operator()(std::string* out, const URI::QueryParam& query_param) const {
|
332
|
+
out->append(
|
333
|
+
absl::StrCat(PercentEncode(query_param.key, IsQueryKeyOrValueChar), "=",
|
334
|
+
PercentEncode(query_param.value, IsQueryKeyOrValueChar)));
|
335
|
+
}
|
336
|
+
};
|
337
|
+
|
338
|
+
} // namespace
|
339
|
+
|
340
|
+
std::string URI::ToString() const {
|
341
|
+
std::vector<std::string> parts = {PercentEncode(scheme_, IsSchemeChar), ":"};
|
342
|
+
if (!authority_.empty()) {
|
343
|
+
parts.emplace_back("//");
|
344
|
+
parts.emplace_back(PercentEncode(authority_, IsAuthorityChar));
|
345
|
+
}
|
346
|
+
if (!path_.empty()) {
|
347
|
+
parts.emplace_back(PercentEncode(path_, IsPathChar));
|
348
|
+
}
|
349
|
+
if (!query_parameter_pairs_.empty()) {
|
350
|
+
parts.push_back("?");
|
351
|
+
parts.push_back(
|
352
|
+
absl::StrJoin(query_parameter_pairs_, "&", QueryParameterFormatter()));
|
353
|
+
}
|
354
|
+
if (!fragment_.empty()) {
|
355
|
+
parts.push_back("#");
|
356
|
+
parts.push_back(PercentEncode(fragment_, IsQueryOrFragmentChar));
|
357
|
+
}
|
358
|
+
return absl::StrJoin(parts, "");
|
359
|
+
}
|
360
|
+
|
191
361
|
} // namespace grpc_core
|
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
*
|
17
|
-
*/
|
1
|
+
//
|
2
|
+
// Copyright 2015 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
18
16
|
|
19
17
|
#ifndef GRPC_CORE_LIB_URI_URI_PARSER_H
|
20
18
|
#define GRPC_CORE_LIB_URI_URI_PARSER_H
|
@@ -40,15 +38,23 @@ class URI {
|
|
40
38
|
bool operator==(const QueryParam& other) const {
|
41
39
|
return key == other.key && value == other.value;
|
42
40
|
}
|
41
|
+
bool operator<(const QueryParam& other) const {
|
42
|
+
int c = key.compare(other.key);
|
43
|
+
if (c != 0) return c < 0;
|
44
|
+
return value < other.value;
|
45
|
+
}
|
43
46
|
};
|
44
47
|
|
45
|
-
// Creates
|
46
|
-
//
|
48
|
+
// Creates a URI by parsing an rfc3986 URI string. Returns an
|
49
|
+
// InvalidArgumentError on failure.
|
47
50
|
static absl::StatusOr<URI> Parse(absl::string_view uri_text);
|
48
|
-
//
|
49
|
-
|
50
|
-
std::
|
51
|
+
// Creates a URI from components. Returns an InvalidArgumentError on failure.
|
52
|
+
static absl::StatusOr<URI> Create(
|
53
|
+
std::string scheme, std::string authority, std::string path,
|
54
|
+
std::vector<QueryParam> query_parameter_pairs, std::string fragment);
|
55
|
+
|
51
56
|
URI() = default;
|
57
|
+
|
52
58
|
// Copy construction and assignment
|
53
59
|
URI(const URI& other);
|
54
60
|
URI& operator=(const URI& other);
|
@@ -56,6 +62,8 @@ class URI {
|
|
56
62
|
URI(URI&&) = default;
|
57
63
|
URI& operator=(URI&&) = default;
|
58
64
|
|
65
|
+
static std::string PercentEncodePath(absl::string_view str);
|
66
|
+
|
59
67
|
static std::string PercentDecode(absl::string_view str);
|
60
68
|
|
61
69
|
const std::string& scheme() const { return scheme_; }
|
@@ -76,7 +84,12 @@ class URI {
|
|
76
84
|
}
|
77
85
|
const std::string& fragment() const { return fragment_; }
|
78
86
|
|
87
|
+
std::string ToString() const;
|
88
|
+
|
79
89
|
private:
|
90
|
+
URI(std::string scheme, std::string authority, std::string path,
|
91
|
+
std::vector<QueryParam> query_parameter_pairs, std::string fragment);
|
92
|
+
|
80
93
|
std::string scheme_;
|
81
94
|
std::string authority_;
|
82
95
|
std::string path_;
|
@@ -86,4 +99,4 @@ class URI {
|
|
86
99
|
};
|
87
100
|
} // namespace grpc_core
|
88
101
|
|
89
|
-
#endif
|
102
|
+
#endif // GRPC_CORE_LIB_URI_URI_PARSER_H
|
@@ -27,8 +27,6 @@ void grpc_chttp2_plugin_init(void);
|
|
27
27
|
void grpc_chttp2_plugin_shutdown(void);
|
28
28
|
void grpc_client_channel_init(void);
|
29
29
|
void grpc_client_channel_shutdown(void);
|
30
|
-
void grpc_inproc_plugin_init(void);
|
31
|
-
void grpc_inproc_plugin_shutdown(void);
|
32
30
|
void grpc_resolver_fake_init(void);
|
33
31
|
void grpc_resolver_fake_shutdown(void);
|
34
32
|
void grpc_lb_policy_grpclb_init(void);
|
@@ -64,6 +62,8 @@ void ServiceConfigParserShutdown(void);
|
|
64
62
|
|
65
63
|
#ifndef GRPC_NO_XDS
|
66
64
|
namespace grpc_core {
|
65
|
+
void RbacFilterInit(void);
|
66
|
+
void RbacFilterShutdown(void);
|
67
67
|
void XdsClientGlobalInit();
|
68
68
|
void XdsClientGlobalShutdown();
|
69
69
|
} // namespace grpc_core
|
@@ -99,7 +99,6 @@ void grpc_register_built_in_plugins(void) {
|
|
99
99
|
grpc_register_plugin(grpc_core::ServiceConfigParserInit,
|
100
100
|
grpc_core::ServiceConfigParserShutdown);
|
101
101
|
grpc_register_plugin(grpc_client_channel_init, grpc_client_channel_shutdown);
|
102
|
-
grpc_register_plugin(grpc_inproc_plugin_init, grpc_inproc_plugin_shutdown);
|
103
102
|
grpc_register_plugin(grpc_resolver_fake_init, grpc_resolver_fake_shutdown);
|
104
103
|
grpc_register_plugin(grpc_lb_policy_grpclb_init,
|
105
104
|
grpc_lb_policy_grpclb_shutdown);
|
@@ -128,6 +127,8 @@ void grpc_register_built_in_plugins(void) {
|
|
128
127
|
grpc_register_plugin(grpc_core::FaultInjectionFilterInit,
|
129
128
|
grpc_core::FaultInjectionFilterShutdown);
|
130
129
|
#ifndef GRPC_NO_XDS
|
130
|
+
// rbac_filter is being guarded with GRPC_NO_XDS to avoid a dependency on the re2 library by default
|
131
|
+
grpc_register_plugin(grpc_core::RbacFilterInit, grpc_core::RbacFilterShutdown);
|
131
132
|
grpc_register_plugin(grpc_core::XdsClientGlobalInit,
|
132
133
|
grpc_core::XdsClientGlobalShutdown);
|
133
134
|
grpc_register_plugin(grpc_certificate_provider_registry_init,
|
@@ -717,11 +717,11 @@ alts_handshaker_client* alts_grpc_handshaker_client_create(
|
|
717
717
|
channel, nullptr, GRPC_PROPAGATE_DEFAULTS, interested_parties,
|
718
718
|
grpc_slice_from_static_string(ALTS_SERVICE_METHOD), &slice,
|
719
719
|
GRPC_MILLIS_INF_FUTURE, nullptr);
|
720
|
+
grpc_slice_unref_internal(slice);
|
720
721
|
GRPC_CLOSURE_INIT(&client->on_handshaker_service_resp_recv, grpc_cb, client,
|
721
722
|
grpc_schedule_on_exec_ctx);
|
722
723
|
GRPC_CLOSURE_INIT(&client->on_status_received, on_status_received, client,
|
723
724
|
grpc_schedule_on_exec_ctx);
|
724
|
-
grpc_slice_unref_internal(slice);
|
725
725
|
return &client->base;
|
726
726
|
}
|
727
727
|
|
@@ -21,14 +21,12 @@
|
|
21
21
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
|
-
#include <
|
25
|
-
#include <grpc/support/sync.h>
|
24
|
+
#include <map>
|
26
25
|
|
27
|
-
extern "C" {
|
28
26
|
#include <openssl/ssl.h>
|
29
|
-
}
|
30
27
|
|
31
|
-
#include <
|
28
|
+
#include <grpc/slice.h>
|
29
|
+
#include <grpc/support/sync.h>
|
32
30
|
|
33
31
|
#include "src/core/lib/gprpp/memory.h"
|
34
32
|
#include "src/core/lib/gprpp/ref_counted.h"
|