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
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
1
|
/*
|
3
2
|
* Copyright (c) 2012 by Gilles Chehade <gilles@openbsd.org>
|
4
3
|
* Copyright (c) 1996,1999 by Internet Software Consortium.
|
@@ -15,9 +14,11 @@
|
|
15
14
|
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
16
15
|
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
17
16
|
* SOFTWARE.
|
17
|
+
*
|
18
|
+
* SPDX-License-Identifier: MIT
|
18
19
|
*/
|
19
20
|
|
20
|
-
#include "
|
21
|
+
#include "ares_private.h"
|
21
22
|
|
22
23
|
#ifdef HAVE_NETINET_IN_H
|
23
24
|
# include <netinet/in.h>
|
@@ -28,13 +29,25 @@
|
|
28
29
|
|
29
30
|
#include "ares_nameser.h"
|
30
31
|
|
31
|
-
#include "ares.h"
|
32
32
|
#include "ares_ipv6.h"
|
33
|
-
#include "ares_nowarn.h"
|
34
33
|
#include "ares_inet_net_pton.h"
|
35
34
|
|
35
|
+
#ifdef USE_WINSOCK
|
36
|
+
# define SOCKERRNO ((int)WSAGetLastError())
|
37
|
+
# define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
|
38
|
+
# undef EMSGSIZE
|
39
|
+
# define EMSGSIZE WSAEMSGSIZE
|
40
|
+
# undef ENOENT
|
41
|
+
# define ENOENT WSA_INVALID_PARAMETER
|
42
|
+
# undef EAFNOSUPPORT
|
43
|
+
# define EAFNOSUPPORT WSAEAFNOSUPPORT
|
44
|
+
#else
|
45
|
+
# define SOCKERRNO (errno)
|
46
|
+
# define SET_SOCKERRNO(x) (errno = (x))
|
47
|
+
#endif
|
36
48
|
|
37
|
-
const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,
|
49
|
+
const struct ares_in6_addr ares_in6addr_any = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
50
|
+
0, 0, 0, 0, 0, 0, 0 } } };
|
38
51
|
|
39
52
|
/*
|
40
53
|
* static int
|
@@ -51,202 +64,233 @@ const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
51
64
|
* 0b11110000 in its fourth octet.
|
52
65
|
* note:
|
53
66
|
* On Windows we store the error in the thread errno, not
|
54
|
-
* in the winsock error code. This is to avoid
|
67
|
+
* in the winsock error code. This is to avoid losing the
|
55
68
|
* actual last winsock error. So use macro ERRNO to fetch the
|
56
|
-
* errno this
|
69
|
+
* errno this function sets when returning (-1), not SOCKERRNO.
|
57
70
|
* author:
|
58
71
|
* Paul Vixie (ISC), June 1996
|
59
72
|
*/
|
60
|
-
static int
|
61
|
-
|
73
|
+
static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst,
|
74
|
+
size_t size)
|
62
75
|
{
|
63
|
-
static const char
|
64
|
-
static const char
|
65
|
-
int
|
76
|
+
static const char xdigits[] = "0123456789abcdef";
|
77
|
+
static const char digits[] = "0123456789";
|
78
|
+
int n;
|
79
|
+
int ch;
|
80
|
+
int tmp = 0;
|
81
|
+
int dirty;
|
82
|
+
int bits;
|
66
83
|
const unsigned char *odst = dst;
|
67
84
|
|
68
85
|
ch = *src++;
|
69
|
-
if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
|
70
|
-
|
71
|
-
&& ISXDIGIT(src[1])) {
|
86
|
+
if (ch == '0' && (src[0] == 'x' || src[0] == 'X') && ares_isascii(src[1]) &&
|
87
|
+
ares_isxdigit(src[1])) {
|
72
88
|
/* Hexadecimal: Eat nybble string. */
|
73
|
-
if (!size)
|
89
|
+
if (!size) {
|
74
90
|
goto emsgsize;
|
91
|
+
}
|
75
92
|
dirty = 0;
|
76
|
-
src++;
|
77
|
-
while ((ch = *src++) != '\0' &&
|
78
|
-
if (
|
79
|
-
ch =
|
80
|
-
|
81
|
-
|
93
|
+
src++; /* skip x or X. */
|
94
|
+
while ((ch = *src++) != '\0' && ares_isascii(ch) && ares_isxdigit(ch)) {
|
95
|
+
if (ares_isupper(ch)) {
|
96
|
+
ch = ares_tolower((unsigned char)ch);
|
97
|
+
}
|
98
|
+
n = (int)(strchr(xdigits, ch) - xdigits);
|
99
|
+
if (dirty == 0) {
|
82
100
|
tmp = n;
|
83
|
-
else
|
101
|
+
} else {
|
84
102
|
tmp = (tmp << 4) | n;
|
103
|
+
}
|
85
104
|
if (++dirty == 2) {
|
86
|
-
if (!size--)
|
105
|
+
if (!size--) {
|
87
106
|
goto emsgsize;
|
88
|
-
|
89
|
-
|
107
|
+
}
|
108
|
+
*dst++ = (unsigned char)tmp;
|
109
|
+
dirty = 0;
|
90
110
|
}
|
91
111
|
}
|
92
|
-
if (dirty) {
|
93
|
-
if (!size--)
|
112
|
+
if (dirty) { /* Odd trailing nybble? */
|
113
|
+
if (!size--) {
|
94
114
|
goto emsgsize;
|
95
|
-
|
115
|
+
}
|
116
|
+
*dst++ = (unsigned char)(tmp << 4);
|
96
117
|
}
|
97
|
-
} else if (
|
118
|
+
} else if (ares_isascii(ch) && ares_isdigit(ch)) {
|
98
119
|
/* Decimal: eat dotted digit string. */
|
99
120
|
for (;;) {
|
100
121
|
tmp = 0;
|
101
122
|
do {
|
102
|
-
n
|
123
|
+
n = (int)(strchr(digits, ch) - digits);
|
103
124
|
tmp *= 10;
|
104
125
|
tmp += n;
|
105
|
-
if (tmp > 255)
|
126
|
+
if (tmp > 255) {
|
106
127
|
goto enoent;
|
107
|
-
|
108
|
-
|
109
|
-
if (!size--)
|
128
|
+
}
|
129
|
+
} while ((ch = *src++) != '\0' && ares_isascii(ch) && ares_isdigit(ch));
|
130
|
+
if (!size--) {
|
110
131
|
goto emsgsize;
|
111
|
-
|
112
|
-
|
132
|
+
}
|
133
|
+
*dst++ = (unsigned char)tmp;
|
134
|
+
if (ch == '\0' || ch == '/') {
|
113
135
|
break;
|
114
|
-
|
136
|
+
}
|
137
|
+
if (ch != '.') {
|
115
138
|
goto enoent;
|
139
|
+
}
|
116
140
|
ch = *src++;
|
117
|
-
if (!
|
141
|
+
if (!ares_isascii(ch) || !ares_isdigit(ch)) {
|
118
142
|
goto enoent;
|
143
|
+
}
|
119
144
|
}
|
120
|
-
} else
|
145
|
+
} else {
|
121
146
|
goto enoent;
|
147
|
+
}
|
122
148
|
|
123
149
|
bits = -1;
|
124
|
-
if (ch == '/' &&
|
125
|
-
ISDIGIT(src[0]) && dst > odst) {
|
150
|
+
if (ch == '/' && ares_isascii(src[0]) && ares_isdigit(src[0]) && dst > odst) {
|
126
151
|
/* CIDR width specifier. Nothing can follow it. */
|
127
|
-
ch
|
152
|
+
ch = *src++; /* Skip over the /. */
|
128
153
|
bits = 0;
|
129
154
|
do {
|
130
|
-
n
|
155
|
+
n = (int)(strchr(digits, ch) - digits);
|
131
156
|
bits *= 10;
|
132
157
|
bits += n;
|
133
|
-
if (bits > 32)
|
158
|
+
if (bits > 32) {
|
134
159
|
goto enoent;
|
135
|
-
|
136
|
-
|
160
|
+
}
|
161
|
+
} while ((ch = *src++) != '\0' && ares_isascii(ch) && ares_isdigit(ch));
|
162
|
+
if (ch != '\0') {
|
137
163
|
goto enoent;
|
164
|
+
}
|
138
165
|
}
|
139
166
|
|
140
167
|
/* Firey death and destruction unless we prefetched EOS. */
|
141
|
-
if (ch != '\0')
|
168
|
+
if (ch != '\0') {
|
142
169
|
goto enoent;
|
170
|
+
}
|
143
171
|
|
144
172
|
/* If nothing was written to the destination, we found no address. */
|
145
|
-
if (dst == odst)
|
146
|
-
goto enoent;
|
173
|
+
if (dst == odst) {
|
174
|
+
goto enoent; /* LCOV_EXCL_LINE: all valid paths above increment dst */
|
175
|
+
}
|
147
176
|
/* If no CIDR spec was given, infer width from net class. */
|
148
177
|
if (bits == -1) {
|
149
|
-
if (*odst >= 240)
|
178
|
+
if (*odst >= 240) { /* Class E */
|
150
179
|
bits = 32;
|
151
|
-
else if (*odst >= 224)
|
180
|
+
} else if (*odst >= 224) { /* Class D */
|
152
181
|
bits = 8;
|
153
|
-
else if (*odst >= 192)
|
182
|
+
} else if (*odst >= 192) { /* Class C */
|
154
183
|
bits = 24;
|
155
|
-
else if (*odst >= 128)
|
184
|
+
} else if (*odst >= 128) { /* Class B */
|
156
185
|
bits = 16;
|
157
|
-
else
|
186
|
+
} else { /* Class A */
|
158
187
|
bits = 8;
|
188
|
+
}
|
159
189
|
/* If imputed mask is narrower than specified octets, widen. */
|
160
|
-
if (bits < ((dst - odst) * 8))
|
161
|
-
bits =
|
190
|
+
if (bits < ((dst - odst) * 8)) {
|
191
|
+
bits = (int)(dst - odst) * 8;
|
192
|
+
}
|
162
193
|
/*
|
163
194
|
* If there are no additional bits specified for a class D
|
164
195
|
* address adjust bits to 4.
|
165
196
|
*/
|
166
|
-
if (bits == 8 && *odst == 224)
|
197
|
+
if (bits == 8 && *odst == 224) {
|
167
198
|
bits = 4;
|
199
|
+
}
|
168
200
|
}
|
169
201
|
/* Extend network to cover the actual mask. */
|
170
202
|
while (bits > ((dst - odst) * 8)) {
|
171
|
-
if (!size--)
|
203
|
+
if (!size--) {
|
172
204
|
goto emsgsize;
|
205
|
+
}
|
173
206
|
*dst++ = '\0';
|
174
207
|
}
|
175
|
-
return
|
208
|
+
return bits;
|
176
209
|
|
177
|
-
|
178
|
-
|
179
|
-
return
|
210
|
+
enoent:
|
211
|
+
SET_SOCKERRNO(ENOENT);
|
212
|
+
return -1;
|
180
213
|
|
181
|
-
|
182
|
-
|
183
|
-
return
|
214
|
+
emsgsize:
|
215
|
+
SET_SOCKERRNO(EMSGSIZE);
|
216
|
+
return -1;
|
184
217
|
}
|
185
218
|
|
186
|
-
static int
|
187
|
-
getbits(const char *src, int *bitsp)
|
219
|
+
static int getbits(const char *src, size_t *bitsp)
|
188
220
|
{
|
189
221
|
static const char digits[] = "0123456789";
|
190
|
-
|
191
|
-
|
192
|
-
char
|
222
|
+
size_t n;
|
223
|
+
size_t val;
|
224
|
+
char ch;
|
193
225
|
|
194
226
|
val = 0;
|
195
|
-
n
|
227
|
+
n = 0;
|
196
228
|
while ((ch = *src++) != '\0') {
|
197
229
|
const char *pch;
|
198
230
|
|
199
231
|
pch = strchr(digits, ch);
|
200
232
|
if (pch != NULL) {
|
201
|
-
if (n++ != 0 && val == 0)
|
202
|
-
return
|
233
|
+
if (n++ != 0 && val == 0) { /* no leading zeros */
|
234
|
+
return 0;
|
235
|
+
}
|
203
236
|
val *= 10;
|
204
|
-
val +=
|
205
|
-
if (val > 128)
|
206
|
-
return
|
237
|
+
val += (size_t)(pch - digits);
|
238
|
+
if (val > 128) { /* range */
|
239
|
+
return 0;
|
240
|
+
}
|
207
241
|
continue;
|
208
242
|
}
|
209
|
-
return
|
243
|
+
return 0;
|
244
|
+
}
|
245
|
+
if (n == 0) {
|
246
|
+
return 0;
|
210
247
|
}
|
211
|
-
if (n == 0)
|
212
|
-
return (0);
|
213
248
|
*bitsp = val;
|
214
|
-
return
|
249
|
+
return 1;
|
215
250
|
}
|
216
251
|
|
217
|
-
|
218
|
-
static int
|
219
|
-
ares_inet_pton6(const char *src, unsigned char *dst)
|
252
|
+
static int ares_inet_pton6(const char *src, unsigned char *dst)
|
220
253
|
{
|
221
|
-
static const char xdigits_l[] = "0123456789abcdef"
|
222
|
-
|
223
|
-
unsigned char
|
224
|
-
|
225
|
-
|
226
|
-
unsigned
|
254
|
+
static const char xdigits_l[] = "0123456789abcdef";
|
255
|
+
static const char xdigits_u[] = "0123456789ABCDEF";
|
256
|
+
unsigned char tmp[NS_IN6ADDRSZ];
|
257
|
+
unsigned char *tp;
|
258
|
+
unsigned char *endp;
|
259
|
+
unsigned char *colonp;
|
260
|
+
const char *xdigits;
|
261
|
+
const char *curtok;
|
262
|
+
int ch;
|
263
|
+
int saw_xdigit;
|
264
|
+
int count_xdigit;
|
265
|
+
unsigned int val;
|
227
266
|
|
228
267
|
memset((tp = tmp), '\0', NS_IN6ADDRSZ);
|
229
|
-
endp
|
268
|
+
endp = tp + NS_IN6ADDRSZ;
|
230
269
|
colonp = NULL;
|
231
270
|
/* Leading :: requires some special handling. */
|
232
|
-
if (*src == ':')
|
233
|
-
if (*++src != ':')
|
271
|
+
if (*src == ':') {
|
272
|
+
if (*++src != ':') {
|
234
273
|
goto enoent;
|
235
|
-
|
274
|
+
}
|
275
|
+
}
|
276
|
+
curtok = src;
|
236
277
|
saw_xdigit = count_xdigit = 0;
|
237
|
-
val
|
278
|
+
val = 0;
|
238
279
|
while ((ch = *src++) != '\0') {
|
239
280
|
const char *pch;
|
240
281
|
|
241
|
-
if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
|
282
|
+
if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) {
|
242
283
|
pch = strchr((xdigits = xdigits_u), ch);
|
284
|
+
}
|
243
285
|
if (pch != NULL) {
|
244
|
-
if (count_xdigit >= 4)
|
286
|
+
if (count_xdigit >= 4) {
|
245
287
|
goto enoent;
|
288
|
+
}
|
246
289
|
val <<= 4;
|
247
|
-
val
|
248
|
-
if (val > 0xffff)
|
290
|
+
val |= (unsigned int)(pch - xdigits);
|
291
|
+
if (val > 0xffff) {
|
249
292
|
goto enoent;
|
293
|
+
}
|
250
294
|
saw_xdigit = 1;
|
251
295
|
count_xdigit++;
|
252
296
|
continue;
|
@@ -254,35 +298,38 @@ ares_inet_pton6(const char *src, unsigned char *dst)
|
|
254
298
|
if (ch == ':') {
|
255
299
|
curtok = src;
|
256
300
|
if (!saw_xdigit) {
|
257
|
-
if (colonp)
|
301
|
+
if (colonp) {
|
258
302
|
goto enoent;
|
303
|
+
}
|
259
304
|
colonp = tp;
|
260
305
|
continue;
|
261
306
|
} else if (*src == '\0') {
|
262
307
|
goto enoent;
|
263
308
|
}
|
264
|
-
if (tp + NS_INT16SZ > endp)
|
309
|
+
if (tp + NS_INT16SZ > endp) {
|
265
310
|
goto enoent;
|
266
|
-
|
267
|
-
*tp++
|
268
|
-
|
311
|
+
}
|
312
|
+
*tp++ = (unsigned char)(val >> 8) & 0xff;
|
313
|
+
*tp++ = (unsigned char)val & 0xff;
|
314
|
+
saw_xdigit = 0;
|
269
315
|
count_xdigit = 0;
|
270
|
-
val
|
316
|
+
val = 0;
|
271
317
|
continue;
|
272
318
|
}
|
273
319
|
if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
|
274
320
|
ares_inet_net_pton_ipv4(curtok, tp, NS_INADDRSZ) > 0) {
|
275
|
-
tp
|
276
|
-
saw_xdigit
|
277
|
-
break;
|
321
|
+
tp += NS_INADDRSZ;
|
322
|
+
saw_xdigit = 0;
|
323
|
+
break; /* '\0' was seen by inet_pton4(). */
|
278
324
|
}
|
279
325
|
goto enoent;
|
280
326
|
}
|
281
327
|
if (saw_xdigit) {
|
282
|
-
if (tp + NS_INT16SZ > endp)
|
328
|
+
if (tp + NS_INT16SZ > endp) {
|
283
329
|
goto enoent;
|
284
|
-
|
285
|
-
*tp++ = (unsigned char)
|
330
|
+
}
|
331
|
+
*tp++ = (unsigned char)(val >> 8) & 0xff;
|
332
|
+
*tp++ = (unsigned char)val & 0xff;
|
286
333
|
}
|
287
334
|
if (colonp != NULL) {
|
288
335
|
/*
|
@@ -290,67 +337,71 @@ ares_inet_pton6(const char *src, unsigned char *dst)
|
|
290
337
|
* overlapping regions, we'll do the shift by hand.
|
291
338
|
*/
|
292
339
|
const int n = (int)(tp - colonp);
|
293
|
-
int
|
340
|
+
int i;
|
294
341
|
|
295
|
-
if (tp == endp)
|
342
|
+
if (tp == endp) {
|
296
343
|
goto enoent;
|
344
|
+
}
|
297
345
|
for (i = 1; i <= n; i++) {
|
298
|
-
endp[-
|
346
|
+
endp[-i] = colonp[n - i];
|
299
347
|
colonp[n - i] = 0;
|
300
348
|
}
|
301
349
|
tp = endp;
|
302
350
|
}
|
303
|
-
if (tp != endp)
|
351
|
+
if (tp != endp) {
|
304
352
|
goto enoent;
|
353
|
+
}
|
305
354
|
|
306
355
|
memcpy(dst, tmp, NS_IN6ADDRSZ);
|
307
|
-
return
|
356
|
+
return 1;
|
308
357
|
|
309
358
|
enoent:
|
310
|
-
|
311
|
-
return
|
359
|
+
SET_SOCKERRNO(ENOENT);
|
360
|
+
return -1;
|
312
361
|
}
|
313
362
|
|
314
|
-
static int
|
315
|
-
|
363
|
+
static int ares_inet_net_pton_ipv6(const char *src, unsigned char *dst,
|
364
|
+
size_t size)
|
316
365
|
{
|
317
366
|
struct ares_in6_addr in6;
|
318
367
|
int ret;
|
319
|
-
|
368
|
+
size_t bits;
|
320
369
|
size_t bytes;
|
321
370
|
char buf[INET6_ADDRSTRLEN + sizeof("/128")];
|
322
371
|
char *sep;
|
323
372
|
|
324
|
-
if (
|
325
|
-
|
326
|
-
return
|
373
|
+
if (ares_strlen(src) >= sizeof buf) {
|
374
|
+
SET_SOCKERRNO(EMSGSIZE);
|
375
|
+
return -1;
|
327
376
|
}
|
328
|
-
|
377
|
+
ares_strcpy(buf, src, sizeof buf);
|
329
378
|
|
330
379
|
sep = strchr(buf, '/');
|
331
|
-
if (sep != NULL)
|
380
|
+
if (sep != NULL) {
|
332
381
|
*sep++ = '\0';
|
382
|
+
}
|
333
383
|
|
334
384
|
ret = ares_inet_pton6(buf, (unsigned char *)&in6);
|
335
|
-
if (ret != 1)
|
336
|
-
return
|
385
|
+
if (ret != 1) {
|
386
|
+
return -1;
|
387
|
+
}
|
337
388
|
|
338
|
-
if (sep == NULL)
|
389
|
+
if (sep == NULL) {
|
339
390
|
bits = 128;
|
340
|
-
else {
|
391
|
+
} else {
|
341
392
|
if (!getbits(sep, &bits)) {
|
342
|
-
|
343
|
-
return
|
393
|
+
SET_SOCKERRNO(ENOENT);
|
394
|
+
return -1;
|
344
395
|
}
|
345
396
|
}
|
346
397
|
|
347
398
|
bytes = (bits + 7) / 8;
|
348
399
|
if (bytes > size) {
|
349
|
-
|
350
|
-
return
|
400
|
+
SET_SOCKERRNO(EMSGSIZE);
|
401
|
+
return -1;
|
351
402
|
}
|
352
403
|
memcpy(dst, &in6, bytes);
|
353
|
-
return (bits
|
404
|
+
return (int)bits;
|
354
405
|
}
|
355
406
|
|
356
407
|
/*
|
@@ -363,44 +414,38 @@ ares_inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
|
|
363
414
|
* number of bits, either imputed classfully or specified with /CIDR,
|
364
415
|
* or -1 if some failure occurred (check errno). ENOENT means it was
|
365
416
|
* not a valid network specification.
|
366
|
-
* note:
|
367
|
-
* On Windows we store the error in the thread errno, not
|
368
|
-
* in the winsock error code. This is to avoid loosing the
|
369
|
-
* actual last winsock error. So use macro ERRNO to fetch the
|
370
|
-
* errno this funtion sets when returning (-1), not SOCKERRNO.
|
371
417
|
* author:
|
372
418
|
* Paul Vixie (ISC), June 1996
|
419
|
+
*
|
373
420
|
*/
|
374
|
-
int
|
375
|
-
ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
|
421
|
+
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
|
376
422
|
{
|
377
423
|
switch (af) {
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
return (-1);
|
424
|
+
case AF_INET:
|
425
|
+
return ares_inet_net_pton_ipv4(src, dst, size);
|
426
|
+
case AF_INET6:
|
427
|
+
return ares_inet_net_pton_ipv6(src, dst, size);
|
428
|
+
default:
|
429
|
+
return -1;
|
385
430
|
}
|
386
431
|
}
|
387
432
|
|
388
433
|
int ares_inet_pton(int af, const char *src, void *dst)
|
389
434
|
{
|
390
|
-
int
|
435
|
+
int result;
|
391
436
|
size_t size;
|
392
437
|
|
393
|
-
if (af == AF_INET)
|
438
|
+
if (af == AF_INET) {
|
394
439
|
size = sizeof(struct in_addr);
|
395
|
-
else if (af == AF_INET6)
|
440
|
+
} else if (af == AF_INET6) {
|
396
441
|
size = sizeof(struct ares_in6_addr);
|
397
|
-
else
|
398
|
-
|
399
|
-
SET_ERRNO(EAFNOSUPPORT);
|
442
|
+
} else {
|
443
|
+
SET_SOCKERRNO(EAFNOSUPPORT);
|
400
444
|
return -1;
|
401
445
|
}
|
402
446
|
result = ares_inet_net_pton(af, src, dst, size);
|
403
|
-
if (result == -1 &&
|
447
|
+
if (result == -1 && SOCKERRNO == ENOENT) {
|
404
448
|
return 0;
|
405
|
-
|
449
|
+
}
|
450
|
+
return (result > -1) ? 1 : -1;
|
406
451
|
}
|