grpc 1.55.0 → 1.56.0

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 (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  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 +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -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/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +48 -12
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -1,4 +1,3 @@
1
-
2
1
  /* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology.
3
2
  *
4
3
  * Permission to use, copy, modify, and distribute this
@@ -39,30 +38,6 @@
39
38
  #include "ares_nowarn.h"
40
39
  #include "ares_private.h"
41
40
 
42
- #ifdef WATT32
43
- #undef WIN32
44
- #endif
45
-
46
- struct host_query {
47
- /* Arguments passed to ares_gethostbyname() */
48
- ares_channel channel;
49
- char *name;
50
- ares_host_callback callback;
51
- void *arg;
52
- int sent_family; /* this family is what was is being used */
53
- int want_family; /* this family is what is asked for in the API */
54
- const char *remaining_lookups;
55
- int timeouts;
56
- };
57
-
58
- static void next_lookup(struct host_query *hquery, int status_code);
59
- static void host_callback(void *arg, int status, int timeouts,
60
- unsigned char *abuf, int alen);
61
- static void end_hquery(struct host_query *hquery, int status,
62
- struct hostent *host);
63
- static int fake_hostent(const char *name, int family,
64
- ares_host_callback callback, void *arg);
65
- static int file_lookup(const char *name, int family, struct hostent **host);
66
41
  static void sort_addresses(struct hostent *host,
67
42
  const struct apattern *sortlist, int nsort);
