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
@@ -28,53 +28,115 @@
|
|
28
28
|
#include "absl/strings/str_join.h"
|
29
29
|
#include "absl/strings/string_view.h"
|
30
30
|
|
31
|
+
#include <grpc/grpc_security.h>
|
32
|
+
|
31
33
|
#include "src/core/ext/xds/certificate_provider_registry.h"
|
32
34
|
#include "src/core/ext/xds/xds_api.h"
|
35
|
+
#include "src/core/ext/xds/xds_channel_creds.h"
|
36
|
+
#include "src/core/lib/gpr/env.h"
|
33
37
|
#include "src/core/lib/gpr/string.h"
|
34
38
|
#include "src/core/lib/iomgr/load_file.h"
|
39
|
+
#include "src/core/lib/json/json_util.h"
|
35
40
|
#include "src/core/lib/security/credentials/credentials.h"
|
36
41
|
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
|
37
42
|
#include "src/core/lib/slice/slice_internal.h"
|
38
43
|
|
39
44
|
namespace grpc_core {
|
40
45
|
|
41
|
-
|
42
|
-
// XdsChannelCredsRegistry
|
43
|
-
//
|
46
|
+
namespace {
|
44
47
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
+
// TODO(donnadionne): check to see if federation is enabled, this will be
|
49
|
+
// removed once federation is fully integrated and enabled by default.
|
50
|
+
bool XdsFederationEnabled() {
|
51
|
+
char* value = gpr_getenv("GRPC_EXPERIMENTAL_XDS_FEDERATION");
|
52
|
+
bool parsed_value;
|
53
|
+
bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
|
54
|
+
gpr_free(value);
|
55
|
+
return parse_succeeded && parsed_value;
|
48
56
|
}
|
49
57
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
58
|
+
grpc_error_handle ParseChannelCreds(const Json::Object& json, size_t idx,
|
59
|
+
XdsBootstrap::XdsServer* server) {
|
60
|
+
std::vector<grpc_error_handle> error_list;
|
61
|
+
std::string type;
|
62
|
+
ParseJsonObjectField(json, "type", &type, &error_list);
|
63
|
+
const Json::Object* config_ptr = nullptr;
|
64
|
+
ParseJsonObjectField(json, "config", &config_ptr, &error_list,
|
65
|
+
/*required=*/false);
|
66
|
+
// Select the first channel creds type that we support.
|
67
|
+
if (server->channel_creds_type.empty() &&
|
68
|
+
XdsChannelCredsRegistry::IsSupported(type)) {
|
69
|
+
Json config;
|
70
|
+
if (config_ptr != nullptr) config = *config_ptr;
|
71
|
+
if (!XdsChannelCredsRegistry::IsValidConfig(type, config)) {
|
72
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
|
73
|
+
"invalid config for channel creds type \"", type, "\"")));
|
74
|
+
}
|
75
|
+
server->channel_creds_type = std::move(type);
|
76
|
+
server->channel_creds_config = std::move(config);
|
77
|
+
}
|
78
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
|
79
|
+
absl::StrCat("errors parsing index ", idx), &error_list);
|
56
80
|
}
|
57
81
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
82
|
+
grpc_error_handle ParseChannelCredsArray(const Json::Array& json,
|
83
|
+
XdsBootstrap::XdsServer* server) {
|
84
|
+
std::vector<grpc_error_handle> error_list;
|
85
|
+
for (size_t i = 0; i < json.size(); ++i) {
|
86
|
+
const Json& child = json.at(i);
|
87
|
+
if (child.type() != Json::Type::OBJECT) {
|
88
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
89
|
+
absl::StrCat("array element ", i, " is not an object")));
|
90
|
+
} else {
|
91
|
+
grpc_error_handle parse_error =
|
92
|
+
ParseChannelCreds(child.object_value(), i, server);
|
93
|
+
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
94
|
+
}
|
70
95
|
}
|
71
|
-
|
96
|
+
if (server->channel_creds_type.empty()) {
|
97
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
98
|
+
"no known creds type found in \"channel_creds\""));
|
99
|
+
}
|
100
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"channel_creds\" array",
|
101
|
+
&error_list);
|
72
102
|
}
|
73
103
|
|
104
|
+
} // namespace
|
105
|
+
|
74
106
|
//
|
75
107
|
// XdsBootstrap::XdsServer
|
76
108
|
//
|
77
109
|
|
110
|
+
XdsBootstrap::XdsServer XdsBootstrap::XdsServer::Parse(
|
111
|
+
const Json& json, grpc_error_handle* error) {
|
112
|
+
std::vector<grpc_error_handle> error_list;
|
113
|
+
XdsServer server;
|
114
|
+
ParseJsonObjectField(json.object_value(), "server_uri", &server.server_uri,
|
115
|
+
&error_list);
|
116
|
+
const Json::Array* creds_array = nullptr;
|
117
|
+
ParseJsonObjectField(json.object_value(), "channel_creds", &creds_array,
|
118
|
+
&error_list);
|
119
|
+
if (creds_array != nullptr) {
|
120
|
+
grpc_error_handle parse_error =
|
121
|
+
ParseChannelCredsArray(*creds_array, &server);
|
122
|
+
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
123
|
+
}
|
124
|
+
const Json::Array* server_features_array = nullptr;
|
125
|
+
ParseJsonObjectField(json.object_value(), "server_features",
|
126
|
+
&server_features_array, &error_list, /*required=*/false);
|
127
|
+
if (server_features_array != nullptr) {
|
128
|
+
for (const Json& feature_json : *server_features_array) {
|
129
|
+
if (feature_json.type() == Json::Type::STRING &&
|
130
|
+
feature_json.string_value() == "xds_v3") {
|
131
|
+
server.server_features.insert(feature_json.string_value());
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
135
|
+
*error = GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
|
136
|
+
"errors parsing xds server", &error_list);
|
137
|
+
return server;
|
138
|
+
}
|
139
|
+
|
78
140
|
bool XdsBootstrap::XdsServer::ShouldUseV3() const {
|
79
141
|
return server_features.find("xds_v3") != server_features.end();
|
80
142
|
}
|
@@ -112,7 +174,7 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error_handle* error) {
|
|
112
174
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
113
175
|
"\"xds_servers\" field is not an array"));
|
114
176
|
} else {
|
115
|
-
grpc_error_handle parse_error = ParseXdsServerList(&it->second);
|
177
|
+
grpc_error_handle parse_error = ParseXdsServerList(&it->second, &servers_);
|
116
178
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
117
179
|
}
|
118
180
|
it = json.mutable_object()->find("node");
|
@@ -125,6 +187,30 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error_handle* error) {
|
|
125
187
|
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
126
188
|
}
|
127
189
|
}
|
190
|
+
if (XdsFederationEnabled()) {
|
191
|
+
it = json.mutable_object()->find("authorities");
|
192
|
+
if (it != json.mutable_object()->end()) {
|
193
|
+
if (it->second.type() != Json::Type::OBJECT) {
|
194
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
195
|
+
"\"authorities\" field is not an object"));
|
196
|
+
} else {
|
197
|
+
grpc_error_handle parse_error = ParseAuthorities(&it->second);
|
198
|
+
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
199
|
+
}
|
200
|
+
}
|
201
|
+
it = json.mutable_object()->find(
|
202
|
+
"client_default_listener_resource_name_template");
|
203
|
+
if (it != json.mutable_object()->end()) {
|
204
|
+
if (it->second.type() != Json::Type::STRING) {
|
205
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
206
|
+
"\"client_default_listener_resource_name_template\" field is not a "
|
207
|
+
"string"));
|
208
|
+
} else {
|
209
|
+
client_default_listener_resource_name_template_ =
|
210
|
+
std::move(*it->second.mutable_string_value());
|
211
|
+
}
|
212
|
+
}
|
213
|
+
}
|
128
214
|
it = json.mutable_object()->find("server_listener_resource_name_template");
|
129
215
|
if (it != json.mutable_object()->end()) {
|
130
216
|
if (it->second.type() != Json::Type::STRING) {
|
@@ -149,7 +235,17 @@ XdsBootstrap::XdsBootstrap(Json json, grpc_error_handle* error) {
|
|
149
235
|
&error_list);
|
150
236
|
}
|
151
237
|
|
152
|
-
|
238
|
+
const XdsBootstrap::Authority* XdsBootstrap::LookupAuthority(
|
239
|
+
const std::string& name) const {
|
240
|
+
auto it = authorities_.find(name);
|
241
|
+
if (it != authorities_.end()) {
|
242
|
+
return &it->second;
|
243
|
+
}
|
244
|
+
return nullptr;
|
245
|
+
}
|
246
|
+
|
247
|
+
grpc_error_handle XdsBootstrap::ParseXdsServerList(
|
248
|
+
Json* json, absl::InlinedVector<XdsServer, 1>* servers) {
|
153
249
|
std::vector<grpc_error_handle> error_list;
|
154
250
|
for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
|
155
251
|
Json& child = json->mutable_array()->at(i);
|
@@ -157,126 +253,73 @@ grpc_error_handle XdsBootstrap::ParseXdsServerList(Json* json) {
|
|
157
253
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
158
254
|
absl::StrCat("array element ", i, " is not an object")));
|
159
255
|
} else {
|
160
|
-
grpc_error_handle parse_error
|
161
|
-
|
256
|
+
grpc_error_handle parse_error;
|
257
|
+
servers->emplace_back(XdsServer::Parse(child, &parse_error));
|
258
|
+
if (parse_error != GRPC_ERROR_NONE) {
|
259
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
260
|
+
absl::StrCat("errors parsing index ", i)));
|
261
|
+
error_list.push_back(parse_error);
|
262
|
+
}
|
162
263
|
}
|
163
264
|
}
|
164
265
|
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"xds_servers\" array",
|
165
266
|
&error_list);
|
166
267
|
}
|
167
268
|
|
168
|
-
grpc_error_handle XdsBootstrap::
|
269
|
+
grpc_error_handle XdsBootstrap::ParseAuthorities(Json* json) {
|
169
270
|
std::vector<grpc_error_handle> error_list;
|
170
|
-
|
171
|
-
|
172
|
-
auto it = json->mutable_object()->find("server_uri");
|
173
|
-
if (it == json->mutable_object()->end()) {
|
174
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
175
|
-
"\"server_uri\" field not present"));
|
176
|
-
} else if (it->second.type() != Json::Type::STRING) {
|
177
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
178
|
-
"\"server_uri\" field is not a string"));
|
179
|
-
} else {
|
180
|
-
server.server_uri = std::move(*it->second.mutable_string_value());
|
181
|
-
}
|
182
|
-
it = json->mutable_object()->find("channel_creds");
|
183
|
-
if (it == json->mutable_object()->end()) {
|
184
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
185
|
-
"\"channel_creds\" field not present"));
|
186
|
-
} else if (it->second.type() != Json::Type::ARRAY) {
|
187
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
188
|
-
"\"channel_creds\" field is not an array"));
|
189
|
-
} else {
|
190
|
-
grpc_error_handle parse_error =
|
191
|
-
ParseChannelCredsArray(&it->second, &server);
|
192
|
-
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
193
|
-
}
|
194
|
-
it = json->mutable_object()->find("server_features");
|
195
|
-
if (it != json->mutable_object()->end()) {
|
196
|
-
if (it->second.type() != Json::Type::ARRAY) {
|
197
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
198
|
-
"\"server_features\" field is not an array"));
|
199
|
-
} else {
|
200
|
-
grpc_error_handle parse_error =
|
201
|
-
ParseServerFeaturesArray(&it->second, &server);
|
202
|
-
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
203
|
-
}
|
204
|
-
}
|
205
|
-
return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
|
206
|
-
absl::StrCat("errors parsing index ", idx), &error_list);
|
207
|
-
}
|
208
|
-
|
209
|
-
grpc_error_handle XdsBootstrap::ParseChannelCredsArray(Json* json,
|
210
|
-
XdsServer* server) {
|
211
|
-
std::vector<grpc_error_handle> error_list;
|
212
|
-
for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
|
213
|
-
Json& child = json->mutable_array()->at(i);
|
214
|
-
if (child.type() != Json::Type::OBJECT) {
|
271
|
+
for (auto& p : *(json->mutable_object())) {
|
272
|
+
if (p.second.type() != Json::Type::OBJECT) {
|
215
273
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
216
|
-
|
217
|
-
|
218
|
-
grpc_error_handle parse_error = ParseChannelCreds(&child, i, server);
|
219
|
-
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
274
|
+
"field:authorities element error: element is not a object"));
|
275
|
+
continue;
|
220
276
|
}
|
277
|
+
grpc_error_handle parse_error = ParseAuthority(&p.second, p.first);
|
278
|
+
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
221
279
|
}
|
222
|
-
|
223
|
-
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
224
|
-
"no known creds type found in \"channel_creds\""));
|
225
|
-
}
|
226
|
-
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"channel_creds\" array",
|
280
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing \"authorities\"",
|
227
281
|
&error_list);
|
228
282
|
}
|
229
283
|
|
230
|
-
grpc_error_handle XdsBootstrap::
|
231
|
-
|
284
|
+
grpc_error_handle XdsBootstrap::ParseAuthority(Json* json,
|
285
|
+
const std::string& name) {
|
232
286
|
std::vector<grpc_error_handle> error_list;
|
233
|
-
|
234
|
-
auto it =
|
235
|
-
|
236
|
-
error_list.push_back(
|
237
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("\"type\" field not present"));
|
238
|
-
} else if (it->second.type() != Json::Type::STRING) {
|
239
|
-
error_list.push_back(
|
240
|
-
GRPC_ERROR_CREATE_FROM_STATIC_STRING("\"type\" field is not a string"));
|
241
|
-
} else {
|
242
|
-
type = std::move(*it->second.mutable_string_value());
|
243
|
-
}
|
244
|
-
Json config;
|
245
|
-
it = json->mutable_object()->find("config");
|
287
|
+
Authority authority;
|
288
|
+
auto it =
|
289
|
+
json->mutable_object()->find("client_listener_resource_name_template");
|
246
290
|
if (it != json->mutable_object()->end()) {
|
247
|
-
if (it->second.type() != Json::Type::
|
291
|
+
if (it->second.type() != Json::Type::STRING) {
|
248
292
|
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
249
|
-
"\"
|
293
|
+
"\"client_listener_resource_name_template\" field is not a string"));
|
250
294
|
} else {
|
251
|
-
|
295
|
+
std::string expected_prefix = absl::StrCat("xdstp://", name, "/");
|
296
|
+
if (!absl::StartsWith(it->second.string_value(), expected_prefix)) {
|
297
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
|
298
|
+
absl::StrCat("\"client_listener_resource_name_template\" field "
|
299
|
+
"must begin with \"",
|
300
|
+
expected_prefix, "\"")));
|
301
|
+
} else {
|
302
|
+
authority.client_listener_resource_name_template =
|
303
|
+
std::move(*it->second.mutable_string_value());
|
304
|
+
}
|
252
305
|
}
|
253
306
|
}
|
254
|
-
|
255
|
-
if (
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
307
|
+
it = json->mutable_object()->find("xds_servers");
|
308
|
+
if (it != json->mutable_object()->end()) {
|
309
|
+
if (it->second.type() != Json::Type::ARRAY) {
|
310
|
+
error_list.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
311
|
+
"\"xds_servers\" field is not an array"));
|
312
|
+
} else {
|
313
|
+
grpc_error_handle parse_error =
|
314
|
+
ParseXdsServerList(&it->second, &authority.xds_servers);
|
315
|
+
if (parse_error != GRPC_ERROR_NONE) error_list.push_back(parse_error);
|
260
316
|
}
|
261
|
-
server->channel_creds_type = std::move(type);
|
262
|
-
server->channel_creds_config = std::move(config);
|
263
317
|
}
|
264
|
-
|
265
|
-
|
266
|
-
}
|
267
|
-
|
268
|
-
grpc_error_handle XdsBootstrap::ParseServerFeaturesArray(Json* json,
|
269
|
-
XdsServer* server) {
|
270
|
-
std::vector<grpc_error_handle> error_list;
|
271
|
-
for (size_t i = 0; i < json->mutable_array()->size(); ++i) {
|
272
|
-
Json& child = json->mutable_array()->at(i);
|
273
|
-
if (child.type() == Json::Type::STRING &&
|
274
|
-
child.string_value() == "xds_v3") {
|
275
|
-
server->server_features.insert(std::move(*child.mutable_string_value()));
|
276
|
-
}
|
318
|
+
if (error_list.empty()) {
|
319
|
+
authorities_[name] = std::move(authority);
|
277
320
|
}
|
278
|
-
return
|
279
|
-
"errors parsing
|
321
|
+
return GRPC_ERROR_CREATE_FROM_VECTOR_AND_CPP_STRING(
|
322
|
+
absl::StrCat("errors parsing authority ", name), &error_list);
|
280
323
|
}
|
281
324
|
|
282
325
|
grpc_error_handle XdsBootstrap::ParseNode(Json* json) {
|
@@ -452,11 +495,32 @@ std::string XdsBootstrap::ToString() const {
|
|
452
495
|
"],\n"));
|
453
496
|
}
|
454
497
|
parts.push_back(" }\n],\n");
|
498
|
+
if (!client_default_listener_resource_name_template_.empty()) {
|
499
|
+
parts.push_back(absl::StrFormat(
|
500
|
+
"client_default_listener_resource_name_template=\"%s\",\n",
|
501
|
+
client_default_listener_resource_name_template_));
|
502
|
+
}
|
455
503
|
if (!server_listener_resource_name_template_.empty()) {
|
456
504
|
parts.push_back(
|
457
505
|
absl::StrFormat("server_listener_resource_name_template=\"%s\",\n",
|
458
506
|
server_listener_resource_name_template_));
|
459
507
|
}
|
508
|
+
parts.push_back("authorities={\n");
|
509
|
+
for (const auto& entry : authorities_) {
|
510
|
+
parts.push_back(absl::StrFormat(" %s={\n", entry.first));
|
511
|
+
parts.push_back(
|
512
|
+
absl::StrFormat(" client_listener_resource_name_template=\"%s\",\n",
|
513
|
+
entry.second.client_listener_resource_name_template));
|
514
|
+
parts.push_back(
|
515
|
+
absl::StrFormat(" servers=[\n"
|
516
|
+
" {\n"
|
517
|
+
" uri=\"%s\",\n"
|
518
|
+
" creds_type=%s,\n",
|
519
|
+
entry.second.xds_servers[0].server_uri,
|
520
|
+
entry.second.xds_servers[0].channel_creds_type));
|
521
|
+
parts.push_back(" },\n");
|
522
|
+
}
|
523
|
+
parts.push_back("}");
|
460
524
|
parts.push_back("certificate_providers={\n");
|
461
525
|
for (const auto& entry : certificate_providers_) {
|
462
526
|
parts.push_back(
|
@@ -39,14 +39,6 @@ namespace grpc_core {
|
|
39
39
|
|
40
40
|
class XdsClient;
|
41
41
|
|
42
|
-
class XdsChannelCredsRegistry {
|
43
|
-
public:
|
44
|
-
static bool IsSupported(const std::string& creds_type);
|
45
|
-
static bool IsValidConfig(const std::string& creds_type, const Json& config);
|
46
|
-
static RefCountedPtr<grpc_channel_credentials> MakeChannelCreds(
|
47
|
-
const std::string& creds_type, const Json& config);
|
48
|
-
};
|
49
|
-
|
50
42
|
class XdsBootstrap {
|
51
43
|
public:
|
52
44
|
struct Node {
|
@@ -64,6 +56,8 @@ class XdsBootstrap {
|
|
64
56
|
Json channel_creds_config;
|
65
57
|
std::set<std::string> server_features;
|
66
58
|
|
59
|
+
static XdsServer Parse(const Json& json, grpc_error_handle* error);
|
60
|
+
|
67
61
|
bool operator<(const XdsServer& other) const {
|
68
62
|
if (server_uri < other.server_uri) return true;
|
69
63
|
if (channel_creds_type < other.channel_creds_type) return true;
|
@@ -77,6 +71,11 @@ class XdsBootstrap {
|
|
77
71
|
bool ShouldUseV3() const;
|
78
72
|
};
|
79
73
|
|
74
|
+
struct Authority {
|
75
|
+
std::string client_listener_resource_name_template;
|
76
|
+
absl::InlinedVector<XdsServer, 1> xds_servers;
|
77
|
+
};
|
78
|
+
|
80
79
|
// Creates bootstrap object from json_string.
|
81
80
|
// If *error is not GRPC_ERROR_NONE after returning, then there was an
|
82
81
|
// error parsing the contents.
|
@@ -92,22 +91,26 @@ class XdsBootstrap {
|
|
92
91
|
// add support for fallback for the xds channel.
|
93
92
|
const XdsServer& server() const { return servers_[0]; }
|
94
93
|
const Node* node() const { return node_.get(); }
|
94
|
+
const std::string& client_default_listener_resource_name_template() const {
|
95
|
+
return client_default_listener_resource_name_template_;
|
96
|
+
}
|
95
97
|
const std::string& server_listener_resource_name_template() const {
|
96
98
|
return server_listener_resource_name_template_;
|
97
99
|
}
|
98
|
-
|
100
|
+
const std::map<std::string, Authority>& authorities() const {
|
101
|
+
return authorities_;
|
102
|
+
}
|
103
|
+
const Authority* LookupAuthority(const std::string& name) const;
|
99
104
|
const CertificateProviderStore::PluginDefinitionMap& certificate_providers()
|
100
105
|
const {
|
101
106
|
return certificate_providers_;
|
102
107
|
}
|
103
108
|
|
104
109
|
private:
|
105
|
-
grpc_error_handle ParseXdsServerList(
|
106
|
-
|
107
|
-
grpc_error_handle
|
108
|
-
grpc_error_handle
|
109
|
-
XdsServer* server);
|
110
|
-
grpc_error_handle ParseServerFeaturesArray(Json* json, XdsServer* server);
|
110
|
+
grpc_error_handle ParseXdsServerList(
|
111
|
+
Json* json, absl::InlinedVector<XdsServer, 1>* servers);
|
112
|
+
grpc_error_handle ParseAuthorities(Json* json);
|
113
|
+
grpc_error_handle ParseAuthority(Json* json, const std::string& name);
|
111
114
|
grpc_error_handle ParseNode(Json* json);
|
112
115
|
grpc_error_handle ParseLocality(Json* json);
|
113
116
|
grpc_error_handle ParseCertificateProviders(Json* json);
|
@@ -116,7 +119,9 @@ class XdsBootstrap {
|
|
116
119
|
|
117
120
|
absl::InlinedVector<XdsServer, 1> servers_;
|
118
121
|
std::unique_ptr<Node> node_;
|
122
|
+
std::string client_default_listener_resource_name_template_;
|
119
123
|
std::string server_listener_resource_name_template_;
|
124
|
+
std::map<std::string, Authority> authorities_;
|
120
125
|
CertificateProviderStore::PluginDefinitionMap certificate_providers_;
|
121
126
|
};
|
122
127
|
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#include <grpc/support/port_platform.h>
|
23
23
|
|
24
24
|
#include "src/core/ext/xds/xds_api.h"
|
25
|
+
#include "src/core/lib/matchers/matchers.h"
|
25
26
|
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
|
26
27
|
|
27
28
|
#define GRPC_ARG_XDS_CERTIFICATE_PROVIDER \
|
@@ -0,0 +1,108 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2019 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
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/xds/xds_channel_creds.h"
|
20
|
+
|
21
|
+
#include "src/core/lib/security/credentials/fake/fake_credentials.h"
|
22
|
+
|
23
|
+
namespace grpc_core {
|
24
|
+
|
25
|
+
namespace {
|
26
|
+
|
27
|
+
using ChannelCredsMap =
|
28
|
+
std::map<absl::string_view, std::unique_ptr<XdsChannelCredsImpl>>;
|
29
|
+
ChannelCredsMap* g_creds = nullptr;
|
30
|
+
|
31
|
+
} // namespace
|
32
|
+
|
33
|
+
//
|
34
|
+
// XdsChannelCredsImpl implementations for default-supported cred types.
|
35
|
+
//
|
36
|
+
|
37
|
+
class GoogleDefaultXdsChannelCredsImpl : public XdsChannelCredsImpl {
|
38
|
+
public:
|
39
|
+
absl::string_view creds_type() const override { return "google_default"; }
|
40
|
+
RefCountedPtr<grpc_channel_credentials> CreateXdsChannelCreds(
|
41
|
+
const Json& /*config*/) const override {
|
42
|
+
return RefCountedPtr<grpc_channel_credentials>(
|
43
|
+
grpc_google_default_credentials_create(nullptr));
|
44
|
+
}
|
45
|
+
bool IsValidConfig(const Json& /*config*/) const override { return true; }
|
46
|
+
};
|
47
|
+
|
48
|
+
class InsecureXdsChannelCredsImpl : public XdsChannelCredsImpl {
|
49
|
+
public:
|
50
|
+
absl::string_view creds_type() const override { return "insecure"; }
|
51
|
+
RefCountedPtr<grpc_channel_credentials> CreateXdsChannelCreds(
|
52
|
+
const Json& /*config*/) const override {
|
53
|
+
return RefCountedPtr<grpc_channel_credentials>(
|
54
|
+
grpc_insecure_credentials_create());
|
55
|
+
}
|
56
|
+
bool IsValidConfig(const Json& /*config*/) const override { return true; }
|
57
|
+
};
|
58
|
+
|
59
|
+
class FakeXdsChannelCredsImpl : public XdsChannelCredsImpl {
|
60
|
+
public:
|
61
|
+
absl::string_view creds_type() const override { return "fake"; }
|
62
|
+
RefCountedPtr<grpc_channel_credentials> CreateXdsChannelCreds(
|
63
|
+
const Json& /*config*/) const override {
|
64
|
+
return RefCountedPtr<grpc_channel_credentials>(
|
65
|
+
grpc_fake_transport_security_credentials_create());
|
66
|
+
}
|
67
|
+
bool IsValidConfig(const Json& /*config*/) const override { return true; }
|
68
|
+
};
|
69
|
+
|
70
|
+
//
|
71
|
+
// XdsChannelCredsRegistry
|
72
|
+
//
|
73
|
+
|
74
|
+
bool XdsChannelCredsRegistry::IsSupported(const std::string& creds_type) {
|
75
|
+
return g_creds->find(creds_type) != g_creds->end();
|
76
|
+
}
|
77
|
+
|
78
|
+
bool XdsChannelCredsRegistry::IsValidConfig(const std::string& creds_type,
|
79
|
+
const Json& config) {
|
80
|
+
const auto iter = g_creds->find(creds_type);
|
81
|
+
if (iter == g_creds->cend()) return false;
|
82
|
+
return iter->second->IsValidConfig(config);
|
83
|
+
}
|
84
|
+
|
85
|
+
RefCountedPtr<grpc_channel_credentials>
|
86
|
+
XdsChannelCredsRegistry::CreateXdsChannelCreds(const std::string& creds_type,
|
87
|
+
const Json& config) {
|
88
|
+
const auto iter = g_creds->find(creds_type);
|
89
|
+
if (iter == g_creds->cend()) return nullptr;
|
90
|
+
return iter->second->CreateXdsChannelCreds(config);
|
91
|
+
}
|
92
|
+
|
93
|
+
void XdsChannelCredsRegistry::Init() {
|
94
|
+
g_creds = new ChannelCredsMap();
|
95
|
+
RegisterXdsChannelCreds(
|
96
|
+
absl::make_unique<GoogleDefaultXdsChannelCredsImpl>());
|
97
|
+
RegisterXdsChannelCreds(absl::make_unique<InsecureXdsChannelCredsImpl>());
|
98
|
+
RegisterXdsChannelCreds(absl::make_unique<FakeXdsChannelCredsImpl>());
|
99
|
+
}
|
100
|
+
|
101
|
+
void XdsChannelCredsRegistry::Shutdown() { delete g_creds; }
|
102
|
+
|
103
|
+
void XdsChannelCredsRegistry::RegisterXdsChannelCreds(
|
104
|
+
std::unique_ptr<XdsChannelCredsImpl> creds) {
|
105
|
+
(*g_creds)[creds->creds_type()] = std::move(creds);
|
106
|
+
}
|
107
|
+
|
108
|
+
} // namespace grpc_core
|
@@ -0,0 +1,50 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2022 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
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_XDS_XDS_CHANNEL_CREDS_H
|
18
|
+
#define GRPC_CORE_EXT_XDS_XDS_CHANNEL_CREDS_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include "src/core/lib/json/json.h"
|
23
|
+
#include "src/core/lib/security/credentials/credentials.h"
|
24
|
+
|
25
|
+
namespace grpc_core {
|
26
|
+
|
27
|
+
class XdsChannelCredsImpl {
|
28
|
+
public:
|
29
|
+
virtual ~XdsChannelCredsImpl() {}
|
30
|
+
virtual absl::string_view creds_type() const = 0;
|
31
|
+
virtual bool IsValidConfig(const Json& config) const = 0;
|
32
|
+
virtual RefCountedPtr<grpc_channel_credentials> CreateXdsChannelCreds(
|
33
|
+
const Json& config) const = 0;
|
34
|
+
};
|
35
|
+
|
36
|
+
class XdsChannelCredsRegistry {
|
37
|
+
public:
|
38
|
+
static bool IsSupported(const std::string& creds_type);
|
39
|
+
static bool IsValidConfig(const std::string& creds_type, const Json& config);
|
40
|
+
static RefCountedPtr<grpc_channel_credentials> CreateXdsChannelCreds(
|
41
|
+
const std::string& creds_type, const Json& config);
|
42
|
+
static void Init();
|
43
|
+
static void Shutdown();
|
44
|
+
static void RegisterXdsChannelCreds(
|
45
|
+
std::unique_ptr<XdsChannelCredsImpl> creds);
|
46
|
+
};
|
47
|
+
|
48
|
+
} // namespace grpc_core
|
49
|
+
|
50
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_CHANNEL_CREDS_H
|