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,24 +1,34 @@
1
-
2
- /* Copyright 2005 by Dominick Meglio
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 2005, 2013 Dominick Meglio
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice (including the next
13
+ * paragraph) shall be included in all copies or substantial portions of the
14
+ * Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
3
23
  *
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.
24
+ * SPDX-License-Identifier: MIT
15
25
  */
16
- #include "ares_setup.h"
26
+ #include "ares_private.h"
17
27
 
18
28
  #ifdef HAVE_GETSERVBYPORT_R
19
- # if !defined(GETSERVBYPORT_R_ARGS) || \
20
- (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6)
21
- # error "you MUST specifiy a valid number of arguments for getservbyport_r"
29
+ # if !defined(GETSERVBYPORT_R_ARGS) || (GETSERVBYPORT_R_ARGS < 4) || \
30
+ (GETSERVBYPORT_R_ARGS > 6)
31
+ # error "you MUST specify a valid number of arguments for getservbyport_r"
22
32
  # endif
23
33
  #endif
24
34
 
@@ -35,413 +45,393 @@
35
45
  #include "ares_nameser.h"
36
46
 
37
47
  #ifdef HAVE_NET_IF_H
38
- #include <net/if.h>
48
+ # include <net/if.h>
49
+ #endif
50
+ #if defined(USE_WINSOCK) && defined(HAVE_IPHLPAPI_H)
51
+ # include <iphlpapi.h>
39
52
  #endif
40
53
 
41
- #include "ares.h"
42
54
  #include "ares_ipv6.h"
43
- #include "ares_nowarn.h"
44
- #include "ares_private.h"
45
55
 
46
56
  struct nameinfo_query {
47
57
  ares_nameinfo_callback callback;
48
- void *arg;
58
+ void *arg;
59
+
49
60
  union {
50
- struct sockaddr_in addr4;
61
+ struct sockaddr_in addr4;
51
62
  struct sockaddr_in6 addr6;
52
63
  } addr;
53
- int family;
54
- int flags;
55
- int timeouts;
64
+
65
+ int family;
66
+ unsigned int flags;
67
+ size_t timeouts;
56
68
  };
57
69
 
58
- #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
59
- #define IPBUFSIZ \
60
- (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE)
70
+ #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
71
+ # define IPBUFSIZ \
72
+ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE)
61
73
  #else
62
- #define IPBUFSIZ \
63
- (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
74
+ # define IPBUFSIZ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
64
75
  #endif
65
76
 
66
- static void nameinfo_callback(void *arg, int status, int timeouts,
67
- struct hostent *host);
68
- static char *lookup_service(unsigned short port, int flags,
69
- char *buf, size_t buflen);
70
- #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
71
- static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
77
+ static void nameinfo_callback(void *arg, int status, int timeouts,
78
+ struct hostent *host);
79
+ static char *lookup_service(unsigned short port, unsigned int flags, char *buf,
80
+ size_t buflen);
81
+ #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
82
+ static void append_scopeid(const struct sockaddr_in6 *addr6, unsigned int flags,
72
83
  char *buf, size_t buflen);
73
84
  #endif
74
- STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2);
85
+ static char *ares_striendstr(const char *s1, const char *s2);
75
86
 