68
43
  static void sort6_addresses(struct hostent *host,
@@ -72,252 +47,182 @@ static int get_address_index(const struct in_addr *addr,
72
47
  static int get6_address_index(const struct ares_in6_addr *addr,
73
48
  const struct apattern *sortlist, int nsort);
74
49
 
75
- void ares_gethostbyname(ares_channel channel, const char *name, int family,
76
- ares_host_callback callback, void *arg)
50
+ struct host_query {
51
+ ares_host_callback callback;
52
+ void *arg;
53
+ ares_channel channel;
54
+ };
55
+
56
+ static void ares_gethostbyname_callback(void *arg, int status, int timeouts,
57
+ struct ares_addrinfo *result)
77
58
  {
78
- struct host_query *hquery;
79
-
80
- /* Right now we only know how to look up Internet addresses - and unspec
81
- means try both basically. */
82
- switch (family) {
83
- case AF_INET:
84
- case AF_INET6:
85
- case AF_UNSPEC:
86
- break;
87
- default:
88
- callback(arg, ARES_ENOTIMP, 0, NULL);
89
- return;
90
- }
59
+ struct hostent *hostent = NULL;
60
+ struct host_query *ghbn_arg = arg;
91
61
 
92
- /* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
93
- if (ares__is_onion_domain(name))
62
+ if (status == ARES_SUCCESS)
94
63
  {
95
- callback(arg, ARES_ENOTFOUND, 0, NULL);
96
- return;
64
+ status = ares__addrinfo2hostent(result, AF_UNSPEC, &hostent);
65
+ }
66
+
67
+ /* addrinfo2hostent will only return ENODATA if there are no addresses _and_
68
+ * no cname/aliases. However, gethostbyname will return ENODATA even if there
69
+ * is cname/alias data */
70
+ if (status == ARES_SUCCESS && hostent &&
71
+ (!hostent->h_addr_list || !hostent->h_addr_list[0]))
72
+ {
73
+ status = ARES_ENODATA;
74
+ }
75
+
76
+ if (status == ARES_SUCCESS && ghbn_arg->channel->nsort && hostent)
77
+ {
78
+ if (hostent->h_addrtype == AF_INET6)
79
+ sort6_addresses(hostent, ghbn_arg->channel->sortlist,
80
+ ghbn_arg->channel->nsort);
81
+ if (hostent->h_addrtype == AF_INET)
82
+ sort_addresses(hostent, ghbn_arg->channel->sortlist,
83
+ ghbn_arg->channel->nsort);
97
84
  }
98
85
 
99
- if (fake_hostent(name, family, callback, arg))
86
+ ghbn_arg->callback(ghbn_arg->arg, status, timeouts, hostent);
87
+
88
+ ares_freeaddrinfo(result);
89
+ ares_free(ghbn_arg);
90
+ ares_free_hostent(hostent);
91
+ }
92
+
93
+ void ares_gethostbyname(ares_channel channel, const char *name, int family,
94
+ ares_host_callback callback, void *arg)
95
+ {
96
+ const struct ares_addrinfo_hints hints = { ARES_AI_CANONNAME, family, 0, 0 };
97
+ struct host_query *ghbn_arg;
98
+
99
+ if (!callback)
100
100
  return;
101
101
 
102
- /* Allocate and fill in the host query structure. */
103
- hquery = ares_malloc(sizeof(struct host_query));
104
- if (!hquery)
102
+ ghbn_arg = ares_malloc(sizeof(*ghbn_arg));
103
+ if (!ghbn_arg)
105
104
  {
106
105
  callback(arg, ARES_ENOMEM, 0, NULL);
107
106
  return;
108
107
  }
109
- hquery->channel = channel;
110
- hquery->name = ares_strdup(name);
111
- hquery->want_family = family;
112
- hquery->sent_family = -1; /* nothing is sent yet */
113
- if (!hquery->name) {
114
- ares_free(hquery);
115
- callback(arg, ARES_ENOMEM, 0, NULL);
116
- return;
117
- }
118
- hquery->callback = callback;
119
- hquery->arg = arg;
120
- hquery->remaining_lookups = channel->lookups;
121
- hquery->timeouts = 0;
122
108
 
123
- /* Start performing lookups according to channel->lookups. */
124
- next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */);
109
+ ghbn_arg->callback=callback;
110
+ ghbn_arg->arg=arg;
111
+ ghbn_arg->channel=channel;
112
+
113
+ ares_getaddrinfo(channel, name, NULL, &hints, ares_gethostbyname_callback,
114
+ ghbn_arg);
125
115
  }
126
116
 
127
- static void next_lookup(struct host_query *hquery, int status_code)
117
+
118
+ static void sort_addresses(struct hostent *host,
119
+ const struct apattern *sortlist, int nsort)
128
120
  {
129
- const char *p;
130
- struct hostent *host;
131
- int status = status_code;
121
+ struct in_addr a1, a2;
122
+ int i1, i2, ind1, ind2;
132
123
 
133
- for (p = hquery->remaining_lookups; *p; p++)
124
+ /* This is a simple insertion sort, not optimized at all. i1 walks
125
+ * through the address list, with the loop invariant that everything
126
+ * to the left of i1 is sorted. In the loop body, the value at i1 is moved
127
+ * back through the list (via i2) until it is in sorted order.
128
+ */
129
+ for (i1 = 0; host->h_addr_list[i1]; i1++)
134
130
  {
135
- switch (*p)
131
+ memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
132
+ ind1 = get_address_index(&a1, sortlist, nsort);
133
+ for (i2 = i1 - 1; i2 >= 0; i2--)
136
134
  {
137
- case 'b':
138
- /* DNS lookup */
139
- hquery->remaining_lookups = p + 1;
140
- if ((hquery->want_family == AF_INET6) ||
141
- (hquery->want_family == AF_UNSPEC)) {
142
- /* if inet6 or unspec, start out with AAAA */
143
- hquery->sent_family = AF_INET6;
144
- ares_search(hquery->channel, hquery->name, C_IN, T_AAAA,
145
- host_callback, hquery);
146
- }
147
- else {
148
- hquery->sent_family = AF_INET;
149
- ares_search(hquery->channel, hquery->name, C_IN, T_A,
150
- host_callback, hquery);
151
- }
152
- return;
153
-
154
- case 'f':
155
- /* Host file lookup */
156
- status = file_lookup(hquery->name, hquery->want_family, &host);
157
-
158
- /* this status check below previously checked for !ARES_ENOTFOUND,
159
- but we should not assume that this single error code is the one
160
- that can occur, as that is in fact no longer the case */
161
- if (status == ARES_SUCCESS)
162
- {
163
- end_hquery(hquery, status, host);
164
- return;
165
- }
166
- status = status_code; /* Use original status code */
167
- break;
135
+ memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
136
+ ind2 = get_address_index(&a2, sortlist, nsort);
137
+ if (ind2 <= ind1)
138
+ break;
139
+ memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
168
140
  }
141
+ memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
169
142
  }
170
- end_hquery(hquery, status, NULL);
171
143
  }
172
144
 
173
- static void host_callback(void *arg, int status, int timeouts,
174
- unsigned char *abuf, int alen)
145
+ /* Find the first entry in sortlist which matches addr. Return nsort
146
+ * if none of them match.
147
+ */
148
+ static int get_address_index(const struct in_addr *addr,
149
+ const struct apattern *sortlist,
150
+ int nsort)
175
151
  {
176
- struct host_query *hquery = (struct host_query *) arg;
177
- ares_channel channel = hquery->channel;
178
- struct hostent *host = NULL;
152
+ int i;
179
153
 
180
- hquery->timeouts += timeouts;
181
- if (status == ARES_SUCCESS)
154
+ for (i = 0; i < nsort; i++)
182
155
  {
183
- if (hquery->sent_family == AF_INET)
156
+ if (sortlist[i].family != AF_INET)
157
+ continue;
158
+ if (sortlist[i].type == PATTERN_MASK)
184
159
  {
185
- status = ares_parse_a_reply(abuf, alen, &host, NULL, NULL);
186
- if (host && channel->nsort)
187
- sort_addresses(host, channel->sortlist, channel->nsort);
160
+ if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
161
+ == sortlist[i].addrV4.s_addr)
162
+ break;
188
163
  }
189
- else if (hquery->sent_family == AF_INET6)
164
+ else
190
165
  {
191
- status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL);
192
- if ((status == ARES_ENODATA || status == ARES_EBADRESP ||
193
- (status == ARES_SUCCESS && host && host->h_addr_list[0] == NULL)) &&
194
- hquery->want_family == AF_UNSPEC) {
195
- /* The query returned something but either there were no AAAA
196
- records (e.g. just CNAME) or the response was malformed. Try
197
- looking up A instead. */
198
- if (host)
199
- ares_free_hostent(host);
200
- hquery->sent_family = AF_INET;
201
- ares_search(hquery->channel, hquery->name, C_IN, T_A,
202
- host_callback, hquery);
203
- return;
204
- }
205
- if (host && channel->nsort)
206
- sort6_addresses(host, channel->sortlist, channel->nsort);
166
+ if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
167
+ sortlist[i].mask.bits))
168
+ break;
207
169
  }
