grpc 1.55.3 → 1.56.0.pre3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -39,7 +39,7 @@
39
39
  #if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
40
40
  defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
41
41
  defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
42
- defined(__QNXNTO__) || defined(__MVS__)
42
+ defined(__QNXNTO__) || defined(__MVS__) || defined(__HAIKU__)
43
43
  #include <sys/select.h>
44
44
  #endif
45
45
  #if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
@@ -63,6 +63,13 @@
63
63
  # include <windows.h>
64
64
  # include <winsock2.h>
65
65
  # include <ws2tcpip.h>
66
+ /* To aid with linking against a static c-ares build, lets tell the microsoft
67
+ * compiler to pull in needed dependencies */
68
+ # ifdef _MSC_VER
69
+ # pragma comment(lib, "ws2_32")
70
+ # pragma comment(lib, "advapi32")
71
+ # pragma comment(lib, "iphlpapi")
72
+ # endif
66
73
  #else
67
74
  # include <sys/socket.h>
68
75
  # include <netinet/in.h>
@@ -168,6 +175,7 @@ extern "C" {
168
175
  #define ARES_OPT_EDNSPSZ (1 << 15)
169
176
  #define ARES_OPT_NOROTATE (1 << 16)
170
177
  #define ARES_OPT_RESOLVCONF (1 << 17)
178
+ #define ARES_OPT_HOSTS_FILE (1 << 18)
171
179
 
172
180
  /* Nameinfo flag values */
173
181
  #define ARES_NI_NOFQDN (1 << 0)
@@ -277,6 +285,7 @@ struct ares_options {
277
285
  int nsort;
278
286
  int ednspsz;
279
287
  char *resolvconf_path;
288
+ char *hosts_path;
280
289
  };
281
290
 
282
291
  struct hostent;
@@ -588,6 +597,14 @@ struct ares_soa_reply {
588
597
  unsigned int minttl;
589
598
  };
590
599
 
600
+ struct ares_uri_reply {
601
+ struct ares_uri_reply *next;
602
+ unsigned short priority;
603
+ unsigned short weight;
604
+ char *uri;
605
+ int ttl;
606
+ };
607
+
591
608
  /*
592
609
  * Similar to addrinfo, but with extra ttl and missing canonname.
593
610
  */
@@ -617,6 +634,7 @@ struct ares_addrinfo_cname {
617
634
  struct ares_addrinfo {
618
635
  struct ares_addrinfo_cname *cnames;
619
636
  struct ares_addrinfo_node *nodes;
637
+ char *name;
620
638
  };
621
639
 
622
640
  struct ares_addrinfo_hints {
@@ -685,6 +703,10 @@ CARES_EXTERN int ares_parse_soa_reply(const unsigned char* abuf,
685
703
  int alen,
686
704
  struct ares_soa_reply** soa_out);
687
705
 
706
+ CARES_EXTERN int ares_parse_uri_reply(const unsigned char* abuf,
707
+ int alen,
708
+ struct ares_uri_reply** uri_out);
709
+
688
710
  CARES_EXTERN void ares_free_string(void *str);
689
711
 
690
712
  CARES_EXTERN void ares_free_hostent(struct hostent *host);
@@ -2,10 +2,12 @@
2
2
  #ifndef ARES_NAMESER_H
3
3
  #define ARES_NAMESER_H
4
4
 
5
- #ifdef HAVE_ARPA_NAMESER_H
5
+ #include "ares_build.h"
6
+
7
+ #ifdef CARES_HAVE_ARPA_NAMESER_H
6
8
  # include <arpa/nameser.h>
7
9
  #endif
8
- #ifdef HAVE_ARPA_NAMESER_COMPAT_H
10
+ #ifdef CARES_HAVE_ARPA_NAMESER_COMPAT_H
9
11
  # include <arpa/nameser_compat.h>
10
12
  #endif
11
13
 
@@ -68,7 +70,7 @@
68
70
  * provide them
69
71
  * ============================================================================
70
72
  */
71
- #ifndef HAVE_ARPA_NAMESER_H
73
+ #ifndef CARES_HAVE_ARPA_NAMESER_H
72
74
 
73
75
  typedef enum __ns_class {
74
76
  ns_c_invalid = 0, /* Cookie. */
@@ -138,7 +140,7 @@ typedef enum __ns_type {
138
140
  ns_t_mailb = 253, /* Transfer mailbox records. */
139
141
  ns_t_maila = 254, /* Transfer mail agent records. */
140
142
  ns_t_any = 255, /* Wildcard match. */
141
- ns_t_zxfr = 256, /* BIND-specific, nonstandard. */
143
+ ns_t_uri = 256, /* Uniform Resource Identifier (RFC7553) */
142
144
  ns_t_caa = 257, /* Certification Authority Authorization. */
143
145
  ns_t_max = 65536
144
146
  } ns_type;
@@ -173,7 +175,7 @@ typedef enum __ns_rcode {
173
175
  ns_r_badtime = 18
174
176
  } ns_rcode;
175
177
 
176
- #endif /* HAVE_ARPA_NAMESER_H */
178
+ #endif /* CARES_HAVE_ARPA_NAMESER_H */
177
179
 
178
180
 
179
181
  /* ============================================================================
@@ -468,8 +470,8 @@ typedef enum __ns_rcode {
468
470
  #ifndef T_ANY
469
471
  # define T_ANY 255 /* ns_t_any */
470
472
  #endif
471
- #ifndef T_ZXFR
472
- # define T_ZXFR 256 /* ns_t_zxfr */
473
+ #ifndef T_URI
474
+ # define T_URI 256 /* ns_t_uri */
473
475
  #endif
474
476
  #ifndef T_CAA
475
477
  # define T_CAA 257 /* ns_t_caa */
@@ -2,7 +2,7 @@
2
2
  #define __CARES_RULES_H
3
3
 
4
4
 
5
- /* Copyright (C) 2009 by Daniel Stenberg et al
5
+ /* Copyright (C) 2009 - 2021 by Daniel Stenberg et al
6
6
  *
7
7
  * Permission to use, copy, modify, and distribute this software and its
8
8
  * documentation for any purpose and without fee is hereby granted, provided
@@ -40,7 +40,7 @@
40
40
  * library is properly built and used.
41
41
  *
42
42
  * You can find further help on the c-ares development mailing list:
43
- * http://cool.haxx.se/mailman/listinfo/c-ares/
43
+ * http://lists.haxx.se/listinfo/c-ares/
44
44
  *
45
45
  * NOTE 2
46
46
  * ------
@@ -3,15 +3,15 @@
3
3
  #define ARES__VERSION_H
4
4
 
5
5
  /* This is the global package copyright */
6
- #define ARES_COPYRIGHT "2004 - 2020 Daniel Stenberg, <daniel@haxx.se>."
6
+ #define ARES_COPYRIGHT "2004 - 2021 Daniel Stenberg, <daniel@haxx.se>."
7
7
 
8
8
  #define ARES_VERSION_MAJOR 1
9
- #define ARES_VERSION_MINOR 17
9
+ #define ARES_VERSION_MINOR 19
10
10
  #define ARES_VERSION_PATCH 0
11
11
  #define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
12
12
  (ARES_VERSION_MINOR<<8)|\
13
13
  (ARES_VERSION_PATCH))
14
- #define ARES_VERSION_STR "1.17.0"
14
+ #define ARES_VERSION_STR "1.19.0"
15
15
 
16
16
  #if (ARES_VERSION >= 0x010700)
17
17
  # define CARES_HAVE_ARES_LIBRARY_INIT 1
@@ -0,0 +1,266 @@
1
+ /* Copyright 1998 by the Massachusetts Institute of Technology.
2
+ * Copyright 2005 Dominick Meglio
3
+ * Copyright (C) 2019 by Andrew Selivanov
4
+ * Copyright (C) 2021 by Brad House
5
+ *
6
+ * Permission to use, copy, modify, and distribute this
7
+ * software and its documentation for any purpose and without
8
+ * fee is hereby granted, provided that the above copyright
9
+ * notice appear in all copies and that both that copyright
10
+ * notice and this permission notice appear in supporting
11
+ * documentation, and that the name of M.I.T. not be used in
12
+ * advertising or publicity pertaining to distribution of the
13
+ * software without specific, written prior permission.
14
+ * M.I.T. makes no representations about the suitability of
15
+ * this software for any purpose. It is provided "as is"
16
+ * without express or implied warranty.
17
+ */
18
+
19
+ #include "ares_setup.h"
20
+
21
+ #ifdef HAVE_NETINET_IN_H
22
+ # include <netinet/in.h>
23
+ #endif
24
+ #ifdef HAVE_NETDB_H
25
+ # include <netdb.h>
26
+ #endif
27
+ #ifdef HAVE_ARPA_INET_H
28
+ # include <arpa/inet.h>
29
+ #endif
30
+
31
+ #include "ares_nameser.h"
32
+
33
+ #ifdef HAVE_STRINGS_H
34
+ # include <strings.h>
35
+ #endif
36
+
37
+ #ifdef HAVE_LIMITS_H
38
+ # include <limits.h>
39
+ #endif
40
+
41
+ #include "ares.h"
42
+ #include "ares_dns.h"
43
+ #include "ares_inet_net_pton.h"
44
+ #include "ares_private.h"
45
+
46
+ int ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family,
47
+ struct hostent **host)
48
+ {
49
+ struct ares_addrinfo_node *next;
50
+ struct ares_addrinfo_cname *next_cname;
51
+ char **aliases = NULL;
52
+ char *addrs = NULL;
53
+ int naliases = 0, naddrs = 0, alias = 0, i;
54
+
55
+ if (ai == NULL || host == NULL)
56
+ return ARES_EBADQUERY;
57
+
58
+ *host = ares_malloc(sizeof(**host));
59
+ if (!(*host))
60
+ {
61
+ goto enomem;
62
+ }
63
+ memset(*host, 0, sizeof(**host));
64
+
65
+ /* Use the first node of the response as the family, since hostent can only
66
+ * represent one family. We assume getaddrinfo() returned a sorted list if
67
+ * the user requested AF_UNSPEC. */
68
+ if (family == AF_UNSPEC && ai->nodes)
69
+ family = ai->nodes->ai_family;
70
+
71
+ next = ai->nodes;
72
+ while (next)
73
+ {
74
+ if(next->ai_family == family)
75
+ {
76
+ ++naddrs;
77
+ }
78
+ next = next->ai_next;
79
+ }
80
+
81
+ next_cname = ai->cnames;
82
+ while (next_cname)
83
+ {
84
+ if(next_cname->alias)
85
+ ++naliases;
86
+ next_cname = next_cname->next;
87
+ }
88
+
89
+ aliases = ares_malloc((naliases + 1) * sizeof(char *));
90
+ if (!aliases)
91
+ {
92
+ goto enomem;
93
+ }
94
+ (*host)->h_aliases = aliases;
95
+ memset(aliases, 0, (naliases + 1) * sizeof(char *));
96
+
97
+ if (naliases)
98
+ {
99
+ next_cname = ai->cnames;
100
+ while (next_cname)
101
+ {
102
+ if(next_cname->alias) {
103
+ aliases[alias] = ares_strdup(next_cname->alias);
104
+ if (!aliases[alias]) {
105
+ goto enomem;
106
+ }
107
+ alias++;
108
+ }
109
+ next_cname = next_cname->next;
110
+ }
111
+ }
112
+
113
+
114
+ (*host)->h_addr_list = ares_malloc((naddrs + 1) * sizeof(char *));
115
+ if (!(*host)->h_addr_list)
116
+ {
117
+ goto enomem;
118
+ }
119
+
120
+ memset((*host)->h_addr_list, 0, (naddrs + 1) * sizeof(char *));
121
+
122
+ if (ai->cnames)
123
+ {
124
+ (*host)->h_name = ares_strdup(ai->cnames->name);
125
+ if ((*host)->h_name == NULL && ai->cnames->name)
126
+ {
127
+ goto enomem;
128
+ }
129
+ }
130
+ else
131
+ {
132
+ (*host)->h_name = ares_strdup(ai->name);
133
+ if ((*host)->h_name == NULL && ai->name)
134
+ {
135
+ goto enomem;
136
+ }
137
+ }
138
+
139
+ (*host)->h_addrtype = family;
140
+ (*host)->h_length = (family == AF_INET)?
141
+ sizeof(struct in_addr):sizeof(struct ares_in6_addr);
142
+
143
+ if (naddrs)
144
+ {
145
+ addrs = ares_malloc(naddrs * (*host)->h_length);
146
+ if (!addrs)
147
+ {
148
+ goto enomem;
149
+ }
150
+
151
+ i = 0;
152
+ next = ai->nodes;
153
+ while (next)
154
+ {
155
+ if(next->ai_family == family)
156
+ {
157
+ (*host)->h_addr_list[i] = addrs + (i * (*host)->h_length);
158
+ if (family == AF_INET6)
159
+ {
160
+ memcpy((*host)->h_addr_list[i],
161
+ &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
162
+ (*host)->h_length);
163
+ }
164
+ else
165
+ {
166
+ memcpy((*host)->h_addr_list[i],
167
+ &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr),
168
+ (*host)->h_length);
169
+ }
170
+ ++i;
171
+ }
172
+ next = next->ai_next;
173
+ }
174
+
175
+ if (i == 0)
176
+ {
177
+ ares_free(addrs);
178
+ }
179
+ }
180
+
181
+ if (naddrs == 0 && naliases == 0)
182
+ {
183
+ ares_free_hostent(*host);
184
+ *host = NULL;
185
+ return ARES_ENODATA;
186
+ }
187
+
188
+ return ARES_SUCCESS;
189
+
190
+ enomem:
191
+ ares_free_hostent(*host);
192
+ *host = NULL;
193
+ return ARES_ENOMEM;
194
+ }
195
+
196
+
197
+ int ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
198
+ int req_naddrttls, struct ares_addrttl *addrttls,
199
+ struct ares_addr6ttl *addr6ttls, int *naddrttls)
200
+ {
201
+ struct ares_addrinfo_node *next;
202
+ struct ares_addrinfo_cname *next_cname;
203
+ int cname_ttl = INT_MAX;
204
+
205
+ if (family != AF_INET && family != AF_INET6)
206
+ return ARES_EBADQUERY;
207
+
208
+ if (ai == NULL || naddrttls == NULL)
209
+ return ARES_EBADQUERY;
210
+
211
+ if (family == AF_INET && addrttls == NULL)
212
+ return ARES_EBADQUERY;
213
+
214
+ if (family == AF_INET6 && addr6ttls == NULL)
215
+ return ARES_EBADQUERY;
216
+
217
+ if (req_naddrttls == 0)
218
+ return ARES_EBADQUERY;
219
+
220
+ *naddrttls = 0;
221
+
222
+ next_cname = ai->cnames;
223
+ while (next_cname)
224
+ {
225
+ if(next_cname->ttl < cname_ttl)
226
+ cname_ttl = next_cname->ttl;
227
+ next_cname = next_cname->next;
228
+ }
229
+
230
+ next = ai->nodes;
231
+ while (next)
232
+ {
233
+ if(next->ai_family == family)
234
+ {
235
+ if (*naddrttls < req_naddrttls)
236
+ {
237
+ if (family == AF_INET6)
238
+ {
239
+ if(next->ai_ttl > cname_ttl)
240
+ addr6ttls[*naddrttls].ttl = cname_ttl;
241
+ else
242
+ addr6ttls[*naddrttls].ttl = next->ai_ttl;
243
+
244
+ memcpy(&addr6ttls[*naddrttls].ip6addr,
245
+ &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
246
+ sizeof(struct ares_in6_addr));
247
+ }
248
+ else
249
+ {
250
+ if(next->ai_ttl > cname_ttl)
251
+ addrttls[*naddrttls].ttl = cname_ttl;
252
+ else
253
+ addrttls[*naddrttls].ttl = next->ai_ttl;
254
+ memcpy(&addrttls[*naddrttls].ipaddr,
255
+ &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr),
256
+ sizeof(struct in_addr));
257
+ }
258
+ (*naddrttls)++;
259
+ }
260
+ }
261
+ next = next->ai_next;
262
+ }
263
+
264
+ return ARES_SUCCESS;
265
+ }
266
+
@@ -0,0 +1,240 @@
1
+ /* Copyright (C) 2021
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.
14
+ */
15
+
16
+ #include "ares_setup.h"
17
+
18
+ #ifdef HAVE_NETINET_IN_H
19
+ # include <netinet/in.h>
20
+ #endif
21
+ #ifdef HAVE_NETDB_H
22
+ # include <netdb.h>
23
+ #endif
24
+ #ifdef HAVE_ARPA_INET_H
25
+ # include <arpa/inet.h>
26
+ #endif
27
+
28
+ #if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600
29
+ #include <ws2ipdef.h>
30
+ #include <iphlpapi.h>
31
+ #endif
32
+
33
+ #include "ares.h"
34
+ #include "ares_inet_net_pton.h"
35
+ #include "ares_nowarn.h"
36
+ #include "ares_private.h"
37
+
38
+ int ares_append_ai_node(int aftype,
39
+ unsigned short port,
40
+ int ttl,
41
+ const void *adata,
42
+ struct ares_addrinfo_node **nodes)
43
+ {
44
+ struct ares_addrinfo_node *node;
45
+
46
+ node = ares__append_addrinfo_node(nodes);
47
+ if (!node)
48
+ {
49
+ return ARES_ENOMEM;
50
+ }
51
+
52
+ memset(node, 0, sizeof(*node));
53
+
54
+ if (aftype == AF_INET)
55
+ {
56
+ struct sockaddr_in *sin = ares_malloc(sizeof(*sin));
57
+ if (!sin)
58
+ {
59
+ return ARES_ENOMEM;
60
+ }
61
+
62
+ memset(sin, 0, sizeof(*sin));
63
+ memcpy(&sin->sin_addr.s_addr, adata, sizeof(sin->sin_addr.s_addr));
64
+ sin->sin_family = AF_INET;
65
+ sin->sin_port = htons(port);
66
+
67
+ node->ai_addr = (struct sockaddr *)sin;
68
+ node->ai_family = AF_INET;
69
+ node->ai_addrlen = sizeof(*sin);
70
+ node->ai_addr = (struct sockaddr *)sin;
71
+ node->ai_ttl = ttl;
72
+ }
73
+
74
+ if (aftype == AF_INET6)
75
+ {
76
+ struct sockaddr_in6 *sin6 = ares_malloc(sizeof(*sin6));
77
+ if (!sin6)
78
+ {
79
+ return ARES_ENOMEM;
80
+ }
81
+
82
+ memset(sin6, 0, sizeof(*sin6));
83
+ memcpy(&sin6->sin6_addr.s6_addr, adata, sizeof(sin6->sin6_addr.s6_addr));
84
+ sin6->sin6_family = AF_INET6;
85
+ sin6->sin6_port = htons(port);
86
+
87
+ node->ai_addr = (struct sockaddr *)sin6;
88
+ node->ai_family = AF_INET6;
89
+ node->ai_addrlen = sizeof(*sin6);
90
+ node->ai_addr = (struct sockaddr *)sin6;
91
+ node->ai_ttl = ttl;
92
+ }
93
+
94
+ return ARES_SUCCESS;
95
+ }
96
+
97
+
98
+ static int ares__default_loopback_addrs(int aftype,
99
+ unsigned short port,
100
+ struct ares_addrinfo_node **nodes)
101
+ {
102
+ int status = ARES_SUCCESS;
103
+
104
+ if (aftype == AF_UNSPEC || aftype == AF_INET6)
105
+ {
106
+ struct ares_in6_addr addr6;
107
+ ares_inet_pton(AF_INET6, "::1", &addr6);
108
+ status = ares_append_ai_node(AF_INET6, port, 0, &addr6, nodes);
109
+ if (status != ARES_SUCCESS)
110
+ {
111
+ return status;
112
+ }
113
+ }
114
+
115
+ if (aftype == AF_UNSPEC || aftype == AF_INET)
116
+ {
117
+ struct in_addr addr4;
118
+ ares_inet_pton(AF_INET, "127.0.0.1", &addr4);
119
+ status = ares_append_ai_node(AF_INET, port, 0, &addr4, nodes);
120
+ if (status != ARES_SUCCESS)
121
+ {
122
+ return status;
123
+ }
124
+ }
125
+
126
+ return status;
127
+ }
128
+
129
+
130
+ static int ares__system_loopback_addrs(int aftype,
131
+ unsigned short port,
132
+ struct ares_addrinfo_node **nodes)
133
+ {
134
+ #if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 && !defined(__WATCOMC__)
135
+ PMIB_UNICASTIPADDRESS_TABLE table;
136
+ unsigned int i;
137
+ int status;
138
+
139
+ *nodes = NULL;
140
+
141
+ if (GetUnicastIpAddressTable(aftype, &table) != NO_ERROR)
142
+ return ARES_ENOTFOUND;
143
+
144
+ for (i=0; i<table->NumEntries; i++)
145
+ {
146
+ if (table->Table[i].InterfaceLuid.Info.IfType !=
147
+ IF_TYPE_SOFTWARE_LOOPBACK)
148
+ {
149
+ continue;
150
+ }
151
+
152
+ if (table->Table[i].Address.si_family == AF_INET)
153
+ {
154
+ status = ares_append_ai_node(table->Table[i].Address.si_family, port, 0,
155
+ &table->Table[i].Address.Ipv4.sin_addr,
156
+ nodes);
157
+ }
158
+ else if (table->Table[i].Address.si_family == AF_INET6)
159
+ {
160
+ status = ares_append_ai_node(table->Table[i].Address.si_family, port, 0,
161
+ &table->Table[i].Address.Ipv6.sin6_addr,
162
+ nodes);
163
+ }
164
+ else
165
+ {
166
+ /* Ignore any others */
167
+ continue;
168
+ }
169
+
170
+ if (status != ARES_SUCCESS)
171
+ {
172
+ goto fail;
173
+ }
174
+ }
175
+
176
+ if (*nodes == NULL)
177
+ status = ARES_ENOTFOUND;
178
+
179
+ fail:
180
+ FreeMibTable(table);
181
+
182
+ if (status != ARES_SUCCESS)
183
+ {
184
+ ares__freeaddrinfo_nodes(*nodes);
185
+ *nodes = NULL;
186
+ }
187
+
188
+ return status;
189
+
190
+ #else
191
+ (void)aftype;
192
+ (void)port;
193
+ (void)nodes;
194
+ /* Not supported on any other OS at this time */
195
+ return ARES_ENOTFOUND;
196
+ #endif
197
+ }
198
+
199
+
200
+ int ares__addrinfo_localhost(const char *name,
201
+ unsigned short port,
202
+ const struct ares_addrinfo_hints *hints,
203
+ struct ares_addrinfo *ai)
204
+ {
205
+ struct ares_addrinfo_node *nodes = NULL;
206
+ int result;
207
+
208
+ /* Validate family */
209
+ switch (hints->ai_family) {
210
+ case AF_INET:
211
+ case AF_INET6:
212
+ case AF_UNSPEC:
213
+ break;
214
+ default:
215
+ return ARES_EBADFAMILY;
216
+ }
217
+
218
+ ai->name = ares_strdup(name);
219
+ if(!ai->name)
220
+ {
221
+ goto enomem;
222
+ }
223
+
224
+ result = ares__system_loopback_addrs(hints->ai_family, port, &nodes);
225
+
226
+ if (result == ARES_ENOTFOUND)
227
+ {
228
+ result = ares__default_loopback_addrs(hints->ai_family, port, &nodes);
229
+ }
230
+
231
+ ares__addrinfo_cat_nodes(&ai->nodes, nodes);
232
+
233
+ return result;
234
+
235
+ enomem:
236
+ ares__freeaddrinfo_nodes(nodes);
237
+ ares_free(ai->name);
238
+ ai->name = NULL;
239
+ return ARES_ENOMEM;
240
+ }