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.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +83 -41
  3. data/include/grpc/credentials.h +7 -1
  4. data/src/core/call/client_call.cc +4 -4
  5. data/src/core/call/filter_fusion.h +1230 -0
  6. data/src/core/call/metadata.cc +22 -0
  7. data/src/core/call/metadata.h +24 -2
  8. data/src/core/channelz/channelz.cc +10 -17
  9. data/src/core/channelz/channelz.h +58 -19
  10. data/src/core/channelz/channelz_registry.cc +0 -162
  11. data/src/core/channelz/channelz_registry.h +14 -7
  12. data/src/core/channelz/property_list.cc +19 -23
  13. data/src/core/channelz/property_list.h +3 -1
  14. data/src/core/channelz/v2tov1/convert.cc +683 -0
  15. data/src/core/channelz/v2tov1/convert.h +58 -0
  16. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  17. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  18. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  19. data/src/core/channelz/v2tov1/property_list.h +52 -0
  20. data/src/core/client_channel/client_channel_filter.cc +5 -4
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_internal.h +2 -1
  23. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  24. data/src/core/client_channel/subchannel.cc +14 -6
  25. data/src/core/client_channel/subchannel.h +2 -0
  26. data/src/core/config/core_configuration.cc +3 -1
  27. data/src/core/config/core_configuration.h +12 -0
  28. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  29. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  30. data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
  31. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  32. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  33. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  34. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  37. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  38. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  39. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  40. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  41. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  45. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  46. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  47. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  48. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  49. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  50. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  51. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
  53. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  54. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  55. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
  56. data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
  57. data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
  61. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  62. data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
  63. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  64. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
  66. data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
  67. data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
  68. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  69. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
  70. data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  72. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
  74. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  75. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  76. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  77. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
  78. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
  79. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
  80. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  81. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  82. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
  83. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
  84. data/src/core/filter/auth/auth_filters.h +2 -2
  85. data/src/core/filter/fused_filters.cc +154 -0
  86. data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
  87. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  88. data/src/core/handshaker/security/secure_endpoint.cc +28 -13
  89. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  90. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  91. data/src/core/lib/channel/promise_based_filter.h +6 -5
  92. data/src/core/lib/event_engine/ares_resolver.h +3 -1
  93. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
  94. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
  95. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  96. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  97. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  98. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
  99. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
  100. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
  101. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
  102. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
  103. data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
  104. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
  105. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  106. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
  107. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  108. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  109. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
  110. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
  111. data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
  112. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  113. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  114. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
  115. data/src/core/lib/experiments/experiments.cc +120 -6
  116. data/src/core/lib/experiments/experiments.h +46 -3
  117. data/src/core/lib/iomgr/combiner.cc +1 -1
  118. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  119. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  120. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  121. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  123. data/src/core/lib/iomgr/tcp_posix.cc +3 -3
  124. data/src/core/lib/promise/activity.h +2 -2
  125. data/src/core/lib/promise/mpsc.cc +8 -8
  126. data/src/core/lib/promise/party.cc +7 -7
  127. data/src/core/lib/promise/party.h +4 -4
  128. data/src/core/lib/promise/poll.h +10 -0
  129. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  130. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  131. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  132. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  133. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  134. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  135. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  136. data/src/core/lib/surface/call.cc +5 -5
  137. data/src/core/lib/surface/call.h +6 -5
  138. data/src/core/lib/surface/completion_queue.cc +2 -4
  139. data/src/core/lib/surface/filter_stack_call.cc +1 -1
  140. data/src/core/lib/surface/version.cc +2 -2
  141. data/src/core/lib/transport/promise_endpoint.cc +2 -2
  142. data/src/core/lib/transport/promise_endpoint.h +3 -3
  143. data/src/core/load_balancing/endpoint_list.cc +29 -2
  144. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  145. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  146. data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
  147. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  148. data/src/core/net/socket_mutator.cc +19 -0
  149. data/src/core/net/socket_mutator.h +25 -0
  150. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  151. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  152. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  153. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  154. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  155. data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
  156. data/src/core/server/server.cc +1 -1
  157. data/src/core/server/server_call_tracer_filter.cc +0 -66
  158. data/src/core/server/server_call_tracer_filter.h +64 -0
  159. data/src/core/server/server_config_selector_filter.cc +1 -1
  160. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  161. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  162. data/src/core/telemetry/call_tracer.cc +20 -14
  163. data/src/core/telemetry/call_tracer.h +22 -17
  164. data/src/core/telemetry/metrics.h +8 -8
  165. data/src/core/telemetry/stats_data.cc +151 -151
  166. data/src/core/telemetry/stats_data.h +87 -87
  167. data/src/core/transport/auth_context.cc +20 -0
  168. data/src/core/transport/auth_context.h +4 -0
  169. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  170. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  171. data/src/core/tsi/ssl_transport_security.cc +202 -32
  172. data/src/core/tsi/ssl_transport_security.h +19 -10
  173. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  174. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  175. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  176. data/src/core/util/latent_see.cc +178 -146
  177. data/src/core/util/latent_see.h +245 -188
  178. data/src/core/util/single_set_ptr.h +5 -2
  179. data/src/core/util/useful.h +91 -0
  180. data/src/core/util/windows/directory_reader.cc +1 -0
  181. data/src/core/util/windows/thd.cc +1 -3
  182. data/src/core/util/work_serializer.cc +1 -1
  183. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  184. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  185. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  186. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  187. data/src/ruby/lib/grpc/version.rb +1 -1
  188. data/third_party/cares/cares/include/ares.h +925 -460
  189. data/third_party/cares/cares/include/ares_dns.h +86 -71
  190. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  191. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  192. data/third_party/cares/cares/include/ares_version.h +37 -14
  193. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  194. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  195. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  196. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  197. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  198. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  199. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  201. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  202. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  203. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  204. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  205. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  206. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  207. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  208. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  209. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  210. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  211. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  212. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  213. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  214. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  215. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  216. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  217. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  218. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  219. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  220. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  221. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  222. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  223. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  224. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  225. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  226. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  227. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  228. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  229. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  230. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  231. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  232. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  233. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  234. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  235. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  238. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  239. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  240. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  241. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  242. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  243. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  244. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  255. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  265. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  266. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  267. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  273. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  274. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  275. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  276. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  277. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  278. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  279. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  294. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  302. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  303. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  304. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  306. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  307. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  309. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  311. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  313. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  315. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  316. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  317. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  319. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  320. metadata +121 -49
  321. data/src/core/util/ring_buffer.h +0 -122
  322. data/third_party/cares/cares/include/ares_rules.h +0 -125
  323. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  324. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  325. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  326. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  327. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  328. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  329. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  330. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  331. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  332. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  333. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  334. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  335. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  336. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  337. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  338. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  339. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  340. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  341. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  342. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  343. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  344. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  345. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  346. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  347. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  348. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  349. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  350. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  351. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  352. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  353. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  354. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  355. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  356. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  357. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  359. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  360. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  361. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  362. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  363. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  364. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  365. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  366. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  367. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  368. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -1,68 +1,56 @@
1
-
2
- /* Copyright 1998 by the Massachusetts Institute of Technology.
3
- * Copyright (C) 2007-2013 by Daniel Stenberg
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) Massachusetts Institute of Technology
4
+ * Copyright (c) Daniel Stenberg
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:
4
12
  *
5
- * Permission to use, copy, modify, and distribute this
6
- * software and its documentation for any purpose and without
7
- * fee is hereby granted, provided that the above copyright
8
- * notice appear in all copies and that both that copyright
9
- * notice and this permission notice appear in supporting
10
- * documentation, and that the name of M.I.T. not be used in
11
- * advertising or publicity pertaining to distribution of the
12
- * software without specific, written prior permission.
13
- * M.I.T. makes no representations about the suitability of
14
- * this software for any purpose. It is provided "as is"
15
- * without express or implied warranty.
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
16
26
  */
17
27
 
18
28
  #ifndef ARES__H
19
29
  #define ARES__H
20
30
 
21
- #include "ares_version.h" /* c-ares version defines */
22
- #include "ares_build.h" /* c-ares build definitions */
23
- #include "ares_rules.h" /* c-ares rules enforcement */
31
+ #include "ares_version.h" /* c-ares version defines */
32
+ #include "ares_build.h" /* c-ares build definitions */
24
33
 
25
- /*
26
- * Define WIN32 when build target is Win32 API
27
- */
28
-
29
- #if (defined(_WIN32) || defined(__WIN32__)) && \
30
- !defined(WIN32) && !defined(__SYMBIAN32__)
31
- # define WIN32
34
+ #if defined(_WIN32)
35
+ # ifndef WIN32_LEAN_AND_MEAN
36
+ # define WIN32_LEAN_AND_MEAN
37
+ # endif
32
38
  #endif
33
39
 
34
- #include <sys/types.h>
40
+ #ifdef CARES_HAVE_SYS_TYPES_H
41
+ # include <sys/types.h>
42
+ #endif
35
43
 
36
- /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
37
- libc5-based Linux systems. Only include it on system that are known to
38
- require it! */
39
- #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
40
- defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
41
- defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
42
- defined(__QNXNTO__) || defined(__MVS__) || defined(__HAIKU__)
43
- #include <sys/select.h>
44
+ #ifdef CARES_HAVE_SYS_SOCKET_H
45
+ # include <sys/socket.h>
44
46
  #endif
45
- #if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
46
- #include <sys/bsdskt.h>
47
+
48
+ #ifdef CARES_HAVE_SYS_SELECT_H
49
+ # include <sys/select.h>
47
50
  #endif
48
51
 
49
- #if defined(WATT32)
50
- # include <netinet/in.h>
51
- # include <sys/socket.h>
52
- # include <tcp.h>
53
- #elif defined(_WIN32_WCE)
54
- # ifndef WIN32_LEAN_AND_MEAN
55
- # define WIN32_LEAN_AND_MEAN
56
- # endif
57
- # include <windows.h>
58
- # include <winsock.h>
59
- #elif defined(WIN32)
60
- # ifndef WIN32_LEAN_AND_MEAN
61
- # define WIN32_LEAN_AND_MEAN
62
- # endif
63
- # include <windows.h>
52
+ #ifdef CARES_HAVE_WINSOCK2_H
64
53
  # include <winsock2.h>