76
- void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
77
- ares_socklen_t salen,
78
- int flags, ares_nameinfo_callback callback, void *arg)
87
+ static void ares_getnameinfo_int(ares_channel_t *channel,
88
+ const struct sockaddr *sa,
89
+ ares_socklen_t salen, int flags_int,
90
+ ares_nameinfo_callback callback, void *arg)
79
91
  {
80
- struct sockaddr_in *addr = NULL;
81
- struct sockaddr_in6 *addr6 = NULL;
82
- struct nameinfo_query *niquery;
83
- unsigned int port = 0;
92
+ const struct sockaddr_in *addr = NULL;
93
+ const struct sockaddr_in6 *addr6 = NULL;
94
+ struct nameinfo_query *niquery;
95
+ unsigned short port = 0;
96
+ unsigned int flags = (unsigned int)flags_int;
84
97
 
85
98
  /* Validate socket address family and length */
86
- if ((sa->sa_family == AF_INET) &&
87
- (salen == sizeof(struct sockaddr_in)))
88
- {
89
- addr = CARES_INADDR_CAST(struct sockaddr_in *, sa);
90
- port = addr->sin_port;
91
- }
92
- else if ((sa->sa_family == AF_INET6) &&
93
- (salen == sizeof(struct sockaddr_in6)))
94
- {
95
- addr6 = CARES_INADDR_CAST(struct sockaddr_in6 *, sa);
96
- port = addr6->sin6_port;
97
- }
98
- else
99
- {
100
- callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
101
- return;
102
- }
99
+ if (sa && sa->sa_family == AF_INET &&
100
+ salen >= (ares_socklen_t)sizeof(struct sockaddr_in)) {
101
+ addr = CARES_INADDR_CAST(const struct sockaddr_in *, sa);
102
+ port = addr->sin_port;
103
+ } else if (sa && sa->sa_family == AF_INET6 &&
104
+ salen >= (ares_socklen_t)sizeof(struct sockaddr_in6)) {
105
+ addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, sa);
106
+ port = addr6->sin6_port;
107
+ } else {
108
+ callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
109
+ return;
110
+ }
103
111
 
104
112
  /* If neither, assume they want a host */
105
- if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
113
+ if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) {
106
114
  flags |= ARES_NI_LOOKUPHOST;
115
+ }
107
116
 
108
117
  /* All they want is a service, no need for DNS */
109
- if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
110
- {
111
- char buf[33], *service;
118
+ if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) {
119
+ char buf[33];
120
+ char *service;
112
121
 
113
- service = lookup_service((unsigned short)(port & 0xffff),
114
- flags, buf, sizeof(buf));
115
- callback(arg, ARES_SUCCESS, 0, NULL, service);
116
- return;
117
- }
122
+ service =
123
+ lookup_service((unsigned short)(port & 0xffff), flags, buf, sizeof(buf));
124
+ callback(arg, ARES_SUCCESS, 0, NULL, service);
125
+ return;
126
+ }
118
127
 
119
128
  /* They want a host lookup */
