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,21 +1,31 @@
1
-
2
-
3
- /* Copyright 1998 by the Massachusetts Institute of Technology.
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 1998 Massachusetts Institute of Technology
4
+ * Copyright (c) The c-ares project and its contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice (including the next
14
+ * paragraph) shall be included in all copies or substantial portions of the
15
+ * Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
4
24
  *
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.
25
+ * SPDX-License-Identifier: MIT
16
26
  */
17
27
 
18
- #include "ares_setup.h"
28
+ #include "ares_private.h"
19
29
  #include "ares_getenv.h"
20
30
 
21
31
  #ifndef HAVE_GETENV
@@ -1,23 +1,31 @@
1
- #ifndef HEADER_CARES_GETENV_H
2
- #define HEADER_CARES_GETENV_H
3
-
4
-
5
- /* Copyright 1998 by the Massachusetts Institute of Technology.
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 1998 Massachusetts Institute of Technology
4
+ * Copyright (c) The c-ares project and its contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
6
12
  *
7
- * Permission to use, copy, modify, and distribute this
8
- * software and its documentation for any purpose and without
9
- * fee is hereby granted, provided that the above copyright
10
- * notice appear in all copies and that both that copyright
11
- * notice and this permission notice appear in supporting
12
- * documentation, and that the name of M.I.T. not be used in
13
- * advertising or publicity pertaining to distribution of the
14
- * software without specific, written prior permission.
15
- * M.I.T. makes no representations about the suitability of
16
- * this software for any purpose. It is provided "as is"
17
- * 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
18
26
  */
19
-
20
- #include "ares_setup.h"
27
+ #ifndef HEADER_CARES_GETENV_H
28
+ #define HEADER_CARES_GETENV_H
21
29
 
22
30
  #ifndef HAVE_GETENV
23
31
  extern char *ares_getenv(const char *name);
@@ -1,19 +1,31 @@
1
-
2
- /* Copyright 1998 by the Massachusetts Institute of Technology.
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 1998 Massachusetts Institute of Technology
4
+ * Copyright (c) The c-ares project and its contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice (including the next
14
+ * paragraph) shall be included in all copies or substantial portions of the
15
+ * Software.
3
16
  *
4
- * Permission to use, copy, modify, and distribute this
5
- * software and its documentation for any purpose and without
6
- * fee is hereby granted, provided that the above copyright
7
- * notice appear in all copies and that both that copyright
8
- * notice and this permission notice appear in supporting
9
- * documentation, and that the name of M.I.T. not be used in
10
- * advertising or publicity pertaining to distribution of the
11
- * software without specific, written prior permission.
12
- * M.I.T. makes no representations about the suitability of
13
- * this software for any purpose. It is provided "as is"
14
- * without express or implied warranty.
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
15
26
  */
16
- #include "ares_setup.h"
27
+
28
+ #include "ares_private.h"
17
29
 
18
30
  #ifdef HAVE_NETINET_IN_H
19
31
  # include <netinet/in.h>
@@ -26,262 +38,192 @@
26
38
  #endif
27
39
 
28
40
  #include "ares_nameser.h"
29
-
30
- #include "ares.h"
31
41
  #include "ares_inet_net_pton.h"
32
- #include "ares_platform.h"
33
- #include "ares_private.h"
34
-
35
- #ifdef WATT32
36
- #undef WIN32
37
- #endif
38
42
 
39
43
  struct addr_query {
40
44
  /* Arguments passed to ares_gethostbyaddr() */
41
- ares_channel channel;
42
- struct ares_addr addr;
45
+ ares_channel_t *channel;
46
+ struct ares_addr addr;
43
47
  ares_host_callback callback;
44
- void *arg;
45
-
48
+ void *arg;
49
+ char *lookups; /* duplicate memory from channel for ares_reinit() */
46
50
  const char *remaining_lookups;
47
- int timeouts;
51
+ size_t timeouts;
48
52
  };
49
53
 
50
54
  static void next_lookup(struct addr_query *aquery);
