grpc 1.60.2 → 1.61.0.pre2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Makefile +208 -165
- data/include/grpc/event_engine/event_engine.h +59 -12
- data/include/grpc/event_engine/internal/memory_allocator_impl.h +6 -0
- data/include/grpc/event_engine/internal/slice_cast.h +12 -0
- data/include/grpc/event_engine/memory_allocator.h +3 -1
- data/include/grpc/event_engine/slice.h +5 -0
- data/include/grpc/grpc_security.h +22 -1
- data/include/grpc/impl/call.h +29 -0
- data/include/grpc/impl/channel_arg_names.h +12 -1
- data/include/grpc/impl/slice_type.h +1 -1
- data/include/grpc/module.modulemap +1 -0
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +54 -7
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +20 -6
- data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +10 -13
- data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -10
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +326 -0
- data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +143 -0
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -2
- data/src/core/ext/filters/client_channel/client_channel.cc +32 -6
- data/src/core/ext/filters/client_channel/client_channel_internal.h +2 -0
- data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +54 -21
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +2 -1
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/endpoint_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +139 -92
- data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +9 -4
- data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +10 -11
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +94 -93
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +5 -3
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +12 -15
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +38 -16
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +25 -28
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +10 -10
- data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +37 -35
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -9
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +504 -461
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +232 -122
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +642 -251
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +2 -6
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +2 -1
- data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +6 -8
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.cc +1031 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_dependency_manager.h +277 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +128 -270
- data/src/core/ext/filters/client_channel/resolver/xds/{xds_resolver.h → xds_resolver_attributes.h} +5 -4
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.cc +25 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver_trace.h +30 -0
- data/src/core/ext/filters/client_channel/retry_filter.cc +1 -0
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +35 -17
- data/src/core/ext/filters/deadline/deadline_filter.cc +12 -0
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +17 -13
- data/src/core/ext/filters/fault_injection/fault_injection_filter.h +13 -4
- data/src/core/ext/filters/http/client/http_client_filter.cc +23 -32
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -5
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/client_authority_filter.h +12 -4
- data/src/core/ext/filters/http/http_filters_plugin.cc +42 -20
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +55 -80
- data/src/core/ext/filters/http/message_compress/compression_filter.h +54 -12
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.cc +325 -0
- data/src/core/ext/filters/http/message_compress/legacy_compression_filter.h +139 -0
- data/src/core/ext/filters/http/server/http_server_filter.cc +41 -41
- data/src/core/ext/filters/http/server/http_server_filter.h +11 -4
- data/src/core/ext/filters/message_size/message_size_filter.cc +56 -76
- data/src/core/ext/filters/message_size/message_size_filter.h +35 -23
- data/src/core/ext/filters/rbac/rbac_filter.cc +15 -11
- data/src/core/ext/filters/rbac/rbac_filter.h +11 -4
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +25 -13
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +47 -50
- data/src/core/ext/filters/stateful_session/stateful_session_filter.h +21 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -2
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +11 -2
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +68 -145
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -3
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +21 -82
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -8
- data/src/core/ext/transport/chttp2/transport/frame.cc +506 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +214 -0
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -79
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -7
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +27 -36
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -2
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +122 -32
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +142 -37
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -22
- data/src/core/ext/transport/chttp2/transport/parsing.cc +23 -37
- data/src/core/ext/transport/chttp2/transport/writing.cc +26 -58
- data/src/core/ext/transport/inproc/inproc_transport.cc +172 -13
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +712 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +151 -0
- data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +33 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +50 -0
- data/src/core/ext/xds/certificate_provider_store.cc +2 -1
- data/src/core/ext/xds/certificate_provider_store.h +0 -5
- data/src/core/ext/xds/xds_api.cc +31 -18
- data/src/core/ext/xds/xds_api.h +2 -2
- data/src/core/ext/xds/xds_bootstrap.h +3 -0
- data/src/core/ext/xds/xds_certificate_provider.cc +88 -287
- data/src/core/ext/xds/xds_certificate_provider.h +44 -111
- data/src/core/ext/xds/xds_client.cc +420 -414
- data/src/core/ext/xds/xds_client.h +31 -22
- data/src/core/ext/xds/xds_client_grpc.cc +3 -1
- data/src/core/ext/xds/xds_cluster.cc +104 -11
- data/src/core/ext/xds/xds_cluster.h +9 -1
- data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +9 -5
- data/src/core/ext/xds/xds_common_types.cc +14 -10
- data/src/core/ext/xds/xds_endpoint.cc +9 -4
- data/src/core/ext/xds/xds_endpoint.h +5 -1
- data/src/core/ext/xds/xds_health_status.cc +12 -2
- data/src/core/ext/xds/xds_health_status.h +4 -2
- data/src/core/ext/xds/xds_http_rbac_filter.cc +5 -3
- data/src/core/ext/xds/xds_listener.cc +14 -8
- data/src/core/ext/xds/xds_resource_type_impl.h +6 -4
- data/src/core/ext/xds/xds_route_config.cc +34 -22
- data/src/core/ext/xds/xds_route_config.h +1 -0
- data/src/core/ext/xds/xds_server_config_fetcher.cc +61 -57
- data/src/core/ext/xds/xds_transport.h +3 -0
- data/src/core/ext/xds/xds_transport_grpc.cc +47 -50
- data/src/core/ext/xds/xds_transport_grpc.h +4 -0
- data/src/core/lib/channel/call_tracer.cc +12 -0
- data/src/core/lib/channel/call_tracer.h +17 -3
- data/src/core/lib/channel/channel_args.cc +24 -14
- data/src/core/lib/channel/channel_args.h +74 -13
- data/src/core/lib/channel/channel_stack.cc +27 -0
- data/src/core/lib/channel/channel_stack.h +10 -10
- data/src/core/lib/channel/connected_channel.cc +64 -18
- data/src/core/lib/channel/promise_based_filter.h +1041 -1
- data/src/core/lib/channel/server_call_tracer_filter.cc +43 -35
- data/src/core/lib/compression/compression_internal.cc +0 -3
- data/src/core/lib/event_engine/ares_resolver.cc +35 -14
- data/src/core/lib/event_engine/ares_resolver.h +9 -10
- data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +8 -1
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +132 -0
- data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +61 -0
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +52 -36
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +4 -9
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +11 -3
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +9 -2
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +7 -0
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +17 -27
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +0 -3
- data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +55 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +114 -0
- data/src/core/lib/event_engine/windows/native_windows_dns_resolver.h +51 -0
- data/src/core/lib/event_engine/windows/windows_engine.cc +7 -7
- data/src/core/lib/experiments/config.cc +13 -0
- data/src/core/lib/experiments/config.h +3 -0
- data/src/core/lib/experiments/experiments.cc +245 -366
- data/src/core/lib/experiments/experiments.h +50 -156
- data/src/core/lib/gprpp/debug_location.h +13 -0
- data/src/core/lib/gprpp/dual_ref_counted.h +36 -7
- data/src/core/lib/gprpp/orphanable.h +27 -0
- data/src/core/lib/gprpp/ref_counted.h +63 -22
- data/src/core/lib/gprpp/ref_counted_ptr.h +70 -27
- data/src/core/lib/gprpp/ref_counted_string.h +13 -0
- data/src/core/lib/gprpp/status_helper.cc +1 -2
- data/src/core/lib/iomgr/combiner.cc +15 -51
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +31 -0
- data/src/core/lib/iomgr/event_engine_shims/endpoint.h +16 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -3
- data/src/core/lib/load_balancing/lb_policy.h +1 -1
- data/src/core/lib/promise/activity.cc +17 -2
- data/src/core/lib/promise/activity.h +5 -4
- data/src/core/lib/promise/all_ok.h +80 -0
- data/src/core/lib/promise/detail/join_state.h +2077 -0
- data/src/core/lib/promise/detail/promise_factory.h +1 -0
- data/src/core/lib/promise/detail/promise_like.h +8 -1
- data/src/core/lib/promise/detail/seq_state.h +3458 -150
- data/src/core/lib/promise/detail/status.h +42 -5
- data/src/core/lib/promise/for_each.h +13 -1
- data/src/core/lib/promise/if.h +4 -0
- data/src/core/lib/promise/latch.h +6 -3
- data/src/core/lib/promise/party.cc +33 -31
- data/src/core/lib/promise/party.h +142 -6
- data/src/core/lib/promise/poll.h +39 -13
- data/src/core/lib/promise/promise.h +4 -0
- data/src/core/lib/promise/seq.h +107 -7
- data/src/core/lib/promise/status_flag.h +196 -0
- data/src/core/lib/promise/try_join.h +132 -0
- data/src/core/lib/promise/try_seq.h +132 -10
- data/src/core/lib/resolver/endpoint_addresses.cc +0 -1
- data/src/core/lib/resolver/endpoint_addresses.h +48 -0
- data/src/core/lib/resource_quota/arena.h +2 -2
- data/src/core/lib/resource_quota/memory_quota.cc +57 -8
- data/src/core/lib/resource_quota/memory_quota.h +6 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +14 -11
- data/src/core/lib/security/authorization/grpc_server_authz_filter.h +14 -5
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +28 -20
- data/src/core/lib/security/credentials/external/external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +4 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +4 -0
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +0 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +12 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.cc +22 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_crl_provider.h +1 -5
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -28
- data/src/core/lib/security/credentials/xds/xds_credentials.h +2 -4
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +4 -3
- data/src/core/lib/security/transport/auth_filters.h +71 -4
- data/src/core/lib/security/transport/client_auth_filter.cc +2 -4
- data/src/core/lib/security/transport/legacy_server_auth_filter.cc +244 -0
- data/src/core/lib/security/transport/server_auth_filter.cc +70 -90
- data/src/core/lib/slice/slice_buffer.h +3 -0
- data/src/core/lib/surface/builtins.cc +1 -1
- data/src/core/lib/surface/call.cc +683 -196
- data/src/core/lib/surface/call.h +26 -13
- data/src/core/lib/surface/call_trace.cc +42 -1
- data/src/core/lib/surface/channel.cc +0 -1
- data/src/core/lib/surface/channel.h +0 -6
- data/src/core/lib/surface/channel_init.h +26 -0
- data/src/core/lib/surface/init.cc +14 -8
- data/src/core/lib/surface/server.cc +256 -237
- data/src/core/lib/surface/server.h +26 -54
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/surface/wait_for_cq_end_op.h +94 -0
- data/src/core/lib/transport/call_final_info.cc +38 -0
- data/src/core/lib/transport/call_final_info.h +54 -0
- data/src/core/lib/transport/connectivity_state.cc +3 -2
- data/src/core/lib/transport/connectivity_state.h +4 -0
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/transport.cc +70 -19
- data/src/core/lib/transport/transport.h +395 -25
- data/src/core/plugin_registry/grpc_plugin_registry.cc +3 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
- data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +65 -43
- data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
- data/src/ruby/ext/grpc/rb_grpc.c +0 -1
- data/src/ruby/ext/grpc/rb_grpc.h +0 -2
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/upb/upb/reflection/def_pool.h +2 -2
- data/third_party/zlib/adler32.c +5 -27
- data/third_party/zlib/compress.c +5 -16
- data/third_party/zlib/crc32.c +86 -162
- data/third_party/zlib/deflate.c +233 -336
- data/third_party/zlib/deflate.h +8 -8
- data/third_party/zlib/gzguts.h +11 -12
- data/third_party/zlib/infback.c +7 -23
- data/third_party/zlib/inffast.c +1 -4
- data/third_party/zlib/inffast.h +1 -1
- data/third_party/zlib/inflate.c +30 -99
- data/third_party/zlib/inftrees.c +6 -11
- data/third_party/zlib/inftrees.h +3 -3
- data/third_party/zlib/trees.c +224 -302
- data/third_party/zlib/uncompr.c +4 -12
- data/third_party/zlib/zconf.h +6 -2
- data/third_party/zlib/zlib.h +191 -188
- data/third_party/zlib/zutil.c +16 -44
- data/third_party/zlib/zutil.h +10 -10
- metadata +35 -13
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +0 -1173
- data/src/core/lib/event_engine/memory_allocator.cc +0 -74
- data/src/core/lib/transport/pid_controller.cc +0 -51
- data/src/core/lib/transport/pid_controller.h +0 -116
- data/third_party/upb/upb/collections/array.h +0 -17
- data/third_party/upb/upb/collections/map.h +0 -17
- data/third_party/upb/upb/upb.hpp +0 -18
@@ -43,16 +43,15 @@ class RootCertificatesWatcher
|
|
43
43
|
// presently, the watcher is immediately deleted when
|
44
44
|
// CancelTlsCertificatesWatch() is called, but that can potentially change in
|
45
45
|
// the future.
|
46
|
-
RootCertificatesWatcher(
|
47
|
-
RefCountedPtr<grpc_tls_certificate_distributor> parent
|
48
|
-
std::
|
49
|
-
: parent_(std::move(parent)), cert_name_(std::move(cert_name)) {}
|
46
|
+
explicit RootCertificatesWatcher(
|
47
|
+
RefCountedPtr<grpc_tls_certificate_distributor> parent)
|
48
|
+
: parent_(std::move(parent)) {}
|
50
49
|
|
51
50
|
void OnCertificatesChanged(absl::optional<absl::string_view> root_certs,
|
52
51
|
absl::optional<PemKeyCertPairList>
|
53
52
|
/* key_cert_pairs */) override {
|
54
53
|
if (root_certs.has_value()) {
|
55
|
-
parent_->SetKeyMaterials(
|
54
|
+
parent_->SetKeyMaterials("", std::string(root_certs.value()),
|
56
55
|
absl::nullopt);
|
57
56
|
}
|
58
57
|
}
|
@@ -60,14 +59,13 @@ class RootCertificatesWatcher
|
|
60
59
|
void OnError(grpc_error_handle root_cert_error,
|
61
60
|
grpc_error_handle /*identity_cert_error*/) override {
|
62
61
|
if (!root_cert_error.ok()) {
|
63
|
-
parent_->SetErrorForCert(
|
62
|
+
parent_->SetErrorForCert("", root_cert_error /* pass the ref */,
|
64
63
|
absl::nullopt);
|
65
64
|
}
|
66
65
|
}
|
67
66
|
|
68
67
|
private:
|
69
68
|
RefCountedPtr<grpc_tls_certificate_distributor> parent_;
|
70
|
-
std::string cert_name_;
|
71
69
|
};
|
72
70
|
|
73
71
|
class IdentityCertificatesWatcher
|
@@ -78,339 +76,142 @@ class IdentityCertificatesWatcher
|
|
78
76
|
// presently, the watcher is immediately deleted when
|
79
77
|
// CancelTlsCertificatesWatch() is called, but that can potentially change in
|
80
78
|
// the future.
|
81
|
-
IdentityCertificatesWatcher(
|
82
|
-
RefCountedPtr<grpc_tls_certificate_distributor> parent
|
83
|
-
std::
|
84
|
-
: parent_(std::move(parent)), cert_name_(std::move(cert_name)) {}
|
79
|
+
explicit IdentityCertificatesWatcher(
|
80
|
+
RefCountedPtr<grpc_tls_certificate_distributor> parent)
|
81
|
+
: parent_(std::move(parent)) {}
|
85
82
|
|
86
83
|
void OnCertificatesChanged(
|
87
84
|
absl::optional<absl::string_view> /* root_certs */,
|
88
85
|
absl::optional<PemKeyCertPairList> key_cert_pairs) override {
|
89
86
|
if (key_cert_pairs.has_value()) {
|
90
|
-
parent_->SetKeyMaterials(
|
87
|
+
parent_->SetKeyMaterials("", absl::nullopt, key_cert_pairs);
|
91
88
|
}
|
92
89
|
}
|
93
90
|
|
94
91
|
void OnError(grpc_error_handle /*root_cert_error*/,
|
95
92
|
grpc_error_handle identity_cert_error) override {
|
96
93
|
if (!identity_cert_error.ok()) {
|
97
|
-
parent_->SetErrorForCert(
|
94
|
+
parent_->SetErrorForCert("", absl::nullopt,
|
98
95
|
identity_cert_error /* pass the ref */);
|
99
96
|
}
|
100
97
|
}
|
101
98
|
|
102
99
|
private:
|
103
100
|
RefCountedPtr<grpc_tls_certificate_distributor> parent_;
|
104
|
-
std::string cert_name_;
|
105
101
|
};
|
106
102
|
|
107
103
|
} // namespace
|
108
104
|
|
109
105
|
//
|
110
|
-
// XdsCertificateProvider
|
106
|
+
// XdsCertificateProvider
|
111
107
|
//
|
112
108
|
|
113
|
-
XdsCertificateProvider::
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
109
|
+
XdsCertificateProvider::XdsCertificateProvider(
|
110
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
|
111
|
+
absl::string_view root_cert_name,
|
112
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
|
113
|
+
absl::string_view identity_cert_name,
|
114
|
+
std::vector<StringMatcher> san_matchers)
|
115
|
+
: distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()),
|
116
|
+
root_cert_provider_(std::move(root_cert_provider)),
|
117
|
+
root_cert_name_(root_cert_name),
|
118
|
+
identity_cert_provider_(std::move(identity_cert_provider)),
|
119
|
+
identity_cert_name_(identity_cert_name),
|
120
|
+
san_matchers_(std::move(san_matchers)),
|
121
|
+
require_client_certificate_(false) {
|
122
|
+
distributor_->SetWatchStatusCallback(
|
123
|
+
absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
|
121
124
|
}
|
122
125
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
126
|
+
XdsCertificateProvider::XdsCertificateProvider(
|
127
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
|
128
|
+
absl::string_view root_cert_name,
|
129
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
|
130
|
+
absl::string_view identity_cert_name, bool require_client_certificate)
|
131
|
+
: distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()),
|
132
|
+
root_cert_provider_(std::move(root_cert_provider)),
|
133
|
+
root_cert_name_(root_cert_name),
|
134
|
+
identity_cert_provider_(std::move(identity_cert_provider)),
|
135
|
+
identity_cert_name_(identity_cert_name),
|
136
|
+
require_client_certificate_(require_client_certificate) {
|
137
|
+
distributor_->SetWatchStatusCallback(
|
138
|
+
absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
|
127
139
|
}
|
128
140
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
} else {
|
146
|
-
root_cert_watcher_ = nullptr;
|
147
|
-
xds_certificate_provider_->distributor_->SetErrorForCert(
|
148
|
-
"",
|
141
|
+
XdsCertificateProvider::~XdsCertificateProvider() {
|
142
|
+
distributor_->SetWatchStatusCallback(nullptr);
|
143
|
+
}
|
144
|
+
|
145
|
+
UniqueTypeName XdsCertificateProvider::type() const {
|
146
|
+
static UniqueTypeName::Factory kFactory("Xds");
|
147
|
+
return kFactory.Create();
|
148
|
+
}
|
149
|
+
|
150
|
+
void XdsCertificateProvider::WatchStatusCallback(std::string cert_name,
|
151
|
+
bool root_being_watched,
|
152
|
+
bool identity_being_watched) {
|
153
|
+
if (!cert_name.empty()) {
|
154
|
+
if (root_being_watched) {
|
155
|
+
distributor_->SetErrorForCert(
|
156
|
+
cert_name,
|
149
157
|
GRPC_ERROR_CREATE(
|
150
158
|
"No certificate provider available for root certificates"),
|
151
159
|
absl::nullopt);
|
152
160
|
}
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
}
|
157
|
-
|
158
|
-
void XdsCertificateProvider::ClusterCertificateState::
|
159
|
-
UpdateIdentityCertNameAndDistributor(
|
160
|
-
const std::string& cert_name, absl::string_view identity_cert_name,
|
161
|
-
RefCountedPtr<grpc_tls_certificate_distributor>
|
162
|
-
identity_cert_distributor) {
|
163
|
-
if (identity_cert_name_ == identity_cert_name &&
|
164
|
-
identity_cert_distributor_ == identity_cert_distributor) {
|
165
|
-
return;
|
166
|
-
}
|
167
|
-
identity_cert_name_ = std::string(identity_cert_name);
|
168
|
-
if (watching_identity_certs_) {
|
169
|
-
// The identity certificates are being watched. Swap out the watcher.
|
170
|
-
if (identity_cert_distributor_ != nullptr) {
|
171
|
-
identity_cert_distributor_->CancelTlsCertificatesWatch(
|
172
|
-
identity_cert_watcher_);
|
173
|
-
}
|
174
|
-
if (identity_cert_distributor != nullptr) {
|
175
|
-
UpdateIdentityCertWatcher(cert_name, identity_cert_distributor.get());
|
176
|
-
} else {
|
177
|
-
identity_cert_watcher_ = nullptr;
|
178
|
-
xds_certificate_provider_->distributor_->SetErrorForCert(
|
179
|
-
"", absl::nullopt,
|
161
|
+
if (identity_being_watched) {
|
162
|
+
distributor_->SetErrorForCert(
|
163
|
+
cert_name, absl::nullopt,
|
180
164
|
GRPC_ERROR_CREATE(
|
181
165
|
"No certificate provider available for identity certificates"));
|
182
166
|
}
|
167
|
+
return;
|
183
168
|
}
|
184
|
-
// Swap out the identity certificate distributor
|
185
|
-
identity_cert_distributor_ = std::move(identity_cert_distributor);
|
186
|
-
}
|
187
|
-
|
188
|
-
void XdsCertificateProvider::ClusterCertificateState::UpdateRootCertWatcher(
|
189
|
-
const std::string& cert_name,
|
190
|
-
grpc_tls_certificate_distributor* root_cert_distributor) {
|
191
|
-
auto watcher = std::make_unique<RootCertificatesWatcher>(
|
192
|
-
xds_certificate_provider_->distributor_, cert_name);
|
193
|
-
root_cert_watcher_ = watcher.get();
|
194
|
-
root_cert_distributor->WatchTlsCertificates(std::move(watcher),
|
195
|
-
root_cert_name_, absl::nullopt);
|
196
|
-
}
|
197
|
-
|
198
|
-
void XdsCertificateProvider::ClusterCertificateState::UpdateIdentityCertWatcher(
|
199
|
-
const std::string& cert_name,
|
200
|
-
grpc_tls_certificate_distributor* identity_cert_distributor) {
|
201
|
-
auto watcher = std::make_unique<IdentityCertificatesWatcher>(
|
202
|
-
xds_certificate_provider_->distributor_, cert_name);
|
203
|
-
identity_cert_watcher_ = watcher.get();
|
204
|
-
identity_cert_distributor->WatchTlsCertificates(
|
205
|
-
std::move(watcher), absl::nullopt, identity_cert_name_);
|
206
|
-
}
|
207
|
-
|
208
|
-
void XdsCertificateProvider::ClusterCertificateState::WatchStatusCallback(
|
209
|
-
const std::string& cert_name, bool root_being_watched,
|
210
|
-
bool identity_being_watched) {
|
211
169
|
// We aren't specially handling the case where root_cert_distributor is same
|
212
170
|
// as identity_cert_distributor. Always using two separate watchers
|
213
171
|
// irrespective of the fact results in a straightforward design, and using a
|
214
172
|
// single watcher does not seem to provide any benefit other than cutting down
|
215
173
|
// on the number of callbacks.
|
216
|
-
if (root_being_watched &&
|
217
|
-
//
|
218
|
-
|
219
|
-
|
220
|
-
xds_certificate_provider_->distributor_->SetErrorForCert(
|
174
|
+
if (root_being_watched && root_cert_watcher_ == nullptr) {
|
175
|
+
// Start watching root cert.
|
176
|
+
if (root_cert_provider_ == nullptr) {
|
177
|
+
distributor_->SetErrorForCert(
|
221
178
|
cert_name,
|
222
179
|
GRPC_ERROR_CREATE(
|
223
180
|
"No certificate provider available for root certificates"),
|
224
181
|
absl::nullopt);
|
225
182
|
} else {
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
watching_root_certs_ = false;
|
231
|
-
if (root_cert_distributor_ != nullptr) {
|
232
|
-
root_cert_distributor_->CancelTlsCertificatesWatch(root_cert_watcher_);
|
233
|
-
root_cert_watcher_ = nullptr;
|
183
|
+
auto watcher = std::make_unique<RootCertificatesWatcher>(distributor_);
|
184
|
+
root_cert_watcher_ = watcher.get();
|
185
|
+
root_cert_provider_->distributor()->WatchTlsCertificates(
|
186
|
+
std::move(watcher), root_cert_name_, absl::nullopt);
|
234
187
|
}
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
188
|
+
} else if (!root_being_watched && root_cert_watcher_ != nullptr) {
|
189
|
+
// Cancel root cert watch.
|
190
|
+
GPR_ASSERT(root_cert_provider_ != nullptr);
|
191
|
+
root_cert_provider_->distributor()->CancelTlsCertificatesWatch(
|
192
|
+
root_cert_watcher_);
|
193
|
+
root_cert_watcher_ = nullptr;
|
194
|
+
}
|
195
|
+
if (identity_being_watched && identity_cert_watcher_ == nullptr) {
|
196
|
+
// Start watching identity cert.
|
197
|
+
if (identity_cert_provider_ == nullptr) {
|
198
|
+
distributor_->SetErrorForCert(
|
241
199
|
cert_name, absl::nullopt,
|
242
200
|
GRPC_ERROR_CREATE(
|
243
201
|
"No certificate provider available for identity certificates"));
|
244
202
|
} else {
|
245
|
-
|
203
|
+
auto watcher =
|
204
|
+
std::make_unique<IdentityCertificatesWatcher>(distributor_);
|
205
|
+
identity_cert_watcher_ = watcher.get();
|
206
|
+
identity_cert_provider_->distributor()->WatchTlsCertificates(
|
207
|
+
std::move(watcher), absl::nullopt, identity_cert_name_);
|
246
208
|
}
|
247
|
-
} else if (!identity_being_watched &&
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
identity_cert_watcher_ = nullptr;
|
253
|
-
}
|
254
|
-
GPR_ASSERT(identity_cert_watcher_ == nullptr);
|
255
|
-
}
|
256
|
-
}
|
257
|
-
|
258
|
-
//
|
259
|
-
// XdsCertificateProvider
|
260
|
-
//
|
261
|
-
|
262
|
-
XdsCertificateProvider::XdsCertificateProvider()
|
263
|
-
: distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()) {
|
264
|
-
distributor_->SetWatchStatusCallback(
|
265
|
-
absl::bind_front(&XdsCertificateProvider::WatchStatusCallback, this));
|
266
|
-
}
|
267
|
-
|
268
|
-
XdsCertificateProvider::~XdsCertificateProvider() {
|
269
|
-
distributor_->SetWatchStatusCallback(nullptr);
|
270
|
-
}
|
271
|
-
|
272
|
-
UniqueTypeName XdsCertificateProvider::type() const {
|
273
|
-
static UniqueTypeName::Factory kFactory("Xds");
|
274
|
-
return kFactory.Create();
|
275
|
-
}
|
276
|
-
|
277
|
-
bool XdsCertificateProvider::ProvidesRootCerts(const std::string& cert_name) {
|
278
|
-
MutexLock lock(&mu_);
|
279
|
-
auto it = certificate_state_map_.find(cert_name);
|
280
|
-
if (it == certificate_state_map_.end()) return false;
|
281
|
-
return it->second->ProvidesRootCerts();
|
282
|
-
}
|
283
|
-
|
284
|
-
void XdsCertificateProvider::UpdateRootCertNameAndDistributor(
|
285
|
-
const std::string& cert_name, absl::string_view root_cert_name,
|
286
|
-
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor) {
|
287
|
-
MutexLock lock(&mu_);
|
288
|
-
auto it = certificate_state_map_.find(cert_name);
|
289
|
-
if (it == certificate_state_map_.end()) {
|
290
|
-
it =
|
291
|
-
certificate_state_map_
|
292
|
-
.emplace(cert_name, std::make_unique<ClusterCertificateState>(this))
|
293
|
-
.first;
|
294
|
-
}
|
295
|
-
it->second->UpdateRootCertNameAndDistributor(cert_name, root_cert_name,
|
296
|
-
root_cert_distributor);
|
297
|
-
// Delete unused entries.
|
298
|
-
if (it->second->IsSafeToRemove()) certificate_state_map_.erase(it);
|
299
|
-
}
|
300
|
-
|
301
|
-
bool XdsCertificateProvider::ProvidesIdentityCerts(
|
302
|
-
const std::string& cert_name) {
|
303
|
-
MutexLock lock(&mu_);
|
304
|
-
auto it = certificate_state_map_.find(cert_name);
|
305
|
-
if (it == certificate_state_map_.end()) return false;
|
306
|
-
return it->second->ProvidesIdentityCerts();
|
307
|
-
}
|
308
|
-
|
309
|
-
void XdsCertificateProvider::UpdateIdentityCertNameAndDistributor(
|
310
|
-
const std::string& cert_name, absl::string_view identity_cert_name,
|
311
|
-
RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor) {
|
312
|
-
MutexLock lock(&mu_);
|
313
|
-
auto it = certificate_state_map_.find(cert_name);
|
314
|
-
if (it == certificate_state_map_.end()) {
|
315
|
-
it =
|
316
|
-
certificate_state_map_
|
317
|
-
.emplace(cert_name, std::make_unique<ClusterCertificateState>(this))
|
318
|
-
.first;
|
319
|
-
}
|
320
|
-
it->second->UpdateIdentityCertNameAndDistributor(
|
321
|
-
cert_name, identity_cert_name, identity_cert_distributor);
|
322
|
-
// Delete unused entries.
|
323
|
-
if (it->second->IsSafeToRemove()) certificate_state_map_.erase(it);
|
324
|
-
}
|
325
|
-
|
326
|
-
bool XdsCertificateProvider::GetRequireClientCertificate(
|
327
|
-
const std::string& cert_name) {
|
328
|
-
MutexLock lock(&mu_);
|
329
|
-
auto it = certificate_state_map_.find(cert_name);
|
330
|
-
if (it == certificate_state_map_.end()) return false;
|
331
|
-
return it->second->require_client_certificate();
|
332
|
-
}
|
333
|
-
|
334
|
-
void XdsCertificateProvider::UpdateRequireClientCertificate(
|
335
|
-
const std::string& cert_name, bool require_client_certificate) {
|
336
|
-
MutexLock lock(&mu_);
|
337
|
-
auto it = certificate_state_map_.find(cert_name);
|
338
|
-
if (it == certificate_state_map_.end()) return;
|
339
|
-
it->second->set_require_client_certificate(require_client_certificate);
|
340
|
-
}
|
341
|
-
|
342
|
-
std::vector<StringMatcher> XdsCertificateProvider::GetSanMatchers(
|
343
|
-
const std::string& cluster) {
|
344
|
-
MutexLock lock(&san_matchers_mu_);
|
345
|
-
auto it = san_matcher_map_.find(cluster);
|
346
|
-
if (it == san_matcher_map_.end()) return {};
|
347
|
-
return it->second;
|
348
|
-
}
|
349
|
-
|
350
|
-
void XdsCertificateProvider::UpdateSubjectAlternativeNameMatchers(
|
351
|
-
const std::string& cluster, std::vector<StringMatcher> matchers) {
|
352
|
-
MutexLock lock(&san_matchers_mu_);
|
353
|
-
if (matchers.empty()) {
|
354
|
-
san_matcher_map_.erase(cluster);
|
355
|
-
} else {
|
356
|
-
san_matcher_map_[cluster] = std::move(matchers);
|
357
|
-
}
|
358
|
-
}
|
359
|
-
|
360
|
-
void XdsCertificateProvider::WatchStatusCallback(std::string cert_name,
|
361
|
-
bool root_being_watched,
|
362
|
-
bool identity_being_watched) {
|
363
|
-
MutexLock lock(&mu_);
|
364
|
-
auto it = certificate_state_map_.find(cert_name);
|
365
|
-
if (it == certificate_state_map_.end()) {
|
366
|
-
it =
|
367
|
-
certificate_state_map_
|
368
|
-
.emplace(cert_name, std::make_unique<ClusterCertificateState>(this))
|
369
|
-
.first;
|
209
|
+
} else if (!identity_being_watched && identity_cert_watcher_ != nullptr) {
|
210
|
+
GPR_ASSERT(identity_cert_provider_ != nullptr);
|
211
|
+
identity_cert_provider_->distributor()->CancelTlsCertificatesWatch(
|
212
|
+
identity_cert_watcher_);
|
213
|
+
identity_cert_watcher_ = nullptr;
|
370
214
|
}
|
371
|
-
it->second->WatchStatusCallback(cert_name, root_being_watched,
|
372
|
-
identity_being_watched);
|
373
|
-
// Delete unused entries.
|
374
|
-
if (it->second->IsSafeToRemove()) certificate_state_map_.erase(it);
|
375
|
-
}
|
376
|
-
|
377
|
-
namespace {
|
378
|
-
|
379
|
-
void* XdsCertificateProviderArgCopy(void* p) {
|
380
|
-
XdsCertificateProvider* xds_certificate_provider =
|
381
|
-
static_cast<XdsCertificateProvider*>(p);
|
382
|
-
return xds_certificate_provider->Ref().release();
|
383
|
-
}
|
384
|
-
|
385
|
-
void XdsCertificateProviderArgDestroy(void* p) {
|
386
|
-
XdsCertificateProvider* xds_certificate_provider =
|
387
|
-
static_cast<XdsCertificateProvider*>(p);
|
388
|
-
xds_certificate_provider->Unref();
|
389
|
-
}
|
390
|
-
|
391
|
-
int XdsCertificateProviderArgCmp(void* p, void* q) {
|
392
|
-
return QsortCompare(p, q);
|
393
|
-
}
|
394
|
-
|
395
|
-
const grpc_arg_pointer_vtable kChannelArgVtable = {
|
396
|
-
XdsCertificateProviderArgCopy, XdsCertificateProviderArgDestroy,
|
397
|
-
XdsCertificateProviderArgCmp};
|
398
|
-
|
399
|
-
} // namespace
|
400
|
-
|
401
|
-
grpc_arg XdsCertificateProvider::MakeChannelArg() const {
|
402
|
-
return grpc_channel_arg_pointer_create(
|
403
|
-
const_cast<char*>(GRPC_ARG_XDS_CERTIFICATE_PROVIDER),
|
404
|
-
const_cast<XdsCertificateProvider*>(this), &kChannelArgVtable);
|
405
|
-
}
|
406
|
-
|
407
|
-
RefCountedPtr<XdsCertificateProvider>
|
408
|
-
XdsCertificateProvider::GetFromChannelArgs(const grpc_channel_args* args) {
|
409
|
-
XdsCertificateProvider* xds_certificate_provider =
|
410
|
-
grpc_channel_args_find_pointer<XdsCertificateProvider>(
|
411
|
-
args, GRPC_ARG_XDS_CERTIFICATE_PROVIDER);
|
412
|
-
return xds_certificate_provider != nullptr ? xds_certificate_provider->Ref()
|
413
|
-
: nullptr;
|
414
215
|
}
|
415
216
|
|
416
217
|
} // namespace grpc_core
|
@@ -40,24 +40,26 @@
|
|
40
40
|
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
|
41
41
|
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h"
|
42
42
|
|
43
|
-
#define GRPC_ARG_XDS_CERTIFICATE_PROVIDER \
|
44
|
-
"grpc.internal.xds_certificate_provider"
|
45
|
-
|
46
43
|
namespace grpc_core {
|
47
44
|
|
48
45
|
class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
49
46
|
public:
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
47
|
+
// ctor for client side
|
48
|
+
XdsCertificateProvider(
|
49
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
|
50
|
+
absl::string_view root_cert_name,
|
51
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
|
52
|
+
absl::string_view identity_cert_name,
|
53
|
+
std::vector<StringMatcher> san_matchers);
|
54
|
+
|
55
|
+
// ctor for server side
|
56
|
+
XdsCertificateProvider(
|
57
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider,
|
58
|
+
absl::string_view root_cert_name,
|
59
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider,
|
60
|
+
absl::string_view identity_cert_name, bool require_client_certificate);
|
56
61
|
|
57
|
-
|
58
|
-
const XdsCertificateProvider* b) {
|
59
|
-
return QsortCompare(a, b);
|
60
|
-
}
|
62
|
+
~XdsCertificateProvider() override;
|
61
63
|
|
62
64
|
RefCountedPtr<grpc_tls_certificate_distributor> distributor() const override {
|
63
65
|
return distributor_;
|
@@ -65,91 +67,27 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
|
65
67
|
|
66
68
|
UniqueTypeName type() const override;
|
67
69
|
|
68
|
-
bool ProvidesRootCerts(const
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
bool GetRequireClientCertificate(const std::string& cert_name);
|
80
|
-
// Updating \a require_client_certificate for a non-existing \a cert_name has
|
81
|
-
// no effect.
|
82
|
-
void UpdateRequireClientCertificate(const std::string& cert_name,
|
83
|
-
bool require_client_certificate);
|
84
|
-
|
85
|
-
std::vector<StringMatcher> GetSanMatchers(const std::string& cluster);
|
86
|
-
void UpdateSubjectAlternativeNameMatchers(
|
87
|
-
const std::string& cluster, std::vector<StringMatcher> matchers);
|
88
|
-
|
89
|
-
grpc_arg MakeChannelArg() const;
|
70
|
+
bool ProvidesRootCerts() const { return root_cert_provider_ != nullptr; }
|
71
|
+
bool ProvidesIdentityCerts() const {
|
72
|
+
return identity_cert_provider_ != nullptr;
|
73
|
+
}
|
74
|
+
bool require_client_certificate() const {
|
75
|
+
return require_client_certificate_;
|
76
|
+
}
|
77
|
+
const std::vector<StringMatcher>& san_matchers() const {
|
78
|
+
return san_matchers_;
|
79
|
+
}
|
90
80
|
|
91
|
-
static
|
92
|
-
|
81
|
+
static absl::string_view ChannelArgName() {
|
82
|
+
return "grpc.internal.xds_certificate_provider";
|
83
|
+
}
|
84
|
+
static int ChannelArgsCompare(const XdsCertificateProvider* a,
|
85
|
+
const XdsCertificateProvider* b) {
|
86
|
+
if (a == nullptr || b == nullptr) return QsortCompare(a, b);
|
87
|
+
return a->Compare(b);
|
88
|
+
}
|
93
89
|
|
94
90
|
private:
|
95
|
-
class ClusterCertificateState {
|
96
|
-
public:
|
97
|
-
explicit ClusterCertificateState(
|
98
|
-
XdsCertificateProvider* xds_certificate_provider)
|
99
|
-
: xds_certificate_provider_(xds_certificate_provider) {}
|
100
|
-
|
101
|
-
~ClusterCertificateState();
|
102
|
-
|
103
|
-
// Returns true if the certs aren't being watched and there are no
|
104
|
-
// distributors configured.
|
105
|
-
bool IsSafeToRemove() const;
|
106
|
-
|
107
|
-
bool ProvidesRootCerts() const { return root_cert_distributor_ != nullptr; }
|
108
|
-
bool ProvidesIdentityCerts() const {
|
109
|
-
return identity_cert_distributor_ != nullptr;
|
110
|
-
}
|
111
|
-
|
112
|
-
void UpdateRootCertNameAndDistributor(
|
113
|
-
const std::string& cert_name, absl::string_view root_cert_name,
|
114
|
-
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor);
|
115
|
-
void UpdateIdentityCertNameAndDistributor(
|
116
|
-
const std::string& cert_name, absl::string_view identity_cert_name,
|
117
|
-
RefCountedPtr<grpc_tls_certificate_distributor>
|
118
|
-
identity_cert_distributor);
|
119
|
-
|
120
|
-
void UpdateRootCertWatcher(
|
121
|
-
const std::string& cert_name,
|
122
|
-
grpc_tls_certificate_distributor* root_cert_distributor);
|
123
|
-
void UpdateIdentityCertWatcher(
|
124
|
-
const std::string& cert_name,
|
125
|
-
grpc_tls_certificate_distributor* identity_cert_distributor);
|
126
|
-
|
127
|
-
bool require_client_certificate() const {
|
128
|
-
return require_client_certificate_;
|
129
|
-
}
|
130
|
-
void set_require_client_certificate(bool require_client_certificate) {
|
131
|
-
require_client_certificate_ = require_client_certificate;
|
132
|
-
}
|
133
|
-
|
134
|
-
void WatchStatusCallback(const std::string& cert_name,
|
135
|
-
bool root_being_watched,
|
136
|
-
bool identity_being_watched);
|
137
|
-
|
138
|
-
private:
|
139
|
-
XdsCertificateProvider* xds_certificate_provider_;
|
140
|
-
bool watching_root_certs_ = false;
|
141
|
-
bool watching_identity_certs_ = false;
|
142
|
-
std::string root_cert_name_;
|
143
|
-
std::string identity_cert_name_;
|
144
|
-
RefCountedPtr<grpc_tls_certificate_distributor> root_cert_distributor_;
|
145
|
-
RefCountedPtr<grpc_tls_certificate_distributor> identity_cert_distributor_;
|
146
|
-
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
147
|
-
root_cert_watcher_ = nullptr;
|
148
|
-
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
149
|
-
identity_cert_watcher_ = nullptr;
|
150
|
-
bool require_client_certificate_ = false;
|
151
|
-
};
|
152
|
-
|
153
91
|
int CompareImpl(const grpc_tls_certificate_provider* other) const override {
|
154
92
|
// TODO(yashykt): Maybe do something better here.
|
155
93
|
return QsortCompare(static_cast<const grpc_tls_certificate_provider*>(this),
|
@@ -160,22 +98,17 @@ class XdsCertificateProvider : public grpc_tls_certificate_provider {
|
|
160
98
|
bool identity_being_watched);
|
161
99
|
|
162
100
|
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
// -> HandshakeManager::Add() -> SecurityHandshaker::DoHandshake() ->
|
175
|
-
// subject_alternative_names_matchers()
|
176
|
-
Mutex san_matchers_mu_;
|
177
|
-
std::map<std::string /*cluster_name*/, std::vector<StringMatcher>>
|
178
|
-
san_matcher_map_ ABSL_GUARDED_BY(san_matchers_mu_);
|
101
|
+
RefCountedPtr<grpc_tls_certificate_provider> root_cert_provider_;
|
102
|
+
std::string root_cert_name_;
|
103
|
+
RefCountedPtr<grpc_tls_certificate_provider> identity_cert_provider_;
|
104
|
+
std::string identity_cert_name_;
|
105
|
+
std::vector<StringMatcher> san_matchers_;
|
106
|
+
bool require_client_certificate_ = false;
|
107
|
+
|
108
|
+
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
109
|
+
root_cert_watcher_ = nullptr;
|
110
|
+
grpc_tls_certificate_distributor::TlsCertificatesWatcherInterface*
|
111
|
+
identity_cert_watcher_ = nullptr;
|
179
112
|
};
|
180
113
|
|
181
114
|
} // namespace grpc_core
|