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
@@ -13,9 +13,11 @@
|
|
13
13
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
14
14
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
15
15
|
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
16
|
+
*
|
17
|
+
* SPDX-License-Identifier: MIT
|
16
18
|
*/
|
17
19
|
|
18
|
-
#include "
|
20
|
+
#include "ares_private.h"
|
19
21
|
|
20
22
|
#ifdef HAVE_NETINET_IN_H
|
21
23
|
# include <netinet/in.h>
|
@@ -25,11 +27,23 @@
|
|
25
27
|
#endif
|
26
28
|
|
27
29
|
#include "ares_nameser.h"
|
28
|
-
|
29
|
-
#include "ares.h"
|
30
30
|
#include "ares_ipv6.h"
|
31
31
|
|
32
|
-
#
|
32
|
+
#ifdef USE_WINSOCK
|
33
|
+
# define SOCKERRNO ((int)WSAGetLastError())
|
34
|
+
# define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
|
35
|
+
# undef EMSGSIZE
|
36
|
+
# define EMSGSIZE WSAEMSGSIZE
|
37
|
+
# undef ENOENT
|
38
|
+
# define ENOENT WSA_INVALID_PARAMETER
|
39
|
+
# undef EAFNOSUPPORT
|
40
|
+
# define EAFNOSUPPORT WSAEAFNOSUPPORT
|
41
|
+
# undef ENOSPC
|
42
|
+
# define ENOSPC WSA_INVALID_PARAMETER
|
43
|
+
#else
|
44
|
+
# define SOCKERRNO (errno)
|
45
|
+
# define SET_SOCKERRNO(x) (errno = (x))
|
46
|
+
#endif
|
33
47
|
|
34
48
|
/*
|
35
49
|
* WARNING: Don't even consider trying to compile this on a system where
|
@@ -44,27 +58,22 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
|
|
44
58
|
* convert a network format address to presentation format.
|
45
59
|
* return:
|
46
60
|
* pointer to presentation format address (`dst'), or NULL (see errno).
|
47
|
-
* note:
|
48
|
-
* On Windows we store the error in the thread errno, not
|
49
|
-
* in the winsock error code. This is to avoid loosing the
|
50
|
-
* actual last winsock error. So use macro ERRNO to fetch the
|
51
|
-
* errno this function sets when returning NULL, not SOCKERRNO.
|
52
61
|
* author:
|
53
62
|
* Paul Vixie, 1996.
|
54
63
|
*/
|
55
|
-
const char *
|
56
|
-
|
64
|
+
const char *ares_inet_ntop(int af, const void *src, char *dst,
|
65
|
+
ares_socklen_t size)
|
57
66
|
{
|
58
67
|
switch (af) {
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
return (NULL);
|
68
|
+
case AF_INET:
|
69
|
+
return inet_ntop4(src, dst, (size_t)size);
|
70
|
+
case AF_INET6:
|
71
|
+
return inet_ntop6(src, dst, (size_t)size);
|
72
|
+
default:
|
73
|
+
break;
|
66
74
|
}
|
67
|
-
|
75
|
+
SET_SOCKERRNO(EAFNOSUPPORT);
|
76
|
+
return NULL;
|
68
77
|
}
|
69
78
|
|
70
79
|
/* const char *
|
@@ -78,18 +87,23 @@ ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
|
|
78
87
|
* author:
|
79
88
|
* Paul Vixie, 1996.
|
80
89
|
*/
|
81
|
-
static const char *
|
82
|
-
inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
90
|
+
static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
83
91
|
{
|
84
92
|
static const char fmt[] = "%u.%u.%u.%u";
|
85
|
-
char
|
93
|
+
char tmp[sizeof("255.255.255.255")];
|
94
|
+
|
95
|
+
if (size < sizeof(tmp)) {
|
96
|
+
SET_SOCKERRNO(ENOSPC);
|
97
|
+
return NULL;
|
98
|
+
}
|
86
99
|
|
87
|
-
if ((size_t)
|
88
|
-
|
89
|
-
|
100
|
+
if ((size_t)snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]) >=
|
101
|
+
size) {
|
102
|
+
SET_SOCKERRNO(ENOSPC);
|
103
|
+
return NULL;
|
90
104
|
}
|
91
|
-
|
92
|
-
return
|
105
|
+
ares_strcpy(dst, tmp, size);
|
106
|
+
return dst;
|
93
107
|
}
|
94
108
|
|
95
109
|
/* const char *
|
@@ -98,8 +112,7 @@ inet_ntop4(const unsigned char *src, char *dst, size_t size)
|
|
98
112
|
* author:
|
99
113
|
* Paul Vixie, 1996.
|
100
114
|
*/
|
101
|
-
static const char *
|
102
|
-
inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
115
|
+
static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
103
116
|
{
|
104
117
|
/*
|
105
118
|
* Note that int32_t and int16_t need only be "at least" large enough
|
@@ -108,11 +121,16 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|
108
121
|
* Keep this in mind if you think this function should have been coded
|
109
122
|
* to use pointer overlays. All the world's not a VAX.
|
110
123
|
*/
|
111
|
-
char
|
124
|
+
char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
|
112
125
|
char *tp;
|
113
|
-
|
126
|
+
|
127
|
+
struct {
|
128
|
+
ares_ssize_t base;
|
129
|
+
size_t len;
|
130
|
+
} best, cur;
|
131
|
+
|
114
132
|
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
|
115
|
-
|
133
|
+
size_t i;
|
116
134
|
|
117
135
|
/*
|
118
136
|
* Preprocess:
|
@@ -120,32 +138,38 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|
120
138
|
* Find the longest run of 0x00's in src[] for :: shorthanding.
|
121
139
|
*/
|
122
140
|
memset(words, '\0', sizeof(words));
|
123
|
-
for (i = 0; i < NS_IN6ADDRSZ; i++)
|
124
|
-
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
|
141
|
+
for (i = 0; i < NS_IN6ADDRSZ; i++) {
|
142
|
+
words[i / 2] |= (unsigned int)(src[i] << ((1 - (i % 2)) << 3));
|
143
|
+
}
|
125
144
|
best.base = -1;
|
126
|
-
best.len
|
127
|
-
cur.base
|
128
|
-
cur.len
|
145
|
+
best.len = 0;
|
146
|
+
cur.base = -1;
|
147
|
+
cur.len = 0;
|
129
148
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
|
130
149
|
if (words[i] == 0) {
|
131
|
-
if (cur.base == -1)
|
132
|
-
cur.base = i
|
133
|
-
|
150
|
+
if (cur.base == -1) {
|
151
|
+
cur.base = (ares_ssize_t)i;
|
152
|
+
cur.len = 1;
|
153
|
+
} else {
|
134
154
|
cur.len++;
|
155
|
+
}
|
135
156
|
} else {
|
136
157
|
if (cur.base != -1) {
|
137
|
-
if (best.base == -1 || cur.len > best.len)
|
158
|
+
if (best.base == -1 || cur.len > best.len) {
|
138
159
|
best = cur;
|
160
|
+
}
|
139
161
|
cur.base = -1;
|
140
162
|
}
|
141
163
|
}
|
142
164
|
}
|
143
165
|
if (cur.base != -1) {
|
144
|
-
if (best.base == -1 || cur.len > best.len)
|
166
|
+
if (best.base == -1 || cur.len > best.len) {
|
145
167
|
best = cur;
|
168
|
+
}
|
146
169
|
}
|
147
|
-
if (best.base != -1 && best.len < 2)
|
170
|
+
if (best.base != -1 && best.len < 2) {
|
148
171
|
best.base = -1;
|
172
|
+
}
|
149
173
|
|
150
174
|
/*
|
151
175
|
* Format the result.
|
@@ -153,49 +177,43 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
|
|
153
177
|
tp = tmp;
|
154
178
|
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
|
155
179
|
/* Are we inside the best run of 0x00's? */
|
156
|
-
if (best.base != -1 && i >= best.base &&
|
157
|
-
i < (best.base + best.len)) {
|
158
|
-
if (i == best.base)
|
180
|
+
if (best.base != -1 && i >= (size_t)best.base &&
|
181
|
+
i < ((size_t)best.base + best.len)) {
|
182
|
+
if (i == (size_t)best.base) {
|
159
183
|
*tp++ = ':';
|
184
|
+
}
|
160
185
|
continue;
|
161
186
|
}
|
162
187
|
/* Are we following an initial run of 0x00s or any real hex? */
|
163
|
-
if (i != 0)
|
188
|
+
if (i != 0) {
|
164
189
|
*tp++ = ':';
|
190
|
+
}
|
165
191
|
/* Is this address an encapsulated IPv4? */
|
166
|
-
if (i == 6 && best.base == 0 &&
|
167
|
-
(best.len == 7 && words[7] != 0x0001) ||
|
168
|
-
|
169
|
-
if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
|
192
|
+
if (i == 6 && best.base == 0 &&
|
193
|
+
(best.len == 6 || (best.len == 7 && words[7] != 0x0001) ||
|
194
|
+
(best.len == 5 && words[5] == 0xffff))) {
|
195
|
+
if (!inet_ntop4(src + 12, tp, sizeof(tmp) - (size_t)(tp - tmp))) {
|
170
196
|
return (NULL);
|
171
|
-
|
197
|
+
}
|
198
|
+
tp += ares_strlen(tp);
|
172
199
|
break;
|
173
200
|
}
|
174
|
-
tp +=
|
201
|
+
tp += snprintf(tp, sizeof(tmp) - (size_t)(tp - tmp), "%x", words[i]);
|
175
202
|
}
|
176
203
|
/* Was it a trailing run of 0x00's? */
|
177
|
-
if (best.base != -1 &&
|
204
|
+
if (best.base != -1 &&
|
205
|
+
((size_t)best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) {
|
178
206
|
*tp++ = ':';
|
207
|
+
}
|
179
208
|
*tp++ = '\0';
|
180
209
|
|
181
210
|
/*
|
182
211
|
* Check for overflow, copy, and we're done.
|
183
212
|
*/
|
184
213
|
if ((size_t)(tp - tmp) > size) {
|
185
|
-
|
186
|
-
return
|
214
|
+
SET_SOCKERRNO(ENOSPC);
|
215
|
+
return NULL;
|
187
216
|
}
|
188
|
-
|
189
|
-
return
|
217
|
+
ares_strcpy(dst, tmp, size);
|
218
|
+
return dst;
|
190
219
|
}
|
191
|
-
|
192
|
-
#else /* HAVE_INET_NTOP */
|
193
|
-
|
194
|
-
const char *
|
195
|
-
ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
|
196
|
-
{
|
197
|
-
/* just relay this to the underlying function */
|
198
|
-
return inet_ntop(af, src, dst, size);
|
199
|
-
}
|
200
|
-
|
201
|
-
#endif /* HAVE_INET_NTOP */
|
@@ -0,0 +1,78 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 2023 Brad House
|
4
|
+
*
|
5
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
* of this software and associated documentation files (the "Software"), to deal
|
7
|
+
* in the Software without restriction, including without limitation the rights
|
8
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
* copies of the Software, and to permit persons to whom the Software is
|
10
|
+
* furnished to do so, subject to the following conditions:
|
11
|
+
*
|
12
|
+
* The above copyright notice and this permission notice (including the next
|
13
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
14
|
+
* Software.
|
15
|
+
*
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
22
|
+
* SOFTWARE.
|
23
|
+
*
|
24
|
+
* SPDX-License-Identifier: MIT
|
25
|
+
*/
|
26
|
+
|
27
|
+
#include "ares_private.h"
|
28
|
+
|
29
|
+
static int ares_create_query_int(const char *name, int dnsclass, int type,
|
30
|
+
unsigned short id, int rd,
|
31
|
+
unsigned char **bufp, int *buflenp,
|
32
|
+
int max_udp_size)
|
33
|
+
{
|
34
|
+
ares_status_t status;
|
35
|
+
ares_dns_record_t *dnsrec = NULL;
|
36
|
+
size_t len;
|
37
|
+
ares_dns_flags_t rd_flag = rd ? ARES_FLAG_RD : 0;
|
38
|
+
|
39
|
+
if (name == NULL || bufp == NULL || buflenp == NULL) {
|
40
|
+
status = ARES_EFORMERR;
|
41
|
+
goto done;
|
42
|
+
}
|
43
|
+
|
44
|
+
*bufp = NULL;
|
45
|
+
*buflenp = 0;
|
46
|
+
|
47
|
+
status = ares_dns_record_create_query(
|
48
|
+
&dnsrec, name, (ares_dns_class_t)dnsclass, (ares_dns_rec_type_t)type, id,
|
49
|
+
rd_flag, (size_t)max_udp_size);
|
50
|
+
if (status != ARES_SUCCESS) {
|
51
|
+
goto done;
|
52
|
+
}
|
53
|
+
|
54
|
+
status = ares_dns_write(dnsrec, bufp, &len);
|
55
|
+
if (status != ARES_SUCCESS) {
|
56
|
+
goto done;
|
57
|
+
}
|
58
|
+
|
59
|
+
*buflenp = (int)len;
|
60
|
+
|
61
|
+
done:
|
62
|
+
ares_dns_record_destroy(dnsrec);
|
63
|
+
return (int)status;
|
64
|
+
}
|
65
|
+
|
66
|
+
int ares_create_query(const char *name, int dnsclass, int type,
|
67
|
+
unsigned short id, int rd, unsigned char **bufp,
|
68
|
+
int *buflenp, int max_udp_size)
|
69
|
+
{
|
70
|
+
return ares_create_query_int(name, dnsclass, type, id, rd, bufp, buflenp,
|
71
|
+
max_udp_size);
|
72
|
+
}
|
73
|
+
|
74
|
+
int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
|
75
|
+
int rd, unsigned char **buf, int *buflen)
|
76
|
+
{
|
77
|
+
return ares_create_query_int(name, dnsclass, type, id, rd, buf, buflen, 0);
|
78
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 1998, 2011 Massachusetts Institute of Technology
|
4
|
+
* Copyright (c) The c-ares project and its contributors
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice (including the next
|
14
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
15
|
+
* Software.
|
16
|
+
*
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
23
|
+
* SOFTWARE.
|
24
|
+
*
|
25
|
+
* SPDX-License-Identifier: MIT
|
26
|
+
*/
|
27
|
+
|
28
|
+
#include "ares_private.h"
|
29
|
+
|
30
|
+
#ifdef HAVE_NETINET_IN_H
|
31
|
+
# include <netinet/in.h>
|
32
|
+
#endif
|
33
|
+
|
34
|
+
#include "ares_nameser.h"
|
35
|
+
|
36
|
+
ares_status_t ares_expand_name_validated(const unsigned char *encoded,
|
37
|
+
const unsigned char *abuf, size_t alen,
|
38
|
+
char **s, size_t *enclen,
|
39
|
+
ares_bool_t is_hostname)
|
40
|
+
{
|
41
|
+
ares_status_t status;
|
42
|
+
ares_buf_t *buf = NULL;
|
43
|
+
size_t start_len;
|
44
|
+
|
45
|
+
if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) {
|
46
|
+
return ARES_EBADNAME; /* EFORMERR would be better */
|
47
|
+
}
|
48
|
+
|
49
|
+
if (encoded < abuf || encoded >= abuf + alen) {
|
50
|
+
return ARES_EBADNAME; /* EFORMERR would be better */
|
51
|
+
}
|
52
|
+
|
53
|
+
*enclen = 0;
|
54
|
+
|
55
|
+
/* NOTE: we allow 's' to be NULL to skip it */
|
56
|
+
if (s) {
|
57
|
+
*s = NULL;
|
58
|
+
}
|
59
|
+
|
60
|
+
buf = ares_buf_create_const(abuf, alen);
|
61
|
+
|
62
|
+
if (buf == NULL) {
|
63
|
+
return ARES_ENOMEM;
|
64
|
+
}
|
65
|
+
|
66
|
+
status = ares_buf_set_position(buf, (size_t)(encoded - abuf));
|
67
|
+
if (status != ARES_SUCCESS) {
|
68
|
+
goto done;
|
69
|
+
}
|
70
|
+
|
71
|
+
start_len = ares_buf_len(buf);
|
72
|
+
status = ares_dns_name_parse(buf, s, is_hostname);
|
73
|
+
if (status != ARES_SUCCESS) {
|
74
|
+
goto done;
|
75
|
+
}
|
76
|
+
|
77
|
+
*enclen = start_len - ares_buf_len(buf);
|
78
|
+
|
79
|
+
done:
|
80
|
+
ares_buf_destroy(buf);
|
81
|
+
return status;
|
82
|
+
}
|
83
|
+
|
84
|
+
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
|
85
|
+
int alen, char **s, long *enclen)
|
86
|
+
{
|
87
|
+
/* Keep public API compatible */
|
88
|
+
size_t enclen_temp = 0;
|
89
|
+
ares_status_t status;
|
90
|
+
|
91
|
+
if (encoded == NULL || abuf == NULL || alen <= 0 || enclen == NULL) {
|
92
|
+
return ARES_EBADNAME;
|
93
|
+
}
|
94
|
+
|
95
|
+
status = ares_expand_name_validated(encoded, abuf, (size_t)alen, s,
|
96
|
+
&enclen_temp, ARES_FALSE);
|
97
|
+
*enclen = (long)enclen_temp;
|
98
|
+
return (int)status;
|
99
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 1998 Massachusetts Institute of Technology
|
4
|
+
* Copyright (c) The c-ares project and its contributors
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice (including the next
|
14
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
15
|
+
* Software.
|
16
|
+
*
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
23
|
+
* SOFTWARE.
|
24
|
+
*
|
25
|
+
* SPDX-License-Identifier: MIT
|
26
|
+
*/
|
27
|
+
|
28
|
+
#include "ares_private.h"
|
29
|
+
|
30
|
+
#ifdef HAVE_NETINET_IN_H
|
31
|
+
# include <netinet/in.h>
|
32
|
+
#endif
|
33
|
+
|
34
|
+
#include "ares_nameser.h"
|
35
|
+
|
36
|
+
/* Simply decodes a length-encoded character string. The first byte of the
|
37
|
+
* input is the length of the string to be returned and the bytes thereafter
|
38
|
+
* are the characters of the string. The returned result will be NULL
|
39
|
+
* terminated.
|
40
|
+
*/
|
41
|
+
ares_status_t ares_expand_string_ex(const unsigned char *encoded,
|
42
|
+
const unsigned char *abuf, size_t alen,
|
43
|
+
unsigned char **s, size_t *enclen)
|
44
|
+
{
|
45
|
+
ares_status_t status;
|
46
|
+
ares_buf_t *buf = NULL;
|
47
|
+
size_t start_len;
|
48
|
+
size_t len = 0;
|
49
|
+
|
50
|
+
if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) {
|
51
|
+
return ARES_EBADSTR; /* EFORMERR would be better */
|
52
|
+
}
|
53
|
+
|
54
|
+
if (encoded < abuf || encoded >= abuf + alen) {
|
55
|
+
return ARES_EBADSTR; /* EFORMERR would be better */
|
56
|
+
}
|
57
|
+
|
58
|
+
*enclen = 0;
|
59
|
+
|
60
|
+
/* NOTE: we allow 's' to be NULL to skip it */
|
61
|
+
if (s) {
|
62
|
+
*s = NULL;
|
63
|
+
}
|
64
|
+
|
65
|
+
buf = ares_buf_create_const(abuf, alen);
|
66
|
+
|
67
|
+
if (buf == NULL) {
|
68
|
+
return ARES_ENOMEM;
|
69
|
+
}
|
70
|
+
|
71
|
+
status = ares_buf_set_position(buf, (size_t)(encoded - abuf));
|
72
|
+
if (status != ARES_SUCCESS) {
|
73
|
+
goto done;
|
74
|
+
}
|
75
|
+
|
76
|
+
start_len = ares_buf_len(buf);
|
77
|
+
status = ares_buf_parse_dns_binstr(buf, ares_buf_len(buf), s, &len);
|
78
|
+
/* hrm, no way to pass back 'len' with the prototype */
|
79
|
+
if (status != ARES_SUCCESS) {
|
80
|
+
goto done;
|
81
|
+
}
|
82
|
+
|
83
|
+
*enclen = start_len - ares_buf_len(buf);
|
84
|
+
|
85
|
+
done:
|
86
|
+
ares_buf_destroy(buf);
|
87
|
+
if (status == ARES_EBADNAME || status == ARES_EBADRESP) {
|
88
|
+
status = ARES_EBADSTR;
|
89
|
+
}
|
90
|
+
return status;
|
91
|
+
}
|
92
|
+
|
93
|
+
int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
|
94
|
+
int alen, unsigned char **s, long *enclen)
|
95
|
+
{
|
96
|
+
ares_status_t status;
|
97
|
+
size_t temp_enclen = 0;
|
98
|
+
|
99
|
+
if (encoded == NULL || abuf == NULL || alen <= 0 || enclen == NULL) {
|
100
|
+
return ARES_EBADRESP;
|
101
|
+
}
|
102
|
+
|
103
|
+
status = ares_expand_string_ex(encoded, abuf, (size_t)alen, s, &temp_enclen);
|
104
|
+
|
105
|
+
*enclen = (long)temp_enclen;
|
106
|
+
return (int)status;
|
107
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
/* MIT License
|
2
|
+
*
|
3
|
+
* Copyright (c) 1998 Massachusetts Institute of Technology
|
4
|
+
* Copyright (c) The c-ares project and its contributors
|
5
|
+
*
|
6
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
* of this software and associated documentation files (the "Software"), to deal
|
8
|
+
* in the Software without restriction, including without limitation the rights
|
9
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
* copies of the Software, and to permit persons to whom the Software is
|
11
|
+
* furnished to do so, subject to the following conditions:
|
12
|
+
*
|
13
|
+
* The above copyright notice and this permission notice (including the next
|
14
|
+
* paragraph) shall be included in all copies or substantial portions of the
|
15
|
+
* Software.
|
16
|
+
*
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
23
|
+
* SOFTWARE.
|
24
|
+
*
|
25
|
+
* SPDX-License-Identifier: MIT
|
26
|
+
*/
|
27
|
+
|
28
|
+
#include "ares_private.h"
|
29
|
+
|
30
|
+
int ares_fds(const ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds)
|
31
|
+
{
|
32
|
+
ares_socket_t nfds;
|
33
|
+
ares_slist_node_t *snode;
|
34
|
+
/* Are there any active queries? */
|
35
|
+
size_t active_queries;
|
36
|
+
|
37
|
+
if (channel == NULL || read_fds == NULL || write_fds == NULL) {
|
38
|
+
return 0;
|
39
|
+
}
|
40
|
+
|
41
|
+
ares_channel_lock(channel);
|
42
|
+
|
43
|
+
active_queries = ares_llist_len(channel->all_queries);
|
44
|
+
|
45
|
+
nfds = 0;
|
46
|
+
for (snode = ares_slist_node_first(channel->servers); snode != NULL;
|
47
|
+
snode = ares_slist_node_next(snode)) {
|
48
|
+
ares_server_t *server = ares_slist_node_val(snode);
|
49
|
+
ares_llist_node_t *node;
|
50
|
+
|
51
|
+
for (node = ares_llist_node_first(server->connections); node != NULL;
|
52
|
+
node = ares_llist_node_next(node)) {
|
53
|
+
const ares_conn_t *conn = ares_llist_node_val(node);
|
54
|
+
|
55
|
+
if (!active_queries && !(conn->flags & ARES_CONN_FLAG_TCP)) {
|
56
|
+
continue;
|
57
|
+
}
|
58
|
+
|
59
|
+
/* Silence coverity, shouldn't be possible */
|
60
|
+
if (conn->fd == ARES_SOCKET_BAD) {
|
61
|
+
continue;
|
62
|
+
}
|
63
|
+
|
64
|
+
/* Always wait on read */
|
65
|
+
FD_SET(conn->fd, read_fds);
|
66
|
+
|
67
|
+
if (conn->fd >= nfds) {
|
68
|
+
nfds = conn->fd + 1;
|
69
|
+
}
|
70
|
+
|
71
|
+
/* TCP only wait on write if we have the flag set */
|
72
|
+
if (conn->state_flags & ARES_CONN_STATE_WRITE) {
|
73
|
+
FD_SET(conn->fd, write_fds);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
ares_channel_unlock(channel);
|
79
|
+
return (int)nfds;
|
80
|
+
}
|