65
- # include <ws2tcpip.h>
66
54
  /* To aid with linking against a static c-ares build, lets tell the microsoft
67
55
  * compiler to pull in needed dependencies */
68
56
  # ifdef _MSC_VER
@@ -70,16 +58,46 @@
70
58
  # pragma comment(lib, "advapi32")
71
59
  # pragma comment(lib, "iphlpapi")
72
60
  # endif
73
- #else
74
- # include <sys/socket.h>
61
+ #endif
62
+
63
+ #ifdef CARES_HAVE_WS2TCPIP_H
64
+ # include <ws2tcpip.h>
65
+ #endif
66
+
67
+ #ifdef CARES_HAVE_WINDOWS_H
68
+ # include <windows.h>
69
+ #endif
70
+
71
+ /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
72
+ libc5-based Linux systems. Only include it on system that are known to
73
+ require it! */
74
+ #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
75
+ defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
76
+ defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
77
+ defined(__QNX__) || defined(__MVS__) || defined(__HAIKU__)
78
+ # include <sys/select.h>
79
+ #endif
80
+
81
+ #if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
82
+ # include <sys/bsdskt.h>
83
+ #endif
84
+
85
+ #if !defined(_WIN32)
75
86
  # include <netinet/in.h>
76
87
  #endif
77
88
 
89
+ #ifdef WATT32
90
+ # include <tcp.h>
91
+ #endif
92
+
78
93
  #if defined(ANDROID) || defined(__ANDROID__)
79
- #include <jni.h>
94
+ # include <jni.h>
80
95
  #endif
81
96
 
