grpc 1.73.0 → 1.75.0
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 +116 -53
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +18 -6
- data/include/grpc/event_engine/event_engine.h +74 -17
- data/include/grpc/grpc_posix.h +20 -1
- data/include/grpc/impl/channel_arg_names.h +2 -4
- data/include/grpc/module.modulemap +1 -0
- data/include/grpc/support/json.h +24 -0
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/interception_chain.h +7 -11
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +274 -192
- data/src/core/channelz/channelz.h +224 -72
- data/src/core/channelz/channelz_registry.cc +2 -163
- data/src/core/channelz/channelz_registry.h +37 -6
- data/src/core/channelz/property_list.cc +353 -0
- data/src/core/channelz/property_list.h +204 -0
- data/src/core/channelz/v2tov1/convert.cc +683 -0
- data/src/core/channelz/v2tov1/convert.h +58 -0
- data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
- data/src/core/channelz/v2tov1/legacy_api.h +32 -0
- data/src/core/channelz/v2tov1/property_list.cc +118 -0
- data/src/core/channelz/v2tov1/property_list.h +52 -0
- data/src/core/channelz/ztrace_collector.h +3 -2
- data/src/core/client_channel/backup_poller.cc +17 -2
- data/src/core/client_channel/client_channel.cc +17 -28
- data/src/core/client_channel/client_channel_filter.cc +24 -33
- data/src/core/client_channel/client_channel_filter.h +2 -2
- data/src/core/client_channel/client_channel_internal.h +2 -1
- data/src/core/client_channel/config_selector.h +8 -2
- data/src/core/client_channel/dynamic_filters.cc +5 -6
- data/src/core/client_channel/dynamic_filters.h +1 -1
- data/src/core/client_channel/global_subchannel_pool.cc +4 -1
- data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/retry_filter.cc +21 -27
- data/src/core/client_channel/retry_filter.h +10 -7
- data/src/core/client_channel/retry_filter_legacy_call_data.cc +5 -5
- data/src/core/client_channel/retry_filter_legacy_call_data.h +1 -1
- data/src/core/client_channel/retry_interceptor.cc +30 -44
- data/src/core/client_channel/retry_interceptor.h +18 -17
- data/src/core/client_channel/retry_throttle.cc +46 -61
- data/src/core/client_channel/retry_throttle.h +17 -39
- data/src/core/client_channel/subchannel.cc +57 -25
- data/src/core/client_channel/subchannel.h +10 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +4 -1
- data/src/core/config/core_configuration.h +23 -0
- data/src/core/credentials/call/call_creds_registry.h +125 -0
- data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
- data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +6 -48
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
- data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
- data/src/core/credentials/call/jwt_util.cc +70 -0
- data/src/core/credentials/call/jwt_util.h +32 -0
- data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
- data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
- data/src/core/credentials/transport/channel_creds_registry_init.cc +4 -2
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -2
- data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
- data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
- data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
- data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
- data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
- data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
- data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
- data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
- data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +8 -8
- data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +16 -16
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +3 -6
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
- data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
- data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +120 -35
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +6 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +165 -117
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +0 -3
- data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
- data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +23 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +99 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +40 -2
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +290 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +11 -5
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +12 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1233 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +712 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +65 -51
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
- data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
- data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
- data/src/core/ext/transport/chttp2/transport/http2_status.h +6 -1
- data/src/core/ext/transport/chttp2/transport/http2_transport.cc +121 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +76 -0
- data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +0 -29
- data/src/core/ext/transport/chttp2/transport/internal.h +18 -8
- data/src/core/ext/transport/chttp2/transport/keepalive.cc +105 -0
- data/src/core/ext/transport/chttp2/transport/keepalive.h +138 -0
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +185 -0
- data/src/core/ext/transport/chttp2/transport/parsing.cc +4 -5
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +152 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +197 -0
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +5 -9
- data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +11 -0
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/stream_lists.cc +39 -1
- data/src/core/ext/transport/chttp2/transport/transport_common.cc +19 -0
- data/src/core/ext/transport/chttp2/transport/transport_common.h +27 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +41 -13
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
- data/src/core/filter/auth/auth_filters.h +2 -27
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/handshaker.cc +23 -14
- data/src/core/handshaker/handshaker.h +3 -0
- data/src/core/handshaker/http_connect/http_connect_handshaker.cc +3 -1
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +7 -6
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +98 -38
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/handshaker/security/security_handshaker.cc +4 -1
- data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +7 -1
- data/src/core/lib/channel/channel_args.cc +15 -0
- data/src/core/lib/channel/channel_args.h +3 -0
- data/src/core/lib/channel/channel_stack.cc +22 -23
- data/src/core/lib/channel/channel_stack.h +9 -7
- data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
- data/src/core/lib/channel/channel_stack_builder_impl.h +2 -7
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +11 -10
- data/src/core/lib/debug/trace_impl.h +0 -1
- data/src/core/lib/event_engine/ares_resolver.cc +165 -46
- data/src/core/lib/event_engine/ares_resolver.h +51 -3
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +12 -6
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
- data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +14 -6
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
- data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
- data/src/core/lib/event_engine/event_engine.cc +7 -0
- data/src/core/lib/event_engine/extensions/channelz.h +10 -6
- data/src/core/lib/event_engine/grpc_polled_fd.h +5 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +139 -169
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +17 -19
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +90 -131
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +13 -13
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -23
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
- data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +30 -19
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +6 -2
- data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
- data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
- data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +147 -94
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +435 -229
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +78 -50
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +46 -38
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +6 -4
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +32 -142
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +6 -5
- data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
- data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
- data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -719
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +11 -171
- data/src/core/lib/event_engine/posix_engine/timer_manager.cc +33 -22
- data/src/core/lib/event_engine/posix_engine/timer_manager.h +13 -11
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +117 -151
- data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +26 -94
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +26 -25
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +36 -62
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +6 -2
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +12 -6
- data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
- data/src/core/lib/event_engine/shim.cc +9 -0
- data/src/core/lib/event_engine/shim.h +3 -0
- data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
- data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +4 -2
- data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -2
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +6 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +4 -0
- data/src/core/lib/event_engine/windows/windows_endpoint.h +2 -6
- data/src/core/lib/event_engine/windows/windows_engine.cc +0 -1
- data/src/core/lib/event_engine/windows/windows_engine.h +1 -3
- data/src/core/lib/event_engine/windows/windows_listener.cc +14 -2
- data/src/core/lib/experiments/experiments.cc +165 -99
- data/src/core/lib/experiments/experiments.h +65 -52
- data/src/core/lib/iomgr/combiner.cc +1 -1
- data/src/core/lib/iomgr/endpoint.cc +4 -3
- data/src/core/lib/iomgr/endpoint.h +7 -4
- data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -2
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +7 -2
- data/src/core/lib/iomgr/ev_poll_posix.cc +7 -2
- data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +4 -6
- data/src/core/lib/iomgr/exec_ctx.h +3 -9
- data/src/core/lib/iomgr/socket_mutator.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
- data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
- data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_posix.cc +15 -9
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +3 -2
- data/src/core/lib/promise/arena_promise.h +23 -7
- data/src/core/lib/promise/detail/promise_factory.h +10 -0
- data/src/core/lib/promise/detail/promise_like.h +118 -11
- data/src/core/lib/promise/detail/promise_variant.h +50 -0
- data/src/core/lib/promise/detail/seq_state.h +687 -548
- data/src/core/lib/promise/if.h +20 -0
- data/src/core/lib/promise/inter_activity_latch.h +147 -0
- data/src/core/lib/promise/inter_activity_mutex.h +547 -0
- data/src/core/lib/promise/loop.h +65 -3
- data/src/core/lib/promise/map.h +24 -0
- data/src/core/lib/promise/match_promise.h +103 -0
- data/src/core/lib/promise/mpsc.cc +425 -0
- data/src/core/lib/promise/mpsc.h +490 -0
- data/src/core/lib/promise/party.cc +55 -6
- data/src/core/lib/promise/party.h +68 -3
- data/src/core/lib/promise/poll.h +10 -0
- data/src/core/lib/promise/race.h +31 -0
- data/src/core/lib/promise/seq.h +4 -1
- data/src/core/lib/promise/status_flag.h +7 -0
- data/src/core/lib/promise/try_seq.h +4 -1
- data/src/core/lib/promise/wait_set.cc +28 -0
- data/src/core/lib/promise/wait_set.h +86 -0
- data/src/core/lib/resource_quota/arena.h +19 -0
- data/src/core/lib/resource_quota/memory_quota.cc +90 -3
- data/src/core/lib/resource_quota/memory_quota.h +20 -9
- data/src/core/lib/resource_quota/periodic_update.cc +14 -0
- data/src/core/lib/resource_quota/periodic_update.h +8 -0
- data/src/core/lib/resource_quota/resource_quota.cc +15 -4
- data/src/core/lib/resource_quota/resource_quota.h +3 -0
- data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
- data/src/core/lib/slice/slice.h +5 -0
- data/src/core/lib/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/channel_create.cc +88 -13
- data/src/core/lib/surface/channel_create.h +4 -0
- data/src/core/lib/surface/channel_init.cc +164 -47
- data/src/core/lib/surface/channel_init.h +64 -1
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +19 -10
- data/src/core/lib/surface/init.cc +6 -15
- data/src/core/lib/surface/legacy_channel.cc +3 -5
- data/src/core/lib/surface/legacy_channel.h +3 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +110 -0
- data/src/core/lib/transport/promise_endpoint.h +307 -0
- data/src/core/load_balancing/child_policy_handler.cc +2 -4
- data/src/core/load_balancing/delegating_helper.h +2 -3
- data/src/core/load_balancing/endpoint_list.cc +29 -2
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
- data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
- data/src/core/load_balancing/health_check_client.cc +1 -5
- data/src/core/load_balancing/lb_policy.h +1 -3
- data/src/core/load_balancing/oob_backend_metric.cc +1 -5
- data/src/core/load_balancing/pick_first/pick_first.cc +15 -5
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
- data/src/core/net/socket_mutator.cc +19 -0
- data/src/core/net/socket_mutator.h +25 -0
- data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
- data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
- data/src/core/resolver/xds/xds_config.cc +6 -3
- data/src/core/resolver/xds/xds_config.h +9 -4
- data/src/core/resolver/xds/xds_dependency_manager.cc +22 -7
- data/src/core/resolver/xds/xds_dependency_manager.h +2 -1
- data/src/core/resolver/xds/xds_resolver.cc +31 -11
- data/src/core/server/server.cc +84 -13
- data/src/core/server/server.h +21 -2
- data/src/core/server/server_call_tracer_filter.cc +0 -66
- data/src/core/server/server_call_tracer_filter.h +64 -0
- data/src/core/server/server_config_selector_filter.cc +1 -1
- data/src/core/server/xds_server_config_fetcher.cc +63 -25
- data/src/core/service_config/service_config.h +1 -1
- data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
- data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
- data/src/core/service_config/service_config_impl.h +1 -1
- data/src/core/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +369 -343
- data/src/core/telemetry/stats_data.h +341 -244
- data/src/core/telemetry/tcp_tracer.h +1 -1
- data/src/core/transport/auth_context.cc +20 -0
- data/src/core/transport/auth_context.h +4 -0
- data/src/core/transport/auth_context_comparator_registry.h +69 -0
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +11 -3
- data/src/core/tsi/fake_transport_security.cc +17 -0
- data/src/core/tsi/ssl_transport_security.cc +205 -32
- data/src/core/tsi/ssl_transport_security.h +19 -10
- data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
- data/src/core/tsi/ssl_transport_security_utils.h +4 -0
- data/src/core/tsi/transport_security_grpc.cc +8 -0
- data/src/core/tsi/transport_security_grpc.h +15 -0
- data/src/core/util/backoff.cc +1 -5
- data/src/core/util/backoff.h +1 -0
- data/src/core/util/down_cast.h +1 -1
- data/src/core/util/function_signature.h +15 -1
- data/src/core/util/http_client/httpcli.cc +12 -5
- data/src/core/util/http_client/httpcli.h +4 -1
- data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
- data/src/core/util/latent_see.cc +178 -146
- data/src/core/util/latent_see.h +249 -189
- data/src/core/util/log.cc +4 -0
- data/src/core/util/memory_usage.h +268 -0
- data/src/core/util/per_cpu.cc +2 -0
- data/src/core/util/per_cpu.h +7 -0
- data/src/core/util/shared_bit_gen.h +20 -0
- data/src/core/util/single_set_ptr.h +7 -4
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +144 -2
- data/src/core/util/wait_for_single_owner.cc +31 -0
- data/src/core/util/wait_for_single_owner.h +24 -0
- data/src/core/util/windows/directory_reader.cc +1 -0
- data/src/core/util/windows/thd.cc +1 -3
- data/src/core/util/work_serializer.cc +1 -1
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
- data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.cc +2 -0
- data/src/core/xds/grpc/xds_bootstrap_grpc.h +5 -0
- data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
- data/src/core/xds/grpc/xds_client_grpc.cc +6 -2
- data/src/core/xds/grpc/xds_common_types_parser.cc +138 -50
- data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
- data/src/core/xds/grpc/xds_http_filter.h +7 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +22 -0
- data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +3 -0
- data/src/core/xds/grpc/xds_route_config_parser.cc +15 -38
- data/src/core/xds/grpc/xds_server_grpc.cc +63 -13
- data/src/core/xds/grpc/xds_server_grpc.h +10 -2
- data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
- data/src/core/xds/grpc/xds_transport_grpc.cc +18 -0
- data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
- data/src/core/xds/xds_client/xds_client.cc +26 -5
- data/src/ruby/ext/grpc/extconf.rb +2 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -8
- data/src/ruby/ext/grpc/rb_channel.c +70 -557
- data/src/ruby/ext/grpc/rb_channel.h +0 -3
- data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
- data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
- data/src/ruby/ext/grpc/rb_grpc.c +9 -5
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
- data/src/ruby/ext/grpc/rb_loader.c +0 -4
- data/src/ruby/ext/grpc/rb_server.c +31 -50
- data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/core_spec.rb +22 -0
- data/src/ruby/spec/generic/active_call_spec.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +2 -19
- data/third_party/abseil-cpp/absl/base/attributes.h +76 -7
- data/third_party/abseil-cpp/absl/base/call_once.h +11 -12
- data/third_party/abseil-cpp/absl/base/config.h +20 -129
- data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
- data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
- data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
- data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
- data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
- data/third_party/abseil-cpp/absl/base/internal/{nullability_impl.h → nullability_deprecated.h} +45 -8
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
- data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
- data/third_party/abseil-cpp/absl/base/nullability.h +84 -72
- data/third_party/abseil-cpp/absl/base/options.h +3 -80
- data/third_party/abseil-cpp/absl/base/policy_checks.h +7 -7
- data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
- data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
- data/third_party/abseil-cpp/absl/container/btree_map.h +4 -2
- data/third_party/abseil-cpp/absl/container/btree_set.h +4 -2
- data/third_party/abseil-cpp/absl/container/fixed_array.h +7 -14
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +5 -0
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +6 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +8 -5
- data/third_party/abseil-cpp/absl/container/internal/btree.h +132 -29
- data/third_party/abseil-cpp/absl/container/internal/btree_container.h +175 -71
- data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
- data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +9 -10
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
- data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
- data/third_party/abseil-cpp/absl/container/internal/layout.h +26 -42
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1354 -183
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +881 -1424
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
- data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
- data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
- data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
- data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
- data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
- data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
- data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
- data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +19 -9
- data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
- data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
- data/third_party/abseil-cpp/absl/flags/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/flag.h +4 -3
- data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
- data/third_party/abseil-cpp/absl/flags/internal/flag.cc +2 -1
- data/third_party/abseil-cpp/absl/flags/internal/flag.h +7 -6
- data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
- data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
- data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
- data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
- data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
- data/third_party/abseil-cpp/absl/hash/hash.h +18 -0
- data/third_party/abseil-cpp/absl/hash/internal/hash.cc +1 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +86 -61
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +25 -68
- data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
- data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
- data/third_party/abseil-cpp/absl/log/check.h +2 -1
- data/third_party/abseil-cpp/absl/log/globals.h +4 -5
- data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
- data/third_party/abseil-cpp/absl/log/internal/check_op.cc +22 -22
- data/third_party/abseil-cpp/absl/log/internal/check_op.h +65 -62
- data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
- data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
- data/third_party/abseil-cpp/absl/log/internal/log_message.cc +85 -43
- data/third_party/abseil-cpp/absl/log/internal/log_message.h +84 -59
- data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
- data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -2
- data/third_party/abseil-cpp/absl/log/internal/proto.h +3 -3
- data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
- data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
- data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
- data/third_party/abseil-cpp/absl/log/log.h +48 -35
- data/third_party/abseil-cpp/absl/log/log_sink_registry.h +2 -2
- data/third_party/abseil-cpp/absl/meta/type_traits.h +46 -175
- data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
- data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
- data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
- data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
- data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
- data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
- data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
- data/third_party/abseil-cpp/absl/random/random.h +88 -53
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
- data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
- data/third_party/abseil-cpp/absl/status/status.cc +4 -8
- data/third_party/abseil-cpp/absl/status/status.h +8 -8
- data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
- data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
- data/third_party/abseil-cpp/absl/strings/ascii.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/ascii.h +18 -18
- data/third_party/abseil-cpp/absl/strings/charconv.cc +21 -22
- data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
- data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
- data/third_party/abseil-cpp/absl/strings/cord.h +94 -83
- data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
- data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
- data/third_party/abseil-cpp/absl/strings/escaping.cc +130 -149
- data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +6 -8
- data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
- data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
- data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
- data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
- data/third_party/abseil-cpp/absl/strings/numbers.cc +53 -32
- data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
- data/third_party/abseil-cpp/absl/strings/str_cat.h +32 -32
- data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
- data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
- data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
- data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
- data/third_party/abseil-cpp/absl/strings/string_view.h +27 -32
- data/third_party/abseil-cpp/absl/strings/strip.h +4 -4
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
- data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
- data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
- data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +1 -1
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
- data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
- data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
- data/third_party/abseil-cpp/absl/time/duration.cc +12 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
- data/third_party/abseil-cpp/absl/time/time.h +20 -15
- data/third_party/abseil-cpp/absl/types/optional.h +7 -747
- data/third_party/abseil-cpp/absl/types/span.h +13 -11
- data/third_party/abseil-cpp/absl/types/variant.h +5 -784
- data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
- data/third_party/cares/cares/include/ares.h +925 -460
- data/third_party/cares/cares/include/ares_dns.h +86 -71
- data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
- data/third_party/cares/cares/include/ares_nameser.h +215 -189
- data/third_party/cares/cares/include/ares_version.h +37 -14
- data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
- data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
- data/third_party/cares/cares/src/lib/ares_android.c +216 -164
- data/third_party/cares/cares/src/lib/ares_android.h +25 -14
- data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
- data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
- data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
- data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
- data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
- data/third_party/cares/cares/src/lib/ares_data.c +93 -181
- data/third_party/cares/cares/src/lib/ares_data.h +50 -39
- data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
- data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
- data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
- data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
- data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
- data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
- data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
- data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
- data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
- data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
- data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
- data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
- data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
- data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
- data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
- data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
- data/third_party/cares/cares/src/lib/ares_options.c +418 -332
- data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
- data/third_party/cares/cares/src/lib/ares_private.h +558 -356
- data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
- data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
- data/third_party/cares/cares/src/lib/ares_query.c +126 -121
- data/third_party/cares/cares/src/lib/ares_search.c +564 -262
- data/third_party/cares/cares/src/lib/ares_send.c +264 -93
- data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
- data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
- data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
- data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
- data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
- data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
- data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
- data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
- data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
- data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
- data/third_party/cares/cares/src/lib/ares_version.c +29 -4
- data/third_party/cares/cares/src/lib/config-dos.h +88 -89
- data/third_party/cares/cares/src/lib/config-win32.h +122 -77
- data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
- data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
- data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
- data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
- data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
- data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
- data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
- data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
- data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
- data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
- data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
- data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
- data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
- data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
- data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
- data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
- data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
- data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
- data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
- data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
- data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
- data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
- data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
- data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
- data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
- data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
- data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
- data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
- data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
- data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
- data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
- data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
- data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
- data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
- data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
- data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
- data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
- data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
- data/third_party/cares/cares/src/lib/windows_port.c +16 -9
- metadata +192 -68
- data/src/core/lib/event_engine/forkable.cc +0 -105
- data/src/core/lib/event_engine/forkable.h +0 -67
- data/src/core/lib/iomgr/python_util.h +0 -46
- data/src/core/util/ring_buffer.h +0 -122
- data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
- data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
- data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
- data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
- data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
- data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
- data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
- data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
- data/third_party/cares/cares/include/ares_rules.h +0 -125
- data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
- data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
- data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
- data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
- data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
- data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
- data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
- data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
- data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
- data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
- data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
- data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
- data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
- data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
- data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
- data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
- data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
- data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
- data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
- data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
- data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
- data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
- data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
- data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
- data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
- data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
- data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
- data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
- data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
- data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
- data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
- data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
- data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
- data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
- data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
- data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
- data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
- data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
- data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
- data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
- data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
- data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
- data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
- data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
- data/third_party/cares/cares/src/lib/setup_once.h +0 -554
- data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -43,6 +43,7 @@ CoreConfiguration::CoreConfiguration(Builder* builder)
|
|
43
43
|
channel_init_(builder->channel_init_.Build()),
|
44
44
|
handshaker_registry_(builder->handshaker_registry_.Build()),
|
45
45
|
channel_creds_registry_(builder->channel_creds_registry_.Build()),
|
46
|
+
call_creds_registry_(builder->call_creds_registry_.Build()),
|
46
47
|
service_config_parser_(builder->service_config_parser_.Build()),
|
47
48
|
resolver_registry_(builder->resolver_registry_.Build()),
|
48
49
|
lb_policy_registry_(builder->lb_policy_registry_.Build()),
|
@@ -50,7 +51,9 @@ CoreConfiguration::CoreConfiguration(Builder* builder)
|
|
50
51
|
certificate_provider_registry_(
|
51
52
|
builder->certificate_provider_registry_.Build()),
|
52
53
|
endpoint_transport_registry_(
|
53
|
-
builder->endpoint_transport_registry_.Build())
|
54
|
+
builder->endpoint_transport_registry_.Build()),
|
55
|
+
auth_context_comparator_registry_(
|
56
|
+
builder->auth_context_comparator_registry_.Build()) {}
|
54
57
|
|
55
58
|
void CoreConfiguration::RegisterBuilder(
|
56
59
|
BuilderScope scope, absl::AnyInvocable<void(Builder*)> builder,
|
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
#include "absl/functional/any_invocable.h"
|
24
24
|
#include "absl/log/check.h"
|
25
|
+
#include "src/core/credentials/call/call_creds_registry.h"
|
25
26
|
#include "src/core/credentials/transport/channel_creds_registry.h"
|
26
27
|
#include "src/core/credentials/transport/tls/certificate_provider_registry.h"
|
27
28
|
#include "src/core/handshaker/handshaker_registry.h"
|
@@ -31,6 +32,7 @@
|
|
31
32
|
#include "src/core/load_balancing/lb_policy_registry.h"
|
32
33
|
#include "src/core/resolver/resolver_registry.h"
|
33
34
|
#include "src/core/service_config/service_config_parser.h"
|
35
|
+
#include "src/core/transport/auth_context_comparator_registry.h"
|
34
36
|
#include "src/core/transport/endpoint_transport.h"
|
35
37
|
#include "src/core/util/debug_location.h"
|
36
38
|
|
@@ -82,6 +84,10 @@ class GRPC_DLL CoreConfiguration {
|
|
82
84
|
return &channel_creds_registry_;
|
83
85
|
}
|
84
86
|
|
87
|
+
CallCredsRegistry<>::Builder* call_creds_registry() {
|
88
|
+
return &call_creds_registry_;
|
89
|
+
}
|
90
|
+
|
85
91
|
ServiceConfigParser::Builder* service_config_parser() {
|
86
92
|
return &service_config_parser_;
|
87
93
|
}
|
@@ -106,6 +112,10 @@ class GRPC_DLL CoreConfiguration {
|
|
106
112
|
return &endpoint_transport_registry_;
|
107
113
|
}
|
108
114
|
|
115
|
+
AuthContextComparatorRegistry::Builder* auth_context_comparator_registry() {
|
116
|
+
return &auth_context_comparator_registry_;
|
117
|
+
}
|
118
|
+
|
109
119
|
private:
|
110
120
|
friend class CoreConfiguration;
|
111
121
|
|
@@ -113,12 +123,14 @@ class GRPC_DLL CoreConfiguration {
|
|
113
123
|
ChannelInit::Builder channel_init_;
|
114
124
|
HandshakerRegistry::Builder handshaker_registry_;
|
115
125
|
ChannelCredsRegistry<>::Builder channel_creds_registry_;
|
126
|
+
CallCredsRegistry<>::Builder call_creds_registry_;
|
116
127
|
ServiceConfigParser::Builder service_config_parser_;
|
117
128
|
ResolverRegistry::Builder resolver_registry_;
|
118
129
|
LoadBalancingPolicyRegistry::Builder lb_policy_registry_;
|
119
130
|
ProxyMapperRegistry::Builder proxy_mapper_registry_;
|
120
131
|
CertificateProviderRegistry::Builder certificate_provider_registry_;
|
121
132
|
EndpointTransportRegistry::Builder endpoint_transport_registry_;
|
133
|
+
AuthContextComparatorRegistry::Builder auth_context_comparator_registry_;
|
122
134
|
|
123
135
|
Builder();
|
124
136
|
CoreConfiguration* Build();
|
@@ -241,6 +253,10 @@ class GRPC_DLL CoreConfiguration {
|
|
241
253
|
return channel_creds_registry_;
|
242
254
|
}
|
243
255
|
|
256
|
+
const CallCredsRegistry<>& call_creds_registry() const {
|
257
|
+
return call_creds_registry_;
|
258
|
+
}
|
259
|
+
|
244
260
|
const ServiceConfigParser& service_config_parser() const {
|
245
261
|
return service_config_parser_;
|
246
262
|
}
|
@@ -265,6 +281,11 @@ class GRPC_DLL CoreConfiguration {
|
|
265
281
|
return endpoint_transport_registry_;
|
266
282
|
}
|
267
283
|
|
284
|
+
const AuthContextComparatorRegistry& auth_context_comparator_registry()
|
285
|
+
const {
|
286
|
+
return auth_context_comparator_registry_;
|
287
|
+
}
|
288
|
+
|
268
289
|
static void SetDefaultBuilder(void (*builder)(CoreConfiguration::Builder*)) {
|
269
290
|
default_builder_ = builder;
|
270
291
|
}
|
@@ -292,12 +313,14 @@ class GRPC_DLL CoreConfiguration {
|
|
292
313
|
ChannelInit channel_init_;
|
293
314
|
HandshakerRegistry handshaker_registry_;
|
294
315
|
ChannelCredsRegistry<> channel_creds_registry_;
|
316
|
+
CallCredsRegistry<> call_creds_registry_;
|
295
317
|
ServiceConfigParser service_config_parser_;
|
296
318
|
ResolverRegistry resolver_registry_;
|
297
319
|
LoadBalancingPolicyRegistry lb_policy_registry_;
|
298
320
|
ProxyMapperRegistry proxy_mapper_registry_;
|
299
321
|
CertificateProviderRegistry certificate_provider_registry_;
|
300
322
|
EndpointTransportRegistry endpoint_transport_registry_;
|
323
|
+
AuthContextComparatorRegistry auth_context_comparator_registry_;
|
301
324
|
};
|
302
325
|
|
303
326
|
template <typename Sink>
|
@@ -0,0 +1,125 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2025 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_SRC_CORE_CREDENTIALS_CALL_CALL_CREDS_REGISTRY_H
|
18
|
+
#define GRPC_SRC_CORE_CREDENTIALS_CALL_CALL_CREDS_REGISTRY_H
|
19
|
+
|
20
|
+
#include <map>
|
21
|
+
#include <memory>
|
22
|
+
#include <type_traits>
|
23
|
+
#include <utility>
|
24
|
+
|
25
|
+
#include "absl/strings/string_view.h"
|
26
|
+
#include "src/core/util/json/json.h"
|
27
|
+
#include "src/core/util/json/json_args.h"
|
28
|
+
#include "src/core/util/ref_counted.h"
|
29
|
+
#include "src/core/util/ref_counted_ptr.h"
|
30
|
+
#include "src/core/util/validation_errors.h"
|
31
|
+
|
32
|
+
struct grpc_call_credentials;
|
33
|
+
|
34
|
+
namespace grpc_core {
|
35
|
+
|
36
|
+
class CallCredsConfig : public RefCounted<CallCredsConfig> {
|
37
|
+
public:
|
38
|
+
virtual absl::string_view type() const = 0;
|
39
|
+
|
40
|
+
virtual bool Equals(const CallCredsConfig& other) const = 0;
|
41
|
+
|
42
|
+
virtual std::string ToString() const = 0;
|
43
|
+
};
|
44
|
+
|
45
|
+
template <typename T = grpc_call_credentials>
|
46
|
+
class CallCredsFactory final {
|
47
|
+
public:
|
48
|
+
virtual ~CallCredsFactory() {}
|
49
|
+
virtual absl::string_view type() const = delete;
|
50
|
+
virtual RefCountedPtr<CallCredsConfig> ParseConfig(
|
51
|
+
const Json& config, const JsonArgs& args,
|
52
|
+
ValidationErrors* errors) const = delete;
|
53
|
+
virtual RefCountedPtr<T> CreateCallCreds(
|
54
|
+
RefCountedPtr<CallCredsConfig> config) const = delete;
|
55
|
+
};
|
56
|
+
|
57
|
+
template <>
|
58
|
+
class CallCredsFactory<grpc_call_credentials> {
|
59
|
+
public:
|
60
|
+
virtual ~CallCredsFactory() {}
|
61
|
+
virtual absl::string_view type() const = 0;
|
62
|
+
virtual RefCountedPtr<CallCredsConfig> ParseConfig(
|
63
|
+
const Json& config, const JsonArgs& args,
|
64
|
+
ValidationErrors* errors) const = 0;
|
65
|
+
virtual RefCountedPtr<grpc_call_credentials> CreateCallCreds(
|
66
|
+
RefCountedPtr<CallCredsConfig> config) const = 0;
|
67
|
+
};
|
68
|
+
|
69
|
+
template <typename T = grpc_call_credentials>
|
70
|
+
class CallCredsRegistry {
|
71
|
+
private:
|
72
|
+
using FactoryMap =
|
73
|
+
std::map<absl::string_view, std::unique_ptr<CallCredsFactory<T>>>;
|
74
|
+
|
75
|
+
public:
|
76
|
+
static_assert(std::is_base_of<grpc_call_credentials, T>::value,
|
77
|
+
"CallCredsRegistry must be instantiated with "
|
78
|
+
"grpc_call_credentials.");
|
79
|
+
|
80
|
+
class Builder {
|
81
|
+
public:
|
82
|
+
void RegisterCallCredsFactory(
|
83
|
+
std::unique_ptr<CallCredsFactory<T>> factory) {
|
84
|
+
absl::string_view type = factory->type();
|
85
|
+
factories_[type] = std::move(factory);
|
86
|
+
}
|
87
|
+
CallCredsRegistry Build() {
|
88
|
+
return CallCredsRegistry<T>(std::move(factories_));
|
89
|
+
}
|
90
|
+
|
91
|
+
private:
|
92
|
+
FactoryMap factories_;
|
93
|
+
};
|
94
|
+
|
95
|
+
bool IsSupported(absl::string_view type) const {
|
96
|
+
return factories_.find(type) != factories_.end();
|
97
|
+
}
|
98
|
+
|
99
|
+
RefCountedPtr<CallCredsConfig> ParseConfig(absl::string_view type,
|
100
|
+
const Json& config,
|
101
|
+
const JsonArgs& args,
|
102
|
+
ValidationErrors* errors) const {
|
103
|
+
const auto it = factories_.find(type);
|
104
|
+
if (it == factories_.cend()) return nullptr;
|
105
|
+
return it->second->ParseConfig(config, args, errors);
|
106
|
+
}
|
107
|
+
|
108
|
+
RefCountedPtr<T> CreateCallCreds(
|
109
|
+
RefCountedPtr<CallCredsConfig> config) const {
|
110
|
+
if (config == nullptr) return nullptr;
|
111
|
+
const auto it = factories_.find(config->type());
|
112
|
+
if (it == factories_.cend()) return nullptr;
|
113
|
+
return it->second->CreateCallCreds(std::move(config));
|
114
|
+
}
|
115
|
+
|
116
|
+
private:
|
117
|
+
explicit CallCredsRegistry(FactoryMap factories)
|
118
|
+
: factories_(std::move(factories)) {}
|
119
|
+
|
120
|
+
FactoryMap factories_;
|
121
|
+
};
|
122
|
+
|
123
|
+
} // namespace grpc_core
|
124
|
+
|
125
|
+
#endif // GRPC_SRC_CORE_CREDENTIALS_CALL_CALL_CREDS_REGISTRY_H
|
@@ -0,0 +1,91 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2025 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/credentials.h>
|
18
|
+
#include <grpc/grpc.h>
|
19
|
+
#include <grpc/grpc_security.h>
|
20
|
+
#include <grpc/support/json.h>
|
21
|
+
|
22
|
+
#include <memory>
|
23
|
+
#include <string>
|
24
|
+
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
#include "absl/strings/string_view.h"
|
27
|
+
#include "src/core/config/core_configuration.h"
|
28
|
+
#include "src/core/credentials/call/call_credentials.h"
|
29
|
+
#include "src/core/credentials/call/call_creds_registry.h"
|
30
|
+
#include "src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h"
|
31
|
+
#include "src/core/util/down_cast.h"
|
32
|
+
#include "src/core/util/json/json.h"
|
33
|
+
#include "src/core/util/json/json_args.h"
|
34
|
+
#include "src/core/util/json/json_object_loader.h"
|
35
|
+
#include "src/core/util/ref_counted_ptr.h"
|
36
|
+
#include "src/core/util/validation_errors.h"
|
37
|
+
|
38
|
+
namespace grpc_core {
|
39
|
+
|
40
|
+
class JwtTokenFileCallCredsFactory : public CallCredsFactory<> {
|
41
|
+
public:
|
42
|
+
absl::string_view type() const override { return Type(); }
|
43
|
+
|
44
|
+
RefCountedPtr<CallCredsConfig> ParseConfig(
|
45
|
+
const Json& config, const JsonArgs& args,
|
46
|
+
ValidationErrors* errors) const override {
|
47
|
+
return LoadFromJson<RefCountedPtr<Config>>(config, args, errors);
|
48
|
+
}
|
49
|
+
|
50
|
+
RefCountedPtr<grpc_call_credentials> CreateCallCreds(
|
51
|
+
RefCountedPtr<CallCredsConfig> base_config) const override {
|
52
|
+
auto* config = DownCast<const Config*>(base_config.get());
|
53
|
+
return MakeRefCounted<JwtTokenFileCallCredentials>(config->path());
|
54
|
+
}
|
55
|
+
|
56
|
+
private:
|
57
|
+
class Config : public CallCredsConfig {
|
58
|
+
public:
|
59
|
+
absl::string_view type() const override { return Type(); }
|
60
|
+
|
61
|
+
bool Equals(const CallCredsConfig& other) const override {
|
62
|
+
auto& o = DownCast<const Config&>(other);
|
63
|
+
return path_ == o.path_;
|
64
|
+
}
|
65
|
+
|
66
|
+
std::string ToString() const override {
|
67
|
+
return absl::StrCat("{path=\"", path_, "\"}");
|
68
|
+
}
|
69
|
+
|
70
|
+
const std::string& path() const { return path_; }
|
71
|
+
|
72
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
73
|
+
static const auto* loader = JsonObjectLoader<Config>()
|
74
|
+
.Field("jwt_token_file", &Config::path_)
|
75
|
+
.Finish();
|
76
|
+
return loader;
|
77
|
+
}
|
78
|
+
|
79
|
+
private:
|
80
|
+
std::string path_;
|
81
|
+
};
|
82
|
+
|
83
|
+
static absl::string_view Type() { return "jwt_token_file"; }
|
84
|
+
};
|
85
|
+
|
86
|
+
void RegisterDefaultCallCreds(CoreConfiguration::Builder* builder) {
|
87
|
+
builder->call_creds_registry()->RegisterCallCredsFactory(
|
88
|
+
std::make_unique<JwtTokenFileCallCredsFactory>());
|
89
|
+
}
|
90
|
+
|
91
|
+
} // namespace grpc_core
|
@@ -16,23 +16,16 @@
|
|
16
16
|
|
17
17
|
#include "src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h"
|
18
18
|
|
19
|
-
#include <grpc/support/time.h>
|
20
|
-
|
21
19
|
#include "absl/functional/any_invocable.h"
|
22
20
|
#include "absl/status/status.h"
|
23
21
|
#include "absl/status/statusor.h"
|
24
|
-
#include "absl/strings/escaping.h"
|
25
22
|
#include "absl/strings/str_cat.h"
|
26
|
-
#include "absl/strings/str_split.h"
|
27
23
|
#include "absl/strings/string_view.h"
|
28
24
|
#include "src/core/call/metadata.h"
|
25
|
+
#include "src/core/credentials/call/jwt_util.h"
|
29
26
|
#include "src/core/credentials/transport/transport_credentials.h"
|
30
27
|
#include "src/core/lib/iomgr/error.h"
|
31
28
|
#include "src/core/lib/transport/status_conversion.h"
|
32
|
-
#include "src/core/util/json/json.h"
|
33
|
-
#include "src/core/util/json/json_args.h"
|
34
|
-
#include "src/core/util/json/json_object_loader.h"
|
35
|
-
#include "src/core/util/json/json_reader.h"
|
36
29
|
#include "src/core/util/ref_counted_ptr.h"
|
37
30
|
#include "src/core/util/status_helper.h"
|
38
31
|
#include "src/core/util/uri.h"
|
@@ -88,51 +81,16 @@ class JwtTokenFetcherCallCredentials::HttpFetchRequest final
|
|
88
81
|
self->response_.status)));
|
89
82
|
return;
|
90
83
|
}
|
84
|
+
// Return token object.
|
91
85
|
absl::string_view body(self->response_.body, self->response_.body_length);
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
// First, split the 3 '.'-delimited parts.
|
96
|
-
std::vector<absl::string_view> parts = absl::StrSplit(body, '.');
|
97
|
-
if (parts.size() != 3) {
|
98
|
-
self->on_done_(absl::UnauthenticatedError("error parsing JWT token"));
|
99
|
-
return;
|
100
|
-
}
|
101
|
-
// Base64-decode the payload.
|
102
|
-
std::string payload;
|
103
|
-
if (!absl::WebSafeBase64Unescape(parts[1], &payload)) {
|
104
|
-
self->on_done_(absl::UnauthenticatedError("error parsing JWT token"));
|
105
|
-
return;
|
106
|
-
}
|
107
|
-
// Parse as JSON.
|
108
|
-
auto json = JsonParse(payload);
|
109
|
-
if (!json.ok()) {
|
110
|
-
self->on_done_(absl::UnauthenticatedError("error parsing JWT token"));
|
86
|
+
auto expiration_time = GetJwtExpirationTime(body);
|
87
|
+
if (!expiration_time.ok()) {
|
88
|
+
self->on_done_(expiration_time.status());
|
111
89
|
return;
|
112
90
|
}
|
113
|
-
// Extract "exp" field.
|
114
|
-
struct ParsedPayload {
|
115
|
-
uint64_t exp = 0;
|
116
|
-
|
117
|
-
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
118
|
-
static const auto kJsonLoader = JsonObjectLoader<ParsedPayload>()
|
119
|
-
.Field("exp", &ParsedPayload::exp)
|
120
|
-
.Finish();
|
121
|
-
return kJsonLoader;
|
122
|
-
}
|
123
|
-
};
|
124
|
-
auto parsed_payload = LoadFromJson<ParsedPayload>(*json, JsonArgs(), "");
|
125
|
-
if (!parsed_payload.ok()) {
|
126
|
-
self->on_done_(absl::UnauthenticatedError("error parsing JWT token"));
|
127
|
-
return;
|
128
|
-
}
|
129
|
-
gpr_timespec ts = gpr_time_0(GPR_CLOCK_REALTIME);
|
130
|
-
ts.tv_sec = parsed_payload->exp;
|
131
|
-
Timestamp expiration_time = Timestamp::FromTimespecRoundDown(ts);
|
132
|
-
// Return token object.
|
133
91
|
self->on_done_(MakeRefCounted<Token>(
|
134
92
|
Slice::FromCopiedString(absl::StrCat("Bearer ", body)),
|
135
|
-
expiration_time));
|
93
|
+
*expiration_time));
|
136
94
|
}
|
137
95
|
|
138
96
|
OrphanablePtr<HttpRequest> http_request_;
|
@@ -0,0 +1,86 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2025 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 "src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h"
|
18
|
+
|
19
|
+
#include "absl/status/status.h"
|
20
|
+
#include "absl/strings/str_cat.h"
|
21
|
+
#include "src/core/credentials/call/jwt_util.h"
|
22
|
+
#include "src/core/util/load_file.h"
|
23
|
+
|
24
|
+
namespace grpc_core {
|
25
|
+
|
26
|
+
class JwtTokenFileCallCredentials::FileReader final
|
27
|
+
: public TokenFetcherCredentials::FetchRequest {
|
28
|
+
public:
|
29
|
+
FileReader(JwtTokenFileCallCredentials* creds,
|
30
|
+
absl::AnyInvocable<void(
|
31
|
+
absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
|
32
|
+
on_done)
|
33
|
+
: creds_(creds), on_done_(std::move(on_done)) {
|
34
|
+
creds->event_engine().Run([self = RefAsSubclass<FileReader>()]() {
|
35
|
+
ExecCtx exec_ctx;
|
36
|
+
self->ReadFile();
|
37
|
+
});
|
38
|
+
}
|
39
|
+
|
40
|
+
void Orphan() override {
|
41
|
+
// Can't really do anything to cancel in this case.
|
42
|
+
Unref();
|
43
|
+
}
|
44
|
+
|
45
|
+
private:
|
46
|
+
void ReadFile() {
|
47
|
+
auto contents = LoadFile(creds_->path_, /*add_null_terminator=*/false);
|
48
|
+
if (!contents.ok()) {
|
49
|
+
on_done_(absl::UnavailableError(contents.status().message()));
|
50
|
+
return;
|
51
|
+
}
|
52
|
+
absl::string_view body = contents->as_string_view();
|
53
|
+
auto expiration_time = GetJwtExpirationTime(body);
|
54
|
+
if (!expiration_time.ok()) {
|
55
|
+
on_done_(expiration_time.status());
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
on_done_(MakeRefCounted<Token>(
|
59
|
+
Slice::FromCopiedString(absl::StrCat("Bearer ", body)),
|
60
|
+
*expiration_time));
|
61
|
+
}
|
62
|
+
|
63
|
+
JwtTokenFileCallCredentials* creds_;
|
64
|
+
absl::AnyInvocable<void(
|
65
|
+
absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
|
66
|
+
on_done_;
|
67
|
+
};
|
68
|
+
|
69
|
+
std::string JwtTokenFileCallCredentials::debug_string() {
|
70
|
+
return absl::StrCat("JwtTokenFileCallCredentials(", path_, ")");
|
71
|
+
}
|
72
|
+
|
73
|
+
UniqueTypeName JwtTokenFileCallCredentials::Type() {
|
74
|
+
return GRPC_UNIQUE_TYPE_NAME_HERE("JwtTokenFile");
|
75
|
+
}
|
76
|
+
|
77
|
+
OrphanablePtr<TokenFetcherCredentials::FetchRequest>
|
78
|
+
JwtTokenFileCallCredentials::FetchToken(
|
79
|
+
Timestamp /*deadline*/,
|
80
|
+
absl::AnyInvocable<
|
81
|
+
void(absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
|
82
|
+
on_done) {
|
83
|
+
return MakeOrphanable<FileReader>(this, std::move(on_done));
|
84
|
+
}
|
85
|
+
|
86
|
+
} // namespace grpc_core
|
@@ -0,0 +1,74 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2025 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_SRC_CORE_CREDENTIALS_CALL_JWT_TOKEN_FILE_JWT_TOKEN_FILE_CALL_CREDENTIALS_H
|
18
|
+
#define GRPC_SRC_CORE_CREDENTIALS_CALL_JWT_TOKEN_FILE_JWT_TOKEN_FILE_CALL_CREDENTIALS_H
|
19
|
+
|
20
|
+
#include <grpc/credentials.h>
|
21
|
+
#include <grpc/grpc_security.h>
|
22
|
+
|
23
|
+
#include <string>
|
24
|
+
|
25
|
+
#include "absl/functional/any_invocable.h"
|
26
|
+
#include "absl/status/statusor.h"
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
#include "src/core/credentials/call/call_credentials.h"
|
29
|
+
#include "src/core/credentials/call/token_fetcher/token_fetcher_credentials.h"
|
30
|
+
#include "src/core/util/orphanable.h"
|
31
|
+
#include "src/core/util/ref_counted_ptr.h"
|
32
|
+
#include "src/core/util/time.h"
|
33
|
+
#include "src/core/util/unique_type_name.h"
|
34
|
+
|
35
|
+
namespace grpc_core {
|
36
|
+
|
37
|
+
// JWT token file call credentials.
|
38
|
+
// See gRFC A97 (https://github.com/grpc/proposal/pull/492).
|
39
|
+
class JwtTokenFileCallCredentials : public TokenFetcherCredentials {
|
40
|
+
public:
|
41
|
+
explicit JwtTokenFileCallCredentials(
|
42
|
+
absl::string_view path,
|
43
|
+
std::shared_ptr<grpc_event_engine::experimental::EventEngine>
|
44
|
+
event_engine = nullptr)
|
45
|
+
: TokenFetcherCredentials(std::move(event_engine)), path_(path) {}
|
46
|
+
|
47
|
+
std::string debug_string() override;
|
48
|
+
|
49
|
+
static UniqueTypeName Type();
|
50
|
+
|
51
|
+
UniqueTypeName type() const override { return Type(); }
|
52
|
+
|
53
|
+
absl::string_view path() const { return path_; }
|
54
|
+
|
55
|
+
private:
|
56
|
+
class FileReader;
|
57
|
+
|
58
|
+
OrphanablePtr<FetchRequest> FetchToken(
|
59
|
+
Timestamp /*deadline*/,
|
60
|
+
absl::AnyInvocable<
|
61
|
+
void(absl::StatusOr<RefCountedPtr<TokenFetcherCredentials::Token>>)>
|
62
|
+
on_done) final;
|
63
|
+
|
64
|
+
int cmp_impl(const grpc_call_credentials* other) const override {
|
65
|
+
// TODO(yashykt): Check if we can do something better here
|
66
|
+
return QsortCompare(static_cast<const grpc_call_credentials*>(this), other);
|
67
|
+
}
|
68
|
+
|
69
|
+
std::string path_;
|
70
|
+
};
|
71
|
+
|
72
|
+
} // namespace grpc_core
|
73
|
+
|
74
|
+
#endif // GRPC_SRC_CORE_CREDENTIALS_CALL_JWT_TOKEN_FILE_JWT_TOKEN_FILE_CALL_CREDENTIALS_H
|
@@ -0,0 +1,70 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2025 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 "src/core/credentials/call/jwt_util.h"
|
18
|
+
|
19
|
+
#include <grpc/support/time.h>
|
20
|
+
|
21
|
+
#include <string>
|
22
|
+
#include <vector>
|
23
|
+
|
24
|
+
#include "absl/status/status.h"
|
25
|
+
#include "absl/strings/escaping.h"
|
26
|
+
#include "absl/strings/str_split.h"
|
27
|
+
#include "src/core/util/json/json.h"
|
28
|
+
#include "src/core/util/json/json_args.h"
|
29
|
+
#include "src/core/util/json/json_object_loader.h"
|
30
|
+
#include "src/core/util/json/json_reader.h"
|
31
|
+
|
32
|
+
namespace grpc_core {
|
33
|
+
|
34
|
+
absl::StatusOr<Timestamp> GetJwtExpirationTime(absl::string_view jwt) {
|
35
|
+
// First, split the 3 '.'-delimited parts.
|
36
|
+
std::vector<absl::string_view> parts = absl::StrSplit(jwt, '.');
|
37
|
+
if (parts.size() != 3) {
|
38
|
+
return absl::UnauthenticatedError("error parsing JWT token");
|
39
|
+
}
|
40
|
+
// Base64-decode the payload.
|
41
|
+
std::string payload;
|
42
|
+
if (!absl::WebSafeBase64Unescape(parts[1], &payload)) {
|
43
|
+
return absl::UnauthenticatedError("error parsing JWT token");
|
44
|
+
}
|
45
|
+
// Parse as JSON.
|
46
|
+
auto json = JsonParse(payload);
|
47
|
+
if (!json.ok()) {
|
48
|
+
return absl::UnauthenticatedError("error parsing JWT token");
|
49
|
+
}
|
50
|
+
// Extract "exp" field.
|
51
|
+
struct ParsedPayload {
|
52
|
+
uint64_t exp = 0;
|
53
|
+
|
54
|
+
static const JsonLoaderInterface* JsonLoader(const JsonArgs&) {
|
55
|
+
static const auto kJsonLoader = JsonObjectLoader<ParsedPayload>()
|
56
|
+
.Field("exp", &ParsedPayload::exp)
|
57
|
+
.Finish();
|
58
|
+
return kJsonLoader;
|
59
|
+
}
|
60
|
+
};
|
61
|
+
auto parsed_payload = LoadFromJson<ParsedPayload>(*json, JsonArgs(), "");
|
62
|
+
if (!parsed_payload.ok()) {
|
63
|
+
return absl::UnauthenticatedError("error parsing JWT token");
|
64
|
+
}
|
65
|
+
gpr_timespec ts = gpr_time_0(GPR_CLOCK_REALTIME);
|
66
|
+
ts.tv_sec = parsed_payload->exp;
|
67
|
+
return Timestamp::FromTimespecRoundDown(ts);
|
68
|
+
}
|
69
|
+
|
70
|
+
} // namespace grpc_core
|
@@ -0,0 +1,32 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2025 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_SRC_CORE_CREDENTIALS_CALL_JWT_UTIL_H
|
18
|
+
#define GRPC_SRC_CORE_CREDENTIALS_CALL_JWT_UTIL_H
|
19
|
+
|
20
|
+
#include "absl/status/statusor.h"
|
21
|
+
#include "absl/strings/string_view.h"
|
22
|
+
#include "src/core/util/time.h"
|
23
|
+
|
24
|
+
namespace grpc_core {
|
25
|
+
|
26
|
+
// Extract the expiration time from a JWT token based on
|
27
|
+
// https://datatracker.ietf.org/doc/html/rfc7519.
|
28
|
+
absl::StatusOr<Timestamp> GetJwtExpirationTime(absl::string_view jwt);
|
29
|
+
|
30
|
+
} // namespace grpc_core
|
31
|
+
|
32
|
+
#endif // GRPC_SRC_CORE_CREDENTIALS_CALL_JWT_UTIL_H
|