grpc 1.55.3 → 1.56.0.pre3

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

Potentially problematic release.


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

Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -23,12 +23,15 @@
23
23
 
24
24
  #include <string>
25
25
 
26
+ #include "absl/strings/string_view.h"
27
+
26
28
  #include <grpc/grpc_security.h>
27
29
 
28
30
  #include "src/core/lib/gprpp/ref_counted.h"
29
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
- #include "src/core/lib/iomgr/error.h"
32
+ #include "src/core/lib/gprpp/validation_errors.h"
31
33
  #include "src/core/lib/json/json.h"
34
+ #include "src/core/lib/json/json_args.h"
32
35
 
33
36
  namespace grpc_core {
34
37
 
@@ -43,7 +46,7 @@ class CertificateProviderFactory {
43
46
 
44
47
  // Name of the type of the CertificateProvider. Unique to each type of
45
48
  // config.
46
- virtual const char* name() const = 0;
49
+ virtual absl::string_view name() const = 0;
47
50
 
48
51
  virtual std::string ToString() const = 0;
49
52
  };
@@ -51,10 +54,11 @@ class CertificateProviderFactory {
51
54
  virtual ~CertificateProviderFactory() = default;
52
55
 
53
56
  // Name of the plugin.
54
- virtual const char* name() const = 0;
57
+ virtual absl::string_view name() const = 0;
55
58
 
56
59
  virtual RefCountedPtr<Config> CreateCertificateProviderConfig(
57
- const Json& config_json, grpc_error_handle* error) = 0;
60
+ const Json& config_json, const JsonArgs& args,
61
+ ValidationErrors* errors) = 0;
58
62
 
59
63
  // Create a CertificateProvider instance from config.
60
64
  virtual RefCountedPtr<grpc_tls_certificate_provider>
@@ -20,11 +20,8 @@
20
20
 
21
21
  #include "src/core/lib/security/certificate_provider/certificate_provider_registry.h"
22
22
 
23
- #include <string.h>
24
-
25
- #include <algorithm>
23
+ #include <string>
26
24
  #include <utility>
27
- #include <vector>
28
25
 
29
26
  #include <grpc/support/log.h>
30
27
 
@@ -32,29 +29,22 @@ namespace grpc_core {
32
29
 
33
30
  void CertificateProviderRegistry::Builder::RegisterCertificateProviderFactory(
34
31
  std::unique_ptr<CertificateProviderFactory> factory) {
32
+ absl::string_view name = factory->name();
35
33
  gpr_log(GPR_DEBUG, "registering certificate provider factory for \"%s\"",
36
- factory->name());
37
- for (size_t i = 0; i < factories_.size(); ++i) {
38
- GPR_ASSERT(strcmp(factories_[i]->name(), factory->name()) != 0);
39
- }
40
- factories_.push_back(std::move(factory));
34
+ std::string(name).c_str());
35
+ GPR_ASSERT(factories_.emplace(name, std::move(factory)).second);
41
36
  }
42
37
 
43
38
  CertificateProviderRegistry CertificateProviderRegistry::Builder::Build() {
44
- CertificateProviderRegistry r;
45
- r.factories_ = std::move(factories_);
46
- return r;
39
+ return CertificateProviderRegistry(std::move(factories_));
47
40
  }
48
41
 
49
42
  CertificateProviderFactory*
50
43
  CertificateProviderRegistry::LookupCertificateProviderFactory(
51
44
  absl::string_view name) const {
52
- for (size_t i = 0; i < factories_.size(); ++i) {
53
- if (name == factories_[i]->name()) {
54
- return factories_[i].get();
55
- }
56
- }
57
- return nullptr;
45
+ auto it = factories_.find(name);
46
+ if (it == factories_.end()) return nullptr;
47
+ return it->second.get();
58
48
  }
59
49
 
60
50
  } // namespace grpc_core
@@ -21,8 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <map>
24
25
  #include <memory>
25
- #include <vector>
26
+ #include <utility>
26
27
 