82
- #ifdef __cplusplus
97
+ typedef CARES_TYPEOF_ARES_SOCKLEN_T ares_socklen_t;
98
+ typedef CARES_TYPEOF_ARES_SSIZE_T ares_ssize_t;
99
+
100
+ #ifdef __cplusplus
83
101
  extern "C" {
84
102
  #endif
85
103
 
@@ -87,167 +105,252 @@ extern "C" {
87
105
  ** c-ares external API function linkage decorations.
88
106
  */
89
107
 
90
- #ifdef CARES_STATICLIB
91
- # define CARES_EXTERN
92
- #elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
93
- # if defined(CARES_BUILDING_LIBRARY)
94
- # define CARES_EXTERN __declspec(dllexport)
108
+ #if defined(_WIN32) || defined(__CYGWIN__) || defined(__SYMBIAN32__)
109
+ # ifdef CARES_STATICLIB
110
+ # define CARES_EXTERN
95
111
  # else
96
- # define CARES_EXTERN __declspec(dllimport)
112
+ # ifdef CARES_BUILDING_LIBRARY
113
+ # define CARES_EXTERN __declspec(dllexport)
114
+ # else
115
+ # define CARES_EXTERN __declspec(dllimport)
116
+ # endif
97
117
  # endif
98
- #elif defined(CARES_BUILDING_LIBRARY) && defined(CARES_SYMBOL_HIDING)
99
- # define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN
100
118
  #else
101
- # define CARES_EXTERN
119
+ # if defined(__GNUC__) && __GNUC__ >= 4
120
+ # define CARES_EXTERN __attribute__((visibility("default")))
121
+ # elif defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 900
122
+ # define CARES_EXTERN __attribute__((visibility("default")))
123
+ # elif defined(__SUNPRO_C)
124
+ # define CARES_EXTERN _global
125
+ # else
126
+ # define CARES_EXTERN
127
+ # endif
102
128
  #endif
103
129
 
130
+ #ifdef __GNUC__
131
+ # define CARES_GCC_VERSION \
132
+ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
133
+ #else
134
+ # define CARES_GCC_VERSION 0
135
+ #endif
104
136
 
105
- #define ARES_SUCCESS 0
106
-
107
- /* Server error codes (ARES_ENODATA indicates no relevant answer) */
108
- #define ARES_ENODATA 1
109
- #define ARES_EFORMERR 2
110
- #define ARES_ESERVFAIL 3
111
- #define ARES_ENOTFOUND 4
112
- #define ARES_ENOTIMP 5
113
- #define ARES_EREFUSED 6
114
-
115
- /* Locally generated error codes */
116
- #define ARES_EBADQUERY 7
117
- #define ARES_EBADNAME 8
118
- #define ARES_EBADFAMILY 9
119
- #define ARES_EBADRESP 10
120
- #define ARES_ECONNREFUSED 11
121
- #define ARES_ETIMEOUT 12
122
- #define ARES_EOF 13
123
- #define ARES_EFILE 14
124
- #define ARES_ENOMEM 15
125
- #define ARES_EDESTRUCTION 16
126
- #define ARES_EBADSTR 17
127
-
128
- /* ares_getnameinfo error codes */
129
- #define ARES_EBADFLAGS 18
130
-
131
- /* ares_getaddrinfo error codes */
132
- #define ARES_ENONAME 19
133
- #define ARES_EBADHINTS 20
134
-
135
- /* Uninitialized library error code */
136
- #define ARES_ENOTINITIALIZED 21 /* introduced in 1.7.0 */
137
+ #ifndef __has_attribute
138
+ # define __has_attribute(x) 0
139
+ #endif
137
140
 
138
- /* ares_library_init error codes */
139
- #define ARES_ELOADIPHLPAPI 22 /* introduced in 1.7.0 */
140
- #define ARES_EADDRGETNETWORKPARAMS 23 /* introduced in 1.7.0 */
141
+ #ifdef CARES_NO_DEPRECATED
142
+ # define CARES_DEPRECATED
143
+ # define CARES_DEPRECATED_FOR(f)
144
+ #else
145
+ # if CARES_GCC_VERSION >= 30200 || __has_attribute(__deprecated__)
146
+ # define CARES_DEPRECATED __attribute__((__deprecated__))
147
+ # else
148
+ # define CARES_DEPRECATED
149
+ # endif
141
150
 
142
- /* More error codes */
143
- #define ARES_ECANCELLED 24 /* introduced in 1.7.0 */
151
+ # if CARES_GCC_VERSION >= 40500 || defined(__clang__)
152
+ # define CARES_DEPRECATED_FOR(f) \
153
+ __attribute__((deprecated("Use " #f " instead")))
154
+ # elif defined(_MSC_VER)
155
+ # define CARES_DEPRECATED_FOR(f) __declspec(deprecated("Use " #f " instead"))
156
+ # else
157
+ # define CARES_DEPRECATED_FOR(f) CARES_DEPRECATED
158
+ # endif
159
+ #endif
144
160
 
145
- /* More ares_getaddrinfo error codes */
146
- #define ARES_ESERVICE 25 /* introduced in 1.?.0 */
161
+ typedef enum {
162
+ ARES_SUCCESS = 0,
163
+
164
+ /* Server error codes (ARES_ENODATA indicates no relevant answer) */
165
+ ARES_ENODATA = 1,
166
+ ARES_EFORMERR = 2,
167
+ ARES_ESERVFAIL = 3,
168
+ ARES_ENOTFOUND = 4,
169
+ ARES_ENOTIMP = 5,
170
+ ARES_EREFUSED = 6,
171
+
172
+ /* Locally generated error codes */
173
+ ARES_EBADQUERY = 7,
174
+ ARES_EBADNAME = 8,
175
+ ARES_EBADFAMILY = 9,
176
+ ARES_EBADRESP = 10,
177
+ ARES_ECONNREFUSED = 11,
178
+ ARES_ETIMEOUT = 12,
179
+ ARES_EOF = 13,
180
+ ARES_EFILE = 14,
181
+ ARES_ENOMEM = 15,
182
+ ARES_EDESTRUCTION = 16,
183
+ ARES_EBADSTR = 17,
184
+
185
+ /* ares_getnameinfo error codes */
186
+ ARES_EBADFLAGS = 18,
187
+
188
+ /* ares_getaddrinfo error codes */
189
+ ARES_ENONAME = 19,
190
+ ARES_EBADHINTS = 20,
191
+
192
+ /* Uninitialized library error code */
193
+ ARES_ENOTINITIALIZED = 21, /* introduced in 1.7.0 */
194
+
195
+ /* ares_library_init error codes */
196
+ ARES_ELOADIPHLPAPI = 22, /* introduced in 1.7.0 */
197
+ ARES_EADDRGETNETWORKPARAMS = 23, /* introduced in 1.7.0 */
198
+
199
+ /* More error codes */
200
+ ARES_ECANCELLED = 24, /* introduced in 1.7.0 */
201
+
202
+ /* More ares_getaddrinfo error codes */
203
+ ARES_ESERVICE = 25, /* ares_getaddrinfo() was passed a text service name that
204
+ * is not recognized. introduced in 1.16.0 */
205
+
206
+ ARES_ENOSERVER = 26 /* No DNS servers were configured */
207
+ } ares_status_t;
208
+
209
+ typedef enum {
210
+ ARES_FALSE = 0,
211
+ ARES_TRUE = 1
212
+ } ares_bool_t;
213
+
214
+ /*! Values for ARES_OPT_EVENT_THREAD */
215
+ typedef enum {
216
+ /*! Default (best choice) event system */
217
+ ARES_EVSYS_DEFAULT = 0,
218
+ /*! Win32 IOCP/AFD_POLL event system */
219
+ ARES_EVSYS_WIN32 = 1,
220
+ /*! Linux epoll */
221
+ ARES_EVSYS_EPOLL = 2,
222
+ /*! BSD/MacOS kqueue */
223
+ ARES_EVSYS_KQUEUE = 3,
224
+ /*! POSIX poll() */
225
+ ARES_EVSYS_POLL = 4,
226
+ /*! last fallback on Unix-like systems, select() */
227
+ ARES_EVSYS_SELECT = 5
228
+ } ares_evsys_t;
147
229
 
148
230
  /* Flag values */
149
- #define ARES_FLAG_USEVC (1 << 0)
150
- #define ARES_FLAG_PRIMARY (1 << 1)
151
- #define ARES_FLAG_IGNTC (1 << 2)
152
- #define ARES_FLAG_NORECURSE (1 << 3)
153
- #define ARES_FLAG_STAYOPEN (1 << 4)
154
- #define ARES_FLAG_NOSEARCH (1 << 5)
155
- #define ARES_FLAG_NOALIASES (1 << 6)
156
- #define ARES_FLAG_NOCHECKRESP (1 << 7)
157
- #define ARES_FLAG_EDNS (1 << 8)
231
+ #define ARES_FLAG_USEVC (1 << 0)
232
+ #define ARES_FLAG_PRIMARY (1 << 1)
233
+ #define ARES_FLAG_IGNTC (1 << 2)
234
+ #define ARES_FLAG_NORECURSE (1 << 3)
235
+ #define ARES_FLAG_STAYOPEN (1 << 4)
236
+ #define ARES_FLAG_NOSEARCH (1 << 5)
237
+ #define ARES_FLAG_NOALIASES (1 << 6)
238
+ #define ARES_FLAG_NOCHECKRESP (1 << 7)
239
+ #define ARES_FLAG_EDNS (1 << 8)
240
+ #define ARES_FLAG_NO_DFLT_SVR (1 << 9)
241
+ #define ARES_FLAG_DNS0x20 (1 << 10)
158
242
 
159
243
  /* Option mask values */
160
- #define ARES_OPT_FLAGS (1 << 0)
161
- #define ARES_OPT_TIMEOUT (1 << 1)
162
- #define ARES_OPT_TRIES (1 << 2)
163
- #define ARES_OPT_NDOTS (1 << 3)
164
- #define ARES_OPT_UDP_PORT (1 << 4)
165
- #define ARES_OPT_TCP_PORT (1 << 5)
166
- #define ARES_OPT_SERVERS (1 << 6)
167
- #define ARES_OPT_DOMAINS (1 << 7)
168
- #define ARES_OPT_LOOKUPS (1 << 8)
169
- #define ARES_OPT_SOCK_STATE_CB (1 << 9)
170
- #define ARES_OPT_SORTLIST (1 << 10)
171
- #define ARES_OPT_SOCK_SNDBUF (1 << 11)
172
- #define ARES_OPT_SOCK_RCVBUF (1 << 12)
173
- #define ARES_OPT_TIMEOUTMS (1 << 13)
174
- #define ARES_OPT_ROTATE (1 << 14)
175
- #define ARES_OPT_EDNSPSZ (1 << 15)
176
- #define ARES_OPT_NOROTATE (1 << 16)
177
- #define ARES_OPT_RESOLVCONF (1 << 17)
178
- #define ARES_OPT_HOSTS_FILE (1 << 18)
244
+ #define ARES_OPT_FLAGS (1 << 0)
245
+ #define ARES_OPT_TIMEOUT (1 << 1)
246
+ #define ARES_OPT_TRIES (1 << 2)
247
+ #define ARES_OPT_NDOTS (1 << 3)
248
+ #define ARES_OPT_UDP_PORT (1 << 4)
249
+ #define ARES_OPT_TCP_PORT (1 << 5)
250
+ #define ARES_OPT_SERVERS (1 << 6)
251
+ #define ARES_OPT_DOMAINS (1 << 7)
252
+ #define ARES_OPT_LOOKUPS (1 << 8)
253
+ #define ARES_OPT_SOCK_STATE_CB (1 << 9)
254
+ #define ARES_OPT_SORTLIST (1 << 10)
255
+ #define ARES_OPT_SOCK_SNDBUF (1 << 11)
256
+ #define ARES_OPT_SOCK_RCVBUF (1 << 12)
257
+ #define ARES_OPT_TIMEOUTMS (1 << 13)
258
+ #define ARES_OPT_ROTATE (1 << 14)
259
+ #define ARES_OPT_EDNSPSZ (1 << 15)
260
+ #define ARES_OPT_NOROTATE (1 << 16)
261
+ #define ARES_OPT_RESOLVCONF (1 << 17)
262
+ #define ARES_OPT_HOSTS_FILE (1 << 18)
263
+ #define ARES_OPT_UDP_MAX_QUERIES (1 << 19)
264
+ #define ARES_OPT_MAXTIMEOUTMS (1 << 20)
265
+ #define ARES_OPT_QUERY_CACHE (1 << 21)
266
+ #define ARES_OPT_EVENT_THREAD (1 << 22)
267
+ #define ARES_OPT_SERVER_FAILOVER (1 << 23)
179
268
 
180
269
  /* Nameinfo flag values */
181
- #define ARES_NI_NOFQDN (1 << 0)
182
- #define ARES_NI_NUMERICHOST (1 << 1)
183
- #define ARES_NI_NAMEREQD (1 << 2)
184
- #define ARES_NI_NUMERICSERV (1 << 3)
185
- #define ARES_NI_DGRAM (1 << 4)
186
- #define ARES_NI_TCP 0
187
- #define ARES_NI_UDP ARES_NI_DGRAM
188
- #define ARES_NI_SCTP (1 << 5)
189
- #define ARES_NI_DCCP (1 << 6)
190
- #define ARES_NI_NUMERICSCOPE (1 << 7)
191
- #define ARES_NI_LOOKUPHOST (1 << 8)
192
- #define ARES_NI_LOOKUPSERVICE (1 << 9)
270
+ #define ARES_NI_NOFQDN (1 << 0)
271
+ #define ARES_NI_NUMERICHOST (1 << 1)
272
+ #define ARES_NI_NAMEREQD (1 << 2)
273
+ #define ARES_NI_NUMERICSERV (1 << 3)
274
+ #define ARES_NI_DGRAM (1 << 4)
275
+ #define ARES_NI_TCP 0
276
+ #define ARES_NI_UDP ARES_NI_DGRAM
277
+ #define ARES_NI_SCTP (1 << 5)
278
+ #define ARES_NI_DCCP (1 << 6)
279
+ #define ARES_NI_NUMERICSCOPE (1 << 7)
280
+ #define ARES_NI_LOOKUPHOST (1 << 8)
281
+ #define ARES_NI_LOOKUPSERVICE (1 << 9)
193
282
  /* Reserved for future use */
194
- #define ARES_NI_IDN (1 << 10)
195
- #define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
283
+ #define ARES_NI_IDN (1 << 10)
284
+ #define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
196
285
  #define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
197
286
 
198
287
  /* Addrinfo flag values */
199
- #define ARES_AI_CANONNAME (1 << 0)
200
- #define ARES_AI_NUMERICHOST (1 << 1)
201
- #define ARES_AI_PASSIVE (1 << 2)
202
- #define ARES_AI_NUMERICSERV (1 << 3)
203
- #define ARES_AI_V4MAPPED (1 << 4)
204
- #define ARES_AI_ALL (1 << 5)
205
- #define ARES_AI_ADDRCONFIG (1 << 6)
206
- #define ARES_AI_NOSORT (1 << 7)
207
- #define ARES_AI_ENVHOSTS (1 << 8)
288
+ #define ARES_AI_CANONNAME (1 << 0)
289
+ #define ARES_AI_NUMERICHOST (1 << 1)
290
+ #define ARES_AI_PASSIVE (1 << 2)
291
+ #define ARES_AI_NUMERICSERV (1 << 3)
292
+ #define ARES_AI_V4MAPPED (1 << 4)
293
+ #define ARES_AI_ALL (1 << 5)
294
+ #define ARES_AI_ADDRCONFIG (1 << 6)
295
+ #define ARES_AI_NOSORT (1 << 7)
296
+ #define ARES_AI_ENVHOSTS (1 << 8)
208
297
  /* Reserved for future use */
209
- #define ARES_AI_IDN (1 << 10)
210
- #define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
298
+ #define ARES_AI_IDN (1 << 10)
299
+ #define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
211
300
  #define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
212
- #define ARES_AI_CANONIDN (1 << 13)
213
-
214
- #define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
215
- ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
216
- ARES_AI_ADDRCONFIG)
217
- #define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
218
- many sockets */
219
- #define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
220
- #define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
221
- ARES_GETSOCK_MAXNUM)))
301
+ #define ARES_AI_CANONIDN (1 << 13)
302
+
303
+ #define ARES_AI_MASK \
304
+ (ARES_AI_CANONNAME | ARES_AI_NUMERICHOST | ARES_AI_PASSIVE | \
305
+ ARES_AI_NUMERICSERV | ARES_AI_V4MAPPED | ARES_AI_ALL | ARES_AI_ADDRCONFIG)
306
+ #define ARES_GETSOCK_MAXNUM \
307
+ 16 /* ares_getsock() can return info about this \
308
+ many sockets */
309
+ #define ARES_GETSOCK_READABLE(bits, num) (bits & (1 << (num)))
310
+ #define ARES_GETSOCK_WRITABLE(bits, num) \
311
+ (bits & (1 << ((num) + ARES_GETSOCK_MAXNUM)))
222
312
 
223
313
  /* c-ares library initialization flag values */
224
- #define ARES_LIB_INIT_NONE (0)
225
- #define ARES_LIB_INIT_WIN32 (1 << 0)
226
- #define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32)
314
+ #define ARES_LIB_INIT_NONE (0)
315
+ #define ARES_LIB_INIT_WIN32 (1 << 0)
316
+ #define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32)
227
317
 
318
+ /* Server state callback flag values */
319
+ #define ARES_SERV_STATE_UDP (1 << 0) /* Query used UDP */
320
+ #define ARES_SERV_STATE_TCP (1 << 1) /* Query used TCP */
228
321
 
229
322
  /*
230
323
  * Typedef our socket type
231
324
  */
232
325
 
233
326
  #ifndef ares_socket_typedef
234
- #ifdef WIN32
327
+ # if defined(_WIN32) && !defined(WATT32)
235
328
  typedef SOCKET ares_socket_t;
236
- #define ARES_SOCKET_BAD INVALID_SOCKET
237
- #else
329
+ # define ARES_SOCKET_BAD INVALID_SOCKET
330
+ # else
238
331
  typedef int ares_socket_t;
239
- #define ARES_SOCKET_BAD -1
240
- #endif
241
- #define ares_socket_typedef
332
+ # define ARES_SOCKET_BAD -1
333
+ # endif
334
+ # define ares_socket_typedef
242
335
  #endif /* ares_socket_typedef */
243
336
 
244
- typedef void (*ares_sock_state_cb)(void *data,
245
- ares_socket_t socket_fd,
246
- int readable,
247
- int writable);
337
+ typedef void (*ares_sock_state_cb)(void *data, ares_socket_t socket_fd,
338
+ int readable, int writable);
248
339
 
249
340
  struct apattern;
250
341
 
342
+ /* Options controlling server failover behavior.
343
+ * The retry chance is the probability (1/N) by which we will retry a failed
344
+ * server instead of the best server when selecting a server to send queries
345
+ * to.
346
+ * The retry delay is the minimum time in milliseconds to wait between doing
347
+ * such retries (applied per-server).
348
+ */
349
+ struct ares_server_failover_options {
350
+ unsigned short retry_chance;
351
+ size_t retry_delay;
352
+ };
353
+
251
354
  /* NOTE about the ares_options struct to users and developers.
252
355
 
253
356
  This struct will remain looking like this. It will not be extended nor
@@ -266,26 +369,31 @@ struct apattern;
266
369
 
267
370
  */
268
371
  struct ares_options {
269
- int flags;
270
- int timeout; /* in seconds or milliseconds, depending on options */
271
- int tries;
272
- int ndots;
273
- unsigned short udp_port;
274
- unsigned short tcp_port;
275
- int socket_send_buffer_size;
276
- int socket_receive_buffer_size;
277
- struct in_addr *servers;
278
- int nservers;
279
- char **domains;
280
- int ndomains;
281
- char *lookups;
372
+ int flags;
373
+ int timeout; /* in seconds or milliseconds, depending on options */
374
+ int tries;
375
+ int ndots;
376
+ unsigned short udp_port; /* host byte order */
377
+ unsigned short tcp_port; /* host byte order */
378
+ int socket_send_buffer_size;
379
+ int socket_receive_buffer_size;
380
+ struct in_addr *servers;
381
+ int nservers;
382
+ char **domains;
383
+ int ndomains;
384
+ char *lookups;
282
385
  ares_sock_state_cb sock_state_cb;
283
- void *sock_state_cb_data;
284
- struct apattern *sortlist;
285
- int nsort;
286
- int ednspsz;
287
- char *resolvconf_path;
288
- char *hosts_path;
386
+ void *sock_state_cb_data;
387
+ struct apattern *sortlist;
388
+ int nsort;
389
+ int ednspsz;
390
+ char *resolvconf_path;
391
+ char *hosts_path;
392
+ int udp_max_queries;
393
+ int maxtimeout; /* in milliseconds */
394
+ unsigned int qcache_max_ttl; /* Maximum TTL for query cache, 0=disabled */
395
+ ares_evsys_t evsys;
396
+ struct ares_server_failover_options server_failover_opts;
289
397
  };
290
398
 
291
399
  struct hostent;
@@ -295,109 +403,149 @@ struct ares_channeldata;
295
403
  struct ares_addrinfo;
296
404
  struct ares_addrinfo_hints;
297
405
 
406
+ /* Legacy typedef, don't use, you can't specify "const" */
298
407
  typedef struct ares_channeldata *ares_channel;
299
408
 
300
- typedef void (*ares_callback)(void *arg,
301
- int status,
302
- int timeouts,
303
- unsigned char *abuf,
304
- int alen);
409
+ /* Current main channel typedef */
410
+ typedef struct ares_channeldata ares_channel_t;
411
+
412
+ /*
413
+ * NOTE: before c-ares 1.7.0 we would most often use the system in6_addr
414
+ * struct below when ares itself was built, but many apps would use this
415
+ * private version since the header checked a HAVE_* define for it. Starting
416
+ * with 1.7.0 we always declare and use our own to stop relying on the
417
+ * system's one.
418
+ */
419
+ struct ares_in6_addr {
420
+ union {
421
+ unsigned char _S6_u8[16];
422
+ } _S6_un;
423
+ };
424
+
425
+ struct ares_addr {
426
+ int family;
305
427
 
306
- typedef void (*ares_host_callback)(void *arg,
307
- int status,
308
- int timeouts,
428
+ union {
429
+ struct in_addr addr4;
430
+ struct ares_in6_addr addr6;
431
+ } addr;
432
+ };
433
+
434
+ /* DNS record parser, writer, and helpers */
435
+ #include "ares_dns_record.h"
436
+
437
+ typedef void (*ares_callback)(void *arg, int status, int timeouts,
438
+ unsigned char *abuf, int alen);
439
+
440
+ typedef void (*ares_callback_dnsrec)(void *arg, ares_status_t status,
441
+ size_t timeouts,
442
+ const ares_dns_record_t *dnsrec);
443
+
444
+ typedef void (*ares_host_callback)(void *arg, int status, int timeouts,
309
445
  struct hostent *hostent);
310
446
 
311
- typedef void (*ares_nameinfo_callback)(void *arg,
312
- int status,
313
- int timeouts,
314
- char *node,
315
- char *service);
447
+ typedef void (*ares_nameinfo_callback)(void *arg, int status, int timeouts,
448
+ char *node, char *service);
449
+
450
+ typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd, int type,
451
+ void *data);
316
452
 
317
- typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd,
318
- int type,
319
- void *data);
453
+ typedef int (*ares_sock_config_callback)(ares_socket_t socket_fd, int type,
454
+ void *data);
320
455
 