51
- static void addr_callback(void *arg, int status, int timeouts,
52
- unsigned char *abuf, int alen);
53
- static void end_aquery(struct addr_query *aquery, int status,
55
+ static void addr_callback(void *arg, ares_status_t status, size_t timeouts,
56
+ const ares_dns_record_t *dnsrec);
57
+ static void end_aquery(struct addr_query *aquery, ares_status_t status,
54
58
  struct hostent *host);
55
- static int file_lookup(struct ares_addr *addr, struct hostent **host);
56
- static void ptr_rr_name(char *name, const struct ares_addr *addr);
59
+ static ares_status_t file_lookup(ares_channel_t *channel,
60
+ const struct ares_addr *addr,
61
+ struct hostent **host);
57
62
 
58
- void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
59
- int family, ares_host_callback callback, void *arg)
63
+ void ares_gethostbyaddr_nolock(ares_channel_t *channel, const void *addr,
64
+ int addrlen, int family,
65
+ ares_host_callback callback, void *arg)
60
66
  {
61
67
  struct addr_query *aquery;
62
68
 
63
- if (family != AF_INET && family != AF_INET6)
64
- {
65
- callback(arg, ARES_ENOTIMP, 0, NULL);
66
- return;
67
- }
69
+ if (family != AF_INET && family != AF_INET6) {
70
+ callback(arg, ARES_ENOTIMP, 0, NULL);
71
+ return;
72
+ }
68
73
 
69
- if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) ||
70
- (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6)))
71
- {
72
- callback(arg, ARES_ENOTIMP, 0, NULL);
73
- return;
74
- }
74
+ if ((family == AF_INET && addrlen != sizeof(aquery->addr.addr.addr4)) ||
75
+ (family == AF_INET6 && addrlen != sizeof(aquery->addr.addr.addr6))) {
76
+ callback(arg, ARES_ENOTIMP, 0, NULL);
77
+ return;
78
+ }
75
79
 
76
80
  aquery = ares_malloc(sizeof(struct addr_query));
77
- if (!aquery)
78
- {
79
- callback(arg, ARES_ENOMEM, 0, NULL);
80
- return;
81
- }
81
+ if (!aquery) {
82
+ callback(arg, ARES_ENOMEM, 0, NULL);
83
+ return;
84
+ }
85
+ aquery->lookups = ares_strdup(channel->lookups);
86
+ if (aquery->lookups == NULL) {
87
+ /* LCOV_EXCL_START: OutOfMemory */
88
+ ares_free(aquery);
89
+ callback(arg, ARES_ENOMEM, 0, NULL);
90
+ return;
91
+ /* LCOV_EXCL_STOP */
92
+ }
82
93
  aquery->channel = channel;
83
- if (family == AF_INET)
84
- memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4));
85
- else
86
- memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6));
87
- aquery->addr.family = family;
88
- aquery->callback = callback;
89
- aquery->arg = arg;
90
- aquery->remaining_lookups = channel->lookups;
91
- aquery->timeouts = 0;
94
+ if (family == AF_INET) {
95
+ memcpy(&aquery->addr.addr.addr4, addr, sizeof(aquery->addr.addr.addr4));
96
+ } else {
97
+ memcpy(&aquery->addr.addr.addr6, addr, sizeof(aquery->addr.addr.addr6));
98
+ }
99
+ aquery->addr.family = family;
100
+ aquery->callback = callback;
101
+ aquery->arg = arg;
102
+ aquery->remaining_lookups = aquery->lookups;
103
+ aquery->timeouts = 0;
92
104
 
93
105
  next_lookup(aquery);
94
106
  }
95
107
 
96
- static void next_lookup(struct addr_query *aquery)
108
+ void ares_gethostbyaddr(ares_channel_t *channel, const void *addr, int addrlen,
109
+ int family, ares_host_callback callback, void *arg)
97
110
  {
98
- const char *p;
99
- char name[128];
100
- int status;
101
- struct hostent *host;
111
+ if (channel == NULL) {
112
+ return;
113
+ }
114
+ ares_channel_lock(channel);
115
+ ares_gethostbyaddr_nolock(channel, addr, addrlen, family, callback, arg);
116
+ ares_channel_unlock(channel);
117
+ }
102
118
 