208
- if (status == ARES_SUCCESS && host && host->h_addr_list[0] == NULL)
209
- {
210
- /* The query returned something but had no A/AAAA record
211
- (even after potentially retrying AAAA with A)
212
- so we should treat this as an error */
213
- status = ARES_ENODATA;
214
- }
215
- end_hquery(hquery, status, host);
216
- }
217
- else if ((status == ARES_ENODATA || status == ARES_EBADRESP ||
218
- status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 &&
219
- hquery->want_family == AF_UNSPEC))
220
- {
221
- /* The AAAA query yielded no useful result. Now look up an A instead. */
222
- hquery->sent_family = AF_INET;
223
- ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
224
- hquery);
225
170
  }
226
- else if (status == ARES_EDESTRUCTION)
227
- end_hquery(hquery, status, NULL);
228
- else
229
- next_lookup(hquery, status);
171
+ return i;
230
172
  }
231
173
 
232
- static void end_hquery(struct host_query *hquery, int status,
233
- struct hostent *host)
174
+ static void sort6_addresses(struct hostent *host,
175
+ const struct apattern *sortlist, int nsort)
234
176
  {
235
- hquery->callback(hquery->arg, status, hquery->timeouts, host);
236
- if (host)
237
- ares_free_hostent(host);
238
- ares_free(hquery->name);
239
- ares_free(hquery);
240
- }
177
+ struct ares_in6_addr a1, a2;
178
+ int i1, i2, ind1, ind2;
241
179
 
