grpc 1.81.1 → 1.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1993) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +70 -47
  3. data/etc/roots.pem +9008 -3936
  4. data/include/grpc/credentials.h +10 -0
  5. data/include/grpc/event_engine/memory_allocator.h +1 -0
  6. data/include/grpc/grpc.h +9 -7
  7. data/include/grpc/grpc_audit_logging.h +2 -2
  8. data/include/grpc/grpc_security_constants.h +6 -0
  9. data/include/grpc/impl/channel_arg_names.h +39 -1
  10. data/src/core/call/call_filters.h +35 -17
  11. data/src/core/call/call_spine.h +4 -4
  12. data/src/core/call/client_call.cc +22 -10
  13. data/src/core/call/client_call.h +4 -0
  14. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  15. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  16. data/src/core/call/filter_fusion.h +15 -15
  17. data/src/core/call/interception_chain.cc +2 -0
  18. data/src/core/call/interception_chain.h +23 -13
  19. data/src/core/call/metadata.cc +7 -4
  20. data/src/core/call/metadata.h +1 -1
  21. data/src/core/call/metadata_batch.cc +2 -1
  22. data/src/core/call/metadata_batch.h +74 -38
  23. data/src/core/call/parsed_metadata.h +10 -5
  24. data/src/core/call/request_buffer.cc +6 -6
  25. data/src/core/call/request_buffer.h +1 -1
  26. data/src/core/call/server_call.cc +47 -18
  27. data/src/core/call/server_call.h +18 -5
  28. data/src/core/call/status_util.cc +0 -4
  29. data/src/core/call/status_util.h +0 -3
  30. data/src/core/channelz/channel_trace.cc +8 -6
  31. data/src/core/channelz/channel_trace.h +1 -1
  32. data/src/core/channelz/channelz.cc +9 -9
  33. data/src/core/channelz/channelz.h +12 -12
  34. data/src/core/channelz/channelz_registry.cc +10 -10
  35. data/src/core/channelz/text_encode.cc +9 -4
  36. data/src/core/channelz/v2tov1/convert.cc +2 -2
  37. data/src/core/channelz/ztrace_collector.h +5 -5
  38. data/src/core/client_channel/backup_poller.cc +3 -19
  39. data/src/core/client_channel/client_channel.cc +33 -65
  40. data/src/core/client_channel/client_channel.h +5 -3
  41. data/src/core/client_channel/client_channel_filter.cc +55 -99
  42. data/src/core/client_channel/client_channel_filter.h +4 -4
  43. data/src/core/client_channel/client_channel_plugin.cc +1 -1
  44. data/src/core/client_channel/client_channel_service_config.cc +4 -28
  45. data/src/core/client_channel/config_selector.h +2 -7
  46. data/src/core/client_channel/direct_channel.cc +12 -2
  47. data/src/core/client_channel/direct_channel.h +5 -3
  48. data/src/core/client_channel/dynamic_filters.cc +4 -7
  49. data/src/core/client_channel/dynamic_filters.h +1 -3
  50. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  51. data/src/core/client_channel/load_balanced_call_destination.cc +5 -3
  52. data/src/core/client_channel/retry_filter.cc +2 -25
  53. data/src/core/client_channel/retry_filter.h +3 -7
  54. data/src/core/client_channel/retry_filter_legacy_call_data.cc +6 -13
  55. data/src/core/client_channel/retry_filter_legacy_call_data.h +2 -2
  56. data/src/core/client_channel/retry_interceptor.cc +7 -35
  57. data/src/core/client_channel/retry_interceptor.h +11 -14
  58. data/src/core/client_channel/retry_service_config.cc +0 -2
  59. data/src/core/client_channel/retry_service_config.h +0 -2
  60. data/src/core/client_channel/retry_throttle.cc +19 -7
  61. data/src/core/client_channel/retry_throttle.h +24 -7
  62. data/src/core/client_channel/subchannel.cc +335 -1082
  63. data/src/core/client_channel/subchannel.h +44 -329
  64. data/src/core/client_channel/subchannel_metrics.cc +48 -0
  65. data/src/core/client_channel/subchannel_metrics.h +60 -0
  66. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  67. data/src/core/{resolver/dns/dns_resolver_plugin.h → config/experiment_env_var.cc} +12 -9
  68. data/src/core/config/experiment_env_var.h +26 -0
  69. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  70. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  71. data/src/core/credentials/call/external/external_account_credentials.cc +129 -16
  72. data/src/core/credentials/call/external/external_account_credentials.h +6 -1
  73. data/src/core/credentials/call/external/file_external_account_credentials.cc +1 -1
  74. data/src/core/credentials/call/external/url_external_account_credentials.cc +2 -3
  75. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +8 -24
  76. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +3 -6
  77. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.cc +525 -0
  78. data/src/core/credentials/call/gdch_service_account/gdch_service_account_credentials.h +138 -0
  79. data/src/core/credentials/call/json_util.h +1 -0
  80. data/src/core/credentials/call/jwt/json_token.cc +10 -2
  81. data/src/core/credentials/call/jwt/jwt_credentials.cc +11 -1
  82. data/src/core/credentials/call/jwt/jwt_credentials.h +3 -0
  83. data/src/core/credentials/call/jwt/jwt_verifier.cc +15 -1
  84. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +1 -1
  85. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +78 -62
  86. data/src/core/credentials/call/oauth2/oauth2_credentials.h +2 -6
  87. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +411 -0
  88. data/src/core/credentials/call/regional_access_boundary_fetcher.h +158 -0
  89. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +57 -36
  90. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +28 -9
  91. data/src/core/credentials/transport/google_default/google_default_credentials.cc +6 -7
  92. data/src/core/credentials/transport/insecure/insecure_security_connector.h +1 -1
  93. data/src/core/credentials/transport/local/local_security_connector.cc +1 -1
  94. data/src/core/credentials/transport/ssl/ssl_credentials.cc +59 -72
  95. data/src/core/credentials/transport/ssl/ssl_credentials.h +9 -8
  96. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +26 -8
  97. data/src/core/credentials/transport/ssl/ssl_security_connector.h +4 -4
  98. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +38 -27
  99. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +10 -7
  100. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +51 -62
  101. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -4
  102. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.cc +172 -0
  103. data/src/core/credentials/transport/tls/grpc_tls_certificate_selector.h +129 -0
  104. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  105. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  106. data/src/core/credentials/transport/tls/load_system_roots.h +2 -6
  107. data/src/core/credentials/transport/tls/load_system_roots_fallback.cc +5 -6
  108. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +23 -18
  109. data/src/core/credentials/transport/tls/load_system_roots_supported.h +3 -2
  110. data/src/core/credentials/transport/tls/load_system_roots_windows.cc +5 -8
  111. data/src/core/credentials/transport/tls/spiffe_utils.cc +1 -1
  112. data/src/core/credentials/transport/tls/ssl_utils.cc +49 -28
  113. data/src/core/credentials/transport/tls/ssl_utils.h +12 -49
  114. data/src/core/credentials/transport/tls/tls_security_connector.cc +71 -44
  115. data/src/core/credentials/transport/tls/tls_security_connector.h +37 -16
  116. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  117. data/src/core/credentials/transport/xds/xds_credentials.cc +4 -12
  118. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +6 -0
  119. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +16 -12
  120. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +29 -67
  121. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +0 -8
  122. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +26 -60
  123. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +24 -19
  124. data/src/core/ext/filters/http/http_filters_plugin.cc +20 -9
  125. data/src/core/ext/filters/http/message_compress/compression_filter.cc +40 -32
  126. data/src/core/ext/filters/http/message_compress/compression_filter.h +0 -1
  127. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -81
  128. data/src/core/ext/filters/message_size/message_size_filter.h +1 -50
  129. data/src/core/ext/filters/rbac/rbac_filter.cc +43 -21
  130. data/src/core/ext/filters/rbac/rbac_filter.h +22 -4
  131. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +4 -3
  132. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +13 -56
  133. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +0 -14
  134. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +7 -7
  135. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +218 -93
  136. data/src/core/ext/transport/chttp2/server/chttp2_server.h +15 -12
  137. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +177 -95
  138. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -0
  139. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -3
  140. data/src/core/ext/transport/chttp2/transport/flow_control.h +92 -10
  141. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +2 -4
  142. data/src/core/ext/transport/chttp2/transport/frame.cc +120 -13
  143. data/src/core/ext/transport/chttp2/transport/frame.h +68 -10
  144. data/src/core/ext/transport/chttp2/transport/frame_data.cc +33 -2
  145. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +55 -23
  146. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +1 -0
  147. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +4 -1
  148. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +13 -7
  149. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +1 -1
  150. data/src/core/ext/transport/chttp2/transport/frame_security.cc +10 -1
  151. data/src/core/ext/transport/chttp2/transport/frame_security.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +4 -1
  153. data/src/core/ext/transport/chttp2/transport/goaway.cc +11 -1
  154. data/src/core/ext/transport/chttp2/transport/goaway.h +24 -1
  155. data/src/core/ext/transport/chttp2/transport/header_assembler.h +54 -22
  156. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +53 -5
  157. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +22 -0
  158. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +20 -0
  159. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +51 -5
  160. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  161. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +361 -550
  162. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +71 -50
  163. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +2294 -0
  164. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +800 -0
  165. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  166. data/src/core/ext/transport/chttp2/transport/http2_settings.h +49 -15
  167. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +0 -2
  168. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +75 -28
  169. data/src/core/ext/transport/chttp2/transport/http2_status.h +38 -37
  170. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +207 -22
  171. data/src/core/ext/transport/chttp2/transport/http2_transport.h +337 -53
  172. data/src/core/ext/transport/chttp2/transport/internal.h +25 -1
  173. data/src/core/ext/transport/chttp2/transport/message_assembler.h +1 -2
  174. data/src/core/ext/transport/chttp2/transport/parsing.cc +97 -29
  175. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +4 -3
  176. data/src/core/ext/transport/chttp2/transport/ping_promise.h +25 -5
  177. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +7 -14
  178. data/src/core/ext/transport/chttp2/transport/read_context.h +614 -0
  179. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  180. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  181. data/src/core/ext/transport/chttp2/transport/security_frame.h +20 -10
  182. data/src/core/ext/transport/chttp2/transport/stream.h +347 -155
  183. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +100 -74
  184. data/src/core/ext/transport/chttp2/transport/write_cycle.h +32 -4
  185. data/src/core/ext/transport/chttp2/transport/writing.cc +0 -3
  186. data/src/core/ext/transport/inproc/inproc_transport.cc +6 -10
  187. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +20 -19
  188. data/src/core/ext/upb-gen/cel/expr/checked.upb.h +621 -432
  189. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.c +264 -166
  190. data/src/core/ext/upb-gen/cel/expr/checked.upb_minitable.h +0 -13
  191. data/src/core/ext/upb-gen/cel/expr/syntax.upb.h +708 -497
  192. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.c +294 -176
  193. data/src/core/ext/upb-gen/cel/expr/syntax.upb_minitable.h +0 -15
  194. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +262 -181
  195. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.c +84 -58
  196. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb_minitable.h +0 -5
  197. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb.h +254 -190
  198. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.c +107 -53
  199. data/src/core/ext/upb-gen/envoy/admin/v3/clusters.upb_minitable.h +0 -4
  200. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb.h +271 -190
  201. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.c +88 -64
  202. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump.upb_minitable.h +0 -5
  203. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +1035 -730
  204. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.c +384 -260
  205. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb_minitable.h +0 -19
  206. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb.h +87 -56
  207. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.c +26 -16
  208. data/src/core/ext/upb-gen/envoy/admin/v3/init_dump.upb_minitable.h +0 -2
  209. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb.h +105 -71
  210. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.c +30 -22
  211. data/src/core/ext/upb-gen/envoy/admin/v3/listeners.upb_minitable.h +0 -2
  212. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb.h +31 -29
  213. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.c +19 -7
  214. data/src/core/ext/upb-gen/envoy/admin/v3/memory.upb_minitable.h +0 -1
  215. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb.h +25 -23
  216. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.c +15 -7
  217. data/src/core/ext/upb-gen/envoy/admin/v3/metrics.upb_minitable.h +0 -1
  218. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb.h +25 -23
  219. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.c +15 -7
  220. data/src/core/ext/upb-gen/envoy/admin/v3/mutex_stats.upb_minitable.h +0 -1
  221. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb.h +201 -165
  222. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.c +79 -31
  223. data/src/core/ext/upb-gen/envoy/admin/v3/server_info.upb_minitable.h +0 -2
  224. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb.h +29 -26
  225. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.c +17 -11
  226. data/src/core/ext/upb-gen/envoy/admin/v3/tap.upb_minitable.h +0 -1
  227. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb.h +46 -29
  228. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.c +37 -19
  229. data/src/core/ext/upb-gen/envoy/annotations/deprecation.upb_minitable.h +4 -4
  230. data/src/core/ext/upb-gen/envoy/annotations/resource.upb.h +34 -27
  231. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.c +34 -13
  232. data/src/core/ext/upb-gen/envoy/annotations/resource.upb_minitable.h +1 -2
  233. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +617 -452
  234. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.c +221 -163
  235. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb_minitable.h +0 -16
  236. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +1339 -970
  237. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.c +484 -324
  238. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb_minitable.h +0 -23
  239. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb.h +181 -135
  240. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.c +59 -43
  241. data/src/core/ext/upb-gen/envoy/config/cluster/v3/circuit_breaker.upb_minitable.h +0 -3
  242. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +1353 -1028
  243. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +535 -361
  244. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.h +0 -25
  245. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb.h +37 -33
  246. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.c +19 -13
  247. data/src/core/ext/upb-gen/envoy/config/cluster/v3/filter.upb_minitable.h +0 -1
  248. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb.h +234 -196
  249. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.c +77 -57
  250. data/src/core/ext/upb-gen/envoy/config/cluster/v3/outlier_detection.upb_minitable.h +0 -1
  251. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +695 -502
  252. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.c +246 -186
  253. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb_minitable.h +0 -15
  254. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb.h +140 -116
  255. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.c +53 -43
  256. data/src/core/ext/upb-gen/envoy/config/common/mutation_rules/v3/mutation_rules.upb_minitable.h +0 -3
  257. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +363 -269
  258. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.c +131 -89
  259. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb_minitable.h +0 -8
  260. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb.h +35 -31
  261. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.c +15 -13
  262. data/src/core/ext/upb-gen/envoy/config/core/v3/backoff.upb_minitable.h +0 -1
  263. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +1073 -769
  264. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +515 -293
  265. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +0 -30
  266. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb.h +25 -23
  267. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.c +15 -7
  268. data/src/core/ext/upb-gen/envoy/config/core/v3/cel.upb_minitable.h +0 -1
  269. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +375 -267
  270. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.c +142 -86
  271. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb_minitable.h +0 -7
  272. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +32 -27
  273. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.c +13 -11
  274. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb_minitable.h +0 -1
  275. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb.h +29 -26
  276. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.c +17 -11
  277. data/src/core/ext/upb-gen/envoy/config/core/v3/extension.upb_minitable.h +0 -1
  278. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb.h +87 -56
  279. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.c +26 -16
  280. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_method_list.upb_minitable.h +0 -2
  281. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +634 -468
  282. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +255 -161
  283. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.h +0 -14
  284. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +672 -474
  285. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.c +228 -130
  286. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb_minitable.h +0 -9
  287. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb.h +56 -40
  288. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.c +15 -13
  289. data/src/core/ext/upb-gen/envoy/config/core/v3/http_service.upb_minitable.h +0 -1
  290. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +34 -29
  291. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.c +19 -11
  292. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb_minitable.h +0 -1
  293. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +811 -635
  294. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +347 -221
  295. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.h +0 -16
  296. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb.h +174 -118
  297. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.c +62 -38
  298. data/src/core/ext/upb-gen/envoy/config/core/v3/proxy_protocol.upb_minitable.h +0 -4
  299. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb.h +78 -57
  300. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.c +28 -18
  301. data/src/core/ext/upb-gen/envoy/config/core/v3/resolver.upb_minitable.h +0 -2
  302. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +37 -33
  303. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +22 -14
  304. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +0 -1
  305. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +159 -119
  306. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +47 -35
  307. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +0 -5
  308. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +101 -76
  309. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.c +41 -23
  310. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb_minitable.h +0 -2
  311. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb.h +35 -31
  312. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.c +15 -13
  313. data/src/core/ext/upb-gen/envoy/config/core/v3/udp_socket_config.upb_minitable.h +0 -1
  314. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +189 -127
  315. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.c +79 -49
  316. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb_minitable.h +0 -4
  317. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +378 -283
  318. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.c +156 -98
  319. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb_minitable.h +0 -8
  320. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb.h +354 -255
  321. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.c +125 -69
  322. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/load_report.upb_minitable.h +0 -6
  323. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb.h +27 -24
  324. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.c +13 -11
  325. data/src/core/ext/upb-gen/envoy/config/listener/v3/api_listener.upb_minitable.h +0 -1
  326. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +611 -451
  327. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.c +159 -119
  328. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb_minitable.h +0 -11
  329. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +468 -321
  330. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +157 -99
  331. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -6
  332. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +146 -119
  333. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +55 -35
  334. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.h +0 -1
  335. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb.h +61 -51
  336. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.c +16 -16
  337. data/src/core/ext/upb-gen/envoy/config/listener/v3/udp_listener_config.upb_minitable.h +0 -2
  338. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb.h +43 -39
  339. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.c +25 -13
  340. data/src/core/ext/upb-gen/envoy/config/metrics/v3/metrics_service.upb_minitable.h +0 -1
  341. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +341 -247
  342. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.c +130 -84
  343. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb_minitable.h +0 -8
  344. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +452 -313
  345. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.c +144 -100
  346. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb_minitable.h +0 -10
  347. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +666 -493
  348. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +251 -181
  349. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +0 -12
  350. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +327 -197
  351. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.c +92 -48
  352. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb_minitable.h +0 -3
  353. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +3583 -2532
  354. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +1340 -816
  355. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +0 -60
  356. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +111 -82
  357. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.c +48 -28
  358. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb_minitable.h +0 -3
  359. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +548 -410
  360. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.c +214 -148
  361. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb_minitable.h +0 -12
  362. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb.h +59 -50
  363. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.c +30 -20
  364. data/src/core/ext/upb-gen/envoy/config/trace/v3/datadog.upb_minitable.h +0 -2
  365. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb.h +29 -26
  366. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.c +17 -11
  367. data/src/core/ext/upb-gen/envoy/config/trace/v3/dynamic_ot.upb_minitable.h +0 -1
  368. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +60 -49
  369. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.c +28 -20
  370. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb_minitable.h +0 -2
  371. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb.h +50 -36
  372. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.c +19 -11
  373. data/src/core/ext/upb-gen/envoy/config/trace/v3/lightstep.upb_minitable.h +0 -1
  374. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb.h +82 -63
  375. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.c +27 -19
  376. data/src/core/ext/upb-gen/envoy/config/trace/v3/opentelemetry.upb_minitable.h +0 -1
  377. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb.h +27 -24
  378. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.c +13 -11
  379. data/src/core/ext/upb-gen/envoy/config/trace/v3/service.upb_minitable.h +0 -1
  380. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +70 -58
  381. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.c +32 -22
  382. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb_minitable.h +0 -2
  383. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +2 -5
  384. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +1 -1
  385. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb.h +73 -62
  386. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.c +39 -25
  387. data/src/core/ext/upb-gen/envoy/config/trace/v3/xray.upb_minitable.h +0 -2
  388. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb.h +49 -45
  389. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.c +33 -13
  390. data/src/core/ext/upb-gen/envoy/config/trace/v3/zipkin.upb_minitable.h +0 -1
  391. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +771 -588
  392. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.c +383 -185
  393. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb_minitable.h +0 -16
  394. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +66 -47
  395. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.c +31 -17
  396. data/src/core/ext/upb-gen/envoy/extensions/clusters/aggregate/v3/cluster.upb_minitable.h +0 -2
  397. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb.h +69 -58
  398. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.c +27 -23
  399. data/src/core/ext/upb-gen/envoy/extensions/common/matching/v3/extension_matcher.upb_minitable.h +0 -2
  400. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +151 -119
  401. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.c +45 -39
  402. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb_minitable.h +0 -5
  403. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb.h +19 -17
  404. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.c +1 -3
  405. data/src/core/ext/upb-gen/envoy/extensions/filters/common/matcher/action/v3/skip_action.upb_minitable.h +0 -1
  406. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb.h +144 -109
  407. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.c +46 -38
  408. data/src/core/ext/upb-gen/envoy/extensions/filters/http/composite/v3/composite.upb_minitable.h +0 -4
  409. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb.h +1912 -0
  410. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.c +300 -0
  411. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upb_minitable.h +37 -0
  412. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb.h +187 -0
  413. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.c +64 -0
  414. data/src/core/ext/upb-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upb_minitable.h +31 -0
  415. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +184 -139
  416. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.c +65 -35
  417. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb_minitable.h +0 -3
  418. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb.h +129 -106
  419. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.c +69 -41
  420. data/src/core/ext/upb-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upb_minitable.h +0 -4
  421. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +83 -71
  422. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.c +40 -26
  423. data/src/core/ext/upb-gen/envoy/extensions/filters/http/rbac/v3/rbac.upb_minitable.h +0 -2
  424. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb.h +148 -101
  425. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.c +45 -27
  426. data/src/core/ext/upb-gen/envoy/extensions/filters/http/router/v3/router.upb_minitable.h +0 -2
  427. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +62 -51
  428. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.c +35 -21
  429. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb_minitable.h +0 -2
  430. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1362 -1024
  431. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +508 -336
  432. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.h +0 -22
  433. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb.h +21 -19
  434. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.c +13 -7
  435. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/call_credentials/access_token/v3/access_token_credentials.upb_minitable.h +0 -1
  436. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb.h +35 -31
  437. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.c +15 -13
  438. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/tls/v3/tls_credentials.upb_minitable.h +0 -1
  439. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb.h +27 -24
  440. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.c +13 -11
  441. data/src/core/ext/upb-gen/envoy/extensions/grpc_service/channel_credentials/xds/v3/xds_credentials.upb_minitable.h +0 -1
  442. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +27 -24
  443. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.c +13 -11
  444. data/src/core/ext/upb-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb_minitable.h +0 -1
  445. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +94 -74
  446. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +35 -23
  447. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.h +0 -1
  448. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +231 -179
  449. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.c +88 -66
  450. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb_minitable.h +0 -6
  451. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb.h +21 -19
  452. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.c +13 -7
  453. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/pick_first/v3/pick_first.upb_minitable.h +0 -1
  454. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +63 -56
  455. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.c +31 -19
  456. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb_minitable.h +0 -1
  457. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +27 -24
  458. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.c +13 -11
  459. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb_minitable.h +0 -1
  460. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +27 -24
  461. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +13 -11
  462. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.h +0 -1
  463. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +2 -5
  464. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/cert.upb_minitable.c +1 -1
  465. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +538 -364
  466. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.c +157 -95
  467. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb_minitable.h +0 -8
  468. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +150 -110
  469. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.c +69 -49
  470. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb_minitable.h +0 -4
  471. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +517 -389
  472. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +182 -116
  473. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.h +0 -7
  474. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +84 -62
  475. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.c +30 -22
  476. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb_minitable.h +0 -2
  477. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +340 -256
  478. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.c +92 -82
  479. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb_minitable.h +0 -5
  480. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb.h +19 -17
  481. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.c +1 -3
  482. data/src/core/ext/upb-gen/envoy/service/discovery/v3/ads.upb_minitable.h +0 -1
  483. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +857 -566
  484. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +288 -182
  485. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +0 -15
  486. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb.h +2362 -0
  487. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.c +556 -0
  488. data/src/core/ext/upb-gen/envoy/service/ext_proc/v3/external_processor.upb_minitable.h +47 -0
  489. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb.h +105 -72
  490. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.c +36 -22
  491. data/src/core/ext/upb-gen/envoy/service/load_stats/v3/lrs.upb_minitable.h +0 -2
  492. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +312 -226
  493. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.c +132 -78
  494. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb_minitable.h +0 -5
  495. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb.h +82 -61
  496. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.c +35 -19
  497. data/src/core/ext/upb-gen/envoy/type/http/v3/cookie.upb_minitable.h +0 -2
  498. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +123 -89
  499. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.c +25 -25
  500. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb_minitable.h +0 -4
  501. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb.h +48 -33
  502. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.c +13 -11
  503. data/src/core/ext/upb-gen/envoy/type/matcher/v3/address.upb_minitable.h +0 -1
  504. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +42 -36
  505. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.c +19 -13
  506. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb_minitable.h +0 -1
  507. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb.h +101 -79
  508. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.c +61 -31
  509. data/src/core/ext/upb-gen/envoy/type/matcher/v3/http_inputs.upb_minitable.h +0 -5
  510. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +83 -60
  511. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.c +37 -19
  512. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb_minitable.h +0 -2
  513. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb.h +56 -40
  514. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.c +15 -13
  515. data/src/core/ext/upb-gen/envoy/type/matcher/v3/node.upb_minitable.h +0 -1
  516. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +34 -29
  517. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.c +13 -11
  518. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb_minitable.h +0 -1
  519. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +32 -27
  520. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.c +13 -11
  521. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb_minitable.h +0 -1
  522. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +88 -71
  523. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.c +48 -30
  524. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb_minitable.h +0 -3
  525. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb.h +37 -30
  526. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.c +1 -5
  527. data/src/core/ext/upb-gen/envoy/type/matcher/v3/status_code_input.upb_minitable.h +0 -2
  528. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +95 -71
  529. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.c +36 -22
  530. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb_minitable.h +0 -2
  531. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +79 -56
  532. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.c +26 -18
  533. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb_minitable.h +0 -2
  534. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +164 -124
  535. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.c +54 -40
  536. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb_minitable.h +0 -4
  537. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +200 -147
  538. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.c +47 -41
  539. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb_minitable.h +0 -7
  540. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +160 -130
  541. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.c +89 -47
  542. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb_minitable.h +0 -5
  543. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +78 -62
  544. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.c +26 -20
  545. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb_minitable.h +0 -3
  546. data/src/core/ext/upb-gen/envoy/type/v3/http.upb.h +2 -5
  547. data/src/core/ext/upb-gen/envoy/type/v3/http.upb_minitable.c +1 -1
  548. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb.h +21 -19
  549. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.c +13 -7
  550. data/src/core/ext/upb-gen/envoy/type/v3/http_status.upb_minitable.h +0 -1
  551. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb.h +43 -36
  552. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.c +22 -12
  553. data/src/core/ext/upb-gen/envoy/type/v3/percent.upb_minitable.h +0 -2
  554. data/src/core/ext/upb-gen/envoy/type/v3/range.upb.h +67 -55
  555. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.c +36 -18
  556. data/src/core/ext/upb-gen/envoy/type/v3/range.upb_minitable.h +0 -3
  557. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +62 -51
  558. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.c +33 -19
  559. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb_minitable.h +0 -2
  560. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb.h +2 -5
  561. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_unit.upb_minitable.c +1 -1
  562. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb.h +25 -23
  563. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.c +15 -7
  564. data/src/core/ext/upb-gen/envoy/type/v3/semantic_version.upb_minitable.h +0 -1
  565. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb.h +37 -33
  566. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.c +19 -13
  567. data/src/core/ext/upb-gen/envoy/type/v3/token_bucket.upb_minitable.h +0 -1
  568. data/src/core/ext/upb-gen/google/api/annotations.upb.h +15 -13
  569. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.c +22 -7
  570. data/src/core/ext/upb-gen/google/api/annotations.upb_minitable.h +1 -1
  571. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +619 -430
  572. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.c +260 -168
  573. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb_minitable.h +0 -13
  574. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +734 -518
  575. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.c +312 -182
  576. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb_minitable.h +0 -16
  577. data/src/core/ext/upb-gen/google/api/http.upb.h +146 -105
  578. data/src/core/ext/upb-gen/google/api/http.upb_minitable.c +65 -29
  579. data/src/core/ext/upb-gen/google/api/http.upb_minitable.h +0 -3
  580. data/src/core/ext/upb-gen/google/api/httpbody.upb.h +52 -37
  581. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.c +19 -11
  582. data/src/core/ext/upb-gen/google/api/httpbody.upb_minitable.h +0 -1
  583. data/src/core/ext/upb-gen/google/protobuf/any.upb.h +23 -21
  584. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.c +15 -7
  585. data/src/core/ext/upb-gen/google/protobuf/any.upb_minitable.h +0 -1
  586. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +2236 -1514
  587. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +824 -406
  588. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +0 -34
  589. data/src/core/ext/upb-gen/google/protobuf/duration.upb.h +23 -21
  590. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.c +15 -7
  591. data/src/core/ext/upb-gen/google/protobuf/duration.upb_minitable.h +0 -1
  592. data/src/core/ext/upb-gen/google/protobuf/empty.upb.h +19 -17
  593. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.c +1 -3
  594. data/src/core/ext/upb-gen/google/protobuf/empty.upb_minitable.h +0 -1
  595. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +149 -100
  596. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.c +59 -43
  597. data/src/core/ext/upb-gen/google/protobuf/struct.upb_minitable.h +0 -4
  598. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb.h +23 -21
  599. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.c +15 -7
  600. data/src/core/ext/upb-gen/google/protobuf/timestamp.upb_minitable.h +0 -1
  601. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb.h +181 -139
  602. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.c +99 -53
  603. data/src/core/ext/upb-gen/google/protobuf/wrappers.upb_minitable.h +0 -9
  604. data/src/core/ext/upb-gen/google/rpc/status.upb.h +52 -37
  605. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.c +19 -11
  606. data/src/core/ext/upb-gen/google/rpc/status.upb_minitable.h +0 -1
  607. data/src/core/ext/upb-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upb.h +1651 -1191
  608. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +1157 -0
  609. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.h +69 -0
  610. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +76 -56
  611. data/src/core/ext/upb-gen/grpc/gcp/altscontext.upb_minitable.c +93 -0
  612. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -7
  613. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +621 -425
  614. data/src/core/ext/upb-gen/grpc/gcp/handshaker.upb_minitable.c +415 -0
  615. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -17
  616. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +118 -88
  617. data/src/core/ext/upb-gen/grpc/gcp/transport_security_common.upb_minitable.c +119 -0
  618. data/src/core/ext/upb-gen/grpc/gcp/transport_security_common.upb_minitable.h +34 -0
  619. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  620. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  621. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -7
  622. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +313 -234
  623. data/src/core/ext/upb-gen/grpc/lb/v1/load_balancer.upb_minitable.c +243 -0
  624. data/src/core/ext/upb-gen/grpc/lb/v1/load_balancer.upb_minitable.h +39 -0
  625. data/src/core/ext/upb-gen/grpc/lookup/v1/rls.upb.h +497 -0
  626. data/src/core/ext/upb-gen/grpc/lookup/v1/rls.upb_minitable.c +120 -0
  627. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -8
  628. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +540 -331
  629. data/src/core/ext/upb-gen/grpc/lookup/v1/rls_config.upb_minitable.c +290 -0
  630. data/src/core/ext/upb-gen/grpc/lookup/v1/rls_config.upb_minitable.h +39 -0
  631. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +189 -125
  632. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +59 -35
  633. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +0 -3
  634. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +454 -343
  635. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +204 -130
  636. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +0 -11
  637. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +369 -243
  638. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +109 -79
  639. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +0 -7
  640. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +256 -175
  641. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +122 -68
  642. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +0 -8
  643. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb.h +128 -91
  644. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.c +82 -41
  645. data/src/core/ext/upb-gen/udpa/annotations/migrate.upb_minitable.h +5 -8
  646. data/src/core/ext/upb-gen/udpa/annotations/security.upb.h +36 -29
  647. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.c +36 -13
  648. data/src/core/ext/upb-gen/udpa/annotations/security.upb_minitable.h +1 -2
  649. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb.h +13 -11
  650. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.c +22 -7
  651. data/src/core/ext/upb-gen/udpa/annotations/sensitive.upb_minitable.h +1 -1
  652. data/src/core/ext/upb-gen/udpa/annotations/status.upb.h +36 -29
  653. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.c +36 -13
  654. data/src/core/ext/upb-gen/udpa/annotations/status.upb_minitable.h +1 -2
  655. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb.h +34 -27
  656. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.c +34 -13
  657. data/src/core/ext/upb-gen/udpa/annotations/versioning.upb_minitable.h +1 -2
  658. data/src/core/ext/upb-gen/validate/validate.upb.h +1682 -1130
  659. data/src/core/ext/upb-gen/validate/validate.upb_minitable.c +587 -247
  660. data/src/core/ext/upb-gen/validate/validate.upb_minitable.h +4 -27
  661. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb.h +128 -91
  662. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.c +82 -41
  663. data/src/core/ext/upb-gen/xds/annotations/v3/migrate.upb_minitable.h +5 -8
  664. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb.h +36 -29
  665. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.c +36 -13
  666. data/src/core/ext/upb-gen/xds/annotations/v3/security.upb_minitable.h +1 -2
  667. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb.h +13 -11
  668. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.c +22 -7
  669. data/src/core/ext/upb-gen/xds/annotations/v3/sensitive.upb_minitable.h +1 -1
  670. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb.h +122 -90
  671. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.c +82 -39
  672. data/src/core/ext/upb-gen/xds/annotations/v3/status.upb_minitable.h +3 -7
  673. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb.h +34 -27
  674. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.c +34 -13
  675. data/src/core/ext/upb-gen/xds/annotations/v3/versioning.upb_minitable.h +1 -2
  676. data/src/core/ext/upb-gen/xds/core/v3/authority.upb.h +21 -19
  677. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.c +13 -7
  678. data/src/core/ext/upb-gen/xds/core/v3/authority.upb_minitable.h +0 -1
  679. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb.h +29 -26
  680. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.c +17 -11
  681. data/src/core/ext/upb-gen/xds/core/v3/cidr.upb_minitable.h +0 -1
  682. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +70 -58
  683. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.c +32 -22
  684. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb_minitable.h +0 -2
  685. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +53 -34
  686. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.c +26 -16
  687. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb_minitable.h +0 -2
  688. data/src/core/ext/upb-gen/xds/core/v3/extension.upb.h +29 -26
  689. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.c +17 -11
  690. data/src/core/ext/upb-gen/xds/core/v3/extension.upb_minitable.h +0 -1
  691. data/src/core/ext/upb-gen/xds/core/v3/resource.upb.h +37 -33
  692. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.c +22 -14
  693. data/src/core/ext/upb-gen/xds/core/v3/resource.upb_minitable.h +0 -1
  694. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +102 -76
  695. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.c +43 -23
  696. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb_minitable.h +0 -2
  697. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb.h +33 -30
  698. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.c +19 -11
  699. data/src/core/ext/upb-gen/xds/core/v3/resource_name.upb_minitable.h +0 -1
  700. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +136 -83
  701. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.c +41 -33
  702. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb_minitable.h +0 -4
  703. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb.h +46 -32
  704. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.c +20 -12
  705. data/src/core/ext/upb-gen/xds/service/orca/v3/orca.upb_minitable.h +0 -1
  706. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb.h +29 -26
  707. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.c +20 -12
  708. data/src/core/ext/upb-gen/xds/type/matcher/v3/cel.upb_minitable.h +0 -1
  709. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb.h +93 -61
  710. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.c +28 -20
  711. data/src/core/ext/upb-gen/xds/type/matcher/v3/domain.upb_minitable.h +0 -2
  712. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb.h +19 -17
  713. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.c +1 -3
  714. data/src/core/ext/upb-gen/xds/type/matcher/v3/http_inputs.upb_minitable.h +0 -1
  715. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb.h +105 -71
  716. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.c +32 -22
  717. data/src/core/ext/upb-gen/xds/type/matcher/v3/ip.upb_minitable.h +0 -2
  718. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +430 -314
  719. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.c +153 -123
  720. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb_minitable.h +0 -10
  721. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb.h +307 -199
  722. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.c +74 -62
  723. data/src/core/ext/upb-gen/xds/type/matcher/v3/range.upb_minitable.h +0 -6
  724. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +52 -42
  725. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.c +19 -13
  726. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb_minitable.h +0 -2
  727. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +95 -71
  728. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.c +36 -22
  729. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb_minitable.h +0 -2
  730. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +92 -77
  731. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.c +42 -28
  732. data/src/core/ext/upb-gen/xds/type/v3/cel.upb_minitable.h +0 -2
  733. data/src/core/ext/upb-gen/xds/type/v3/range.upb.h +67 -55
  734. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.c +36 -18
  735. data/src/core/ext/upb-gen/xds/type/v3/range.upb_minitable.h +0 -3
  736. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb.h +29 -26
  737. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.c +17 -11
  738. data/src/core/ext/upb-gen/xds/type/v3/typed_struct.upb_minitable.h +0 -1
  739. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.c +453 -0
  740. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/ext_proc.upbdefs.h +67 -0
  741. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.c +142 -0
  742. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/ext_proc/v3/processing_mode.upbdefs.h +37 -0
  743. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +885 -855
  744. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +733 -0
  745. data/src/core/ext/upbdefs-gen/{src/proto/grpc/channelz → grpc/channelz/v1}/channelz.upbdefs.h +44 -44
  746. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  747. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  748. data/src/core/filter/auth/server_auth_filter.cc +2 -3
  749. data/src/core/filter/composite/composite_filter.cc +53 -34
  750. data/src/core/filter/composite/composite_filter.h +16 -5
  751. data/src/core/filter/ext_proc/ext_proc_filter.cc +1781 -0
  752. data/src/core/filter/ext_proc/ext_proc_filter.h +188 -0
  753. data/src/core/filter/ext_proc/ext_proc_messages.cc +756 -0
  754. data/src/core/filter/ext_proc/ext_proc_messages.h +324 -0
  755. data/src/core/filter/filter_args.h +17 -24
  756. data/src/core/handshaker/handshaker.cc +14 -6
  757. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  758. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +30 -3
  759. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  760. data/src/core/handshaker/security/secure_endpoint.cc +69 -14
  761. data/src/core/handshaker/security/security_handshaker.cc +15 -12
  762. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  763. data/src/core/lib/channel/channel_args.cc +20 -0
  764. data/src/core/lib/channel/channel_args.h +29 -23
  765. data/src/core/lib/channel/channel_stack.cc +4 -2
  766. data/src/core/lib/channel/channel_stack.h +3 -7
  767. data/src/core/lib/channel/channel_stack_builder_impl.cc +2 -3
  768. data/src/core/lib/channel/channel_stack_builder_impl.h +0 -7
  769. data/src/core/lib/channel/promise_based_filter.cc +222 -24
  770. data/src/core/lib/channel/promise_based_filter.h +328 -206
  771. data/src/core/lib/compression/compression_internal.cc +4 -5
  772. data/src/core/lib/compression/message_compress.cc +132 -97
  773. data/src/core/lib/compression/message_compress.h +24 -0
  774. data/src/core/lib/debug/trace_flags.cc +10 -0
  775. data/src/core/lib/debug/trace_flags.h +4 -0
  776. data/src/core/lib/event_engine/ares_resolver.cc +68 -64
  777. data/src/core/lib/event_engine/ares_resolver.h +3 -2
  778. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  779. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  780. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  781. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +0 -13
  782. data/src/core/lib/event_engine/extensions/receive_coalescing_extension.h +44 -0
  783. data/src/core/lib/event_engine/extensions/tcp_trace.h +1 -1
  784. data/src/core/lib/event_engine/posix.h +2 -0
  785. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -12
  786. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +20 -24
  787. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  788. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  789. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +2 -1
  790. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +84 -40
  791. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +11 -11
  792. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +32 -37
  793. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  794. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +2 -1
  795. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +10 -10
  796. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  797. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +3 -0
  798. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +3 -0
  799. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  800. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  801. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  802. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  803. data/src/core/lib/event_engine/shim.cc +2 -16
  804. data/src/core/lib/event_engine/shim.h +0 -4
  805. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  806. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  807. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  808. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  809. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +4 -4
  810. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -4
  811. data/src/core/lib/event_engine/windows/windows_endpoint.cc +1 -3
  812. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  813. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  814. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  815. data/src/core/lib/experiments/experiments.cc +414 -267
  816. data/src/core/lib/experiments/experiments.h +231 -130
  817. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  818. data/src/core/lib/iomgr/buffer_list.h +2 -2
  819. data/src/core/lib/iomgr/cfstream_handle.cc +2 -6
  820. data/src/core/lib/iomgr/combiner.cc +0 -1
  821. data/src/core/lib/iomgr/endpoint_cfstream.cc +3 -10
  822. data/src/core/lib/iomgr/error.cc +5 -79
  823. data/src/core/lib/iomgr/error.h +8 -6
  824. data/src/core/lib/iomgr/error_cfstream.cc +1 -2
  825. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  826. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -7
  827. data/src/core/lib/iomgr/ev_poll_posix.cc +7 -15
  828. data/src/core/lib/iomgr/event_engine_shims/closure.cc +1 -1
  829. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +5 -6
  830. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +1 -2
  831. data/src/core/lib/iomgr/iomgr_posix.cc +0 -4
  832. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -4
  833. data/src/core/lib/iomgr/iomgr_windows.cc +0 -4
  834. data/src/core/lib/iomgr/socket_factory_posix.h +1 -1
  835. data/src/core/lib/iomgr/socket_utils_posix.cc +3 -0
  836. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  837. data/src/core/lib/iomgr/systemd_utils.cc +0 -1
  838. data/src/core/lib/iomgr/tcp_client.h +1 -1
  839. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  840. data/src/core/lib/iomgr/tcp_posix.cc +33 -28
  841. data/src/core/lib/iomgr/tcp_server.h +1 -1
  842. data/src/core/lib/iomgr/tcp_server_posix.cc +5 -6
  843. data/src/core/lib/iomgr/tcp_server_utils_posix.h +0 -1
  844. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -1
  845. data/src/core/lib/iomgr/tcp_server_windows.cc +0 -1
  846. data/src/core/lib/iomgr/tcp_windows.cc +5 -10
  847. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -4
  848. data/src/core/lib/iomgr/unix_sockets_posix.h +3 -1
  849. data/src/core/lib/iomgr/vsock.h +3 -1
  850. data/src/core/lib/promise/activity.cc +1 -1
  851. data/src/core/lib/promise/activity.h +1 -1
  852. data/src/core/lib/promise/arena_promise.h +7 -7
  853. data/src/core/lib/promise/detail/promise_factory.h +14 -14
  854. data/src/core/lib/promise/detail/promise_like.h +4 -4
  855. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  856. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  857. data/src/core/lib/promise/interceptor_list.h +1 -1
  858. data/src/core/lib/promise/observable.h +3 -3
  859. data/src/core/lib/promise/party.cc +1 -1
  860. data/src/core/lib/promise/try_seq.h +4 -4
  861. data/src/core/lib/resource_quota/arena.h +3 -3
  862. data/src/core/lib/resource_quota/memory_quota.cc +17 -17
  863. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  864. data/src/core/lib/resource_quota/telemetry.cc +54 -0
  865. data/src/core/lib/resource_quota/telemetry.h +5 -23
  866. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  867. data/src/core/lib/security/authorization/audit_logging.cc +7 -7
  868. data/src/core/lib/security/authorization/audit_logging.h +3 -3
  869. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  870. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +11 -13
  871. data/src/core/lib/security/authorization/grpc_authorization_engine.h +2 -2
  872. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  873. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  874. data/src/core/lib/security/authorization/matchers.cc +20 -20
  875. data/src/core/lib/security/authorization/matchers.h +16 -17
  876. data/src/core/lib/security/authorization/rbac_policy.cc +139 -56
  877. data/src/core/lib/security/authorization/rbac_policy.h +22 -4
  878. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  879. data/src/core/lib/security/authorization/stdout_logger.h +6 -5
  880. data/src/core/lib/surface/call.cc +16 -24
  881. data/src/core/lib/surface/call.h +14 -3
  882. data/src/core/lib/surface/call_utils.h +117 -0
  883. data/src/core/lib/surface/channel.cc +22 -3
  884. data/src/core/lib/surface/channel.h +15 -7
  885. data/src/core/lib/surface/channel_create.cc +1 -1
  886. data/src/core/lib/surface/channel_create.h +0 -2
  887. data/src/core/lib/surface/channel_init.cc +78 -39
  888. data/src/core/lib/surface/channel_init.h +30 -16
  889. data/src/core/lib/surface/filter_stack_call.cc +15 -39
  890. data/src/core/lib/surface/init.cc +20 -34
  891. data/src/core/lib/surface/lame_client.cc +1 -1
  892. data/src/core/lib/surface/legacy_channel.cc +11 -9
  893. data/src/core/lib/surface/legacy_channel.h +3 -1
  894. data/src/core/lib/surface/version.cc +2 -2
  895. data/src/core/lib/transport/bdp_estimator.cc +13 -13
  896. data/src/core/lib/transport/bdp_estimator.h +9 -5
  897. data/src/core/lib/transport/error_utils.cc +23 -162
  898. data/src/core/lib/transport/error_utils.h +0 -16
  899. data/src/core/lib/transport/promise_endpoint.h +8 -8
  900. data/src/core/lib/transport/transport.h +38 -9
  901. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  902. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  903. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  904. data/src/core/load_balancing/grpclb/grpclb.cc +2 -1
  905. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  906. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  907. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  908. data/src/core/load_balancing/health_check_client.cc +7 -7
  909. data/src/core/load_balancing/lb_policy.cc +1 -1
  910. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  911. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  912. data/src/core/load_balancing/pick_first/pick_first.cc +35 -2
  913. data/src/core/load_balancing/pick_first/pick_first.h +6 -0
  914. data/src/core/load_balancing/ring_hash/ring_hash.cc +112 -47
  915. data/src/core/load_balancing/rls/rls.cc +53 -29
  916. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +146 -88
  917. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.h +86 -0
  918. data/src/core/load_balancing/xds/cds.cc +88 -61
  919. data/src/core/load_balancing/xds/cds.h +21 -0
  920. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -3
  921. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  922. data/src/core/mitigation_engine/mitigation.h +62 -0
  923. data/src/core/mitigation_engine/mitigation_engine.h +109 -0
  924. data/src/core/mitigation_engine/mitigation_provider.h +63 -0
  925. data/src/core/plugin_registry/grpc_plugin_registry.cc +41 -10
  926. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +0 -5
  927. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.cc → dns_resolver.cc} +49 -48
  928. data/src/core/resolver/dns/{event_engine/event_engine_client_channel_resolver.h → dns_resolver.h} +8 -5
  929. data/src/core/resolver/dns/{event_engine/service_config_helper.cc → service_config_helper.cc} +1 -1
  930. data/src/core/resolver/dns/{event_engine/service_config_helper.h → service_config_helper.h} +3 -3
  931. data/src/core/resolver/endpoint_addresses.h +3 -0
  932. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  933. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +40 -31
  934. data/src/core/resolver/xds/xds_resolver.cc +66 -147
  935. data/src/core/server/server.cc +72 -54
  936. data/src/core/server/server.h +30 -21
  937. data/src/core/server/server_config_selector.h +23 -7
  938. data/src/core/server/server_config_selector_filter.cc +228 -32
  939. data/src/core/server/server_config_selector_filter.h +59 -3
  940. data/src/core/server/xds_server_config_fetcher.cc +821 -759
  941. data/src/core/server/xds_server_config_fetcher.h +49 -0
  942. data/src/core/server/xds_server_config_fetcher_legacy.cc +1340 -0
  943. data/src/core/telemetry/call_tracer.cc +49 -2
  944. data/src/core/telemetry/call_tracer.h +1 -0
  945. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  946. data/src/core/telemetry/histogram.h +99 -98
  947. data/src/core/telemetry/instrument.cc +209 -90
  948. data/src/core/telemetry/instrument.h +123 -61
  949. data/src/core/telemetry/metrics.h +5 -0
  950. data/src/core/telemetry/tcp_tracer.h +38 -0
  951. data/src/core/{resolver/dns/c_ares/dns_resolver_ares.h → telemetry/telemetry_label.h} +11 -9
  952. data/src/core/transport/message_size_service_config.cc +123 -0
  953. data/src/core/transport/message_size_service_config.h +85 -0
  954. data/src/core/transport/session_endpoint.cc +29 -4
  955. data/src/core/transport/session_endpoint.h +4 -0
  956. data/src/core/tsi/alts/crypt/aes_gcm.cc +10 -13
  957. data/src/core/tsi/alts/crypt/gsec.h +4 -2
  958. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +4 -4
  959. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +6 -6
  960. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +5 -3
  961. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  962. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  963. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  964. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  965. data/src/core/tsi/ssl_telemetry_utils.cc +300 -0
  966. data/src/core/tsi/ssl_telemetry_utils.h +84 -0
  967. data/src/core/tsi/ssl_transport_security.cc +846 -377
  968. data/src/core/tsi/ssl_transport_security.h +81 -28
  969. data/src/core/tsi/ssl_transport_security_utils.cc +18 -6
  970. data/src/core/tsi/tls_telemetry.cc +31 -0
  971. data/src/core/tsi/tls_telemetry.h +47 -0
  972. data/src/core/tsi/transport_security.cc +2 -2
  973. data/src/core/tsi/transport_security.h +8 -1
  974. data/src/core/tsi/transport_security_interface.h +1 -1
  975. data/src/core/{resolver/dns/native/dns_resolver.h → util/address_sorting_init.cc} +21 -8
  976. data/src/core/{resolver/dns/c_ares/grpc_ares_wrapper_posix.cc → util/address_sorting_init.h} +7 -8
  977. data/src/core/util/event_log.cc +3 -3
  978. data/src/core/util/http_client/httpcli.cc +21 -61
  979. data/src/core/util/http_client/httpcli.h +1 -8
  980. data/src/core/util/http_client/httpcli_security_connector.cc +14 -8
  981. data/src/core/util/http_client/parser.cc +1 -1
  982. data/src/core/util/json/json_object_loader.cc +7 -0
  983. data/src/core/util/json/json_object_loader.h +17 -2
  984. data/src/core/util/latent_see.cc +123 -36
  985. data/src/core/util/latent_see.h +14 -1
  986. data/src/core/util/linux/cpu.cc +1 -1
  987. data/src/core/util/load_file.cc +3 -9
  988. data/src/core/util/load_file.h +3 -4
  989. data/src/core/util/lru_cache.h +2 -0
  990. data/src/core/util/matchers.h +8 -0
  991. data/src/core/util/mpscq.cc +1 -1
  992. data/src/core/util/notification.h +4 -4
  993. data/src/core/util/posix/cpu.cc +1 -1
  994. data/src/core/util/ref_counted_string.h +1 -1
  995. data/src/core/util/status_helper.cc +68 -209
  996. data/src/core/util/status_helper.h +18 -34
  997. data/src/core/util/sync.h +20 -6
  998. data/src/core/util/table.h +20 -22
  999. data/src/core/util/tchar.cc +13 -7
  1000. data/src/core/util/trie_lookup.h +1 -1
  1001. data/src/core/util/work_serializer.cc +2 -2
  1002. data/src/core/xds/grpc/blackboard.cc +59 -0
  1003. data/src/core/{filter → xds/grpc}/blackboard.h +30 -11
  1004. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  1005. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +2 -11
  1006. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  1007. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  1008. data/src/core/xds/grpc/xds_audit_logger_registry.cc +51 -31
  1009. data/src/core/xds/grpc/xds_audit_logger_registry.h +17 -3
  1010. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +4 -17
  1011. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -6
  1012. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +488 -0
  1013. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.h +97 -0
  1014. data/src/core/xds/grpc/xds_certificate_provider.cc +7 -7
  1015. data/src/core/xds/grpc/xds_client_grpc.cc +12 -16
  1016. data/src/core/xds/grpc/xds_client_grpc.h +0 -4
  1017. data/src/core/xds/grpc/xds_cluster.h +1 -0
  1018. data/src/core/xds/grpc/xds_cluster_parser.cc +5 -20
  1019. data/src/core/xds/grpc/xds_cluster_parser.h +0 -2
  1020. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -4
  1021. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +0 -2
  1022. data/src/core/xds/grpc/xds_common_types.cc +96 -91
  1023. data/src/core/xds/grpc/xds_common_types.h +36 -54
  1024. data/src/core/xds/grpc/xds_common_types_parser.cc +191 -414
  1025. data/src/core/xds/grpc/xds_common_types_parser.h +25 -10
  1026. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  1027. data/src/core/xds/grpc/xds_endpoint_parser.cc +18 -20
  1028. data/src/core/xds/grpc/xds_grpc_service_parser.cc +179 -0
  1029. data/src/core/{filter/blackboard.cc → xds/grpc/xds_grpc_service_parser.h} +14 -13
  1030. data/src/core/xds/grpc/xds_http_composite_filter.cc +53 -32
  1031. data/src/core/xds/grpc/xds_http_composite_filter.h +10 -6
  1032. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +421 -0
  1033. data/src/core/xds/grpc/xds_http_ext_proc_filter.h +89 -0
  1034. data/src/core/xds/grpc/xds_http_fault_filter.cc +9 -161
  1035. data/src/core/xds/grpc/xds_http_fault_filter.h +20 -12
  1036. data/src/core/xds/grpc/xds_http_filter.cc +4 -2
  1037. data/src/core/xds/grpc/xds_http_filter.h +11 -20
  1038. data/src/core/xds/grpc/xds_http_filter_registry.cc +10 -137
  1039. data/src/core/xds/grpc/xds_http_filter_registry.h +7 -59
  1040. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +36 -131
  1041. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +30 -17
  1042. data/src/core/xds/grpc/xds_http_rbac_filter.cc +406 -37
  1043. data/src/core/xds/grpc/xds_http_rbac_filter.h +1 -3
  1044. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +8 -162
  1045. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +20 -12
  1046. data/src/core/xds/grpc/xds_lb_policy_registry.cc +0 -274
  1047. data/src/core/xds/grpc/xds_lb_policy_registry.h +7 -3
  1048. data/src/core/xds/grpc/xds_listener.cc +2 -0
  1049. data/src/core/xds/grpc/xds_listener.h +5 -0
  1050. data/src/core/xds/grpc/xds_listener_parser.cc +28 -19
  1051. data/src/core/xds/grpc/xds_matcher.h +2 -2
  1052. data/src/core/xds/grpc/xds_matcher_parse.h +3 -1
  1053. data/src/core/xds/grpc/xds_metadata_parser.cc +6 -3
  1054. data/src/core/xds/grpc/xds_metadata_parser.h +2 -0
  1055. data/src/core/xds/grpc/xds_route_config.cc +2 -0
  1056. data/src/core/xds/grpc/xds_route_config.h +4 -2
  1057. data/src/core/xds/grpc/xds_route_config_parser.cc +21 -93
  1058. data/src/core/xds/grpc/xds_route_config_parser.h +0 -3
  1059. data/src/core/xds/grpc/xds_routing.cc +192 -120
  1060. data/src/core/xds/grpc/xds_routing.h +92 -32
  1061. data/src/core/xds/grpc/xds_server_grpc.cc +22 -13
  1062. data/src/core/xds/grpc/xds_server_grpc.h +16 -2
  1063. data/src/core/xds/grpc/xds_server_grpc_interface.h +10 -0
  1064. data/src/core/xds/grpc/xds_tls_context.cc +117 -0
  1065. data/src/core/xds/grpc/xds_tls_context.h +76 -0
  1066. data/src/core/xds/grpc/xds_tls_context_parser.cc +275 -0
  1067. data/src/core/xds/grpc/xds_tls_context_parser.h +35 -0
  1068. data/src/core/xds/grpc/xds_transport_grpc.cc +243 -95
  1069. data/src/core/xds/grpc/xds_transport_grpc.h +50 -9
  1070. data/src/core/xds/xds_client/lrs_client.cc +26 -27
  1071. data/src/core/xds/xds_client/xds_bootstrap.cc +4 -16
  1072. data/src/core/xds/xds_client/xds_client.cc +21 -31
  1073. data/src/core/xds/xds_client/xds_transport.h +52 -3
  1074. data/src/ruby/ext/grpc/rb_byte_buffer.c +1 -0
  1075. data/src/ruby/ext/grpc/rb_call.c +29 -15
  1076. data/src/ruby/ext/grpc/rb_call_credentials.c +1 -0
  1077. data/src/ruby/ext/grpc/rb_channel.c +1 -0
  1078. data/src/ruby/ext/grpc/rb_channel_args.c +1 -0
  1079. data/src/ruby/ext/grpc/rb_channel_credentials.c +1 -0
  1080. data/src/ruby/ext/grpc/rb_completion_queue.c +7 -5
  1081. data/src/ruby/ext/grpc/rb_compression_options.c +1 -0
  1082. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -4
  1083. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +12 -6
  1084. data/src/ruby/ext/grpc/rb_server.c +1 -0
  1085. data/src/ruby/ext/grpc/rb_server_credentials.c +1 -0
  1086. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +1 -0
  1087. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +1 -0
  1088. data/src/ruby/lib/grpc/core/call_credentials.rb +86 -0
  1089. data/src/ruby/lib/grpc/core/channel_credentials.rb +69 -0
  1090. data/src/ruby/lib/grpc/core/credentials_helper.rb +126 -0
  1091. data/src/ruby/lib/grpc/generic/client_stub.rb +86 -73
  1092. data/src/ruby/lib/grpc/generic/interceptors.rb +1 -1
  1093. data/src/ruby/lib/grpc/version.rb +1 -1
  1094. data/src/ruby/lib/grpc.rb +25 -0
  1095. data/src/ruby/pb/README.md +1 -1
  1096. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  1097. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +1 -1
  1098. data/src/ruby/pb/test/client.rb +5 -4
  1099. data/src/ruby/spec/call_credentials_spec.rb +52 -2
  1100. data/src/ruby/spec/call_spec.rb +14 -0
  1101. data/src/ruby/spec/credentials_helper_spec.rb +80 -0
  1102. data/src/ruby/spec/generic/client_stub_spec.rb +27 -4
  1103. data/src/ruby/spec/generic/server_interceptors_spec.rb +14 -3
  1104. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  1105. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  1106. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  1107. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  1108. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  1109. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  1110. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  1111. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  1112. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  1113. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  1114. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  1115. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  1116. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  1117. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  1118. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  1119. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  1120. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  1121. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  1122. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  1123. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  1124. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  1125. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  1126. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  1127. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  1128. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  1129. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  1130. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  1131. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  1132. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  1133. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  1134. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  1135. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  1136. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  1137. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  1138. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  1139. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  1140. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  1141. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  1142. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  1143. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  1144. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  1145. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  1146. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  1147. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  1148. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  1149. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  1150. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  1151. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  1152. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  1153. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  1154. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  1155. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  1156. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  1157. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  1158. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  1159. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  1160. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  1161. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  1162. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  1163. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  1164. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  1165. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  1166. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  1167. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  1168. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  1169. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  1170. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  1171. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  1172. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  1173. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  1174. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  1175. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  1176. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  1177. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  1178. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  1179. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  1180. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  1181. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  1182. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  1183. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  1184. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  1185. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  1186. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  1187. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  1188. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  1189. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  1190. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  1191. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  1192. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  1193. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  1194. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  1195. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  1196. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  1197. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  1198. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  1199. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  1200. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  1201. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  1202. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  1203. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  1204. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  1205. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  1206. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  1207. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  1208. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  1209. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  1210. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  1211. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  1212. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  1213. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  1214. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  1215. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  1216. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  1217. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  1218. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  1219. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  1220. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  1221. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  1222. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  1223. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  1224. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  1225. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  1226. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  1227. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  1228. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  1229. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  1230. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  1231. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  1232. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  1233. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  1234. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  1235. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  1236. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  1237. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  1238. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  1239. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  1240. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  1241. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  1242. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  1243. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  1244. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  1245. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  1246. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  1247. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  1248. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  1249. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  1250. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  1251. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  1252. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  1253. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  1254. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  1255. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  1256. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  1257. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  1258. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  1259. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  1260. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  1261. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  1262. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  1263. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  1264. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  1265. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  1266. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  1267. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  1268. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  1269. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  1270. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  1271. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  1272. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  1273. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  1274. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  1275. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  1276. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  1277. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  1278. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  1279. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  1280. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  1281. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  1282. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  1283. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  1284. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  1285. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  1286. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  1287. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  1288. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  1289. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  1290. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  1291. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  1292. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  1293. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  1294. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  1295. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  1296. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  1297. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  1298. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  1299. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  1300. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  1301. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  1302. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  1303. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  1304. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  1305. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  1306. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  1307. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  1308. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  1309. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  1310. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  1311. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  1312. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  1313. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  1314. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  1315. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  1316. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  1317. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  1318. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  1319. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  1320. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  1321. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  1322. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  1323. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  1324. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  1325. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  1326. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  1327. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  1328. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  1329. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  1330. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  1331. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  1332. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  1333. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  1334. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  1335. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  1336. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  1337. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  1338. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  1339. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  1340. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  1341. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  1342. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  1343. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  1344. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  1345. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  1346. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  1347. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  1348. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  1349. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  1350. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  1351. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  1352. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  1353. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  1354. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  1355. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  1356. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  1357. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  1358. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  1359. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  1360. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  1361. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  1362. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  1363. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  1364. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  1365. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  1366. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  1367. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  1368. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  1369. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  1370. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  1371. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  1372. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  1373. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  1374. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  1375. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  1376. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  1377. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  1378. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  1379. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  1380. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  1381. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  1382. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  1383. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  1384. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  1385. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  1386. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  1387. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  1388. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  1389. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  1390. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  1391. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  1392. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  1393. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  1394. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  1395. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  1396. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  1397. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  1398. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  1399. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  1400. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  1401. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  1402. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  1403. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  1404. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  1405. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  1406. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  1407. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  1408. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  1409. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  1410. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  1411. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  1412. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  1413. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  1414. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  1415. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  1416. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  1417. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  1418. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  1419. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  1420. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  1421. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  1422. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  1423. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  1424. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  1425. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  1426. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  1427. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  1428. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  1429. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  1430. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  1431. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  1432. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  1433. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  1434. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  1435. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  1436. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  1437. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  1438. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  1439. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  1440. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  1441. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  1442. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  1443. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  1444. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  1445. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  1446. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  1447. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  1448. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  1449. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  1450. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  1451. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  1452. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  1453. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  1454. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  1455. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  1456. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  1457. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  1458. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  1459. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  1460. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  1461. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  1462. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  1463. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  1464. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  1465. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  1466. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  1467. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  1468. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  1469. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  1470. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  1471. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  1472. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  1473. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  1474. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  1475. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  1476. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  1477. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  1478. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  1479. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  1480. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  1481. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  1482. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  1483. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  1484. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  1485. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  1486. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  1487. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  1488. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  1489. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  1490. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  1491. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  1492. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  1493. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  1494. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  1495. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  1496. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  1497. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  1498. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  1499. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  1500. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  1501. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  1502. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  1503. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  1504. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  1505. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  1506. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  1507. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  1508. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  1509. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  1510. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  1511. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  1512. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  1513. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  1514. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  1515. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  1516. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  1517. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  1518. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  1519. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  1520. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  1521. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  1522. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  1523. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  1524. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  1525. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  1526. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  1527. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  1528. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  1529. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  1530. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  1531. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  1532. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  1533. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  1534. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  1535. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  1536. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  1537. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  1538. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  1539. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  1540. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  1541. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  1542. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  1543. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  1544. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  1545. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  1546. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  1547. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  1548. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  1549. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  1550. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  1551. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  1552. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  1553. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  1554. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  1555. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  1556. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  1557. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  1558. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  1559. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  1560. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  1561. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  1562. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  1563. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  1564. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  1565. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  1566. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  1567. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  1568. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  1569. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  1570. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  1571. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  1572. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  1573. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  1574. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  1575. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  1576. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  1577. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  1578. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  1579. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  1580. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  1581. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  1582. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  1583. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  1584. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  1585. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  1586. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  1587. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  1588. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  1589. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  1590. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  1591. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  1592. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  1593. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  1594. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  1595. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  1596. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  1597. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  1598. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  1599. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  1600. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  1601. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  1602. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  1603. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  1604. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  1605. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  1606. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  1607. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  1608. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  1609. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  1610. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  1611. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  1612. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  1613. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  1614. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  1615. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  1616. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  1617. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  1618. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  1619. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  1620. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  1621. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  1622. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  1623. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  1624. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  1625. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  1626. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  1627. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  1628. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  1629. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  1630. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  1631. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  1632. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  1633. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  1634. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  1635. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  1636. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  1637. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  1638. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  1639. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  1640. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  1641. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  1642. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  1643. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  1644. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  1645. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  1646. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  1647. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  1648. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  1649. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  1650. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  1651. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  1652. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  1653. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  1654. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  1655. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  1656. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  1657. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  1658. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  1659. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  1660. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  1661. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  1662. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  1663. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  1664. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  1665. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  1666. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  1667. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  1668. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  1669. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  1670. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  1671. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  1672. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  1673. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  1674. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  1675. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  1676. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  1677. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  1678. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  1679. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  1680. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  1681. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  1682. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  1683. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  1684. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  1685. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  1686. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  1687. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  1688. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  1689. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  1690. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  1691. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  1692. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  1693. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  1694. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  1695. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  1696. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  1697. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  1698. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  1699. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  1700. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  1701. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  1702. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  1703. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  1704. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  1705. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  1706. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  1707. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  1708. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  1709. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  1710. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  1711. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  1712. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  1713. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  1714. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  1715. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  1716. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  1717. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  1718. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  1719. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  1720. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  1721. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  1722. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  1723. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  1724. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  1725. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  1726. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  1727. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  1728. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  1729. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  1730. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  1731. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  1732. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  1733. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  1734. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  1735. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  1736. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  1737. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  1738. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  1739. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  1740. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  1741. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  1742. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  1743. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  1744. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  1745. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  1746. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  1747. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  1748. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  1749. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  1750. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  1751. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  1752. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  1753. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  1754. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  1755. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  1756. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  1757. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  1758. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  1759. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  1760. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  1761. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  1762. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  1763. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  1764. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  1765. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  1766. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  1767. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  1768. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  1769. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  1770. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  1771. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  1772. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  1773. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  1774. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  1775. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  1776. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  1777. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  1778. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  1779. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  1780. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  1781. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  1782. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  1783. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  1784. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  1785. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  1786. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  1787. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  1788. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  1789. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  1790. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  1791. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  1792. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  1793. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  1794. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  1795. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  1796. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  1797. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  1798. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  1799. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  1800. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  1801. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  1802. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  1803. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  1804. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  1805. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  1806. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  1807. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  1808. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  1809. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  1810. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  1811. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  1812. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  1813. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  1814. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  1815. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  1816. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  1817. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  1818. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  1819. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  1820. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  1821. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  1822. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  1823. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  1824. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  1825. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  1826. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  1827. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  1828. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  1829. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  1830. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  1831. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  1832. data/third_party/upb/upb/base/error_handler.h +79 -0
  1833. data/third_party/upb/upb/base/internal/log2.h +29 -5
  1834. data/third_party/upb/upb/generated_code_support.h +1 -0
  1835. data/third_party/upb/upb/hash/common.c +129 -14
  1836. data/third_party/upb/upb/hash/common.h +1 -1
  1837. data/third_party/upb/upb/hash/ext_table.h +65 -0
  1838. data/third_party/upb/upb/lex/strtod.c +14 -5
  1839. data/third_party/upb/upb/mem/arena.c +113 -95
  1840. data/third_party/upb/upb/mem/internal/arena.h +13 -8
  1841. data/third_party/upb/upb/message/accessors.c +2 -3
  1842. data/third_party/upb/upb/message/accessors.h +32 -12
  1843. data/third_party/upb/upb/message/array.c +51 -2
  1844. data/third_party/upb/upb/message/array.h +10 -0
  1845. data/third_party/upb/upb/message/copy.c +18 -34
  1846. data/third_party/upb/upb/message/internal/accessors.h +15 -49
  1847. data/third_party/upb/upb/message/internal/array.h +1 -1
  1848. data/third_party/upb/upb/message/internal/map.h +1 -1
  1849. data/third_party/upb/upb/message/internal/message.c +8 -1
  1850. data/third_party/upb/upb/message/internal/message.h +40 -10
  1851. data/third_party/upb/upb/message/message.c +3 -2
  1852. data/third_party/upb/upb/message/value.h +0 -6
  1853. data/third_party/upb/upb/mini_descriptor/decode.c +78 -59
  1854. data/third_party/upb/upb/mini_descriptor/link.c +8 -6
  1855. data/third_party/upb/upb/mini_table/extension_registry.c +17 -49
  1856. data/third_party/upb/upb/mini_table/extension_registry.h +5 -17
  1857. data/third_party/upb/upb/mini_table/generated_registry.c +180 -0
  1858. data/third_party/upb/upb/mini_table/generated_registry.h +66 -0
  1859. data/third_party/upb/upb/mini_table/internal/extension.h +5 -3
  1860. data/third_party/upb/upb/mini_table/internal/field.h +7 -5
  1861. data/third_party/upb/upb/mini_table/internal/generated_registry.h +37 -0
  1862. data/third_party/upb/upb/mini_table/internal/message.c +0 -18
  1863. data/third_party/upb/upb/mini_table/internal/message.h +24 -41
  1864. data/third_party/upb/upb/mini_table/internal/size_log2.h +2 -1
  1865. data/third_party/upb/upb/mini_table/internal/sub.h +2 -5
  1866. data/third_party/upb/upb/mini_table/message.h +34 -13
  1867. data/third_party/upb/upb/port/atomic.h +180 -74
  1868. data/third_party/upb/upb/port/def.inc +194 -29
  1869. data/third_party/upb/upb/port/sanitizers.h +15 -0
  1870. data/third_party/upb/upb/port/undef.inc +6 -2
  1871. data/third_party/upb/upb/reflection/common.h +0 -6
  1872. data/third_party/upb/upb/reflection/def.hpp +8 -12
  1873. data/third_party/upb/upb/reflection/def_pool.c +85 -33
  1874. data/third_party/upb/upb/reflection/def_pool.h +38 -8
  1875. data/third_party/upb/upb/reflection/def_type.h +3 -0
  1876. data/third_party/upb/upb/reflection/enum_def.c +45 -33
  1877. data/third_party/upb/upb/reflection/enum_def.h +8 -4
  1878. data/third_party/upb/upb/reflection/enum_reserved_range.c +7 -3
  1879. data/third_party/upb/upb/reflection/enum_value_def.c +14 -29
  1880. data/third_party/upb/upb/reflection/enum_value_def.h +5 -4
  1881. data/third_party/upb/upb/reflection/extension_range.c +15 -14
  1882. data/third_party/upb/upb/reflection/extension_range.h +7 -4
  1883. data/third_party/upb/upb/reflection/field_def.c +114 -96
  1884. data/third_party/upb/upb/reflection/field_def.h +3 -3
  1885. data/third_party/upb/upb/reflection/file_def.c +71 -65
  1886. data/third_party/upb/upb/reflection/file_def.h +4 -5
  1887. data/third_party/upb/upb/reflection/internal/def_builder.c +22 -14
  1888. data/third_party/upb/upb/reflection/internal/def_builder.h +44 -38
  1889. data/third_party/upb/upb/reflection/internal/def_pool.h +5 -1
  1890. data/third_party/upb/upb/reflection/internal/enum_def.h +6 -4
  1891. data/third_party/upb/upb/reflection/internal/enum_reserved_range.h +3 -2
  1892. data/third_party/upb/upb/reflection/internal/enum_value_def.h +7 -4
  1893. data/third_party/upb/upb/reflection/internal/extension_range.h +4 -3
  1894. data/third_party/upb/upb/reflection/internal/field_def.h +15 -12
  1895. data/third_party/upb/upb/reflection/internal/file_def.h +8 -1
  1896. data/third_party/upb/upb/reflection/internal/message_def.h +10 -7
  1897. data/third_party/upb/upb/reflection/internal/message_reserved_range.h +3 -1
  1898. data/third_party/upb/upb/reflection/internal/method_def.h +6 -6
  1899. data/third_party/upb/upb/reflection/internal/oneof_def.h +6 -6
  1900. data/third_party/upb/upb/reflection/internal/service_def.h +9 -6
  1901. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  1902. data/third_party/upb/upb/reflection/message_def.c +46 -53
  1903. data/third_party/upb/upb/reflection/message_def.h +6 -7
  1904. data/third_party/upb/upb/reflection/message_reserved_range.c +7 -6
  1905. data/third_party/upb/upb/reflection/method_def.c +22 -20
  1906. data/third_party/upb/upb/reflection/method_def.h +4 -4
  1907. data/third_party/upb/upb/reflection/oneof_def.c +17 -15
  1908. data/third_party/upb/upb/reflection/oneof_def.h +6 -3
  1909. data/third_party/upb/upb/reflection/service_def.c +50 -23
  1910. data/third_party/upb/upb/reflection/service_def.h +7 -4
  1911. data/third_party/upb/upb/text/internal/encode.c +7 -10
  1912. data/third_party/upb/upb/wire/decode.c +269 -430
  1913. data/third_party/upb/upb/wire/decode.h +6 -45
  1914. data/third_party/upb/upb/wire/decode_fast/combinations.h +7 -3
  1915. data/third_party/upb/upb/wire/decode_fast/select.c +7 -2
  1916. data/third_party/upb/upb/wire/encode.c +144 -106
  1917. data/third_party/upb/upb/wire/encode.h +6 -2
  1918. data/third_party/upb/upb/wire/eps_copy_input_stream.c +36 -7
  1919. data/third_party/upb/upb/wire/eps_copy_input_stream.h +94 -380
  1920. data/third_party/upb/upb/wire/internal/decoder.c +1 -14
  1921. data/third_party/upb/upb/wire/internal/decoder.h +84 -24
  1922. data/third_party/upb/upb/wire/internal/eps_copy_input_stream.h +339 -0
  1923. data/third_party/upb/upb/wire/internal/reader.h +29 -12
  1924. data/third_party/upb/upb/wire/reader.c +35 -22
  1925. data/third_party/upb/upb/wire/reader.h +11 -18
  1926. data/third_party/utf8_range/utf8_range.c +1 -1
  1927. data/third_party/utf8_range/utf8_range.h +2 -1
  1928. metadata +158 -96
  1929. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +0 -117
  1930. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +0 -109
  1931. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.cc +0 -80
  1932. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +0 -86
  1933. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +0 -83
  1934. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +0 -91
  1935. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  1936. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  1937. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +0 -217
  1938. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +0 -835
  1939. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +0 -108
  1940. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb_minitable.c +0 -73
  1941. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +0 -298
  1942. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +0 -97
  1943. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +0 -38
  1944. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -150
  1945. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -60
  1946. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.c +0 -199
  1947. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb_minitable.h +0 -48
  1948. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +0 -300
  1949. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb_minitable.c +0 -84
  1950. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.c +0 -213
  1951. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb_minitable.h +0 -48
  1952. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +0 -716
  1953. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  1954. data/src/core/lib/iomgr/resolve_address.cc +0 -59
  1955. data/src/core/lib/iomgr/resolve_address.h +0 -125
  1956. data/src/core/lib/iomgr/resolve_address_impl.h +0 -58
  1957. data/src/core/lib/iomgr/resolve_address_posix.cc +0 -184
  1958. data/src/core/lib/iomgr/resolve_address_posix.h +0 -78
  1959. data/src/core/lib/iomgr/resolve_address_windows.cc +0 -169
  1960. data/src/core/lib/iomgr/resolve_address_windows.h +0 -76
  1961. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +0 -781
  1962. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +0 -93
  1963. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +0 -203
  1964. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +0 -838
  1965. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +0 -1237
  1966. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +0 -130
  1967. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +0 -35
  1968. data/src/core/resolver/dns/dns_resolver_plugin.cc +0 -69
  1969. data/src/core/resolver/dns/native/dns_resolver.cc +0 -173
  1970. data/src/core/util/json/json_util.cc +0 -101
  1971. data/src/core/util/json/json_util.h +0 -163
  1972. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  1973. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  1974. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  1975. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  1976. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  1977. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  1978. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  1979. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  1980. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  1981. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  1982. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  1983. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  1984. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  1985. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  1986. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1987. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1988. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1989. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1990. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1991. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
  1992. data/third_party/upb/upb/message/internal/tagged_ptr.h +0 -56
  1993. data/third_party/upb/upb/message/tagged_ptr.h +0 -48