103
- for (p = aquery->remaining_lookups; *p; p++)
104
- {
105
- switch (*p)
106
- {
107
- case 'b':
108
- ptr_rr_name(name, &aquery->addr);
109
- aquery->remaining_lookups = p + 1;
110
- ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
111
- aquery);
119
+ static void next_lookup(struct addr_query *aquery)
120
+ {
121
+ const char *p;
122
+ ares_status_t status;
123
+ struct hostent *host = NULL;
124
+ char *name;
125
+
126
+ for (p = aquery->remaining_lookups; *p; p++) {
127
+ switch (*p) {
128
+ case 'b':
129
+ name = ares_dns_addr_to_ptr(&aquery->addr);
130
+ if (name == NULL) {
131
+ end_aquery(aquery, ARES_ENOMEM,
132
+ NULL); /* LCOV_EXCL_LINE: OutOfMemory */
133
+ return; /* LCOV_EXCL_LINE: OutOfMemory */
134
+ }
135
+ aquery->remaining_lookups = p + 1;
136
+ ares_query_nolock(aquery->channel, name, ARES_CLASS_IN,
137
+ ARES_REC_TYPE_PTR, addr_callback, aquery, NULL);
138
+ ares_free(name);
139
+ return;
140
+ case 'f':
141
+ status = file_lookup(aquery->channel, &aquery->addr, &host);
142
+
143
+ /* this status check below previously checked for !ARES_ENOTFOUND,
144
+ but we should not assume that this single error code is the one
145
+ that can occur, as that is in fact no longer the case */
146
+ if (status == ARES_SUCCESS) {
147
+ end_aquery(aquery, status, host);
112
148
  return;
113
- case 'f':
114
- status = file_lookup(&aquery->addr, &host);
115
-
116
- /* this status check below previously checked for !ARES_ENOTFOUND,
117
- but we should not assume that this single error code is the one
118
- that can occur, as that is in fact no longer the case */
119
- if (status == ARES_SUCCESS)
120
- {
121
- end_aquery(aquery, status, host);
122
- return;
123
- }
124
- break;
125
149
  }
150
+ break;
151
+ default:
152
+ break;
126
153
  }
154
+ }
127
155
  end_aquery(aquery, ARES_ENOTFOUND, NULL);
128
156
  }
129
157
 
130
- static void addr_callback(void *arg, int status, int timeouts,
131
- unsigned char *abuf, int alen)
158
+ static void addr_callback(void *arg, ares_status_t status, size_t timeouts,
159
+ const ares_dns_record_t *dnsrec)
132
160
  {
133
- struct addr_query *aquery = (struct addr_query *) arg;
134
- struct hostent *host;
135
- size_t addrlen;
161
+ struct addr_query *aquery = (struct addr_query *)arg;
162
+ struct hostent *host;
163
+ size_t addrlen;
136
164
 
137
165
  aquery->timeouts += timeouts;
138
- if (status == ARES_SUCCESS)
139
- {
140
- if (aquery->addr.family == AF_INET)
141
- {
142
- addrlen = sizeof(aquery->addr.addrV4);
143
- status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4,
144
- (int)addrlen, AF_INET, &host);
145
- }
146
- else
147
- {
148
- addrlen = sizeof(aquery->addr.addrV6);
149
- status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6,
150
- (int)addrlen, AF_INET6, &host);
151
- }
152
- end_aquery(aquery, status, host);
166
+ if (status == ARES_SUCCESS) {
167
+ if (aquery->addr.family == AF_INET) {
168
+ addrlen = sizeof(aquery->addr.addr.addr4);
169
+ status = ares_parse_ptr_reply_dnsrec(dnsrec, &aquery->addr.addr.addr4,
170
+ (int)addrlen, AF_INET, &host);
171
+ } else {
172
+ addrlen = sizeof(aquery->addr.addr.addr6);
173
+ status = ares_parse_ptr_reply_dnsrec(dnsrec, &aquery->addr.addr.addr6,
174
+ (int)addrlen, AF_INET6, &host);
153
175
  }
154
- else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED)
176
+ end_aquery(aquery, status, host);
177
+ } else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED) {
155
178
  end_aquery(aquery, status, NULL);
156
- else
179
+ } else {
157
180
  next_lookup(aquery);
181
+ }
158
182
  }
159
183
 
160
- static void end_aquery(struct addr_query *aquery, int status,
184
+ static void end_aquery(struct addr_query *aquery, ares_status_t status,
161
185
  struct hostent *host)
162
186
  {
163
- aquery->callback(aquery->arg, status, aquery->timeouts, host);
164
- if (host)
187
+ aquery->callback(aquery->arg, (int)status, (int)aquery->timeouts, host);
188
+ if (host) {
165
189
  ares_free_hostent(host);
190
+ }
191
+ ares_free(aquery->lookups);
166
192
  ares_free(aquery);
167
193
  }
168
194
 
169
- static int file_lookup(struct ares_addr *addr, struct hostent **host)
195
+ static ares_status_t file_lookup(ares_channel_t *channel,
196
+ const struct ares_addr *addr,
197
+ struct hostent **host)
170
198
  {
171
- FILE *fp;
172
- int status;
173
- int error;
174
-
175
- #ifdef WIN32
176
- char PATH_HOSTS[MAX_PATH];
177
- win_platform platform;
178
-
179
- PATH_HOSTS[0] = '\0';
180
-
181
- platform = ares__getplatform();
182
-
183
- if (platform == WIN_NT) {
184
- char tmp[MAX_PATH];
185
- HKEY hkeyHosts;
186
-
187
- if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
188
- &hkeyHosts) == ERROR_SUCCESS)
189
- {
190
- DWORD dwLength = MAX_PATH;
191
- RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
192
- &dwLength);
193
- ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH);
194
- RegCloseKey(hkeyHosts);
195
- }
199
+ char ipaddr[INET6_ADDRSTRLEN];
200
+ const void *ptr = NULL;
201
+ const ares_hosts_entry_t *entry;
202
+ ares_status_t status;
203
+
204
+ if (addr->family == AF_INET) {
205
+ ptr = &addr->addr.addr4;
206
+ } else if (addr->family == AF_INET6) {
207
+ ptr = &addr->addr.addr6;
196
208
  }
