grpc 1.74.1 → 1.75.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +83 -41
  3. data/include/grpc/credentials.h +7 -1
  4. data/src/core/call/client_call.cc +4 -4
  5. data/src/core/call/filter_fusion.h +1230 -0
  6. data/src/core/call/metadata.cc +22 -0
  7. data/src/core/call/metadata.h +24 -2
  8. data/src/core/channelz/channelz.cc +10 -17
  9. data/src/core/channelz/channelz.h +58 -19
  10. data/src/core/channelz/channelz_registry.cc +0 -162
  11. data/src/core/channelz/channelz_registry.h +14 -7
  12. data/src/core/channelz/property_list.cc +19 -23
  13. data/src/core/channelz/property_list.h +3 -1
  14. data/src/core/channelz/v2tov1/convert.cc +683 -0
  15. data/src/core/channelz/v2tov1/convert.h +58 -0
  16. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  17. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  18. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  19. data/src/core/channelz/v2tov1/property_list.h +52 -0
  20. data/src/core/client_channel/client_channel_filter.cc +5 -4
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_internal.h +2 -1
  23. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  24. data/src/core/client_channel/subchannel.cc +14 -6
  25. data/src/core/client_channel/subchannel.h +2 -0
  26. data/src/core/config/core_configuration.cc +3 -1
  27. data/src/core/config/core_configuration.h +12 -0
  28. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  29. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  30. data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
  31. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  32. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  33. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  34. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  37. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  38. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  39. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  40. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  41. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  45. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  46. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  47. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  48. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  49. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  50. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  51. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
  53. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  54. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  55. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
  56. data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
  57. data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
  61. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  62. data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
  63. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  64. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
  66. data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
  67. data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
  68. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  69. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
  70. data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  72. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
  74. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  75. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  76. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  77. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
  78. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
  79. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
  80. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  81. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  82. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
  83. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
  84. data/src/core/filter/auth/auth_filters.h +2 -2
  85. data/src/core/filter/fused_filters.cc +154 -0
  86. data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
  87. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  88. data/src/core/handshaker/security/secure_endpoint.cc +28 -13
  89. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  90. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  91. data/src/core/lib/channel/promise_based_filter.h +6 -5
  92. data/src/core/lib/event_engine/ares_resolver.h +3 -1
  93. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
  94. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
  95. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  96. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  97. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  98. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
  99. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
  100. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
  101. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
  102. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
  103. data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
  104. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
  105. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  106. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
  107. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  108. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  109. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
  110. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
  111. data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
  112. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  113. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  114. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
  115. data/src/core/lib/experiments/experiments.cc +120 -6
  116. data/src/core/lib/experiments/experiments.h +46 -3
  117. data/src/core/lib/iomgr/combiner.cc +1 -1
  118. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  119. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  120. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  121. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  123. data/src/core/lib/iomgr/tcp_posix.cc +3 -3
  124. data/src/core/lib/promise/activity.h +2 -2
  125. data/src/core/lib/promise/mpsc.cc +8 -8
  126. data/src/core/lib/promise/party.cc +7 -7
  127. data/src/core/lib/promise/party.h +4 -4
  128. data/src/core/lib/promise/poll.h +10 -0
  129. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  130. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  131. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  132. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  133. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  134. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  135. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  136. data/src/core/lib/surface/call.cc +5 -5
  137. data/src/core/lib/surface/call.h +6 -5
  138. data/src/core/lib/surface/completion_queue.cc +2 -4
  139. data/src/core/lib/surface/filter_stack_call.cc +1 -1
  140. data/src/core/lib/surface/version.cc +2 -2
  141. data/src/core/lib/transport/promise_endpoint.cc +2 -2
  142. data/src/core/lib/transport/promise_endpoint.h +3 -3
  143. data/src/core/load_balancing/endpoint_list.cc +29 -2
  144. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  145. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  146. data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
  147. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  148. data/src/core/net/socket_mutator.cc +19 -0
  149. data/src/core/net/socket_mutator.h +25 -0
  150. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  151. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  152. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  153. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  154. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  155. data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
  156. data/src/core/server/server.cc +1 -1
  157. data/src/core/server/server_call_tracer_filter.cc +0 -66
  158. data/src/core/server/server_call_tracer_filter.h +64 -0
  159. data/src/core/server/server_config_selector_filter.cc +1 -1
  160. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  161. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  162. data/src/core/telemetry/call_tracer.cc +20 -14
  163. data/src/core/telemetry/call_tracer.h +22 -17
  164. data/src/core/telemetry/metrics.h +8 -8
  165. data/src/core/telemetry/stats_data.cc +151 -151
  166. data/src/core/telemetry/stats_data.h +87 -87
  167. data/src/core/transport/auth_context.cc +20 -0
  168. data/src/core/transport/auth_context.h +4 -0
  169. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  170. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  171. data/src/core/tsi/ssl_transport_security.cc +202 -32
  172. data/src/core/tsi/ssl_transport_security.h +19 -10
  173. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  174. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  175. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  176. data/src/core/util/latent_see.cc +178 -146
  177. data/src/core/util/latent_see.h +245 -188
  178. data/src/core/util/single_set_ptr.h +5 -2
  179. data/src/core/util/useful.h +91 -0
  180. data/src/core/util/windows/directory_reader.cc +1 -0
  181. data/src/core/util/windows/thd.cc +1 -3
  182. data/src/core/util/work_serializer.cc +1 -1
  183. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  184. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  185. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  186. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  187. data/src/ruby/lib/grpc/version.rb +1 -1
  188. data/third_party/cares/cares/include/ares.h +925 -460
  189. data/third_party/cares/cares/include/ares_dns.h +86 -71
  190. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  191. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  192. data/third_party/cares/cares/include/ares_version.h +37 -14
  193. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  194. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  195. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  196. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  197. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  198. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  199. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  201. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  202. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  203. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  204. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  205. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  206. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  207. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  208. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  209. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  210. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  211. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  212. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  213. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  214. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  215. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  216. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  217. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  218. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  219. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  220. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  221. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  222. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  223. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  224. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  225. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  226. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  227. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  228. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  229. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  230. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  231. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  232. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  233. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  234. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  235. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  238. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  239. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  240. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  241. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  242. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  243. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  244. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  255. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  265. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  266. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  267. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  273. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  274. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  275. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  276. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  277. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  278. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  279. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  294. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  302. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  303. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  304. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  306. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  307. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  309. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  311. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  313. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  315. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  316. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  317. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  319. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  320. metadata +121 -49
  321. data/src/core/util/ring_buffer.h +0 -122
  322. data/third_party/cares/cares/include/ares_rules.h +0 -125
  323. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  324. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  325. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  326. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  327. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  328. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  329. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  330. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  331. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  332. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  333. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  334. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  335. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  336. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  337. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  338. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  339. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  340. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  341. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  342. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  343. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  344. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  345. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  346. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  347. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  348. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  349. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  350. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  351. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  352. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  353. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  354. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  355. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  356. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  357. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  359. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  360. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  361. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  362. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  363. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  364. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  365. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  366. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  367. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  368. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -1,28 +1,36 @@