120
- if ((flags & ARES_NI_LOOKUPHOST))
121
- {
122
- /* A numeric host can be handled without DNS */
123
- if ((flags & ARES_NI_NUMERICHOST))
124
- {
125
- char ipbuf[IPBUFSIZ];
126
- char srvbuf[33];
127
- char *service = NULL;
128
- ipbuf[0] = 0;
129
-
130
- /* Specifying not to lookup a host, but then saying a host
131
- * is required has to be illegal.
132
- */
133
- if (flags & ARES_NI_NAMEREQD)
134
- {
135
- callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
136
- return;
137
- }
138
- if (salen == sizeof(struct sockaddr_in6))
139
- {
140
- ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
141
- /* If the system supports scope IDs, use it */
142
- #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
143
- append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
129
+ if (flags & ARES_NI_LOOKUPHOST) {
130
+ /* A numeric host can be handled without DNS */
131
+ if (flags & ARES_NI_NUMERICHOST) {
132
+ char ipbuf[IPBUFSIZ];
133
+ char srvbuf[33];
134
+ char *service = NULL;
135
+ ipbuf[0] = 0;
136
+
137
+ /* Specifying not to lookup a host, but then saying a host
138
+ * is required has to be illegal.
139
+ */
140
+ if (flags & ARES_NI_NAMEREQD) {
141
+ callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
142
+ return;
143
+ }
144
+ if (sa->sa_family == AF_INET6) {
145
+ ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
146
+ /* If the system supports scope IDs, use it */
147
+ #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
148
+ append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
144
149
  #endif
145
- }
146
- else
147
- {
148
- ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
149
- }
150
- /* They also want a service */
151
- if (flags & ARES_NI_LOOKUPSERVICE)
152
- service = lookup_service((unsigned short)(port & 0xffff),
153
- flags, srvbuf, sizeof(srvbuf));
154
- callback(arg, ARES_SUCCESS, 0, ipbuf, service);
150
+ } else {
151
+ ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
152
+ }
153
+ /* They also want a service */
154
+ if (flags & ARES_NI_LOOKUPSERVICE) {
155
+ service = lookup_service((unsigned short)(port & 0xffff), flags, srvbuf,
156
+ sizeof(srvbuf));
157
+ }
158
+ callback(arg, ARES_SUCCESS, 0, ipbuf, service);
159
+ return;
160
+ } else {
161
+ /* This is where a DNS lookup becomes necessary */
162
+ niquery = ares_malloc(sizeof(struct nameinfo_query));
163
+ if (!niquery) {
164
+ callback(arg, ARES_ENOMEM, 0, NULL, NULL);
155
165
  return;
156
166
  }
157
- /* This is where a DNS lookup becomes necessary */
158
- else
159
- {
160
- niquery = ares_malloc(sizeof(struct nameinfo_query));
161
- if (!niquery)
162
- {
163
- callback(arg, ARES_ENOMEM, 0, NULL, NULL);
164
- return;
165
- }
166
- niquery->callback = callback;
167
- niquery->arg = arg;
168
- niquery->flags = flags;
169
- niquery->timeouts = 0;
170
- if (sa->sa_family == AF_INET)
171
- {
172
- niquery->family = AF_INET;
173
- memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4));
174
- ares_gethostbyaddr(channel, &addr->sin_addr,
175
- sizeof(struct in_addr), AF_INET,
176
- nameinfo_callback, niquery);
177
- }
178
- else
179
- {
180
- niquery->family = AF_INET6;
181
- memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6));
182
- ares_gethostbyaddr(channel, &addr6->sin6_addr,
183
- sizeof(struct ares_in6_addr), AF_INET6,
184
- nameinfo_callback, niquery);
185
- }
167
+ niquery->callback = callback;
168
+ niquery->arg = arg;
169
+ niquery->flags = flags;
170
+ niquery->timeouts = 0;
171
+ if (sa->sa_family == AF_INET) {
172
+ niquery->family = AF_INET;
173
+ memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4));
174
+ ares_gethostbyaddr_nolock(channel, &addr->sin_addr,
175
+ sizeof(struct in_addr), AF_INET,
176
+ nameinfo_callback, niquery);
177
+ } else {
178
+ niquery->family = AF_INET6;
179
+ memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6));
180
+ ares_gethostbyaddr_nolock(channel, &addr6->sin6_addr,
181
+ sizeof(struct ares_in6_addr), AF_INET6,
182
+ nameinfo_callback, niquery);
186
183
  }
187
184
  }
185
+ }
186
+ }
187
+
188
+ void ares_getnameinfo(ares_channel_t *channel, const struct sockaddr *sa,
189
+ ares_socklen_t salen, int flags_int,
190
+ ares_nameinfo_callback callback, void *arg)
191
+ {
192
+ if (channel == NULL) {
193
+ return;
194
+ }
195
+
196
+ ares_channel_lock(channel);
197
+ ares_getnameinfo_int(channel, sa, salen, flags_int, callback, arg);
198
+ ares_channel_unlock(channel);
188
199
  }
189
200
 
190
201
  static void nameinfo_callback(void *arg, int status, int timeouts,
191
202
  struct hostent *host)