27
28
  #include "absl/strings/string_view.h"
28
29
 
@@ -32,20 +33,24 @@ namespace grpc_core {
32
33
 
33
34
  // Global registry for all the certificate provider plugins.
34
35
  class CertificateProviderRegistry {
36
+ private:
37
+ using FactoryMap =
38
+ std::map<absl::string_view, std::unique_ptr<CertificateProviderFactory>>;
39
+
35
40
  public:
36
41
  class Builder {
37
42
  public:
38
- // Register a provider with the registry. Can only be called after calling
39
- // InitRegistry(). The key of the factory is extracted from factory
40
- // parameter with method CertificateProviderFactory::name. If the same key
41
- // is registered twice, an exception is raised.
43
+ // Register a provider with the registry. The key of the factory is
44
+ // extracted from factory parameter with method
45
+ // CertificateProviderFactory::name. The registry with a given name
46
+ // cannot be registered twice.
42
47
  void RegisterCertificateProviderFactory(
43
48
  std::unique_ptr<CertificateProviderFactory> factory);
44
49
 
45
50
  CertificateProviderRegistry Build();
46
51
 
47
52
  private:
48
- std::vector<std::unique_ptr<CertificateProviderFactory>> factories_;
53
+ FactoryMap factories_;
49
54
  };
50
55
 
51
56
  CertificateProviderRegistry(const CertificateProviderRegistry&) = delete;
@@ -60,9 +65,10 @@ class CertificateProviderRegistry {
60
65
  absl::string_view name) const;
61
66
 
62
67
  private:
63
- CertificateProviderRegistry() = default;
68
+ explicit CertificateProviderRegistry(FactoryMap factories)
69
+ : factories_(std::move(factories)) {}
64
70
 
65
- std::vector<std::unique_ptr<CertificateProviderFactory>> factories_;
71
+ FactoryMap factories_;
66
72
  };
67
73
 
68
74
  } // namespace grpc_core
@@ -34,6 +34,7 @@
34
34
  #include <grpc/grpc.h>
35
35
  #include <grpc/grpc_security.h>
36
36
  #include <grpc/support/alloc.h>
37
+ #include <grpc/support/json.h>
37
38
  #include <grpc/support/log.h>
38
39
  #include <grpc/support/string_util.h>
39
40
 
@@ -487,19 +488,25 @@ void AwsExternalAccountCredentials::BuildSubjectToken() {
487
488
  }
488
489
  // Construct subject token
489
490
  Json::Array headers;
490
- headers.push_back(Json(
491
- {{"key", "Authorization"}, {"value", signed_headers["Authorization"]}}));
492
- headers.push_back(Json({{"key", "host"}, {"value", signed_headers["host"]}}));
491
+ headers.push_back(Json::FromObject(
492
+ {{"key", Json::FromString("Authorization")},
493
+ {"value", Json::FromString(signed_headers["Authorization"])}}));
493
494
  headers.push_back(
494
- Json({{"key", "x-amz-date"}, {"value", signed_headers["x-amz-date"]}}));
495
- headers.push_back(Json({{"key", "x-amz-security-token"},
496
- {"value", signed_headers["x-amz-security-token"]}}));
497
- headers.push_back(
498
- Json({{"key", "x-goog-cloud-target-resource"}, {"value", audience_}}));
499
- Json::Object object{{"url", Json(cred_verification_url_)},
500
- {"method", Json("POST")},
501
- {"headers", Json(headers)}};
502
- Json subject_token_json(object);
495
+ Json::FromObject({{"key", Json::FromString("host")},
496
+ {"value", Json::FromString(signed_headers["host"])}}));
497
+ headers.push_back(Json::FromObject(
498
+ {{"key", Json::FromString("x-amz-date")},
499
+ {"value", Json::FromString(signed_headers["x-amz-date"])}}));
500
+ headers.push_back(Json::FromObject(
501
+ {{"key", Json::FromString("x-amz-security-token")},
502
+ {"value", Json::FromString(signed_headers["x-amz-security-token"])}}));
503
+ headers.push_back(Json::FromObject(
504
+ {{"key", Json::FromString("x-goog-cloud-target-resource")},
505
+ {"value", Json::FromString(audience_)}}));
506
+ Json subject_token_json =
507
+ Json::FromObject({{"url", Json::FromString(cred_verification_url_)},
508
+ {"method", Json::FromString("POST")},
509
+ {"headers", Json::FromArray(headers)}});
503
510
  std::string subject_token = UrlEncode(JsonDump(subject_token_json));
