grpc 1.74.0 → 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 (369) 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_channel.c +15 -6
  187. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  188. data/src/ruby/lib/grpc/version.rb +1 -1
  189. data/third_party/cares/cares/include/ares.h +925 -460
  190. data/third_party/cares/cares/include/ares_dns.h +86 -71
  191. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  192. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  193. data/third_party/cares/cares/include/ares_version.h +37 -14
  194. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  195. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  196. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  197. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  198. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  199. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  201. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  202. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  203. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  204. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  205. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  206. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  207. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  208. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  209. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  210. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  211. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  212. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  213. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  214. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  215. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  216. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  217. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  218. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  219. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  220. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  221. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  222. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  223. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  224. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  225. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  226. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  227. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  228. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  229. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  230. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  231. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  232. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  233. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  234. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  235. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  238. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  239. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  240. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  241. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  242. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  243. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  244. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  255. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  265. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  266. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  267. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  273. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  274. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  275. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  276. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  277. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  278. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  279. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  294. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  302. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  303. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  304. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  306. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  307. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  309. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  311. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  313. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  315. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  316. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  317. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  319. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  320. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  321. metadata +121 -49
  322. data/src/core/util/ring_buffer.h +0 -122
  323. data/third_party/cares/cares/include/ares_rules.h +0 -125
  324. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  325. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  326. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  327. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  328. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  329. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  330. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  331. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  332. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  333. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  334. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  335. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  336. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  337. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  338. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  339. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  340. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  341. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  342. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  343. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  344. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  345. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  346. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  347. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  348. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  349. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  350. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  351. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  352. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  353. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  354. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  355. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  356. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  357. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  359. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  360. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  361. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  362. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  363. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  364. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  365. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  366. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  367. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  368. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  369. 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
+ }