242
- /* If the name looks like an IP address, fake up a host entry, end the
243
- * query immediately, and return true. Otherwise return false.
244
- */
245
- static int fake_hostent(const char *name, int family,
246
- ares_host_callback callback, void *arg)
247
- {
248
- struct hostent hostent;
249
- char *aliases[1] = { NULL };
250
- char *addrs[2];
251
- int result = 0;
252
- struct in_addr in;
253
- struct ares_in6_addr in6;
254
-
255
- if (family == AF_INET || family == AF_UNSPEC)
180
+ /* This is a simple insertion sort, not optimized at all. i1 walks
181
+ * through the address list, with the loop invariant that everything
182
+ * to the left of i1 is sorted. In the loop body, the value at i1 is moved
183
+ * back through the list (via i2) until it is in sorted order.
184
+ */
185
+ for (i1 = 0; host->h_addr_list[i1]; i1++)
256
186
  {
257
- /* It only looks like an IP address if it's all numbers and dots. */
258
- int numdots = 0, valid = 1;
259
- const char *p;
260
- for (p = name; *p; p++)
187
+ memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
188
+ ind1 = get6_address_index(&a1, sortlist, nsort);
189
+ for (i2 = i1 - 1; i2 >= 0; i2--)
261
190
  {
262
- if (!ISDIGIT(*p) && *p != '.') {
263
- valid = 0;
191
+ memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
192
+ ind2 = get6_address_index(&a2, sortlist, nsort);
193
+ if (ind2 <= ind1)
264
194
  break;
265
- } else if (*p == '.') {
266
- numdots++;
267
- }
195
+ memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
268
196
  }
269
-
270
- /* if we don't have 3 dots, it is illegal
271
- * (although inet_pton doesn't think so).
272
- */
273
- if (numdots != 3 || !valid) {
274
- result = 0;
275
- } else {
276
- result = (ares_inet_pton(AF_INET, name, &in) < 1 ? 0 : 1);
277
- }
278
-
279
- /*
280
- * Set address family in case of failure,
281
- * as we will try to convert it later afterwards
282
- */
283
- family = result ? AF_INET : AF_INET6;
197
+ memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
284
198
  }
285
- if (family == AF_INET6)
286
- result = (ares_inet_pton(AF_INET6, name, &in6) < 1 ? 0 : 1);
199
+ }
287
200
 
288
- if (!result)
289
- return 0;
201
+ /* Find the first entry in sortlist which matches addr. Return nsort
202
+ * if none of them match.
203
+ */
204
+ static int get6_address_index(const struct ares_in6_addr *addr,
205
+ const struct apattern *sortlist,
206
+ int nsort)
207
+ {
208
+ int i;
290
209
 
291
- if (family == AF_INET)
292
- {
293
- hostent.h_length = (int)sizeof(struct in_addr);
294
- addrs[0] = (char *)&in;
295
- }
296
- else if (family == AF_INET6)
297
- {
298
- hostent.h_length = (int)sizeof(struct ares_in6_addr);
299
- addrs[0] = (char *)&in6;
300
- }
301
- /* Duplicate the name, to avoid a constness violation. */
302
- hostent.h_name = ares_strdup(name);
303
- if (!hostent.h_name)
210
+ for (i = 0; i < nsort; i++)
304
211
  {
305
- callback(arg, ARES_ENOMEM, 0, NULL);
306
- return 1;
212
+ if (sortlist[i].family != AF_INET6)
213
+ continue;
214
+ if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits))
215
+ break;
307
216
  }
217
+ return i;
218
+ }
308
219
 
309
- /* Fill in the rest of the host structure and terminate the query. */
310
- addrs[1] = NULL;
311
- hostent.h_aliases = aliases;
312
- hostent.h_addrtype = aresx_sitoss(family);
313
- hostent.h_addr_list = addrs;
314
- callback(arg, ARES_SUCCESS, 0, &hostent);
315
220
 
