grpc 1.73.0 → 1.74.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 +38 -17
- data/include/grpc/create_channel_from_endpoint.h +54 -0
- data/include/grpc/credentials.h +11 -5
- 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/interception_chain.h +7 -11
- data/src/core/channelz/channel_trace.cc +213 -115
- data/src/core/channelz/channel_trace.h +380 -86
- data/src/core/channelz/channelz.cc +270 -181
- data/src/core/channelz/channelz.h +168 -55
- data/src/core/channelz/channelz_registry.cc +2 -1
- data/src/core/channelz/channelz_registry.h +24 -0
- data/src/core/channelz/property_list.cc +357 -0
- data/src/core/channelz/property_list.h +202 -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 +19 -29
- 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/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 +43 -19
- data/src/core/client_channel/subchannel.h +8 -0
- data/src/core/config/config_vars.cc +2 -0
- data/src/core/config/core_configuration.cc +1 -0
- data/src/core/config/core_configuration.h +11 -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/channel_creds_registry_init.cc +1 -1
- data/src/core/credentials/transport/google_default/google_default_credentials.cc +72 -4
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +0 -1
- data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -0
- data/src/core/credentials/transport/xds/xds_credentials.cc +0 -3
- 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_authority_filter.cc +2 -4
- data/src/core/ext/filters/http/message_compress/compression_filter.h +25 -22
- data/src/core/ext/filters/http/server/http_server_filter.h +12 -11
- 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 +162 -115
- 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.h +22 -17
- data/src/core/ext/transport/chttp2/transport/frame.cc +10 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +2 -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 +299 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +1 -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 +1017 -0
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +593 -0
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +19 -22
- 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 +43 -0
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +65 -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 +2 -4
- data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +19 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +151 -0
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +180 -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_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/writing.cc +37 -11
- 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 +984 -0
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +226 -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/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 +135 -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 +0 -25
- data/src/core/filter/auth/client_auth_filter.cc +0 -118
- data/src/core/filter/filter_args.h +9 -23
- 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 +6 -5
- data/src/core/handshaker/security/secure_endpoint.cc +70 -25
- 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.h +5 -5
- 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 +48 -2
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +1 -4
- data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +2 -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 +130 -162
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +11 -15
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +75 -117
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -9
- data/src/core/lib/event_engine/posix_engine/event_poller.h +18 -15
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +0 -18
- 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 +29 -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/posix_endpoint.cc +145 -92
- data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -19
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +333 -116
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +61 -18
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +45 -37
- 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 +10 -170
- 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 +4 -0
- 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 +45 -93
- data/src/core/lib/experiments/experiments.h +21 -51
- 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/tcp_posix.cc +12 -6
- data/src/core/lib/iomgr/tcp_windows.cc +3 -2
- data/src/core/lib/promise/activity.h +1 -0
- 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 +50 -1
- data/src/core/lib/promise/party.h +66 -1
- 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/slice/slice.h +5 -0
- 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/filter_stack_call.cc +18 -9
- 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/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 +3 -0
- data/src/core/load_balancing/xds/cds.cc +10 -1
- data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
- 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 +21 -6
- 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 +83 -12
- data/src/core/server/server.h +21 -2
- 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_impl.h +1 -1
- data/src/core/telemetry/context_list_entry.cc +38 -0
- data/src/core/telemetry/context_list_entry.h +42 -12
- data/src/core/telemetry/stats_data.cc +233 -207
- data/src/core/telemetry/stats_data.h +250 -153
- data/src/core/telemetry/tcp_tracer.h +1 -1
- 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 +2 -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/latent_see.h +8 -5
- 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 +2 -2
- data/src/core/util/upb_utils.h +42 -0
- data/src/core/util/uri.cc +3 -2
- data/src/core/util/useful.h +53 -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/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_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 +72 -568
- 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 +1 -1
- 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
- metadata +72 -20
- 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/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
@@ -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
|
@@ -57,7 +57,7 @@ class GoogleDefaultChannelCredsFactory : public ChannelCredsFactory<> {
|
|
57
57
|
RefCountedPtr<grpc_channel_credentials> CreateChannelCreds(
|
58
58
|
RefCountedPtr<ChannelCredsConfig> /*config*/) const override {
|
59
59
|
return RefCountedPtr<grpc_channel_credentials>(
|
60
|
-
grpc_google_default_credentials_create(nullptr));
|
60
|
+
grpc_google_default_credentials_create(nullptr, nullptr));
|
61
61
|
}
|
62
62
|
|
63
63
|
private:
|
@@ -42,6 +42,7 @@
|
|
42
42
|
#include "src/core/credentials/call/jwt/json_token.h"
|
43
43
|
#include "src/core/credentials/call/jwt/jwt_credentials.h"
|
44
44
|
#include "src/core/credentials/call/oauth2/oauth2_credentials.h"
|
45
|
+
#include "src/core/credentials/transport/alts/alts_security_connector.h"
|
45
46
|
#include "src/core/credentials/transport/alts/check_gcp_environment.h"
|
46
47
|
#include "src/core/credentials/transport/transport_credentials.h"
|
47
48
|
#include "src/core/lib/channel/channel_args.h"
|
@@ -338,6 +339,65 @@ static bool metadata_server_available() {
|
|
338
339
|
return static_cast<bool>(g_metadata_server_available);
|
339
340
|
}
|
340
341
|
|
342
|
+
// A grpc_call_credentials implementation that uses two
|
343
|
+
// underlying credentials: one for TLS and one for ALTS.
|
344
|
+
// The implementation will pick the right credentials based on the auth
|
345
|
+
// context's GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME property.
|
346
|
+
class GoogleDefaultCallCredentialsWrapper : public grpc_call_credentials {
|
347
|
+
public:
|
348
|
+
GoogleDefaultCallCredentialsWrapper(
|
349
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> tls_credentials,
|
350
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> alts_credentials)
|
351
|
+
: tls_credentials_(std::move(tls_credentials)),
|
352
|
+
alts_credentials_(std::move(alts_credentials)) {};
|
353
|
+
|
354
|
+
void Orphaned() override {
|
355
|
+
tls_credentials_.reset();
|
356
|
+
alts_credentials_.reset();
|
357
|
+
}
|
358
|
+
|
359
|
+
static grpc_core::UniqueTypeName Type() {
|
360
|
+
static grpc_core::UniqueTypeName::Factory kFactory("Dual");
|
361
|
+
return kFactory.Create();
|
362
|
+
}
|
363
|
+
|
364
|
+
grpc_core::UniqueTypeName type() const override { return Type(); }
|
365
|
+
|
366
|
+
grpc_core::ArenaPromise<absl::StatusOr<grpc_core::ClientMetadataHandle>>
|
367
|
+
GetRequestMetadata(grpc_core::ClientMetadataHandle initial_metadata,
|
368
|
+
const GetRequestMetadataArgs* args) override {
|
369
|
+
bool use_alts = false;
|
370
|
+
if (args != nullptr) {
|
371
|
+
auto auth_context = args->auth_context;
|
372
|
+
if (auth_context != nullptr &&
|
373
|
+
grpc_auth_context_peer_is_authenticated(auth_context.get()) == 1) {
|
374
|
+
// This channel is authenticated.
|
375
|
+
grpc_auth_property_iterator property_it =
|
376
|
+
grpc_auth_context_find_properties_by_name(
|
377
|
+
auth_context.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME);
|
378
|
+
const grpc_auth_property* property =
|
379
|
+
grpc_auth_property_iterator_next(&property_it);
|
380
|
+
use_alts =
|
381
|
+
property != nullptr &&
|
382
|
+
strcmp(property->value, GRPC_ALTS_TRANSPORT_SECURITY_TYPE) == 0;
|
383
|
+
}
|
384
|
+
}
|
385
|
+
return (use_alts ? alts_credentials_ : tls_credentials_)
|
386
|
+
->GetRequestMetadata(std::move(initial_metadata), args);
|
387
|
+
}
|
388
|
+
|
389
|
+
private:
|
390
|
+
int cmp_impl(const grpc_call_credentials* other) const override {
|
391
|
+
return QsortCompare(static_cast<const grpc_call_credentials*>(this), other);
|
392
|
+
}
|
393
|
+
std::string debug_string() override {
|
394
|
+
return "GoogleDefaultCallCredentialsWrapper";
|
395
|
+
}
|
396
|
+
|
397
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> tls_credentials_;
|
398
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> alts_credentials_;
|
399
|
+
};
|
400
|
+
|
341
401
|
static grpc_core::RefCountedPtr<grpc_call_credentials> make_default_call_creds(
|
342
402
|
grpc_error_handle* error) {
|
343
403
|
grpc_core::RefCountedPtr<grpc_call_credentials> call_creds;
|
@@ -373,14 +433,16 @@ static grpc_core::RefCountedPtr<grpc_call_credentials> make_default_call_creds(
|
|
373
433
|
}
|
374
434
|
|
375
435
|
grpc_channel_credentials* grpc_google_default_credentials_create(
|
376
|
-
grpc_call_credentials*
|
436
|
+
grpc_call_credentials* call_creds_for_tls,
|
437
|
+
grpc_call_credentials* call_creds_for_alts) {
|
377
438
|
grpc_channel_credentials* result = nullptr;
|
378
|
-
grpc_core::RefCountedPtr<grpc_call_credentials> call_creds(
|
439
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> call_creds(
|
440
|
+
call_creds_for_tls);
|
379
441
|
grpc_error_handle error;
|
380
442
|
grpc_core::ExecCtx exec_ctx;
|
381
443
|
|
382
444
|
GRPC_TRACE_LOG(api, INFO)
|
383
|
-
<< "grpc_google_default_credentials_create(" <<
|
445
|
+
<< "grpc_google_default_credentials_create(" << call_creds_for_tls << ")";
|
384
446
|
|
385
447
|
if (call_creds == nullptr) {
|
386
448
|
call_creds = make_default_call_creds(&error);
|
@@ -400,6 +462,13 @@ grpc_channel_credentials* grpc_google_default_credentials_create(
|
|
400
462
|
grpc_core::MakeRefCounted<grpc_google_default_channel_credentials>(
|
401
463
|
grpc_core::RefCountedPtr<grpc_channel_credentials>(alts_creds),
|
402
464
|
grpc_core::RefCountedPtr<grpc_channel_credentials>(ssl_creds));
|
465
|
+
if (call_creds_for_alts != nullptr) {
|
466
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> alts_call_creds(
|
467
|
+
call_creds_for_alts);
|
468
|
+
call_creds =
|
469
|
+
grpc_core::MakeRefCounted<GoogleDefaultCallCredentialsWrapper>(
|
470
|
+
std::move(call_creds), std::move(alts_call_creds));
|
471
|
+
}
|
403
472
|
result = grpc_composite_channel_credentials_create(
|
404
473
|
creds.get(), call_creds.get(), nullptr);
|
405
474
|
CHECK_NE(result, nullptr);
|
@@ -412,7 +481,6 @@ grpc_channel_credentials* grpc_google_default_credentials_create(
|
|
412
481
|
|
413
482
|
namespace grpc_core {
|
414
483
|
namespace internal {
|
415
|
-
|
416
484
|
void set_gce_tenancy_checker_for_testing(grpc_gce_tenancy_checker checker) {
|
417
485
|
g_gce_tenancy_checker = checker;
|
418
486
|
}
|
@@ -131,6 +131,7 @@ grpc_slice CreateRootCertsBundle(const char* certs_directory) {
|
|
131
131
|
} else {
|
132
132
|
LOG(ERROR) << "failed to read file: " << roots_filenames[i].path;
|
133
133
|
}
|
134
|
+
close(file_descriptor);
|
134
135
|
}
|
135
136
|
}
|
136
137
|
bundle_slice = grpc_slice_new(bundle_string, bytes_read, gpr_free);
|
@@ -134,9 +134,6 @@ RefCountedPtr<grpc_channel_security_connector>
|
|
134
134
|
XdsCredentials::create_security_connector(
|
135
135
|
RefCountedPtr<grpc_call_credentials> call_creds, const char* target_name,
|
136
136
|
ChannelArgs* args) {
|
137
|
-
// TODO(yashykt): This arg will no longer need to be added after b/173119596
|
138
|
-
// is fixed.
|
139
|
-
*args = args->SetIfUnset(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG, target_name);
|
140
137
|
RefCountedPtr<grpc_channel_security_connector> security_connector;
|
141
138
|
auto xds_certificate_provider = args->GetObjectRef<XdsCertificateProvider>();
|
142
139
|
if (xds_certificate_provider != nullptr) {
|
@@ -167,14 +167,14 @@ GcpAuthenticationFilter::Create(const ChannelArgs& args,
|
|
167
167
|
return absl::InvalidArgumentError(
|
168
168
|
"gcp_auth: xds config not found in channel args");
|
169
169
|
}
|
170
|
-
// Get
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
170
|
+
// Get cache from blackboard. This must have been populated
|
171
|
+
// previously by the XdsConfigSelector.
|
172
|
+
auto cache = filter_args.GetState<CallCredentialsCache>(
|
173
|
+
filter_config->filter_instance_name);
|
174
|
+
if (cache == nullptr) {
|
175
|
+
return absl::InvalidArgumentError(
|
176
|
+
"gcp_auth: cache object not found in filter state");
|
177
|
+
}
|
178
178
|
// Instantiate filter.
|
179
179
|
return std::unique_ptr<GcpAuthenticationFilter>(
|
180
180
|
new GcpAuthenticationFilter(std::move(service_config), filter_config,
|
@@ -42,6 +42,22 @@ namespace grpc_core {
|
|
42
42
|
class GcpAuthenticationFilter
|
43
43
|
: public ImplementChannelFilter<GcpAuthenticationFilter> {
|
44
44
|
public:
|
45
|
+
class CallCredentialsCache : public Blackboard::Entry {
|
46
|
+
public:
|
47
|
+
explicit CallCredentialsCache(size_t max_size) : cache_(max_size) {}
|
48
|
+
|
49
|
+
static UniqueTypeName Type();
|
50
|
+
|
51
|
+
void SetMaxSize(size_t max_size);
|
52
|
+
|
53
|
+
RefCountedPtr<grpc_call_credentials> Get(const std::string& audience);
|
54
|
+
|
55
|
+
private:
|
56
|
+
Mutex mu_;
|
57
|
+
LruCache<std::string /*audience*/, RefCountedPtr<grpc_call_credentials>>
|
58
|
+
cache_ ABSL_GUARDED_BY(&mu_);
|
59
|
+
};
|
60
|
+
|
45
61
|
static const grpc_channel_filter kFilter;
|
46
62
|
|
47
63
|
static absl::string_view TypeName() { return "gcp_authentication_filter"; }
|
@@ -62,22 +78,6 @@ class GcpAuthenticationFilter
|
|
62
78
|
};
|
63
79
|
|
64
80
|
private:
|
65
|
-
class CallCredentialsCache : public Blackboard::Entry {
|
66
|
-
public:
|
67
|
-
explicit CallCredentialsCache(size_t max_size) : cache_(max_size) {}
|
68
|
-
|
69
|
-
static UniqueTypeName Type();
|
70
|
-
|
71
|
-
void SetMaxSize(size_t max_size);
|
72
|
-
|
73
|
-
RefCountedPtr<grpc_call_credentials> Get(const std::string& audience);
|
74
|
-
|
75
|
-
private:
|
76
|
-
Mutex mu_;
|
77
|
-
LruCache<std::string /*audience*/, RefCountedPtr<grpc_call_credentials>>
|
78
|
-
cache_ ABSL_GUARDED_BY(&mu_);
|
79
|
-
};
|
80
|
-
|
81
81
|
GcpAuthenticationFilter(
|
82
82
|
RefCountedPtr<ServiceConfig> service_config,
|
83
83
|
const GcpAuthenticationParsedConfig::Config* filter_config,
|
@@ -73,13 +73,11 @@ void RegisterClientAuthorityFilter(CoreConfiguration::Builder* builder) {
|
|
73
73
|
builder->channel_init()
|
74
74
|
->RegisterFilter<ClientAuthorityFilter>(GRPC_CLIENT_SUBCHANNEL)
|
75
75
|
.If(NeedsClientAuthorityFilter)
|
76
|
-
.Before<ClientAuthFilter>()
|
77
|
-
.Before<LegacyClientAuthFilter>();
|
76
|
+
.Before<ClientAuthFilter>();
|
78
77
|
builder->channel_init()
|
79
78
|
->RegisterFilter<ClientAuthorityFilter>(GRPC_CLIENT_DIRECT_CHANNEL)
|
80
79
|
.If(NeedsClientAuthorityFilter)
|
81
|
-
.Before<ClientAuthFilter>()
|
82
|
-
.Before<LegacyClientAuthFilter>();
|
80
|
+
.Before<ClientAuthFilter>();
|
83
81
|
}
|
84
82
|
|
85
83
|
} // namespace grpc_core
|
@@ -24,11 +24,13 @@
|
|
24
24
|
#include <stddef.h>
|
25
25
|
#include <stdint.h>
|
26
26
|
|
27
|
+
#include <cstddef>
|
27
28
|
#include <optional>
|
28
29
|
|
29
30
|
#include "absl/status/statusor.h"
|
30
31
|
#include "absl/strings/string_view.h"
|
31
32
|
#include "src/core/call/metadata_batch.h"
|
33
|
+
#include "src/core/channelz/property_list.h"
|
32
34
|
#include "src/core/lib/channel/channel_args.h"
|
33
35
|
#include "src/core/lib/channel/channel_fwd.h"
|
34
36
|
#include "src/core/lib/channel/promise_based_filter.h"
|
@@ -91,18 +93,15 @@ class ChannelCompression {
|
|
91
93
|
bool is_client, MessageHandle message, DecompressArgs args,
|
92
94
|
CallTracerInterface* call_tracer) const;
|
93
95
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
object["enableCompression"] = Json::FromBool(enable_compression_);
|
104
|
-
object["enableDecompression"] = Json::FromBool(enable_decompression_);
|
105
|
-
return object;
|
96
|
+
channelz::PropertyList ChannelzProperties() const {
|
97
|
+
return channelz::PropertyList()
|
98
|
+
.Set("max_recv_size", max_recv_size_)
|
99
|
+
.Set("default_compression_algorithm",
|
100
|
+
CompressionAlgorithmAsString(default_compression_algorithm_))
|
101
|
+
.Set("enabled_compression_algorithms",
|
102
|
+
enabled_compression_algorithms_.ToString())
|
103
|
+
.Set("enable_compression", enable_compression_)
|
104
|
+
.Set("enable_decompression", enable_decompression_);
|
106
105
|
}
|
107
106
|
|
108
107
|
private:
|
@@ -132,12 +131,14 @@ class ClientCompressionFilter final
|
|
132
131
|
|
133
132
|
explicit ClientCompressionFilter(const ChannelArgs& args)
|
134
133
|
: channelz::DataSource(args.GetObjectRef<channelz::BaseNode>()),
|
135
|
-
compression_engine_(args) {
|
136
|
-
|
134
|
+
compression_engine_(args) {
|
135
|
+
SourceConstructed();
|
136
|
+
}
|
137
|
+
~ClientCompressionFilter() override { SourceDestructing(); }
|
137
138
|
|
138
|
-
void AddData(channelz::DataSink
|
139
|
-
sink.
|
140
|
-
|
139
|
+
void AddData(channelz::DataSink sink) override {
|
140
|
+
sink.AddData("clientCompressionFilter",
|
141
|
+
compression_engine_.ChannelzProperties());
|
141
142
|
}
|
142
143
|
|
143
144
|
// Construct a promise for one call.
|
@@ -182,12 +183,14 @@ class ServerCompressionFilter final
|
|
182
183
|
|
183
184
|
explicit ServerCompressionFilter(const ChannelArgs& args)
|
184
185
|
: channelz::DataSource(args.GetObjectRef<channelz::BaseNode>()),
|
185
|
-
compression_engine_(args) {
|
186
|
-
|
186
|
+
compression_engine_(args) {
|
187
|
+
SourceConstructed();
|
188
|
+
}
|
189
|
+
~ServerCompressionFilter() override { SourceDestructing(); }
|
187
190
|
|
188
|
-
void AddData(channelz::DataSink
|
189
|
-
sink.
|
190
|
-
|
191
|
+
void AddData(channelz::DataSink sink) override {
|
192
|
+
sink.AddData("serverCompressionFilter",
|
193
|
+
compression_engine_.ChannelzProperties());
|
191
194
|
}
|
192
195
|
|
193
196
|
// Construct a promise for one call.
|