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,507 +0,0 @@
1
- /*
2
- * Original file name getaddrinfo.c
3
- * Lifted from the 'Android Bionic' project with the BSD license.
4
- */
5
-
6
- /*
7
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
8
- * Copyright (C) 2018 The Android Open Source Project
9
- * Copyright (C) 2019 by Andrew Selivanov
10
- * All rights reserved.
11
- *
12
- * Redistribution and use in source and binary forms, with or without
13
- * modification, are permitted provided that the following conditions
14
- * are met:
15
- * 1. Redistributions of source code must retain the above copyright
16
- * notice, this list of conditions and the following disclaimer.
17
- * 2. Redistributions in binary form must reproduce the above copyright
18
- * notice, this list of conditions and the following disclaimer in the
19
- * documentation and/or other materials provided with the distribution.
20
- * 3. Neither the name of the project nor the names of its contributors
21
- * may be used to endorse or promote products derived from this software
22
- * without specific prior written permission.
23
- *
24
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
25
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
28
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34
- * SUCH DAMAGE.
35
- */
36
-
37
- #include "ares_setup.h"
38
-
39
- #ifdef HAVE_NETINET_IN_H
40
- # include <netinet/in.h>
41
- #endif
42
- #ifdef HAVE_NETDB_H
43
- # include <netdb.h>
44
- #endif
45
- #ifdef HAVE_STRINGS_H
46
- # include <strings.h>
47
- #endif
48
-
49
- #include <assert.h>
50
- #include <limits.h>
51
-
52
- #include "ares.h"
53
- #include "ares_private.h"
54
-
55
- struct addrinfo_sort_elem
56
- {
57
- struct ares_addrinfo_node *ai;
58
- int has_src_addr;
59
- ares_sockaddr src_addr;
60
- int original_order;
61
- };
62
-
63
- #define ARES_IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f)
64
-
65
- #define ARES_IPV6_ADDR_SCOPE_NODELOCAL 0x01
66
- #define ARES_IPV6_ADDR_SCOPE_INTFACELOCAL 0x01
67
- #define ARES_IPV6_ADDR_SCOPE_LINKLOCAL 0x02
68
- #define ARES_IPV6_ADDR_SCOPE_SITELOCAL 0x05
69
- #define ARES_IPV6_ADDR_SCOPE_ORGLOCAL 0x08
70
- #define ARES_IPV6_ADDR_SCOPE_GLOBAL 0x0e
71
-
72
- #define ARES_IN_LOOPBACK(a) ((((long int)(a)) & 0xff000000) == 0x7f000000)
73
-
74
- /* RFC 4193. */
75
- #define ARES_IN6_IS_ADDR_ULA(a) (((a)->s6_addr[0] & 0xfe) == 0xfc)
76
-
77
- /* These macros are modelled after the ones in <netinet/in6.h>. */
78
- /* RFC 4380, section 2.6 */
79
- #define ARES_IN6_IS_ADDR_TEREDO(a) \
80
- ((*(const unsigned int *)(const void *)(&(a)->s6_addr[0]) == ntohl(0x20010000)))
81
- /* RFC 3056, section 2. */
82
- #define ARES_IN6_IS_ADDR_6TO4(a) \
83
- (((a)->s6_addr[0] == 0x20) && ((a)->s6_addr[1] == 0x02))
84
- /* 6bone testing address area (3ffe::/16), deprecated in RFC 3701. */
85
- #define ARES_IN6_IS_ADDR_6BONE(a) \
86
- (((a)->s6_addr[0] == 0x3f) && ((a)->s6_addr[1] == 0xfe))
87
-
88
-
89
- static int get_scope(const struct sockaddr *addr)
90
- {
91
- if (addr->sa_family == AF_INET6)
92
- {
93
- const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
94
- if (IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr))
95
- {
96
- return ARES_IPV6_ADDR_MC_SCOPE(&addr6->sin6_addr);
97
- }
98
- else if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr) ||
99
- IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr))
100
- {
101
- /*
102
- * RFC 4291 section 2.5.3 says loopback is to be treated as having
103
- * link-local scope.
104
- */
105
- return ARES_IPV6_ADDR_SCOPE_LINKLOCAL;
106
- }
107
- else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr))
108
- {
109
- return ARES_IPV6_ADDR_SCOPE_SITELOCAL;
110
- }
111
- else
112
- {
113
- return ARES_IPV6_ADDR_SCOPE_GLOBAL;
114
- }
115
- }
116
- else if (addr->sa_family == AF_INET)
117
- {
118
- const struct sockaddr_in *addr4 = CARES_INADDR_CAST(const struct sockaddr_in *, addr);
119
- unsigned long int na = ntohl(addr4->sin_addr.s_addr);
120
- if (ARES_IN_LOOPBACK(na) || /* 127.0.0.0/8 */
121
- (na & 0xffff0000) == 0xa9fe0000) /* 169.254.0.0/16 */
122
- {
123
- return ARES_IPV6_ADDR_SCOPE_LINKLOCAL;
124
- }
125
- else
126
- {
127
- /*
128
- * RFC 6724 section 3.2. Other IPv4 addresses, including private
129
- * addresses and shared addresses (100.64.0.0/10), are assigned global
130
- * scope.
131
- */
132
- return ARES_IPV6_ADDR_SCOPE_GLOBAL;
133
- }
134
- }
135
- else
136
- {
137
- /*
138
- * This should never happen.
139
- * Return a scope with low priority as a last resort.
140
- */
141
- return ARES_IPV6_ADDR_SCOPE_NODELOCAL;
142
- }
143
- }
144
-
145
- static int get_label(const struct sockaddr *addr)
146
- {
147
- if (addr->sa_family == AF_INET)
148
- {
149
- return 4;
150
- }
151
- else if (addr->sa_family == AF_INET6)
152
- {
153
- const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
154
- if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr))
155
- {
156
- return 0;
157
- }
158
- else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr))
159
- {
160
- return 4;
161
- }
162
- else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr))
163
- {
164
- return 2;
165
- }
166
- else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr))
167
- {
168
- return 5;
169
- }
170
- else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr))
171
- {
172
- return 13;
173
- }
174
- else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr))
175
- {
176
- return 3;
177
- }
178
- else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr))
179
- {
180
- return 11;
181
- }
182
- else if (ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr))
183
- {
184
- return 12;
185
- }
186
- else
187
- {
188
- /* All other IPv6 addresses, including global unicast addresses. */
189
- return 1;
190
- }
191
- }
192
- else
193
- {
194
- /*
195
- * This should never happen.
196
- * Return a semi-random label as a last resort.
197
- */
198
- return 1;
199
- }
200
- }
201
-
202
- /*
203
- * Get the precedence for a given IPv4/IPv6 address.
204
- * RFC 6724, section 2.1.
205
- */
206
- static int get_precedence(const struct sockaddr *addr)
207
- {
208
- if (addr->sa_family == AF_INET)
209
- {
210
- return 35;
211
- }
212
- else if (addr->sa_family == AF_INET6)
213
- {
214
- const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
215
- if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr))
216
- {
217
- return 50;
218
- }
219
- else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr))
220
- {
221
- return 35;
222
- }
223
- else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr))
224
- {
225
- return 30;
226
- }
227
- else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr))
228
- {
229
- return 5;
230
- }
231
- else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr))
232
- {
233
- return 3;
234
- }
235
- else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr) ||
236
- IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr) ||
237
- ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr))
238
- {
239
- return 1;
240
- }
241
- else
242
- {
243
- /* All other IPv6 addresses, including global unicast addresses. */
244
- return 40;
245
- }
246
- }
247
- else
248
- {
249
- return 1;
250
- }
251
- }
252
-
253
- /*
254
- * Find number of matching initial bits between the two addresses a1 and a2.
255
- */
256
- static int common_prefix_len(const struct in6_addr *a1,
257
- const struct in6_addr *a2)
258
- {
259
- const char *p1 = (const char *)a1;
260
- const char *p2 = (const char *)a2;
261
- unsigned i;
262
- for (i = 0; i < sizeof(*a1); ++i)
263
- {
264
- int x, j;
265
- if (p1[i] == p2[i])
266
- {
267
- continue;
268
- }
269
- x = p1[i] ^ p2[i];
270
- for (j = 0; j < CHAR_BIT; ++j)
271
- {
272
- if (x & (1 << (CHAR_BIT - 1)))
273
- {
274
- return i * CHAR_BIT + j;
275
- }
276
- x <<= 1;
277
- }
278
- }
279
- return sizeof(*a1) * CHAR_BIT;
280
- }
281
-
282
- /*
283
- * Compare two source/destination address pairs.
284
- * RFC 6724, section 6.
285
- */
286
- static int rfc6724_compare(const void *ptr1, const void *ptr2)
287
- {
288
- const struct addrinfo_sort_elem *a1 = (const struct addrinfo_sort_elem *)ptr1;
289
- const struct addrinfo_sort_elem *a2 = (const struct addrinfo_sort_elem *)ptr2;
290
- int scope_src1, scope_dst1, scope_match1;
291
- int scope_src2, scope_dst2, scope_match2;
292
- int label_src1, label_dst1, label_match1;
293
- int label_src2, label_dst2, label_match2;
294
- int precedence1, precedence2;
295
- int prefixlen1, prefixlen2;
296
-
297
- /* Rule 1: Avoid unusable destinations. */
298
- if (a1->has_src_addr != a2->has_src_addr)
299
- {
300
- return a2->has_src_addr - a1->has_src_addr;
301
- }
302
-
303
- /* Rule 2: Prefer matching scope. */
304
- scope_src1 = ARES_IPV6_ADDR_SCOPE_NODELOCAL;
305
- if (a1->has_src_addr)
306
- scope_src1 = get_scope(&a1->src_addr.sa);
307
- scope_dst1 = get_scope(a1->ai->ai_addr);
308
- scope_match1 = (scope_src1 == scope_dst1);
309
-
310
- scope_src2 = ARES_IPV6_ADDR_SCOPE_NODELOCAL;
311
- if (a2->has_src_addr)
312
- scope_src2 = get_scope(&a2->src_addr.sa);
313
- scope_dst2 = get_scope(a2->ai->ai_addr);
314
- scope_match2 = (scope_src2 == scope_dst2);
315
-
316
- if (scope_match1 != scope_match2)
317
- {
318
- return scope_match2 - scope_match1;
319
- }
320
-
321
- /* Rule 3: Avoid deprecated addresses. */
322
-
323
- /* Rule 4: Prefer home addresses. */
324
-
325
- /* Rule 5: Prefer matching label. */
326
- label_src1 = 1;
327
- if (a1->has_src_addr)
328
- label_src1 = get_label(&a1->src_addr.sa);
329
- label_dst1 = get_label(a1->ai->ai_addr);
330
- label_match1 = (label_src1 == label_dst1);
331
-
332
- label_src2 = 1;
333
- if (a2->has_src_addr)
334
- label_src2 = get_label(&a2->src_addr.sa);
335
- label_dst2 = get_label(a2->ai->ai_addr);
336
- label_match2 = (label_src2 == label_dst2);
337
-
338
- if (label_match1 != label_match2)
339
- {
340
- return label_match2 - label_match1;
341
- }
342
-
343
- /* Rule 6: Prefer higher precedence. */
344
- precedence1 = get_precedence(a1->ai->ai_addr);
345
- precedence2 = get_precedence(a2->ai->ai_addr);
346
- if (precedence1 != precedence2)
347
- {
348
- return precedence2 - precedence1;
349
- }
350
-
351
- /* Rule 7: Prefer native transport. */
352
-
353
- /* Rule 8: Prefer smaller scope. */
354
- if (scope_dst1 != scope_dst2)
355
- {
356
- return scope_dst1 - scope_dst2;
357
- }
358
-
359
- /* Rule 9: Use longest matching prefix. */
360
- if (a1->has_src_addr && a1->ai->ai_addr->sa_family == AF_INET6 &&
361
- a2->has_src_addr && a2->ai->ai_addr->sa_family == AF_INET6)
362
- {
363
- const struct sockaddr_in6 *a1_src = &a1->src_addr.sa6;
364
- const struct sockaddr_in6 *a1_dst =
365
- CARES_INADDR_CAST(const struct sockaddr_in6 *, a1->ai->ai_addr);
366
- const struct sockaddr_in6 *a2_src = &a2->src_addr.sa6;
367
- const struct sockaddr_in6 *a2_dst =
368
- CARES_INADDR_CAST(const struct sockaddr_in6 *, a2->ai->ai_addr);
369
- prefixlen1 = common_prefix_len(&a1_src->sin6_addr, &a1_dst->sin6_addr);
370
- prefixlen2 = common_prefix_len(&a2_src->sin6_addr, &a2_dst->sin6_addr);
371
- if (prefixlen1 != prefixlen2)
372
- {
373
- return prefixlen2 - prefixlen1;
374
- }
375
- }
376
-
377
- /*
378
- * Rule 10: Leave the order unchanged.
379
- * We need this since qsort() is not necessarily stable.
380
- */
381
- return a1->original_order - a2->original_order;
382
- }
383
-
384
- /*
385
- * Find the source address that will be used if trying to connect to the given
386
- * address.
387
- *
388
- * Returns 1 if a source address was found, 0 if the address is unreachable,
389
- * and -1 if a fatal error occurred. If 0 or 1, the contents of src_addr are
390
- * undefined.
391
- */
392
- static int find_src_addr(ares_channel channel,
393
- const struct sockaddr *addr,
394
- struct sockaddr *src_addr)
395
- {
396
- ares_socket_t sock;
397
- int ret;
398
- ares_socklen_t len;
399
-
400
- switch (addr->sa_family)
401
- {
402
- case AF_INET:
403
- len = sizeof(struct sockaddr_in);
404
- break;
405
- case AF_INET6:
406
- len = sizeof(struct sockaddr_in6);
407
- break;
408
- default:
409
- /* No known usable source address for non-INET families. */
410
- return 0;
411
- }
412
-
413
- sock = ares__open_socket(channel, addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
414
- if (sock == ARES_SOCKET_BAD)
415
- {
416
- if (errno == EAFNOSUPPORT)
417
- {
418
- return 0;
419
- }
420
- else
421
- {
422
- return -1;
423
- }
424
- }
425
-
426
- do
427
- {
428
- ret = ares__connect_socket(channel, sock, addr, len);
429
- }
430
- while (ret == -1 && errno == EINTR);
431
-
432
- if (ret == -1)
433
- {
434
- ares__close_socket(channel, sock);
435
- return 0;
436
- }
437
-
438
- if (getsockname(sock, src_addr, &len) != 0)
439
- {
440
- ares__close_socket(channel, sock);
441
- return -1;
442
- }
443
- ares__close_socket(channel, sock);
444
- return 1;
445
- }
446
-
447
- /*
448
- * Sort the linked list starting at sentinel->ai_next in RFC6724 order.
449
- * Will leave the list unchanged if an error occurs.
450
- */
451
- int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *list_sentinel)
452
- {
453
- struct ares_addrinfo_node *cur;
454
- int nelem = 0, i;
455
- int has_src_addr;
456
- struct addrinfo_sort_elem *elems;
457
-
458
- cur = list_sentinel->ai_next;
459
- while (cur)
460
- {
461
- ++nelem;
462
- cur = cur->ai_next;
463
- }
464
-
465
- if (!nelem)
466
- return ARES_ENODATA;
467
-
468
- elems = (struct addrinfo_sort_elem *)ares_malloc(
469
- nelem * sizeof(struct addrinfo_sort_elem));
470
- if (!elems)
471
- {
472
- return ARES_ENOMEM;
473
- }
474
-
475
- /*
476
- * Convert the linked list to an array that also contains the candidate
477
- * source address for each destination address.
478
- */
479
- for (i = 0, cur = list_sentinel->ai_next; i < nelem; ++i, cur = cur->ai_next)
480
- {
481
- assert(cur != NULL);
482
- elems[i].ai = cur;
483
- elems[i].original_order = i;
484
- has_src_addr = find_src_addr(channel, cur->ai_addr, &elems[i].src_addr.sa);
485
- if (has_src_addr == -1)
486
- {
487
- ares_free(elems);
488
- return ARES_ENOTFOUND;
489
- }
490
- elems[i].has_src_addr = has_src_addr;
491
- }
492
-
493
- /* Sort the addresses, and rearrange the linked list so it matches the sorted
494
- * order. */
495
- qsort((void *)elems, nelem, sizeof(struct addrinfo_sort_elem),
496
- rfc6724_compare);
497
-
498
- list_sentinel->ai_next = elems[0].ai;
499
- for (i = 0; i < nelem - 1; ++i)
500
- {
501
- elems[i].ai->ai_next = elems[i + 1].ai;
502
- }
503
- elems[nelem - 1].ai->ai_next = NULL;
504
-
505
- ares_free(elems);
506
- return ARES_SUCCESS;
507
- }
@@ -1,111 +0,0 @@
1
-
2
- /* Copyright (C) 2008 by Daniel Stenberg et al
3
- *
4
- * Permission to use, copy, modify, and distribute this software and its
5
- * documentation for any purpose and without fee is hereby granted, provided
6
- * that the above copyright notice appear in all copies and that both that
7
- * copyright notice and this permission notice appear in supporting
8
- * documentation, and that the name of M.I.T. not be used in advertising or
9
- * publicity pertaining to distribution of the software without specific,
10
- * written prior permission. M.I.T. makes no representations about the
11
- * suitability of this software for any purpose. It is provided "as is"
12
- * without express or implied warranty.
13
- */
14
-
15
- #include "ares_setup.h"
16
- #include "ares.h"
17
- #include "ares_private.h"
18
-
19
- #if defined(WIN32) && !defined(MSDOS)
20
-
21
- struct timeval ares__tvnow(void)
22
- {
23
- /*
24
- ** GetTickCount() is available on _all_ Windows versions from W95 up
25
- ** to nowadays. Returns milliseconds elapsed since last system boot,
26
- ** increases monotonically and wraps once 49.7 days have elapsed.
27
- */
28
- struct timeval now;
29
- DWORD milliseconds = GetTickCount();
30
- now.tv_sec = milliseconds / 1000;
31
- now.tv_usec = (milliseconds % 1000) * 1000;
32
- return now;
33
- }
34
-
35
- #elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
36
-
37
- struct timeval ares__tvnow(void)
38
- {
39
- /*
40
- ** clock_gettime() is granted to be increased monotonically when the
41
- ** monotonic clock is queried. Time starting point is unspecified, it
42
- ** could be the system start-up time, the Epoch, or something else,
43
- ** in any case the time starting point does not change once that the
44
- ** system has started up.
45
- */
46
- struct timeval now;
47
- struct timespec tsnow;
48
- if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
49
- now.tv_sec = tsnow.tv_sec;
50
- now.tv_usec = tsnow.tv_nsec / 1000;
51
- }
52
- /*
53
- ** Even when the configure process has truly detected monotonic clock
54
- ** availability, it might happen that it is not actually available at
55
- ** run-time. When this occurs simply fallback to other time source.
56
- */
57
- #ifdef HAVE_GETTIMEOFDAY
58
- else
59
- (void)gettimeofday(&now, NULL); /* LCOV_EXCL_LINE */
60
- #else
61
- else {
62
- now.tv_sec = (long)time(NULL);
63
- now.tv_usec = 0;
64
- }
65
- #endif
66
- return now;
67
- }
68
-
69
- #elif defined(HAVE_GETTIMEOFDAY)
70
-
71
- struct timeval ares__tvnow(void)
72
- {
73
- /*
74
- ** gettimeofday() is not granted to be increased monotonically, due to
75
- ** clock drifting and external source time synchronization it can jump
76
- ** forward or backward in time.
77
- */
78
- struct timeval now;
79
- (void)gettimeofday(&now, NULL);
80
- return now;
81
- }
82
-
83
- #else
84
-
85
- struct timeval ares__tvnow(void)
86
- {
87
- /*
88
- ** time() returns the value of time in seconds since the Epoch.
89
- */
90
- struct timeval now;
91
- now.tv_sec = (long)time(NULL);
92
- now.tv_usec = 0;
93
- return now;
94
- }
95
-
96
- #endif
97
-
98
- #if 0 /* Not used */
99
- /*
100
- * Make sure that the first argument is the more recent time, as otherwise
101
- * we'll get a weird negative time-diff back...
102
- *
103
- * Returns: the time difference in number of milliseconds.
104
- */
105
- long ares__tvdiff(struct timeval newer, struct timeval older)
106
- {
107
- return (newer.tv_sec-older.tv_sec)*1000+
108
- (newer.tv_usec-older.tv_usec)/1000;
109
- }
110
- #endif
111
-