grpc 1.53.1 → 1.54.0

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

Potentially problematic release.


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

Files changed (689) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +78 -66
  3. data/include/grpc/event_engine/event_engine.h +30 -14
  4. data/include/grpc/grpc_security.h +4 -0
  5. data/include/grpc/support/port_platform.h +4 -4
  6. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +11 -0
  7. data/src/core/ext/filters/client_channel/backend_metric.cc +6 -0
  8. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -11
  9. data/src/core/ext/filters/client_channel/backup_poller.h +0 -3
  10. data/src/core/ext/filters/client_channel/client_channel.cc +848 -813
  11. data/src/core/ext/filters/client_channel/client_channel.h +131 -173
  12. data/src/core/ext/filters/client_channel/client_channel_internal.h +114 -0
  13. data/src/core/ext/filters/client_channel/config_selector.h +4 -3
  14. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +6 -1
  15. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +17 -18
  16. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +134 -151
  17. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2 -16
  18. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +14 -10
  19. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +68 -30
  20. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -3
  21. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +8 -1
  22. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +2 -5
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +2 -2
  24. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +30 -38
  25. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +4 -4
  26. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +20 -26
  27. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +31 -179
  28. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -2
  29. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +1 -2
  30. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +4 -2
  31. data/src/core/ext/filters/client_channel/retry_filter.cc +95 -102
  32. data/src/core/ext/filters/client_channel/subchannel.cc +2 -4
  33. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +26 -27
  34. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +8 -5
  35. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -3
  36. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -12
  37. data/src/core/ext/filters/http/message_compress/compression_filter.cc +27 -11
  38. data/src/core/ext/filters/message_size/message_size_filter.cc +141 -224
  39. data/src/core/ext/filters/message_size/message_size_filter.h +48 -3
  40. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +7 -6
  41. data/src/core/ext/gcp/metadata_query.cc +142 -0
  42. data/src/core/ext/gcp/metadata_query.h +82 -0
  43. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +70 -55
  44. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +8 -12
  45. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -5
  46. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +116 -58
  47. data/src/core/ext/transport/chttp2/transport/flow_control.cc +5 -2
  48. data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -1
  49. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  50. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +222 -118
  51. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +113 -295
  52. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -2
  53. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +0 -2
  54. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +277 -451
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +1 -3
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -14
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -9
  58. data/src/core/ext/transport/chttp2/transport/internal.h +16 -3
  59. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  60. data/src/core/ext/transport/chttp2/transport/writing.cc +10 -5
  61. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -14
  62. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +5 -3
  63. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +22 -0
  64. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +5 -3
  65. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +22 -0
  66. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +23 -5
  67. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +94 -3
  68. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -2
  69. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +120 -0
  70. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +6 -3
  71. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +22 -0
  72. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +24 -6
  73. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +111 -12
  74. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +9 -7
  75. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +27 -9
  76. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +0 -1
  77. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +11 -7
  78. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +56 -12
  79. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.c +5 -3
  80. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +24 -0
  81. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +5 -3
  82. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +24 -0
  83. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +13 -2
  84. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +49 -0
  85. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +24 -9
  86. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +66 -12
  87. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  88. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +139 -136
  89. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +31 -15
  90. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +12 -9
  92. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +15 -0
  93. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +54 -45
  94. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +135 -119
  95. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  96. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +100 -97
  97. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +15 -18
  98. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +272 -264
  99. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +117 -117
  100. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +5 -5
  101. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +5 -5
  102. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +5 -5
  103. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +12 -9
  104. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -0
  105. data/src/core/ext/xds/xds_channel_stack_modifier.cc +1 -2
  106. data/src/core/ext/xds/xds_client_stats.cc +29 -15
  107. data/src/core/ext/xds/xds_client_stats.h +24 -20
  108. data/src/core/ext/xds/xds_endpoint.cc +5 -2
  109. data/src/core/ext/xds/xds_endpoint.h +9 -1
  110. data/src/core/ext/xds/xds_http_rbac_filter.cc +1 -1
  111. data/src/core/ext/xds/xds_lb_policy_registry.cc +13 -0
  112. data/src/core/ext/xds/xds_transport_grpc.cc +1 -1
  113. data/src/core/lib/channel/call_finalization.h +1 -1
  114. data/src/core/lib/channel/call_tracer.cc +51 -0
  115. data/src/core/lib/channel/call_tracer.h +101 -38
  116. data/src/core/lib/channel/connected_channel.cc +483 -1050
  117. data/src/core/lib/channel/context.h +8 -1
  118. data/src/core/lib/channel/promise_based_filter.cc +106 -42
  119. data/src/core/lib/channel/promise_based_filter.h +27 -13
  120. data/src/core/lib/channel/server_call_tracer_filter.cc +110 -0
  121. data/src/core/lib/config/config_vars.cc +151 -0
  122. data/src/core/lib/config/config_vars.h +127 -0
  123. data/src/core/lib/config/config_vars_non_generated.cc +51 -0
  124. data/src/core/lib/config/load_config.cc +66 -0
  125. data/src/core/lib/config/load_config.h +49 -0
  126. data/src/core/lib/debug/trace.cc +5 -6
  127. data/src/core/lib/debug/trace.h +0 -5
  128. data/src/core/lib/event_engine/event_engine.cc +37 -2
  129. data/src/core/lib/event_engine/handle_containers.h +7 -22
  130. data/src/core/lib/event_engine/memory_allocator_factory.h +47 -0
  131. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +0 -4
  132. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +3 -9
  133. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +48 -15
  134. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +8 -8
  135. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +6 -5
  136. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +6 -3
  137. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +27 -18
  138. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +0 -3
  139. data/src/core/lib/event_engine/resolved_address.cc +2 -1
  140. data/src/core/lib/event_engine/windows/win_socket.cc +0 -1
  141. data/src/core/lib/event_engine/windows/windows_endpoint.cc +129 -82
  142. data/src/core/lib/event_engine/windows/windows_endpoint.h +21 -5
  143. data/src/core/lib/event_engine/windows/windows_engine.cc +39 -18
  144. data/src/core/lib/event_engine/windows/windows_engine.h +2 -1
  145. data/src/core/lib/event_engine/windows/windows_listener.cc +370 -0
  146. data/src/core/lib/event_engine/windows/windows_listener.h +155 -0
  147. data/src/core/lib/experiments/config.cc +3 -10
  148. data/src/core/lib/experiments/experiments.cc +7 -0
  149. data/src/core/lib/experiments/experiments.h +9 -1
  150. data/src/core/lib/gpr/log.cc +15 -28
  151. data/src/core/lib/gprpp/fork.cc +8 -14
  152. data/src/core/lib/gprpp/orphanable.h +4 -3
  153. data/src/core/lib/gprpp/per_cpu.h +9 -3
  154. data/src/core/lib/gprpp/{thd_posix.cc → posix/thd.cc} +49 -37
  155. data/src/core/lib/gprpp/ref_counted.h +33 -34
  156. data/src/core/lib/gprpp/thd.h +16 -0
  157. data/src/core/lib/gprpp/time.cc +1 -0
  158. data/src/core/lib/gprpp/time.h +4 -4
  159. data/src/core/lib/gprpp/{thd_windows.cc → windows/thd.cc} +2 -2
  160. data/src/core/lib/iomgr/call_combiner.h +2 -2
  161. data/src/core/lib/iomgr/endpoint_cfstream.cc +4 -2
  162. data/src/core/lib/iomgr/ev_posix.cc +13 -53
  163. data/src/core/lib/iomgr/ev_posix.h +0 -3
  164. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +103 -76
  165. data/src/core/lib/iomgr/iomgr.cc +4 -8
  166. data/src/core/lib/iomgr/iomgr_windows.cc +8 -2
  167. data/src/core/lib/iomgr/pollset_set_windows.cc +9 -9
  168. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  169. data/src/core/lib/iomgr/socket_utils_common_posix.cc +16 -3
  170. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -2
  171. data/src/core/lib/iomgr/tcp_posix.cc +0 -1
  172. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -16
  173. data/src/core/lib/iomgr/tcp_server_windows.cc +176 -9
  174. data/src/core/lib/iomgr/tcp_windows.cc +12 -8
  175. data/src/core/lib/load_balancing/lb_policy.cc +9 -13
  176. data/src/core/lib/load_balancing/lb_policy.h +4 -2
  177. data/src/core/lib/promise/activity.cc +22 -6
  178. data/src/core/lib/promise/activity.h +61 -24
  179. data/src/core/lib/promise/cancel_callback.h +77 -0
  180. data/src/core/lib/promise/detail/basic_seq.h +1 -1
  181. data/src/core/lib/promise/detail/promise_factory.h +4 -0
  182. data/src/core/lib/promise/for_each.h +176 -0
  183. data/src/core/lib/promise/if.h +9 -0
  184. data/src/core/lib/promise/interceptor_list.h +23 -2
  185. data/src/core/lib/promise/latch.h +89 -3
  186. data/src/core/lib/promise/loop.h +13 -9
  187. data/src/core/lib/promise/map.h +7 -0
  188. data/src/core/lib/promise/party.cc +286 -0
  189. data/src/core/lib/promise/party.h +499 -0
  190. data/src/core/lib/promise/pipe.h +197 -57
  191. data/src/core/lib/promise/poll.h +48 -0
  192. data/src/core/lib/promise/promise.h +2 -2
  193. data/src/core/lib/resource_quota/arena.cc +19 -3
  194. data/src/core/lib/resource_quota/arena.h +119 -5
  195. data/src/core/lib/resource_quota/memory_quota.cc +1 -1
  196. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +12 -35
  197. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +1 -0
  198. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +0 -59
  199. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -5
  200. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  201. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +13 -0
  202. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +2 -0
  203. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +5 -9
  204. data/src/core/lib/security/security_connector/ssl_utils.cc +11 -25
  205. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +12 -0
  206. data/src/core/lib/security/transport/secure_endpoint.cc +4 -2
  207. data/src/core/lib/security/transport/server_auth_filter.cc +20 -2
  208. data/src/core/lib/slice/slice.cc +1 -1
  209. data/src/core/lib/surface/builtins.cc +2 -0
  210. data/src/core/lib/surface/call.cc +926 -1024
  211. data/src/core/lib/surface/call.h +10 -0
  212. data/src/core/lib/surface/lame_client.cc +1 -0
  213. data/src/core/lib/surface/validate_metadata.cc +42 -43
  214. data/src/core/lib/surface/validate_metadata.h +0 -9
  215. data/src/core/lib/surface/version.cc +2 -2
  216. data/src/core/lib/transport/batch_builder.cc +179 -0
  217. data/src/core/lib/transport/batch_builder.h +468 -0
  218. data/src/core/lib/transport/bdp_estimator.cc +7 -7
  219. data/src/core/lib/transport/bdp_estimator.h +10 -6
  220. data/src/core/lib/transport/custom_metadata.h +30 -0
  221. data/src/core/lib/transport/metadata_batch.cc +5 -2
  222. data/src/core/lib/transport/metadata_batch.h +17 -113
  223. data/src/core/lib/transport/parsed_metadata.h +6 -16
  224. data/src/core/lib/transport/timeout_encoding.cc +6 -1
  225. data/src/core/lib/transport/transport.cc +30 -2
  226. data/src/core/lib/transport/transport.h +70 -14
  227. data/src/core/lib/transport/transport_impl.h +7 -0
  228. data/src/core/lib/transport/transport_op_string.cc +52 -42
  229. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -2
  230. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +1 -0
  231. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +21 -4
  232. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +5 -0
  233. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  234. data/src/core/tsi/ssl_transport_security.cc +4 -2
  235. data/src/ruby/lib/grpc/version.rb +1 -1
  236. data/third_party/abseil-cpp/absl/base/config.h +1 -1
  237. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +34 -0
  238. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +200 -0
  239. data/third_party/abseil-cpp/absl/flags/config.h +68 -0
  240. data/third_party/abseil-cpp/absl/flags/declare.h +73 -0
  241. data/third_party/abseil-cpp/absl/flags/flag.cc +38 -0
  242. data/third_party/abseil-cpp/absl/flags/flag.h +310 -0
  243. data/{src/core/lib/gprpp/global_config_custom.h → third_party/abseil-cpp/absl/flags/internal/commandlineflag.cc} +11 -14
  244. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +68 -0
  245. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +615 -0
  246. data/third_party/abseil-cpp/absl/flags/internal/flag.h +800 -0
  247. data/third_party/abseil-cpp/absl/flags/internal/flag_msvc.inc +116 -0
  248. data/third_party/abseil-cpp/absl/flags/internal/path_util.h +62 -0
  249. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +65 -0
  250. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +61 -0
  251. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +60 -0
  252. data/third_party/abseil-cpp/absl/flags/internal/program_name.h +50 -0
  253. data/third_party/abseil-cpp/absl/flags/internal/registry.h +97 -0
  254. data/third_party/abseil-cpp/absl/flags/internal/sequence_lock.h +187 -0
  255. data/third_party/abseil-cpp/absl/flags/marshalling.cc +241 -0
  256. data/third_party/abseil-cpp/absl/flags/marshalling.h +356 -0
  257. data/third_party/abseil-cpp/absl/flags/reflection.cc +354 -0
  258. data/third_party/abseil-cpp/absl/flags/reflection.h +90 -0
  259. data/third_party/abseil-cpp/absl/flags/usage_config.cc +165 -0
  260. data/third_party/abseil-cpp/absl/flags/usage_config.h +135 -0
  261. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +12 -8
  262. data/third_party/boringssl-with-bazel/err_data.c +728 -712
  263. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +177 -177
  264. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +28 -55
  265. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +21 -23
  266. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_dup.c +20 -23
  267. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +66 -185
  268. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_i2d_fp.c +18 -21
  269. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +356 -311
  270. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +174 -194
  271. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +146 -210
  272. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +6 -9
  273. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +346 -526
  274. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +110 -131
  275. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +130 -116
  276. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +93 -60
  277. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +93 -181
  278. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +242 -305
  279. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +41 -18
  280. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +30 -33
  281. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +36 -33
  282. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_string.c +29 -26
  283. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +133 -88
  284. data/third_party/boringssl-with-bazel/src/crypto/asn1/posix_time.c +230 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +791 -791
  286. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +526 -526
  287. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +114 -135
  288. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +201 -207
  289. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +21 -26
  290. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +55 -68
  291. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +2 -4
  292. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +11 -7
  293. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +4 -4
  294. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +15 -9
  295. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +4 -4
  296. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +17 -10
  297. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -3
  298. data/third_party/boringssl-with-bazel/src/crypto/bio/printf.c +0 -13
  299. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -6
  300. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +2 -0
  301. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +9 -5
  302. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/convert.c +10 -23
  303. data/third_party/boringssl-with-bazel/src/crypto/buf/buf.c +2 -6
  304. data/third_party/boringssl-with-bazel/src/crypto/bytestring/asn1_compat.c +2 -1
  305. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +29 -28
  306. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +161 -201
  307. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +254 -39
  308. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +0 -2
  310. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/derive_key.c +4 -4
  311. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesctrhmac.c +9 -8
  312. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_aesgcmsiv.c +37 -75
  313. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +8 -10
  314. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/cipher → cipher_extra}/e_des.c +100 -78
  315. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_null.c +1 -0
  316. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc2.c +1 -0
  317. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_rc4.c +2 -0
  318. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +6 -12
  319. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -11
  320. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +6 -10
  321. data/third_party/boringssl-with-bazel/src/crypto/conf/conf_def.h +0 -1
  322. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +12 -0
  323. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_apple.c +74 -0
  324. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_freebsd.c +62 -0
  325. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-fuchsia.c → cpu_aarch64_fuchsia.c} +8 -7
  326. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-linux.c → cpu_aarch64_linux.c} +6 -4
  327. data/third_party/boringssl-with-bazel/src/crypto/{cpu-aarch64-win.c → cpu_aarch64_win.c} +4 -4
  328. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm.c → cpu_arm.c} +1 -1
  329. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_freebsd.c +55 -0
  330. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.c → cpu_arm_linux.c} +11 -90
  331. data/third_party/boringssl-with-bazel/src/crypto/{cpu-arm-linux.h → cpu_arm_linux.h} +0 -38
  332. data/third_party/boringssl-with-bazel/src/crypto/{cpu-intel.c → cpu_intel.c} +1 -2
  333. data/third_party/boringssl-with-bazel/src/crypto/crypto.c +25 -20
  334. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +16 -27
  335. data/third_party/boringssl-with-bazel/src/crypto/curve25519/spake25519.c +17 -32
  336. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/des.c +232 -232
  337. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/des → des}/internal.h +1 -1
  338. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/dh_asn1.c +1 -0
  339. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +232 -29
  340. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +0 -3
  341. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +39 -16
  342. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +37 -7
  343. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  344. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +11 -36
  345. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +214 -99
  346. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +21 -5
  347. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/ecdsa_asn1.c +2 -4
  348. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +83 -60
  349. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +46 -12
  350. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +3 -3
  351. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.c +25 -23
  352. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +43 -9
  353. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +75 -44
  354. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec.c +19 -25
  355. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.c +96 -45
  356. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519.c +7 -8
  357. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.c +26 -23
  358. data/third_party/boringssl-with-bazel/src/crypto/evp/p_hkdf.c +233 -0
  359. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +5 -5
  360. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.c +42 -25
  361. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519.c +4 -5
  362. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.c +35 -47
  363. data/third_party/boringssl-with-bazel/src/crypto/evp/print.c +135 -244
  364. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +2 -4
  365. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.c +15 -10
  366. data/third_party/boringssl-with-bazel/src/crypto/ex_data.c +29 -15
  367. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.c +0 -2
  368. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes_nohw.c +13 -14
  369. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +3 -13
  370. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.c +13 -7
  371. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.c +9 -7
  372. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +35 -27
  373. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +16 -26
  374. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bytes.c +88 -60
  375. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/cmp.c +4 -3
  376. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/ctx.c +0 -2
  377. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +1 -1
  378. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div_extra.c +1 -1
  379. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.c +99 -113
  380. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.c +0 -1
  381. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +5 -3
  382. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/generic.c +112 -168
  383. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +86 -31
  384. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.c +11 -6
  385. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery_inv.c +4 -5
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.c +4 -5
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +13 -0
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/random.c +13 -5
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.c +19 -108
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +19 -15
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.c +15 -16
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +22 -21
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/aead.c +3 -0
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +79 -19
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +102 -99
  396. data/third_party/boringssl-with-bazel/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +52 -46
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +39 -0
  398. data/third_party/boringssl-with-bazel/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +55 -11
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.c +2 -3
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +21 -6
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +56 -0
  402. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +5 -3
  403. data/third_party/boringssl-with-bazel/src/crypto/{evp → fipsmodule/digestsign}/digestsign.c +51 -15
  404. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +25 -25
  405. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +91 -17
  406. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +5 -5
  407. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +34 -12
  408. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +54 -23
  409. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +44 -60
  410. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64-table.h → p256-nistz-table.h} +1 -1
  411. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.c → p256-nistz.c} +60 -53
  412. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-x86_64.h → p256-nistz.h} +5 -13
  413. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +48 -36
  414. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/scalar.c +2 -8
  415. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +2 -7
  416. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +2 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +0 -1
  418. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +8 -0
  419. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +42 -14
  420. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +6 -0
  421. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/hmac.c +52 -24
  422. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +9 -15
  423. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +1 -4
  424. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +2 -4
  425. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +71 -43
  426. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +14 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -4
  428. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/ctrdrbg.c +31 -13
  429. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.c +16 -8
  430. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/fork_detect.h +3 -2
  431. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/getrandom_fillin.h +2 -2
  432. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +9 -38
  433. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +73 -59
  434. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -45
  435. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/blinding.c +0 -1
  436. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +22 -0
  437. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +63 -52
  438. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +107 -62
  439. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +58 -31
  440. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +41 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +523 -422
  442. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  443. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/service_indicator.c +334 -0
  444. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +3 -12
  445. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +2 -0
  446. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +12 -8
  447. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +14 -12
  448. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +19 -6
  449. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +32 -14
  450. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +65 -29
  451. data/third_party/boringssl-with-bazel/src/crypto/internal.h +373 -18
  452. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +61 -0
  453. data/third_party/boringssl-with-bazel/src/crypto/kyber/keccak.c +205 -0
  454. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +13 -1
  455. data/third_party/boringssl-with-bazel/src/crypto/mem.c +220 -13
  456. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +19 -7
  457. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +13 -1
  458. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +81 -90
  459. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +150 -245
  460. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +629 -613
  461. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_oth.c +17 -17
  462. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +142 -149
  463. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +99 -131
  464. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_x509.c +0 -1
  465. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_xaux.c +0 -1
  466. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +0 -1
  467. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +0 -3
  468. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +36 -66
  469. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +31 -38
  470. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +2 -1
  471. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +18 -31
  472. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -0
  473. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +8 -1
  474. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +129 -5
  475. data/third_party/boringssl-with-bazel/src/crypto/refcount_c11.c +0 -2
  476. data/third_party/boringssl-with-bazel/src/crypto/refcount_lock.c +3 -4
  477. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +8 -11
  478. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +61 -27
  479. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +10 -13
  480. data/third_party/boringssl-with-bazel/src/crypto/thread_win.c +10 -13
  481. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +66 -34
  482. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +190 -77
  483. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +81 -284
  484. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +109 -42
  485. data/third_party/boringssl-with-bazel/src/crypto/x509/a_digest.c +22 -24
  486. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +54 -55
  487. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +32 -34
  488. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +32 -16
  489. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +465 -704
  490. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +284 -331
  491. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +183 -178
  492. data/third_party/boringssl-with-bazel/src/crypto/x509/i2d_pr.c +11 -15
  493. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +67 -50
  494. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +153 -150
  495. data/third_party/boringssl-with-bazel/src/crypto/x509/policy.c +786 -0
  496. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +95 -102
  497. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +72 -57
  498. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +12 -10
  499. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +227 -252
  500. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +52 -47
  501. data/third_party/boringssl-with-bazel/src/crypto/x509/x509.c +3 -4
  502. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +230 -224
  503. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +161 -327
  504. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_d2.c +37 -33
  505. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_def.c +14 -31
  506. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +55 -85
  507. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +534 -618
  508. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +129 -122
  509. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +116 -182
  510. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +132 -132
  511. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +181 -202
  512. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +64 -79
  513. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +175 -160
  514. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +1865 -2050
  515. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +433 -462
  516. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +156 -163
  517. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +267 -263
  518. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +40 -15
  519. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +59 -63
  520. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +63 -67
  521. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +114 -144
  522. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +25 -26
  523. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +326 -415
  524. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +8 -7
  525. data/third_party/boringssl-with-bazel/src/crypto/x509/x_info.c +30 -28
  526. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +354 -370
  527. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +37 -32
  528. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +116 -119
  529. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +36 -26
  530. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +3 -4
  531. data/third_party/boringssl-with-bazel/src/crypto/x509/x_spki.c +10 -13
  532. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +3 -4
  533. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +419 -261
  534. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +113 -105
  535. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +11 -15
  536. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +78 -170
  537. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +126 -131
  538. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akeya.c +3 -4
  539. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +465 -469
  540. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bcons.c +56 -54
  541. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +46 -49
  542. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +309 -346
  543. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +341 -365
  544. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +429 -393
  545. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +29 -24
  546. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_extku.c +65 -59
  547. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +125 -121
  548. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +43 -42
  549. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +122 -125
  550. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_int.c +50 -20
  551. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +247 -253
  552. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +386 -389
  553. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ocsp.c +45 -32
  554. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcons.c +57 -54
  555. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pmaps.c +63 -67
  556. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +143 -136
  557. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +664 -707
  558. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +83 -75
  559. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1062 -1146
  560. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +8 -4
  561. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +28 -48
  562. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +211 -187
  563. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +26 -78
  564. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +19 -14
  565. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +21 -2
  566. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +49 -17
  567. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +99 -29
  568. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +49 -60
  569. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +2 -15
  570. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +16 -200
  571. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +34 -0
  572. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +82 -0
  573. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +32 -30
  574. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +7 -0
  575. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  576. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +48 -5
  577. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +37 -8
  578. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -0
  579. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +33 -5
  580. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +22 -30
  581. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  582. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +7 -0
  583. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +41 -16
  584. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +91 -0
  585. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +74 -8
  586. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +13 -0
  587. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -0
  588. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +11 -15
  589. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +8 -0
  590. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +12 -1
  591. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +7 -4
  592. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +96 -0
  593. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +13 -21
  594. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +139 -75
  595. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -6
  596. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +384 -286
  597. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +5 -6
  598. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +41 -0
  599. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +18 -7
  600. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +49 -23
  601. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +0 -11
  602. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1592 -1074
  603. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +202 -205
  604. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -2
  605. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +6 -13
  606. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +17 -18
  607. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +4 -5
  608. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +25 -33
  609. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +34 -20
  610. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +65 -34
  611. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +198 -54
  612. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +5 -5
  613. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +32 -28
  614. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +76 -44
  615. data/third_party/boringssl-with-bazel/src/ssl/internal.h +130 -98
  616. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +27 -11
  617. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +2 -2
  618. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +91 -75
  619. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +8 -10
  620. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +39 -65
  621. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -0
  622. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +5 -9
  623. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +30 -33
  624. data/third_party/boringssl-with-bazel/src/ssl/ssl_file.cc +77 -100
  625. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +120 -107
  626. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +164 -30
  627. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +150 -60
  628. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +22 -11
  629. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +22 -6
  630. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +15 -13
  631. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +5 -43
  632. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +7 -4
  633. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +2 -2
  634. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +22 -34
  635. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +2 -2
  636. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +16 -98
  637. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +1241 -657
  638. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +751 -398
  639. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +3551 -1938
  640. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +1272 -487
  641. metadata +103 -70
  642. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +0 -39
  643. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +0 -30
  644. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +0 -29
  645. data/src/core/lib/gprpp/global_config.h +0 -93
  646. data/src/core/lib/gprpp/global_config_env.cc +0 -140
  647. data/src/core/lib/gprpp/global_config_env.h +0 -133
  648. data/src/core/lib/gprpp/global_config_generic.h +0 -40
  649. data/src/core/lib/promise/intra_activity_waiter.h +0 -55
  650. data/src/core/lib/security/security_connector/ssl_utils_config.cc +0 -32
  651. data/src/core/lib/security/security_connector/ssl_utils_config.h +0 -29
  652. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +0 -195
  653. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +0 -83
  654. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +0 -236
  655. data/third_party/boringssl-with-bazel/src/crypto/asn1/charmap.h +0 -15
  656. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +0 -206
  657. data/third_party/boringssl-with-bazel/src/crypto/cpu-ppc64le.c +0 -38
  658. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1-altivec.c +0 -361
  659. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +0 -287
  660. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +0 -132
  661. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +0 -155
  662. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +0 -131
  663. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +0 -189
  664. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +0 -843
  665. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +0 -289
  666. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pcia.c +0 -57
  667. /data/src/core/lib/gpr/{log_android.cc → android/log.cc} +0 -0
  668. /data/src/core/lib/gpr/{cpu_iphone.cc → iphone/cpu.cc} +0 -0
  669. /data/src/core/lib/gpr/{cpu_linux.cc → linux/cpu.cc} +0 -0
  670. /data/src/core/lib/gpr/{log_linux.cc → linux/log.cc} +0 -0
  671. /data/src/core/lib/gpr/{tmpfile_msys.cc → msys/tmpfile.cc} +0 -0
  672. /data/src/core/lib/gpr/{cpu_posix.cc → posix/cpu.cc} +0 -0
  673. /data/src/core/lib/gpr/{log_posix.cc → posix/log.cc} +0 -0
  674. /data/src/core/lib/gpr/{string_posix.cc → posix/string.cc} +0 -0
  675. /data/src/core/lib/gpr/{sync_posix.cc → posix/sync.cc} +0 -0
  676. /data/src/core/lib/gpr/{time_posix.cc → posix/time.cc} +0 -0
  677. /data/src/core/lib/gpr/{tmpfile_posix.cc → posix/tmpfile.cc} +0 -0
  678. /data/src/core/lib/gpr/{cpu_windows.cc → windows/cpu.cc} +0 -0
  679. /data/src/core/lib/gpr/{log_windows.cc → windows/log.cc} +0 -0
  680. /data/src/core/lib/gpr/{string_windows.cc → windows/string.cc} +0 -0
  681. /data/src/core/lib/gpr/{string_util_windows.cc → windows/string_util.cc} +0 -0
  682. /data/src/core/lib/gpr/{sync_windows.cc → windows/sync.cc} +0 -0
  683. /data/src/core/lib/gpr/{time_windows.cc → windows/time.cc} +0 -0
  684. /data/src/core/lib/gpr/{tmpfile_windows.cc → windows/tmpfile.cc} +0 -0
  685. /data/src/core/lib/gprpp/{env_linux.cc → linux/env.cc} +0 -0
  686. /data/src/core/lib/gprpp/{env_posix.cc → posix/env.cc} +0 -0
  687. /data/src/core/lib/gprpp/{stat_posix.cc → posix/stat.cc} +0 -0
  688. /data/src/core/lib/gprpp/{env_windows.cc → windows/env.cc} +0 -0
  689. /data/src/core/lib/gprpp/{stat_windows.cc → windows/stat.cc} +0 -0
