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
@@ -13,9 +13,11 @@
13
13
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
14
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
15
15
  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+ *
17
+ * SPDX-License-Identifier: MIT
16
18
  */
17
19
 
18
- #include "ares_setup.h"
20
+ #include "ares_private.h"
19
21
 
20
22
  #ifdef HAVE_NETINET_IN_H
21
23
  # include <netinet/in.h>
@@ -25,11 +27,23 @@
25
27
  #endif
26
28
 
27
29
  #include "ares_nameser.h"
28
-
29
- #include "ares.h"
30
30
  #include "ares_ipv6.h"
31
31
 
32
- #ifndef HAVE_INET_NTOP
32
+ #ifdef USE_WINSOCK
33
+ # define SOCKERRNO ((int)WSAGetLastError())
34
+ # define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
35
+ # undef EMSGSIZE
36
+ # define EMSGSIZE WSAEMSGSIZE
37
+ # undef ENOENT
38
+ # define ENOENT WSA_INVALID_PARAMETER
39
+ # undef EAFNOSUPPORT
40
+ # define EAFNOSUPPORT WSAEAFNOSUPPORT
41
+ # undef ENOSPC
42
+ # define ENOSPC WSA_INVALID_PARAMETER
43
+ #else
44
+ # define SOCKERRNO (errno)
45
+ # define SET_SOCKERRNO(x) (errno = (x))
46
+ #endif
33
47
 
34
48
  /*
35
49
  * WARNING: Don't even consider trying to compile this on a system where
@@ -44,27 +58,22 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
44
58
  * convert a network format address to presentation format.
45
59
  * return:
46
60
  * pointer to presentation format address (`dst'), or NULL (see errno).
47
- * note:
48
- * On Windows we store the error in the thread errno, not
49
- * in the winsock error code. This is to avoid loosing the
50
- * actual last winsock error. So use macro ERRNO to fetch the
51
- * errno this function sets when returning NULL, not SOCKERRNO.
52
61
  * author:
53
62
  * Paul Vixie, 1996.
54
63
  */
55
- const char *
56
- ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
64
+ const char *ares_inet_ntop(int af, const void *src, char *dst,
65
+ ares_socklen_t size)
57
66
  {
58
67
  switch (af) {
59
- case AF_INET:
60
- return (inet_ntop4(src, dst, (size_t)size));
61
- case AF_INET6:
62
- return (inet_ntop6(src, dst, (size_t)size));
63
- default:
64
- SET_ERRNO(EAFNOSUPPORT);
65
- return (NULL);
68
+ case AF_INET:
69
+ return inet_ntop4(src, dst, (size_t)size);
70
+ case AF_INET6:
71
+ return inet_ntop6(src, dst, (size_t)size);
72
+ default:
73
+ break;
66
74
  }
67
- /* NOTREACHED */
75
+ SET_SOCKERRNO(EAFNOSUPPORT);
76
+ return NULL;
68
77
  }
69
78
 
70
79
  /* const char *
@@ -78,18 +87,23 @@ ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
78
87
  * author:
79
88
  * Paul Vixie, 1996.
80
89
  */
81
- static const char *
82
- inet_ntop4(const unsigned char *src, char *dst, size_t size)
90
+ static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size)
83
91
  {
84
92
  static const char fmt[] = "%u.%u.%u.%u";
85
- char tmp[sizeof("255.255.255.255")];
93
+ char tmp[sizeof("255.255.255.255")];
94
+
95
+ if (size < sizeof(tmp)) {
96
+ SET_SOCKERRNO(ENOSPC);
97
+ return NULL;
98
+ }
86
99
 
87
- if ((size_t)sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) >= size) {
88
- SET_ERRNO(ENOSPC);
89
- return (NULL);
100
+ if ((size_t)snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]) >=
101
+ size) {
102
+ SET_SOCKERRNO(ENOSPC);
103
+ return NULL;
90
104
  }
91
- strcpy(dst, tmp);
92
- return (dst);
105
+ ares_strcpy(dst, tmp, size);
106
+ return dst;
93
107
  }