192
203
  {
193
- struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
194
- char srvbuf[33];
195
- char *service = NULL;
196
-
197
- niquery->timeouts += timeouts;
198
- if (status == ARES_SUCCESS)
199
- {
200
- /* They want a service too */
201
- if (niquery->flags & ARES_NI_LOOKUPSERVICE)
202
- {
203
- if (niquery->family == AF_INET)
204
- service = lookup_service(niquery->addr.addr4.sin_port,
205
- niquery->flags, srvbuf, sizeof(srvbuf));
206
- else
207
- service = lookup_service(niquery->addr.addr6.sin6_port,
208
- niquery->flags, srvbuf, sizeof(srvbuf));
209
- }
210
- /* NOFQDN means we have to strip off the domain name portion. We do
211
- this by determining our own domain name, then searching the string
212
- for this domain name and removing it.
213
- */
204
+ struct nameinfo_query *niquery = (struct nameinfo_query *)arg;
205
+ char srvbuf[33];
206
+ char *service = NULL;
207
+
208
+ niquery->timeouts += (size_t)timeouts;
209
+ if (status == ARES_SUCCESS) {
210
+ /* They want a service too */
211
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE) {
212
+ if (niquery->family == AF_INET) {
213
+ service = lookup_service(niquery->addr.addr4.sin_port, niquery->flags,
214
+ srvbuf, sizeof(srvbuf));
215
+ } else {
216
+ service = lookup_service(niquery->addr.addr6.sin6_port, niquery->flags,
217
+ srvbuf, sizeof(srvbuf));
218
+ }
219
+ }
220
+ /* NOFQDN means we have to strip off the domain name portion. We do
221
+ this by determining our own domain name, then searching the string
222
+ for this domain name and removing it.
223
+ */
214
224
  #ifdef HAVE_GETHOSTNAME
215
- if (niquery->flags & ARES_NI_NOFQDN)
216
- {
217
- char buf[255];
218
- char *domain;
219
- gethostname(buf, 255);
220
- if ((domain = strchr(buf, '.')) != NULL)
221
- {
222
- char *end = ares_striendstr(host->h_name, domain);
223
- if (end)
224
- *end = 0;
225
- }
225
+ if (niquery->flags & ARES_NI_NOFQDN) {
226
+ char buf[255];
227
+ const char *domain;
228
+ gethostname(buf, 255);
229
+ if ((domain = strchr(buf, '.')) != NULL) {
230
+ char *end = ares_striendstr(host->h_name, domain);
231
+ if (end) {
232
+ *end = 0;
226
233
  }
227
- #endif
228
- niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts,
229
- (char *)(host->h_name),
230
- service);
231
- ares_free(niquery);
232
- return;
234
+ }
233
235
  }
236
+ #endif
237
+ niquery->callback(niquery->arg, ARES_SUCCESS, (int)niquery->timeouts,
238
+ host->h_name, service);
239
+ ares_free(niquery);
240
+ return;
241
+ }
234
242
  /* We couldn't find the host, but it's OK, we can use the IP */
235
- else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
236
- {
237
- char ipbuf[IPBUFSIZ];
238
- if (niquery->family == AF_INET)
239
- ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf,
240
- IPBUFSIZ);
241
- else
242
- {
243
- ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf,
244
- IPBUFSIZ);
245
- #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
246
- append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf,
247
- sizeof(ipbuf));
243
+ else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) {
244
+ char ipbuf[IPBUFSIZ];
245
+ if (niquery->family == AF_INET) {
246
+ ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, IPBUFSIZ);
247
+ } else {
248
+ ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
249
+ #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
250
+ append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf,
251
+ sizeof(ipbuf));
248
252
  #endif
249
- }
250
- /* They want a service too */
251
- if (niquery->flags & ARES_NI_LOOKUPSERVICE)
252
- {
253
- if (niquery->family == AF_INET)
254
- service = lookup_service(niquery->addr.addr4.sin_port,
255
- niquery->flags, srvbuf, sizeof(srvbuf));
256
- else
257
- service = lookup_service(niquery->addr.addr6.sin6_port,
258
- niquery->flags, srvbuf, sizeof(srvbuf));
259
- }
260
- niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf,
261
- service);
262
- ares_free(niquery);
263
- return;
264
253
  }