321
- typedef int (*ares_sock_config_callback)(ares_socket_t socket_fd,
322
- int type,
323
- void *data);
456
+ typedef void (*ares_addrinfo_callback)(void *arg, int status, int timeouts,
457
+ struct ares_addrinfo *res);
324
458
 
325
- typedef void (*ares_addrinfo_callback)(void *arg,
326
- int status,
327
- int timeouts,
328
- struct ares_addrinfo *res);
459
+ typedef void (*ares_server_state_callback)(const char *server_string,
460
+ ares_bool_t success, int flags,
461
+ void *data);
462
+
463
+ typedef void (*ares_pending_write_cb)(void *data);
329
464
 
330
465
  CARES_EXTERN int ares_library_init(int flags);
331
466
 
332
- CARES_EXTERN int ares_library_init_mem(int flags,
333
- void *(*amalloc)(size_t size),
467
+ CARES_EXTERN int ares_library_init_mem(int flags, void *(*amalloc)(size_t size),
334
468
  void (*afree)(void *ptr),
335
- void *(*arealloc)(void *ptr, size_t size));
469
+ void *(*arealloc)(void *ptr,
470
+ size_t size));
336
471
 
337
472
  #if defined(ANDROID) || defined(__ANDROID__)
338
473
  CARES_EXTERN void ares_library_init_jvm(JavaVM *jvm);
339
- CARES_EXTERN int ares_library_init_android(jobject connectivity_manager);
340
- CARES_EXTERN int ares_library_android_initialized(void);
474
+ CARES_EXTERN int ares_library_init_android(jobject connectivity_manager);
475
+ CARES_EXTERN int ares_library_android_initialized(void);
341
476
  #endif
342
477
 
343
- CARES_EXTERN int ares_library_initialized(void);
478
+ #define CARES_HAVE_ARES_LIBRARY_INIT 1
479
+ #define CARES_HAVE_ARES_LIBRARY_CLEANUP 1
480
+
481
+ CARES_EXTERN int ares_library_initialized(void);
344
482
 
345
- CARES_EXTERN void ares_library_cleanup(void);
483
+ CARES_EXTERN void ares_library_cleanup(void);
346
484
 
347
485
  CARES_EXTERN const char *ares_version(int *version);
348
486
 
349
- CARES_EXTERN int ares_init(ares_channel *channelptr);
487
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_init_options) int ares_init(
488
+ ares_channel_t **channelptr);
350
489
 
351
- CARES_EXTERN int ares_init_options(ares_channel *channelptr,
352
- struct ares_options *options,
353
- int optmask);
490
+ CARES_EXTERN int ares_init_options(ares_channel_t **channelptr,
491
+ const struct ares_options *options,
492
+ int optmask);
354
493
 
355
- CARES_EXTERN int ares_save_options(ares_channel channel,
356
- struct ares_options *options,
357
- int *optmask);
494
+ CARES_EXTERN int ares_save_options(const ares_channel_t *channel,
495
+ struct ares_options *options, int *optmask);
358
496
 
359
497
  CARES_EXTERN void ares_destroy_options(struct ares_options *options);
360
498
 
361
- CARES_EXTERN int ares_dup(ares_channel *dest,
362
- ares_channel src);
499
+ CARES_EXTERN int ares_dup(ares_channel_t **dest, const ares_channel_t *src);
500
+
501
+ CARES_EXTERN ares_status_t ares_reinit(ares_channel_t *channel);
363
502
 
364
- CARES_EXTERN void ares_destroy(ares_channel channel);
503
+ CARES_EXTERN void ares_destroy(ares_channel_t *channel);
365
504
 
366
- CARES_EXTERN void ares_cancel(ares_channel channel);
505
+ CARES_EXTERN void ares_cancel(ares_channel_t *channel);
367
506
 
368
507
  /* These next 3 configure local binding for the out-going socket
369
508
  * connection. Use these to specify source IP and/or network device
370
509
  * on multi-homed systems.
371
510
  */
372
- CARES_EXTERN void ares_set_local_ip4(ares_channel channel, unsigned int local_ip);
511
+ CARES_EXTERN void ares_set_local_ip4(ares_channel_t *channel,
512
+ unsigned int local_ip);
373
513
 
374
514
  /* local_ip6 should be 16 bytes in length */
375
- CARES_EXTERN void ares_set_local_ip6(ares_channel channel,
376
- const unsigned char* local_ip6);
515
+ CARES_EXTERN void ares_set_local_ip6(ares_channel_t *channel,
516
+ const unsigned char *local_ip6);
377
517
 