1
- /* Copyright (C) 2017 by John Schember <john@nachtimwald.com>
1
+ /* MIT License
2
2
  *
3
- * Permission to use, copy, modify, and distribute this
4
- * software and its documentation for any purpose and without
5
- * fee is hereby granted, provided that the above copyright
6
- * notice appear in all copies and that both that copyright
7
- * notice and this permission notice appear in supporting
8
- * documentation, and that the name of M.I.T. not be used in
9
- * advertising or publicity pertaining to distribution of the
10
- * software without specific, written prior permission.
11
- * M.I.T. makes no representations about the suitability of
12
- * this software for any purpose. It is provided "as is"
13
- * without express or implied warranty.
3
+ * Copyright (c) John Schember
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
14
25
  */
15
26
  #if defined(ANDROID) || defined(__ANDROID__)
27
+ # include "ares_private.h"
28
+ # include <jni.h>
29
+ # include <sys/prctl.h>
30
+ # include "ares_android.h"
16
31
 
17
- #include <jni.h>
18
-
19
- #include "ares_setup.h"
20
- #include "ares.h"
21
- #include "ares_android.h"
22
- #include "ares_private.h"
23
-
24
- static JavaVM *android_jvm = NULL;
25
- static jobject android_connectivity_manager = NULL;
32
+ static JavaVM *android_jvm = NULL;
33
+ static jobject android_connectivity_manager = NULL;
26
34
 