265
- niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL);
254
+ /* They want a service too */
255
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE) {
256
+ if (niquery->family == AF_INET) {
257
+ service = lookup_service(niquery->addr.addr4.sin_port, niquery->flags,
258
+ srvbuf, sizeof(srvbuf));
259
+ } else {
260
+ service = lookup_service(niquery->addr.addr6.sin6_port, niquery->flags,
261
+ srvbuf, sizeof(srvbuf));
262
+ }
263
+ }
264
+ niquery->callback(niquery->arg, ARES_SUCCESS, (int)niquery->timeouts, ipbuf,
265
+ service);
266
+ ares_free(niquery);
267
+ return;
268
+ }
269
+ niquery->callback(niquery->arg, status, (int)niquery->timeouts, NULL, NULL);
266
270
  ares_free(niquery);
267
271
  }
268
272
 
269
- static char *lookup_service(unsigned short port, int flags,
270
- char *buf, size_t buflen)
273
+ static char *lookup_service(unsigned short port, unsigned int flags, char *buf,
274
+ size_t buflen)
271
275
  {
272
- const char *proto;
276
+ const char *proto;
273
277
  struct servent *sep;
274
278
  #ifdef HAVE_GETSERVBYPORT_R
275
279
  struct servent se;
276
280
  #endif
277
- char tmpbuf[4096];
278
- char *name;
279
- size_t name_len;
281
+ char tmpbuf[4096];
282
+ const char *name;
283
+ size_t name_len;
280
284
 
281
- if (port)
282
- {
283
- if (flags & ARES_NI_NUMERICSERV)
284
- sep = NULL;
285
- else
286
- {
287
- if (flags & ARES_NI_UDP)
288
- proto = "udp";
289
- else if (flags & ARES_NI_SCTP)
290
- proto = "sctp";
291
- else if (flags & ARES_NI_DCCP)
292
- proto = "dccp";
293
- else
294
- proto = "tcp";
285
+ if (port) {
286
+ if (flags & ARES_NI_NUMERICSERV) {
287
+ sep = NULL;
288
+ } else {
289
+ if (flags & ARES_NI_UDP) {
290
+ proto = "udp";
291
+ } else if (flags & ARES_NI_SCTP) {
292
+ proto = "sctp";
293
+ } else if (flags & ARES_NI_DCCP) {
294
+ proto = "dccp";
295
+ } else {
296
+ proto = "tcp";
297
+ }
295
298
  #ifdef HAVE_GETSERVBYPORT_R
296
- memset(&se, 0, sizeof(se));
297
- sep = &se;
298
- memset(tmpbuf, 0, sizeof(tmpbuf));
299
- #if GETSERVBYPORT_R_ARGS == 6
300
- if (getservbyport_r(port, proto, &se, (void *)tmpbuf,
301
- sizeof(tmpbuf), &sep) != 0)
302
- sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */
303
- #elif GETSERVBYPORT_R_ARGS == 5
304
- sep = getservbyport_r(port, proto, &se, (void *)tmpbuf,
305
- sizeof(tmpbuf));
306
- #elif GETSERVBYPORT_R_ARGS == 4
307
- if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
308
- sep = NULL;
309
- #else
310
- /* Lets just hope the OS uses TLS! */
311
- sep = getservbyport(port, proto);
312
- #endif
313
- #else
314
- /* Lets just hope the OS uses TLS! */
315
- #if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
316
- sep = getservbyport(port, (char*)proto);
299
+ memset(&se, 0, sizeof(se));
300
+ sep = &se;
301
+ memset(tmpbuf, 0, sizeof(tmpbuf));
302
+ # if GETSERVBYPORT_R_ARGS == 6
303
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf),
304
+ &sep) != 0) {
305
+ sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */
306
+ }
307
+ # elif GETSERVBYPORT_R_ARGS == 5
308
+ sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
309
+ # elif GETSERVBYPORT_R_ARGS == 4
310
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) {
311
+ sep = NULL;
312
+ }
313
+ # else
314
+ /* Lets just hope the OS uses TLS! */
315
+ sep = getservbyport(port, proto);
316
+ # endif
317
317
  #else
318
- sep = getservbyport(port, proto);
319
- #endif
318
+ /* Lets just hope the OS uses TLS! */
319
+ # if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
320
+ sep = getservbyport(port, (char *)proto);
321
+ # else
322
+ sep = getservbyport(port, proto);
323
+ # endif
320
324
  #endif
321
- }
322
- if (sep && sep->s_name)
323
- {
324
- /* get service name */
325
- name = sep->s_name;
326
- }
327
- else
328
- {
329
- /* get port as a string */
330
- sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
331
- name = tmpbuf;
332
- }
333
- name_len = strlen(name);
334
- if (name_len < buflen)
335
- /* return it if buffer big enough */
336
- memcpy(buf, name, name_len + 1);
337
- else
338
- /* avoid reusing previous one */
339
- buf[0] = '\0'; /* LCOV_EXCL_LINE: no real service names are too big */
340
- return buf;
341
325
  }