316
- ares_free((char *)(hostent.h_name));
317
- return 1;
318
- }
319
221
 
320
- /* This is an API method */
222
+ static int file_lookup(const char *name, int family, struct hostent **host);
223
+
224
+ /* I really have no idea why this is exposed as a public function, but since
225
+ * it is, we can't kill this legacy function. */
321
226
  int ares_gethostbyname_file(ares_channel channel, const char *name,
322
227
  int family, struct hostent **host)
323
228
  {
@@ -431,104 +336,3 @@ static int file_lookup(const char *name, int family, struct hostent **host)
431
336
  return status;
432
337
  }
433
338
 
434
- static void sort_addresses(struct hostent *host,
435
- const struct apattern *sortlist, int nsort)
436
- {
437
- struct in_addr a1, a2;
438
- int i1, i2, ind1, ind2;
439
-
440
- /* This is a simple insertion sort, not optimized at all. i1 walks
441
- * through the address list, with the loop invariant that everything
442
- * to the left of i1 is sorted. In the loop body, the value at i1 is moved
443
- * back through the list (via i2) until it is in sorted order.
444
- */
445
- for (i1 = 0; host->h_addr_list[i1]; i1++)
446
- {
447
- memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
448
- ind1 = get_address_index(&a1, sortlist, nsort);
449
- for (i2 = i1 - 1; i2 >= 0; i2--)
450
- {
451
- memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
452
- ind2 = get_address_index(&a2, sortlist, nsort);
453
- if (ind2 <= ind1)
454
- break;
455
- memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
456
- }
457
- memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
458
- }
459
- }
460
-
461
- /* Find the first entry in sortlist which matches addr. Return nsort
462
- * if none of them match.
463
- */
464
- static int get_address_index(const struct in_addr *addr,
465
- const struct apattern *sortlist,
466
- int nsort)
467
- {
468
- int i;
469
-
470
- for (i = 0; i < nsort; i++)
471
- {
472
- if (sortlist[i].family != AF_INET)
473
- continue;
474
- if (sortlist[i].type == PATTERN_MASK)
475
- {
476
- if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
477
- == sortlist[i].addrV4.s_addr)
478
- break;
479
- }
480
- else
481
- {
482
- if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
483
- sortlist[i].mask.bits))
484
- break;
485
- }
486
- }
487
- return i;
488
- }
489
-
490
- static void sort6_addresses(struct hostent *host,
491
- const struct apattern *sortlist, int nsort)
492
- {
493
- struct ares_in6_addr a1, a2;
494
- int i1, i2, ind1, ind2;
495
-
496
- /* This is a simple insertion sort, not optimized at all. i1 walks
497
- * through the address list, with the loop invariant that everything
498
- * to the left of i1 is sorted. In the loop body, the value at i1 is moved
499
- * back through the list (via i2) until it is in sorted order.
500
- */
501
- for (i1 = 0; host->h_addr_list[i1]; i1++)
502
- {
503
- memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
504
- ind1 = get6_address_index(&a1, sortlist, nsort);
505
- for (i2 = i1 - 1; i2 >= 0; i2--)
506
- {
507
- memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
508
- ind2 = get6_address_index(&a2, sortlist, nsort);
509
- if (ind2 <= ind1)
510
- break;
511
- memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
512
- }
513
- memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
514
- }
515
- }
516
-
517
- /* Find the first entry in sortlist which matches addr. Return nsort
518
- * if none of them match.
519
- */
520
- static int get6_address_index(const struct ares_in6_addr *addr,
521
- const struct apattern *sortlist,
522
- int nsort)
523
- {
524
- int i;
525
-
526
- for (i = 0; i < nsort; i++)
527
- {
528
- if (sortlist[i].family != AF_INET6)
529
- continue;
530
- if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits))
531
- break;
532
- }
533
- return i;
534
- }