378
518
  /* local_dev_name should be null terminated. */
379
- CARES_EXTERN void ares_set_local_dev(ares_channel channel,
380
- const char* local_dev_name);
519
+ CARES_EXTERN void ares_set_local_dev(ares_channel_t *channel,
520
+ const char *local_dev_name);
521
+
522
+ CARES_EXTERN void ares_set_socket_callback(ares_channel_t *channel,
523
+ ares_sock_create_callback callback,
524
+ void *user_data);
525
+
526
+ CARES_EXTERN void ares_set_socket_configure_callback(
527
+ ares_channel_t *channel, ares_sock_config_callback callback, void *user_data);
381
528
 
382
- CARES_EXTERN void ares_set_socket_callback(ares_channel channel,
383
- ares_sock_create_callback callback,
384
- void *user_data);
529
+ CARES_EXTERN void
530
+ ares_set_server_state_callback(ares_channel_t *channel,
531
+ ares_server_state_callback callback,
532
+ void *user_data);
385
533
 
386
- CARES_EXTERN void ares_set_socket_configure_callback(ares_channel channel,
387
- ares_sock_config_callback callback,
388
- void *user_data);
534
+ CARES_EXTERN void ares_set_pending_write_cb(ares_channel_t *channel,
535
+ ares_pending_write_cb callback,
536
+ void *user_data);
389
537
 
390
- CARES_EXTERN int ares_set_sortlist(ares_channel channel,
391
- const char *sortstr);
538
+ CARES_EXTERN void ares_process_pending_write(ares_channel_t *channel);
392
539
 
393
- CARES_EXTERN void ares_getaddrinfo(ares_channel channel,
394
- const char* node,
395
- const char* service,
396
- const struct ares_addrinfo_hints* hints,
397
- ares_addrinfo_callback callback,
398
- void* arg);
540
+ CARES_EXTERN int ares_set_sortlist(ares_channel_t *channel,
541
+ const char *sortstr);
399
542
 
400
- CARES_EXTERN void ares_freeaddrinfo(struct ares_addrinfo* ai);
543
+ CARES_EXTERN void ares_getaddrinfo(ares_channel_t *channel, const char *node,
544
+ const char *service,
545
+ const struct ares_addrinfo_hints *hints,
546
+ ares_addrinfo_callback callback, void *arg);
547
+
548
+ CARES_EXTERN void ares_freeaddrinfo(struct ares_addrinfo *ai);
401
549
 
402
550
  /*
403
551
  * Virtual function set to have user-managed socket IO.
@@ -408,124 +556,419 @@ CARES_EXTERN void ares_freeaddrinfo(struct ares_addrinfo* ai);
408
556
  * ares_sock_config_callback call.
409
557
  */
410
558
  struct iovec;
559
+
411
560
  struct ares_socket_functions {
412
- ares_socket_t(*asocket)(int, int, int, void *);
413
- int(*aclose)(ares_socket_t, void *);
414
- int(*aconnect)(ares_socket_t, const struct sockaddr *, ares_socklen_t, void *);
415
- ares_ssize_t(*arecvfrom)(ares_socket_t, void *, size_t, int, struct sockaddr *, ares_socklen_t *, void *);
416
- ares_ssize_t(*asendv)(ares_socket_t, const struct iovec *, int, void *);
561
+ ares_socket_t (*asocket)(int, int, int, void *);
562
+ int (*aclose)(ares_socket_t, void *);
563
+ int (*aconnect)(ares_socket_t, const struct sockaddr *, ares_socklen_t,
564
+ void *);
565
+ ares_ssize_t (*arecvfrom)(ares_socket_t, void *, size_t, int,
566
+ struct sockaddr *, ares_socklen_t *, void *);
567
+ ares_ssize_t (*asendv)(ares_socket_t, const struct iovec *, int, void *);
417
568
  };
418
569
 