94
108
 
95
109
  /* const char *
@@ -98,8 +112,7 @@ inet_ntop4(const unsigned char *src, char *dst, size_t size)
98
112
  * author:
99
113
  * Paul Vixie, 1996.
100
114
  */
101
- static const char *
102
- inet_ntop6(const unsigned char *src, char *dst, size_t size)
115
+ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size)
103
116
  {
104
117
  /*
105
118
  * Note that int32_t and int16_t need only be "at least" large enough
@@ -108,11 +121,16 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
108
121
  * Keep this in mind if you think this function should have been coded
109
122
  * to use pointer overlays. All the world's not a VAX.
110
123
  */
111
- char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
124
+ char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
112
125
  char *tp;
113
- struct { int base, len; } best, cur;
126
+
127
+ struct {
128
+ ares_ssize_t base;
129
+ size_t len;
130
+ } best, cur;
131
+
114
132
  unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
115
- int i;
133
+ size_t i;
116
134
 
117
135
  /*
118
136
  * Preprocess:
@@ -120,32 +138,38 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
120
138
  * Find the longest run of 0x00's in src[] for :: shorthanding.
121
139
  */
122
140
  memset(words, '\0', sizeof(words));
123
- for (i = 0; i < NS_IN6ADDRSZ; i++)
124
- words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
141
+ for (i = 0; i < NS_IN6ADDRSZ; i++) {
142
+ words[i / 2] |= (unsigned int)(src[i] << ((1 - (i % 2)) << 3));
143
+ }
125
144
  best.base = -1;
126
- best.len = 0;
127
- cur.base = -1;
128
- cur.len = 0;
145
+ best.len = 0;
146
+ cur.base = -1;
147
+ cur.len = 0;
129
148
  for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
130
149
  if (words[i] == 0) {
131
- if (cur.base == -1)
132
- cur.base = i, cur.len = 1;
133
- else
150
+ if (cur.base == -1) {
151
+ cur.base = (ares_ssize_t)i;
152
+ cur.len = 1;
153
+ } else {
134
154
  cur.len++;
155
+ }
135
156
  } else {
136
157
  if (cur.base != -1) {
137
- if (best.base == -1 || cur.len > best.len)
158
+ if (best.base == -1 || cur.len > best.len) {
138
159
  best = cur;
160
+ }
139
161
  cur.base = -1;
140
162
  }
141
163
  }
142
164
  }
143
165
  if (cur.base != -1) {
144
- if (best.base == -1 || cur.len > best.len)
166
+ if (best.base == -1 || cur.len > best.len) {
145
167
  best = cur;
168
+ }
146
169
  }
147
- if (best.base != -1 && best.len < 2)
170
+ if (best.base != -1 && best.len < 2) {
148
171
  best.base = -1;
172
+ }
149
173
 
150
174
  /*
151
175
  * Format the result.
@@ -153,49 +177,43 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
153
177
  tp = tmp;
154
178
  for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
155
179
  /* Are we inside the best run of 0x00's? */
