grpc 1.55.0 → 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 (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 +50 -14
  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
@@ -38,6 +38,7 @@
38
38
  #include <grpc/event_engine/event_engine.h>
39
39
  #include <grpc/grpc.h>
40
40
  #include <grpc/impl/connectivity_state.h>
41
+ #include <grpc/support/json.h>
41
42
  #include <grpc/support/log.h>
42
43
 
43
44
  #include "src/core/ext/filters/client_channel/lb_policy/address_filtering.h"
@@ -308,10 +309,10 @@ class XdsClusterResolverLb : public LoadBalancingPolicy {
308
309
  void Start() override;
309
310
  void Orphan() override;
310
311
  Json::Array override_child_policy() override {
311
- return Json::Array{
312
- Json::Object{
313
- {"pick_first", Json::Object()},
314
- },
312
+ return {
313
+ Json::FromObject({
314
+ {"pick_first", Json::FromObject({})},
315
+ }),
315
316
  };
316
317
  }
317
318
  bool disable_reresolution() override { return false; };
@@ -878,8 +879,8 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
878
879
  Json child_policy;
879
880
  if (!discovery_entry.discovery_mechanism->override_child_policy()
880
881
  .empty()) {
881
- child_policy =
882
- discovery_entry.discovery_mechanism->override_child_policy();
882
+ child_policy = Json::FromArray(
883
+ discovery_entry.discovery_mechanism->override_child_policy());
883
884
  } else {
884
885
  child_policy = config_->xds_lb_policy();
885
886
  }
@@ -889,32 +890,34 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
889
890
  };
890
891
  if (!discovery_config.override_host_statuses.empty()) {
891
892
  xds_override_host_lb_config["overrideHostStatus"] =
892
- discovery_config.override_host_statuses;
893
+ Json::FromArray(discovery_config.override_host_statuses);
893
894
  }
894
- Json::Array xds_override_host_config = {Json::Object{
895
+ Json::Array xds_override_host_config = {Json::FromObject({
895
896
  {"xds_override_host_experimental",
896
- std::move(xds_override_host_lb_config)},
897
- }};
897
+ Json::FromObject(std::move(xds_override_host_lb_config))},
898
+ })};
898
899
  // Wrap it in the xds_cluster_impl policy.
899
900
  Json::Array drop_categories;
900
901
  if (discovery_entry.latest_update->drop_config != nullptr) {
901
902
  for (const auto& category :
902
903
  discovery_entry.latest_update->drop_config->drop_category_list()) {
903
- drop_categories.push_back(Json::Object{
904
- {"category", category.name},
905
- {"requests_per_million", category.parts_per_million},
906
- });
904
+ drop_categories.push_back(Json::FromObject({
905
+ {"category", Json::FromString(category.name)},
906
+ {"requests_per_million",
907
+ Json::FromNumber(category.parts_per_million)},
908
+ }));
907
909
  }
908
910
  }
909
911
  Json::Object xds_cluster_impl_config = {
910
- {"clusterName", discovery_config.cluster_name},
911
- {"childPolicy", std::move(xds_override_host_config)},
912
- {"dropCategories", std::move(drop_categories)},
913
- {"maxConcurrentRequests", discovery_config.max_concurrent_requests},
912
+ {"clusterName", Json::FromString(discovery_config.cluster_name)},
913
+ {"childPolicy", Json::FromArray(std::move(xds_override_host_config))},
914
+ {"dropCategories", Json::FromArray(std::move(drop_categories))},
915
+ {"maxConcurrentRequests",
916
+ Json::FromNumber(discovery_config.max_concurrent_requests)},
914
917
  };
915
918
  if (!discovery_config.eds_service_name.empty()) {
916
919
  xds_cluster_impl_config["edsServiceName"] =
917
- discovery_config.eds_service_name;
920
+ Json::FromString(discovery_config.eds_service_name);
918
921
  }
919
922
  if (discovery_config.lrs_load_reporting_server.has_value()) {
920
923
  xds_cluster_impl_config["lrsLoadReportingServer"] =
@@ -926,32 +929,34 @@ XdsClusterResolverLb::CreateChildPolicyConfigLocked() {
926
929
  outlier_detection_config =
927
930
  discovery_entry.config().outlier_detection_lb_config.value();
928
931
  }
929
- outlier_detection_config["childPolicy"] = Json::Array{Json::Object{
930
- {"xds_cluster_impl_experimental", std::move(xds_cluster_impl_config)},
931
- }};
932
- Json locality_picking_policy = Json::Array{Json::Object{
932
+ outlier_detection_config["childPolicy"] =
933
+ Json::FromArray({Json::FromObject({
934
+ {"xds_cluster_impl_experimental",
935
+ Json::FromObject(std::move(xds_cluster_impl_config))},
936
+ })});
937
+ Json locality_picking_policy = Json::FromArray({Json::FromObject({
933
938
  {"outlier_detection_experimental",
934
- std::move(outlier_detection_config)},
935
- }};
939
+ Json::FromObject(std::move(outlier_detection_config))},
940
+ })});
936
941
  // Add priority entry, with the appropriate child name.
937
942
  std::string child_name = discovery_entry.GetChildPolicyName(priority);
938
- priority_priorities.emplace_back(child_name);
943
+ priority_priorities.emplace_back(Json::FromString(child_name));
939
944
  Json::Object child_config = {
940
945
  {"config", std::move(locality_picking_policy)},
941
946
  };
942
947
  if (discovery_entry.discovery_mechanism->disable_reresolution()) {
943
- child_config["ignore_reresolution_requests"] = true;
948
+ child_config["ignore_reresolution_requests"] = Json::FromBool(true);
944
949
  }
945
- priority_children[child_name] = std::move(child_config);
950
+ priority_children[child_name] = Json::FromObject(std::move(child_config));
946
951
  }