27
35
  /* ConnectivityManager.getActiveNetwork */
28
36
  static jmethodID android_cm_active_net_mid = NULL;
@@ -39,12 +47,13 @@ static jmethodID android_list_get_mid = NULL;
39
47
  /* InetAddress.getHostAddress */
40
48
  static jmethodID android_ia_host_addr_mid = NULL;
41
49
 
42
- static jclass jni_get_class(JNIEnv *env, const char *path)
50
+ static jclass jni_get_class(JNIEnv *env, const char *path)
43
51
  {
44
52
  jclass cls = NULL;
45
53
 
46
- if (env == NULL || path == NULL || *path == '\0')
54
+ if (env == NULL || path == NULL || *path == '\0') {
47
55
  return NULL;
56
+ }
48
57
 
49
58
  cls = (*env)->FindClass(env, path);
50
59
  if ((*env)->ExceptionOccurred(env)) {
@@ -60,14 +69,12 @@ static jmethodID jni_get_method_id(JNIEnv *env, jclass cls,
60
69
  jmethodID mid = NULL;
61
70
 
62
71
  if (env == NULL || cls == NULL || func_name == NULL || *func_name == '\0' ||
63
- signature == NULL || *signature == '\0')
64
- {
72
+ signature == NULL || *signature == '\0') {
65
73
  return NULL;
66
74
  }
67
75
 
68
76
  mid = (*env)->GetMethodID(env, cls, func_name, signature);
69
- if ((*env)->ExceptionOccurred(env))
70
- {
77
+ if ((*env)->ExceptionOccurred(env)) {
71
78
  (*env)->ExceptionClear(env);
72
79
  return NULL;
73
80
  }
@@ -75,6 +82,23 @@ static jmethodID jni_get_method_id(JNIEnv *env, jclass cls,
75
82
  return mid;
76
83
  }
77
84
 
85
+ static int jvm_attach(JNIEnv **env)
86
+ {
87
+ char name[17] = { 0 };
88
+
89
+ JavaVMAttachArgs args;
90
+
91
+ args.version = JNI_VERSION_1_6;
92
+ if (prctl(PR_GET_NAME, name) == 0) {
93
+ args.name = name;
94
+ } else {
95
+ args.name = NULL;
96
+ }
97
+ args.group = NULL;
98
+
99
+ return (*android_jvm)->AttachCurrentThread(android_jvm, env, &args);
100
+ }
101
+
78
102
  void ares_library_init_jvm(JavaVM *jvm)
79
103
  {
80
104
  android_jvm = jvm;
@@ -82,29 +106,31 @@ void ares_library_init_jvm(JavaVM *jvm)
82
106
 
83
107
  int ares_library_init_android(jobject connectivity_manager)
84
108
  {
85
- JNIEnv *env = NULL;
86
- int need_detatch = 0;
87
- int res;
88
- int ret = ARES_ENOTINITIALIZED;
89
- jclass obj_cls = NULL;
109
+ JNIEnv *env = NULL;
110
+ int need_detatch = 0;
111
+ int res;
112
+ ares_status_t ret = ARES_ENOTINITIALIZED;
113
+ jclass obj_cls = NULL;
90
114
 
91
- if (android_jvm == NULL)
115
+ if (android_jvm == NULL) {
92
116
  goto cleanup;
117
+ }
93
118
 
94
119
  res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
95
- if (res == JNI_EDETACHED)
96
- {
97
- env = NULL;
98
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
120
+ if (res == JNI_EDETACHED) {
121
+ env = NULL;
122
+ res = jvm_attach(&env);
99
123
  need_detatch = 1;
100
124
  }
101
- if (res != JNI_OK || env == NULL)
125
+ if (res != JNI_OK || env == NULL) {
102
126
  goto cleanup;
127
+ }
103
128
 
104
129
  android_connectivity_manager =
105
- (*env)->NewGlobalRef(env, connectivity_manager);
106
- if (android_connectivity_manager == NULL)
130
+ (*env)->NewGlobalRef(env, connectivity_manager);
131
+ if (android_connectivity_manager == NULL) {
107
132
  goto cleanup;
133
+ }
108
134
 
109
135
  /* Initialization has succeeded. Now attempt to cache the methods that will be
110
136
  * called by ares_get_android_server_list. */
@@ -112,166 +138,178 @@ int ares_library_init_android(jobject connectivity_manager)
112
138
 
113
139
  /* ConnectivityManager in API 1. */
114
140
  obj_cls = jni_get_class(env, "android/net/ConnectivityManager");
115
- if (obj_cls == NULL)
141
+ if (obj_cls == NULL) {
116
142
  goto cleanup;
143
+ }
117
144
 
118
145
  /* ConnectivityManager.getActiveNetwork in API 23. */
119
- android_cm_active_net_mid =
120
- jni_get_method_id(env, obj_cls, "getActiveNetwork",
121
- "()Landroid/net/Network;");
122
- if (android_cm_active_net_mid == NULL)
146
+ android_cm_active_net_mid = jni_get_method_id(
147
+ env, obj_cls, "getActiveNetwork", "()Landroid/net/Network;");
148
+ if (android_cm_active_net_mid == NULL) {
123
149
  goto cleanup;
150
+ }
124
151
 
125
152
  /* ConnectivityManager.getLinkProperties in API 21. */
126
153
  android_cm_link_props_mid =
127
- jni_get_method_id(env, obj_cls, "getLinkProperties",
128
- "(Landroid/net/Network;)Landroid/net/LinkProperties;");
129
- if (android_cm_link_props_mid == NULL)
154
+ jni_get_method_id(env, obj_cls, "getLinkProperties",
155
+ "(Landroid/net/Network;)Landroid/net/LinkProperties;");
156
+ if (android_cm_link_props_mid == NULL) {
130
157
  goto cleanup;
158
+ }
131
159
 
132
160
  /* LinkProperties in API 21. */
133
161
  (*env)->DeleteLocalRef(env, obj_cls);
134
162
  obj_cls = jni_get_class(env, "android/net/LinkProperties");
135
- if (obj_cls == NULL)
163
+ if (obj_cls == NULL) {
136
164
  goto cleanup;
165
+ }
137
166
 
138
167
  /* getDnsServers in API 21. */
139
- android_lp_dns_servers_mid = jni_get_method_id(env, obj_cls, "getDnsServers",
140
- "()Ljava/util/List;");
141
- if (android_lp_dns_servers_mid == NULL)
168
+ android_lp_dns_servers_mid =
169
+ jni_get_method_id(env, obj_cls, "getDnsServers", "()Ljava/util/List;");
170
+ if (android_lp_dns_servers_mid == NULL) {
142
171
  goto cleanup;
172
+ }
143
173
 
144
174
  /* getDomains in API 21. */
145
- android_lp_domains_mid = jni_get_method_id(env, obj_cls, "getDomains",
146
- "()Ljava/lang/String;");
147
- if (android_lp_domains_mid == NULL)
175
+ android_lp_domains_mid =
176
+ jni_get_method_id(env, obj_cls, "getDomains", "()Ljava/lang/String;");
177
+ if (android_lp_domains_mid == NULL) {
148
178
  goto cleanup;
179
+ }
149
180
 
150
181
  (*env)->DeleteLocalRef(env, obj_cls);
151
182
  obj_cls = jni_get_class(env, "java/util/List");
152
- if (obj_cls == NULL)
183
+ if (obj_cls == NULL) {
153
184
  goto cleanup;
185
+ }
154
186
 
155
187
  android_list_size_mid = jni_get_method_id(env, obj_cls, "size", "()I");
156
- if (android_list_size_mid == NULL)
188
+ if (android_list_size_mid == NULL) {
157
189
  goto cleanup;
190
+ }
158
191
 
159
- android_list_get_mid = jni_get_method_id(env, obj_cls, "get",
160
- "(I)Ljava/lang/Object;");
161
- if (android_list_get_mid == NULL)
192
+ android_list_get_mid =
193
+ jni_get_method_id(env, obj_cls, "get", "(I)Ljava/lang/Object;");
194
+ if (android_list_get_mid == NULL) {
162
195
  goto cleanup;
196
+ }
163
197
 
164
198
  (*env)->DeleteLocalRef(env, obj_cls);
165
199
  obj_cls = jni_get_class(env, "java/net/InetAddress");
166
- if (obj_cls == NULL)
200
+ if (obj_cls == NULL) {
167
201
  goto cleanup;
202
+ }
168
203
 
169
- android_ia_host_addr_mid = jni_get_method_id(env, obj_cls, "getHostAddress",
170
- "()Ljava/lang/String;");
171
- if (android_ia_host_addr_mid == NULL)
204
+ android_ia_host_addr_mid =
205
+ jni_get_method_id(env, obj_cls, "getHostAddress", "()Ljava/lang/String;");
206
+ if (android_ia_host_addr_mid == NULL) {
172
207
  goto cleanup;
208
+ }
173
209
 
174
210
  (*env)->DeleteLocalRef(env, obj_cls);
175
211
  goto done;
176
212
 
177
213
  cleanup:
178
- if (obj_cls != NULL)
214
+ if (obj_cls != NULL) {
179
215
  (*env)->DeleteLocalRef(env, obj_cls);
216
+ }
180
217
 
181
- android_cm_active_net_mid = NULL;
182
- android_cm_link_props_mid = NULL;
218
+ android_cm_active_net_mid = NULL;
219
+ android_cm_link_props_mid = NULL;
183
220
  android_lp_dns_servers_mid = NULL;
184
- android_lp_domains_mid = NULL;
185
- android_list_size_mid = NULL;
186
- android_list_get_mid = NULL;
187
- android_ia_host_addr_mid = NULL;
221
+ android_lp_domains_mid = NULL;
222
+ android_list_size_mid = NULL;
223
+ android_list_get_mid = NULL;
224
+ android_ia_host_addr_mid = NULL;
188
225
 
189
226
  done:
190
- if (need_detatch)
227
+ if (need_detatch) {
191
228
  (*android_jvm)->DetachCurrentThread(android_jvm);
229
+ }
192
230
 
193
- return ret;
231
+ return (int)ret;
194
232
  }
195
233
 
196
234
  int ares_library_android_initialized(void)
197
235
  {
198
- if (android_jvm == NULL || android_connectivity_manager == NULL)
236
+ if (android_jvm == NULL || android_connectivity_manager == NULL) {
199
237
  return ARES_ENOTINITIALIZED;
238
+ }
200
239
  return ARES_SUCCESS;
201
240
  }
202
241
 
203
242
  void ares_library_cleanup_android(void)
204
243
  {
205
- JNIEnv *env = NULL;
206
- int need_detatch = 0;
207
- int res;
244
+ JNIEnv *env = NULL;
245
+ int need_detatch = 0;
246
+ int res;
208
247
 
209
- if (android_jvm == NULL || android_connectivity_manager == NULL)
248
+ if (android_jvm == NULL || android_connectivity_manager == NULL) {
210
249
  return;
250
+ }
211
251
 
212
252
  res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
213
- if (res == JNI_EDETACHED)
214
- {
215
- env = NULL;
216
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
253
+ if (res == JNI_EDETACHED) {
254
+ env = NULL;
255
+ res = jvm_attach(&env);
217
256
  need_detatch = 1;
218
257
  }
219
- if (res != JNI_OK || env == NULL)
258
+ if (res != JNI_OK || env == NULL) {
220
259
  return;
260
+ }
221
261
 
222
- android_cm_active_net_mid = NULL;
223
- android_cm_link_props_mid = NULL;
262
+ android_cm_active_net_mid = NULL;
263
+ android_cm_link_props_mid = NULL;
224
264
  android_lp_dns_servers_mid = NULL;
225
- android_lp_domains_mid = NULL;
226
- android_list_size_mid = NULL;
227
- android_list_get_mid = NULL;
228
- android_ia_host_addr_mid = NULL;
265
+ android_lp_domains_mid = NULL;
266
+ android_list_size_mid = NULL;
267
+ android_list_get_mid = NULL;
268
+ android_ia_host_addr_mid = NULL;
229
269
 
230
270
  (*env)->DeleteGlobalRef(env, android_connectivity_manager);
231
271
  android_connectivity_manager = NULL;
232
272
 
233
- if (need_detatch)
273
+ if (need_detatch) {
234
274
  (*android_jvm)->DetachCurrentThread(android_jvm);
275
+ }
235
276
  }
236
277
 
237
- char **ares_get_android_server_list(size_t max_servers,
238
- size_t *num_servers)
278
+ char **ares_get_android_server_list(size_t max_servers, size_t *num_servers)
239
279
  {
240
- JNIEnv *env = NULL;
241
- jobject active_network = NULL;
242
- jobject link_properties = NULL;
243
- jobject server_list = NULL;
244
- jobject server = NULL;
245
- jstring str = NULL;
246
- jint nserv;
280
+ JNIEnv *env = NULL;
281
+ jobject active_network = NULL;
282
+ jobject link_properties = NULL;
283
+ jobject server_list = NULL;
284
+ jobject server = NULL;
285
+ jstring str = NULL;
286
+ jint nserv;
247
287
  const char *ch_server_address;
248
- int res;
249
- size_t i;
250
- char **dns_list = NULL;
251
- int need_detatch = 0;
288
+ int res;
289
+ size_t i;
290
+ char **dns_list = NULL;
291
+ int need_detatch = 0;
252
292
 
253
293
  if (android_jvm == NULL || android_connectivity_manager == NULL ||
254
- max_servers == 0 || num_servers == NULL)
255
- {
294
+ max_servers == 0 || num_servers == NULL) {
256
295
  return NULL;
257
296
  }
258
297
 
259
298
  if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL ||
260
299
  android_lp_dns_servers_mid == NULL || android_list_size_mid == NULL ||
261
- android_list_get_mid == NULL || android_ia_host_addr_mid == NULL)
262
- {
300
+ android_list_get_mid == NULL || android_ia_host_addr_mid == NULL) {
263
301
  return NULL;
264
302
  }
265
303
 
266
304
  res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
267
- if (res == JNI_EDETACHED)
268
- {
269
- env = NULL;
270
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
305
+ if (res == JNI_EDETACHED) {
306
+ env = NULL;
307
+ res = jvm_attach(&env);
271
308
  need_detatch = 1;
272
309
  }
273
- if (res != JNI_OK || env == NULL)
310
+ if (res != JNI_OK || env == NULL) {
274
311
  goto done;
312
+ }
275
313
 
276
314
  /* JNI below is equivalent to this Java code.
277
315
  import android.content.Context;
@@ -296,93 +334,100 @@ char **ares_get_android_server_list(size_t max_servers,
296
334
 
297
335
  active_network = (*env)->CallObjectMethod(env, android_connectivity_manager,
298
336
  android_cm_active_net_mid);
299
- if (active_network == NULL)
337
+ if (active_network == NULL) {
300
338
  goto done;
339
+ }
301
340
 
302
341
  link_properties =
303
- (*env)->CallObjectMethod(env, android_connectivity_manager,
304
- android_cm_link_props_mid, active_network);
305
- if (link_properties == NULL)
342
+ (*env)->CallObjectMethod(env, android_connectivity_manager,
343
+ android_cm_link_props_mid, active_network);
344
+ if (link_properties == NULL) {
306
345
  goto done;
346
+ }
307
347
 
308
- server_list = (*env)->CallObjectMethod(env, link_properties,
309
- android_lp_dns_servers_mid);
310
- if (server_list == NULL)
348
+ server_list =
349
+ (*env)->CallObjectMethod(env, link_properties, android_lp_dns_servers_mid);
350
+ if (server_list == NULL) {
311
351
  goto done;
352
+ }
312
353
 
313
354
  nserv = (*env)->CallIntMethod(env, server_list, android_list_size_mid);
314
- if (nserv > (jint)max_servers)
355
+ if (nserv > (jint)max_servers) {
315
356
  nserv = (jint)max_servers;
316
- if (nserv <= 0)
357
+ }
358
+ if (nserv <= 0) {
317
359
  goto done;
360
+ }
318
361
  *num_servers = (size_t)nserv;
319
362
 
320
- dns_list = ares_malloc(sizeof(*dns_list)*(*num_servers));
321
- for (i=0; i<*num_servers; i++)
322
- {
323
- server = (*env)->CallObjectMethod(env, server_list, android_list_get_mid,
324
- (jint)i);
325
- dns_list[i] = ares_malloc(64);
363
+ dns_list = ares_malloc(sizeof(*dns_list) * (*num_servers));
364
+ for (i = 0; i < *num_servers; i++) {
365
+ size_t len = 64;
366
+ server =
367
+ (*env)->CallObjectMethod(env, server_list, android_list_get_mid, (jint)i);
368
+ dns_list[i] = ares_malloc(len);
326
369
  dns_list[i][0] = 0;
327
- if (server == NULL)
328
- {
370
+ if (server == NULL) {
329
371
  continue;
330
372
  }
331
373
  str = (*env)->CallObjectMethod(env, server, android_ia_host_addr_mid);
332
374
  ch_server_address = (*env)->GetStringUTFChars(env, str, 0);
333
- strncpy(dns_list[i], ch_server_address, 64);
375
+ ares_strcpy(dns_list[i], ch_server_address, len);
334
376
  (*env)->ReleaseStringUTFChars(env, str, ch_server_address);
335
377
  (*env)->DeleteLocalRef(env, str);
336
378
  (*env)->DeleteLocalRef(env, server);
337
379
  }
338
380
 
339
381
  done:
340
- if ((*env)->ExceptionOccurred(env))
382
+ if ((*env)->ExceptionOccurred(env)) {
341
383
  (*env)->ExceptionClear(env);
384
+ }
342
385
 
343
- if (server_list != NULL)
386
+ if (server_list != NULL) {
344
387
  (*env)->DeleteLocalRef(env, server_list);
345
- if (link_properties != NULL)
388
+ }
389
+ if (link_properties != NULL) {
346
390
  (*env)->DeleteLocalRef(env, link_properties);
347
- if (active_network != NULL)
391
+ }
392
+ if (active_network != NULL) {
348
393
  (*env)->DeleteLocalRef(env, active_network);
394
+ }
349
395
 
350
- if (need_detatch)
396
+ if (need_detatch) {
351
397
  (*android_jvm)->DetachCurrentThread(android_jvm);
398
+ }
352
399
  return dns_list;
353
400
  }
354
401
 
355
402
  char *ares_get_android_search_domains_list(void)
356
403
  {
357
- JNIEnv *env = NULL;
358
- jobject active_network = NULL;
359
- jobject link_properties = NULL;
360
- jstring domains = NULL;
404
+ JNIEnv *env = NULL;
405
+ jobject active_network = NULL;
406
+ jobject link_properties = NULL;
407
+ jstring domains = NULL;
361
408
  const char *domain;
362
- int res;
363
- char *domain_list = NULL;
364
- int need_detatch = 0;
409
+ int res;
410
+ char *domain_list = NULL;
411
+ int need_detatch = 0;
365
412
 
366
- if (android_jvm == NULL || android_connectivity_manager == NULL)
367
- {
413
+ if (android_jvm == NULL || android_connectivity_manager == NULL) {
368
414
  return NULL;
369
415
  }
370
416
 
371
417
  if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL ||
372
- android_lp_domains_mid == NULL)
373
- {
418
+ android_lp_domains_mid == NULL) {
374
419
  return NULL;
375
420
  }
376
421
 
377
422
  res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
378
- if (res == JNI_EDETACHED)
379
- {
380
- env = NULL;
381
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
423
+ if (res == JNI_EDETACHED) {
424
+ env = NULL;
425
+ res = jvm_attach(&env);
382
426
  need_detatch = 1;
383
427
  }
384
- if (res != JNI_OK || env == NULL)
428
+ if (res != JNI_OK || env == NULL) {
385
429
  goto done;
430
+ }
386
431
 
387
432
  /* JNI below is equivalent to this Java code.
388
433
  import android.content.Context;
@@ -393,7 +438,7 @@ char *ares_get_android_search_domains_list(void)
393
438
  .getSystemService(Context.CONNECTIVITY_SERVICE);
394
439
  Network an = cm.getActiveNetwork();
395
440
  LinkProperties lp = cm.getLinkProperties(an);
396
- String domains = lp.getDomains();
441
+ String domains = lp.getDomains();
397
442
  for (String domain: domains.split(",")) {
398
443
  String d = domain;
399
444
  }
@@ -404,38 +449,45 @@ char *ares_get_android_search_domains_list(void)
404
449
 
405
450
  active_network = (*env)->CallObjectMethod(env, android_connectivity_manager,
406
451
  android_cm_active_net_mid);
407
- if (active_network == NULL)
452
+ if (active_network == NULL) {
408
453
  goto done;
454
+ }
409
455
 
410
456
  link_properties =
411
- (*env)->CallObjectMethod(env, android_connectivity_manager,
412
- android_cm_link_props_mid, active_network);
413
- if (link_properties == NULL)
457
+ (*env)->CallObjectMethod(env, android_connectivity_manager,
458
+ android_cm_link_props_mid, active_network);
459
+ if (link_properties == NULL) {
414
460
  goto done;
461
+ }
415
462
 
416
463
  /* Get the domains. It is a common separated list of domains to search. */
417
- domains = (*env)->CallObjectMethod(env, link_properties,
418
- android_lp_domains_mid);
419
- if (domains == NULL)
464
+ domains =
465
+ (*env)->CallObjectMethod(env, link_properties, android_lp_domains_mid);
466
+ if (domains == NULL) {
420
467
  goto done;
468
+ }
421
469
 
422
470
  /* Split on , */
423
- domain = (*env)->GetStringUTFChars(env, domains, 0);
471
+ domain = (*env)->GetStringUTFChars(env, domains, 0);
424
472
  domain_list = ares_strdup(domain);
425
473
  (*env)->ReleaseStringUTFChars(env, domains, domain);
426
474
  (*env)->DeleteLocalRef(env, domains);
427
475
 
428
476
  done:
429
- if ((*env)->ExceptionOccurred(env))
477
+ if ((*env)->ExceptionOccurred(env)) {
430
478
  (*env)->ExceptionClear(env);
479
+ }
431
480
 
432
- if (link_properties != NULL)
481
+ if (link_properties != NULL) {
433
482
  (*env)->DeleteLocalRef(env, link_properties);
434
- if (active_network != NULL)
483
+ }
484
+ if (active_network != NULL) {
435
485
  (*env)->DeleteLocalRef(env, active_network);
486
+ }
436
487
 
437
- if (need_detatch)
488
+ if (need_detatch) {
438
489
  (*android_jvm)->DetachCurrentThread(android_jvm);
490
+ }
439
491
  return domain_list;
440
492
  }
441
493
  #else
@@ -1,16 +1,27 @@
1
- /* Copyright (C) 2017 by John Schember <john@nachtimwald.com>
1
+ /* MIT License
2
2
  *
3
- * Permission to use, copy, modify, and distribute this
4
- * software and its documentation for any purpose and without
5
- * fee is hereby granted, provided that the above copyright
6
- * notice appear in all copies and that both that copyright
7
- * notice and this permission notice appear in supporting
8
- * documentation, and that the name of M.I.T. not be used in
9
- * advertising or publicity pertaining to distribution of the
10
- * software without specific, written prior permission.
11
- * M.I.T. makes no representations about the suitability of
12
- * this software for any purpose. It is provided "as is"
13
- * without express or implied warranty.
3
+ * Copyright (c) John Schember
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
14
25
  */
15
26
 
16
27
  #ifndef __ARES_ANDROID_H__
@@ -19,8 +30,8 @@
19
30
  #if defined(ANDROID) || defined(__ANDROID__)
20
31
 
21
32
  char **ares_get_android_server_list(size_t max_servers, size_t *num_servers);
22
- char *ares_get_android_search_domains_list(void);
23
- void ares_library_cleanup_android(void);
33
+ char *ares_get_android_search_domains_list(void);
34
+ void ares_library_cleanup_android(void);
24
35
 
25
36
  #endif
26
37