504
511
  FinishRetrieveSubjectToken(subject_token, absl::OkStatus());
505
512
  }
@@ -40,6 +40,7 @@
40
40
  #include <grpc/grpc.h>
41
41
  #include <grpc/grpc_security.h>
42
42
  #include <grpc/support/alloc.h>
43
+ #include <grpc/support/json.h>
43
44
  #include <grpc/support/log.h>
44
45
  #include <grpc/support/string_util.h>
45
46
 
@@ -328,9 +329,10 @@ void ExternalAccountCredentials::ExchangeToken(
328
329
  Json::Object addtional_options_json_object;
329
330
  if (options_.client_id.empty() && options_.client_secret.empty()) {
330
331
  addtional_options_json_object["userProject"] =
331
- options_.workforce_pool_user_project;
332
+ Json::FromString(options_.workforce_pool_user_project);
332
333
  }
333
- Json addtional_options_json(std::move(addtional_options_json_object));
334
+ Json addtional_options_json =
335
+ Json::FromObject(std::move(addtional_options_json_object));
334
336
  body_parts.push_back(absl::StrFormat(
335
337
  "options=%s", UrlEncode(JsonDump(addtional_options_json)).c_str()));
336
338
  std::string body = absl::StrJoin(body_parts, "&");
@@ -25,6 +25,7 @@
25
25
  #include "absl/strings/string_view.h"
26
26
 
27
27
  #include <grpc/slice.h>
28
+ #include <grpc/support/json.h>
28
29
 
29
30
  #include "src/core/lib/iomgr/load_file.h"
30
31
  #include "src/core/lib/json/json.h"
@@ -33,6 +33,7 @@
33
33
  #include <grpc/grpc.h>
34
34
  #include <grpc/grpc_security.h>
35
35
  #include <grpc/support/alloc.h>
36
+ #include <grpc/support/json.h>
36
37
  #include <grpc/support/log.h>
37
38
  #include <grpc/support/string_util.h>
38
39
 
@@ -34,6 +34,7 @@
34
34
  #include <grpc/grpc_security_constants.h>
35
35
  #include <grpc/slice.h>
36
36
  #include <grpc/support/alloc.h>
37
+ #include <grpc/support/json.h>
37
38
  #include <grpc/support/log.h>
38
39
  #include <grpc/support/sync.h>
39
40
 
@@ -36,6 +36,7 @@
36
36
 
37
37
  #include <grpc/grpc_security.h>
38
38
  #include <grpc/support/alloc.h>
39
+ #include <grpc/support/json.h>
39
40
  #include <grpc/support/log.h>
40
41
  #include <grpc/support/time.h>
41
42
 
@@ -165,12 +166,12 @@ void grpc_auth_json_key_destruct(grpc_auth_json_key* json_key) {
165
166
  // --- jwt encoding and signature. ---
166
167
 
167
168
  static char* encoded_jwt_header(const char* key_id, const char* algorithm) {
168
- Json json = Json::Object{
169
- {"alg", algorithm},
170
- {"typ", GRPC_JWT_TYPE},
171
- {"kid", key_id},
172
- };
173
- std::string json_str = JsonDump(json);
169
+ Json json = Json::FromObject({
170
+ {"alg", Json::FromString(algorithm)},
171
+ {"typ", Json::FromString(GRPC_JWT_TYPE)},
172
+ {"kid", Json::FromString(key_id)},
173
+ });
174
+ std::string json_str = grpc_core::JsonDump(json);
174
175
  return grpc_base64_encode(json_str.c_str(), json_str.size(), 1, 0);
175
176
  }
176
177
 
@@ -185,20 +186,20 @@ static char* encoded_jwt_claim(const grpc_auth_json_key* json_key,
185
186
  }
186
187
 
187
188
  Json::Object object = {
188
- {"iss", json_key->client_email},
189
- {"aud", audience},
190
- {"iat", now.tv_sec},
191
- {"exp", expiration.tv_sec},
189
+ {"iss", Json::FromString(json_key->client_email)},
190
+ {"aud", Json::FromString(audience)},
191
+ {"iat", Json::FromNumber(now.tv_sec)},
192
+ {"exp", Json::FromNumber(expiration.tv_sec)},
192
193
  };
193
194
  if (scope != nullptr) {
194
- object["scope"] = scope;
195
+ object["scope"] = Json::FromString(scope);
195
196
  } else {
196
197
  // Unscoped JWTs need a sub field.
197
- object["sub"] = json_key->client_email;
198
+ object["sub"] = Json::FromString(json_key->client_email);
198
199
  }
199
200
 
200
- Json json(object);
201
- std::string json_str = JsonDump(json);
201
+ std::string json_str =
202
+ grpc_core::JsonDump(Json::FromObject(std::move(object)));
202
203
  return grpc_base64_encode(json_str.c_str(), json_str.size(), 1, 0);
203
204
  }
204
205
 
@@ -30,6 +30,7 @@
30
30
  #include "absl/strings/str_cat.h"
31
31
 
32
32
  #include <grpc/support/alloc.h>
33
+ #include <grpc/support/json.h>
33
34
  #include <grpc/support/log.h>
34
35
  #include <grpc/support/string_util.h>
35
36
  #include <grpc/support/sync.h>
@@ -145,9 +146,10 @@ static char* redact_private_key(const char* json_key) {
145
146
  return gpr_strdup("<Json failed to parse.>");
146
147
  }
147
148
  Json::Object object = json->object();
148
- object["private_key"] = "<redacted>";
149
+ object["private_key"] = Json::FromString("<redacted>");
149
150
  return gpr_strdup(
150
- grpc_core::JsonDump(Json(std::move(object)), /*indent=*/2).c_str());
151
+ grpc_core::JsonDump(Json::FromObject(std::move(object)), /*indent=*/2)
152
+ .c_str());
151
153
  }