947
952
  }
948
- Json json = Json::Array{Json::Object{
953
+ Json json = Json::FromArray({Json::FromObject({
949
954
  {"priority_experimental",
950
- Json::Object{
951
- {"children", std::move(priority_children)},
952
- {"priorities", std::move(priority_priorities)},
953
- }},
954
- }};
955
+ Json::FromObject({
956
+ {"children", Json::FromObject(std::move(priority_children))},
957
+ {"priorities", Json::FromArray(std::move(priority_priorities))},
958
+ })},
959
+ })});
955
960
  if (GRPC_TRACE_FLAG_ENABLED(grpc_lb_xds_cluster_resolver_trace)) {
956
961
  gpr_log(
957
962
  GPR_INFO,
@@ -1145,15 +1150,7 @@ class XdsClusterResolverLbFactory : public LoadBalancingPolicyFactory {
1145
1150
 
1146
1151
  absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
1147
1152
  ParseLoadBalancingConfig(const Json& json) const override {
1148
- if (json.type() == Json::Type::kNull) {
1149
- // xds_cluster_resolver was mentioned as a policy in the deprecated
1150
- // loadBalancingPolicy field or in the client API.
1151
- return absl::InvalidArgumentError(
1152
- "field:loadBalancingPolicy error:xds_cluster_resolver policy "
1153
- "requires configuration. "
1154
- "Please use loadBalancingConfig field of service config instead.");
1155
- }
1156
- return LoadRefCountedFromJson<XdsClusterResolverLbConfig>(
1153
+ return LoadFromJson<RefCountedPtr<XdsClusterResolverLbConfig>>(
1157
1154
  json, JsonArgs(),
1158
1155
  "errors validating xds_cluster_resolver LB policy config");
1159
1156
  }
@@ -319,7 +319,7 @@ class XdsOverrideHostLb : public LoadBalancingPolicy {
319
319
  OrphanablePtr<LoadBalancingPolicy> child_policy_;
320
320
 
321
321
  // Latest state and picker reported by the child policy.
322
- grpc_connectivity_state state_ = GRPC_CHANNEL_IDLE;
322
+ grpc_connectivity_state state_ = GRPC_CHANNEL_CONNECTING;
323
323
  absl::Status status_;
324
324
  RefCountedPtr<SubchannelPicker> picker_;
325
325
  Mutex subchannel_map_mu_;
@@ -370,8 +370,11 @@ XdsOverrideHostLb::Picker::PickOverridenHost(absl::string_view override_host) {
370
370
  LoadBalancingPolicy::PickResult XdsOverrideHostLb::Picker::Pick(
371
371
  LoadBalancingPolicy::PickArgs args) {
372
372
  auto* call_state = static_cast<ClientChannelLbCallState*>(args.call_state);
373
- auto override_host = call_state->GetCallAttribute(XdsOverrideHostTypeName());
374
- auto overridden_host_pick = PickOverridenHost(override_host);
373
+ auto* override_host = static_cast<XdsOverrideHostAttribute*>(
374
+ call_state->GetCallAttribute(XdsOverrideHostAttribute::TypeName()));
375
+ auto overridden_host_pick =
376
+ PickOverridenHost(override_host != nullptr ? override_host->host_name()
377
+ : absl::string_view());
375
378
  if (overridden_host_pick.has_value()) {
376
379
  return std::move(*overridden_host_pick);
377
380
  }
@@ -740,15 +743,7 @@ class XdsOverrideHostLbFactory : public LoadBalancingPolicyFactory {
740
743
 
741
744
  absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
742
745
  ParseLoadBalancingConfig(const Json& json) const override {
743
- if (json.type() == Json::Type::kNull) {
744
- // This policy was configured in the deprecated loadBalancingPolicy
745
- // field or in the client API.
746
- return absl::InvalidArgumentError(
747
- "field:loadBalancingPolicy error:xds_override_host policy requires "
748
- "configuration. Please use loadBalancingConfig field of service "
749
- "config instead.");
750
- }
751
- return LoadRefCountedFromJson<XdsOverrideHostLbConfig>(
746
+ return LoadFromJson<RefCountedPtr<XdsOverrideHostLbConfig>>(
752
747
  json, JsonArgs(),
753
748
  "errors validating xds_override_host LB policy config");
754
749
  }
@@ -30,6 +30,7 @@
30
30
 
31
31
  #include <grpc/event_engine/event_engine.h>
32
32
  #include <grpc/impl/connectivity_state.h>
33
+ #include <grpc/support/json.h>
33
34
  #include <grpc/support/log.h>
34
35
 
35
36
  #include "src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h"
@@ -211,19 +212,19 @@ absl::Status XdsWrrLocalityLb::UpdateLocked(UpdateArgs args) {
211
212
  const std::string& locality_name = p.first;
212
213
  uint32_t weight = p.second;
213
214
  // Add weighted target entry.
214
- weighted_targets[locality_name] = Json::Object{
215
- {"weight", weight},
215
+ weighted_targets[locality_name] = Json::FromObject({
216
+ {"weight", Json::FromNumber(weight)},
216
217
  {"childPolicy", config->child_config()},
217
- };
218
+ });
218
219
  }
219
- Json child_config_json = Json::Array{
220
- Json::Object{
220
+ Json child_config_json = Json::FromArray({
221
+ Json::FromObject({
221
222
  {"weighted_target_experimental",
222
- Json::Object{
223
- {"targets", std::move(weighted_targets)},
224
- }},
225
- },
226
- };
223
+ Json::FromObject({
224
+ {"targets", Json::FromObject(std::move(weighted_targets))},
225
+ })},
226
+ }),
227
+ });
227
228
  if (GRPC_TRACE_FLAG_ENABLED(grpc_xds_wrr_locality_lb_trace)) {
228
229
  gpr_log(GPR_INFO,
229
230
  "[xds_wrr_locality_lb %p] generated child policy config: %s", this,
@@ -346,15 +347,7 @@ class XdsWrrLocalityLbFactory : public LoadBalancingPolicyFactory {
346
347
 
347
348
  absl::StatusOr<RefCountedPtr<LoadBalancingPolicy::Config>>
348
349
  ParseLoadBalancingConfig(const Json& json) const override {
349
- if (json.type() == Json::Type::kNull) {
350
- // xds_wrr_locality was mentioned as a policy in the deprecated
351
- // loadBalancingPolicy field or in the client API.
352
- return absl::InvalidArgumentError(
353
- "field:loadBalancingPolicy error:xds_wrr_locality policy requires "
354
- "configuration. Please use loadBalancingConfig field of service "
355
- "config instead.");
356
- }
357
- return LoadRefCountedFromJson<XdsWrrLocalityLbConfig>(
350
+ return LoadFromJson<RefCountedPtr<XdsWrrLocalityLbConfig>>(
358
351
  json, JsonArgs(),
359
352
  "errors validating xds_wrr_locality LB policy config");
360
353
  }
@@ -666,35 +666,33 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
666
666
  if (hr->is_balancer) {
667
667
  args = args.Set(GRPC_ARG_DEFAULT_AUTHORITY, hr->host);
668
668
  }
669
+ grpc_resolved_address address;
670
+ memset(&address, 0, sizeof(address));
669
671
  switch (hostent->h_addrtype) {
670
672
  case AF_INET6: {
671
- size_t addr_len = sizeof(struct sockaddr_in6);
672
- struct sockaddr_in6 addr;
673
- memset(&addr, 0, addr_len);
674
- memcpy(&addr.sin6_addr, hostent->h_addr_list[i],
673
+ address.len = sizeof(struct sockaddr_in6);
674
+ auto* addr = reinterpret_cast<struct sockaddr_in6*>(&address.addr);
675
+ memcpy(&addr->sin6_addr, hostent->h_addr_list[i],
675
676
  sizeof(struct in6_addr));
676
- addr.sin6_family = static_cast<unsigned char>(hostent->h_addrtype);
677
- addr.sin6_port = hr->port;
678
- addresses.emplace_back(&addr, addr_len, args);
677
+ addr->sin6_family = static_cast<unsigned char>(hostent->h_addrtype);
678
+ addr->sin6_port = hr->port;
679
679
  char output[INET6_ADDRSTRLEN];
680
- ares_inet_ntop(AF_INET6, &addr.sin6_addr, output, INET6_ADDRSTRLEN);
680
+ ares_inet_ntop(AF_INET6, &addr->sin6_addr, output, INET6_ADDRSTRLEN);
681
681
  GRPC_CARES_TRACE_LOG(
682
682
  "request:%p c-ares resolver gets a AF_INET6 result: \n"
683
683
  " addr: %s\n port: %d\n sin6_scope_id: %d\n",
684
- r, output, ntohs(hr->port), addr.sin6_scope_id);
684
+ r, output, ntohs(hr->port), addr->sin6_scope_id);
685
685
  break;
686
686
  }
687
687
  case AF_INET: {
688
- size_t addr_len = sizeof(struct sockaddr_in);
689
- struct sockaddr_in addr;
690
- memset(&addr, 0, addr_len);
691
- memcpy(&addr.sin_addr, hostent->h_addr_list[i],
688
+ address.len = sizeof(struct sockaddr_in);
689
+ auto* addr = reinterpret_cast<struct sockaddr_in*>(&address.addr);
690
+ memcpy(&addr->sin_addr, hostent->h_addr_list[i],
692
691
  sizeof(struct in_addr));
693
- addr.sin_family = static_cast<unsigned char>(hostent->h_addrtype);
694
- addr.sin_port = hr->port;
695
- addresses.emplace_back(&addr, addr_len, args);
692
+ addr->sin_family = static_cast<unsigned char>(hostent->h_addrtype);
693
+ addr->sin_port = hr->port;
696
694
  char output[INET_ADDRSTRLEN];
697
- ares_inet_ntop(AF_INET, &addr.sin_addr, output, INET_ADDRSTRLEN);
695
+ ares_inet_ntop(AF_INET, &addr->sin_addr, output, INET_ADDRSTRLEN);
698
696
  GRPC_CARES_TRACE_LOG(
699
697
  "request:%p c-ares resolver gets a AF_INET result: \n"
700
698
  " addr: %s\n port: %d\n",
@@ -702,6 +700,7 @@ static void on_hostbyname_done_locked(void* arg, int status, int /*timeouts*/,
702
700
  break;
703
701
  }
704
702
  }
703
+ addresses.emplace_back(address, args);
705
704
  }
706
705
  } else {
707
706
  std::string error_msg = absl::StrFormat(
@@ -920,7 +919,7 @@ static bool inner_resolve_as_ip_literal_locked(
920
919
  false /* log errors */)) {
921
920
  GPR_ASSERT(*addrs == nullptr);
922
921
  *addrs = std::make_unique<ServerAddressList>();
923
- (*addrs)->emplace_back(addr.addr, addr.len, grpc_core::ChannelArgs());
922
+ (*addrs)->emplace_back(addr, grpc_core::ChannelArgs());
924
923
  return true;
925
924
  }
926
925
  return false;
@@ -979,23 +978,26 @@ static bool inner_maybe_resolve_localhost_manually_locked(
979
978
  GPR_ASSERT(*addrs == nullptr);
980
979
  *addrs = std::make_unique<grpc_core::ServerAddressList>();
981
980
  uint16_t numeric_port = grpc_strhtons(port->c_str());
981
+ grpc_resolved_address address;
982
982
  // Append the ipv6 loopback address.
983
- struct sockaddr_in6 ipv6_loopback_addr;
984
- memset(&ipv6_loopback_addr, 0, sizeof(ipv6_loopback_addr));
985
- ((char*)&ipv6_loopback_addr.sin6_addr)[15] = 1;
986
- ipv6_loopback_addr.sin6_family = AF_INET6;
987
- ipv6_loopback_addr.sin6_port = numeric_port;
988
- (*addrs)->emplace_back(&ipv6_loopback_addr, sizeof(ipv6_loopback_addr),
989
- grpc_core::ChannelArgs() /* args */);
983
+ memset(&address, 0, sizeof(address));
984
+ auto* ipv6_loopback_addr =
985
+ reinterpret_cast<struct sockaddr_in6*>(&address.addr);
986
+ ((char*)&ipv6_loopback_addr->sin6_addr)[15] = 1;
987
+ ipv6_loopback_addr->sin6_family = AF_INET6;
988
+ ipv6_loopback_addr->sin6_port = numeric_port;
989
+ address.len = sizeof(struct sockaddr_in6);
990
+ (*addrs)->emplace_back(address, grpc_core::ChannelArgs());
990
991
  // Append the ipv4 loopback address.
991
- struct sockaddr_in ipv4_loopback_addr;
992
- memset(&ipv4_loopback_addr, 0, sizeof(ipv4_loopback_addr));
993
- ((char*)&ipv4_loopback_addr.sin_addr)[0] = 0x7f;
994
- ((char*)&ipv4_loopback_addr.sin_addr)[3] = 0x01;
995
- ipv4_loopback_addr.sin_family = AF_INET;
996
- ipv4_loopback_addr.sin_port = numeric_port;
997
- (*addrs)->emplace_back(&ipv4_loopback_addr, sizeof(ipv4_loopback_addr),
998
- grpc_core::ChannelArgs() /* args */);
992
+ memset(&address, 0, sizeof(address));
993
+ auto* ipv4_loopback_addr =
994
+ reinterpret_cast<struct sockaddr_in*>(&address.addr);
995
+ ((char*)&ipv4_loopback_addr->sin_addr)[0] = 0x7f;
996
+ ((char*)&ipv4_loopback_addr->sin_addr)[3] = 0x01;
997
+ ipv4_loopback_addr->sin_family = AF_INET;
998
+ ipv4_loopback_addr->sin_port = numeric_port;
999
+ address.len = sizeof(struct sockaddr_in);
1000
+ (*addrs)->emplace_back(address, grpc_core::ChannelArgs());
999
1001
  // Let the address sorter figure out which one should be tried first.
1000
1002
  grpc_cares_wrapper_address_sorting_sort(r, addrs->get());
1001
1003
  return true;
@@ -31,6 +31,7 @@
31
31
  #include "absl/container/flat_hash_set.h"
32
32
  #include "absl/status/status.h"
33
33
  #include "absl/status/statusor.h"
34
+ #include "absl/strings/match.h"
34
35
  #include "absl/strings/str_cat.h"
35
36
  #include "absl/strings/strip.h"
36
37
  #include "absl/types/optional.h"
@@ -128,7 +129,7 @@ class EventEngineClientChannelDNSResolver : public PollingResolver {
128
129
  void OnBalancerHostnamesResolved(
129
130
  std::string authority,
130
131
  absl::StatusOr<std::vector<EventEngine::ResolvedAddress>> addresses);
131
- void OnTXTResolved(absl::StatusOr<std::string> service_config);
132
+ void OnTXTResolved(absl::StatusOr<std::vector<std::string>> service_config);
132
133
  // Returns a Result if resolution is complete.
133
134
  // callers must release the lock and call OnRequestComplete if a Result is
134
135
  // returned. This is because OnRequestComplete may Orphan the resolver,
@@ -251,7 +252,7 @@ EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
251
252
  resolver_.get(), resolver_->name_to_resolve().c_str());
252
253
  txt_handle_ = event_engine_resolver_->LookupTXT(
253
254
  [self = Ref(DEBUG_LOCATION, "OnTXTResolved")](
254
- absl::StatusOr<std::string> service_config) {
255
+ absl::StatusOr<std::vector<std::string>> service_config) {
255
256
  self->OnTXTResolved(std::move(service_config));
256
257
  },
257
258
  absl::StrCat("_grpc_config.", resolver_->name_to_resolve()),
@@ -333,6 +334,10 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
333
334
  result = OnResolvedLocked();
334
335
  return;
335
336
  }
337
+ if (srv_records->empty()) {
338
+ result = OnResolvedLocked();
339
+ return;
340
+ }
336
341
  // Do a subsequent hostname query since SRV records were returned
337
342
  for (auto& srv_record : *srv_records) {
338
343
  GRPC_EVENT_ENGINE_RESOLVER_TRACE(
@@ -388,7 +393,7 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
388
393
  }
389
394
 
390
395
  void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
391
- OnTXTResolved(absl::StatusOr<std::string> service_config) {
396
+ OnTXTResolved(absl::StatusOr<std::vector<std::string>> service_config) {
392
397
  ValidationErrors::ScopedField field(&errors_, "txt lookup");
393
398
  absl::optional<Resolver::Result> result;
394
399
  {
@@ -400,7 +405,22 @@ void EventEngineClientChannelDNSResolver::EventEngineDNSRequestWrapper::
400
405
  errors_.AddError(service_config.status().message());
401
406
  service_config_json_ = service_config.status();
402
407
  } else {
403
- service_config_json_ = absl::StrCat("grpc_config=", *service_config);
408
+ static constexpr absl::string_view kServiceConfigAttributePrefix =
409
+ "grpc_config=";
410
+ auto result = std::find_if(service_config->begin(), service_config->end(),
411
+ [&](absl::string_view s) {
412
+ return absl::StartsWith(
413
+ s, kServiceConfigAttributePrefix);
414
+ });
415
+ if (result != service_config->end()) {
416
+ service_config_json_ =
417
+ result->substr(kServiceConfigAttributePrefix.size());
418
+ } else {
419
+ service_config_json_ = absl::UnavailableError(absl::StrCat(
420
+ "failed to find attribute prefix: ", kServiceConfigAttributePrefix,
421
+ " in TXT records"));
422
+ errors_.AddError(service_config_json_.status().message());
423
+ }
404
424
  }
405
425
  result = OnResolvedLocked();
406
426
  }
@@ -480,6 +500,11 @@ absl::optional<Resolver::Result> EventEngineClientChannelDNSResolver::
480
500
  absl::Status status = errors_.status(
481
501
  absl::StatusCode::kUnavailable,
482
502
  absl::StrCat("errors resolving ", resolver_->name_to_resolve()));
503
+ if (status.ok()) {
504
+ // If no errors were returned, but the results are empty, we still need to
505
+ // return an error. Validation errors may be empty.
506
+ status = absl::UnavailableError("No results from DNS queries");
507
+ }
483
508
  GRPC_EVENT_ENGINE_RESOLVER_TRACE("%s", status.message().data());
484
509
  result.addresses = status;
485
510
  result.service_config = status;
@@ -88,7 +88,7 @@ absl::StatusOr<std::string> ChooseServiceConfig(
88
88
  continue;
89
89
  }
90
90
  }
91
- return JsonDump(choice.service_config);
91
+ return JsonDump(Json::FromObject(choice.service_config));
92
92
  }
93
93
  // No matching service config was found
94
94
  return "";
@@ -29,6 +29,7 @@
29
29
  #include "absl/strings/strip.h"
30
30
  #include "absl/types/optional.h"
31
31
 
32
+ #include <grpc/support/json.h>
32
33
  #include <grpc/support/log.h>
33
34
 
34
35
  #include "src/core/ext/gcp/metadata_query.h"
@@ -219,17 +220,17 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
219
220
  std::mt19937 mt(rd());
220
221
  std::uniform_int_distribution<uint64_t> dist(1, UINT64_MAX);
221
222
  Json::Object node = {
222
- {"id", absl::StrCat("C2P-", dist(mt))},
223
+ {"id", Json::FromString(absl::StrCat("C2P-", dist(mt)))},
223
224
  };
224
225
  if (!zone_->empty()) {
225
- node["locality"] = Json::Object{
226
- {"zone", *zone_},
227
- };
226
+ node["locality"] = Json::FromObject({
227
+ {"zone", Json::FromString(*zone_)},
228
+ });
228
229
  };
229
230
  if (*supports_ipv6_) {
230
- node["metadata"] = Json::Object{
231
- {"TRAFFICDIRECTOR_DIRECTPATH_C2P_IPV6_CAPABLE", true},
232
- };
231
+ node["metadata"] = Json::FromObject({
232
+ {"TRAFFICDIRECTOR_DIRECTPATH_C2P_IPV6_CAPABLE", Json::FromBool(true)},
233
+ });
233
234
  }
234
235
  // Allow the TD server uri to be overridden for testing purposes.
235
236
  auto override_server =
@@ -238,29 +239,29 @@ void GoogleCloud2ProdResolver::StartXdsResolver() {
238
239
  override_server.has_value() && !override_server->empty()
239
240
  ? override_server->c_str()
240
241
  : "directpath-pa.googleapis.com";
241
- Json xds_server = Json::Array{
242
- Json::Object{
243
- {"server_uri", server_uri},
242
+ Json xds_server = Json::FromArray({
243
+ Json::FromObject({
244
+ {"server_uri", Json::FromString(server_uri)},
244
245
  {"channel_creds",
245
- Json::Array{
246
- Json::Object{
247
- {"type", "google_default"},
248
- },
249
- }},
250
- {"server_features", Json::Array{"ignore_resource_deletion"}},
251
- },
252
- };
253
- Json bootstrap = Json::Object{
246
+ Json::FromArray({
247
+ Json::FromObject({
248
+ {"type", Json::FromString("google_default")},
249
+ }),
250
+ })},
251
+ {"server_features",
252
+ Json::FromArray({Json::FromString("ignore_resource_deletion")})},
253
+ }),
254
+ });
255
+ Json bootstrap = Json::FromObject({
254
256
  {"xds_servers", xds_server},
255
257
  {"authorities",
256
- Json::Object{
257
- {kC2PAuthority,
258
- Json::Object{
259
- {"xds_servers", std::move(xds_server)},
260
- }},
261
- }},
262
- {"node", std::move(node)},
263
- };
258
+ Json::FromObject({
259
+ {kC2PAuthority, Json::FromObject({
260
+ {"xds_servers", std::move(xds_server)},
261
+ })},
262
+ })},
263
+ {"node", Json::FromObject(std::move(node))},
264
+ });
264
265
  // Inject bootstrap JSON as fallback config.
265
266
  internal::SetXdsFallbackBootstrapConfig(JsonDump(bootstrap).c_str());
266
267
  // Now start xDS resolver.