156
- if (best.base != -1 && i >= best.base &&
157
- i < (best.base + best.len)) {
158
- if (i == best.base)
180
+ if (best.base != -1 && i >= (size_t)best.base &&
181
+ i < ((size_t)best.base + best.len)) {
182
+ if (i == (size_t)best.base) {
159
183
  *tp++ = ':';
184
+ }
160
185
  continue;
161
186
  }
162
187
  /* Are we following an initial run of 0x00s or any real hex? */
163
- if (i != 0)
188
+ if (i != 0) {
164
189
  *tp++ = ':';
190
+ }
165
191
  /* Is this address an encapsulated IPv4? */
166
- if (i == 6 && best.base == 0 && (best.len == 6 ||
167
- (best.len == 7 && words[7] != 0x0001) ||
168
- (best.len == 5 && words[5] == 0xffff))) {
169
- if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
192
+ if (i == 6 && best.base == 0 &&
193
+ (best.len == 6 || (best.len == 7 && words[7] != 0x0001) ||
194
+ (best.len == 5 && words[5] == 0xffff))) {
195
+ if (!inet_ntop4(src + 12, tp, sizeof(tmp) - (size_t)(tp - tmp))) {
170
196
  return (NULL);
171
- tp += strlen(tp);
197
+ }
198
+ tp += ares_strlen(tp);
172
199
  break;
173
200
  }
174
- tp += sprintf(tp, "%x", words[i]);
201
+ tp += snprintf(tp, sizeof(tmp) - (size_t)(tp - tmp), "%x", words[i]);
175
202
  }
176
203
  /* Was it a trailing run of 0x00's? */
177
- if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
204
+ if (best.base != -1 &&
205
+ ((size_t)best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) {
178
206
  *tp++ = ':';
207
+ }
179
208
  *tp++ = '\0';
180
209
 
181
210
  /*
182
211
  * Check for overflow, copy, and we're done.
183
212
  */
184
213
  if ((size_t)(tp - tmp) > size) {
185
- SET_ERRNO(ENOSPC);
186
- return (NULL);
214
+ SET_SOCKERRNO(ENOSPC);
215
+ return NULL;
187
216
  }
188
- strcpy(dst, tmp);
189
- return (dst);
217
+ ares_strcpy(dst, tmp, size);
218
+ return dst;
190
219
  }
191
-
192
- #else /* HAVE_INET_NTOP */
193
-
194
- const char *
195
- ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
196
- {
197
- /* just relay this to the underlying function */
198
- return inet_ntop(af, src, dst, size);
199
- }
200
-
201
- #endif /* HAVE_INET_NTOP */
@@ -0,0 +1,78 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 2023 Brad House
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.
23
+ *
24
+ * SPDX-License-Identifier: MIT
25
+ */
26
+
27
+ #include "ares_private.h"
28
+
29
+ static int ares_create_query_int(const char *name, int dnsclass, int type,
30
+ unsigned short id, int rd,
31
+ unsigned char **bufp, int *buflenp,
32
+ int max_udp_size)
33
+ {
34
+ ares_status_t status;
35
+ ares_dns_record_t *dnsrec = NULL;
36
+ size_t len;
37
+ ares_dns_flags_t rd_flag = rd ? ARES_FLAG_RD : 0;
38
+
39
+ if (name == NULL || bufp == NULL || buflenp == NULL) {
40
+ status = ARES_EFORMERR;
41
+ goto done;
42
+ }
43
+
44
+ *bufp = NULL;
45
+ *buflenp = 0;
46
+
47
+ status = ares_dns_record_create_query(
48
+ &dnsrec, name, (ares_dns_class_t)dnsclass, (ares_dns_rec_type_t)type, id,
49
+ rd_flag, (size_t)max_udp_size);
50
+ if (status != ARES_SUCCESS) {
51
+ goto done;
52
+ }
53
+
54
+ status = ares_dns_write(dnsrec, bufp, &len);
55
+ if (status != ARES_SUCCESS) {
56
+ goto done;
57
+ }
58
+
59
+ *buflenp = (int)len;
60
+
61
+ done:
62
+ ares_dns_record_destroy(dnsrec);
63
+ return (int)status;
64
+ }
65
+
66
+ int ares_create_query(const char *name, int dnsclass, int type,
67
+ unsigned short id, int rd, unsigned char **bufp,
68
+ int *buflenp, int max_udp_size)
69
+ {
70
+ return ares_create_query_int(name, dnsclass, type, id, rd, bufp, buflenp,
71
+ max_udp_size);
72
+ }
73
+
74
+ int ares_mkquery(const char *name, int dnsclass, int type, unsigned short id,
75
+ int rd, unsigned char **buf, int *buflen)
76
+ {
77
+ return ares_create_query_int(name, dnsclass, type, id, rd, buf, buflen, 0);
78
+ }
@@ -0,0 +1,99 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 1998, 2011 Massachusetts Institute of Technology
4
+ * Copyright (c) The c-ares project and its contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice (including the next
14
+ * paragraph) shall be included in all copies or substantial portions of the
15
+ * Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ *
25
+ * SPDX-License-Identifier: MIT
26
+ */
27
+
28
+ #include "ares_private.h"
29
+
30
+ #ifdef HAVE_NETINET_IN_H
31
+ # include <netinet/in.h>
32
+ #endif
33
+
34
+ #include "ares_nameser.h"
35
+
36
+ ares_status_t ares_expand_name_validated(const unsigned char *encoded,
37
+ const unsigned char *abuf, size_t alen,
38
+ char **s, size_t *enclen,
39
+ ares_bool_t is_hostname)
40
+ {
41
+ ares_status_t status;
42
+ ares_buf_t *buf = NULL;
43
+ size_t start_len;
44
+
45
+ if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) {
46
+ return ARES_EBADNAME; /* EFORMERR would be better */
47
+ }
48
+
49
+ if (encoded < abuf || encoded >= abuf + alen) {
50
+ return ARES_EBADNAME; /* EFORMERR would be better */
51
+ }
52
+
53
+ *enclen = 0;
54
+
55
+ /* NOTE: we allow 's' to be NULL to skip it */
56
+ if (s) {
57
+ *s = NULL;
58
+ }
59
+
60
+ buf = ares_buf_create_const(abuf, alen);
61
+
62
+ if (buf == NULL) {
63
+ return ARES_ENOMEM;
64
+ }
65
+
66
+ status = ares_buf_set_position(buf, (size_t)(encoded - abuf));
67
+ if (status != ARES_SUCCESS) {
68
+ goto done;
69
+ }
70
+
71
+ start_len = ares_buf_len(buf);
72
+ status = ares_dns_name_parse(buf, s, is_hostname);
73
+ if (status != ARES_SUCCESS) {
74
+ goto done;
75
+ }
76
+
77
+ *enclen = start_len - ares_buf_len(buf);
78
+
79
+ done:
80
+ ares_buf_destroy(buf);
81
+ return status;
82
+ }
83
+
84
+ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
85
+ int alen, char **s, long *enclen)
86
+ {
87
+ /* Keep public API compatible */
88
+ size_t enclen_temp = 0;
89
+ ares_status_t status;
90
+
91
+ if (encoded == NULL || abuf == NULL || alen <= 0 || enclen == NULL) {
92
+ return ARES_EBADNAME;
93
+ }
94
+
95
+ status = ares_expand_name_validated(encoded, abuf, (size_t)alen, s,
96
+ &enclen_temp, ARES_FALSE);
97
+ *enclen = (long)enclen_temp;
98
+ return (int)status;
99
+ }
@@ -0,0 +1,107 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 1998 Massachusetts Institute of Technology
4
+ * Copyright (c) The c-ares project and its contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice (including the next
14
+ * paragraph) shall be included in all copies or substantial portions of the
15
+ * Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ *
25
+ * SPDX-License-Identifier: MIT
26
+ */
27
+
28
+ #include "ares_private.h"
29
+
30
+ #ifdef HAVE_NETINET_IN_H
31
+ # include <netinet/in.h>
32
+ #endif
33
+
34
+ #include "ares_nameser.h"
35
+
36
+ /* Simply decodes a length-encoded character string. The first byte of the
37
+ * input is the length of the string to be returned and the bytes thereafter
38
+ * are the characters of the string. The returned result will be NULL
39
+ * terminated.
40
+ */
41
+ ares_status_t ares_expand_string_ex(const unsigned char *encoded,
42
+ const unsigned char *abuf, size_t alen,
43
+ unsigned char **s, size_t *enclen)
44
+ {
45
+ ares_status_t status;
46
+ ares_buf_t *buf = NULL;
47
+ size_t start_len;
48
+ size_t len = 0;
49
+
50
+ if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) {
51
+ return ARES_EBADSTR; /* EFORMERR would be better */
52
+ }
53
+
54
+ if (encoded < abuf || encoded >= abuf + alen) {
55
+ return ARES_EBADSTR; /* EFORMERR would be better */
56
+ }
57
+
58
+ *enclen = 0;
59
+
60
+ /* NOTE: we allow 's' to be NULL to skip it */
61
+ if (s) {
62
+ *s = NULL;
63
+ }
64
+
65
+ buf = ares_buf_create_const(abuf, alen);
66
+
67
+ if (buf == NULL) {
68
+ return ARES_ENOMEM;
69
+ }
70
+
71
+ status = ares_buf_set_position(buf, (size_t)(encoded - abuf));
72
+ if (status != ARES_SUCCESS) {
73
+ goto done;
74
+ }
75
+
76
+ start_len = ares_buf_len(buf);
77
+ status = ares_buf_parse_dns_binstr(buf, ares_buf_len(buf), s, &len);
78
+ /* hrm, no way to pass back 'len' with the prototype */
79
+ if (status != ARES_SUCCESS) {
80
+ goto done;
81
+ }
82
+
83
+ *enclen = start_len - ares_buf_len(buf);
84
+
85
+ done:
86
+ ares_buf_destroy(buf);
87
+ if (status == ARES_EBADNAME || status == ARES_EBADRESP) {
88
+ status = ARES_EBADSTR;
89
+ }
90
+ return status;
91
+ }
92
+
93
+ int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
94
+ int alen, unsigned char **s, long *enclen)
95
+ {
96
+ ares_status_t status;
97
+ size_t temp_enclen = 0;
98
+
99
+ if (encoded == NULL || abuf == NULL || alen <= 0 || enclen == NULL) {
100
+ return ARES_EBADRESP;
101
+ }
102
+
103
+ status = ares_expand_string_ex(encoded, abuf, (size_t)alen, s, &temp_enclen);
104
+
105
+ *enclen = (long)temp_enclen;
106
+ return (int)status;
107
+ }
@@ -0,0 +1,80 @@
1
+ /* MIT License
2
+ *
3
+ * Copyright (c) 1998 Massachusetts Institute of Technology
4
+ * Copyright (c) The c-ares project and its contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice (including the next
14
+ * paragraph) shall be included in all copies or substantial portions of the
15
+ * Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ * SOFTWARE.
24
+ *
25
+ * SPDX-License-Identifier: MIT
26
+ */
27
+
28
+ #include "ares_private.h"
29
+
30
+ int ares_fds(const ares_channel_t *channel, fd_set *read_fds, fd_set *write_fds)
31
+ {
32
+ ares_socket_t nfds;
33
+ ares_slist_node_t *snode;
34
+ /* Are there any active queries? */
35
+ size_t active_queries;
36
+
37
+ if (channel == NULL || read_fds == NULL || write_fds == NULL) {
38
+ return 0;
39
+ }
40
+
41
+ ares_channel_lock(channel);
42
+
43
+ active_queries = ares_llist_len(channel->all_queries);
44
+
45
+ nfds = 0;
46
+ for (snode = ares_slist_node_first(channel->servers); snode != NULL;
47
+ snode = ares_slist_node_next(snode)) {
48
+ ares_server_t *server = ares_slist_node_val(snode);
49
+ ares_llist_node_t *node;
50
+
51
+ for (node = ares_llist_node_first(server->connections); node != NULL;
52
+ node = ares_llist_node_next(node)) {
53
+ const ares_conn_t *conn = ares_llist_node_val(node);
54
+
55
+ if (!active_queries && !(conn->flags & ARES_CONN_FLAG_TCP)) {
56
+ continue;
57
+ }
58
+
59
+ /* Silence coverity, shouldn't be possible */
60
+ if (conn->fd == ARES_SOCKET_BAD) {
61
+ continue;
62
+ }
63
+
64
+ /* Always wait on read */
65
+ FD_SET(conn->fd, read_fds);
66
+
67
+ if (conn->fd >= nfds) {
68
+ nfds = conn->fd + 1;
69
+ }
70
+
71
+ /* TCP only wait on write if we have the flag set */
72
+ if (conn->state_flags & ARES_CONN_STATE_WRITE) {
73
+ FD_SET(conn->fd, write_fds);
74
+ }
75
+ }
76
+ }
77
+
78
+ ares_channel_unlock(channel);
79
+ return (int)nfds;
80
+ }