grpc 1.74.1 → 1.75.0.pre1
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 +83 -41
- data/include/grpc/credentials.h +7 -1
- data/src/core/call/client_call.cc +4 -4
- data/src/core/call/filter_fusion.h +1230 -0
- data/src/core/call/metadata.cc +22 -0
- data/src/core/call/metadata.h +24 -2
- data/src/core/channelz/channelz.cc +10 -17
- data/src/core/channelz/channelz.h +58 -19
- data/src/core/channelz/channelz_registry.cc +0 -162
- data/src/core/channelz/channelz_registry.h +14 -7
- data/src/core/channelz/property_list.cc +19 -23
- data/src/core/channelz/property_list.h +3 -1
- 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/client_channel/client_channel_filter.cc +5 -4
- 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/load_balanced_call_destination.cc +6 -5
- data/src/core/client_channel/subchannel.cc +14 -6
- data/src/core/client_channel/subchannel.h +2 -0
- data/src/core/config/core_configuration.cc +3 -1
- data/src/core/config/core_configuration.h +12 -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 +3 -1
- data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
- 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/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/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
- data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
- data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
- data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
- 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/transport/chttp2_transport.cc +3 -2
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
- data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
- data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
- data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
- data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
- 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/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
- data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
- data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
- data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
- data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
- data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
- 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/property_list.upb.h +142 -54
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
- data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
- 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/property_list.upbdefs.c +86 -88
- data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
- data/src/core/filter/auth/auth_filters.h +2 -2
- data/src/core/filter/fused_filters.cc +154 -0
- data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
- data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
- data/src/core/handshaker/security/secure_endpoint.cc +28 -13
- data/src/core/handshaker/security/secure_endpoint.h +8 -0
- data/src/core/lib/channel/promise_based_filter.cc +15 -25
- data/src/core/lib/channel/promise_based_filter.h +6 -5
- data/src/core/lib/event_engine/ares_resolver.h +3 -1
- data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
- data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
- 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 +12 -0
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
- data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
- data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
- data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
- data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
- data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
- 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 +2 -2
- data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
- data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
- data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
- data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
- data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
- data/src/core/lib/experiments/experiments.cc +120 -6
- data/src/core/lib/experiments/experiments.h +46 -3
- data/src/core/lib/iomgr/combiner.cc +1 -1
- 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 +3 -3
- data/src/core/lib/promise/activity.h +2 -2
- data/src/core/lib/promise/mpsc.cc +8 -8
- data/src/core/lib/promise/party.cc +7 -7
- data/src/core/lib/promise/party.h +4 -4
- data/src/core/lib/promise/poll.h +10 -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/surface/call.cc +5 -5
- data/src/core/lib/surface/call.h +6 -5
- data/src/core/lib/surface/completion_queue.cc +2 -4
- data/src/core/lib/surface/filter_stack_call.cc +1 -1
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.cc +2 -2
- data/src/core/lib/transport/promise_endpoint.h +3 -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/pick_first/pick_first.cc +12 -5
- 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/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_dependency_manager.cc +1 -1
- data/src/core/server/server.cc +1 -1
- 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/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/telemetry/call_tracer.cc +20 -14
- data/src/core/telemetry/call_tracer.h +22 -17
- data/src/core/telemetry/metrics.h +8 -8
- data/src/core/telemetry/stats_data.cc +151 -151
- data/src/core/telemetry/stats_data.h +87 -87
- 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/ssl_transport_security.cc +202 -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/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 +245 -188
- data/src/core/util/single_set_ptr.h +5 -2
- data/src/core/util/useful.h +91 -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_certificate_provider.cc +5 -6
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- 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 +121 -49
- data/src/core/util/ring_buffer.h +0 -122
- 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
@@ -186,11 +186,13 @@ class FrameProtector : public RefCounted<FrameProtector> {
|
|
186
186
|
|
187
187
|
absl::Status Unprotect(absl::Status read_status)
|
188
188
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(read_mu_) {
|
189
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("unprotect");
|
190
|
+
|
189
191
|
if (shutdown_) {
|
190
192
|
return absl::CancelledError("secure endpoint shutdown");
|
191
193
|
}
|
192
194
|
|
193
|
-
|
195
|
+
GRPC_TRACE_LOG(secure_endpoint, INFO) << "Starting unprotect for " << this;
|
194
196
|
bool keep_looping = false;
|
195
197
|
tsi_result result = TSI_OK;
|
196
198
|
|
@@ -321,7 +323,8 @@ class FrameProtector : public RefCounted<FrameProtector> {
|
|
321
323
|
ABSL_EXCLUSIVE_LOCKS_REQUIRED(write_mu_) {
|
322
324
|
if (shutdown_) return TSI_FAILED_PRECONDITION;
|
323
325
|
|
324
|
-
|
326
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("protect");
|
327
|
+
GRPC_TRACE_LOG(secure_endpoint, INFO) << "Starting protect for " << this;
|
325
328
|
uint8_t* cur = GRPC_SLICE_START_PTR(write_staging_buffer_);
|
326
329
|
uint8_t* end = GRPC_SLICE_END_PTR(write_staging_buffer_);
|
327
330
|
|
@@ -416,6 +419,10 @@ class FrameProtector : public RefCounted<FrameProtector> {
|
|
416
419
|
}
|
417
420
|
// TODO(yangg) do different things according to the error type?
|
418
421
|
if (result != TSI_OK) output_buffer_.Clear();
|
422
|
+
|
423
|
+
GRPC_TRACE_LOG(secure_endpoint, INFO)
|
424
|
+
<< "Protect: " << this << " result: " << result;
|
425
|
+
|
419
426
|
return result;
|
420
427
|
}
|
421
428
|
|
@@ -583,7 +590,7 @@ static void on_write(void* user_data, grpc_error_handle error) {
|
|
583
590
|
static void endpoint_write(
|
584
591
|
grpc_endpoint* secure_ep, grpc_slice_buffer* slices, grpc_closure* cb,
|
585
592
|
grpc_event_engine::experimental::EventEngine::Endpoint::WriteArgs args) {
|
586
|
-
|
593
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure_endpoint write");
|
587
594
|
secure_endpoint* ep = reinterpret_cast<secure_endpoint*>(secure_ep);
|
588
595
|
tsi_result result;
|
589
596
|
{
|
@@ -800,7 +807,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
|
|
800
807
|
|
801
808
|
bool Write(absl::AnyInvocable<void(absl::Status)> on_writable,
|
802
809
|
SliceBuffer* data, WriteArgs args) {
|
803
|
-
|
810
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure_endpoint write");
|
804
811
|
tsi_result result;
|
805
812
|
frame_protector_.TraceOp("Write", data->c_slice_buffer());
|
806
813
|
if (grpc_core::IsSecureEndpointOffloadLargeWritesEnabled()) {
|
@@ -887,6 +894,8 @@ class SecureEndpoint final : public EventEngine::Endpoint {
|
|
887
894
|
grpc_core::MutexLock read_lock(frame_protector_.read_mu());
|
888
895
|
wrapped_ep = std::move(wrapped_ep_);
|
889
896
|
frame_protector_.Shutdown();
|
897
|
+
GRPC_TRACE_LOG(secure_endpoint, INFO)
|
898
|
+
<< "Shutdown for secure endpoint: " << this;
|
890
899
|
}
|
891
900
|
|
892
901
|
std::shared_ptr<TelemetryInfo> GetTelemetryInfo() const {
|
@@ -896,7 +905,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
|
|
896
905
|
|
897
906
|
private:
|
898
907
|
bool MaybeFinishReadImmediately() {
|
899
|
-
|
908
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure_endpoint maybe finish read");
|
900
909
|
grpc_core::MutexLock lock(frame_protector_.read_mu());
|
901
910
|
// If the read is large, since we got the bytes whilst still calling read,
|
902
911
|
// offload the decryption to event engine.
|
@@ -927,7 +936,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
|
|
927
936
|
|
928
937
|
static void FinishAsyncRead(grpc_core::RefCountedPtr<Impl> impl,
|
929
938
|
absl::Status status) {
|
930
|
-
|
939
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure endpoint finish async read");
|
931
940
|
{
|
932
941
|
grpc_core::MutexLock lock(impl->frame_protector_.read_mu());
|
933
942
|
if (status.ok() && impl->wrapped_ep_ == nullptr) {
|
@@ -962,7 +971,7 @@ class SecureEndpoint final : public EventEngine::Endpoint {
|
|
962
971
|
};
|
963
972
|
|
964
973
|
static void FinishAsyncWrite(grpc_core::RefCountedPtr<Impl> impl) {
|
965
|
-
|
974
|
+
GRPC_LATENT_SEE_ALWAYS_ON_SCOPE("secure endpoint finish async write");
|
966
975
|
tsi_result result;
|
967
976
|
std::unique_ptr<SliceBuffer> data;
|
968
977
|
WriteArgs args;
|
@@ -1067,12 +1076,18 @@ grpc_core::OrphanablePtr<grpc_endpoint> grpc_secure_endpoint_create(
|
|
1067
1076
|
event_engine_endpoint = grpc_event_engine::experimental::
|
1068
1077
|
grpc_take_wrapped_event_engine_endpoint(to_wrap.release());
|
1069
1078
|
CHECK(event_engine_endpoint != nullptr);
|
1070
|
-
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1079
|
+
if (grpc_core::IsPipelinedReadSecureEndpointEnabled()) {
|
1080
|
+
return grpc_pipelined_secure_endpoint_create(
|
1081
|
+
protector, zero_copy_protector, std::move(event_engine_endpoint),
|
1082
|
+
leftover_slices, channel_args, leftover_nslices);
|
1083
|
+
} else {
|
1084
|
+
return grpc_core::OrphanablePtr<grpc_endpoint>(
|
1085
|
+
grpc_event_engine::experimental::grpc_event_engine_endpoint_create(
|
1086
|
+
std::make_unique<grpc_event_engine::experimental::SecureEndpoint>(
|
1087
|
+
std::move(event_engine_endpoint), protector,
|
1088
|
+
zero_copy_protector, leftover_slices, leftover_nslices,
|
1089
|
+
channel_args)));
|
1090
|
+
}
|
1076
1091
|
}
|
1077
1092
|
return grpc_core::MakeOrphanable<secure_endpoint>(
|
1078
1093
|
&vtable, protector, zero_copy_protector, std::move(to_wrap),
|
@@ -55,4 +55,12 @@ grpc_core::OrphanablePtr<grpc_endpoint> grpc_legacy_secure_endpoint_create(
|
|
55
55
|
grpc_slice* leftover_slices, const grpc_channel_args* channel_args,
|
56
56
|
size_t leftover_nslices);
|
57
57
|
|
58
|
+
grpc_core::OrphanablePtr<grpc_endpoint> grpc_pipelined_secure_endpoint_create(
|
59
|
+
struct tsi_frame_protector* protector,
|
60
|
+
struct tsi_zero_copy_grpc_protector* zero_copy_protector,
|
61
|
+
std::unique_ptr<grpc_event_engine::experimental::EventEngine::Endpoint>
|
62
|
+
to_wrap,
|
63
|
+
grpc_slice* leftover_slices, const grpc_core::ChannelArgs& channel_args,
|
64
|
+
size_t leftover_nslices);
|
65
|
+
|
58
66
|
#endif // GRPC_SRC_CORE_HANDSHAKER_SECURITY_SECURE_ENDPOINT_H
|
@@ -242,8 +242,7 @@ void BaseCallData::CapturedBatch::CancelWith(grpc_error_handle error,
|
|
242
242
|
///////////////////////////////////////////////////////////////////////////////
|
243
243
|
// BaseCallData::Flusher
|
244
244
|
|
245
|
-
BaseCallData::Flusher::Flusher(BaseCallData* call
|
246
|
-
: latent_see::InnerScope(desc), call_(call) {
|
245
|
+
BaseCallData::Flusher::Flusher(BaseCallData* call) : call_(call) {
|
247
246
|
GRPC_CALL_STACK_REF(call_->call_stack(), "flusher");
|
248
247
|
}
|
249
248
|
|
@@ -395,7 +394,7 @@ bool BaseCallData::SendMessage::IsIdle() const {
|
|
395
394
|
}
|
396
395
|
|
397
396
|
void BaseCallData::SendMessage::OnComplete(absl::Status status) {
|
398
|
-
Flusher flusher(base_
|
397
|
+
Flusher flusher(base_);
|
399
398
|
GRPC_TRACE_LOG(channel, INFO)
|
400
399
|
<< base_->LogTag() << " SendMessage.OnComplete st=" << StateString(state_)
|
401
400
|
<< " status=" << status;
|
@@ -705,8 +704,7 @@ void BaseCallData::ReceiveMessage::OnComplete(absl::Status status) {
|
|
705
704
|
break;
|
706
705
|
}
|
707
706
|
completed_status_ = status;
|
708
|
-
Flusher flusher(base_
|
709
|
-
GRPC_LATENT_SEE_METADATA("ReceiveMessage::OnComplete"));
|
707
|
+
Flusher flusher(base_);
|
710
708
|
ScopedContext ctx(base_);
|
711
709
|
base_->WakeInsideCombiner(&flusher);
|
712
710
|
}
|
@@ -1220,9 +1218,7 @@ class ClientCallData::PollContext {
|
|
1220
1218
|
auto* next_poll = static_cast<NextPoll*>(p);
|
1221
1219
|
{
|
1222
1220
|
ScopedContext ctx(next_poll->call_data);
|
1223
|
-
Flusher flusher(next_poll->call_data
|
1224
|
-
GRPC_LATENT_SEE_METADATA(
|
1225
|
-
"ClientCallData::PollContext::~PollContext"));
|
1221
|
+
Flusher flusher(next_poll->call_data);
|
1226
1222
|
next_poll->call_data->WakeInsideCombiner(&flusher);
|
1227
1223
|
}
|
1228
1224
|
GRPC_CALL_STACK_UNREF(next_poll->call_stack, "re-poll");
|
@@ -1351,7 +1347,7 @@ void ClientCallData::StartBatch(grpc_transport_stream_op_batch* b) {
|
|
1351
1347
|
// Fake out the activity based context.
|
1352
1348
|
ScopedContext context(this);
|
1353
1349
|
CapturedBatch batch(b);
|
1354
|
-
Flusher flusher(this
|
1350
|
+
Flusher flusher(this);
|
1355
1351
|
|
1356
1352
|
GRPC_TRACE_LOG(channel, INFO) << LogTag() << " StartBatch " << DebugString();
|
1357
1353
|
|
@@ -1557,8 +1553,7 @@ void ClientCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
|
1557
1553
|
<< DebugString() << " error:" << error.ToString()
|
1558
1554
|
<< " md:" << recv_initial_metadata_->metadata->DebugString();
|
1559
1555
|
ScopedContext context(this);
|
1560
|
-
Flusher flusher(this
|
1561
|
-
"ClientCallData::RecvInitialMetadataReady"));
|
1556
|
+
Flusher flusher(this);
|
1562
1557
|
if (!error.ok()) {
|
1563
1558
|
switch (recv_initial_metadata_->state) {
|
1564
1559
|
case RecvInitialMetadata::kHookedWaitingForPipe:
|
@@ -1744,8 +1739,7 @@ void ClientCallData::RecvTrailingMetadataReadyCallback(
|
|
1744
1739
|
}
|
1745
1740
|
|
1746
1741
|
void ClientCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
1747
|
-
Flusher flusher(this
|
1748
|
-
"ClientCallData::RecvTrailingMetadataReady"));
|
1742
|
+
Flusher flusher(this);
|
1749
1743
|
GRPC_TRACE_LOG(channel, INFO)
|
1750
1744
|
<< LogTag() << " ClientCallData.RecvTrailingMetadataReady "
|
1751
1745
|
<< "recv_trailing_state=" << StateString(recv_trailing_state_)
|
@@ -1796,12 +1790,12 @@ void ClientCallData::SetStatusFromError(grpc_metadata_batch* metadata,
|
|
1796
1790
|
|
1797
1791
|
// Wakeup and poll the promise if appropriate.
|
1798
1792
|
void ClientCallData::WakeInsideCombiner(Flusher* flusher) {
|
1799
|
-
|
1793
|
+
GRPC_LATENT_SEE_SCOPE("ClientCallData::WakeInsideCombiner");
|
1800
1794
|
PollContext(this, flusher).Run();
|
1801
1795
|
}
|
1802
1796
|
|
1803
1797
|
void ClientCallData::OnWakeup() {
|
1804
|
-
Flusher flusher(this
|
1798
|
+
Flusher flusher(this);
|
1805
1799
|
ScopedContext context(this);
|
1806
1800
|
WakeInsideCombiner(&flusher);
|
1807
1801
|
}
|
@@ -1877,9 +1871,7 @@ class ServerCallData::PollContext {
|
|
1877
1871
|
auto run = [](void* p, grpc_error_handle) {
|
1878
1872
|
auto* next_poll = static_cast<NextPoll*>(p);
|
1879
1873
|
{
|
1880
|
-
Flusher flusher(next_poll->call_data
|
1881
|
-
GRPC_LATENT_SEE_METADATA(
|
1882
|
-
"ServerCallData::PollContext::~PollContext"));
|
1874
|
+
Flusher flusher(next_poll->call_data);
|
1883
1875
|
ScopedContext context(next_poll->call_data);
|
1884
1876
|
next_poll->call_data->WakeInsideCombiner(&flusher);
|
1885
1877
|
}
|
@@ -1983,7 +1975,7 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
|
|
1983
1975
|
// Fake out the activity based context.
|
1984
1976
|
ScopedContext context(this);
|
1985
1977
|
CapturedBatch batch(b);
|
1986
|
-
Flusher flusher(this
|
1978
|
+
Flusher flusher(this);
|
1987
1979
|
bool wake = false;
|
1988
1980
|
|
1989
1981
|
GRPC_TRACE_LOG(channel, INFO) << LogTag() << " StartBatch: " << DebugString();
|
@@ -2272,8 +2264,7 @@ void ServerCallData::RecvTrailingMetadataReady(grpc_error_handle error) {
|
|
2272
2264
|
GRPC_TRACE_LOG(channel, INFO)
|
2273
2265
|
<< LogTag() << ": RecvTrailingMetadataReady error=" << error
|
2274
2266
|
<< " md=" << recv_trailing_metadata_->DebugString();
|
2275
|
-
Flusher flusher(this
|
2276
|
-
"ServerCallData::RecvTrailingMetadataReady"));
|
2267
|
+
Flusher flusher(this);
|
2277
2268
|
PollContext poll_ctx(this, &flusher);
|
2278
2269
|
Completed(error, recv_trailing_metadata_->get(GrpcTarPit()).has_value(),
|
2279
2270
|
&flusher);
|
@@ -2287,8 +2278,7 @@ void ServerCallData::RecvInitialMetadataReadyCallback(void* arg,
|
|
2287
2278
|
}
|
2288
2279
|
|
2289
2280
|
void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
|
2290
|
-
Flusher flusher(this
|
2291
|
-
"ServerCallData::RecvInitialMetadataReady"));
|
2281
|
+
Flusher flusher(this);
|
2292
2282
|
GRPC_TRACE_LOG(channel, INFO)
|
2293
2283
|
<< LogTag() << ": RecvInitialMetadataReady " << error;
|
2294
2284
|
CHECK(recv_initial_state_ == RecvInitialState::kForwarded);
|
@@ -2351,7 +2341,7 @@ std::string ServerCallData::DebugString() const {
|
|
2351
2341
|
|
2352
2342
|
// Wakeup and poll the promise if appropriate.
|
2353
2343
|
void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
|
2354
|
-
|
2344
|
+
GRPC_LATENT_SEE_SCOPE("ServerCallData::WakeInsideCombiner");
|
2355
2345
|
PollContext poll_ctx(this, flusher);
|
2356
2346
|
GRPC_TRACE_LOG(channel, INFO)
|
2357
2347
|
<< LogTag() << ": WakeInsideCombiner " << DebugString();
|
@@ -2503,7 +2493,7 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
|
|
2503
2493
|
}
|
2504
2494
|
|
2505
2495
|
void ServerCallData::OnWakeup() {
|
2506
|
-
Flusher flusher(this
|
2496
|
+
Flusher flusher(this);
|
2507
2497
|
ScopedContext context(this);
|
2508
2498
|
WakeInsideCombiner(&flusher);
|
2509
2499
|
}
|
@@ -196,7 +196,10 @@ struct CallHasAsyncErrorInterceptor<
|
|
196
196
|
template <typename Derived>
|
197
197
|
struct CallHasAsyncErrorInterceptor<
|
198
198
|
Derived, std::enable_if_t<IsFusedFilter<Derived>::value>> {
|
199
|
-
|
199
|
+
// Fused filter types return a promise, which resolves to a
|
200
|
+
// ServerMetadataHandle type. So we assume that an async error interceptor is
|
201
|
+
// always needed.
|
202
|
+
static constexpr bool value = true;
|
200
203
|
};
|
201
204
|
|
202
205
|
// Given a boolean X export a type:
|
@@ -1304,11 +1307,9 @@ class BaseCallData : public Activity, private Wakeable {
|
|
1304
1307
|
}
|
1305
1308
|
};
|
1306
1309
|
|
1307
|
-
class Flusher
|
1310
|
+
class Flusher {
|
1308
1311
|
public:
|
1309
|
-
explicit Flusher(BaseCallData* call
|
1310
|
-
latent_see::Metadata* desc = GRPC_LATENT_SEE_METADATA(
|
1311
|
-
"PromiseBasedFilter::Flusher"));
|
1312
|
+
explicit Flusher(BaseCallData* call);
|
1312
1313
|
// Calls closures, schedules batches, relinquishes call combiner.
|
1313
1314
|
~Flusher();
|
1314
1315
|
|
@@ -22,8 +22,10 @@
|
|
22
22
|
|
23
23
|
#if GRPC_ARES == 1
|
24
24
|
|
25
|
-
#include <ares.h>
|
26
25
|
#include <grpc/event_engine/event_engine.h>
|
26
|
+
// ares.h is not self-contained w.r.t. windows headers so pull in
|
27
|
+
// event_engine.h first
|
28
|
+
#include <ares.h>
|
27
29
|
|
28
30
|
#include <list>
|
29
31
|
#include <memory>
|
@@ -24,6 +24,7 @@
|
|
24
24
|
#include "absl/log/check.h"
|
25
25
|
#include "absl/log/log.h"
|
26
26
|
#include "src/core/lib/event_engine/cf_engine/cf_engine.h"
|
27
|
+
#include "src/core/lib/event_engine/cf_engine/cfsocket_listener.h"
|
27
28
|
#include "src/core/lib/event_engine/cf_engine/cfstream_endpoint.h"
|
28
29
|
#include "src/core/lib/event_engine/cf_engine/dns_service_resolver.h"
|
29
30
|
#include "src/core/lib/event_engine/posix_engine/timer_manager.h"
|
@@ -81,11 +82,14 @@ CFEventEngine::~CFEventEngine() {
|
|
81
82
|
|
82
83
|
absl::StatusOr<std::unique_ptr<EventEngine::Listener>>
|
83
84
|
CFEventEngine::CreateListener(
|
84
|
-
Listener::AcceptCallback
|
85
|
-
absl::AnyInvocable<void(absl::Status)>
|
86
|
-
const EndpointConfig&
|
87
|
-
std::unique_ptr<MemoryAllocatorFactory>
|
88
|
-
|
85
|
+
Listener::AcceptCallback on_accept,
|
86
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
87
|
+
const EndpointConfig& config,
|
88
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory) {
|
89
|
+
return std::make_unique<CFSocketListener>(
|
90
|
+
std::static_pointer_cast<CFEventEngine>(shared_from_this()),
|
91
|
+
std::move(on_accept), std::move(on_shutdown), config,
|
92
|
+
std::move(memory_allocator_factory));
|
89
93
|
}
|
90
94
|
|
91
95
|
CFEventEngine::ConnectionHandle CFEventEngine::Connect(
|
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
namespace grpc_event_engine::experimental {
|
32
32
|
|
33
|
-
class CFEventEngine : public EventEngine
|
33
|
+
class CFEventEngine : public EventEngine {
|
34
34
|
public:
|
35
35
|
CFEventEngine();
|
36
36
|
~CFEventEngine() override;
|
@@ -57,6 +57,7 @@ class CFEventEngine : public EventEngine, public Scheduler {
|
|
57
57
|
TaskHandle RunAfter(Duration when,
|
58
58
|
absl::AnyInvocable<void()> closure) override;
|
59
59
|
bool Cancel(TaskHandle handle) override;
|
60
|
+
ThreadPool* thread_pool() const { return thread_pool_.get(); }
|
60
61
|
|
61
62
|
private:
|
62
63
|
struct Closure;
|
@@ -0,0 +1,263 @@
|
|
1
|
+
// Copyright 2025 The gRPC Authors
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#ifdef GPR_APPLE
|
18
|
+
#include <AvailabilityMacros.h>
|
19
|
+
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
|
20
|
+
|
21
|
+
#include <netinet/in.h>
|
22
|
+
#include <sys/socket.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/debug/trace_flags.h"
|
25
|
+
#include "src/core/lib/debug/trace_impl.h"
|
26
|
+
#include "src/core/lib/event_engine/cf_engine/cfsocket_listener.h"
|
27
|
+
#include "src/core/lib/event_engine/cf_engine/cfstream_endpoint.h"
|
28
|
+
#include "src/core/lib/event_engine/tcp_socket_utils.h"
|
29
|
+
#include "src/core/util/strerror.h"
|
30
|
+
|
31
|
+
namespace grpc_event_engine::experimental {
|
32
|
+
|
33
|
+
namespace {
|
34
|
+
|
35
|
+
auto GetCfSocketResolvedAddress6(CFSocketRef ipv6cfsock) {
|
36
|
+
CFTypeUniqueRef<CFDataRef> sin6cfd = CFSocketCopyAddress(ipv6cfsock);
|
37
|
+
auto sin6 = reinterpret_cast<const sockaddr*>(CFDataGetBytePtr(sin6cfd));
|
38
|
+
return EventEngine::ResolvedAddress{sin6, sin6->sa_len};
|
39
|
+
}
|
40
|
+
|
41
|
+
} // namespace
|
42
|
+
|
43
|
+
CFSocketListenerImpl::CFSocketListenerImpl(
|
44
|
+
std::shared_ptr<CFEventEngine> engine,
|
45
|
+
EventEngine::Listener::AcceptCallback on_accept,
|
46
|
+
absl::AnyInvocable<void(absl::Status)> on_shutdown,
|
47
|
+
const EndpointConfig& config,
|
48
|
+
std::unique_ptr<MemoryAllocatorFactory> memory_allocator_factory)
|
49
|
+
: engine_(std::move(engine)),
|
50
|
+
on_accept_(std::move(on_accept)),
|
51
|
+
on_shutdown_(std::move(on_shutdown)),
|
52
|
+
memory_allocator_factory_(std::move(memory_allocator_factory)) {}
|
53
|
+
|
54
|
+
CFSocketListenerImpl::~CFSocketListenerImpl() {
|
55
|
+
on_shutdown_(absl::OkStatus());
|
56
|
+
dispatch_release(queue_);
|
57
|
+
|
58
|
+
GRPC_TRACE_LOG(event_engine, INFO)
|
59
|
+
<< "CFSocketListenerImpl::~CFSocketListenerImpl, this: " << this;
|
60
|
+
}
|
61
|
+
|
62
|
+
void CFSocketListenerImpl::Shutdown() {
|
63
|
+
GRPC_TRACE_LOG(event_engine, INFO)
|
64
|
+
<< "CFSocketListenerImpl::Shutdown: this: " << this;
|
65
|
+
|
66
|
+
grpc_core::MutexLock lock(&mu_);
|
67
|
+
|
68
|
+
shutdown_ = true;
|
69
|
+
for (auto& [ipv6cfsock] : ipv6cfsocks_) {
|
70
|
+
CFSocketInvalidate(ipv6cfsock);
|
71
|
+
}
|
72
|
+
if (runloop_) {
|
73
|
+
CFRunLoopWakeUp(runloop_);
|
74
|
+
CFRunLoopStop(runloop_);
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
absl::StatusOr<int> CFSocketListenerImpl::Bind(
|
79
|
+
const EventEngine::ResolvedAddress& addr) {
|
80
|
+
grpc_core::MutexLock lock(&mu_);
|
81
|
+
|
82
|
+
if (started_) {
|
83
|
+
return absl::FailedPreconditionError(
|
84
|
+
"Listener is already started, ports can no longer be bound");
|
85
|
+
}
|
86
|
+
CHECK(addr.size() <= EventEngine::ResolvedAddress::MAX_SIZE_BYTES);
|
87
|
+
|
88
|
+
int port = ResolvedAddressGetPort(addr);
|
89
|
+
// if port is not specified, reuse any listening port
|
90
|
+
if (port == 0) {
|
91
|
+
for (auto& [ipv6cfsock] : ipv6cfsocks_) {
|
92
|
+
auto bind_addr = GetCfSocketResolvedAddress6(ipv6cfsock);
|
93
|
+
int bind_port = ResolvedAddressGetPort(bind_addr);
|
94
|
+
if (bind_port > 0) {
|
95
|
+
port = bind_port;
|
96
|
+
break;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
EventEngine::ResolvedAddress addr6;
|
102
|
+
// treat :: or 0.0.0.0 as a family-agnostic wildcard.
|
103
|
+
if (MaybeGetWildcardPortFromAddress(addr).has_value()) {
|
104
|
+
addr6 = ResolvedAddressMakeWild6(port);
|
105
|
+
}
|
106
|
+
// convert to ipv6 if needed
|
107
|
+
if (!ResolvedAddressToV4Mapped(addr, &addr6)) {
|
108
|
+
addr6 = addr;
|
109
|
+
}
|
110
|
+
// update port
|
111
|
+
ResolvedAddressSetPort(addr6, port);
|
112
|
+
|
113
|
+
// open socket
|
114
|
+
CFSocketContext ipv6cfsock_context = {0, this, Retain, Release, nullptr};
|
115
|
+
auto ipv6cfsock = CFSocketCreate(kCFAllocatorDefault, PF_INET6, SOCK_STREAM,
|
116
|
+
IPPROTO_TCP, kCFSocketAcceptCallBack,
|
117
|
+
handleConnect, &ipv6cfsock_context);
|
118
|
+
|
119
|
+
// allow reuse of the address and port
|
120
|
+
auto sin6_fd = CFSocketGetNative(ipv6cfsock);
|
121
|
+
int sock_flag = 1;
|
122
|
+
int err = setsockopt(sin6_fd, SOL_SOCKET, SO_REUSEADDR, &sock_flag,
|
123
|
+
sizeof(sock_flag));
|
124
|
+
if (err != 0) {
|
125
|
+
return absl::InternalError(absl::StrCat(
|
126
|
+
"CFSocketListenerImpl::Bind, setsockopt(SO_REUSEADDR) errors: ",
|
127
|
+
grpc_core::StrError(errno)));
|
128
|
+
}
|
129
|
+
err = setsockopt(sin6_fd, SOL_SOCKET, SO_REUSEPORT, &sock_flag,
|
130
|
+
sizeof(sock_flag));
|
131
|
+
if (err != 0) {
|
132
|
+
return absl::InternalError(absl::StrCat(
|
133
|
+
"CFSocketListenerImpl::Bind, setsockopt(SO_REUSEPORT) errors: ",
|
134
|
+
grpc_core::StrError(errno)));
|
135
|
+
}
|
136
|
+
|
137
|
+
// bind socket to address
|
138
|
+
CFTypeUniqueRef<CFDataRef> sin6cfd =
|
139
|
+
CFDataCreate(kCFAllocatorDefault, (UInt8*)addr6.address(), addr6.size());
|
140
|
+
CFSocketError cf_error = CFSocketSetAddress(ipv6cfsock, sin6cfd);
|
141
|
+
if (cf_error != kCFSocketSuccess) {
|
142
|
+
return absl::InternalError(absl::StrCat(
|
143
|
+
"CFSocketListenerImpl::Bind, CFSocketSetAddress error: ", cf_error));
|
144
|
+
}
|
145
|
+
|
146
|
+
// find actual bind address and port
|
147
|
+
auto bind_addr = GetCfSocketResolvedAddress6(ipv6cfsock);
|
148
|
+
int bind_port = ResolvedAddressGetPort(bind_addr);
|
149
|
+
|
150
|
+
ipv6cfsocks_.emplace_back(ipv6cfsock);
|
151
|
+
|
152
|
+
GRPC_TRACE_LOG(event_engine, INFO)
|
153
|
+
<< "CFSocketListenerImpl::Bind, addr: "
|
154
|
+
<< ResolvedAddressToString(addr).value_or("")
|
155
|
+
<< ", bind_addr: " << ResolvedAddressToString(bind_addr).value_or("")
|
156
|
+
<< ", this: " << this;
|
157
|
+
|
158
|
+
return bind_port;
|
159
|
+
}
|
160
|
+
|
161
|
+
absl::Status CFSocketListenerImpl::Start() {
|
162
|
+
grpc_core::MutexLock lock(&mu_);
|
163
|
+
|
164
|
+
CHECK(!started_);
|
165
|
+
started_ = true;
|
166
|
+
|
167
|
+
dispatch_async_f(queue_, Ref().release(), [](void* thatPtr) {
|
168
|
+
grpc_core::RefCountedPtr<CFSocketListenerImpl> that{
|
169
|
+
static_cast<CFSocketListenerImpl*>(thatPtr)};
|
170
|
+
|
171
|
+
GRPC_TRACE_LOG(event_engine, INFO)
|
172
|
+
<< "CFSocketListenerImpl::Start, running CFRunLoop"
|
173
|
+
<< ", this: " << thatPtr;
|
174
|
+
|
175
|
+
{
|
176
|
+
grpc_core::MutexLock lock(&that->mu_);
|
177
|
+
if (that->shutdown_) {
|
178
|
+
return;
|
179
|
+
}
|
180
|
+
|
181
|
+
that->runloop_ = CFRunLoopGetCurrent();
|
182
|
+
for (auto& [ipv6cfsock] : that->ipv6cfsocks_) {
|
183
|
+
CFTypeUniqueRef<CFRunLoopSourceRef> ipv6cfsock_source =
|
184
|
+
CFSocketCreateRunLoopSource(kCFAllocatorDefault, ipv6cfsock, 0);
|
185
|
+
CFRunLoopAddSource(CFRunLoopGetCurrent(), ipv6cfsock_source,
|
186
|
+
kCFRunLoopDefaultMode);
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
CFRunLoopRun();
|
191
|
+
|
192
|
+
GRPC_TRACE_LOG(event_engine, INFO)
|
193
|
+
<< "CFSocketListenerImpl::Start, CFRunLoop stopped"
|
194
|
+
<< ", this: " << thatPtr;
|
195
|
+
});
|
196
|
+
|
197
|
+
return absl::OkStatus();
|
198
|
+
}
|
199
|
+
|
200
|
+
/* static */
|
201
|
+
void CFSocketListenerImpl::handleConnect(CFSocketRef s,
|
202
|
+
CFSocketCallBackType type,
|
203
|
+
CFDataRef address, const void* data,
|
204
|
+
void* info) {
|
205
|
+
CFSocketListenerImpl* self = static_cast<CFSocketListenerImpl*>(info);
|
206
|
+
|
207
|
+
switch (type) {
|
208
|
+
case kCFSocketAcceptCallBack: {
|
209
|
+
std::string peer_name = "unknown";
|
210
|
+
auto peer_sin6 =
|
211
|
+
reinterpret_cast<const sockaddr*>(CFDataGetBytePtr(address));
|
212
|
+
auto peer_addr =
|
213
|
+
EventEngine::ResolvedAddress(peer_sin6, peer_sin6->sa_len);
|
214
|
+
auto addr_uri = ResolvedAddressToURI(peer_addr);
|
215
|
+
if (!addr_uri.ok()) {
|
216
|
+
GRPC_TRACE_LOG(event_engine, ERROR)
|
217
|
+
<< "invalid peer name: " << addr_uri.status() << ", this: " << self;
|
218
|
+
} else {
|
219
|
+
peer_name = *addr_uri;
|
220
|
+
}
|
221
|
+
|
222
|
+
auto socketHandle = *static_cast<const CFSocketNativeHandle*>(data);
|
223
|
+
auto endpoint = std::make_unique<CFStreamEndpoint>(
|
224
|
+
self->engine_,
|
225
|
+
self->memory_allocator_factory_->CreateMemoryAllocator(
|
226
|
+
absl::StrCat("endpoint-tcp-server-connection: ", peer_name)));
|
227
|
+
|
228
|
+
endpoint->AcceptSocket(
|
229
|
+
[that = self->Ref(), socketHandle, peer_name = std::move(peer_name),
|
230
|
+
endpoint = std::move(endpoint)](absl::Status status) mutable {
|
231
|
+
if (!status.ok()) {
|
232
|
+
GRPC_TRACE_LOG(event_engine, ERROR)
|
233
|
+
<< "CFSocketListenerImpl::handleConnect, accept failed: "
|
234
|
+
<< status << ", this: " << that.get();
|
235
|
+
return;
|
236
|
+
}
|
237
|
+
|
238
|
+
that->on_accept_(
|
239
|
+
std::move(endpoint),
|
240
|
+
that->memory_allocator_factory_->CreateMemoryAllocator(
|
241
|
+
absl::StrCat("on-accept-tcp-server-connection: ",
|
242
|
+
peer_name)));
|
243
|
+
GRPC_TRACE_LOG(event_engine, INFO)
|
244
|
+
<< "CFSocketListenerImpl::handleConnect, accepted socket: "
|
245
|
+
<< socketHandle << ", peer_name: " << peer_name
|
246
|
+
<< ", this: " << that.get();
|
247
|
+
},
|
248
|
+
socketHandle, peer_addr);
|
249
|
+
|
250
|
+
break;
|
251
|
+
}
|
252
|
+
default:
|
253
|
+
GRPC_TRACE_LOG(event_engine, ERROR)
|
254
|
+
<< "CFSocketListenerImpl::handleConnect, unexpected type: " << type
|
255
|
+
<< ", this: " << self;
|
256
|
+
break;
|
257
|
+
}
|
258
|
+
}
|
259
|
+
|
260
|
+
} // namespace grpc_event_engine::experimental
|
261
|
+
|
262
|
+
#endif // AVAILABLE_MAC_OS_X_VERSION_10_12_AND_LATER
|
263
|
+
#endif // GPR_APPLE
|