326
+ if (sep && sep->s_name) {
327
+ /* get service name */
328
+ name = sep->s_name;
329
+ } else {
330
+ /* get port as a string */
331
+ snprintf(tmpbuf, sizeof(tmpbuf), "%u", (unsigned int)ntohs(port));
332
+ name = tmpbuf;
333
+ }
334
+ name_len = ares_strlen(name);
335
+ if (name_len < buflen) {
336
+ /* return it if buffer big enough */
337
+ memcpy(buf, name, name_len + 1);
338
+ } else {
339
+ /* avoid reusing previous one */
340
+ buf[0] = '\0'; /* LCOV_EXCL_LINE: no real service names are too big */
341
+ }
342
+ return buf;
343
+ }
342
344
  buf[0] = '\0';
343
345
  return NULL;
344
346
  }
345
347
 
346
- #ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
347
- static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
348
+ #ifdef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
349
+ static void append_scopeid(const struct sockaddr_in6 *addr6, unsigned int flags,
348
350
  char *buf, size_t buflen)
349
351
  {
350
- #ifdef HAVE_IF_INDEXTONAME
351
- int is_ll, is_mcll;
352
- #endif
353
- char tmpbuf[IF_NAMESIZE + 2];
352
+ # ifdef HAVE_IF_INDEXTONAME
353
+ int is_ll;
354
+ int is_mcll;
355
+ # endif
356
+ char tmpbuf[IF_NAMESIZE + 2];
354
357
  size_t bufl;
355
- int is_scope_long = sizeof(addr6->sin6_scope_id) > sizeof(unsigned int);
356
358
 
357
359
  tmpbuf[0] = '%';
358
360
 
359
- #ifdef HAVE_IF_INDEXTONAME
360
- is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
361
+ # ifdef HAVE_IF_INDEXTONAME
362
+ is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
361
363
  is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
362
- if ((flags & ARES_NI_NUMERICSCOPE) ||
363
- (!is_ll && !is_mcll))
364
- {
365
- if (is_scope_long)
366
- {
367
- sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id);
368
- }
369
- else
370
- {
371
- sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id);
372
- }
373
- }
374
- else
375
- {
376
- if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
377
- {
378
- if (is_scope_long)
379
- {
380
- sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id);
381
- }
382
- else
383
- {
384
- sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id);
385
- }
386
- }
387
- }
388
- #else
389
- if (is_scope_long)
390
- {
391
- sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id);
364
+ if ((flags & ARES_NI_NUMERICSCOPE) || (!is_ll && !is_mcll)) {
365
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%lu",
366
+ (unsigned long)addr6->sin6_scope_id);
367
+ } else {
368
+ if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) {
369
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%lu",
370
+ (unsigned long)addr6->sin6_scope_id);
392
371
  }