197
- else if (platform == WIN_9X)
198
- GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH);
199
- else
200
- return ARES_ENOTFOUND;
201
-
202
- strcat(PATH_HOSTS, WIN_PATH_HOSTS);
203
209
 
204
- #elif defined(WATT32)
205
- const char *PATH_HOSTS = _w32_GetHostsFile();
210
+ if (ptr == NULL) {
211
+ return ARES_ENOTFOUND;
212
+ }
206
213
 
207
- if (!PATH_HOSTS)
214
+ if (!ares_inet_ntop(addr->family, ptr, ipaddr, sizeof(ipaddr))) {
208
215
  return ARES_ENOTFOUND;
209
- #endif
216
+ }
210
217
 
211
- fp = fopen(PATH_HOSTS, "r");
212
- if (!fp)
213
- {
214
- error = ERRNO;
215
- switch(error)
216
- {
217
- case ENOENT:
218
- case ESRCH:
219
- return ARES_ENOTFOUND;
220
- default:
221
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
222
- error, strerror(error)));
223
- DEBUGF(fprintf(stderr, "Error opening file: %s\n",
224
- PATH_HOSTS));
225
- *host = NULL;
226
- return ARES_EFILE;
227
- }
228
- }
229
- while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS)
230
- {
231
- if (addr->family != (*host)->h_addrtype)
232
- {
233
- ares_free_hostent(*host);
234
- continue;
235
- }
236
- if (addr->family == AF_INET)
237
- {
238
- if (memcmp((*host)->h_addr, &addr->addrV4,
239
- sizeof(addr->addrV4)) == 0)
240
- break;
241
- }
242
- else if (addr->family == AF_INET6)
243
- {
244
- if (memcmp((*host)->h_addr, &addr->addrV6,
245
- sizeof(addr->addrV6)) == 0)
246
- break;
247
- }
248
- ares_free_hostent(*host);
249
- }
250
- fclose(fp);
251
- if (status == ARES_EOF)
252
- status = ARES_ENOTFOUND;
253
- if (status != ARES_SUCCESS)
254
- *host = NULL;
255
- return status;
256
- }
218
+ status = ares_hosts_search_ipaddr(channel, ARES_FALSE, ipaddr, &entry);
219
+ if (status != ARES_SUCCESS) {
220
+ return status;
221
+ }
257
222
 
258
- static void ptr_rr_name(char *name, const struct ares_addr *addr)
259
- {
260
- if (addr->family == AF_INET)
261
- {
262
- unsigned long laddr = ntohl(addr->addrV4.s_addr);
263
- unsigned long a1 = (laddr >> 24UL) & 0xFFUL;
264
- unsigned long a2 = (laddr >> 16UL) & 0xFFUL;
265
- unsigned long a3 = (laddr >> 8UL) & 0xFFUL;
266
- unsigned long a4 = laddr & 0xFFUL;
267
- sprintf(name, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1);
268
- }
269
- else
270
- {
271
- unsigned char *bytes = (unsigned char *)&addr->addrV6;
272
- /* There are too many arguments to do this in one line using
273
- * minimally C89-compliant compilers */
274
- sprintf(name,
275
- "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.",
276
- bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
277
- bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
278
- bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
279
- bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4);
280
- sprintf(name+strlen(name),
281
- "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
282
- bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
283
- bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
284
- bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
285
- bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4);
286
- }
223
+ status = ares_hosts_entry_to_hostent(entry, addr->family, host);
224
+ if (status != ARES_SUCCESS) {
225
+ return status; /* LCOV_EXCL_LINE: OutOfMemory */
226
+ }
227
+
228
+ return ARES_SUCCESS;
287
229
  }