419
- CARES_EXTERN void ares_set_socket_functions(ares_channel channel,
420
- const struct ares_socket_functions * funcs,
421
- void *user_data);
422
-
423
- CARES_EXTERN void ares_send(ares_channel channel,
424
- const unsigned char *qbuf,
425
- int qlen,
426
- ares_callback callback,
427
- void *arg);
428
-
429
- CARES_EXTERN void ares_query(ares_channel channel,
430
- const char *name,
431
- int dnsclass,
432
- int type,
433
- ares_callback callback,
434
- void *arg);
435
-
436
- CARES_EXTERN void ares_search(ares_channel channel,
437
- const char *name,
438
- int dnsclass,
439
- int type,
440
- ares_callback callback,
441
- void *arg);
442
-
443
- CARES_EXTERN void ares_gethostbyname(ares_channel channel,
444
- const char *name,
445
- int family,
446
- ares_host_callback callback,
447
- void *arg);
448
-
449
- CARES_EXTERN int ares_gethostbyname_file(ares_channel channel,
450
- const char *name,
451
- int family,
452
- struct hostent **host);
453
-
454
- CARES_EXTERN void ares_gethostbyaddr(ares_channel channel,
455
- const void *addr,
456
- int addrlen,
457
- int family,
458
- ares_host_callback callback,
459
- void *arg);
460
-
461
- CARES_EXTERN void ares_getnameinfo(ares_channel channel,
570
+ CARES_EXTERN CARES_DEPRECATED_FOR(
571
+ ares_set_socket_functions_ex) void ares_set_socket_functions(ares_channel_t
572
+ *channel,
573
+ const struct
574
+ ares_socket_functions
575
+ *funcs,
576
+ void *user_data);
577
+
578
+ /*! Flags defining behavior of socket functions */
579
+ typedef enum {
580
+ /*! Strongly recommended to create sockets as non-blocking and set this
581
+ * flag */
582
+ ARES_SOCKFUNC_FLAG_NONBLOCKING = 1 << 0
583
+ } ares_sockfunc_flags_t;
584
+
585
+ /*! Socket options in request to asetsockopt() in struct
586
+ * ares_socket_functions_ex */
587
+ typedef enum {
588
+ /*! Set the send buffer size. Value is a pointer to an int. (SO_SNDBUF) */
589
+ ARES_SOCKET_OPT_SENDBUF_SIZE,
590
+ /*! Set the recv buffer size. Value is a pointer to an int. (SO_RCVBUF) */
591
+ ARES_SOCKET_OPT_RECVBUF_SIZE,
592
+ /*! Set the network interface to use as the source for communication.
593
+ * Value is a C string. (SO_BINDTODEVICE) */
594
+ ARES_SOCKET_OPT_BIND_DEVICE,
595
+ /*! Enable TCP Fast Open. Value is a pointer to an ares_bool_t. On some
596
+ * systems this could be a no-op if it is known it is on by default and
597
+ * return success. Other systems may be a no-op if known the system does
598
+ * not support the feature and returns failure with errno set to ENOSYS or
599
+ * WSASetLastError(WSAEOPNOTSUPP).
600
+ */
601
+ ARES_SOCKET_OPT_TCP_FASTOPEN
602
+ } ares_socket_opt_t;
603
+
604
+ /*! Flags for behavior during connect */
605
+ typedef enum {
606
+ /*! Connect using TCP Fast Open */
607
+ ARES_SOCKET_CONN_TCP_FASTOPEN = 1 << 0
608
+ } ares_socket_connect_flags_t;
609
+
610
+ /*! Flags for behavior during bind */
611
+ typedef enum {
612
+ /*! Bind is for a TCP connection */
613
+ ARES_SOCKET_BIND_TCP = 1 << 0,
614
+ /*! Bind is for a client connection, not server */
615
+ ARES_SOCKET_BIND_CLIENT = 1 << 1
616
+ } ares_socket_bind_flags_t;
617
+
618
+ /*! Socket functions to call rather than using OS-native functions */
619
+ struct ares_socket_functions_ex {
620
+ /*! ABI Version: must be "1" */
621
+ unsigned int version;
622
+
623
+ /*! Flags indicating behavior of the subsystem. One or more
624
+ * ares_sockfunc_flags_t */
625
+ unsigned int flags;
626
+
627
+ /*! REQUIRED. Create a new socket file descriptor. The file descriptor must
628
+ * be opened in non-blocking mode (so that reads and writes never block).
629
+ * Recommended other options would be to disable signals on write errors
630
+ * (SO_NOSIGPIPE), Disable the Nagle algorithm on SOCK_STREAM (TCP_NODELAY),
631
+ * and to automatically close file descriptors on exec (FD_CLOEXEC).
632
+ *
633
+ * \param[in] domain Socket domain. Valid values are AF_INET, AF_INET6.
634
+ * \param[in] type Socket type. Valid values are SOCK_STREAM (tcp) and
635
+ * SOCK_DGRAM (udp).
636
+ * \param[in] protocol In general this should be ignored, may be passed as
637
+ * 0 (use as default for type), or may be IPPROTO_UDP
638
+ * or IPPROTO_TCP.
639
+ * \param[in] user_data Pointer provided to ares_set_socket_functions_ex().
640
+ * \return ARES_SOCKET_BAD on error, or socket file descriptor on success.
641
+ * On error, it is expected to set errno (or WSASetLastError()) to an
642
+ * appropriate reason code such as EAFNOSUPPORT / WSAAFNOSUPPORT. */
643
+ ares_socket_t (*asocket)(int domain, int type, int protocol, void *user_data);
644
+
645
+ /*! REQUIRED. Close a socket file descriptor.
646
+ * \param[in] sock Socket file descriptor returned from asocket.
647
+ * \param[in] user_data Pointer provided to ares_set_socket_functions_ex().
648
+ * \return 0 on success. On failure, should set errno (or WSASetLastError)
649
+ * to an appropriate code such as EBADF / WSAEBADF */
650
+ int (*aclose)(ares_socket_t sock, void *user_data);
651
+
652
+
653
+ /*! REQUIRED. Set socket option. This shares a similar syntax to the BSD
654
+ * setsockopt() call, however we use our own options. The value is typically
655
+ * a pointer to the desired value and each option has its own data type it
656
+ * will express in the documentation.
657
+ *
658
+ * \param[in] sock Socket file descriptor returned from asocket.
659
+ * \param[in] opt Option to set.
660
+ * \param[in] val Pointer to value for option.
661
+ * \param[in] val_size Size of value.
662
+ * \param[in] user_data Pointer provided to
663
+ * ares_set_socket_functions_ex().
664
+ * \return Return 0 on success, otherwise -1 should be returned with an
665
+ * appropriate errno (or WSASetLastError()) set. If error is ENOSYS /
666
+ * WSAEOPNOTSUPP an error will not be propagated as it will take it
667
+ * to mean it is an intentional decision to not support the feature.
668
+ */
669
+ int (*asetsockopt)(ares_socket_t sock, ares_socket_opt_t opt, const void *val,
670
+ ares_socklen_t val_size, void *user_data);
671
+
672
+ /*! REQUIRED. Connect to the remote using the supplied address. For UDP
673
+ * sockets this will bind the file descriptor to only send and receive packets
674
+ * from the remote address provided.
675
+ *
676
+ * \param[in] sock Socket file descriptor returned from asocket.
677
+ * \param[in] address Address to connect to
678
+ * \param[in] address_len Size of address structure passed
679
+ * \param[in] flags One or more ares_socket_connect_flags_t
680
+ * \param[in] user_data Pointer provided to
681
+ * ares_set_socket_functions_ex().
682
+ * \return Return 0 upon successful establishement, otherwise -1 should be
683
+ * returned with an appropriate errno (or WSASetLastError()) set. It
684
+ * is generally expected that most TCP connections (not using TCP Fast Open)
685
+ * will return -1 with an error of EINPROGRESS / WSAEINPROGRESS due to the
686
+ * non-blocking nature of the connection. It is then the responsibility of
687
+ * the implementation to notify of writability on the socket to indicate the
688
+ * connection has succeeded (or readability on failure to retrieve the
689
+ * appropriate error).
690
+ */
691
+ int (*aconnect)(ares_socket_t sock, const struct sockaddr *address,
692
+ ares_socklen_t address_len, unsigned int flags,
693
+ void *user_data);
694
+
695
+ /*! REQUIRED. Attempt to read data from the remote.
696
+ *
697
+ * \param[in] sock Socket file descriptor returned from asocket.
698
+ * \param[in,out] buffer Allocated buffer to place data read from
699
+ * socket.
700
+ * \param[in] length Size of buffer
701
+ * \param[in] flags Unused, always 0.
702
+ * \param[in,out] address Buffer to hold address data was received from.
703
+ * May be NULL if address not desired.
704
+ * \param[in,out] address_len Input size of address buffer, output actual
705
+ * written size. Must be NULL if address is NULL.
706
+ * \param[in] user_data Pointer provided to
707
+ * ares_set_socket_functions_ex().
708
+ * \return -1 on error with appropriate errno (or WSASetLastError()) set,
709
+ * such as EWOULDBLOCK / EAGAIN / WSAEWOULDBLOCK, or ECONNRESET /
710
+ * WSAECONNRESET.
711
+ */
712
+ ares_ssize_t (*arecvfrom)(ares_socket_t sock, void *buffer, size_t length,
713
+ int flags, struct sockaddr *address,
714
+ ares_socklen_t *address_len, void *user_data);
715
+
716
+ /*! REQUIRED. Attempt to send data to the remote. Optional address may be
717
+ * specified which may be useful on unbound UDP sockets (though currently not
718
+ * used), and TCP FastOpen where the connection is delayed until first write.
719
+ *
720
+ * \param[in] sock Socket file descriptor returned from asocket.
721
+ * \param[in] buffer Containing data to place onto wire.
722
+ * \param[in] length Size of buffer
723
+ * \param[in] flags Flags for writing. Currently only used flag is
724
+ * MSG_NOSIGNAL if the host OS has such a flag. In
725
+ * general flags can be ignored.
726
+ * \param[in] address Buffer containing address to send data to. May
727
+ * be NULL.
728
+ * \param[in,out] address_len Size of address buffer. Must be 0 if address
729
+ * is NULL.
730
+ * \param[in] user_data Pointer provided to
731
+ * ares_set_socket_functions_ex().
732
+ * \return Number of bytes written. -1 on error with appropriate errno (or
733
+ * WSASetLastError()) set.
734
+ */
735
+ ares_ssize_t (*asendto)(ares_socket_t sock, const void *buffer, size_t length,
736
+ int flags, const struct sockaddr *address,
737
+ ares_socklen_t address_len, void *user_data);
738
+
739
+ /*! Optional. Retrieve the local address of the socket.
740
+ *
741
+ * \param[in] sock Socket file descriptor returned from asocket
742
+ * \param[in,out] address Buffer to hold address
743
+ * \param[in,out] address_len Size of address buffer on input, written size
744
+ * on output.
745
+ * \param[in] user_data Pointer provided to
746
+ * ares_set_socket_functions_ex().
747
+ * \return 0 on success. -1 on error with an appropriate errno (or
748
+ * WSASetLastError()) set.
749
+ */
750
+ int (*agetsockname)(ares_socket_t sock, struct sockaddr *address,
751
+ ares_socklen_t *address_len, void *user_data);
752
+
753
+ /*! Optional. Bind the socket to an address. This can be used for client
754
+ * connections to bind the source address for packets before connect, or
755
+ * for server connections to bind to an address and port before listening.
756
+ * Currently c-ares only supports client connections.
757
+ *
758
+ * \param[in] sock Socket file descriptor returned from asocket
759
+ * \param[in] flags ares_socket_bind_flags_t flags.
760
+ * \param[in] address Buffer containing address.
761
+ * \param[in] address_len Size of address buffer.
762
+ * \param[in] user_data Pointer provided to
763
+ * ares_set_socket_functions_ex().
764
+ * \return 0 on success. -1 on error with an appropriate errno (or
765
+ * WSASetLastError()) set.
766
+ */
767
+ int (*abind)(ares_socket_t sock, unsigned int flags,
768
+ const struct sockaddr *address, socklen_t address_len,
769
+ void *user_data);
770
+
771
+ /* Optional. Convert an interface name into the interface index. If this
772
+ * callback is not specified, then IPv6 Link-Local DNS servers cannot be used.
773
+ *
774
+ * \param[in] ifname Interface Name as NULL-terminated string.
775
+ * \param[in] user_data Pointer provided to
776
+ * ares_set_socket_functions_ex().
777
+ * \return 0 on failure, otherwise interface index.
778
+ */
779
+ unsigned int (*aif_nametoindex)(const char *ifname, void *user_data);
780
+
781
+ /* Optional. Convert an interface index into the interface name. If this
782
+ * callback is not specified, then IPv6 Link-Local DNS servers cannot be used.
783
+ *
784
+ * \param[in] ifindex Interface index, must be > 0
785
+ * \param[in] ifname_buf Buffer to hold interface name. Must be at least
786
+ * IFNAMSIZ in length or 32 bytes if IFNAMSIZ isn't
787
+ * defined.
788
+ * \param[in] ifname_buf_len Size of ifname_buf for verification.
789
+ * \param[in] user_data Pointer provided to
790
+ * ares_set_socket_functions_ex().
791
+ * \return NULL on failure, otherwise pointer to provided ifname_buf
792
+ */
793
+ const char *(*aif_indextoname)(unsigned int ifindex, char *ifname_buf,
794
+ size_t ifname_buf_len, void *user_data);
795
+ };
796
+
797
+ /*! Override the native socket functions for the OS with the provided set.
798
+ * An optional user data thunk may be specified which will be passed to
799
+ * each registered callback. Replaces ares_set_socket_functions().
800
+ *
801
+ * \param[in] channel An initialized c-ares channel.
802
+ * \param[in] funcs Structure registering the implementations for the
803
+ * various functions. See the structure definition.
804
+ * This will be duplicated and does not need to exist
805
+ * past the life of this call.
806
+ * \param[in] user_data User data thunk which will be passed to each call of
807
+ * the registered callbacks.
808
+ * \return ARES_SUCCESS on success, or another error code such as ARES_EFORMERR
809
+ * on misuse.
810
+ */
811
+ CARES_EXTERN ares_status_t ares_set_socket_functions_ex(
812
+ ares_channel_t *channel, const struct ares_socket_functions_ex *funcs,
813
+ void *user_data);
814
+
815
+
816
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_send_dnsrec) void ares_send(
817
+ ares_channel_t *channel, const unsigned char *qbuf, int qlen,
818
+ ares_callback callback, void *arg);
819
+
820
+ /*! Send a DNS query as an ares_dns_record_t with a callback containing the
821
+ * parsed DNS record.
822
+ *
823
+ * \param[in] channel Pointer to channel on which queries will be sent.
824
+ * \param[in] dnsrec DNS Record to send
825
+ * \param[in] callback Callback function invoked on completion or failure of
826
+ * the query sequence.
827
+ * \param[in] arg Additional argument passed to the callback function.
828
+ * \param[out] qid Query ID
829
+ * \return One of the c-ares status codes.
830
+ */
831
+ CARES_EXTERN ares_status_t ares_send_dnsrec(ares_channel_t *channel,
832
+ const ares_dns_record_t *dnsrec,
833
+ ares_callback_dnsrec callback,
834
+ void *arg, unsigned short *qid);
835
+
836
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_query_dnsrec) void ares_query(
837
+ ares_channel_t *channel, const char *name, int dnsclass, int type,
838
+ ares_callback callback, void *arg);
839
+
840
+ /*! Perform a DNS query with a callback containing the parsed DNS record.
841
+ *
842
+ * \param[in] channel Pointer to channel on which queries will be sent.
843
+ * \param[in] name Query name
844
+ * \param[in] dnsclass DNS Class
845
+ * \param[in] type DNS Record Type
846
+ * \param[in] callback Callback function invoked on completion or failure of
847
+ * the query sequence.
848
+ * \param[in] arg Additional argument passed to the callback function.
849
+ * \param[out] qid Query ID
850
+ * \return One of the c-ares status codes.
851
+ */
852
+ CARES_EXTERN ares_status_t ares_query_dnsrec(ares_channel_t *channel,
853
+ const char *name,
854
+ ares_dns_class_t dnsclass,
855
+ ares_dns_rec_type_t type,
856
+ ares_callback_dnsrec callback,
857
+ void *arg, unsigned short *qid);
858
+
859
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_search_dnsrec) void ares_search(
860
+ ares_channel_t *channel, const char *name, int dnsclass, int type,
861
+ ares_callback callback, void *arg);
862
+
863
+ /*! Search for a complete DNS message.
864
+ *
865
+ * \param[in] channel Pointer to channel on which queries will be sent.
866
+ * \param[in] dnsrec Pointer to initialized and filled DNS record object.
867
+ * \param[in] callback Callback function invoked on completion or failure of
868
+ * the query sequence.
869
+ * \param[in] arg Additional argument passed to the callback function.
870
+ * \return One of the c-ares status codes. In all cases, except
871
+ * ARES_EFORMERR due to misuse, this error code will also be sent
872
+ * to the provided callback.
873
+ */
874
+ CARES_EXTERN ares_status_t ares_search_dnsrec(ares_channel_t *channel,
875
+ const ares_dns_record_t *dnsrec,
876
+ ares_callback_dnsrec callback,
877
+ void *arg);
878
+
879
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_getaddrinfo) void ares_gethostbyname(
880
+ ares_channel_t *channel, const char *name, int family,
881
+ ares_host_callback callback, void *arg);
882
+
883
+ CARES_EXTERN int ares_gethostbyname_file(ares_channel_t *channel,
884
+ const char *name, int family,
885
+ struct hostent **host);
886
+
887
+ CARES_EXTERN void ares_gethostbyaddr(ares_channel_t *channel, const void *addr,
888
+ int addrlen, int family,
889
+ ares_host_callback callback, void *arg);
890
+
891
+ CARES_EXTERN void ares_getnameinfo(ares_channel_t *channel,
462
892
  const struct sockaddr *sa,
463
- ares_socklen_t salen,
464
- int flags,
465
- ares_nameinfo_callback callback,
466
- void *arg);
467
-
468
- CARES_EXTERN int ares_fds(ares_channel channel,
469
- fd_set *read_fds,
470
- fd_set *write_fds);
471
-
472
- CARES_EXTERN int ares_getsock(ares_channel channel,
473
- ares_socket_t *socks,
474
- int numsocks);
475
-
476
- CARES_EXTERN struct timeval *ares_timeout(ares_channel channel,
477
- struct timeval *maxtv,
478
- struct timeval *tv);
479
-
480
- CARES_EXTERN void ares_process(ares_channel channel,
481
- fd_set *read_fds,
482
- fd_set *write_fds);
483
-
484
- CARES_EXTERN void ares_process_fd(ares_channel channel,
485
- ares_socket_t read_fd,
486
- ares_socket_t write_fd);
487
-
488
- CARES_EXTERN int ares_create_query(const char *name,
489
- int dnsclass,
490
- int type,
491
- unsigned short id,
492
- int rd,
493
- unsigned char **buf,
494
- int *buflen,
495
- int max_udp_size);
496
-
497
- CARES_EXTERN int ares_mkquery(const char *name,
498
- int dnsclass,
499
- int type,
500
- unsigned short id,
501
- int rd,
502
- unsigned char **buf,
503
- int *buflen);
893
+ ares_socklen_t salen, int flags,
894
+ ares_nameinfo_callback callback, void *arg);
895
+
896
+ CARES_EXTERN CARES_DEPRECATED_FOR(
897
+ ARES_OPT_EVENT_THREAD or
898
+ ARES_OPT_SOCK_STATE_CB) int ares_fds(const ares_channel_t *channel,
899
+ fd_set *read_fds, fd_set *write_fds);
900
+
901
+ CARES_EXTERN CARES_DEPRECATED_FOR(
902
+ ARES_OPT_EVENT_THREAD or
903
+ ARES_OPT_SOCK_STATE_CB) int ares_getsock(const ares_channel_t *channel,
904
+ ares_socket_t *socks, int numsocks);
905
+
906
+ CARES_EXTERN struct timeval *ares_timeout(const ares_channel_t *channel,
907
+ struct timeval *maxtv,
908
+ struct timeval *tv);
909
+
910
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_process_fds) void ares_process(
911
+ ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds);
912
+
913
+ /*! Events used by ares_fd_events_t */
914
+ typedef enum {
915
+ ARES_FD_EVENT_NONE = 0, /*!< No events */
916
+ ARES_FD_EVENT_READ = 1 << 0, /*!< Read event (including disconnect/error) */
917
+ ARES_FD_EVENT_WRITE = 1 << 1 /*!< Write event */
918
+ } ares_fd_eventflag_t;
919
+
920
+ /*! Type holding a file descriptor and mask of events, used by
921
+ * ares_process_fds() */
922
+ typedef struct {
923
+ ares_socket_t fd; /*!< File descriptor */
924
+ unsigned int events; /*!< Mask of ares_fd_eventflag_t */
925
+ } ares_fd_events_t;
926
+
927
+ /*! Flags used by ares_process_fds() */
928
+ typedef enum {
929
+ ARES_PROCESS_FLAG_NONE = 0, /*!< No flag value */
930
+ ARES_PROCESS_FLAG_SKIP_NON_FD = 1 << 0 /*!< skip any processing unrelated to
931
+ * the file descriptor events passed
932
+ * in */
933
+ } ares_process_flag_t;
934
+
935
+ /*! Process events on multiple file descriptors based on the event mask
936
+ * associated with each file descriptor. Recommended over calling
937
+ * ares_process_fd() multiple times since it would trigger additional logic
938
+ * such as timeout processing on each call.
939
+ *
940
+ * \param[in] channel Initialized ares channel
941
+ * \param[in] events Array of file descriptors with events. May be NULL if
942
+ * no events, but may have timeouts to process.
943
+ * \param[in] nevents Number of elements in the events array. May be 0 if
944
+ * no events, but may have timeouts to process.
945
+ * \param[in] flags Flags to alter behavior of the process command.
946
+ * \return ARES_ENOMEM on out of memory, ARES_EFORMERR on misuse,
947
+ * otherwise ARES_SUCCESS
948
+ */
949
+ CARES_EXTERN ares_status_t ares_process_fds(ares_channel_t *channel,
950
+ const ares_fd_events_t *events,
951
+ size_t nevents, unsigned int flags);
952
+
953
+ CARES_EXTERN void ares_process_fd(ares_channel_t *channel,
954
+ ares_socket_t read_fd,
955
+ ares_socket_t write_fd);
956
+
957
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_record_create) int ares_create_query(
958
+ const char *name, int dnsclass, int type, unsigned short id, int rd,
959
+ unsigned char **buf, int *buflen, int max_udp_size);
960
+
961
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_record_create) int ares_mkquery(
962
+ const char *name, int dnsclass, int type, unsigned short id, int rd,
963
+ unsigned char **buf, int *buflen);
504
964
 