@@ -36,7 +36,14 @@ typedef enum {
36
36
  /// Value is a \a census_context.
37
37
  GRPC_CONTEXT_TRACING,
38
38
 
39
- /// Value is a CallTracer object.
39
+ /// Value is a CallTracerAnnotationInterface. (ClientCallTracer object on the
40
+ /// client-side call, or ServerCallTracer on the server-side.)
41
+ GRPC_CONTEXT_CALL_TRACER_ANNOTATION_INTERFACE,
42
+
43
+ /// Value is a CallTracerInterface (ServerCallTracer on the server-side,
44
+ /// CallAttemptTracer on a subchannel call.)
45
+ /// TODO(yashykt): Maybe come up with a better name. This will go away in the
46
+ /// future anyway, so not super important.
40
47
  GRPC_CONTEXT_CALL_TRACER,
41
48
 
42
49
  /// Reserved for traffic_class_context.
@@ -16,6 +16,8 @@
16
16
 
17
17
  #include "src/core/lib/channel/promise_based_filter.h"
18
18
 
19
+ #include <inttypes.h>
20
+
19
21
  #include <algorithm>
20
22
  #include <initializer_list>
21
23
  #include <memory>
@@ -52,7 +54,7 @@ class FakeActivity final : public Activity {
52
54
  explicit FakeActivity(Activity* wake_activity)
53
55
  : wake_activity_(wake_activity) {}
54
56
  void Orphan() override {}
55
- void ForceImmediateRepoll() override {}
57
+ void ForceImmediateRepoll(WakeupMask) override {}
56
58
  Waker MakeOwningWaker() override { return wake_activity_->MakeOwningWaker(); }
57
59
  Waker MakeNonOwningWaker() override {
58
60
  return wake_activity_->MakeNonOwningWaker();
@@ -91,6 +93,9 @@ BaseCallData::BaseCallData(
91
93
  arena_(args->arena),
92
94
  call_combiner_(args->call_combiner),
93
95
  deadline_(args->deadline),
96
+ call_context_(flags & kFilterExaminesCallContext
97
+ ? arena_->New<CallContext>(nullptr)
98
+ : nullptr),
94
99
  context_(args->context),
95
100
  server_initial_metadata_pipe_(
96
101
  flags & kFilterExaminesServerInitialMetadata
@@ -133,20 +138,22 @@ Waker BaseCallData::MakeNonOwningWaker() { return MakeOwningWaker(); }
133
138
 
134
139
  Waker BaseCallData::MakeOwningWaker() {
135
140
  GRPC_CALL_STACK_REF(call_stack_, "waker");
136
- return Waker(this, nullptr);
141
+ return Waker(this, 0);
137
142
  }
138
143
 
139
- void BaseCallData::Wakeup(void*) {
144
+ void BaseCallData::Wakeup(WakeupMask) {
140
145
  auto wakeup = [](void* p, grpc_error_handle) {
141
146
  auto* self = static_cast<BaseCallData*>(p);
142
147
  self->OnWakeup();
143
- self->Drop(nullptr);
148
+ self->Drop(0);
144
149
  };
145
150
  auto* closure = GRPC_CLOSURE_CREATE(wakeup, this, nullptr);
146
151
  GRPC_CALL_COMBINER_START(call_combiner_, closure, absl::OkStatus(), "wakeup");
147
152
  }
148
153
 
149
- void BaseCallData::Drop(void*) { GRPC_CALL_STACK_UNREF(call_stack_, "waker"); }
154
+ void BaseCallData::Drop(WakeupMask) {
155
+ GRPC_CALL_STACK_UNREF(call_stack_, "waker");
156
+ }
150
157
 
151
158
  std::string BaseCallData::LogTag() const {
152
159
  return absl::StrCat(
@@ -214,7 +221,7 @@ void BaseCallData::CapturedBatch::ResumeWith(Flusher* releaser) {
214
221
  // refcnt==0 ==> cancelled
215
222
  if (grpc_trace_channel.enabled()) {
216
223
  gpr_log(GPR_INFO, "%sRESUME BATCH REQUEST CANCELLED",
217
- Activity::current()->DebugTag().c_str());
224
+ releaser->call()->DebugTag().c_str());
218
225
  }
219
226
  return;
220
227
  }
@@ -238,6 +245,10 @@ void BaseCallData::CapturedBatch::CancelWith(grpc_error_handle error,
238
245
  auto* batch = std::exchange(batch_, nullptr);
239
246
  GPR_ASSERT(batch != nullptr);
240
247
  uintptr_t& refcnt = *RefCountField(batch);
248
+ gpr_log(GPR_DEBUG, "%sCancelWith: %p refs=%" PRIdPTR " err=%s [%s]",
249
+ releaser->call()->DebugTag().c_str(), batch, refcnt,
250
+ error.ToString().c_str(),
251
+ grpc_transport_stream_op_batch_string(batch, false).c_str());
241
252
  if (refcnt == 0) {
242
253
  // refcnt==0 ==> cancelled
243
254
  if (grpc_trace_channel.enabled()) {
@@ -274,16 +285,20 @@ BaseCallData::Flusher::~Flusher() {
274
285
  static_cast<BaseCallData*>(batch->handler_private.extra_arg);
275
286
  if (grpc_trace_channel.enabled()) {
276
287
  gpr_log(GPR_INFO, "FLUSHER:forward batch via closure: %s",
277
- grpc_transport_stream_op_batch_string(batch).c_str());
288
+ grpc_transport_stream_op_batch_string(batch, false).c_str());
278
289
  }
279
290
  grpc_call_next_op(call->elem(), batch);
280
291
  GRPC_CALL_STACK_UNREF(call->call_stack(), "flusher_batch");
281
292
  };
282
293
  for (size_t i = 1; i < release_.size(); i++) {
283
294
  auto* batch = release_[i];
295
+ if (call_->call_context_ != nullptr && call_->call_context_->traced()) {
296
+ batch->is_traced = true;
297
+ }
284
298
  if (grpc_trace_channel.enabled()) {
285
- gpr_log(GPR_INFO, "FLUSHER:queue batch to forward in closure: %s",
286
- grpc_transport_stream_op_batch_string(release_[i]).c_str());
299
+ gpr_log(
300
+ GPR_INFO, "FLUSHER:queue batch to forward in closure: %s",
301
+ grpc_transport_stream_op_batch_string(release_[i], false).c_str());
287
302
  }
288
303
  batch->handler_private.extra_arg = call_;
289
304
  GRPC_CLOSURE_INIT(&batch->handler_private.closure, call_next_op, batch,
@@ -295,7 +310,7 @@ BaseCallData::Flusher::~Flusher() {
295
310
  call_closures_.RunClosuresWithoutYielding(call_->call_combiner());
296
311
  if (grpc_trace_channel.enabled()) {
297
312
  gpr_log(GPR_INFO, "FLUSHER:forward batch: %s",
298
- grpc_transport_stream_op_batch_string(release_[0]).c_str());
313
+ grpc_transport_stream_op_batch_string(release_[0], false).c_str());
299
314
  }
300
315
  grpc_call_next_op(call_->elem(), release_[0]);
301
316
  GRPC_CALL_STACK_UNREF(call_->call_stack(), "flusher");
@@ -324,6 +339,8 @@ const char* BaseCallData::SendMessage::StateString(State state) {
324
339
  return "CANCELLED";
325
340
  case State::kCancelledButNotYetPolled:
326
341
  return "CANCELLED_BUT_NOT_YET_POLLED";
342
+ case State::kCancelledButNoStatus:
343
+ return "CANCELLED_BUT_NO_STATUS";
327
344
  }
328
345
  return "UNKNOWN";
329
346
  }
@@ -348,6 +365,7 @@ void BaseCallData::SendMessage::StartOp(CapturedBatch batch) {
348
365
  Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
349
366
  case State::kCancelled:
350
367
  case State::kCancelledButNotYetPolled:
368
+ case State::kCancelledButNoStatus:
351
369
  return;
352
370
  }
353
371
  batch_ = batch;
@@ -375,6 +393,7 @@ void BaseCallData::SendMessage::GotPipe(T* pipe_end) {
375
393
  case State::kForwardedBatch:
376
394
  case State::kBatchCompleted:
377
395
  case State::kPushedToPipe:
396
+ case State::kCancelledButNoStatus:
378
397
  Crash(absl::StrFormat("ILLEGAL STATE: %s", StateString(state_)));
379
398
  case State::kCancelled:
380
399
  case State::kCancelledButNotYetPolled:
@@ -390,6 +409,7 @@ bool BaseCallData::SendMessage::IsIdle() const {
390
409
  case State::kForwardedBatch:
391
410
  case State::kCancelled:
392
411
  case State::kCancelledButNotYetPolled:
412
+ case State::kCancelledButNoStatus:
393
413
  return true;
394
414
  case State::kGotBatchNoPipe:
395
415
  case State::kGotBatch:
@@ -418,6 +438,7 @@ void BaseCallData::SendMessage::OnComplete(absl::Status status) {
418
438
  break;
419
439
  case State::kCancelled:
420
440
  case State::kCancelledButNotYetPolled:
441
+ case State::kCancelledButNoStatus:
421
442
  flusher.AddClosure(intercepted_on_complete_, status,
422
443
  "forward after cancel");
423
444
  break;
@@ -442,10 +463,14 @@ void BaseCallData::SendMessage::Done(const ServerMetadata& metadata,
442
463
  case State::kCancelledButNotYetPolled:
443
464
  break;
444
465
  case State::kInitial:
466
+ state_ = State::kCancelled;
467
+ break;
445
468
  case State::kIdle:
446
469
  case State::kForwardedBatch:
447
470
  state_ = State::kCancelledButNotYetPolled;
471
+ if (base_->is_current()) base_->ForceImmediateRepoll();
448
472
  break;
473
+ case State::kCancelledButNoStatus:
449
474
  case State::kGotBatchNoPipe:
450
475
  case State::kGotBatch: {
451
476
  std::string temp;
@@ -464,6 +489,7 @@ void BaseCallData::SendMessage::Done(const ServerMetadata& metadata,
464
489
  push_.reset();
465
490
  next_.reset();
466
491
  state_ = State::kCancelledButNotYetPolled;
492
+ if (base_->is_current()) base_->ForceImmediateRepoll();
467
493
  break;
468
494
  }
469
495
  }
@@ -482,6 +508,7 @@ void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher,
482
508
  case State::kIdle:
483
509
  case State::kGotBatchNoPipe:
484
510
  case State::kCancelled:
511
+ case State::kCancelledButNoStatus:
485
512
  break;
486
513
  case State::kCancelledButNotYetPolled:
487
514
  interceptor()->Push()->Close();
@@ -523,13 +550,18 @@ void BaseCallData::SendMessage::WakeInsideCombiner(Flusher* flusher,
523
550
  "result.has_value=%s",
524
551
  base_->LogTag().c_str(), p->has_value() ? "true" : "false");
525
552
  }
526
- GPR_ASSERT(p->has_value());
527
- batch_->payload->send_message.send_message->Swap((**p)->payload());
528
- batch_->payload->send_message.flags = (**p)->flags();
529
- state_ = State::kForwardedBatch;
530
- batch_.ResumeWith(flusher);
531
- next_.reset();
532
- if ((*push_)().ready()) push_.reset();
553
+ if (p->has_value()) {
554
+ batch_->payload->send_message.send_message->Swap((**p)->payload());
555
+ batch_->payload->send_message.flags = (**p)->flags();
556
+ state_ = State::kForwardedBatch;
557
+ batch_.ResumeWith(flusher);
558
+ next_.reset();
559
+ if ((*push_)().ready()) push_.reset();
560
+ } else {
561
+ state_ = State::kCancelledButNoStatus;
562
+ next_.reset();
563
+ push_.reset();
564
+ }
533
565
  }
534
566
  } break;
535
567
  case State::kForwardedBatch:
@@ -1087,11 +1119,14 @@ class ClientCallData::PollContext {
1087
1119
  // Poll the promise once since we're waiting for it.
1088
1120
  Poll<ServerMetadataHandle> poll = self_->promise_();
1089
1121
  if (grpc_trace_channel.enabled()) {
1090
- gpr_log(GPR_INFO, "%s ClientCallData.PollContext.Run: poll=%s",
1122
+ gpr_log(GPR_INFO, "%s ClientCallData.PollContext.Run: poll=%s; %s",
1091
1123
  self_->LogTag().c_str(),
1092
- PollToString(poll, [](const ServerMetadataHandle& h) {
1093
- return h->DebugString();
1094
- }).c_str());
1124
+ PollToString(poll,
1125
+ [](const ServerMetadataHandle& h) {
1126
+ return h->DebugString();
1127
+ })
1128
+ .c_str(),
1129
+ self_->DebugString().c_str());
1095
1130
  }
1096
1131
  if (auto* r = poll.value_if_ready()) {
1097
1132
  auto md = std::move(*r);
@@ -1271,7 +1306,11 @@ ClientCallData::ClientCallData(grpc_call_element* elem,
1271
1306
  [args]() {
1272
1307
  return args->arena->New<ReceiveInterceptor>(args->arena);
1273
1308
  },
1274
- [args]() { return args->arena->New<SendInterceptor>(args->arena); }) {
1309
+ [args]() { return args->arena->New<SendInterceptor>(args->arena); }),
1310
+ initial_metadata_outstanding_token_(
1311
+ (flags & kFilterIsLast) != 0
1312
+ ? ClientInitialMetadataOutstandingToken::New(arena())
1313
+ : ClientInitialMetadataOutstandingToken::Empty()) {
1275
1314
  GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready_,
1276
1315
  RecvTrailingMetadataReadyCallback, this,
1277
1316
  grpc_schedule_on_exec_ctx);
@@ -1287,8 +1326,12 @@ ClientCallData::~ClientCallData() {
1287
1326
  }
1288
1327
  }
1289
1328
 
1329
+ std::string ClientCallData::DebugTag() const {
1330
+ return absl::StrFormat("PBF_CLIENT[%p]: [%s] ", this, elem()->filter->name);
1331
+ }
1332
+
1290
1333
  // Activity implementation.
1291
- void ClientCallData::ForceImmediateRepoll() {
1334
+ void ClientCallData::ForceImmediateRepoll(WakeupMask) {
1292
1335
  GPR_ASSERT(poll_ctx_ != nullptr);
1293
1336
  poll_ctx_->Repoll();
1294
1337
  }
@@ -1540,6 +1583,7 @@ void ClientCallData::StartPromise(Flusher* flusher) {
1540
1583
  promise_ = filter->MakeCallPromise(
1541
1584
  CallArgs{WrapMetadata(send_initial_metadata_batch_->payload
1542
1585
  ->send_initial_metadata.send_initial_metadata),
1586
+ std::move(initial_metadata_outstanding_token_),
1543
1587
  server_initial_metadata_pipe() == nullptr
1544
1588
  ? nullptr
1545
1589
  : &server_initial_metadata_pipe()->sender,
@@ -1647,8 +1691,7 @@ ArenaPromise<ServerMetadataHandle> ClientCallData::MakeNextPromise(
1647
1691
  GPR_ASSERT(poll_ctx_ != nullptr);
1648
1692
  GPR_ASSERT(send_initial_state_ == SendInitialState::kQueued);
1649
1693
  send_initial_metadata_batch_->payload->send_initial_metadata
1650
- .send_initial_metadata =
1651
- UnwrapMetadata(std::move(call_args.client_initial_metadata));
1694
+ .send_initial_metadata = call_args.client_initial_metadata.get();
1652
1695
  if (recv_initial_metadata_ != nullptr) {
1653
1696
  // Call args should contain a latch for receiving initial metadata.
1654
1697
  // It might be the one we passed in - in which case we know this filter
@@ -1860,8 +1903,15 @@ struct ServerCallData::SendInitialMetadata {
1860
1903
 
1861
1904
  class ServerCallData::PollContext {
1862
1905
  public:
1863
- explicit PollContext(ServerCallData* self, Flusher* flusher)
1864
- : self_(self), flusher_(flusher) {
1906
+ explicit PollContext(ServerCallData* self, Flusher* flusher,
1907
+ DebugLocation created = DebugLocation())
1908
+ : self_(self), flusher_(flusher), created_(created) {
1909
+ if (self_->poll_ctx_ != nullptr) {
1910
+ Crash(absl::StrCat(
1911
+ "PollContext: disallowed recursion. New: ", created_.file(), ":",
1912
+ created_.line(), "; Old: ", self_->poll_ctx_->created_.file(), ":",
1913
+ self_->poll_ctx_->created_.line()));
1914
+ }
1865
1915
  GPR_ASSERT(self_->poll_ctx_ == nullptr);
1866
1916
  self_->poll_ctx_ = this;
1867
1917
  scoped_activity_.Init(self_);
@@ -1907,6 +1957,7 @@ class ServerCallData::PollContext {
1907
1957
  Flusher* const flusher_;
1908
1958
  bool repoll_ = false;
1909
1959
  bool have_scoped_activity_;
1960
+ GPR_NO_UNIQUE_ADDRESS DebugLocation created_;
1910
1961
  };
1911
1962
 
1912
1963
  const char* ServerCallData::StateString(RecvInitialState state) {
@@ -1966,11 +2017,18 @@ ServerCallData::~ServerCallData() {
1966
2017
  gpr_log(GPR_INFO, "%s ~ServerCallData %s", LogTag().c_str(),
1967
2018
  DebugString().c_str());
1968
2019
  }
2020
+ if (send_initial_metadata_ != nullptr) {
2021
+ send_initial_metadata_->~SendInitialMetadata();
2022
+ }
1969
2023
  GPR_ASSERT(poll_ctx_ == nullptr);
1970
2024
  }
1971
2025
 
2026
+ std::string ServerCallData::DebugTag() const {
2027
+ return absl::StrFormat("PBF_SERVER[%p]: [%s] ", this, elem()->filter->name);
2028
+ }
2029
+
1972
2030
  // Activity implementation.
1973
- void ServerCallData::ForceImmediateRepoll() {
2031
+ void ServerCallData::ForceImmediateRepoll(WakeupMask) {
1974
2032
  GPR_ASSERT(poll_ctx_ != nullptr);
1975
2033
  poll_ctx_->Repoll();
1976
2034
  }
@@ -2076,7 +2134,10 @@ void ServerCallData::StartBatch(grpc_transport_stream_op_batch* b) {
2076
2134
  switch (send_trailing_state_) {
2077
2135
  case SendTrailingState::kInitial:
2078
2136
  send_trailing_metadata_batch_ = batch;
2079
- if (receive_message() != nullptr) {
2137
+ if (receive_message() != nullptr &&
2138
+ batch->payload->send_trailing_metadata.send_trailing_metadata
2139
+ ->get(GrpcStatusMetadata())
2140
+ .value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK) {
2080
2141
  receive_message()->Done(
2081
2142
  *batch->payload->send_trailing_metadata.send_trailing_metadata,
2082
2143
  &flusher);
@@ -2133,9 +2194,12 @@ void ServerCallData::Completed(grpc_error_handle error, Flusher* flusher) {
2133
2194
  case SendTrailingState::kForwarded:
2134
2195
  send_trailing_state_ = SendTrailingState::kCancelled;
2135
2196
  if (!error.ok()) {
2197
+ call_stack()->IncrementRefCount();
2136
2198
  auto* batch = grpc_make_transport_stream_op(
2137
- NewClosure([call_combiner = call_combiner()](absl::Status) {
2199
+ NewClosure([call_combiner = call_combiner(),
2200
+ call_stack = call_stack()](absl::Status) {
2138
2201
  GRPC_CALL_COMBINER_STOP(call_combiner, "done-cancel");
2202
+ call_stack->Unref();
2139
2203
  }));
2140
2204
  batch->cancel_stream = true;
2141
2205
  batch->payload->cancel_stream.cancel_error = error;
@@ -2187,7 +2251,7 @@ void ServerCallData::Completed(grpc_error_handle error, Flusher* flusher) {
2187
2251
  ArenaPromise<ServerMetadataHandle> ServerCallData::MakeNextPromise(
2188
2252
  CallArgs call_args) {
2189
2253
  GPR_ASSERT(recv_initial_state_ == RecvInitialState::kComplete);
2190
- GPR_ASSERT(UnwrapMetadata(std::move(call_args.client_initial_metadata)) ==
2254
+ GPR_ASSERT(std::move(call_args.client_initial_metadata).get() ==
2191
2255
  recv_initial_metadata_);
2192
2256
  forward_recv_initial_metadata_callback_ = true;
2193
2257
  if (send_initial_metadata_ != nullptr) {
@@ -2309,6 +2373,7 @@ void ServerCallData::RecvInitialMetadataReady(grpc_error_handle error) {
2309
2373
  FakeActivity(this).Run([this, filter] {
2310
2374
  promise_ = filter->MakeCallPromise(
2311
2375
  CallArgs{WrapMetadata(recv_initial_metadata_),
2376
+ ClientInitialMetadataOutstandingToken::Empty(),
2312
2377
  server_initial_metadata_pipe() == nullptr
2313
2378
  ? nullptr
2314
2379
  : &server_initial_metadata_pipe()->sender,
@@ -2409,9 +2474,14 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2409
2474
  (send_trailing_metadata_batch_->send_message &&
2410
2475
  send_message()->IsForwarded()))) {
2411
2476
  send_trailing_state_ = SendTrailingState::kQueued;
2412
- send_message()->Done(*send_trailing_metadata_batch_->payload
2413
- ->send_trailing_metadata.send_trailing_metadata,
2414
- flusher);
2477
+ if (send_trailing_metadata_batch_->payload->send_trailing_metadata
2478
+ .send_trailing_metadata->get(GrpcStatusMetadata())
2479
+ .value_or(GRPC_STATUS_UNKNOWN) != GRPC_STATUS_OK) {
2480
+ send_message()->Done(
2481
+ *send_trailing_metadata_batch_->payload->send_trailing_metadata
2482
+ .send_trailing_metadata,
2483
+ flusher);
2484
+ }
2415
2485
  }
2416
2486
  }
2417
2487
  if (receive_message() != nullptr) {
@@ -2462,8 +2532,7 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2462
2532
  }
2463
2533
  if (auto* r = poll.value_if_ready()) {
2464
2534
  promise_ = ArenaPromise<ServerMetadataHandle>();
2465
- auto* md = UnwrapMetadata(std::move(*r));
2466
- bool destroy_md = true;
2535
+ auto md = std::move(*r);
2467
2536
  if (send_message() != nullptr) {
2468
2537
  send_message()->Done(*md, flusher);
2469
2538
  }
@@ -2475,11 +2544,9 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2475
2544
  case SendTrailingState::kQueuedButHaventClosedSends:
2476
2545
  case SendTrailingState::kQueued: {
2477
2546
  if (send_trailing_metadata_batch_->payload->send_trailing_metadata
2478
- .send_trailing_metadata != md) {
2547
+ .send_trailing_metadata != md.get()) {
2479
2548
  *send_trailing_metadata_batch_->payload->send_trailing_metadata
2480
2549
  .send_trailing_metadata = std::move(*md);
2481
- } else {
2482
- destroy_md = false;
2483
2550
  }
2484
2551
  send_trailing_metadata_batch_.ResumeWith(flusher);
2485
2552
  send_trailing_state_ = SendTrailingState::kForwarded;
@@ -2497,9 +2564,6 @@ void ServerCallData::WakeInsideCombiner(Flusher* flusher) {
2497
2564
  // Nothing to do.
2498
2565
  break;
2499
2566
  }
2500
- if (destroy_md) {
2501
- md->~grpc_metadata_batch();
2502
- }
2503
2567
  }
2504
2568
  }
2505
2569
  if (std::exchange(forward_recv_initial_metadata_callback_, false)) {
@@ -62,6 +62,7 @@
62
62
  #include "src/core/lib/promise/poll.h"
63
63
  #include "src/core/lib/resource_quota/arena.h"
64
64
  #include "src/core/lib/slice/slice_buffer.h"
65
+ #include "src/core/lib/surface/call.h"
65
66
  #include "src/core/lib/transport/error_utils.h"
66
67
  #include "src/core/lib/transport/metadata_batch.h"
67
68
  #include "src/core/lib/transport/transport.h"
@@ -134,6 +135,7 @@ static constexpr uint8_t kFilterExaminesServerInitialMetadata = 1;
134
135
  static constexpr uint8_t kFilterIsLast = 2;
135
136
  static constexpr uint8_t kFilterExaminesOutboundMessages = 4;
136
137
  static constexpr uint8_t kFilterExaminesInboundMessages = 8;
138
+ static constexpr uint8_t kFilterExaminesCallContext = 16;
137
139
 
138
140
  namespace promise_filter_detail {
139
141
 
@@ -182,7 +184,7 @@ class BaseCallData : public Activity, private Wakeable {
182
184
  Waker MakeNonOwningWaker() final;
183
185
  Waker MakeOwningWaker() final;
184
186
 
185
- std::string ActivityDebugTag(void*) const override { return DebugTag(); }
187
+ std::string ActivityDebugTag(WakeupMask) const override { return DebugTag(); }
186
188
 
187
189
  void Finalize(const grpc_call_final_info* final_info) {
188
190
  finalization_.Run(final_info);
@@ -197,7 +199,8 @@ class BaseCallData : public Activity, private Wakeable {
197
199
  public promise_detail::Context<grpc_polling_entity>,
198
200
  public promise_detail::Context<CallFinalization>,
199
201
  public promise_detail::Context<
200
- grpc_event_engine::experimental::EventEngine> {
202
+ grpc_event_engine::experimental::EventEngine>,
203
+ public promise_detail::Context<CallContext> {
201
204
  public:
202
205
  explicit ScopedContext(BaseCallData* call_data)
203
206
  : promise_detail::Context<Arena>(call_data->arena_),
@@ -207,7 +210,8 @@ class BaseCallData : public Activity, private Wakeable {
207
210
  call_data->pollent_.load(std::memory_order_acquire)),
208
211
  promise_detail::Context<CallFinalization>(&call_data->finalization_),
209
212
  promise_detail::Context<grpc_event_engine::experimental::EventEngine>(
210
- call_data->event_engine_) {}
213
+ call_data->event_engine_),
214
+ promise_detail::Context<CallContext>(call_data->call_context_) {}
211
215
  };
212
216
 
213
217
  class Flusher {
@@ -218,7 +222,11 @@ class BaseCallData : public Activity, private Wakeable {
218
222
 
219
223
  void Resume(grpc_transport_stream_op_batch* batch) {
220
224
  GPR_ASSERT(!call_->is_last());
221
- release_.push_back(batch);
225
+ if (batch->HasOp()) {
226
+ release_.push_back(batch);
227
+ } else if (batch->on_complete != nullptr) {
228
+ Complete(batch);
229
+ }
222
230
  }
223
231
 
224
232
  void Cancel(grpc_transport_stream_op_batch* batch,
@@ -237,6 +245,8 @@ class BaseCallData : public Activity, private Wakeable {
237
245
  call_closures_.Add(closure, error, reason);
238
246
  }
239
247
 
248
+ BaseCallData* call() const { return call_; }
249
+
240
250
  private:
241
251
  absl::InlinedVector<grpc_transport_stream_op_batch*, 1> release_;
242
252
  CallCombinerClosureList call_closures_;
@@ -280,11 +290,6 @@ class BaseCallData : public Activity, private Wakeable {
280
290
  Arena::PooledDeleter(nullptr));
281
291
  }
282
292
 
283
- static grpc_metadata_batch* UnwrapMetadata(
284
- Arena::PoolPtr<grpc_metadata_batch> p) {
285
- return p.release();
286
- }
287
-
288
293
  class ReceiveInterceptor final : public Interceptor {
289
294
  public:
290
295
  explicit ReceiveInterceptor(Arena* arena) : pipe_{arena} {}
@@ -398,6 +403,8 @@ class BaseCallData : public Activity, private Wakeable {
398
403
  kCancelledButNotYetPolled,
399
404
  // We're done.
400
405
  kCancelled,
406
+ // We're done, but we haven't gotten a status yet
407
+ kCancelledButNoStatus,
401
408
  };
402
409
  static const char* StateString(State);
403
410
 
@@ -538,8 +545,8 @@ class BaseCallData : public Activity, private Wakeable {
538
545
 
539
546
  private:
540
547
  // Wakeable implementation.
541
- void Wakeup(void*) final;
542
- void Drop(void*) final;
548
+ void Wakeup(WakeupMask) final;
549
+ void Drop(WakeupMask) final;
543
550
 
544
551
  virtual void OnWakeup() = 0;
545
552
 
@@ -549,6 +556,7 @@ class BaseCallData : public Activity, private Wakeable {
549
556
  CallCombiner* const call_combiner_;
550
557
  const Timestamp deadline_;
551
558
  CallFinalization finalization_;
559
+ CallContext* call_context_ = nullptr;
552
560
  grpc_call_context_element* const context_;
553
561
  std::atomic<grpc_polling_entity*> pollent_{nullptr};
554
562
  Pipe<ServerMetadataHandle>* const server_initial_metadata_pipe_;
@@ -564,10 +572,12 @@ class ClientCallData : public BaseCallData {
564
572
  ~ClientCallData() override;
565
573
 
566
574
  // Activity implementation.
567
- void ForceImmediateRepoll() final;
575
+ void ForceImmediateRepoll(WakeupMask) final;
568
576
  // Handle one grpc_transport_stream_op_batch
569
577
  void StartBatch(grpc_transport_stream_op_batch* batch) override;
570
578
 
579
+ std::string DebugTag() const override;
580
+
571
581
  private:
572
582
  // At what stage is our handling of send initial metadata?
573
583
  enum class SendInitialState {
@@ -664,6 +674,8 @@ class ClientCallData : public BaseCallData {
664
674
  RecvTrailingState recv_trailing_state_ = RecvTrailingState::kInitial;
665
675
  // Polling related data. Non-null if we're actively polling
666
676
  PollContext* poll_ctx_ = nullptr;
677
+ // Initial metadata outstanding token
678
+ ClientInitialMetadataOutstandingToken initial_metadata_outstanding_token_;
667
679
  };
668
680
 
669
681
  class ServerCallData : public BaseCallData {
@@ -673,10 +685,12 @@ class ServerCallData : public BaseCallData {
673
685
  ~ServerCallData() override;
674
686
 
675
687
  // Activity implementation.
676
- void ForceImmediateRepoll() final;
688
+ void ForceImmediateRepoll(WakeupMask) final;
677
689
  // Handle one grpc_transport_stream_op_batch
678
690
  void StartBatch(grpc_transport_stream_op_batch* batch) override;
679
691
 
692
+ std::string DebugTag() const override;
693
+
680
694
  protected:
681
695
  absl::string_view ClientOrServerString() const override { return "SVR"; }
682
696
 
@@ -0,0 +1,110 @@
1
+ //
2
+ // Copyright 2023 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
16
+
17
+ #include <grpc/support/port_platform.h>
18
+
19
+ #include <functional>
20
+ #include <utility>
21
+
22
+ #include "absl/status/status.h"
23
+ #include "absl/status/statusor.h"
24
+
25
+ #include "src/core/lib/channel/call_finalization.h"
26
+ #include "src/core/lib/channel/call_tracer.h"
27
+ #include "src/core/lib/channel/channel_args.h"
28
+ #include "src/core/lib/channel/channel_fwd.h"
29
+ #include "src/core/lib/channel/channel_stack.h"
30
+ #include "src/core/lib/channel/channel_stack_builder.h"
31
+ #include "src/core/lib/channel/context.h"
32
+ #include "src/core/lib/channel/promise_based_filter.h"
33
+ #include "src/core/lib/config/core_configuration.h"
34
+ #include "src/core/lib/promise/arena_promise.h"
35
+ #include "src/core/lib/promise/cancel_callback.h"
36
+ #include "src/core/lib/promise/context.h"
37
+ #include "src/core/lib/promise/map.h"
38
+ #include "src/core/lib/promise/pipe.h"
39
+ #include "src/core/lib/promise/poll.h"
40
+ #include "src/core/lib/surface/channel_init.h"
41
+ #include "src/core/lib/surface/channel_stack_type.h"
42
+ #include "src/core/lib/transport/transport.h"
43
+
44
+ namespace grpc_core {
45
+
46
+ namespace {
47
+
48
+ // TODO(yashykt): This filter is not really needed. We should be able to move
49
+ // this to the connected filter.
50
+ class ServerCallTracerFilter : public ChannelFilter {
51
+ public:
52
+ static const grpc_channel_filter kFilter;
53
+
54
+ static absl::StatusOr<ServerCallTracerFilter> Create(
55
+ const ChannelArgs& /*args*/, ChannelFilter::Args /*filter_args*/);
56
+
57
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
58
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
59
+ };
60
+
61
+ const grpc_channel_filter ServerCallTracerFilter::kFilter =
62
+ MakePromiseBasedFilter<ServerCallTracerFilter, FilterEndpoint::kServer,
63
+ kFilterExaminesServerInitialMetadata>(
64
+ "server_call_tracer");
65
+
66
+ absl::StatusOr<ServerCallTracerFilter> ServerCallTracerFilter::Create(
67
+ const ChannelArgs& /*args*/, ChannelFilter::Args /*filter_args*/) {
68
+ return ServerCallTracerFilter();
69
+ }
70
+
71
+ ArenaPromise<ServerMetadataHandle> ServerCallTracerFilter::MakeCallPromise(
72
+ CallArgs call_args, NextPromiseFactory next_promise_factory) {
73
+ auto* call_context = GetContext<grpc_call_context_element>();
74
+ auto* call_tracer = static_cast<ServerCallTracer*>(
75
+ call_context[GRPC_CONTEXT_CALL_TRACER].value);
76
+ if (call_tracer == nullptr) {
77
+ return next_promise_factory(std::move(call_args));
78
+ }
79
+ call_tracer->RecordReceivedInitialMetadata(
80
+ call_args.client_initial_metadata.get());
81
+ call_args.server_initial_metadata->InterceptAndMap(
82
+ [call_tracer](ServerMetadataHandle metadata) {
83
+ call_tracer->RecordSendInitialMetadata(metadata.get());
84
+ return metadata;
85
+ });
86
+ GetContext<CallFinalization>()->Add(
87
+ [call_tracer](const grpc_call_final_info* final_info) {
88
+ call_tracer->RecordEnd(final_info);
89
+ });
90
+ return OnCancel(
91
+ Map(next_promise_factory(std::move(call_args)),
92
+ [call_tracer](ServerMetadataHandle md) {
93
+ call_tracer->RecordSendTrailingMetadata(md.get());
94
+ return md;
95
+ }),
96
+ [call_tracer]() { call_tracer->RecordCancel(absl::CancelledError()); });
97
+ }
98
+
99
+ } // namespace
100
+
101
+ void RegisterServerCallTracerFilter(CoreConfiguration::Builder* builder) {
102
+ builder->channel_init()->RegisterStage(
103
+ GRPC_SERVER_CHANNEL, GRPC_CHANNEL_INIT_BUILTIN_PRIORITY,
104
+ [](ChannelStackBuilder* builder) {
105
+ builder->AppendFilter(&ServerCallTracerFilter::kFilter);
106
+ return true;
107
+ });
108
+ }
109
+
110
+ } // namespace grpc_core