152
154
 
153
155
  grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(
@@ -45,6 +45,7 @@
45
45
  #include <grpc/grpc.h>
46
46
  #include <grpc/slice.h>
47
47
  #include <grpc/support/alloc.h>
48
+ #include <grpc/support/json.h>
48
49
  #include <grpc/support/log.h>
49
50
  #include <grpc/support/string_util.h>
50
51
  #include <grpc/support/time.h>
@@ -39,6 +39,7 @@
39
39
  #include <grpc/grpc_security.h>
40
40
  #include <grpc/slice.h>
41
41
  #include <grpc/support/alloc.h>
42
+ #include <grpc/support/json.h>
42
43
  #include <grpc/support/log.h>
43
44
  #include <grpc/support/string_util.h>
44
45
  #include <grpc/support/time.h>
@@ -130,11 +130,7 @@ class grpc_alts_channel_security_connector final
130
130
  }
131
131
 
132
132
  grpc_core::ArenaPromise<absl::Status> CheckCallHost(
133
- absl::string_view host, grpc_auth_context*) override {
134
- if (host.empty() || host != target_name_) {
135
- return grpc_core::Immediate(absl::UnauthenticatedError(
136
- "ALTS call host does not match target name"));
137
- }
133
+ absl::string_view, grpc_auth_context*) override {
138
134
  return grpc_core::ImmediateOkStatus();
139
135
  }