505
965
  CARES_EXTERN int ares_expand_name(const unsigned char *encoded,
506
- const unsigned char *abuf,
507
- int alen,
508
- char **s,
966
+ const unsigned char *abuf, int alen, char **s,
509
967
  long *enclen);
510
968
 
511
969
  CARES_EXTERN int ares_expand_string(const unsigned char *encoded,
512
- const unsigned char *abuf,
513
- int alen,
514
- unsigned char **s,
515
- long *enclen);
516
-
517
- /*
518
- * NOTE: before c-ares 1.7.0 we would most often use the system in6_addr
519
- * struct below when ares itself was built, but many apps would use this
520
- * private version since the header checked a HAVE_* define for it. Starting
521
- * with 1.7.0 we always declare and use our own to stop relying on the
522
- * system's one.
523
- */
524
- struct ares_in6_addr {
525
- union {
526
- unsigned char _S6_u8[16];
527
- } _S6_un;
528
- };
970
+ const unsigned char *abuf, int alen,
971
+ unsigned char **s, long *enclen);
529
972
 
530
973
  struct ares_addrttl {
531
974
  struct in_addr ipaddr;
@@ -534,47 +977,47 @@ struct ares_addrttl {
534
977
 
535
978
  struct ares_addr6ttl {
536
979
  struct ares_in6_addr ip6addr;
537
- int ttl;
980
+ int ttl;
538
981
  };
539
982
 
540
983
  struct ares_caa_reply {
541
- struct ares_caa_reply *next;
542
- int critical;
543
- unsigned char *property;
544
- size_t plength; /* plength excludes null termination */
545
- unsigned char *value;
546
- size_t length; /* length excludes null termination */
984
+ struct ares_caa_reply *next;
985
+ int critical;
986
+ unsigned char *property;
987
+ size_t plength; /* plength excludes null termination */
988
+ unsigned char *value;
989
+ size_t length; /* length excludes null termination */
547
990
  };
548
991
 
549
992
  struct ares_srv_reply {
550
- struct ares_srv_reply *next;
551
- char *host;
552
- unsigned short priority;
553
- unsigned short weight;
554
- unsigned short port;
993
+ struct ares_srv_reply *next;
994
+ char *host;
995
+ unsigned short priority;
996
+ unsigned short weight;
997
+ unsigned short port;
555
998
  };
556
999
 
557
1000
  struct ares_mx_reply {
558
- struct ares_mx_reply *next;
559
- char *host;
560
- unsigned short priority;
1001
+ struct ares_mx_reply *next;
1002
+ char *host;
1003
+ unsigned short priority;
561
1004
  };
562
1005
 
563
1006
  struct ares_txt_reply {
564
- struct ares_txt_reply *next;
565
- unsigned char *txt;
566
- size_t length; /* length excludes null termination */
1007
+ struct ares_txt_reply *next;
1008
+ unsigned char *txt;
1009
+ size_t length; /* length excludes null termination */
567
1010
  };
568
1011
 
569
1012
  /* NOTE: This structure is a superset of ares_txt_reply
570
1013
  */
571
1014
  struct ares_txt_ext {
572
- struct ares_txt_ext *next;
573
- unsigned char *txt;
574
- size_t length;
1015
+ struct ares_txt_ext *next;
1016
+ unsigned char *txt;
1017
+ size_t length;
575
1018
  /* 1 - if start of new record
576
1019
  * 0 - if a chunk in the same record */
577
- unsigned char record_start;
1020
+ unsigned char record_start;
578
1021
  };
579
1022
 
580
1023
  struct ares_naptr_reply {
@@ -598,11 +1041,11 @@ struct ares_soa_reply {
598
1041
  };
599
1042
 
600
1043
  struct ares_uri_reply {
601
- struct ares_uri_reply *next;
602
- unsigned short priority;
603
- unsigned short weight;
604
- char *uri;
605
- int ttl;
1044
+ struct ares_uri_reply *next;
1045
+ unsigned short priority;
1046
+ unsigned short weight;
1047
+ char *uri;
1048
+ int ttl;
606
1049
  };
607
1050
 
608
1051
  /*
@@ -652,72 +1095,57 @@ struct ares_addrinfo_hints {
652
1095
  ** so written.
653
1096
  */
654
1097
 
655
- CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf,
656
- int alen,
657
- struct hostent **host,
658
- struct ares_addrttl *addrttls,
659
- int *naddrttls);
1098
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_a_reply(
1099
+ const unsigned char *abuf, int alen, struct hostent **host,
1100
+ struct ares_addrttl *addrttls, int *naddrttls);
660
1101
 
661
- CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf,
662
- int alen,
663
- struct hostent **host,
664
- struct ares_addr6ttl *addrttls,
665
- int *naddrttls);
1102
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_aaaa_reply(
1103
+ const unsigned char *abuf, int alen, struct hostent **host,
1104
+ struct ares_addr6ttl *addrttls, int *naddrttls);
666
1105
 
667
- CARES_EXTERN int ares_parse_caa_reply(const unsigned char* abuf,
668
- int alen,
669
- struct ares_caa_reply** caa_out);
1106
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_caa_reply(
1107
+ const unsigned char *abuf, int alen, struct ares_caa_reply **caa_out);
670
1108
 
671
- CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf,
672
- int alen,
673
- const void *addr,
674
- int addrlen,
675
- int family,
676
- struct hostent **host);
1109
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_ptr_reply(
1110
+ const unsigned char *abuf, int alen, const void *addr, int addrlen,
1111
+ int family, struct hostent **host);
677
1112
 