393
- else
394
- {
395
- sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id);
396
- }
397
- (void) flags;
398
- #endif
372
+ }
373
+ # else
374
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%lu",
375
+ (unsigned long)addr6->sin6_scope_id);
376
+ (void)flags;
377
+ # endif
399
378
  tmpbuf[IF_NAMESIZE + 1] = '\0';
400
- bufl = strlen(buf);
379
+ bufl = ares_strlen(buf);
401
380
 
402
- if(bufl + strlen(tmpbuf) < buflen)
381
+ if (bufl + ares_strlen(tmpbuf) < buflen) {
403
382
  /* only append the scopeid string if it fits in the target buffer */
404
- strcpy(&buf[bufl], tmpbuf);
383
+ ares_strcpy(&buf[bufl], tmpbuf, buflen - bufl);
384
+ }
405
385
  }
406
386
  #endif
407
387
 
408
388
  /* Determines if s1 ends with the string in s2 (case-insensitive) */
409
- STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2)
389
+ static char *ares_striendstr(const char *s1, const char *s2)
410
390
  {
411
- const char *c1, *c2, *c1_begin;
412
- int lo1, lo2;
413
- size_t s1_len = strlen(s1), s2_len = strlen(s2);
391
+ const char *c1;
392
+ const char *c2;
393
+ const char *c1_begin;
394
+ int lo1;
395
+ int lo2;
396
+ size_t s1_len = ares_strlen(s1);
397
+ size_t s2_len = ares_strlen(s2);
398
+
399
+ if (s1 == NULL || s2 == NULL) {
400
+ return NULL;
401
+ }
414
402
 
415
403
  /* If the substr is longer than the full str, it can't match */
416
- if (s2_len > s1_len)
404
+ if (s2_len > s1_len) {
417
405
  return NULL;
406
+ }
418
407
 
419
408
  /* Jump to the end of s1 minus the length of s2 */
420
- c1_begin = s1+s1_len-s2_len;
421
- c1 = (const char *)c1_begin;
422
- c2 = s2;
423
- while (c2 < s2+s2_len)
424
- {
425
- lo1 = TOLOWER(*c1);
426
- lo2 = TOLOWER(*c2);
427
- if (lo1 != lo2)
428
- return NULL;
429
- else
430
- {
431
- c1++;
432
- c2++;
433
- }
409
+ c1_begin = s1 + s1_len - s2_len;
410
+ c1 = c1_begin;
411
+ c2 = s2;
412
+ while (c2 < s2 + s2_len) {
413
+ lo1 = ares_tolower((unsigned char)*c1);
414
+ lo2 = ares_tolower((unsigned char)*c2);
415
+ if (lo1 != lo2) {
416
+ return NULL;
417
+ } else {
418
+ c1++;
419
+ c2++;
434
420
  }
435
- return (char *)c1_begin;
421
+ }
422
+ /* Cast off const */
423
+ return (char *)((size_t)c1_begin);
436
424
  }
437
425
 
438
- int ares__is_onion_domain(const char *name)
426
+ ares_bool_t ares_is_onion_domain(const char *name)
439
427
  {
440
- if (ares_striendstr(name, ".onion"))
441
- return 1;
428
+ if (ares_striendstr(name, ".onion")) {
429
+ return ARES_TRUE;
430
+ }
442
431
 
443
- if (ares_striendstr(name, ".onion."))
444
- return 1;
432
+ if (ares_striendstr(name, ".onion.")) {
433
+ return ARES_TRUE;
434
+ }
445
435
 
446
- return 0;
436
+ return ARES_FALSE;
447
437
  }