@@ -0,0 +1,2294 @@
1
+ //
2
+ //
3
+ // Copyright 2024 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include "src/core/ext/transport/chttp2/transport/http2_server_transport.h"
20
+
21
+ #include <grpc/event_engine/event_engine.h>
22
+ #include <grpc/grpc.h>
23
+ #include <grpc/support/port_platform.h>
24
+
25
+ #include <algorithm>
26
+ #include <cstddef>
27
+ #include <cstdint>
28
+ #include <memory>
29
+ #include <optional>
30
+ #include <string>
31
+ #include <type_traits>
32
+ #include <utility>
33
+ #include <vector>
34
+
35
+ #include "src/core/call/call_arena_allocator.h"
36
+ #include "src/core/call/call_destination.h"
37
+ #include "src/core/call/call_spine.h"
38
+ #include "src/core/call/message.h"
39
+ #include "src/core/call/metadata.h"
40
+ #include "src/core/call/metadata_batch.h"
41
+ #include "src/core/channelz/channelz.h"
42
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
43
+ #include "src/core/ext/transport/chttp2/transport/flow_control_manager.h"
44
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
45
+ #include "src/core/ext/transport/chttp2/transport/goaway.h"
46
+ #include "src/core/ext/transport/chttp2/transport/header_assembler.h"
47
+ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
48
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
49
+ #include "src/core/ext/transport/chttp2/transport/http2_settings_promises.h"
50
+ #include "src/core/ext/transport/chttp2/transport/http2_status.h"
51
+ #include "src/core/ext/transport/chttp2/transport/http2_transport.h"
52
+ #include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
53
+ #include "src/core/ext/transport/chttp2/transport/keepalive.h"
54
+ #include "src/core/ext/transport/chttp2/transport/message_assembler.h"
55
+ #include "src/core/ext/transport/chttp2/transport/ping_promise.h"
56
+ #include "src/core/ext/transport/chttp2/transport/read_context.h"
57
+ #include "src/core/ext/transport/chttp2/transport/security_frame.h"
58
+ #include "src/core/ext/transport/chttp2/transport/stream.h"
59
+ #include "src/core/ext/transport/chttp2/transport/stream_data_queue.h"
60
+ #include "src/core/ext/transport/chttp2/transport/transport_common.h"
61
+ #include "src/core/lib/channel/channel_args.h"
62
+ #include "src/core/lib/iomgr/closure.h"
63
+ #include "src/core/lib/iomgr/exec_ctx.h"
64
+ #include "src/core/lib/promise/all_ok.h"
65
+ #include "src/core/lib/promise/for_each.h"
66
+ #include "src/core/lib/promise/if.h"
67
+ #include "src/core/lib/promise/loop.h"
68
+ #include "src/core/lib/promise/map.h"
69
+ #include "src/core/lib/promise/party.h"
70
+ #include "src/core/lib/promise/poll.h"
71
+ #include "src/core/lib/promise/promise.h"
72
+ #include "src/core/lib/promise/race.h"
73
+ #include "src/core/lib/promise/sleep.h"
74
+ #include "src/core/lib/promise/status_flag.h"
75
+ #include "src/core/lib/promise/try_seq.h"
76
+ #include "src/core/lib/resource_quota/arena.h"
77
+ #include "src/core/lib/resource_quota/resource_quota.h"
78
+ #include "src/core/lib/resource_quota/telemetry.h"
79
+ #include "src/core/lib/slice/slice.h"
80
+ #include "src/core/lib/slice/slice_buffer.h"
81
+ #include "src/core/lib/transport/connectivity_state.h"
82
+ #include "src/core/lib/transport/promise_endpoint.h"
83
+ #include "src/core/lib/transport/transport.h"
84
+ #include "src/core/util/debug_location.h"
85
+ #include "src/core/util/grpc_check.h"
86
+ #include "src/core/util/latent_see.h"
87
+ #include "src/core/util/orphanable.h"
88
+ #include "src/core/util/ref_counted.h"
89
+ #include "src/core/util/ref_counted_ptr.h"
90
+ #include "src/core/util/sync.h"
91
+ #include "src/core/util/time.h"
92
+ #include "absl/container/flat_hash_map.h"
93
+ #include "absl/functional/any_invocable.h"
94
+ #include "absl/log/log.h"
95
+ #include "absl/status/status.h"
96
+ #include "absl/strings/str_cat.h"
97
+ #include "absl/strings/string_view.h"
98
+
99
+ namespace grpc_core {
100
+ namespace http2 {
101
+
102
+ using grpc_event_engine::experimental::EventEngine;
103
+ using StreamWritabilityUpdate =
104
+ StreamDataQueue<ServerMetadataHandle>::StreamWritabilityUpdate;
105
+
106
+ // Experimental : This is just the initial skeleton of class
107
+ // and it is functions. The code will be written iteratively.
108
+ // Do not use or edit any of these functions unless you are
109
+ // familiar with the PH2 project (Moving chttp2 to promises.)
110
+ // TODO(tjagtap) : [PH2][P3] : Delete this comment after CHTTP2 deletion.
111
+
112
+ constexpr bool kIsClient = false;
113
+ constexpr size_t kInitialCallArenaSize = 1024;
114
+
115
+ //////////////////////////////////////////////////////////////////////////////
116
+ // Channelz and ZTrace
117
+
118
+ RefCountedPtr<channelz::SocketNode> Http2ServerTransport::GetSocketNode()
119
+ const {
120
+ const channelz::BaseNode* node = channelz::DataSource::channelz_node();
121
+ if (node == nullptr) {
122
+ return nullptr;
123
+ }
124
+ return const_cast<channelz::BaseNode*>(node)
125
+ ->RefAsSubclass<channelz::SocketNode>();
126
+ }
127
+
128
+ void Http2ServerTransport::AddData(channelz::DataSink sink) {
129
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::AddData Begin";
130
+
131
+ event_engine_->Run([self = RefAsSubclass<Http2ServerTransport>(),
132
+ sink = std::move(sink)]() mutable {
133
+ RefCountedPtr<Party> party = nullptr;
134
+ {
135
+ MutexLock lock(self->transport_mutex_);
136
+ if (GPR_LIKELY(!self->shutdown_tracker_.IsShutdownInitiated(
137
+ self->transport_mutex_))) {
138
+ GRPC_DCHECK(self->transport_party_ != nullptr);
139
+ party = self->transport_party_;
140
+ } else {
141
+ GRPC_HTTP2_SERVER_DLOG
142
+ << "Http2ServerTransport::AddData Transport is closed.";
143
+ }
144
+ }
145
+
146
+ ExecCtx exec_ctx;
147
+ if (party != nullptr) {
148
+ self->SpawnAddChannelzData(std::move(party), std::move(sink));
149
+ }
150
+ self.reset(); // Cleanup with exec_ctx in scope
151
+ });
152
+ }
153
+
154
+ void Http2ServerTransport::SpawnAddChannelzData(RefCountedPtr<Party> party,
155
+ channelz::DataSink sink) {
156
+ SpawnInfallible(
157
+ std::move(party), "AddData",
158
+ [self = RefAsSubclass<Http2ServerTransport>(),
159
+ sink = std::move(sink)]() mutable {
160
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::SpawnAddChannelzData";
161
+ sink.AddData(
162
+ "Http2ServerTransport",
163
+ channelz::PropertyList()
164
+ .Set("keepalive_time", self->keepalive_time_)
165
+ .Set("keepalive_permit_without_calls",
166
+ self->keepalive_permit_without_calls_)
167
+ .Set("max_requests_per_read",
168
+ self->read_context_.max_new_streams_per_read_cycle())
169
+ .Set("settings", self->settings_->ChannelzProperties())
170
+ .Set("flow_control",
171
+ self->flow_control_.stats().ChannelzProperties())
172
+ .Set("tarpit", self->tarpit_manager_.ChannelzProperties()));
173
+ self->transport_party_->ExportToChannelz("Http2ServerTransport Party",
174
+ sink);
175
+ GRPC_HTTP2_SERVER_DLOG
176
+ << "Http2ServerTransport::SpawnAddChannelzData End";
177
+ return Empty{};
178
+ });
179
+ }
180
+
181
+ //////////////////////////////////////////////////////////////////////////////
182
+ // Watchers
183
+
184
+ void Http2ServerTransport::StartWatch(RefCountedPtr<StateWatcher> watcher) {
185
+ MutexLock lock(transport_mutex_);
186
+ GRPC_CHECK(watcher_ == nullptr);
187
+ watcher_ = std::move(watcher);
188
+ if (shutdown_tracker_.IsShutdownInitiated(transport_mutex_)) {
189
+ // TODO(tjagtap) : [PH2][P2] : Provide better status message and
190
+ // disconnect info here.
191
+ NotifyStateWatcherOnDisconnectLocked(
192
+ absl::UnavailableError("transport closed before watcher started"), {});
193
+ } else {
194
+ // TODO(tjagtap) : [PH2][P2] : Notify the state watcher of the current
195
+ // value of the peer's MAX_CONCURRENT_STREAMS setting.
196
+ }
197
+ }
198
+
199
+ void Http2ServerTransport::StopWatch(RefCountedPtr<StateWatcher> watcher) {
200
+ MutexLock lock(transport_mutex_);
201
+ if (watcher_ == watcher) watcher_.reset();
202
+ }
203
+
204
+ void Http2ServerTransport::StartConnectivityWatch(
205
+ grpc_connectivity_state state,
206
+ OrphanablePtr<ConnectivityStateWatcherInterface> watcher) {
207
+ MutexLock lock(transport_mutex_);
208
+ state_tracker_.AddWatcher(state, std::move(watcher));
209
+ }
210
+
211
+ void Http2ServerTransport::StopConnectivityWatch(
212
+ ConnectivityStateWatcherInterface* watcher) {
213
+ MutexLock lock(transport_mutex_);
214
+ state_tracker_.RemoveWatcher(watcher);
215
+ }
216
+
217
+ void Http2ServerTransport::NotifyStateWatcherOnDisconnectLocked(
218
+ absl::Status status, StateWatcher::DisconnectInfo disconnect_info) {
219
+ if (watcher_ == nullptr) return;
220
+ event_engine_->Run([watcher = std::move(watcher_), status = std::move(status),
221
+ disconnect_info]() mutable {
222
+ ExecCtx exec_ctx;
223
+ watcher->OnDisconnect(std::move(status), disconnect_info);
224
+ watcher.reset(); // Before ExecCtx goes out of scope.
225
+ });
226
+ }
227
+
228
+ //////////////////////////////////////////////////////////////////////////////
229
+ // Test Only Functions
230
+
231
+ int64_t Http2ServerTransport::TestOnlyTransportFlowControlWindow() {
232
+ return flow_control_.remote_window();
233
+ }
234
+
235
+ int64_t Http2ServerTransport::TestOnlyGetStreamFlowControlWindow(
236
+ const uint32_t stream_id) {
237
+ const RefCountedPtr<Stream> stream = LookupStream(stream_id);
238
+ if (stream == nullptr) {
239
+ return -1;
240
+ }
241
+ return stream->GetStreamFlowControl().remote_window_delta();
242
+ }
243
+
244
+ //////////////////////////////////////////////////////////////////////////////
245
+ // Endpoint Helpers
246
+
247
+ auto Http2ServerTransport::EndpointWrite(SliceBuffer&& output_buf) {
248
+ const size_t output_buf_length = output_buf.Length();
249
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::EndpointWrite output_buf: "
250
+ << output_buf_length;
251
+
252
+ transport_write_context_.GetWriteCycle().BeginWrite(output_buf_length);
253
+ return Map(
254
+ endpoint_.Write(std::forward<SliceBuffer>(output_buf),
255
+ TransportWriteContext::GetWriteArgs(settings_->peer())),
256
+ [this](absl::Status status) {
257
+ GRPC_HTTP2_SERVER_DLOG
258
+ << "Http2ServerTransport::EndpointWrite complete with status = "
259
+ << status;
260
+ transport_write_context_.GetWriteCycle().EndWrite(status.ok());
261
+ return status;
262
+ });
263
+ }
264
+
265
+ auto Http2ServerTransport::SerializeAndWrite() {
266
+ return AssertResultType<absl::Status>(If(
267
+ transport_write_context_.GetWriteCycle().CanSerializeRegularFrames(),
268
+ [this]() mutable {
269
+ WriteCycle& write_cycle = transport_write_context_.GetWriteCycle();
270
+ const uint64_t frame_count = write_cycle.GetRegularFrameCount();
271
+ GRPC_HTTP2_SERVER_DLOG
272
+ << "Http2ServerTransport::SerializeAndWrite frame count: "
273
+ << frame_count;
274
+ ztrace_collector_->Append(PromiseEndpointWriteTrace{frame_count});
275
+ return EndpointWrite(write_cycle.SerializeRegularFrames(
276
+ WriteCycle::SerializeStats{should_reset_ping_clock_}));
277
+ },
278
+ []() { return absl::OkStatus(); }));
279
+ }
280
+
281
+ //////////////////////////////////////////////////////////////////////////////
282
+ // Transport Read Path
283
+
284
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(Http2DataFrame&& frame) {
285
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-data
286
+ GRPC_HTTP2_SERVER_DLOG
287
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) { stream_id="
288
+ << frame.stream_id << ", end_stream:" << frame.end_stream
289
+ << ", payload length=" << frame.payload.Length() << "}";
290
+
291
+ ping_manager_->ReceivedDataFrame();
292
+
293
+ const RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
294
+
295
+ if (frame.payload.Length() > 0) {
296
+ // DATA frames with empty payload are legitimate frames. CHTTP2 and PH2 send
297
+ // empty DATA frames with END_Stream flag set to true.
298
+ ValueOrHttp2Status<chttp2::FlowControlAction> flow_control_action =
299
+ ProcessIncomingDataFrameFlowControl(
300
+ read_context_.GetCurrentFrameHeader(), flow_control_, stream.get());
301
+ if (!flow_control_action.IsOk()) {
302
+ return ValueOrHttp2Status<chttp2::FlowControlAction>::TakeStatus(
303
+ std::move(flow_control_action));
304
+ }
305
+ ActOnFlowControlAction(flow_control_action.value(), stream.get());
306
+ }
307
+
308
+ if (stream == nullptr) {
309
+ // TODO(tjagtap) : [PH2][P2] : Implement the correct behaviour later.
310
+ // RFC9113 : If a DATA frame is received whose stream is not in the "open"
311
+ // or "half-closed (local)" state, the recipient MUST respond with a stream
312
+ // error (Section 5.4.2) of type STREAM_CLOSED.
313
+ GRPC_HTTP2_SERVER_DLOG
314
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) { stream_id="
315
+ << frame.stream_id << "} Lookup Failed";
316
+ return Http2Status::Ok();
317
+ }
318
+
319
+ // TODO(akshitpatel) : [PH2][P3] : We should add a check to reset stream if
320
+ // the stream state is kIdle as well.
321
+
322
+ Http2Status stream_status = stream->CanStreamReceiveDataFrames();
323
+ if (!stream_status.IsOk()) {
324
+ return stream_status;
325
+ }
326
+
327
+ GRPC_HTTP2_SERVER_DLOG
328
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) "
329
+ "AppendNewDataFrame";
330
+ GrpcMessageAssembler& assembler = stream->GetGrpcMessageAssembler();
331
+ Http2Status status =
332
+ assembler.AppendNewDataFrame(frame.payload, frame.end_stream);
333
+ if (!status.IsOk()) {
334
+ GRPC_HTTP2_SERVER_DLOG
335
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) "
336
+ "AppendNewDataFrame Failed";
337
+ return status;
338
+ }
339
+
340
+ // Pass the messages up the stack if it is ready.
341
+ while (true) {
342
+ GRPC_HTTP2_SERVER_DLOG
343
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) "
344
+ "ExtractMessage";
345
+ ValueOrHttp2Status<MessageHandle> result = assembler.ExtractMessage();
346
+ if (!result.IsOk()) {
347
+ GRPC_HTTP2_SERVER_DLOG
348
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) "
349
+ "ExtractMessage Failed";
350
+ return ValueOrHttp2Status<MessageHandle>::TakeStatus(std::move(result));
351
+ }
352
+ MessageHandle message = TakeValue(std::move(result));
353
+ if (message != nullptr) {
354
+ GRPC_HTTP2_SERVER_DLOG
355
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) "
356
+ "SpawnPushMessage ";
357
+ stream->GetCallInitiator().SpawnPushMessage(std::move(message));
358
+ continue;
359
+ }
360
+ GRPC_HTTP2_SERVER_DLOG
361
+ << "Http2ServerTransport::ProcessIncomingFrame(DataFrame) While Break";
362
+ break;
363
+ }
364
+
365
+ if (frame.end_stream) {
366
+ HandleStreamStateChange(*stream, stream->OnHalfCloseReceived());
367
+ }
368
+ return Http2Status::Ok();
369
+ }
370
+
371
+ template <typename T>
372
+ Http2Status Http2ServerTransport::ProcessIncomingMetadata(
373
+ T&& frame, const RefCountedPtr<Stream>& stream) {
374
+ GRPC_HTTP2_SERVER_DLOG
375
+ << "Http2ServerTransport::ProcessIncomingMetadata { stream_id="
376
+ << frame.stream_id << ", end_headers=" << frame.end_headers << " }";
377
+ ping_manager_->ReceivedDataFrame();
378
+
379
+ read_context_.UpdateState(frame, /*is_existing_stream=*/stream != nullptr);
380
+
381
+ // If rejected by validators above, parse & discard payload
382
+ if (GPR_UNLIKELY(read_context_.IsDiscardingIncomingStream())) {
383
+ if (frame.end_headers) {
384
+ read_context_.SetIsDiscardingIncomingStream(false);
385
+ }
386
+ return read_context_.ParseAndDiscardHeaders(
387
+ std::move(frame.payload), frame.end_headers, Http2Status::Ok(),
388
+ settings_->acked().max_header_list_size());
389
+ }
390
+
391
+ if (stream != nullptr) {
392
+ Http2Status validation_status =
393
+ ValidateMetadataFrameState(frame, *stream, read_context_,
394
+ settings_->acked().max_header_list_size());
395
+ if (GPR_UNLIKELY(!validation_status.IsOk())) {
396
+ return validation_status;
397
+ }
398
+ }
399
+
400
+ Http2Status append_result =
401
+ read_context_.header_assembler().AppendFrame(frame);
402
+ if (GPR_UNLIKELY(!append_result.IsOk())) {
403
+ return read_context_.ParseAndDiscardHeaders(
404
+ std::move(frame.payload), frame.end_headers, std::move(append_result),
405
+ settings_->acked().max_header_list_size());
406
+ }
407
+
408
+ Http2Status status = ProcessMetadata();
409
+ if (GPR_UNLIKELY(!status.IsOk())) {
410
+ return read_context_.ParseAndDiscardHeaders(
411
+ SliceBuffer(), frame.end_headers, std::move(status),
412
+ settings_->acked().max_header_list_size());
413
+ }
414
+ return Http2Status::Ok();
415
+ }
416
+
417
+ // Based on CHTTP2's init_header_frame_parser in parsing.cc.
418
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
419
+ Http2HeaderFrame&& frame) {
420
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-headers
421
+ GRPC_HTTP2_SERVER_DLOG
422
+ << "Http2ServerTransport::ProcessIncomingFrame(HeaderFrame) end_stream="
423
+ << frame.end_stream;
424
+
425
+ const RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
426
+ const bool is_new_stream = (stream == nullptr);
427
+
428
+ if (is_new_stream) {
429
+ // Based on CHTTP2's init_header_skip_frame_parser in parsing.cc:693-699:
430
+ // When a HEADERS frame arrives for a stream not in stream_list_ and
431
+ // frame.stream_id <= last_incoming_stream_id_, this can occur for an
432
+ // out-of-order stream.
433
+ // CHTTP2 logs and invokes init_header_skip_frame_parser to parse & discard
434
+ // the headers (keeping the HPACK dynamic table synchronized) without
435
+ // emitting a connection-level PROTOCOL_ERROR that would kill all other
436
+ // concurrent RPCs.
437
+ if (GPR_UNLIKELY(frame.stream_id <= last_incoming_stream_id_)) {
438
+ GRPC_HTTP2_SERVER_DLOG
439
+ << "Http2ServerTransport::ProcessIncomingFrame(HeaderFrame) "
440
+ << "ignoring out of order new stream request on server; "
441
+ << "last_incoming_stream_id_=" << last_incoming_stream_id_
442
+ << ", stream_id=" << frame.stream_id;
443
+ read_context_.SetIsDiscardingIncomingStream(true);
444
+ return ProcessIncomingMetadata(std::forward<Http2HeaderFrame>(frame),
445
+ /*stream=*/nullptr);
446
+ }
447
+
448
+ last_incoming_stream_id_ = frame.stream_id;
449
+
450
+ if (GPR_UNLIKELY(is_goaway_received_)) {
451
+ return Http2Status::Http2ConnectionError(
452
+ Http2ErrorCode::kProtocolError,
453
+ std::string(RFC9113::kReceivedStreamAfterGoaway));
454
+ }
455
+
456
+ if (GPR_UNLIKELY(goaway_manager_.IsFinalGracefulGoawayScheduledOrSent())) {
457
+ // Based on CHTTP2's init_header_frame_parser in parsing.cc : once the
458
+ // final GOAWAY is scheduled/sent, new streams are silently skipped (no
459
+ // RST_STREAM). The payload is still fed through the HPACK decoder in
460
+ // ProcessIncomingMetadata to keep the HPACK table in sync.
461
+ GRPC_HTTP2_SERVER_DLOG
462
+ << "Http2ServerTransport::ProcessIncomingFrame(HeaderFrame) "
463
+ << "Final GOAWAY scheduled/sent. Ignoring new stream_id="
464
+ << frame.stream_id;
465
+ read_context_.SetIsDiscardingIncomingStream(true);
466
+ } else {
467
+ // ValidateIncomingStream:
468
+ // - Settings ACK quota (ReadContext check)
469
+ // - Transport shutdown / closed
470
+ // - Concurrency & overload protection
471
+ // - High memory pressure
472
+ Http2Status validation_status = ValidateIncomingStream(frame.stream_id);
473
+ if (GPR_UNLIKELY(!validation_status.IsOk())) {
474
+ if (validation_status.GetType() ==
475
+ Http2Status::Http2ErrorType::kConnectionError) {
476
+ // Connection error : the transport will be torn down. No need to
477
+ // update metadata state or keep HPACK in sync.
478
+ return validation_status;
479
+ }
480
+ GRPC_DCHECK(validation_status.GetType() ==
481
+ Http2Status::Http2ErrorType::kStreamError);
482
+ // Stream error : refuse the stream with RST_STREAM, then let
483
+ // ProcessIncomingMetadata update state and parse & discard the
484
+ // payload.
485
+ EnqueueResetStreamFromTransportParty(
486
+ frame.stream_id, Http2ErrorCodeToFrameErrorCode(
487
+ validation_status.GetStreamErrorCode()));
488
+ read_context_.SetIsDiscardingIncomingStream(true);
489
+ }
490
+ }
491
+ }
492
+
493
+ return ProcessIncomingMetadata(std::forward<Http2HeaderFrame>(frame), stream);
494
+ }
495
+
496
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
497
+ Http2RstStreamFrame&& frame) {
498
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-rst_stream
499
+ GRPC_HTTP2_SERVER_DLOG
500
+ << "Http2ServerTransport::ProcessIncomingFrame(ResetStreamFrame) { "
501
+ "stream_id="
502
+ << frame.stream_id << ", error_code=" << frame.error_code << " }";
503
+ const ShouldSendPing should_send_ping = read_context_.OnResetFrameReceived();
504
+ if (should_send_ping.should_send_ping_on_rst_stream) {
505
+ SpawnInfallibleTransportParty("PingOnResetStream",
506
+ UntilTransportClosed(PingOnResetStream()));
507
+ }
508
+
509
+ const Http2ErrorCode error_code =
510
+ FrameErrorCodeToHttp2ErrorCode(frame.error_code);
511
+ absl::Status status =
512
+ error_code == Http2ErrorCode::kNoError
513
+ ? absl::UnavailableError("RST_STREAM frame received with no error.")
514
+ : absl::Status(ErrorCodeToAbslStatusCode(error_code),
515
+ "Reset stream frame received.");
516
+ RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
517
+ if (stream != nullptr) {
518
+ // Based on CHTTP2's grpc_chttp2_rst_stream_parser_parse in
519
+ // frame_rst_stream.cc, the stream is closed immediately, even if it is
520
+ // tarpitted. This frees the MAX_CONCURRENT_STREAMS slot right away. For a
521
+ // tarpitted stream, the pending tarpit entry is dropped when it expires,
522
+ // because ActOnTarpitEntries will no longer find the stream.
523
+ GRPC_HTTP2_SERVER_DLOG
524
+ << "Http2ServerTransport::ProcessIncomingFrame(ResetStreamFrame) "
525
+ "closing stream_id="
526
+ << frame.stream_id << " is_tarpitted=" << stream->IsTarpitted();
527
+ HandleStreamStateChange(*stream,
528
+ stream->OnResetReceived(std::move(status)));
529
+ }
530
+
531
+ // In case of stream error, we do not want the Read Loop to be broken. Hence
532
+ // returning an ok status.
533
+ return Http2Status::Ok();
534
+ }
535
+
536
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
537
+ Http2SettingsFrame&& frame) {
538
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-settings
539
+
540
+ GRPC_HTTP2_SERVER_DLOG
541
+ << "Http2ServerTransport::ProcessIncomingFrame(SettingsFrame) { ack="
542
+ << frame.ack << ", settings length=" << frame.settings.size() << "}";
543
+
544
+ if (!frame.ack) {
545
+ read_context_.OnSettingsFrameReceived();
546
+ Http2Status s = settings_->BufferPeerSettings(std::move(frame.settings));
547
+ if (!s.IsOk()) {
548
+ return s;
549
+ }
550
+ const absl::Status trigger_write_status = TriggerWriteCycle();
551
+ if (!trigger_write_status.ok()) {
552
+ return ToHttpOkOrConnError(trigger_write_status);
553
+ }
554
+ if (GPR_UNLIKELY(!settings_->IsFirstPeerSettingsApplied())) {
555
+ // Apply the first settings before we read any other frames.
556
+ read_context_.SetPauseReadLoop();
557
+ }
558
+ } else {
559
+ Http2Status status = settings_->OnSettingsAckReceived();
560
+ if (!status.IsOk()) {
561
+ return status;
562
+ }
563
+ read_context_.OnSettingsAckReceived();
564
+ read_context_.SetMaxHeaderTableSize(settings_->acked().header_table_size());
565
+ read_context_.header_assembler().MaybeSetAllowTrueBinaryMetadataAcked(
566
+ settings_->acked().allow_true_binary_metadata());
567
+ ActOnFlowControlAction(flow_control_.SetAckedInitialWindow(
568
+ settings_->acked().initial_window_size()),
569
+ /*stream=*/nullptr);
570
+ }
571
+
572
+ return Http2Status::Ok();
573
+ }
574
+
575
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(Http2PingFrame&& frame) {
576
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-ping
577
+ GRPC_HTTP2_SERVER_DLOG
578
+ << "Http2ServerTransport::ProcessIncomingFrame(PingFrame) { ack="
579
+ << frame.ack << ", opaque=" << frame.opaque << " }, "
580
+ << ping_manager_->GetDebugString(!IsPingWithoutCallsAllowed() &&
581
+ IsTransportIdle());
582
+ if (frame.ack) {
583
+ return ToHttpOkOrConnError(AckPing(frame.opaque));
584
+ } else {
585
+ read_context_.OnPingFrameReceived();
586
+ if (GPR_UNLIKELY(ping_manager_->NotifyPingAbusePolicy(
587
+ !IsPingWithoutCallsAllowed() && IsTransportIdle()))) {
588
+ return Http2Status::Http2ConnectionError(Http2ErrorCode::kEnhanceYourCalm,
589
+ "too_many_pings");
590
+ }
591
+ if (test_only_ack_pings_) {
592
+ ping_manager_->AddPendingPingAck(frame.opaque);
593
+ return ToHttpOkOrConnError(TriggerWriteCycle());
594
+ } else {
595
+ GRPC_HTTP2_SERVER_DLOG
596
+ << "Http2ServerTransport::ProcessIncomingFrame(PingFrame) "
597
+ "test_only_ack_pings_ is false. Ignoring the ping request.";
598
+ }
599
+ }
600
+ return Http2Status::Ok();
601
+ }
602
+
603
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
604
+ Http2GoawayFrame&& frame) {
605
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-goaway
606
+ GRPC_HTTP2_SERVER_DLOG
607
+ << "Http2ServerTransport::ProcessIncomingFrame(GoawayFrame) { "
608
+ "last_stream_id="
609
+ << frame.last_stream_id << ", error_code=" << frame.error_code << "}";
610
+ LOG_IF(ERROR,
611
+ frame.error_code != static_cast<uint32_t>(Http2ErrorCode::kNoError))
612
+ << "Received GOAWAY frame with error code: " << frame.error_code;
613
+
614
+ is_goaway_received_ = true;
615
+
616
+ absl::Status status(ErrorCodeToAbslStatusCode(
617
+ FrameErrorCodeToHttp2ErrorCode(frame.error_code)),
618
+ frame.debug_data.empty()
619
+ ? absl::string_view("GOAWAY received")
620
+ : frame.debug_data.as_string_view());
621
+
622
+ StateWatcher::DisconnectInfo disconnect_info;
623
+ disconnect_info.reason = Transport::StateWatcher::kGoaway;
624
+ disconnect_info.http2_error_code =
625
+ FrameErrorCodeToHttp2ErrorCode(frame.error_code);
626
+
627
+ // We do not close the transport here. Instead we rely on the upper layers to
628
+ // call Orphan. Meanwhile, if the client closes the TCP connection, we will
629
+ // close transport anyway.
630
+ //
631
+ // lie: use transient failure from the transport to indicate goaway has
632
+ // been received.
633
+ ReportDisconnection(GRPC_CHANNEL_TRANSIENT_FAILURE, status, disconnect_info,
634
+ "got_goaway");
635
+ return Http2Status::Ok();
636
+ }
637
+
638
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
639
+ Http2WindowUpdateFrame&& frame) {
640
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-window_update
641
+ GRPC_HTTP2_SERVER_DLOG
642
+ << "Http2ServerTransport::ProcessIncomingFrame(WindowUpdateFrame) { "
643
+ " stream_id="
644
+ << frame.stream_id << ", increment=" << frame.increment << "}";
645
+
646
+ RefCountedPtr<Stream> stream = nullptr;
647
+ if (frame.stream_id != 0) {
648
+ stream = LookupStream(frame.stream_id);
649
+ }
650
+
651
+ const bool should_trigger_write = ProcessIncomingWindowUpdateFrameFlowControl(
652
+ frame, flow_control_, stream.get());
653
+
654
+ if (should_trigger_write) {
655
+ return ToHttpOkOrConnError(TriggerWriteCycle());
656
+ }
657
+
658
+ if (stream != nullptr) {
659
+ StreamWritabilityUpdate update =
660
+ stream->UpdateStreamWritability(GetStreamFlowControlTokens(
661
+ stream->GetStreamFlowControl(), settings_->peer()));
662
+ if (update.became_writable) {
663
+ absl::Status status = writable_stream_list_.EnqueueWrapper(
664
+ stream, update.priority, AreTransportFlowControlTokensAvailable());
665
+ if (!status.ok()) {
666
+ return ToHttpOkOrConnError(status);
667
+ }
668
+ }
669
+ }
670
+ return Http2Status::Ok();
671
+ }
672
+
673
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
674
+ Http2ContinuationFrame&& frame) {
675
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-continuation
676
+ GRPC_HTTP2_SERVER_DLOG
677
+ << "Http2ServerTransport::ProcessIncomingFrame(ContinuationFrame)";
678
+ const RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
679
+ return ProcessIncomingMetadata(std::forward<Http2ContinuationFrame>(frame),
680
+ stream);
681
+ }
682
+
683
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
684
+ Http2SecurityFrame&& frame) {
685
+ if (settings_->IsSecurityFrameExpected()) {
686
+ security_frame_handler_->ProcessPayload(std::move(frame.payload));
687
+ }
688
+ return Http2Status::Ok();
689
+ }
690
+
691
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
692
+ GRPC_UNUSED Http2UnknownFrame&& frame) {
693
+ // RFC9113: Implementations MUST ignore and discard frames of
694
+ // unknown types.
695
+ return Http2Status::Ok();
696
+ }
697
+
698
+ Http2Status Http2ServerTransport::ProcessIncomingFrame(
699
+ GRPC_UNUSED Http2EmptyFrame&& frame) {
700
+ LOG(DFATAL) << "ParseFramePayload should never return a Http2EmptyFrame";
701
+ return Http2Status::Ok();
702
+ }
703
+
704
+ Http2Status Http2ServerTransport::ProcessMetadata() {
705
+ HeaderAssembler& assembler = read_context_.header_assembler();
706
+ // CallInitiator& call = stream->GetCallInitiator();
707
+
708
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ProcessMetadata";
709
+ if (assembler.IsReady()) {
710
+ ValueOrHttp2Status<ServerMetadataHandle> read_result =
711
+ assembler.ReadMetadata(read_context_.parser(),
712
+ !read_context_.HeaderHasEndStream(),
713
+ /*max_header_list_size_soft_limit=*/
714
+ read_context_.soft_limit(),
715
+ /*max_header_list_size_hard_limit=*/
716
+ settings_->acked().max_header_list_size());
717
+ if (read_result.IsOk()) {
718
+ ServerMetadataHandle metadata = TakeValue(std::move(read_result));
719
+ // TODO(tjagtap): [PH2][P0] : Might be worth differentiating between
720
+ // initial and trailing metadata based on the number of header frames
721
+ // received.
722
+ if (read_context_.HeaderHasEndStream()) {
723
+ // TODO(akshitpatel) [PH2][P1] : Implement receiving trailing metadata.
724
+ // Details:
725
+ // - Standard gRPC clients do not send trailers (only EOS).
726
+ // - If received (HEADERS with END_STREAM), mark stream as half-closed
727
+ // remote.
728
+ // - Upper layers discard client trailers, so we are fine with not
729
+ // propagating them.
730
+ //
731
+ // With these assumptions, the flow will look like this:
732
+ // - If the client sends trailing metadata with an OK status, we will
733
+ // mark the stream as half-closed remote and do nothing else.
734
+ // - If the client sends trailing metadata with a non-OK status, this
735
+ // case needs to be handled.
736
+ // TODO(akshitpatel) : [PH2][P0] : Verify this.
737
+ RefCountedPtr<Stream> stream =
738
+ LookupStream(read_context_.GetStreamId());
739
+ HandleStreamStateChange(
740
+ *stream, stream->OnTrailingMetadataReceived(std::move(metadata)));
741
+ } else {
742
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ProcessMetadata "
743
+ "SpawnPushServerInitialMetadata";
744
+ metadata->Set(PeerString(), read_context_.peer_string());
745
+ return IncomingStream(std::move(metadata), read_context_.GetStreamId());
746
+ }
747
+ return Http2Status::Ok();
748
+ }
749
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ProcessMetadata Failed";
750
+ return ValueOrHttp2Status<Arena::PoolPtr<grpc_metadata_batch>>::TakeStatus(
751
+ std::move(read_result));
752
+ }
753
+ return Http2Status::Ok();
754
+ }
755
+
756
+ auto Http2ServerTransport::ReadAndProcessOneFrame() {
757
+ GRPC_HTTP2_SERVER_DLOG
758
+ << "Http2ServerTransport::ReadAndProcessOneFrame Factory";
759
+ return AssertResultType<absl::Status>(TrySeq(
760
+ // Fetch the first kFrameHeaderSize bytes of the Frame, these contain
761
+ // the frame header.
762
+ EndpointReadSlice(kFrameHeaderSize),
763
+ // Parse the frame header.
764
+ [this](Slice header_bytes) {
765
+ Http2FrameHeader header = Http2FrameHeader::Parse(header_bytes.begin());
766
+ // Validate the incoming frame as per the current state of the transport
767
+ Http2Status status = read_context_.ValidateHeader(
768
+ /*max_frame_size_setting=*/settings_->acked().max_frame_size(),
769
+ /*current_frame_header=*/header,
770
+ /*last_stream_id=*/GetLastStreamId(),
771
+ /*is_first_settings_processed=*/
772
+ settings_->IsFirstPeerSettingsApplied());
773
+
774
+ if (GPR_UNLIKELY(!status.IsOk())) {
775
+ GRPC_DCHECK(status.GetType() ==
776
+ Http2Status::Http2ErrorType::kConnectionError);
777
+ return HandleError(/*stream=*/nullptr, std::move(status));
778
+ }
779
+ read_context_.SetCurrentFrameHeader(header);
780
+ return absl::OkStatus();
781
+ },
782
+ // Read the payload of the frame.
783
+ [this]() {
784
+ GRPC_HTTP2_SERVER_DLOG
785
+ << "Http2ServerTransport::ReadAndProcessOneFrame Read Frame ";
786
+ return AssertResultType<absl::Status>(
787
+ Map(EndpointRead(read_context_.GetCurrentFrameHeader().length),
788
+ [this](absl::StatusOr<SliceBuffer>&& payload) {
789
+ if (GPR_UNLIKELY(!payload.ok())) {
790
+ return payload.status();
791
+ }
792
+ GRPC_HTTP2_SERVER_DLOG
793
+ << "Http2ServerTransport::ReadAndProcessOneFrame "
794
+ "ParseFramePayload payload length: "
795
+ << payload.value().Length();
796
+ ValueOrHttp2Status<Http2Frame> frame =
797
+ ParseFramePayload(read_context_.GetCurrentFrameHeader(),
798
+ TakeValue(std::move(payload)));
799
+ if (GPR_UNLIKELY(!frame.IsOk())) {
800
+ return HandleError(
801
+ LookupStream(
802
+ read_context_.GetCurrentFrameHeader().stream_id),
803
+ ValueOrHttp2Status<Http2Frame>::TakeStatus(
804
+ std::move(frame)));
805
+ }
806
+ Http2Status status =
807
+ ProcessOneIncomingFrame(TakeValue(std::move(frame)));
808
+ if (GPR_UNLIKELY(!status.IsOk())) {
809
+ return HandleError(
810
+ LookupStream(
811
+ read_context_.GetCurrentFrameHeader().stream_id),
812
+ std::move(status));
813
+ }
814
+ return absl::OkStatus();
815
+ }));
816
+ },
817
+ [this]() -> Poll<absl::Status> {
818
+ Poll<absl::Status> poll_result = read_context_.MaybePauseReadLoop();
819
+ if (poll_result.pending()) {
820
+ TriggerWriteCycleOrHandleError();
821
+ }
822
+ return poll_result;
823
+ }));
824
+ }
825
+
826
+ auto Http2ServerTransport::ReadLoop() {
827
+ return AssertResultType<absl::Status>(Loop([this]() {
828
+ return TrySeq(ReadAndProcessOneFrame(), []() -> LoopCtl<absl::Status> {
829
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ReadLoop Continue";
830
+ return Continue();
831
+ });
832
+ }));
833
+ }
834
+
835
+ //////////////////////////////////////////////////////////////////////////////
836
+ // Transport Write Path
837
+
838
+ absl::Status Http2ServerTransport::PrepareControlFrames() {
839
+ FrameSender frame_sender =
840
+ transport_write_context_.GetWriteCycle().GetFrameSender();
841
+ if (transport_write_context_.IsFirstWrite()) {
842
+ // Send the first settings frame.
843
+ settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_,
844
+ frame_sender);
845
+ }
846
+
847
+ // Order of Control Frames is important.
848
+ // 1. GOAWAY - This is first because if this is the final GoAway, then we may
849
+ // not need to send anything else to the peer.
850
+ // 2. SETTINGS and SETTINGS ACK
851
+ // 3. PING and PING acks.
852
+ // 4. WINDOW_UPDATE
853
+ // 5. Custom gRPC security frame
854
+
855
+ goaway_manager_.MaybeGetSerializedGoawayFrame(frame_sender);
856
+ ApplySettingsResult apply_settings_result;
857
+
858
+ const uint32_t old_initial_window_size =
859
+ settings_->peer().initial_window_size();
860
+ const http2::Http2ErrorCode apply_status =
861
+ settings_->MaybeReportAndApplyBufferedPeerSettings(event_engine_.get(),
862
+ apply_settings_result);
863
+
864
+ if (apply_status == http2::Http2ErrorCode::kNoError) {
865
+ const uint32_t new_initial_window_size =
866
+ settings_->peer().initial_window_size();
867
+ if (new_initial_window_size > old_initial_window_size) {
868
+ // TODO(akshitpatel) [PH2][P5] : Currently, if calling
869
+ // UpdateAllStreamsWritability() makes one or more streams writable. Once
870
+ // a stream is writable, it is enqueued to the writable stream list.
871
+ // However, these streams are not written out until the next write cycle.
872
+ // Might be worth considering to write out these streams immediately.
873
+ settings_->IncrementInitialWindowSizeIncreaseCount();
874
+ absl::Status status = UpdateAllStreamsWritability();
875
+ if (GPR_UNLIKELY(!status.ok())) {
876
+ return status;
877
+ }
878
+ }
879
+ }
880
+
881
+ if (apply_settings_result.should_spawn_security_frame_loop) {
882
+ const SecurityFrameHandler::EndpointExtensionState state =
883
+ security_frame_handler_->Initialize(event_engine_);
884
+ if (state.is_set) {
885
+ SpawnInfallibleTransportParty("SecurityFrameLoop",
886
+ UntilTransportClosed(SecurityFrameLoop()));
887
+ }
888
+ }
889
+
890
+ if (!goaway_manager_.IsImmediateGoAway() &&
891
+ apply_status == http2::Http2ErrorCode::kNoError) {
892
+ EnforceLatestIncomingSettings();
893
+ settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_,
894
+ frame_sender);
895
+ MaybeSpawnDelayedPing(ping_manager_->MaybeGetSerializedPingFrames(
896
+ frame_sender, NextAllowedPingInterval()));
897
+ MaybeGetWindowUpdateFrames(frame_sender);
898
+ security_frame_handler_->MaybeAppendSecurityFrame(frame_sender);
899
+ }
900
+
901
+ if (apply_status != http2::Http2ErrorCode::kNoError) {
902
+ return HandleError(/*stream=*/nullptr,
903
+ Http2Status::Http2ConnectionError(
904
+ apply_status, "Failed to apply incoming settings"));
905
+ }
906
+
907
+ return absl::OkStatus();
908
+ }
909
+
910
+ auto Http2ServerTransport::MaybeWriteUrgentFrames() {
911
+ return AssertResultType<absl::Status>(If(
912
+ transport_write_context_.GetWriteCycle().CanSerializeUrgentFrames(),
913
+ [this]() mutable {
914
+ WriteCycle& write_cycle = transport_write_context_.GetWriteCycle();
915
+ const uint64_t buffer_length = write_cycle.GetUrgentFrameCount();
916
+ ztrace_collector_->Append(PromiseEndpointWriteTrace{buffer_length});
917
+ GRPC_HTTP2_SERVER_DLOG
918
+ << "Http2ServerTransport::MaybeWriteUrgentFrames frame count: "
919
+ << buffer_length;
920
+ return EndpointWrite(write_cycle.SerializeUrgentFrames(
921
+ WriteCycle::SerializeStats{should_reset_ping_clock_}));
922
+ },
923
+ []() { return absl::OkStatus(); }));
924
+ }
925
+
926
+ void Http2ServerTransport::NotifyFramesWriteDone() {
927
+ // Notify Control modules that we have sent the frames.
928
+ // All notifications are expected to be synchronous.
929
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::NotifyFramesWriteDone";
930
+ read_context_.ResumeReadLoopIfPaused();
931
+ MaybeSpawnPingTimeout(ping_manager_->NotifyPingSent());
932
+ goaway_manager_.NotifyGoawaySent();
933
+ MaybeSpawnWaitForSettingsTimeout();
934
+ }
935
+
936
+ void Http2ServerTransport::NotifyUrgentFramesWriteDone() {}
937
+
938
+ absl::Status Http2ServerTransport::DequeueStreamFrames(
939
+ RefCountedPtr<Stream> stream, WriteCycle& write_cycle) {
940
+ // write_bytes_remaining_ is passed as an upper bound on the max
941
+ // number of tokens that can be dequeued to prevent dequeuing huge
942
+ // data frames when write_bytes_remaining_ is very low. As the
943
+ // available transport tokens can only range from 0 to 2^31 - 1,
944
+ // we are clamping the write_bytes_remaining_ to that range.
945
+ FrameSender frame_sender = write_cycle.GetFrameSender();
946
+ const uint32_t tokens = GetMaxPermittedDequeue(
947
+ flow_control_, stream->GetStreamFlowControl(),
948
+ write_cycle.GetWriteBytesRemaining(), settings_->peer());
949
+ const uint32_t stream_flow_control_tokens =
950
+ static_cast<uint32_t>(GetStreamFlowControlTokens(
951
+ stream->GetStreamFlowControl(), settings_->peer()));
952
+ stream->GetStreamFlowControl().ReportIfStalled(
953
+ /*is_client=*/kIsClient, stream->GetStreamId(), settings_->peer());
954
+ StreamDataQueue<ServerMetadataHandle>::DequeueResult result =
955
+ stream->DequeueFrames(tokens, stream_flow_control_tokens,
956
+ settings_->peer().max_frame_size(), encoder_,
957
+ frame_sender);
958
+ ProcessOutgoingDataFrameFlowControl(stream->GetStreamFlowControl(),
959
+ result.flow_control_tokens_consumed);
960
+ if (result.is_writable) {
961
+ // Stream is still writable. Enqueue it back to the writable
962
+ // stream list.
963
+ absl::Status status = writable_stream_list_.EnqueueWrapper(
964
+ stream, result.priority, AreTransportFlowControlTokensAvailable());
965
+
966
+ if (GPR_UNLIKELY(!status.ok())) {
967
+ GRPC_HTTP2_SERVER_DLOG
968
+ << "Http2ServerTransport::DequeueStreamFrames Failed to "
969
+ "enqueue stream "
970
+ << stream->GetStreamId() << " with status: " << status;
971
+ // Close transport if we fail to enqueue stream.
972
+ return HandleError(/*stream=*/nullptr, ToHttpOkOrConnError(status));
973
+ }
974
+ }
975
+
976
+ if (result.IsInitialMetadataDequeued()) {
977
+ GRPC_HTTP2_SERVER_DLOG
978
+ << "Http2ServerTransport::DequeueStreamFrames InitialMetadataDequeued "
979
+ "stream_id = "
980
+ << stream->GetStreamId();
981
+ }
982
+
983
+ if (result.IsTrailingMetadataDequeued()) {
984
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::DequeueStreamFrames "
985
+ "TrailingMetadataDequeued stream_id = "
986
+ << stream->GetStreamId();
987
+ // Stream is not marked closed here as TrailingMetadata is always followed
988
+ // by RST_STREAM and we close the stream when we dequeue the RST_STREAM.
989
+ }
990
+
991
+ if (result.IsResetStreamDequeued()) {
992
+ GRPC_HTTP2_SERVER_DLOG
993
+ << "Http2ServerTransport::DequeueStreamFrames ResetStreamDequeued "
994
+ "stream_id = "
995
+ << stream->GetStreamId();
996
+ // As Trailing metadata is already read from CallInitiator, no need to send
997
+ // a status to the application.
998
+ HandleStreamStateChange(*stream, stream->OnResetSent());
999
+ }
1000
+
1001
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::DequeueStreamFrames "
1002
+ "After dequeue: "
1003
+ << write_cycle.DebugString()
1004
+ << " stream_id = " << stream->GetStreamId()
1005
+ << " is_writable = " << result.is_writable
1006
+ << " stream_priority = "
1007
+ << static_cast<uint8_t>(result.priority);
1008
+ return absl::OkStatus();
1009
+ }
1010
+
1011
+ // This MultiplexerLoop promise is responsible for Multiplexing multiple gRPC
1012
+ // Requests (HTTP2 Streams) and writing them into one common endpoint.
1013
+ auto Http2ServerTransport::MultiplexerLoop() {
1014
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::MultiplexerLoop Factory";
1015
+ return AssertResultType<absl::Status>(Loop([this]() {
1016
+ return TrySeq(
1017
+ Map(writable_stream_list_.WaitForReady(
1018
+ AreTransportFlowControlTokensAvailable()),
1019
+ [this](absl::StatusOr<Empty> status) -> absl::Status {
1020
+ if (GPR_UNLIKELY(!status.ok())) {
1021
+ return status.status();
1022
+ }
1023
+ transport_write_context_.StartWriteCycle();
1024
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::MultiplexerLoop "
1025
+ "Start Iteration: "
1026
+ << transport_write_context_.DebugString();
1027
+ return PrepareControlFrames();
1028
+ }),
1029
+ [this] {
1030
+ return Map(MaybeWriteUrgentFrames(), [this](absl::Status status) {
1031
+ if (GPR_UNLIKELY(!status.ok())) {
1032
+ return status;
1033
+ }
1034
+ NotifyUrgentFramesWriteDone();
1035
+ WriteCycle& write_cycle = transport_write_context_.GetWriteCycle();
1036
+ // Drain all the writable streams till we have written
1037
+ // max_write_size_ bytes of data or there is no more data to send.
1038
+ // In some cases, we may write more than max_write_size_ bytes(like
1039
+ // writing metadata).
1040
+ while (write_cycle.GetWriteBytesRemaining() > 0) {
1041
+ std::optional<RefCountedPtr<Stream>> optional_stream =
1042
+ writable_stream_list_.ImmediateNext(
1043
+ AreTransportFlowControlTokensAvailable());
1044
+ if (!optional_stream.has_value()) {
1045
+ GRPC_HTTP2_SERVER_DLOG
1046
+ << "Http2ServerTransport::MultiplexerLoop "
1047
+ "No writable streams available ";
1048
+ break;
1049
+ }
1050
+ RefCountedPtr<Stream> stream = std::move(optional_stream.value());
1051
+ GRPC_HTTP2_SERVER_DLOG
1052
+ << "Http2ServerTransport::MultiplexerLoop "
1053
+ "Next writable stream id = "
1054
+ << stream->GetStreamId()
1055
+ << " is_closed_for_writes = " << stream->IsClosedForWrites();
1056
+ GRPC_DCHECK_NE(stream->GetStreamId(), kInvalidStreamId);
1057
+
1058
+ if (GPR_LIKELY(!stream->IsClosedForWrites())) {
1059
+ absl::Status status = DequeueStreamFrames(
1060
+ std::move(stream),
1061
+ transport_write_context_.GetWriteCycle());
1062
+ if (GPR_UNLIKELY(!status.ok())) {
1063
+ GRPC_HTTP2_SERVER_DLOG
1064
+ << "Http2ServerTransport::MultiplexerLoop "
1065
+ "Failed to dequeue stream frames with status: "
1066
+ << status;
1067
+ return status;
1068
+ }
1069
+ }
1070
+ }
1071
+
1072
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::MultiplexerLoop "
1073
+ "After draining all writable streams "
1074
+ << write_cycle.DebugString();
1075
+
1076
+ return absl::OkStatus();
1077
+ });
1078
+ },
1079
+ [this]() {
1080
+ return Map(SerializeAndWrite(), [this](absl::Status status) {
1081
+ if (GPR_UNLIKELY(!status.ok())) {
1082
+ return status;
1083
+ }
1084
+ NotifyFramesWriteDone();
1085
+ return absl::OkStatus();
1086
+ });
1087
+ },
1088
+ [this]() -> LoopCtl<absl::Status> {
1089
+ if (should_reset_ping_clock_) {
1090
+ GRPC_HTTP2_SERVER_DLOG
1091
+ << "Http2ServerTransport::MultiplexerLoop ResetPingClock";
1092
+ ping_manager_->ResetPingClock(/*is_client=*/kIsClient);
1093
+ should_reset_ping_clock_ = false;
1094
+ }
1095
+ transport_write_context_.EndWriteCycle();
1096
+ return Continue();
1097
+ });
1098
+ }));
1099
+ }
1100
+
1101
+ //////////////////////////////////////////////////////////////////////////////
1102
+ // Settings
1103
+
1104
+ void Http2ServerTransport::EnforceLatestIncomingSettings() {
1105
+ encoder_.SetMaxTableSize(settings_->peer().header_table_size());
1106
+ }
1107
+
1108
+ auto Http2ServerTransport::WaitForSettingsTimeoutOnDone() {
1109
+ return [self = RefAsSubclass<Http2ServerTransport>()](absl::Status status) {
1110
+ if (!status.ok()) {
1111
+ GRPC_UNUSED absl::Status result = self->HandleError(
1112
+ /*stream=*/nullptr, Http2Status::Http2ConnectionError(
1113
+ Http2ErrorCode::kProtocolError,
1114
+ std::string(RFC9113::kSettingsTimeout)));
1115
+ }
1116
+ };
1117
+ }
1118
+
1119
+ void Http2ServerTransport::MaybeSpawnWaitForSettingsTimeout() {
1120
+ if (settings_->ShouldSpawnWaitForSettingsTimeout()) {
1121
+ GRPC_HTTP2_SERVER_DLOG
1122
+ << "Http2ServerTransport::MaybeSpawnWaitForSettingsTimeout Spawning";
1123
+ SpawnWithOnDoneTransportParty("WaitForSettingsTimeout",
1124
+ settings_->WaitForSettingsTimeout(),
1125
+ WaitForSettingsTimeoutOnDone());
1126
+ }
1127
+ }
1128
+
1129
+ //////////////////////////////////////////////////////////////////////////////
1130
+ // Flow Control and BDP
1131
+
1132
+ // Equivalent to grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
1133
+ void Http2ServerTransport::ActOnFlowControlAction(
1134
+ const chttp2::FlowControlAction& action, Stream* stream) {
1135
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ActOnFlowControlAction"
1136
+ << action.DebugString();
1137
+ if (action.send_stream_update() != kNoActionNeeded) {
1138
+ if (GPR_LIKELY(stream != nullptr)) {
1139
+ GRPC_DCHECK_GT(stream->GetStreamId(), 0u);
1140
+ if (stream->CanSendWindowUpdateFrames()) {
1141
+ flow_control_.AddStreamToWindowUpdateList(stream->GetStreamId());
1142
+ GRPC_HTTP2_SERVER_DLOG
1143
+ << "Http2ServerTransport::ActOnFlowControlAction "
1144
+ "added stream "
1145
+ << stream->GetStreamId() << " to window_update_list_";
1146
+ }
1147
+ } else {
1148
+ GRPC_HTTP2_SERVER_DLOG
1149
+ << "Http2ServerTransport::ActOnFlowControlAction stream is null";
1150
+ }
1151
+ }
1152
+
1153
+ ActOnFlowControlActionSettings(action, settings_->mutable_local());
1154
+
1155
+ if (action.AnyUpdateImmediately()) {
1156
+ // Prioritize sending flow control updates over reading data. If we
1157
+ // continue reading while urgent flow control updates are pending, we might
1158
+ // exhaust the flow control window. This prevents us from sending window
1159
+ // updates to the peer, causing the peer to block unnecessarily while
1160
+ // waiting for flow control tokens.
1161
+ read_context_.SetPauseReadLoop();
1162
+ if (!TriggerWriteCycleOrHandleError()) {
1163
+ return;
1164
+ }
1165
+
1166
+ GRPC_HTTP2_SERVER_DLOG << "Update Immediately : "
1167
+ << action.ImmediateUpdateReasons();
1168
+ }
1169
+ }
1170
+
1171
+ void Http2ServerTransport::MaybeGetWindowUpdateFrames(
1172
+ FrameSender& frame_sender) {
1173
+ frame_sender.ReserveRegularFrames(flow_control_.window_update_list_size() +
1174
+ 1);
1175
+ MaybeAddTransportWindowUpdateFrame(flow_control_, frame_sender);
1176
+ for (const uint32_t stream_id : flow_control_.DrainWindowUpdateList()) {
1177
+ RefCountedPtr<Stream> stream = LookupStream(stream_id);
1178
+ if (stream != nullptr) {
1179
+ MaybeAddStreamWindowUpdateFrame(*stream, frame_sender);
1180
+ }
1181
+ }
1182
+ }
1183
+
1184
+ auto Http2ServerTransport::BdpLoop() {
1185
+ return AssertResultType<absl::Status>(Loop([this]() {
1186
+ return TrySeq(
1187
+ flow_control_.WaitForBdpActivation(),
1188
+ [this]() {
1189
+ // TODO(akshitpatel) : [PH2][P1] : Reset the keepalive ping timer
1190
+ // when a BDP ping is sent, similar to CHTTP2's start_bdp_ping_locked.
1191
+ TriggerWriteCycleOrHandleError();
1192
+ return ping_manager_->RequestPing(
1193
+ [this] { flow_control_.StartBdpPing(); },
1194
+ /*important=*/false);
1195
+ },
1196
+ [this]() {
1197
+ Duration sleep_duration = flow_control_.CompleteBdpPing();
1198
+ chttp2::FlowControlAction action = flow_control_.PeriodicUpdate();
1199
+ ActOnFlowControlAction(action, nullptr);
1200
+ return Sleep(sleep_duration);
1201
+ },
1202
+ []() -> LoopCtl<absl::Status> { return Continue{}; });
1203
+ }));
1204
+ }
1205
+
1206
+ //////////////////////////////////////////////////////////////////////////////
1207
+ // Stream List Operations
1208
+
1209
+ RefCountedPtr<Stream> Http2ServerTransport::LookupStream(
1210
+ const uint32_t stream_id) {
1211
+ MutexLock lock(transport_mutex_);
1212
+ auto it = stream_list_.find(stream_id);
1213
+ if (it == stream_list_.end()) {
1214
+ GRPC_HTTP2_SERVER_DLOG
1215
+ << "Http2ServerTransport::LookupStream Stream not found stream_id="
1216
+ << stream_id;
1217
+ return nullptr;
1218
+ }
1219
+ return it->second;
1220
+ }
1221
+
1222
+ void Http2ServerTransport::AddToStreamList(RefCountedPtr<Stream> stream) {
1223
+ MutexLock lock(transport_mutex_);
1224
+ GRPC_DCHECK(stream != nullptr) << "stream is null";
1225
+ GRPC_DCHECK_GT(stream->GetStreamId(), 0u) << "stream id is invalid";
1226
+ GRPC_HTTP2_SERVER_DLOG
1227
+ << "Http2ServerTransport::AddToStreamList for stream id: "
1228
+ << stream->GetStreamId();
1229
+ const uint32_t stream_id = stream->GetStreamId();
1230
+ stream_list_.emplace(stream_id, std::move(stream));
1231
+ }
1232
+
1233
+ void Http2ServerTransport::EnqueueResetStreamFromTransportParty(
1234
+ const uint32_t stream_id, const uint32_t reset_stream_error_code) {
1235
+ GRPC_HTTP2_SERVER_DLOG << "Enqueued ResetStream for stream_id=" << stream_id
1236
+ << " with error code=" << reset_stream_error_code;
1237
+ // When no Stream object exists yet (e.g. stream rejected during
1238
+ // validation), queue RST_STREAM directly on transport write context.
1239
+ transport_write_context_.AddRstFrame(stream_id, reset_stream_error_code);
1240
+ TriggerWriteCycleOrHandleError();
1241
+ read_context_.OnResetFrameEnqueued(reset_stream_error_code);
1242
+ }
1243
+
1244
+ void Http2ServerTransport::EnqueueResetStreamFromTransportParty(
1245
+ RefCountedPtr<Stream> stream, const uint32_t reset_stream_error_code) {
1246
+ GRPC_DCHECK(stream != nullptr);
1247
+ const absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1248
+ stream->EnqueueResetStream(reset_stream_error_code);
1249
+ GRPC_HTTP2_SERVER_DLOG << "Enqueued ResetStream with error code="
1250
+ << reset_stream_error_code
1251
+ << " status=" << enqueue_result.status();
1252
+ if (GPR_LIKELY(enqueue_result.ok())) {
1253
+ GRPC_UNUSED const absl::Status status = MaybeAddStreamToWritableStreamList(
1254
+ std::move(stream), enqueue_result.value());
1255
+ }
1256
+ // This function could be hit multiple times for the same stream. So there is
1257
+ // a chance that we may overcount induced frames.
1258
+ // It is a bug, but not worth fixing for now.
1259
+ read_context_.OnResetFrameEnqueued(reset_stream_error_code);
1260
+ }
1261
+
1262
+ absl::Status Http2ServerTransport::MaybeAddStreamToWritableStreamList(
1263
+ RefCountedPtr<Stream> stream,
1264
+ const StreamDataQueue<ServerMetadataHandle>::StreamWritabilityUpdate
1265
+ result) {
1266
+ if (result.became_writable) {
1267
+ GRPC_HTTP2_SERVER_DLOG
1268
+ << "Http2ServerTransport::MaybeAddStreamToWritableStreamList Stream "
1269
+ "id: "
1270
+ << stream->GetStreamId() << " became writable";
1271
+ // TODO(akshitpatel) [PH2][P4][Perf]: Might be worth exploring if this
1272
+ // function should take a raw stream ptr and take a ref here.
1273
+ absl::Status status =
1274
+ writable_stream_list_.Enqueue(std::move(stream), result.priority);
1275
+ if (!status.ok()) {
1276
+ return HandleError(
1277
+ /*stream=*/nullptr,
1278
+ Http2Status::Http2ConnectionError(
1279
+ Http2ErrorCode::kRefusedStream,
1280
+ std::string(GrpcErrors::kFailedToEnqueueStream)));
1281
+ }
1282
+ }
1283
+ return absl::OkStatus();
1284
+ }
1285
+
1286
+ //////////////////////////////////////////////////////////////////////////////
1287
+ // Stream Operations
1288
+ auto Http2ServerTransport::HandleMetadataAndMessages(
1289
+ RefCountedPtr<Stream> stream) {
1290
+ auto send_message = [this, stream](MessageHandle&& message) mutable {
1291
+ return TrySeq(HandleStreamErrorOnFailure(
1292
+ stream->EnqueueMessage(std::move(message)), stream),
1293
+ [this, stream](const StreamWritabilityUpdate result) mutable {
1294
+ GRPC_HTTP2_SERVER_DLOG
1295
+ << "Http2ServerTransport::HandleMetadataAndMessages "
1296
+ "Enqueued Message";
1297
+ return MaybeAddStreamToWritableStreamList(std::move(stream),
1298
+ result);
1299
+ });
1300
+ };
1301
+
1302
+ auto send_initial_metadata = [this, stream](
1303
+ ServerMetadataHandle&& metadata) mutable {
1304
+ absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1305
+ stream->EnqueueInitialMetadata(
1306
+ std::forward<ServerMetadataHandle>(metadata));
1307
+ if (GPR_UNLIKELY(!enqueue_result.ok())) {
1308
+ absl::Status status = enqueue_result.status();
1309
+ GRPC_UNUSED absl::Status unused = HandleError(
1310
+ stream, Http2Status::AbslStreamError(status.code(),
1311
+ std::string(status.message())));
1312
+ return status;
1313
+ }
1314
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::HandleMetadataAndMessages "
1315
+ "Enqueued Initial Metadata";
1316
+ return MaybeAddStreamToWritableStreamList(std::move(stream),
1317
+ enqueue_result.value());
1318
+ };
1319
+
1320
+ return TrySeq(
1321
+ Map(stream->GetCallInitiator().PullServerInitialMetadata(),
1322
+ [send_initial_metadata = std::move(send_initial_metadata)](
1323
+ std::optional<ServerMetadataHandle> initial_metadata) mutable {
1324
+ if (initial_metadata.has_value()) {
1325
+ return send_initial_metadata(std::move(initial_metadata).value());
1326
+ }
1327
+ return absl::OkStatus();
1328
+ }),
1329
+ ForEach(MessagesFrom(stream->GetCallInitiator()),
1330
+ std::move(send_message)));
1331
+ }
1332
+
1333
+ auto Http2ServerTransport::CallOutboundLoop(RefCountedPtr<Stream> stream) {
1334
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::CallOutboundLoop";
1335
+ GRPC_DCHECK(stream != nullptr);
1336
+
1337
+ auto send_trailing_metadata = [this, stream](
1338
+ ServerMetadataHandle&& metadata) mutable {
1339
+ GRPC_DCHECK(metadata != nullptr);
1340
+ // Barrier: If stream is closed for writes or actively tarpitted, drop
1341
+ // trailing metadata.
1342
+ if (GPR_UNLIKELY(stream->IsClosedForWrites() ||
1343
+ stream->IsTarpitTimerActive())) {
1344
+ GRPC_HTTP2_SERVER_DLOG
1345
+ << "Http2ServerTransport::CallOutboundLoop ignoring trailing "
1346
+ "metadata for stream_id="
1347
+ << stream->GetStreamId()
1348
+ << " (writes_closed=" << stream->IsClosedForWrites()
1349
+ << ", tarpit_active=" << stream->IsTarpitTimerActive() << ")";
1350
+ return absl::OkStatus();
1351
+ }
1352
+
1353
+ if (metadata->get(GrpcTarPit()).has_value() &&
1354
+ tarpit_manager_.allow_tarpit()) {
1355
+ GRPC_HTTP2_SERVER_DLOG
1356
+ << "Http2ServerTransport::CallOutboundLoop Enqueuing Trailing "
1357
+ "Metadata for tarpitting, stream_id="
1358
+ << stream->GetStreamId();
1359
+ StatusFlag tarpit_status = tarpit_manager_.StartTarpitTrailers(
1360
+ stream->GetStreamId(), std::move(metadata));
1361
+ if (GPR_UNLIKELY(!tarpit_status.ok())) {
1362
+ MaybeSpawnCloseTransport(Http2Status::Http2ConnectionError(
1363
+ Http2ErrorCode::kInternalError, "Failed to enqueue tarpit entry"));
1364
+ return absl::InternalError("Failed to enqueue tarpit entry");
1365
+ }
1366
+ return absl::OkStatus();
1367
+ }
1368
+ const absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1369
+ stream->EnqueueTrailingMetadata(std::move(metadata));
1370
+ if (GPR_UNLIKELY(!enqueue_result.ok())) {
1371
+ GRPC_HTTP2_SERVER_DLOG
1372
+ << "Http2ServerTransport::CallOutboundLoop Failed to enqueue "
1373
+ "trailing metadata: "
1374
+ << enqueue_result.status();
1375
+ return enqueue_result.status();
1376
+ }
1377
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::CallOutboundLoop "
1378
+ "Enqueued Trailing Metadata";
1379
+ return MaybeAddStreamToWritableStreamList(std::move(stream),
1380
+ enqueue_result.value());
1381
+ };
1382
+
1383
+ return GRPC_LATENT_SEE_PROMISE(
1384
+ "Ph2CallOutboundLoop",
1385
+ Seq(Map(HandleMetadataAndMessages(stream),
1386
+ [stream = stream.get()](absl::Status&& status) {
1387
+ GRPC_HTTP2_SERVER_DLOG
1388
+ << "Http2ServerTransport::CallOutboundLoop "
1389
+ "Completed initial metadata and messages with status: "
1390
+ << status;
1391
+ return Empty{};
1392
+ }),
1393
+ [stream, send_trailing_metadata =
1394
+ std::move(send_trailing_metadata)]() mutable {
1395
+ return Map(
1396
+ stream->GetCallInitiator().PullServerTrailingMetadata(),
1397
+ [send_trailing_metadata = std::move(send_trailing_metadata)](
1398
+ ServerMetadataHandle&& metadata) mutable {
1399
+ GRPC_HTTP2_SERVER_DLOG
1400
+ << "Http2ServerTransport::CallOutboundLoop "
1401
+ "Received Server Trailing Metadata";
1402
+ return send_trailing_metadata(std::move(metadata));
1403
+ });
1404
+ }));
1405
+ }
1406
+
1407
+ absl::Status Http2ServerTransport::InitializeStream(
1408
+ GRPC_UNUSED Stream& stream) {
1409
+ GRPC_DCHECK(false) << "Should not be called for server";
1410
+ return absl::OkStatus();
1411
+ }
1412
+
1413
+ std::optional<RefCountedPtr<Stream>> Http2ServerTransport::MakeStream(
1414
+ CallInitiator&& call_initiator, const uint32_t stream_id) {
1415
+ return MakeRefCounted<Stream>(call_initiator, flow_control_, stream_id,
1416
+ settings_->peer().allow_true_binary_metadata());
1417
+ }
1418
+
1419
+ // Based on CHTTP2's use of GetConnectionMaxConcurrentRequests in parsing.cc
1420
+ void Http2ServerTransport::UpdateMaxConcurrentStreamsFromStreamQuota() {
1421
+ uint32_t current_open_streams = 0;
1422
+ {
1423
+ MutexLock lock(transport_mutex_);
1424
+ current_open_streams = GetActiveStreamCountLocked();
1425
+ }
1426
+ const uint32_t max_concurrent_streams =
1427
+ stream_quota_->GetConnectionMaxConcurrentRequests(current_open_streams);
1428
+ settings_->mutable_local().UpdateMaxConcurrentStreams(max_concurrent_streams);
1429
+ }
1430
+
1431
+ Http2Status Http2ServerTransport::ValidateIncomingStream(
1432
+ const uint32_t stream_id) {
1433
+ // 1. Transport shutdown & closed checks.
1434
+ if (GPR_UNLIKELY(shutdown_tracker_.IsPartyShutdownInitiated())) {
1435
+ return Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
1436
+ "shutdown");
1437
+ }
1438
+ {
1439
+ MutexLock lock(transport_mutex_);
1440
+ if (GPR_UNLIKELY(shutdown_tracker_.IsShutdownInitiated(transport_mutex_))) {
1441
+ return Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
1442
+ "shutdown");
1443
+ }
1444
+ // 2. Concurrency & overload protection checks under mutex.
1445
+ const uint32_t max_concurrent_streams =
1446
+ settings_->acked().max_concurrent_streams();
1447
+ const uint32_t active_stream_count = GetActiveStreamCountLocked();
1448
+ if (GPR_UNLIKELY(active_stream_count >= max_concurrent_streams)) {
1449
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ValidateIncomingStream "
1450
+ << "Exceeded MAX_CONCURRENT_STREAMS ("
1451
+ << max_concurrent_streams
1452
+ << "), refusing stream_id=" << stream_id;
1453
+ return Http2Status::Http2StreamError(
1454
+ Http2ErrorCode::kRefusedStream,
1455
+ std::string(RFC9113::kMaxConcurrentStreamsExceeded));
1456
+ }
1457
+ if (GPR_UNLIKELY(max_concurrent_streams_overload_protection_ &&
1458
+ read_context_.HasReceivedSettingsAck() &&
1459
+ active_stream_count >=
1460
+ settings_->local().max_concurrent_streams())) {
1461
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ValidateIncomingStream "
1462
+ << "Rejecting stream due to overload protection, "
1463
+ "refusing stream_id="
1464
+ << stream_id;
1465
+ return Http2Status::Http2StreamError(
1466
+ Http2ErrorCode::kRefusedStream,
1467
+ std::string(GrpcErrors::kRejectStreamOverload));
1468
+ }
1469
+ }
1470
+
1471
+ // 3. High memory pressure check
1472
+ if (GPR_UNLIKELY(memory_owner_.RejectNewStreamsUnderHighMemoryPressure())) {
1473
+ memory_owner_.telemetry_storage()->Increment(
1474
+ ResourceQuotaDomain::kCallsRejected);
1475
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ValidateIncomingStream "
1476
+ << "Rejecting stream due to high memory pressure, "
1477
+ "refusing stream_id="
1478
+ << stream_id;
1479
+ return Http2Status::Http2StreamError(
1480
+ Http2ErrorCode::kEnhanceYourCalm,
1481
+ std::string(GrpcErrors::kTransportUnderHighMemoryPressure));
1482
+ }
1483
+
1484
+ // 4. Settings-ACK stream check on ReadContext.
1485
+ // Based on CHTTP2's num_incoming_streams_before_settings_ack check in
1486
+ // parsing.cc:790.
1487
+ Http2Status first_settings_ack_status =
1488
+ read_context_.ValidateIncomingStreamBeforeSettingsAck(stream_id);
1489
+ if (GPR_UNLIKELY(!first_settings_ack_status.IsOk())) {
1490
+ return first_settings_ack_status;
1491
+ }
1492
+
1493
+ // TODO(vidhikpatel) : [PH2][P2] : Adding RandomEarlyDetection for
1494
+ // stream rejection.
1495
+
1496
+ // 5. All validation checks passed. Consume one unit of the pre-SETTINGS-ACK
1497
+ // stream limit.
1498
+ // Based on CHTTP2's --t->num_incoming_streams_before_settings_ack in
1499
+ // parsing.cc:811.
1500
+ read_context_.ConsumeIncomingStreamBeforeSettingsAck();
1501
+ last_accepted_stream_id_ = stream_id;
1502
+ return Http2Status::Ok();
1503
+ }
1504
+
1505
+ Http2Status Http2ServerTransport::IncomingStream(
1506
+ ClientMetadataHandle&& metadata, const uint32_t stream_id) {
1507
+ GRPC_DCHECK(LookupStream(stream_id) == nullptr);
1508
+
1509
+ RefCountedPtr<Arena> arena = call_arena_allocator_->MakeArena();
1510
+ arena->SetContext<EventEngine>(event_engine_.get());
1511
+ CallInitiatorAndHandler call =
1512
+ MakeCallPair(std::move(metadata), std::move(arena));
1513
+
1514
+ // TODO(akshitpatel) : [PH2][P2] : For the server side, MakeStream most likely
1515
+ // will not fail. Evaluate this.
1516
+ std::optional<RefCountedPtr<Stream>> result =
1517
+ MakeStream(std::move(call.initiator), stream_id);
1518
+ if (!result.has_value()) {
1519
+ return Http2Status::Http2StreamError(
1520
+ Http2ErrorCode::kInternalError,
1521
+ std::string(GrpcErrors::kStreamCreationFailed));
1522
+ }
1523
+ RefCountedPtr<Stream> stream = std::move(result.value());
1524
+ AddToStreamList(stream);
1525
+ UpdateMaxConcurrentStreamsFromStreamQuota();
1526
+ stream->SetInitialMetadataReceived();
1527
+
1528
+ stream->GetCallInitiator().SpawnGuarded(
1529
+ "CallOutboundLoop",
1530
+ [self = RefAsSubclass<Http2ServerTransport>(), stream = std::move(stream),
1531
+ call_handler = std::move(call.handler)]() mutable {
1532
+ self->call_destination_->StartCall(std::move(call_handler));
1533
+ return Map(self->CallOutboundLoop(std::move(stream)),
1534
+ [self](absl::Status status) { return status; });
1535
+ });
1536
+ return Http2Status::Ok();
1537
+ }
1538
+
1539
+ void Http2ServerTransport::BeginCloseStream(
1540
+ RefCountedPtr<Stream> stream, const uint32_t reset_stream_error_code,
1541
+ absl::Status trailing_metadata_status, const bool tarpit,
1542
+ const bool override_tarpit, DebugLocation whence) {
1543
+ GRPC_DCHECK(!trailing_metadata_status.ok());
1544
+ GRPC_DCHECK(stream != nullptr);
1545
+ // Early return if the stream is already fully closed, or currently active in
1546
+ // the tarpit lifecycle (unless override_tarpit is true). If a stream is
1547
+ // already actively being tarpitted (IsTarpitActive), subsequent close
1548
+ // requests (e.g. concurrent cancellation or timeout) must be ignored so that
1549
+ // the ongoing tarpit delay is not interrupted.
1550
+ if (stream->IsStreamClosed() ||
1551
+ (!override_tarpit && stream->IsTarpitTimerActive())) {
1552
+ GRPC_HTTP2_SERVER_DLOG
1553
+ << "Http2ServerTransport::BeginCloseStream early return for stream id: "
1554
+ << stream->GetStreamId()
1555
+ << " is_stream_closed=" << stream->IsStreamClosed()
1556
+ << " is_tarpit_active=" << stream->IsTarpitTimerActive()
1557
+ << " error_code=" << reset_stream_error_code
1558
+ << " Status=" << trailing_metadata_status << " tarpit=" << tarpit
1559
+ << " override_tarpit=" << override_tarpit
1560
+ << " location=" << whence.file() << ":" << whence.line();
1561
+ return;
1562
+ }
1563
+
1564
+ GRPC_HTTP2_SERVER_DLOG
1565
+ << "Http2ServerTransport::BeginCloseStream for stream id: "
1566
+ << stream->GetStreamId() << " error_code=" << reset_stream_error_code
1567
+ << " Status=" << trailing_metadata_status << " tarpit=" << tarpit
1568
+ << " override_tarpit=" << override_tarpit << " location=" << whence.file()
1569
+ << ":" << whence.line();
1570
+
1571
+ // If tarpitting is requested and enabled (and not overridden), delegate
1572
+ // stream close to the TarpitManager. Duplicate entries will be dropped by
1573
+ // MakeTarpitDrainLoop.
1574
+ if (!override_tarpit && tarpit && tarpit_manager_.allow_tarpit()) {
1575
+ StatusFlag tarpit_status = tarpit_manager_.RequestCloseStream(
1576
+ stream->GetStreamId(), reset_stream_error_code,
1577
+ std::move(trailing_metadata_status));
1578
+ if (GPR_UNLIKELY(!tarpit_status.ok())) {
1579
+ GRPC_UNUSED const absl::Status unused = HandleError(
1580
+ std::move(stream),
1581
+ Http2Status::Http2ConnectionError(Http2ErrorCode::kInternalError,
1582
+ "Failed to enqueue tarpit entry"),
1583
+ whence);
1584
+ }
1585
+ return;
1586
+ }
1587
+
1588
+ // Non-tarpit path (or post-expiration reset or override): enqueue RST_STREAM
1589
+ // frame to the peer immediately and transition call handler to
1590
+ // cancelled/closed state.
1591
+ EnqueueResetStreamFromTransportParty(stream, reset_stream_error_code);
1592
+ HandleStreamStateChange(
1593
+ *stream, stream->OnInitiateReset(std::move(trailing_metadata_status)));
1594
+ }
1595
+
1596
+ void Http2ServerTransport::HandleStreamStateChange(
1597
+ Stream& stream, const StreamStateChange change) {
1598
+ GRPC_HTTP2_SERVER_DLOG
1599
+ << "Http2ServerTransport::HandleStreamStateChange for stream id: "
1600
+ << stream.GetStreamId() << " change: " << change.DebugString();
1601
+ if (change.reads_became_closed) {
1602
+ // If a stream is closing for reads and was actively waiting for a
1603
+ // continuation frame, parse the buffered HEADER/CONTINUATION frames
1604
+ if (read_context_.IsWaitingForContinuationFrame() &&
1605
+ read_context_.GetStreamId() == stream.GetStreamId()) {
1606
+ Http2Status result = read_context_.ParseAndDiscardHeaders(
1607
+ SliceBuffer(), /*is_end_headers=*/false,
1608
+ /*original_status=*/Http2Status::Ok(),
1609
+ settings_->acked().max_header_list_size());
1610
+ if (result.GetType() == Http2Status::Http2ErrorType::kConnectionError) {
1611
+ GRPC_HTTP2_SERVER_DLOG
1612
+ << "Http2ServerTransport::HandleStreamStateChange (DiscardHeaders) "
1613
+ "for stream id: "
1614
+ << stream.GetStreamId()
1615
+ << " failed to partially process header : " << result.DebugString();
1616
+ GRPC_UNUSED absl::Status status =
1617
+ HandleError(/*stream=*/nullptr, std::move(result));
1618
+ return;
1619
+ }
1620
+ }
1621
+ }
1622
+ if (change.stream_became_closed) {
1623
+ CleanupStream(stream);
1624
+ }
1625
+ }
1626
+
1627
+ void Http2ServerTransport::CleanupStream(Stream& stream) {
1628
+ bool should_close = false;
1629
+ {
1630
+ MutexLock lock(transport_mutex_);
1631
+ stream_list_.erase(stream.GetStreamId());
1632
+ // Close transport if graceful GOAWAY has been sent and there are no more
1633
+ // streams.
1634
+ if (goaway_manager_.IsFinalGracefulGoawaySent() && stream_list_.empty()) {
1635
+ should_close = true;
1636
+ }
1637
+ }
1638
+ // Subtract any positive announced window delta of closed stream from the
1639
+ // transport flow control.
1640
+ stream.GetStreamFlowControl().OnStreamClosed();
1641
+
1642
+ if (should_close) {
1643
+ MaybeSpawnCloseTransport(Http2Status::AbslConnectionError(
1644
+ absl::StatusCode::kUnavailable, "Graceful shutdown complete."));
1645
+ }
1646
+ }
1647
+
1648
+ absl::Status Http2ServerTransport::UpdateAllStreamsWritability() {
1649
+ MutexLock lock(transport_mutex_);
1650
+ GRPC_HTTP2_SERVER_DLOG
1651
+ << "Http2ServerTransport::UpdateAllStreamsWritability total streams: "
1652
+ << stream_list_.size();
1653
+ // This loop iterates over all active streams. For each stream this would
1654
+ // internally take a stream specific lock and update the stream writability.
1655
+ // This is not optimal but should be fine as this function is only called when
1656
+ // initial window size is increased which in theory should not be very
1657
+ // frequent.
1658
+ for (const auto& [stream_id, stream] : stream_list_) {
1659
+ StreamWritabilityUpdate update =
1660
+ stream->UpdateStreamWritability(GetStreamFlowControlTokens(
1661
+ stream->GetStreamFlowControl(), settings_->peer()));
1662
+ absl::Status status = MaybeAddStreamToWritableStreamList(stream, update);
1663
+ if (GPR_UNLIKELY(!status.ok())) {
1664
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::"
1665
+ "UpdateAllStreamsWritability failed for stream "
1666
+ << stream_id << " with status " << status;
1667
+ return status;
1668
+ }
1669
+ }
1670
+
1671
+ return absl::OkStatus();
1672
+ }
1673
+
1674
+ //////////////////////////////////////////////////////////////////////////////
1675
+ // Ping Keepalive and Goaway
1676
+
1677
+ void Http2ServerTransport::MaybeSpawnPingTimeout(
1678
+ std::optional<uint64_t> opaque_data) {
1679
+ if (opaque_data.has_value()) {
1680
+ SpawnGuardedTransportParty(
1681
+ "PingTimeout", [self = RefAsSubclass<Http2ServerTransport>(),
1682
+ opaque_data = *opaque_data]() {
1683
+ return self->ping_manager_->TimeoutPromise(opaque_data);
1684
+ });
1685
+ }
1686
+ }
1687
+ void Http2ServerTransport::MaybeSpawnDelayedPing(
1688
+ std::optional<Duration> delayed_ping_wait) {
1689
+ if (delayed_ping_wait.has_value()) {
1690
+ SpawnGuardedTransportParty(
1691
+ "DelayedPing", [self = RefAsSubclass<Http2ServerTransport>(),
1692
+ wait = *delayed_ping_wait]() {
1693
+ GRPC_HTTP2_PING_LOG << "Scheduling delayed ping after wait=" << wait;
1694
+ return self->ping_manager_->DelayedPingPromise(wait);
1695
+ });
1696
+ }
1697
+ }
1698
+
1699
+ absl::Status Http2ServerTransport::AckPing(const uint64_t opaque_data) {
1700
+ // It is possible that the PingRatePolicy may decide to not send a ping
1701
+ // request (in cases like the number of inflight pings is too high).
1702
+ // When this happens, it becomes important to ensure that if a ping ack
1703
+ // is received and there is an "important" outstanding ping request, we
1704
+ // should retry to send it out now.
1705
+ if (ping_manager_->AckPing(opaque_data)) {
1706
+ if (ping_manager_->ImportantPingRequested()) {
1707
+ return TriggerWriteCycle();
1708
+ }
1709
+ } else {
1710
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::AckPing Unknown ping "
1711
+ "response received for ping id="
1712
+ << opaque_data;
1713
+ }
1714
+
1715
+ return absl::OkStatus();
1716
+ }
1717
+
1718
+ void Http2ServerTransport::MaybeSpawnKeepaliveLoop() {
1719
+ if (keepalive_manager_->IsKeepAliveLoopNeeded()) {
1720
+ SpawnGuardedTransportParty(
1721
+ "KeepaliveLoop", [self = RefAsSubclass<Http2ServerTransport>()]() {
1722
+ return self->keepalive_manager_->KeepaliveLoop();
1723
+ });
1724
+ }
1725
+ }
1726
+
1727
+ auto Http2ServerTransport::SpawnGracefulGoawayPromise(Slice&& debug_data) {
1728
+ SpawnGuardedTransportParty(
1729
+ "GracefulGoaway",
1730
+ [self = RefAsSubclass<Http2ServerTransport>(),
1731
+ debug_data = std::forward<Slice>(debug_data)]() mutable {
1732
+ GRPC_HTTP2_SERVER_DLOG
1733
+ << "Http2ServerTransport::SpawnGracefulGoawayPromise: "
1734
+ "Initiated graceful GOAWAY";
1735
+ return self->UntilTransportClosed(Map(
1736
+ self->goaway_manager_.RequestGoaway(
1737
+ Http2ErrorCode::kNoError, std::move(debug_data),
1738
+ self->GetLastStreamId(), /*immediate=*/false),
1739
+ [self](absl::Status status) {
1740
+ bool should_close = false;
1741
+ {
1742
+ MutexLock lock(self->transport_mutex_);
1743
+ if (self->GetActiveStreamCountLocked() == 0) {
1744
+ should_close = true;
1745
+ }
1746
+ }
1747
+ if (should_close) {
1748
+ self->MaybeSpawnCloseTransport(Http2Status::AbslConnectionError(
1749
+ absl::StatusCode::kUnavailable,
1750
+ "Graceful shutdown complete."));
1751
+ }
1752
+ return status;
1753
+ }));
1754
+ });
1755
+ }
1756
+
1757
+ //////////////////////////////////////////////////////////////////////////////
1758
+ // Tarpit
1759
+
1760
+ void Http2ServerTransport::ActOnTarpitEntries(
1761
+ std::vector<TarpitEntry>&& entries) {
1762
+ for (TarpitEntry& entry : entries) {
1763
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::ActOnTarpitEntries "
1764
+ << " DebugString=" << entry.DebugString();
1765
+ RefCountedPtr<Stream> stream = LookupStream(entry.GetStreamId());
1766
+ if (stream == nullptr || stream->IsStreamClosed()) {
1767
+ GRPC_HTTP2_SERVER_DLOG
1768
+ << "Http2ServerTransport::ActOnTarpitEntries ignoring expired entry "
1769
+ "for closed/reclaimed stream_id="
1770
+ << entry.GetStreamId();
1771
+ continue;
1772
+ }
1773
+ stream->SetTarpitCompleted();
1774
+ if (entry.IsOutgoingReset()) {
1775
+ std::optional<TarpitEntry::OutgoingResetPayload> reset =
1776
+ entry.TakeOutgoingResetPayload();
1777
+ GRPC_DCHECK(reset.has_value());
1778
+ BeginCloseStream(std::move(stream), reset->http2_error_code,
1779
+ std::move(reset->trailing_metadata_status),
1780
+ /*tarpit=*/false);
1781
+ } else if (entry.IsOutgoingTrailingMetadata()) {
1782
+ std::optional<TarpitEntry::OutgoingTrailingMetadataPayload> trailers =
1783
+ entry.TakeOutgoingTrailingMetadataPayload();
1784
+ GRPC_DCHECK(trailers.has_value());
1785
+ const absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1786
+ stream->EnqueueTrailingMetadata(std::move(trailers->metadata));
1787
+ if (GPR_LIKELY(enqueue_result.ok())) {
1788
+ GRPC_UNUSED const absl::Status status =
1789
+ MaybeAddStreamToWritableStreamList(std::move(stream),
1790
+ *enqueue_result);
1791
+ } else {
1792
+ HandleStreamStateChange(*stream,
1793
+ stream->ForceClose(absl::InternalError(
1794
+ "Failed to enqueue trailing metadata")));
1795
+ }
1796
+ } else {
1797
+ GRPC_DCHECK(false)
1798
+ << "Http2ServerTransport::ActOnTarpitEntries unhandled tarpit entry "
1799
+ "type for stream_id="
1800
+ << entry.GetStreamId() << " entry=" << entry.DebugString();
1801
+ }
1802
+ }
1803
+ }
1804
+
1805
+ auto Http2ServerTransport::MakeTarpitTimerLoop() {
1806
+ return Loop([this]() {
1807
+ return TrySeq(
1808
+ tarpit_manager_.WaitForTimerExpire(),
1809
+ [this]() {
1810
+ ActOnTarpitEntries(tarpit_manager_.OnTimerExpired());
1811
+ return absl::OkStatus();
1812
+ },
1813
+ []() -> LoopCtl<absl::Status> { return Continue(); });
1814
+ });
1815
+ }
1816
+
1817
+ auto Http2ServerTransport::MakeTarpitDrainLoop() {
1818
+ return AllOk<absl::Status>(
1819
+ Loop([this]() {
1820
+ return Map(
1821
+ tarpit_manager_.NextMessage(),
1822
+ [this](auto&& result) -> LoopCtl<absl::Status> {
1823
+ if (GPR_UNLIKELY(!result.ok())) {
1824
+ return absl::CancelledError("Tarpit drain loop cancelled");
1825
+ }
1826
+ TarpitEntry msg = std::move(*result.value());
1827
+ const RefCountedPtr<Stream> stream =
1828
+ LookupStream(msg.GetStreamId());
1829
+ if (GPR_UNLIKELY(stream == nullptr || stream->IsStreamClosed())) {
1830
+ GRPC_HTTP2_SERVER_DLOG
1831
+ << "Http2ServerTransport::MakeTarpitDrainLoop ignoring "
1832
+ "tarpit entry for already closed stream_id="
1833
+ << msg.GetStreamId();
1834
+ return Continue();
1835
+ }
1836
+ if (GPR_UNLIKELY(stream->IsTarpitted())) {
1837
+ GRPC_HTTP2_SERVER_DLOG
1838
+ << "Http2ServerTransport::MakeTarpitDrainLoop ignoring "
1839
+ "duplicate tarpit entry for stream_id="
1840
+ << msg.GetStreamId();
1841
+ return Continue();
1842
+ }
1843
+ GRPC_HTTP2_SERVER_DLOG
1844
+ << "Http2ServerTransport::MakeTarpitDrainLoop enqueuing "
1845
+ "tarpit entry for stream_id="
1846
+ << msg.GetStreamId();
1847
+
1848
+ HandleStreamStateChange(*stream,
1849
+ tarpit_manager_.OnTarpit(*stream));
1850
+ tarpit_manager_.AddToQueue(std::move(msg));
1851
+ return Continue();
1852
+ });
1853
+ }),
1854
+ MakeTarpitTimerLoop());
1855
+ }
1856
+
1857
+ //////////////////////////////////////////////////////////////////////////////
1858
+ // Error Path and Close Path
1859
+
1860
+ absl::Status Http2ServerTransport::HandleError(RefCountedPtr<Stream> stream,
1861
+ Http2Status status,
1862
+ DebugLocation whence) {
1863
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::HandleError for stream id="
1864
+ << (stream != nullptr
1865
+ ? absl::StrCat(stream->GetStreamId())
1866
+ : "nullopt")
1867
+ << " status=" << status.DebugString()
1868
+ << " location=" << whence.file() << ":"
1869
+ << whence.line();
1870
+ const Http2Status::Http2ErrorType error_type = status.GetType();
1871
+ GRPC_DCHECK(error_type != Http2Status::Http2ErrorType::kOk);
1872
+
1873
+ if (error_type == Http2Status::Http2ErrorType::kConnectionError) {
1874
+ GRPC_DCHECK(stream == nullptr);
1875
+ absl::Status absl_status = status.GetAbslConnectionError();
1876
+ MaybeSpawnCloseTransport(std::move(status), whence);
1877
+ return absl_status;
1878
+ } else if (error_type == Http2Status::Http2ErrorType::kStreamError) {
1879
+ const uint32_t reset_stream_error_code =
1880
+ Http2ErrorCodeToFrameErrorCode(status.GetStreamErrorCode());
1881
+ if (stream != nullptr) {
1882
+ BeginCloseStream(std::move(stream), reset_stream_error_code,
1883
+ status.GetAbslStreamError(), /*tarpit=*/true,
1884
+ /*override_tarpit=*/false, whence);
1885
+ }
1886
+ return absl::OkStatus();
1887
+ }
1888
+
1889
+ GPR_UNREACHABLE_CODE(return absl::InternalError("Invalid error type"));
1890
+ }
1891
+
1892
+ void Http2ServerTransport::CloseAllActiveStreams(
1893
+ absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>>&& stream_list,
1894
+ const Http2Status& http2_status, DebugLocation whence) {
1895
+ // Close all the streams that are still active on the transport.
1896
+ absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list_2;
1897
+ {
1898
+ MutexLock lock(transport_mutex_);
1899
+ stream_list_2 = std::move(stream_list_);
1900
+ stream_list_.clear();
1901
+ }
1902
+
1903
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::CloseAllActiveStreams "
1904
+ "Cleaning up call stacks";
1905
+
1906
+ auto close_streams =
1907
+ [&](const absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>>& list) {
1908
+ for (const auto& pair : list) {
1909
+ RefCountedPtr<Stream> stream = pair.second;
1910
+ BeginCloseStream(std::move(stream),
1911
+ Http2ErrorCodeToFrameErrorCode(
1912
+ http2_status.GetConnectionErrorCode()),
1913
+ http2_status.GetAbslConnectionError(),
1914
+ /*tarpit=*/false, /*override_tarpit=*/true, whence);
1915
+ }
1916
+ };
1917
+
1918
+ close_streams(stream_list); // Snapshot 1
1919
+ close_streams(stream_list_2); // Snapshot 2
1920
+ }
1921
+
1922
+ auto Http2ServerTransport::CloseTransportFactory(
1923
+ absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list,
1924
+ Http2Status http2_status, DebugLocation whence) {
1925
+ return [self = RefAsSubclass<Http2ServerTransport>(),
1926
+ stream_list = std::move(stream_list),
1927
+ http2_status = std::move(http2_status), whence]() mutable {
1928
+ self->shutdown_tracker_.InitiatePartyShutdown();
1929
+ self->security_frame_handler_->OnTransportClosed();
1930
+
1931
+ self->tarpit_manager_.Shutdown();
1932
+ self->CloseAllActiveStreams(std::move(stream_list), http2_status, whence);
1933
+
1934
+ // Sleep for kGoawaySendTimeoutSeconds before closing the transport to
1935
+ // let write buffers drain.
1936
+ return Map(
1937
+ Race(AssertResultType<absl::Status>(self->goaway_manager_.RequestGoaway(
1938
+ http2_status.GetConnectionErrorCode(),
1939
+ Slice::FromCopiedString(std::string(
1940
+ http2_status.GetAbslConnectionError().message())),
1941
+ self->GetLastStreamId(), /*immediate=*/true)),
1942
+ Sleep(Duration::Seconds(kGoawaySendTimeoutSeconds))),
1943
+ [self](absl::Status) mutable {
1944
+ self->CloseTransport();
1945
+ return Empty{};
1946
+ });
1947
+ };
1948
+ }
1949
+
1950
+ void Http2ServerTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
1951
+ DebugLocation whence) {
1952
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::MaybeSpawnCloseTransport "
1953
+ "status="
1954
+ << http2_status.DebugString()
1955
+ << " location=" << whence.file() << ":"
1956
+ << whence.line();
1957
+
1958
+ ReleasableMutexLock lock(transport_mutex_);
1959
+ if (shutdown_tracker_.IsShutdownInitiated(transport_mutex_)) {
1960
+ lock.Release();
1961
+ return;
1962
+ }
1963
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::MaybeSpawnCloseTransport "
1964
+ "Initiating transport close";
1965
+ shutdown_tracker_.InitiateShutdown(transport_mutex_);
1966
+ absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list =
1967
+ std::move(stream_list_);
1968
+ stream_list_.clear();
1969
+ ReportDisconnectionLocked(
1970
+ GRPC_CHANNEL_SHUTDOWN, http2_status.GetAbslConnectionError(), {},
1971
+ absl::StrCat("Transport closed: ", http2_status.DebugString()).c_str());
1972
+ lock.Release();
1973
+
1974
+ SpawnInfallibleTransportParty(
1975
+ "CloseTransport", CloseTransportFactory(std::move(stream_list),
1976
+ std::move(http2_status), whence));
1977
+ }
1978
+
1979
+ void Http2ServerTransport::CloseTransport() {
1980
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::CloseTransport";
1981
+
1982
+ shutdown_tracker_.MarkShutdownComplete();
1983
+ settings_->HandleTransportShutdown(event_engine_.get());
1984
+
1985
+ if (on_close_callback_ != nullptr) {
1986
+ ExecCtx::Run(DEBUG_LOCATION, on_close_callback_, absl::OkStatus());
1987
+ on_close_callback_ = nullptr;
1988
+ }
1989
+
1990
+ transport_party_.reset();
1991
+ }
1992
+
1993
+ //////////////////////////////////////////////////////////////////////////////
1994
+ // Misc Transport Stuff
1995
+
1996
+ void Http2ServerTransport::ReportDisconnection(
1997
+ const grpc_connectivity_state state, const absl::Status& status,
1998
+ StateWatcher::DisconnectInfo disconnect_info, const char* reason) {
1999
+ MutexLock lock(transport_mutex_);
2000
+ ReportDisconnectionLocked(state, status, disconnect_info, reason);
2001
+ }
2002
+
2003
+ void Http2ServerTransport::ReportDisconnectionLocked(
2004
+ const grpc_connectivity_state state, const absl::Status& status,
2005
+ StateWatcher::DisconnectInfo disconnect_info, const char* reason) {
2006
+ GRPC_HTTP2_SERVER_DLOG
2007
+ << "Http2ServerTransport::ReportDisconnectionLocked status="
2008
+ << status.ToString() << "; reason=" << reason;
2009
+ state_tracker_.SetState(state, status, reason);
2010
+ NotifyStateWatcherOnDisconnectLocked(status, disconnect_info);
2011
+ }
2012
+
2013
+ void Http2ServerTransport::ReadChannelArgs(const ChannelArgs& channel_args,
2014
+ TransportChannelArgs& args) {
2015
+ http2::ReadChannelArgs(channel_args, args, settings_->mutable_local(),
2016
+ flow_control_,
2017
+ /*is_client=*/kIsClient);
2018
+
2019
+ // Assign the channel args to the member variables.
2020
+ keepalive_time_ = args.keepalive_time;
2021
+ read_context_.set_soft_limit(args.max_header_list_size_soft_limit);
2022
+ read_context_.SetNumIncomingStreamsBeforeSettingsAck(
2023
+ settings_->local().max_concurrent_streams());
2024
+ keepalive_permit_without_calls_ = args.keepalive_permit_without_calls;
2025
+ test_only_ack_pings_ = args.test_only_ack_pings;
2026
+ max_concurrent_streams_overload_protection_ =
2027
+ args.max_concurrent_streams_overload_protection;
2028
+
2029
+ settings_->SetSettingsTimeout(args.settings_timeout);
2030
+ if (args.max_usable_hpack_table_size >= 0) {
2031
+ encoder_.SetMaxUsableSize(args.max_usable_hpack_table_size);
2032
+ }
2033
+ }
2034
+
2035
+ //////////////////////////////////////////////////////////////////////////////
2036
+ // Inner Classes and Structs
2037
+
2038
+ std::unique_ptr<PingInterface>
2039
+ Http2ServerTransport::PingSystemInterfaceImpl::Make(
2040
+ Http2ServerTransport* transport) {
2041
+ return std::make_unique<PingSystemInterfaceImpl>(
2042
+ PingSystemInterfaceImpl(transport));
2043
+ }
2044
+
2045
+ absl::Status Http2ServerTransport::PingSystemInterfaceImpl::TriggerWrite() {
2046
+ return transport_->TriggerWriteCycle();
2047
+ }
2048
+
2049
+ Promise<absl::Status>
2050
+ Http2ServerTransport::PingSystemInterfaceImpl::PingTimeout() {
2051
+ // TODO(akshitpatel) : [PH2][P2] : The error code here has been chosen
2052
+ // based on CHTTP2's usage of GRPC_STATUS_UNAVAILABLE (which corresponds
2053
+ // to kRefusedStream). However looking at RFC9113, definition of
2054
+ // kRefusedStream doesn't seem to fit this case. We should revisit this
2055
+ // and update the error code.
2056
+ return Immediate(transport_->HandleError(
2057
+ nullptr,
2058
+ Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
2059
+ GRPC_CHTTP2_PING_TIMEOUT_STR)));
2060
+ }
2061
+
2062
+ std::unique_ptr<KeepAliveInterface>
2063
+ Http2ServerTransport::KeepAliveInterfaceImpl::Make(
2064
+ Http2ServerTransport* transport) {
2065
+ return std::make_unique<KeepAliveInterfaceImpl>(
2066
+ KeepAliveInterfaceImpl(transport));
2067
+ }
2068
+
2069
+ Promise<absl::Status>
2070
+ Http2ServerTransport::KeepAliveInterfaceImpl::SendPingAndWaitForAck() {
2071
+ return TrySeq(
2072
+ [transport = transport_] { return transport->TriggerWriteCycle(); },
2073
+ [transport = transport_] { return transport->WaitForPingAck(); });
2074
+ }
2075
+
2076
+ Promise<absl::Status>
2077
+ Http2ServerTransport::KeepAliveInterfaceImpl::OnKeepAliveTimeout() {
2078
+ GRPC_HTTP2_SERVER_DLOG
2079
+ << "KeepAliveInterfaceImpl::OnKeepAliveTimeout triggered";
2080
+ // TODO(akshitpatel) : [PH2][P2] : The error code here has been chosen
2081
+ // based on CHTTP2's usage of GRPC_STATUS_UNAVAILABLE (which corresponds
2082
+ // to kRefusedStream). However looking at RFC9113, definition of
2083
+ // kRefusedStream doesn't seem to fit this case. We should revisit this
2084
+ // and update the error code.
2085
+ return Immediate(transport_->HandleError(
2086
+ nullptr,
2087
+ Http2Status::Http2ConnectionError(Http2ErrorCode::kRefusedStream,
2088
+ GRPC_CHTTP2_KEEPALIVE_TIMEOUT_STR)));
2089
+ }
2090
+
2091
+ bool Http2ServerTransport::KeepAliveInterfaceImpl::NeedToSendKeepAlivePing() {
2092
+ bool need_to_send_ping = false;
2093
+ {
2094
+ MutexLock lock(transport_->transport_mutex_);
2095
+ need_to_send_ping = (transport_->keepalive_permit_without_calls_ ||
2096
+ transport_->GetActiveStreamCountLocked() > 0);
2097
+ }
2098
+ return need_to_send_ping;
2099
+ }
2100
+
2101
+ std::unique_ptr<GoawayInterface>
2102
+ Http2ServerTransport::GoawayInterfaceImpl::Make(
2103
+ Http2ServerTransport* transport) {
2104
+ return std::make_unique<GoawayInterfaceImpl>(GoawayInterfaceImpl(transport));
2105
+ }
2106
+
2107
+ uint32_t Http2ServerTransport::GoawayInterfaceImpl::GetLastAcceptedStreamId() {
2108
+ return transport_->last_accepted_stream_id_;
2109
+ }
2110
+
2111
+ //////////////////////////////////////////////////////////////////////////////
2112
+ // Constructor, Destructor etc.
2113
+
2114
+ Http2ServerTransport::Http2ServerTransport(
2115
+ PromiseEndpoint endpoint, const ChannelArgs& channel_args,
2116
+ std::shared_ptr<EventEngine> event_engine,
2117
+ absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> on_receive_settings,
2118
+ grpc_closure* on_close_callback)
2119
+ : channelz::DataSource(http2::CreateChannelzSocketNode(
2120
+ endpoint.GetEventEngineEndpoint(), channel_args)),
2121
+ event_engine_(std::move(event_engine)),
2122
+ endpoint_(std::move(endpoint)),
2123
+ settings_(MakeRefCounted<SettingsPromiseManager>(
2124
+ kIsClient, std::move(on_receive_settings))),
2125
+ on_close_callback_(on_close_callback),
2126
+ is_goaway_received_(false),
2127
+ should_reset_ping_clock_(false),
2128
+ max_concurrent_streams_overload_protection_(false),
2129
+ read_context_(MaxNewStreamsPerRead(channel_args), endpoint_, kIsClient,
2130
+ GetMaxSecurityFrameSize(channel_args),
2131
+ GetPingOnRstStreamPercent(channel_args, kIsClient)),
2132
+ transport_write_context_(kIsClient),
2133
+ last_incoming_stream_id_(0u),
2134
+ last_accepted_stream_id_(0u),
2135
+ ping_manager_(std::nullopt),
2136
+ keepalive_manager_(std::nullopt),
2137
+ goaway_manager_(GoawayInterfaceImpl::Make(this)),
2138
+ memory_owner_(channel_args.GetObject<ResourceQuota>()
2139
+ ->memory_quota()
2140
+ ->CreateMemoryOwner()),
2141
+ call_arena_allocator_(MakeRefCounted<CallArenaAllocator>(
2142
+ channel_args.GetObject<ResourceQuota>()
2143
+ ->memory_quota()
2144
+ ->CreateMemoryAllocator("http2_server"),
2145
+ kInitialCallArenaSize)),
2146
+ stream_quota_(channel_args.GetObject<ResourceQuota>()->stream_quota()),
2147
+ flow_control_(
2148
+ /*peer_name=*/read_context_.peer_string().as_string_view(),
2149
+ channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
2150
+ &memory_owner_),
2151
+ security_frame_handler_(MakeRefCounted<SecurityFrameHandler>()),
2152
+ ztrace_collector_(std::make_shared<PromiseHttp2ZTraceCollector>()),
2153
+ tarpit_manager_(channel_args) {
2154
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport Constructor Begin";
2155
+
2156
+ // Initialize the general party and write party.
2157
+ RefCountedPtr<Arena> party_arena = SimpleArenaAllocator(0)->MakeArena();
2158
+ party_arena->SetContext<EventEngine>(event_engine_.get());
2159
+ transport_party_ = Party::Make(std::move(party_arena));
2160
+
2161
+ InitLocalSettings(settings_->mutable_local(), /*is_client=*/kIsClient);
2162
+ TransportChannelArgs args;
2163
+ ReadChannelArgs(channel_args, args);
2164
+
2165
+ ping_manager_.emplace(channel_args, kIsClient, args.ping_timeout,
2166
+ PingSystemInterfaceImpl::Make(this), event_engine_);
2167
+
2168
+ // The keepalive loop is only spawned if the keepalive time is not infinity.
2169
+ keepalive_manager_.emplace(
2170
+ KeepAliveInterfaceImpl::Make(this),
2171
+ ((args.keepalive_timeout < args.ping_timeout) ? args.keepalive_timeout
2172
+ : Duration::Infinity()),
2173
+ args.keepalive_time);
2174
+
2175
+ GRPC_DCHECK(ping_manager_.has_value());
2176
+ GRPC_DCHECK(keepalive_manager_.has_value());
2177
+ SourceConstructed();
2178
+
2179
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport Constructor End";
2180
+ }
2181
+
2182
+ Http2ServerTransport::~Http2ServerTransport() {
2183
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport Destructor Begin";
2184
+ // GRPC_DCHECK(stream_list_.empty());
2185
+ // GRPC_DCHECK(transport_party_ == nullptr);
2186
+ // memory_owner_.Reset();
2187
+
2188
+ // TODO(akshitpatel) : [PH2][P0][Close] : Remove call to
2189
+ // HandleTransportShutdown() from here and plumb CloseTransport() correctly.
2190
+ settings_->HandleTransportShutdown(event_engine_.get());
2191
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport Destructor End";
2192
+ }
2193
+
2194
+ //////////////////////////////////////////////////////////////////////////////
2195
+ // Transport Functions
2196
+
2197
+ void Http2ServerTransport::SetCallDestination(
2198
+ RefCountedPtr<UnstartedCallDestination> unstarted_call_destination) {
2199
+ // This is called once in the lifetime of the transport.
2200
+ GRPC_CHECK(call_destination_ == nullptr);
2201
+ GRPC_CHECK(unstarted_call_destination != nullptr);
2202
+ call_destination_ = std::move(unstarted_call_destination);
2203
+ InitializeAndSpawnTransportLoops();
2204
+ }
2205
+
2206
+ void Http2ServerTransport::PerformOp(grpc_transport_op* op) {
2207
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport PerformOp Begin";
2208
+ bool did_stuff = false;
2209
+ if (op->start_connectivity_watch != nullptr) {
2210
+ StartConnectivityWatch(op->start_connectivity_watch_state,
2211
+ std::move(op->start_connectivity_watch));
2212
+ did_stuff = true;
2213
+ }
2214
+ if (op->stop_connectivity_watch != nullptr) {
2215
+ StopConnectivityWatch(op->stop_connectivity_watch);
2216
+ did_stuff = true;
2217
+ }
2218
+ if (!op->disconnect_with_error.ok()) {
2219
+ MaybeSpawnCloseTransport(Http2Status::Http2ConnectionError(
2220
+ AbslStatusCodeToErrorCode(op->disconnect_with_error.code()),
2221
+ std::string(op->disconnect_with_error.message())));
2222
+ did_stuff = true;
2223
+ }
2224
+ // We always consider this case as a graceful shutdown.
2225
+ if (!op->goaway_error.ok()) {
2226
+ GRPC_HTTP2_SERVER_DLOG << "GracefulGoaway triggered with error: "
2227
+ << op->goaway_error;
2228
+ SpawnGracefulGoawayPromise(
2229
+ Slice::FromCopiedString(op->goaway_error.message()));
2230
+ did_stuff = true;
2231
+ }
2232
+ GRPC_DCHECK(did_stuff) << "Unimplemented transport perform op ";
2233
+
2234
+ ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
2235
+
2236
+ // TODO(tjagtap) : [PH2][P2] :
2237
+ // Refer src/core/ext/transport/chttp2/transport/chttp2_transport.cc
2238
+ // perform_transport_op_locked
2239
+ // Maybe more operations needed to be implemented.
2240
+ // TODO(tjagtap) : [PH2][P2] : Consider either not using a transport level
2241
+ // lock, or making this run on the Transport party - whatever is better.
2242
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport PerformOp End";
2243
+ }
2244
+
2245
+ void Http2ServerTransport::Orphan() {
2246
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::Orphan Begin";
2247
+ SourceDestructing();
2248
+ MaybeSpawnCloseTransport(
2249
+ ToHttpOkOrConnError(absl::UnavailableError("Orphaned")));
2250
+ Unref();
2251
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::Orphan End";
2252
+ }
2253
+
2254
+ void Http2ServerTransport::SpawnTransportLoops() {
2255
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::SpawnTransportLoops Begin";
2256
+ MaybeSpawnKeepaliveLoop();
2257
+
2258
+ if (!TriggerWriteCycleOrHandleError()) {
2259
+ return;
2260
+ }
2261
+ // For Client, write happens before read. So MultiplexerLoop is spawned first.
2262
+ // ReadLoop is spawned after the first write.
2263
+ // For Server, read happens before write. So ReadLoop is spawned first.
2264
+ SpawnGuardedTransportParty("ReadLoop", UntilTransportClosed(ReadLoop()));
2265
+ SpawnGuardedTransportParty("MultiplexerLoop",
2266
+ UntilTransportClosed(MultiplexerLoop()));
2267
+ if (tarpit_manager_.allow_tarpit()) {
2268
+ SpawnGuardedTransportParty("TarpitDrainLoop",
2269
+ UntilTransportClosed(MakeTarpitDrainLoop()));
2270
+ }
2271
+ if (flow_control_.bdp_probe()) {
2272
+ SpawnGuardedTransportParty("BdpLoop", UntilTransportClosed(BdpLoop()));
2273
+ }
2274
+ GRPC_HTTP2_SERVER_DLOG << "Http2ServerTransport::SpawnTransportLoops End";
2275
+ }
2276
+
2277
+ void Http2ServerTransport::InitializeAndSpawnTransportLoops() {
2278
+ SpawnGuardedTransportParty(
2279
+ "SpawnTransportLoops", [self = RefAsSubclass<Http2ServerTransport>()] {
2280
+ return Map(self->EndpointReadSlice(GRPC_CHTTP2_CLIENT_CONNECT_STRLEN),
2281
+ [self](absl::StatusOr<Slice> status) -> absl::Status {
2282
+ Http2Status result =
2283
+ ValidateIncomingConnectionPreface(status);
2284
+ if (!result.IsOk()) {
2285
+ return self->HandleError(nullptr, std::move(result));
2286
+ }
2287
+ self->SpawnTransportLoops();
2288
+ return absl::OkStatus();
2289
+ });
2290
+ });
2291
+ }
2292
+
2293
+ } // namespace http2
2294
+ } // namespace grpc_core