140
136
 
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include "absl/strings/str_cat.h"
28
28
 
29
+ #include <grpc/support/json.h>
29
30
  #include <grpc/support/string_util.h>
30
31
 
31
32
  #include "src/core/lib/iomgr/error.h"
@@ -21,14 +21,14 @@
21
21
 
22
22
  #include <stddef.h>
23
23
 
24
- #include <map>
25
24
  #include <memory>
26
25
  #include <utility>
27
26
 
28
- #include "absl/strings/string_view.h"
29
-
27
+ #include "src/core/lib/channel/context.h"
28
+ #include "src/core/lib/gprpp/chunked_vector.h"
30
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
30
  #include "src/core/lib/gprpp/unique_type_name.h"
31
+ #include "src/core/lib/resource_quota/arena.h"
32
32
  #include "src/core/lib/service_config/service_config.h"
33
33
  #include "src/core/lib/service_config/service_config_parser.h"
34
34
 
@@ -38,43 +38,72 @@ namespace grpc_core {
38
38
  /// A pointer to this object is stored in the call_context
39
39
  /// GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA element, so that filters can
40
40
  /// easily access method and global parameters for the call.
41
+ ///
42
+ /// Must be accessed when holding the call combiner (legacy filter) or from
43
+ /// inside the activity (promise-based filter).
41
44
  class ServiceConfigCallData {
42
45
  public:
43
- using CallAttributes = std::map<UniqueTypeName, absl::string_view>;
46
+ class CallAttributeInterface {
47
+ public:
48
+ virtual ~CallAttributeInterface() = default;
49
+ virtual UniqueTypeName type() const = 0;
50
+ };
51
+
52
+ ServiceConfigCallData(Arena* arena, grpc_call_context_element* call_context)
53
+ : call_attributes_(arena) {
54
+ call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = this;
55
+ call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].destroy = Destroy;
56
+ }
44
57
 
45
- ServiceConfigCallData() : method_configs_(nullptr) {}
58
+ virtual ~ServiceConfigCallData() = default;
46
59
 
47
- ServiceConfigCallData(
60
+ void SetServiceConfig(
48
61
  RefCountedPtr<ServiceConfig> service_config,
49
- const ServiceConfigParser::ParsedConfigVector* method_configs,
50
- CallAttributes call_attributes)
51
- : service_config_(std::move(service_config)),
52
- method_configs_(method_configs),
53
- call_attributes_(std::move(call_attributes)) {}
62
+ const ServiceConfigParser::ParsedConfigVector* method_configs) {
63
+ service_config_ = std::move(service_config);
64
+ method_configs_ = method_configs;
65
+ }
54
66
 
55
67
  ServiceConfig* service_config() { return service_config_.get(); }
56
68
 
57
69
  ServiceConfigParser::ParsedConfig* GetMethodParsedConfig(size_t index) const {
58
- return method_configs_ != nullptr ? (*method_configs_)[index].get()
59
- : nullptr;
70
+ if (method_configs_ == nullptr) return nullptr;
71
+ return (*method_configs_)[index].get();
60
72
  }
61
73
 
62
74
  ServiceConfigParser::ParsedConfig* GetGlobalParsedConfig(size_t index) const {
75
+ if (service_config_ == nullptr) return nullptr;
63
76
  return service_config_->GetGlobalParsedConfig(index);
64
77
  }
65
78
 
66
- const CallAttributes& call_attributes() const { return call_attributes_; }
79
+ void SetCallAttribute(CallAttributeInterface* value) {
80
+ // Overwrite existing entry if we already have one for this type.
81
+ for (CallAttributeInterface*& attribute : call_attributes_) {
82
+ if (value->type() == attribute->type()) {
83
+ attribute = value;
84
+ return;
85
+ }
86
+ }
87
+ // Otherwise, add a new entry.
88
+ call_attributes_.EmplaceBack(value);
89
+ }
67
90
 
68
- // Must be called when holding the call combiner (legacy filter) or from
69
- // inside the activity (promise-based filter).
70
- void SetCallAttribute(UniqueTypeName name, absl::string_view value) {
71
- call_attributes_[name] = value;
91
+ CallAttributeInterface* GetCallAttribute(UniqueTypeName type) const {
92
+ for (CallAttributeInterface* attribute : call_attributes_) {
93
+ if (attribute->type() == type) return attribute;
94
+ }
95
+ return nullptr;
72
96
  }
73
97
 
74
98
  private:
99
+ static void Destroy(void* ptr) {
100
+ auto* self = static_cast<ServiceConfigCallData*>(ptr);
101
+ self->~ServiceConfigCallData();
102
+ }
103
+
75
104
  RefCountedPtr<ServiceConfig> service_config_;
76
- const ServiceConfigParser::ParsedConfigVector* method_configs_;
77
- CallAttributes call_attributes_;
105
+ const ServiceConfigParser::ParsedConfigVector* method_configs_ = nullptr;
106
+ ChunkedVector<CallAttributeInterface*, 4> call_attributes_;
78
107
  };
79
108
 
80
109
  } // namespace grpc_core