678
- CARES_EXTERN int ares_parse_ns_reply(const unsigned char *abuf,
679
- int alen,
680
- struct hostent **host);
1113
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_ns_reply(
1114
+ const unsigned char *abuf, int alen, struct hostent **host);
681
1115
 
682
- CARES_EXTERN int ares_parse_srv_reply(const unsigned char* abuf,
683
- int alen,
684
- struct ares_srv_reply** srv_out);
1116
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_srv_reply(
1117
+ const unsigned char *abuf, int alen, struct ares_srv_reply **srv_out);
685
1118
 
686
- CARES_EXTERN int ares_parse_mx_reply(const unsigned char* abuf,
687
- int alen,
688
- struct ares_mx_reply** mx_out);
1119
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_mx_reply(
1120
+ const unsigned char *abuf, int alen, struct ares_mx_reply **mx_out);
689
1121
 
690
- CARES_EXTERN int ares_parse_txt_reply(const unsigned char* abuf,
691
- int alen,
692
- struct ares_txt_reply** txt_out);
1122
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_txt_reply(
1123
+ const unsigned char *abuf, int alen, struct ares_txt_reply **txt_out);
693
1124
 
694
- CARES_EXTERN int ares_parse_txt_reply_ext(const unsigned char* abuf,
695
- int alen,
696
- struct ares_txt_ext** txt_out);
1125
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_txt_reply_ext(
1126
+ const unsigned char *abuf, int alen, struct ares_txt_ext **txt_out);
697
1127
 
698
- CARES_EXTERN int ares_parse_naptr_reply(const unsigned char* abuf,
699
- int alen,
700
- struct ares_naptr_reply** naptr_out);
1128
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_naptr_reply(
1129
+ const unsigned char *abuf, int alen, struct ares_naptr_reply **naptr_out);
701
1130
 
702
- CARES_EXTERN int ares_parse_soa_reply(const unsigned char* abuf,
703
- int alen,
704
- struct ares_soa_reply** soa_out);
1131
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_soa_reply(
1132
+ const unsigned char *abuf, int alen, struct ares_soa_reply **soa_out);
705
1133
 
706
- CARES_EXTERN int ares_parse_uri_reply(const unsigned char* abuf,
707
- int alen,
708
- struct ares_uri_reply** uri_out);
1134
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_dns_parse) int ares_parse_uri_reply(
1135
+ const unsigned char *abuf, int alen, struct ares_uri_reply **uri_out);
709
1136
 
710
- CARES_EXTERN void ares_free_string(void *str);
1137
+ CARES_EXTERN void ares_free_string(void *str);
711
1138
 
712
- CARES_EXTERN void ares_free_hostent(struct hostent *host);
1139
+ CARES_EXTERN void ares_free_hostent(struct hostent *host);
713
1140
 
714
- CARES_EXTERN void ares_free_data(void *dataptr);
1141
+ CARES_EXTERN void ares_free_data(void *dataptr);
715
1142
 
716
1143
  CARES_EXTERN const char *ares_strerror(int code);
717
1144
 
718
1145
  struct ares_addr_node {
719
1146
  struct ares_addr_node *next;
720
- int family;
1147
+ int family;
1148
+
721
1149
  union {
722
1150
  struct in_addr addr4;
723
1151
  struct ares_in6_addr addr6;
@@ -726,38 +1154,75 @@ struct ares_addr_node {
726
1154
 
727
1155
  struct ares_addr_port_node {
728
1156
  struct ares_addr_port_node *next;
729
- int family;
1157
+ int family;
1158
+
730
1159
  union {
731
1160
  struct in_addr addr4;
732
1161
  struct ares_in6_addr addr6;
733
1162
  } addr;
1163
+
734
1164
  int udp_port;
735
1165
  int tcp_port;
736
1166
  };
737
1167
 
738
- CARES_EXTERN int ares_set_servers(ares_channel channel,
739
- struct ares_addr_node *servers);
740
- CARES_EXTERN int ares_set_servers_ports(ares_channel channel,
741
- struct ares_addr_port_node *servers);
1168
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_set_servers_csv) int ares_set_servers(
1169
+ ares_channel_t *channel, const struct ares_addr_node *servers);
1170
+
1171
+ CARES_EXTERN
1172
+ CARES_DEPRECATED_FOR(ares_set_servers_ports_csv)
1173
+ int ares_set_servers_ports(ares_channel_t *channel,
1174
+ const struct ares_addr_port_node *servers);
1175
+
1176
+ /* Incoming string format: host[:port][,host[:port]]... */
1177
+ CARES_EXTERN int ares_set_servers_csv(ares_channel_t *channel,
1178
+ const char *servers);
1179
+ CARES_EXTERN int ares_set_servers_ports_csv(ares_channel_t *channel,
1180
+ const char *servers);
1181
+ CARES_EXTERN char *ares_get_servers_csv(const ares_channel_t *channel);
742
1182
 
743
- /* Incomming string format: host[:port][,host[:port]]... */
744
- CARES_EXTERN int ares_set_servers_csv(ares_channel channel,
745
- const char* servers);
746
- CARES_EXTERN int ares_set_servers_ports_csv(ares_channel channel,
747
- const char* servers);
1183
+ CARES_EXTERN CARES_DEPRECATED_FOR(ares_get_servers_csv) int ares_get_servers(
1184
+ const ares_channel_t *channel, struct ares_addr_node **servers);
748
1185
 
749
- CARES_EXTERN int ares_get_servers(ares_channel channel,
750
- struct ares_addr_node **servers);
751
- CARES_EXTERN int ares_get_servers_ports(ares_channel channel,
752
- struct ares_addr_port_node **servers);
1186
+ CARES_EXTERN
1187
+ CARES_DEPRECATED_FOR(ares_get_servers_csv)
1188
+ int ares_get_servers_ports(const ares_channel_t *channel,
1189
+ struct ares_addr_port_node **servers);
753
1190
 
754
- CARES_EXTERN const char *ares_inet_ntop(int af, const void *src, char *dst,
755
- ares_socklen_t size);
1191
+ CARES_EXTERN const char *ares_inet_ntop(int af, const void *src, char *dst,
1192
+ ares_socklen_t size);
756
1193
 
757
- CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
1194
+ CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
758
1195
 
1196
+ /*! Whether or not the c-ares library was built with threadsafety
1197
+ *
1198
+ * \return ARES_TRUE if built with threadsafety, ARES_FALSE if not
1199
+ */
1200
+ CARES_EXTERN ares_bool_t ares_threadsafety(void);
1201
+
1202
+
1203
+ /*! Block until notified that there are no longer any queries in queue, or
1204
+ * the specified timeout has expired.
1205
+ *
1206
+ * \param[in] channel Initialized ares channel
1207
+ * \param[in] timeout_ms Number of milliseconds to wait for the queue to be
1208
+ * empty. -1 for Infinite.
1209
+ * \return ARES_ENOTIMP if not built with threading support, ARES_ETIMEOUT
1210
+ * if requested timeout expires, ARES_SUCCESS when queue is empty.
1211
+ */
1212
+ CARES_EXTERN ares_status_t ares_queue_wait_empty(ares_channel_t *channel,
1213
+ int timeout_ms);
1214
+
1215
+
1216
+ /*! Retrieve the total number of active queries pending answers from servers.
1217
+ * Some c-ares requests may spawn multiple queries, such as ares_getaddrinfo()
1218
+ * when using AF_UNSPEC, which will be reflected in this number.
1219
+ *
1220
+ * \param[in] channel Initialized ares channel
1221
+ * \return Number of active queries to servers
1222
+ */
1223
+ CARES_EXTERN size_t ares_queue_active_queries(const ares_channel_t *channel);
759
1224
 
760
- #ifdef __cplusplus
1225
+ #ifdef __cplusplus
761
1226
  }
762
1227
  #endif
763
1228