@@ -121,7 +121,8 @@ RefCountedPtr<ServiceConfig> ServiceConfigImpl::Create(
121
121
  service_config->parsed_method_config_vectors_storage_.reserve(
122
122
  method_configs->size());
123
123
  for (size_t i = 0; i < method_configs->size(); ++i) {
124
- const Json::Object& method_config_json = (*method_configs)[i];
124
+ const Json method_config_json =
125
+ Json::FromObject(std::move((*method_configs)[i]));
125
126
  ValidationErrors::ScopedField field(
126
127
  errors, absl::StrCat(".methodConfig[", i, "]"));
127
128
  // Have each parser read this method config.
@@ -195,7 +195,7 @@ class Call : public CppImplOf<Call, grpc_call> {
195
195
 
196
196
  ParentCall* GetOrCreateParentCall();
197
197
  ParentCall* parent_call();
198
- Channel* channel() {
198
+ Channel* channel() const {
199
199
  GPR_DEBUG_ASSERT(channel_ != nullptr);
200
200
  return channel_.get();
201
201
  }
@@ -445,6 +445,8 @@ void Call::PrepareOutgoingInitialMetadata(const grpc_op& op,
445
445
  }
446
446
  // Ignore any te metadata key value pairs specified.
447
447
  md.Remove(TeMetadata());
448
+ // Should never come from applications
449
+ md.Remove(GrpcLbClientStatsMetadata());
448
450
  }
449
451
 
450
452
  void Call::ProcessIncomingInitialMetadata(grpc_metadata_batch& md) {
@@ -1047,8 +1049,8 @@ void FilterStackCall::CancelWithError(grpc_error_handle error) {
1047
1049
 
1048
1050
  void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
1049
1051
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
1050
- gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR");
1051
- gpr_log(GPR_DEBUG, "%s", StatusToString(error).c_str());
1052
+ gpr_log(GPR_DEBUG, "set_final_status %s %s", is_client() ? "CLI" : "SVR",
1053
+ StatusToString(error).c_str());
1052
1054
  }
1053
1055
  if (is_client()) {
1054
1056
  std::string status_details;
@@ -1295,8 +1297,9 @@ void FilterStackCall::BatchControl::PostCompletion() {
1295
1297
  FilterStackCall* call = call_;
1296
1298
  grpc_error_handle error = batch_error_.get();
1297
1299
  if (grpc_call_trace.enabled()) {
1298
- gpr_log(GPR_DEBUG, "tag:%p batch_error=%s", completion_data_.notify_tag.tag,
1299
- error.ToString().c_str());
1300
+ gpr_log(GPR_DEBUG, "tag:%p batch_error=%s op:%s",
1301
+ completion_data_.notify_tag.tag, error.ToString().c_str(),
1302
+ grpc_transport_stream_op_batch_string(&op_, false).c_str());
1300
1303
  }
1301
1304
 
1302
1305
  if (op_.send_initial_metadata) {
@@ -1314,16 +1317,16 @@ void FilterStackCall::BatchControl::PostCompletion() {
1314
1317
  if (op_.send_trailing_metadata) {
1315
1318
  call->send_trailing_metadata_.Clear();
1316
1319
  }
1320
+ if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
1321
+ grpc_byte_buffer_destroy(*call->receiving_buffer_);
1322
+ *call->receiving_buffer_ = nullptr;
1323
+ }
1317
1324
  if (op_.recv_trailing_metadata) {
1318
1325
  // propagate cancellation to any interested children
1319
1326
  gpr_atm_rel_store(&call->received_final_op_atm_, 1);
1320
1327
  call->PropagateCancellationToChildren();
1321
1328
  error = absl::OkStatus();
1322
1329
  }
1323
- if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
1324
- grpc_byte_buffer_destroy(*call->receiving_buffer_);
1325
- *call->receiving_buffer_ = nullptr;
1326
- }
1327
1330
  batch_error_.set(absl::OkStatus());
1328
1331
 
1329
1332
  if (completion_data_.notify_tag.is_closure) {
@@ -2010,6 +2013,10 @@ class PromiseBasedCall : public Call,
2010
2013
  return failed_before_recv_message_.load(std::memory_order_relaxed);
2011
2014
  }
2012
2015
 
2016
+ grpc_event_engine::experimental::EventEngine* event_engine() const final {
2017
+ return channel()->event_engine();
2018
+ }
2019
+
2013
2020
  using Call::arena;
2014
2021
 
2015
2022
  protected:
@@ -2183,7 +2190,7 @@ class PromiseBasedCall : public Call,
2183
2190
  void StartRecvMessage(const grpc_op& op, const Completion& completion,
2184
2191
  FirstPromise first,
2185
2192
  PipeReceiver<MessageHandle>* receiver,
2186
- Party::BulkSpawner& spawner);
2193
+ bool cancel_on_error, Party::BulkSpawner& spawner);
2187
2194
  void StartSendMessage(const grpc_op& op, const Completion& completion,
2188
2195
  PipeSender<MessageHandle>* sender,
2189
2196
  Party::BulkSpawner& spawner);
@@ -2538,7 +2545,8 @@ template <typename FirstPromiseFactory>
2538
2545
  void PromiseBasedCall::StartRecvMessage(
2539
2546
  const grpc_op& op, const Completion& completion,
2540
2547
  FirstPromiseFactory first_promise_factory,
2541
- PipeReceiver<MessageHandle>* receiver, Party::BulkSpawner& spawner) {
2548
+ PipeReceiver<MessageHandle>* receiver, bool cancel_on_error,
2549
+ Party::BulkSpawner& spawner) {
2542
2550
  if (grpc_call_trace.enabled()) {
2543
2551
  gpr_log(GPR_INFO, "%s[call] Start RecvMessage: %s", DebugTag().c_str(),
2544
2552
  CompletionString(completion).c_str());
@@ -2549,7 +2557,7 @@ void PromiseBasedCall::StartRecvMessage(
2549
2557
  [first_promise_factory = std::move(first_promise_factory), receiver]() {
2550
2558
  return Seq(first_promise_factory(), receiver->Next());
2551
2559
  },
2552
- [this,
2560
+ [this, cancel_on_error,
2553
2561
  completion = AddOpToCompletion(completion, PendingOp::kReceiveMessage)](
2554
2562
  NextResult<MessageHandle> result) mutable {
2555
2563
  if (result.has_value()) {
@@ -2580,6 +2588,7 @@ void PromiseBasedCall::StartRecvMessage(
2580
2588
  }
2581
2589
  failed_before_recv_message_.store(true);
2582
2590
  FailCompletion(completion);
2591
+ if (cancel_on_error) CancelWithError(absl::CancelledError());
2583
2592
  *recv_message_ = nullptr;
2584
2593
  } else {
2585
2594
  if (grpc_call_trace.enabled()) {
@@ -2873,7 +2882,7 @@ void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
2873
2882
  [this]() {
2874
2883
  return server_initial_metadata_.receiver.AwaitClosed();
2875
2884
  },
2876
- &server_to_client_messages_.receiver, spawner);
2885
+ &server_to_client_messages_.receiver, false, spawner);
2877
2886
  break;
2878
2887
  case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2879
2888
  spawner.Spawn(
@@ -3218,14 +3227,6 @@ void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
3218
3227
  DebugTag().c_str(), recv_close_op_cancel_state_.ToString().c_str(),
3219
3228
  result->DebugString().c_str());
3220
3229
  }
3221
- if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
3222
- result->get(GrpcCallWasCancelled()).value_or(true))) {
3223
- FinishOpOnCompletion(&recv_close_completion_,
3224
- PendingOp::kReceiveCloseOnServer);
3225
- }
3226
- if (server_initial_metadata_ != nullptr) {
3227
- server_initial_metadata_->Close();
3228
- }
3229
3230
  const auto status =
3230
3231
  result->get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN);
3231
3232
  channelz::ServerNode* channelz_node = server_->channelz_node();
@@ -3236,6 +3237,14 @@ void ServerPromiseBasedCall::Finish(ServerMetadataHandle result) {
3236
3237
  channelz_node->RecordCallFailed();
3237
3238
  }
3238
3239
  }
3240
+ if (recv_close_op_cancel_state_.CompleteCallWithCancelledSetTo(
3241
+ result->get(GrpcCallWasCancelled()).value_or(true))) {
3242
+ FinishOpOnCompletion(&recv_close_completion_,
3243
+ PendingOp::kReceiveCloseOnServer);
3244
+ }
3245
+ if (server_initial_metadata_ != nullptr) {
3246
+ server_initial_metadata_->Close();
3247
+ }
3239
3248
  absl::string_view message_string;
3240
3249
  if (Slice* message = result->get_pointer(GrpcMessageMetadata())) {
3241
3250
  message_string = message->as_string_view();
@@ -3328,7 +3337,7 @@ void ServerPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
3328
3337
  }
3329
3338
  StartRecvMessage(
3330
3339
  op, completion, []() { return []() { return Empty{}; }; },
3331
- client_to_server_messages_, spawner);
3340
+ client_to_server_messages_, true, spawner);
3332
3341
  break;
3333
3342
  case GRPC_OP_SEND_STATUS_FROM_SERVER: {
3334
3343
  auto metadata = arena()->MakePooled<ServerMetadata>(arena());
@@ -3521,6 +3530,9 @@ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
3521
3530
  grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
3522
3531
  GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
3523
3532
  GPR_ASSERT(reserved == nullptr);
3533
+ if (call == nullptr) {
3534
+ return GRPC_CALL_ERROR;
3535
+ }
3524
3536
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
3525
3537
  grpc_core::ExecCtx exec_ctx;
3526
3538
  grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
@@ -3536,6 +3548,9 @@ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
3536
3548
  "c=%p, status=%d, description=%s, reserved=%p)",
3537
3549
  4, (c, (int)status, description, reserved));
3538
3550
  GPR_ASSERT(reserved == nullptr);
3551
+ if (c == nullptr) {
3552
+ return GRPC_CALL_ERROR;
3553
+ }
3539
3554
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
3540
3555
  grpc_core::ExecCtx exec_ctx;
3541
3556
  grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
@@ -3576,7 +3591,7 @@ grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
3576
3591
  "reserved=%p)",
3577
3592
  5, (call, ops, (unsigned long)nops, tag, reserved));
3578
3593
 
3579
- if (reserved != nullptr) {
3594
+ if (reserved != nullptr || call == nullptr) {
3580
3595
  return GRPC_CALL_ERROR;
3581
3596
  } else {
3582
3597
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;