grpc 1.72.0 → 1.78.1

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 (2090) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +153 -54
  3. data/include/grpc/create_channel_from_endpoint.h +54 -0
  4. data/include/grpc/credentials.h +41 -8
  5. data/include/grpc/event_engine/event_engine.h +182 -8
  6. data/include/grpc/event_engine/internal/write_event.h +34 -0
  7. data/include/grpc/event_engine/memory_allocator.h +2 -0
  8. data/include/grpc/event_engine/memory_request.h +2 -0
  9. data/include/grpc/grpc_posix.h +20 -1
  10. data/include/grpc/impl/channel_arg_names.h +24 -13
  11. data/include/grpc/impl/compression_types.h +3 -2
  12. data/include/grpc/impl/slice_type.h +1 -1
  13. data/include/grpc/module.modulemap +1 -0
  14. data/include/grpc/support/json.h +27 -21
  15. data/include/grpc/support/metrics.h +7 -1
  16. data/include/grpc/support/port_platform.h +8 -5
  17. data/src/core/call/call_filters.cc +5 -5
  18. data/src/core/call/call_filters.h +239 -56
  19. data/src/core/call/call_spine.cc +1 -1
  20. data/src/core/call/call_spine.h +56 -32
  21. data/src/core/call/channelz_context.h +30 -0
  22. data/src/core/call/client_call.cc +53 -14
  23. data/src/core/call/client_call.h +6 -3
  24. data/src/core/call/filter_fusion.h +1230 -0
  25. data/src/core/call/interception_chain.h +8 -11
  26. data/src/core/call/metadata.cc +22 -0
  27. data/src/core/call/metadata.h +41 -2
  28. data/src/core/call/metadata_batch.cc +49 -55
  29. data/src/core/call/metadata_batch.h +10 -9
  30. data/src/core/call/metadata_info.cc +1 -1
  31. data/src/core/call/parsed_metadata.h +2 -2
  32. data/src/core/call/request_buffer.cc +1 -1
  33. data/src/core/call/security_context.cc +2 -2
  34. data/src/core/call/security_context.h +1 -1
  35. data/src/core/call/server_call.cc +5 -5
  36. data/src/core/call/server_call.h +6 -4
  37. data/src/core/call/simple_slice_based_metadata.h +1 -1
  38. data/src/core/call/status_util.cc +1 -1
  39. data/src/core/channelz/channel_trace.cc +218 -112
  40. data/src/core/channelz/channel_trace.h +390 -65
  41. data/src/core/channelz/channelz.cc +483 -192
  42. data/src/core/channelz/channelz.h +523 -78
  43. data/src/core/channelz/channelz_registry.cc +239 -195
  44. data/src/core/channelz/channelz_registry.h +261 -21
  45. data/src/core/channelz/property_list.cc +371 -0
  46. data/src/core/channelz/property_list.h +215 -0
  47. data/src/core/channelz/text_encode.cc +66 -0
  48. data/src/core/channelz/text_encode.h +29 -0
  49. data/src/core/channelz/v2tov1/convert.cc +694 -0
  50. data/src/core/channelz/v2tov1/convert.h +58 -0
  51. data/src/core/channelz/v2tov1/legacy_api.cc +431 -0
  52. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  53. data/src/core/channelz/v2tov1/property_list.cc +119 -0
  54. data/src/core/channelz/v2tov1/property_list.h +52 -0
  55. data/src/core/channelz/ztrace_collector.h +489 -0
  56. data/src/core/client_channel/backup_poller.cc +19 -5
  57. data/src/core/client_channel/buffered_call.cc +140 -0
  58. data/src/core/client_channel/buffered_call.h +104 -0
  59. data/src/core/client_channel/client_channel.cc +179 -129
  60. data/src/core/client_channel/client_channel.h +8 -11
  61. data/src/core/client_channel/client_channel_factory.h +1 -1
  62. data/src/core/client_channel/client_channel_filter.cc +449 -719
  63. data/src/core/client_channel/client_channel_filter.h +57 -152
  64. data/src/core/client_channel/client_channel_internal.h +8 -4
  65. data/src/core/client_channel/client_channel_service_config.cc +43 -3
  66. data/src/core/client_channel/client_channel_service_config.h +12 -1
  67. data/src/core/client_channel/config_selector.h +13 -7
  68. data/src/core/client_channel/connector.h +2 -3
  69. data/src/core/client_channel/dynamic_filters.cc +10 -11
  70. data/src/core/client_channel/dynamic_filters.h +1 -1
  71. data/src/core/client_channel/global_subchannel_pool.cc +42 -15
  72. data/src/core/client_channel/global_subchannel_pool.h +19 -13
  73. data/src/core/client_channel/lb_metadata.h +1 -1
  74. data/src/core/client_channel/load_balanced_call_destination.cc +9 -10
  75. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  76. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  77. data/src/core/client_channel/retry_filter.cc +23 -29
  78. data/src/core/client_channel/retry_filter.h +13 -10
  79. data/src/core/client_channel/retry_filter_legacy_call_data.cc +16 -17
  80. data/src/core/client_channel/retry_filter_legacy_call_data.h +7 -9
  81. data/src/core/client_channel/retry_interceptor.cc +30 -44
  82. data/src/core/client_channel/retry_interceptor.h +18 -17
  83. data/src/core/client_channel/retry_service_config.cc +3 -3
  84. data/src/core/client_channel/retry_service_config.h +1 -1
  85. data/src/core/client_channel/retry_throttle.cc +46 -61
  86. data/src/core/client_channel/retry_throttle.h +17 -39
  87. data/src/core/client_channel/subchannel.cc +174 -55
  88. data/src/core/client_channel/subchannel.h +36 -16
  89. data/src/core/client_channel/subchannel_pool_interface.cc +7 -8
  90. data/src/core/client_channel/subchannel_pool_interface.h +12 -2
  91. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  92. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  93. data/src/core/config/config_vars.cc +50 -3
  94. data/src/core/config/config_vars.h +34 -0
  95. data/src/core/config/core_configuration.cc +56 -14
  96. data/src/core/config/core_configuration.h +116 -11
  97. data/src/core/config/load_config.cc +13 -1
  98. data/src/core/config/load_config.h +2 -0
  99. data/src/core/credentials/call/call_credentials.h +4 -4
  100. data/src/core/credentials/call/call_creds_registry.h +125 -0
  101. data/src/core/credentials/call/call_creds_registry_init.cc +91 -0
  102. data/src/core/credentials/call/call_creds_util.cc +7 -6
  103. data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
  104. data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
  105. data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
  106. data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
  107. data/src/core/credentials/call/external/aws_request_signer.cc +3 -2
  108. data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
  109. data/src/core/credentials/call/external/external_account_credentials.h +1 -1
  110. data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
  111. data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
  112. data/src/core/credentials/call/external/url_external_account_credentials.cc +9 -9
  113. data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
  114. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +26 -115
  115. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
  116. data/src/core/credentials/call/iam/iam_credentials.cc +6 -6
  117. data/src/core/credentials/call/iam/iam_credentials.h +1 -1
  118. data/src/core/credentials/call/json_util.cc +1 -1
  119. data/src/core/credentials/call/jwt/json_token.cc +7 -7
  120. data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
  121. data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
  122. data/src/core/credentials/call/jwt/jwt_verifier.cc +23 -22
  123. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +86 -0
  124. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +74 -0
  125. data/src/core/credentials/call/jwt_util.cc +70 -0
  126. data/src/core/credentials/call/jwt_util.h +32 -0
  127. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +53 -74
  128. data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
  129. data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
  130. data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
  131. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
  132. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
  133. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  134. data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -14
  135. data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
  136. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  137. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +23 -3
  138. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  139. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  140. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  141. data/src/core/credentials/transport/channel_creds_registry.h +1 -1
  142. data/src/core/credentials/transport/channel_creds_registry_init.cc +5 -3
  143. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +7 -7
  144. data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
  145. data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
  146. data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
  147. data/src/core/credentials/transport/fake/fake_security_connector.cc +7 -7
  148. data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
  149. data/src/core/credentials/transport/google_default/google_default_credentials.cc +151 -39
  150. data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
  151. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  152. data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
  153. data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
  154. data/src/core/credentials/transport/security_connector.cc +6 -6
  155. data/src/core/credentials/transport/security_connector.h +2 -2
  156. data/src/core/credentials/transport/ssl/ssl_credentials.cc +16 -17
  157. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  158. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +57 -22
  159. data/src/core/credentials/transport/ssl/ssl_security_connector.h +2 -1
  160. data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
  161. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  162. data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
  163. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +52 -47
  164. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +21 -10
  165. data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
  166. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +103 -61
  167. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +20 -7
  168. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  169. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
  170. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
  171. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  172. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
  173. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +2 -1
  174. data/src/core/credentials/transport/tls/spiffe_utils.cc +373 -0
  175. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  176. data/src/core/credentials/transport/tls/ssl_utils.cc +46 -22
  177. data/src/core/credentials/transport/tls/ssl_utils.h +11 -4
  178. data/src/core/credentials/transport/tls/tls_credentials.cc +3 -1
  179. data/src/core/credentials/transport/tls/tls_security_connector.cc +28 -42
  180. data/src/core/credentials/transport/tls/tls_security_connector.h +15 -15
  181. data/src/core/credentials/transport/transport_credentials.cc +3 -3
  182. data/src/core/credentials/transport/transport_credentials.h +4 -4
  183. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -8
  184. data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
  185. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +3 -4
  186. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
  187. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +12 -7
  188. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
  189. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
  190. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
  191. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  192. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +10 -10
  193. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +22 -19
  194. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  195. data/src/core/ext/filters/http/client/http_client_filter.cc +9 -12
  196. data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
  197. data/src/core/ext/filters/http/client_authority_filter.cc +5 -8
  198. data/src/core/ext/filters/http/client_authority_filter.h +4 -1
  199. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
  200. data/src/core/ext/filters/http/message_compress/compression_filter.cc +19 -19
  201. data/src/core/ext/filters/http/message_compress/compression_filter.h +61 -9
  202. data/src/core/ext/filters/http/server/http_server_filter.cc +7 -10
  203. data/src/core/ext/filters/http/server/http_server_filter.h +22 -7
  204. data/src/core/ext/filters/message_size/message_size_filter.cc +6 -6
  205. data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
  206. data/src/core/ext/filters/rbac/rbac_filter.cc +2 -2
  207. data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
  208. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  209. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  210. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +17 -19
  211. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
  212. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  213. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  214. data/src/core/ext/transport/chttp2/chttp2_plugin.cc +40 -0
  215. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +176 -178
  216. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +5 -3
  217. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +63 -990
  218. data/src/core/ext/transport/chttp2/server/chttp2_server.h +6 -3
  219. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
  220. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  221. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +490 -202
  222. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -8
  223. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +1239 -3514
  224. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1008 -1486
  225. data/src/core/ext/transport/chttp2/transport/flow_control.cc +43 -7
  226. data/src/core/ext/transport/chttp2/transport/flow_control.h +247 -83
  227. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
  228. data/src/core/ext/transport/chttp2/transport/frame.cc +472 -123
  229. data/src/core/ext/transport/chttp2/transport/frame.h +170 -12
  230. data/src/core/ext/transport/chttp2/transport/frame_data.cc +15 -5
  231. data/src/core/ext/transport/chttp2/transport/frame_data.h +3 -1
  232. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +20 -8
  233. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +5 -3
  234. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +8 -6
  235. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +18 -11
  236. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -1
  237. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
  238. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +33 -24
  239. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +14 -11
  240. data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
  241. data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
  242. data/src/core/ext/transport/chttp2/transport/header_assembler.h +430 -0
  243. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +10 -3
  244. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +10 -6
  245. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  246. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
  247. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
  248. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
  249. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -8
  250. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +19 -13
  251. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +13 -2
  252. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +2076 -0
  253. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +723 -0
  254. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +12 -39
  255. data/src/core/ext/transport/chttp2/transport/http2_settings.h +71 -29
  256. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +62 -0
  257. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +143 -0
  258. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
  259. data/{third_party/abseil-cpp/absl/strings/cord_buffer.cc → src/core/ext/transport/chttp2/transport/http2_stats_collector.cc} +14 -14
  260. data/src/core/ext/transport/chttp2/transport/http2_stats_collector.h +33 -0
  261. data/src/core/ext/transport/chttp2/transport/http2_status.h +369 -1
  262. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +428 -0
  263. data/src/core/ext/transport/chttp2/transport/http2_transport.h +251 -0
  264. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +323 -0
  265. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
  266. data/src/core/ext/transport/chttp2/transport/internal.h +72 -26
  267. data/src/core/ext/transport/chttp2/transport/internal_channel_arg_names.h +24 -0
  268. data/src/core/ext/transport/chttp2/transport/keepalive.cc +112 -0
  269. data/src/core/ext/transport/chttp2/transport/keepalive.h +142 -0
  270. data/src/core/ext/transport/chttp2/transport/message_assembler.h +194 -0
  271. data/src/core/ext/transport/chttp2/transport/parsing.cc +64 -48
  272. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  273. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +21 -2
  274. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +194 -0
  275. data/src/core/ext/transport/chttp2/transport/ping_promise.h +237 -0
  276. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +16 -19
  277. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.h +17 -0
  278. data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
  279. data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
  280. data/src/core/ext/transport/chttp2/transport/stream.h +287 -0
  281. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +875 -0
  282. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +46 -8
  283. data/src/core/ext/transport/chttp2/transport/transport_common.cc +35 -0
  284. data/src/core/ext/transport/chttp2/transport/transport_common.h +84 -0
  285. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  286. data/src/core/ext/transport/chttp2/transport/writable_streams.h +372 -0
  287. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  288. data/src/core/ext/transport/chttp2/transport/writing.cc +105 -66
  289. data/src/core/ext/transport/inproc/inproc_transport.cc +16 -5
  290. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +17 -10
  291. data/src/core/ext/upb-gen/envoy/admin/v3/certs.upb.h +4 -0
  292. data/src/core/ext/upb-gen/envoy/config/accesslog/v3/accesslog.upb.h +12 -0
  293. data/src/core/ext/upb-gen/envoy/config/bootstrap/v3/bootstrap.upb.h +12 -22
  294. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +12 -22
  295. data/src/core/ext/upb-gen/envoy/config/common/matcher/v3/matcher.upb.h +28 -22
  296. data/src/core/ext/upb-gen/envoy/config/core/v3/address.upb.h +12 -0
  297. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +24 -67
  298. data/src/core/ext/upb-gen/envoy/config/core/v3/config_source.upb.h +4 -0
  299. data/src/core/ext/upb-gen/envoy/config/core/v3/event_service_config.upb.h +4 -0
  300. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb.h +29 -31
  301. data/src/core/ext/upb-gen/envoy/config/core/v3/grpc_service.upb_minitable.c +2 -2
  302. data/src/core/ext/upb-gen/envoy/config/core/v3/health_check.upb.h +12 -0
  303. data/src/core/ext/upb-gen/envoy/config/core/v3/http_uri.upb.h +4 -0
  304. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +8 -0
  305. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +4 -0
  306. data/src/core/ext/upb-gen/envoy/config/core/v3/substitution_format_string.upb.h +4 -0
  307. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint.upb.h +0 -23
  308. data/src/core/ext/upb-gen/envoy/config/endpoint/v3/endpoint_components.upb.h +8 -0
  309. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener.upb.h +8 -0
  310. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +12 -0
  311. data/src/core/ext/upb-gen/envoy/config/metrics/v3/stats.upb.h +20 -0
  312. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +12 -0
  313. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +8 -22
  314. data/src/core/ext/upb-gen/envoy/config/route/v3/route.upb.h +0 -23
  315. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +64 -66
  316. data/src/core/ext/upb-gen/envoy/config/route/v3/scoped_route.upb.h +4 -0
  317. data/src/core/ext/upb-gen/envoy/config/tap/v3/common.upb.h +12 -0
  318. data/src/core/ext/upb-gen/envoy/config/trace/v3/http_tracer.upb.h +4 -0
  319. data/src/core/ext/upb-gen/envoy/config/trace/v3/skywalking.upb.h +4 -0
  320. data/src/core/ext/upb-gen/envoy/data/accesslog/v3/accesslog.upb.h +4 -95
  321. data/src/core/ext/upb-gen/envoy/extensions/filters/common/fault/v3/fault.upb.h +8 -0
  322. data/src/core/ext/upb-gen/envoy/extensions/filters/http/fault/v3/fault.upb.h +4 -0
  323. data/src/core/ext/upb-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +4 -0
  324. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +28 -0
  325. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/common/v3/common.upb.h +4 -0
  326. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/common.upb.h +4 -0
  327. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +4 -0
  328. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +12 -0
  329. data/src/core/ext/upb-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upb.h +8 -0
  330. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +8 -36
  331. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +4 -0
  332. data/src/core/ext/upb-gen/envoy/type/http/v3/path_transformation.upb.h +4 -0
  333. data/src/core/ext/upb-gen/envoy/type/matcher/v3/filter_state.upb.h +4 -0
  334. data/src/core/ext/upb-gen/envoy/type/matcher/v3/metadata.upb.h +4 -0
  335. data/src/core/ext/upb-gen/envoy/type/matcher/v3/number.upb.h +4 -0
  336. data/src/core/ext/upb-gen/envoy/type/matcher/v3/path.upb.h +4 -0
  337. data/src/core/ext/upb-gen/envoy/type/matcher/v3/regex.upb.h +4 -0
  338. data/src/core/ext/upb-gen/envoy/type/matcher/v3/string.upb.h +4 -0
  339. data/src/core/ext/upb-gen/envoy/type/matcher/v3/struct.upb.h +4 -0
  340. data/src/core/ext/upb-gen/envoy/type/matcher/v3/value.upb.h +8 -0
  341. data/src/core/ext/upb-gen/envoy/type/metadata/v3/metadata.upb.h +8 -0
  342. data/src/core/ext/upb-gen/envoy/type/tracing/v3/custom_tag.upb.h +4 -0
  343. data/src/core/ext/upb-gen/envoy/type/v3/hash_policy.upb.h +4 -0
  344. data/src/core/ext/upb-gen/envoy/type/v3/ratelimit_strategy.upb.h +4 -0
  345. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/checked.upb.h +8 -44
  346. data/src/core/ext/upb-gen/google/api/expr/v1alpha1/syntax.upb.h +12 -40
  347. data/src/core/ext/upb-gen/google/api/http.upb.h +4 -0
  348. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb.h +193 -20
  349. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.c +59 -21
  350. data/src/core/ext/upb-gen/google/protobuf/descriptor.upb_minitable.h +4 -0
  351. data/src/core/ext/upb-gen/google/protobuf/struct.upb.h +4 -22
  352. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  353. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  354. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  355. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb.h +571 -0
  356. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.c +120 -0
  357. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/channelz.upb_minitable.h +36 -0
  358. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb.h +1272 -0
  359. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.c +312 -0
  360. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/promise.upb_minitable.h +50 -0
  361. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +1072 -0
  362. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +230 -0
  363. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +44 -0
  364. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  365. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  366. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  367. data/src/core/ext/upb-gen/src/proto/grpc/gcp/altscontext.upb.h +0 -18
  368. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +196 -104
  369. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +40 -32
  370. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb.h +154 -0
  371. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.c +40 -2
  372. data/src/core/ext/upb-gen/src/proto/grpc/gcp/transport_security_common.upb_minitable.h +4 -0
  373. data/src/core/ext/upb-gen/src/proto/grpc/lb/v1/load_balancer.upb.h +8 -0
  374. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls.upb.h +0 -18
  375. data/src/core/ext/upb-gen/src/proto/grpc/lookup/v1/rls_config.upb.h +0 -36
  376. data/src/core/ext/upb-gen/validate/validate.upb.h +12 -0
  377. data/src/core/ext/upb-gen/xds/core/v3/collection_entry.upb.h +4 -0
  378. data/src/core/ext/upb-gen/xds/core/v3/context_params.upb.h +0 -18
  379. data/src/core/ext/upb-gen/xds/core/v3/resource_locator.upb.h +8 -0
  380. data/src/core/ext/upb-gen/xds/data/orca/v3/orca_load_report.upb.h +0 -54
  381. data/src/core/ext/upb-gen/xds/type/matcher/v3/matcher.upb.h +20 -22
  382. data/src/core/ext/upb-gen/xds/type/matcher/v3/regex.upb.h +4 -0
  383. data/src/core/ext/upb-gen/xds/type/matcher/v3/string.upb.h +4 -0
  384. data/src/core/ext/upb-gen/xds/type/v3/cel.upb.h +4 -0
  385. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.c +123 -62
  386. data/src/core/ext/upbdefs-gen/envoy/admin/v3/certs.upbdefs.h +5 -1
  387. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.c +200 -101
  388. data/src/core/ext/upbdefs-gen/envoy/admin/v3/clusters.upbdefs.h +5 -1
  389. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.c +152 -77
  390. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump.upbdefs.h +5 -1
  391. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +524 -255
  392. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.h +5 -1
  393. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.c +44 -23
  394. data/src/core/ext/upbdefs-gen/envoy/admin/v3/init_dump.upbdefs.h +5 -1
  395. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.c +66 -34
  396. data/src/core/ext/upbdefs-gen/envoy/admin/v3/listeners.upbdefs.h +5 -1
  397. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.c +54 -28
  398. data/src/core/ext/upbdefs-gen/envoy/admin/v3/memory.upbdefs.h +5 -1
  399. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.c +46 -25
  400. data/src/core/ext/upbdefs-gen/envoy/admin/v3/metrics.upbdefs.h +5 -1
  401. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.c +47 -25
  402. data/src/core/ext/upbdefs-gen/envoy/admin/v3/mutex_stats.upbdefs.h +5 -1
  403. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.c +256 -126
  404. data/src/core/ext/upbdefs-gen/envoy/admin/v3/server_info.upbdefs.h +5 -1
  405. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.c +50 -28
  406. data/src/core/ext/upbdefs-gen/envoy/admin/v3/tap.upbdefs.h +5 -1
  407. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.c +55 -28
  408. data/src/core/ext/upbdefs-gen/envoy/annotations/deprecation.upbdefs.h +5 -1
  409. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.c +34 -18
  410. data/src/core/ext/upbdefs-gen/envoy/annotations/resource.upbdefs.h +5 -1
  411. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.c +414 -206
  412. data/src/core/ext/upbdefs-gen/envoy/config/accesslog/v3/accesslog.upbdefs.h +5 -1
  413. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +831 -413
  414. data/src/core/ext/upbdefs-gen/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +5 -1
  415. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +143 -73
  416. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +5 -1
  417. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +1132 -557
  418. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.h +5 -1
  419. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.c +63 -34
  420. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/filter.upbdefs.h +5 -1
  421. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.c +255 -127
  422. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/outlier_detection.upbdefs.h +5 -1
  423. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.c +363 -178
  424. data/src/core/ext/upbdefs-gen/envoy/config/common/matcher/v3/matcher.upbdefs.h +5 -1
  425. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.c +227 -114
  426. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/address.upbdefs.h +5 -1
  427. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.c +57 -31
  428. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/backoff.upbdefs.h +5 -1
  429. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +596 -295
  430. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -1
  431. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.c +271 -137
  432. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/config_source.upbdefs.h +5 -1
  433. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.c +56 -30
  434. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/event_service_config.upbdefs.h +5 -1
  435. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.c +45 -25
  436. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/extension.upbdefs.h +5 -1
  437. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.c +59 -31
  438. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_method_list.upbdefs.h +5 -1
  439. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.c +438 -217
  440. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/grpc_service.upbdefs.h +5 -1
  441. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.c +441 -221
  442. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/health_check.upbdefs.h +5 -1
  443. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.c +55 -30
  444. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_service.upbdefs.h +5 -1
  445. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.c +57 -31
  446. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/http_uri.upbdefs.h +5 -1
  447. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +619 -303
  448. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.h +5 -1
  449. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.c +70 -36
  450. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/proxy_protocol.upbdefs.h +5 -1
  451. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.c +62 -33
  452. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/resolver.upbdefs.h +5 -1
  453. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +47 -25
  454. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +5 -1
  455. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +97 -49
  456. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +5 -1
  457. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.c +97 -51
  458. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/substitution_format_string.upbdefs.h +5 -1
  459. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.c +51 -27
  460. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/udp_socket_config.upbdefs.h +5 -1
  461. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.c +147 -76
  462. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint.upbdefs.h +5 -1
  463. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +230 -116
  464. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +5 -1
  465. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.c +277 -138
  466. data/src/core/ext/upbdefs-gen/envoy/config/endpoint/v3/load_report.upbdefs.h +5 -1
  467. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.c +48 -26
  468. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/api_listener.upbdefs.h +5 -1
  469. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.c +388 -197
  470. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener.upbdefs.h +5 -1
  471. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +304 -153
  472. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +5 -1
  473. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +173 -90
  474. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.h +5 -1
  475. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.c +90 -47
  476. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/udp_listener_config.upbdefs.h +5 -1
  477. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.c +98 -51
  478. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/metrics_service.upbdefs.h +5 -1
  479. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.c +196 -99
  480. data/src/core/ext/upbdefs-gen/envoy/config/metrics/v3/stats.upbdefs.h +5 -1
  481. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +237 -118
  482. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.h +5 -1
  483. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +418 -210
  484. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -1
  485. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.c +194 -99
  486. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route.upbdefs.h +5 -1
  487. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +2003 -973
  488. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -1
  489. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.c +101 -53
  490. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/scoped_route.upbdefs.h +5 -1
  491. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.c +352 -176
  492. data/src/core/ext/upbdefs-gen/envoy/config/tap/v3/common.upbdefs.h +5 -1
  493. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.c +79 -42
  494. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/datadog.upbdefs.h +5 -1
  495. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.c +67 -37
  496. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/dynamic_ot.upbdefs.h +5 -1
  497. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.c +63 -34
  498. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/http_tracer.upbdefs.h +5 -1
  499. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.c +88 -47
  500. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/lightstep.upbdefs.h +5 -1
  501. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.c +80 -43
  502. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opentelemetry.upbdefs.h +5 -1
  503. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.c +53 -29
  504. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/service.upbdefs.h +5 -1
  505. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.c +86 -46
  506. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/skywalking.upbdefs.h +5 -1
  507. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +55 -32
  508. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.h +5 -1
  509. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.c +91 -49
  510. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/xray.upbdefs.h +5 -1
  511. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.c +105 -55
  512. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/zipkin.upbdefs.h +5 -1
  513. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.c +775 -379
  514. data/src/core/ext/upbdefs-gen/envoy/data/accesslog/v3/accesslog.upbdefs.h +5 -1
  515. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +52 -28
  516. data/src/core/ext/upbdefs-gen/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +5 -1
  517. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +134 -68
  518. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +5 -1
  519. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +189 -96
  520. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +5 -1
  521. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.c +116 -61
  522. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/gcp_authn/v3/gcp_authn.upbdefs.h +5 -1
  523. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +112 -58
  524. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +5 -1
  525. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.c +160 -82
  526. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/router/v3/router.upbdefs.h +5 -1
  527. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +75 -39
  528. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +5 -1
  529. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +1161 -570
  530. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +5 -1
  531. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +52 -28
  532. data/src/core/ext/upbdefs-gen/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +5 -1
  533. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +55 -29
  534. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.h +5 -1
  535. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -26
  536. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +5 -1
  537. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +390 -194
  538. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +5 -1
  539. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +126 -65
  540. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +5 -1
  541. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +498 -246
  542. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +5 -1
  543. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +74 -38
  544. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +5 -1
  545. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.c +221 -110
  546. data/src/core/ext/upbdefs-gen/envoy/extensions/upstreams/http/v3/http_protocol_options.upbdefs.h +5 -1
  547. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.c +68 -36
  548. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/ads.upbdefs.h +5 -1
  549. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +378 -187
  550. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -1
  551. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.c +100 -52
  552. data/src/core/ext/upbdefs-gen/envoy/service/load_stats/v3/lrs.upbdefs.h +5 -1
  553. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +257 -129
  554. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.h +5 -1
  555. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.c +44 -24
  556. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/cookie.upbdefs.h +5 -1
  557. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.c +68 -35
  558. data/src/core/ext/upbdefs-gen/envoy/type/http/v3/path_transformation.upbdefs.h +5 -1
  559. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.c +38 -20
  560. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/address.upbdefs.h +5 -1
  561. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.c +59 -32
  562. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/filter_state.upbdefs.h +5 -1
  563. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.c +65 -34
  564. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/http_inputs.upbdefs.h +5 -1
  565. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.c +72 -38
  566. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/metadata.upbdefs.h +5 -1
  567. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.c +57 -31
  568. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/node.upbdefs.h +5 -1
  569. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.c +52 -29
  570. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/number.upbdefs.h +5 -1
  571. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.c +51 -28
  572. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/path.upbdefs.h +5 -1
  573. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.c +89 -47
  574. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/regex.upbdefs.h +5 -1
  575. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.c +37 -20
  576. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/status_code_input.upbdefs.h +5 -1
  577. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.c +89 -47
  578. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/string.upbdefs.h +5 -1
  579. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.c +67 -35
  580. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/struct.upbdefs.h +5 -1
  581. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.c +112 -58
  582. data/src/core/ext/upbdefs-gen/envoy/type/matcher/v3/value.upbdefs.h +5 -1
  583. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.c +110 -56
  584. data/src/core/ext/upbdefs-gen/envoy/type/metadata/v3/metadata.upbdefs.h +5 -1
  585. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.c +123 -62
  586. data/src/core/ext/upbdefs-gen/envoy/type/tracing/v3/custom_tag.upbdefs.h +5 -1
  587. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.c +59 -31
  588. data/src/core/ext/upbdefs-gen/envoy/type/v3/hash_policy.upbdefs.h +5 -1
  589. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.c +30 -16
  590. data/src/core/ext/upbdefs-gen/envoy/type/v3/http.upbdefs.h +5 -1
  591. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.c +143 -72
  592. data/src/core/ext/upbdefs-gen/envoy/type/v3/http_status.upbdefs.h +5 -1
  593. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.c +61 -32
  594. data/src/core/ext/upbdefs-gen/envoy/type/v3/percent.upbdefs.h +5 -1
  595. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.c +51 -27
  596. data/src/core/ext/upbdefs-gen/envoy/type/v3/range.upbdefs.h +5 -1
  597. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.c +85 -45
  598. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_strategy.upbdefs.h +5 -1
  599. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.c +35 -19
  600. data/src/core/ext/upbdefs-gen/envoy/type/v3/ratelimit_unit.upbdefs.h +5 -1
  601. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.c +44 -23
  602. data/src/core/ext/upbdefs-gen/envoy/type/v3/semantic_version.upbdefs.h +5 -1
  603. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.c +61 -33
  604. data/src/core/ext/upbdefs-gen/envoy/type/v3/token_bucket.upbdefs.h +5 -1
  605. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.c +35 -19
  606. data/src/core/ext/upbdefs-gen/google/api/annotations.upbdefs.h +5 -1
  607. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.c +272 -133
  608. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/checked.upbdefs.h +5 -1
  609. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.c +315 -154
  610. data/src/core/ext/upbdefs-gen/google/api/expr/v1alpha1/syntax.upbdefs.h +5 -1
  611. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.c +64 -33
  612. data/src/core/ext/upbdefs-gen/google/api/http.upbdefs.h +5 -1
  613. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.c +35 -19
  614. data/src/core/ext/upbdefs-gen/google/api/httpbody.upbdefs.h +5 -1
  615. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.c +26 -15
  616. data/src/core/ext/upbdefs-gen/google/protobuf/any.upbdefs.h +5 -1
  617. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.c +1106 -508
  618. data/src/core/ext/upbdefs-gen/google/protobuf/descriptor.upbdefs.h +10 -1
  619. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.c +28 -16
  620. data/src/core/ext/upbdefs-gen/google/protobuf/duration.upbdefs.h +5 -1
  621. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.c +23 -13
  622. data/src/core/ext/upbdefs-gen/google/protobuf/empty.upbdefs.h +5 -1
  623. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.c +69 -35
  624. data/src/core/ext/upbdefs-gen/google/protobuf/struct.upbdefs.h +5 -1
  625. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.c +29 -16
  626. data/src/core/ext/upbdefs-gen/google/protobuf/timestamp.upbdefs.h +5 -1
  627. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.c +51 -26
  628. data/src/core/ext/upbdefs-gen/google/protobuf/wrappers.upbdefs.h +5 -1
  629. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.c +32 -17
  630. data/src/core/ext/upbdefs-gen/google/rpc/status.upbdefs.h +5 -1
  631. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  632. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  633. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  634. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  635. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.c +175 -0
  636. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/promise.upbdefs.h +82 -0
  637. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +133 -0
  638. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +67 -0
  639. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  640. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  641. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +161 -79
  642. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +5 -1
  643. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.c +84 -42
  644. data/src/core/ext/upbdefs-gen/udpa/annotations/migrate.upbdefs.h +5 -1
  645. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.c +48 -26
  646. data/src/core/ext/upbdefs-gen/udpa/annotations/security.upbdefs.h +5 -1
  647. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.c +26 -14
  648. data/src/core/ext/upbdefs-gen/udpa/annotations/sensitive.upbdefs.h +5 -1
  649. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.c +50 -26
  650. data/src/core/ext/upbdefs-gen/udpa/annotations/status.upbdefs.h +5 -1
  651. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.c +36 -19
  652. data/src/core/ext/upbdefs-gen/udpa/annotations/versioning.upbdefs.h +5 -1
  653. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.c +538 -261
  654. data/src/core/ext/upbdefs-gen/validate/validate.upbdefs.h +5 -1
  655. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.c +86 -43
  656. data/src/core/ext/upbdefs-gen/xds/annotations/v3/migrate.upbdefs.h +5 -1
  657. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.c +49 -26
  658. data/src/core/ext/upbdefs-gen/xds/annotations/v3/security.upbdefs.h +5 -1
  659. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.c +27 -15
  660. data/src/core/ext/upbdefs-gen/xds/annotations/v3/sensitive.upbdefs.h +5 -1
  661. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.c +87 -44
  662. data/src/core/ext/upbdefs-gen/xds/annotations/v3/status.upbdefs.h +5 -1
  663. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.c +37 -20
  664. data/src/core/ext/upbdefs-gen/xds/annotations/v3/versioning.upbdefs.h +5 -1
  665. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.c +30 -17
  666. data/src/core/ext/upbdefs-gen/xds/core/v3/authority.upbdefs.h +5 -1
  667. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.c +41 -23
  668. data/src/core/ext/upbdefs-gen/xds/core/v3/cidr.upbdefs.h +5 -1
  669. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.c +62 -33
  670. data/src/core/ext/upbdefs-gen/xds/core/v3/collection_entry.upbdefs.h +5 -1
  671. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.c +36 -19
  672. data/src/core/ext/upbdefs-gen/xds/core/v3/context_params.upbdefs.h +5 -1
  673. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.c +36 -20
  674. data/src/core/ext/upbdefs-gen/xds/core/v3/extension.upbdefs.h +5 -1
  675. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.c +42 -23
  676. data/src/core/ext/upbdefs-gen/xds/core/v3/resource.upbdefs.h +5 -1
  677. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.c +76 -39
  678. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_locator.upbdefs.h +5 -1
  679. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.c +45 -24
  680. data/src/core/ext/upbdefs-gen/xds/core/v3/resource_name.upbdefs.h +5 -1
  681. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.c +41 -23
  682. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/cel.upbdefs.h +5 -1
  683. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.c +53 -29
  684. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/domain.upbdefs.h +5 -1
  685. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.c +29 -16
  686. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/http_inputs.upbdefs.h +5 -1
  687. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.c +58 -32
  688. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/ip.upbdefs.h +5 -1
  689. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.c +207 -103
  690. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/matcher.upbdefs.h +5 -1
  691. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.c +95 -49
  692. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/range.upbdefs.h +5 -1
  693. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.c +38 -20
  694. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/regex.upbdefs.h +5 -1
  695. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.c +60 -31
  696. data/src/core/ext/upbdefs-gen/xds/type/matcher/v3/string.upbdefs.h +5 -1
  697. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.c +67 -36
  698. data/src/core/ext/upbdefs-gen/xds/type/v3/cel.upbdefs.h +5 -1
  699. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.c +31 -17
  700. data/src/core/ext/upbdefs-gen/xds/type/v3/range.upbdefs.h +5 -1
  701. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.c +31 -17
  702. data/src/core/ext/upbdefs-gen/xds/type/v3/typed_struct.upbdefs.h +5 -1
  703. data/src/core/filter/auth/auth_filters.h +9 -28
  704. data/src/core/filter/auth/client_auth_filter.cc +2 -120
  705. data/src/core/filter/auth/server_auth_filter.cc +5 -5
  706. data/src/core/filter/blackboard.h +2 -2
  707. data/src/core/filter/filter_args.h +46 -22
  708. data/src/core/filter/fused_filters.cc +154 -0
  709. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
  710. data/src/core/handshaker/handshaker.cc +31 -22
  711. data/src/core/handshaker/handshaker.h +5 -2
  712. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +8 -6
  713. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +19 -34
  714. data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
  715. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  716. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
  717. data/src/core/handshaker/proxy_mapper.h +1 -1
  718. data/src/core/handshaker/proxy_mapper_registry.h +1 -1
  719. data/src/core/handshaker/security/legacy_secure_endpoint.cc +597 -0
  720. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +988 -0
  721. data/src/core/handshaker/security/secure_endpoint.cc +851 -314
  722. data/src/core/handshaker/security/secure_endpoint.h +25 -0
  723. data/src/core/handshaker/security/security_handshaker.cc +18 -12
  724. data/src/core/handshaker/security/security_handshaker.h +1 -1
  725. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +13 -7
  726. data/src/core/lib/address_utils/parse_address.cc +5 -5
  727. data/src/core/lib/address_utils/parse_address.h +2 -2
  728. data/src/core/lib/address_utils/sockaddr_utils.cc +9 -9
  729. data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
  730. data/src/core/lib/channel/channel_args.cc +16 -1
  731. data/src/core/lib/channel/channel_args.h +9 -2
  732. data/src/core/lib/channel/channel_stack.cc +61 -29
  733. data/src/core/lib/channel/channel_stack.h +23 -7
  734. data/src/core/lib/channel/channel_stack_builder.cc +8 -4
  735. data/src/core/lib/channel/channel_stack_builder.h +10 -9
  736. data/src/core/lib/channel/channel_stack_builder_impl.cc +8 -13
  737. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -8
  738. data/src/core/lib/channel/connected_channel.cc +4 -4
  739. data/src/core/lib/channel/promise_based_filter.cc +147 -97
  740. data/src/core/lib/channel/promise_based_filter.h +753 -328
  741. data/src/core/lib/compression/compression_internal.cc +6 -6
  742. data/src/core/lib/compression/compression_internal.h +1 -1
  743. data/src/core/lib/compression/message_compress.cc +8 -8
  744. data/src/core/lib/debug/trace.cc +2 -5
  745. data/src/core/lib/debug/trace.h +10 -0
  746. data/src/core/lib/debug/trace_flags.cc +4 -4
  747. data/src/core/lib/debug/trace_flags.h +2 -2
  748. data/src/core/lib/debug/trace_impl.h +0 -1
  749. data/src/core/lib/event_engine/ares_resolver.cc +185 -64
  750. data/src/core/lib/event_engine/ares_resolver.h +55 -7
  751. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +20 -10
  752. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -4
  753. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  754. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  755. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +37 -9
  756. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +23 -7
  757. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +4 -4
  758. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
  759. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
  760. data/src/core/lib/event_engine/default_event_engine.cc +1 -1
  761. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  762. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.cc +40 -0
  763. data/src/core/lib/event_engine/endpoint_channel_arg_wrapper.h +60 -0
  764. data/src/core/lib/event_engine/event_engine.cc +7 -0
  765. data/src/core/lib/event_engine/extensions/blocking_dns.h +46 -0
  766. data/src/core/lib/event_engine/extensions/channelz.h +66 -0
  767. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
  768. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  769. data/src/core/lib/event_engine/extensions/tcp_trace.h +10 -3
  770. data/src/core/lib/event_engine/grpc_polled_fd.h +6 -1
  771. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
  772. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +147 -177
  773. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +21 -23
  774. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +104 -145
  775. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +16 -16
  776. data/src/core/lib/event_engine/posix_engine/event_poller.h +20 -25
  777. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +13 -25
  778. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  779. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +124 -0
  780. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +243 -0
  781. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +33 -22
  782. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +7 -3
  783. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +6 -1
  784. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -7
  785. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +4 -5
  786. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +7 -10
  787. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +4 -1
  788. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +179 -126
  789. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +46 -50
  790. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +514 -288
  791. data/src/core/lib/event_engine/posix_engine/posix_engine.h +79 -72
  792. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +56 -44
  793. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +9 -7
  794. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +40 -150
  795. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +7 -6
  796. data/src/core/lib/event_engine/posix_engine/posix_interface.h +211 -0
  797. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +1083 -0
  798. data/src/core/lib/event_engine/posix_engine/posix_interface_windows.cc +281 -0
  799. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.cc +154 -0
  800. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +174 -0
  801. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +4 -720
  802. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +12 -172
  803. data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
  804. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +36 -25
  805. data/src/core/lib/event_engine/posix_engine/timer_manager.h +14 -12
  806. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +119 -153
  807. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +28 -96
  808. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +27 -26
  809. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +7 -3
  810. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +37 -63
  811. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +7 -3
  812. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +7 -6
  813. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +14 -8
  814. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +3 -1
  815. data/src/core/lib/event_engine/query_extensions.h +10 -21
  816. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
  817. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  818. data/src/core/lib/event_engine/shim.cc +14 -8
  819. data/src/core/lib/event_engine/shim.h +4 -0
  820. data/src/core/lib/event_engine/slice.cc +2 -2
  821. data/src/core/lib/event_engine/tcp_socket_utils.cc +25 -24
  822. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  823. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  824. data/src/core/lib/event_engine/thread_pool/thread_pool.h +7 -3
  825. data/src/core/lib/event_engine/thread_pool/thread_pool_factory.cc +0 -17
  826. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +15 -13
  827. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +6 -5
  828. data/src/core/lib/event_engine/utils.cc +35 -1
  829. data/src/core/lib/event_engine/utils.h +4 -1
  830. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +38 -33
  831. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +6 -2
  832. data/src/core/lib/event_engine/windows/iocp.cc +11 -11
  833. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  834. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
  835. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  836. data/src/core/lib/event_engine/windows/win_socket.h +2 -2
  837. data/src/core/lib/event_engine/windows/windows_endpoint.cc +18 -18
  838. data/src/core/lib/event_engine/windows/windows_endpoint.h +5 -2
  839. data/src/core/lib/event_engine/windows/windows_engine.cc +20 -19
  840. data/src/core/lib/event_engine/windows/windows_engine.h +4 -6
  841. data/src/core/lib/event_engine/windows/windows_listener.cc +24 -12
  842. data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
  843. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
  844. data/src/core/lib/experiments/config.cc +4 -4
  845. data/src/core/lib/experiments/experiments.cc +591 -165
  846. data/src/core/lib/experiments/experiments.h +229 -89
  847. data/src/core/lib/iomgr/buffer_list.cc +1 -1
  848. data/src/core/lib/iomgr/call_combiner.cc +4 -4
  849. data/src/core/lib/iomgr/call_combiner.h +2 -2
  850. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  851. data/src/core/lib/iomgr/closure.h +2 -2
  852. data/src/core/lib/iomgr/combiner.cc +5 -4
  853. data/src/core/lib/iomgr/endpoint.cc +4 -3
  854. data/src/core/lib/iomgr/endpoint.h +8 -5
  855. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -9
  856. data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
  857. data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
  858. data/src/core/lib/iomgr/error.cc +1 -1
  859. data/src/core/lib/iomgr/error.h +2 -2
  860. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  861. data/src/core/lib/iomgr/ev_apple.cc +1 -1
  862. data/src/core/lib/iomgr/ev_epoll1_linux.cc +26 -21
  863. data/src/core/lib/iomgr/ev_poll_posix.cc +25 -16
  864. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  865. data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
  866. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
  867. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +21 -19
  868. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  869. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
  870. data/src/core/lib/iomgr/exec_ctx.cc +3 -3
  871. data/src/core/lib/iomgr/exec_ctx.h +4 -10
  872. data/src/core/lib/iomgr/fork_posix.cc +1 -8
  873. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  874. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  875. data/src/core/lib/iomgr/iomgr.cc +1 -4
  876. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +3 -0
  877. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  878. data/src/core/lib/iomgr/lockfree_event.cc +3 -3
  879. data/src/core/lib/iomgr/polling_entity.cc +4 -4
  880. data/src/core/lib/iomgr/resolve_address.cc +1 -1
  881. data/src/core/lib/iomgr/resolve_address.h +2 -2
  882. data/src/core/lib/iomgr/resolve_address_posix.cc +37 -47
  883. data/src/core/lib/iomgr/resolve_address_posix.h +15 -0
  884. data/src/core/lib/iomgr/resolve_address_windows.cc +23 -46
  885. data/src/core/lib/iomgr/resolve_address_windows.h +15 -2
  886. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
  887. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  888. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
  889. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  890. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  891. data/src/core/lib/iomgr/socket_windows.cc +6 -6
  892. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
  893. data/src/core/lib/iomgr/tcp_client_posix.cc +22 -14
  894. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  895. data/src/core/lib/iomgr/tcp_posix.cc +75 -67
  896. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  897. data/src/core/lib/iomgr/tcp_server.h +7 -0
  898. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
  899. data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
  900. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
  901. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
  902. data/src/core/lib/iomgr/tcp_server_windows.cc +84 -33
  903. data/src/core/lib/iomgr/tcp_windows.cc +11 -10
  904. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  905. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  906. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  907. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  908. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  909. data/src/core/lib/iomgr/vsock.cc +1 -1
  910. data/src/core/lib/iomgr/vsock.h +1 -1
  911. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
  912. data/src/core/lib/promise/activity.cc +3 -3
  913. data/src/core/lib/promise/activity.h +14 -12
  914. data/src/core/lib/promise/all_ok.h +3 -3
  915. data/src/core/lib/promise/arena_promise.h +66 -9
  916. data/src/core/lib/promise/context.h +3 -3
  917. data/src/core/lib/promise/detail/join_state.h +10 -10
  918. data/src/core/lib/promise/detail/promise_factory.h +11 -1
  919. data/src/core/lib/promise/detail/promise_like.h +133 -2
  920. data/src/core/lib/promise/detail/promise_variant.h +50 -0
  921. data/src/core/lib/promise/detail/seq_state.h +896 -16
  922. data/src/core/lib/promise/detail/status.h +2 -2
  923. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
  924. data/src/core/lib/promise/for_each.h +8 -8
  925. data/src/core/lib/promise/if.h +21 -1
  926. data/src/core/lib/promise/inter_activity_latch.h +147 -0
  927. data/src/core/lib/promise/inter_activity_mutex.h +547 -0
  928. data/src/core/lib/promise/interceptor_list.h +5 -5
  929. data/src/core/lib/promise/latch.h +9 -9
  930. data/src/core/lib/promise/loop.h +67 -5
  931. data/src/core/lib/promise/map.h +48 -7
  932. data/src/core/lib/promise/match_promise.h +103 -0
  933. data/src/core/lib/promise/mpsc.cc +426 -0
  934. data/src/core/lib/promise/mpsc.h +490 -0
  935. data/src/core/lib/promise/observable.h +6 -6
  936. data/src/core/lib/promise/party.cc +87 -25
  937. data/src/core/lib/promise/party.h +84 -15
  938. data/src/core/lib/promise/pipe.h +31 -17
  939. data/src/core/lib/promise/poll.h +16 -5
  940. data/src/core/lib/promise/promise.h +2 -2
  941. data/src/core/lib/promise/race.h +31 -0
  942. data/src/core/lib/promise/seq.h +5 -0
  943. data/src/core/lib/promise/sleep.cc +9 -4
  944. data/src/core/lib/promise/sleep.h +1 -1
  945. data/src/core/lib/promise/status_flag.h +15 -8
  946. data/src/core/lib/promise/try_join.h +5 -5
  947. data/src/core/lib/promise/try_seq.h +10 -5
  948. data/src/core/lib/promise/wait_set.cc +28 -0
  949. data/src/core/lib/promise/wait_set.h +86 -0
  950. data/src/core/lib/resource_quota/api.cc +1 -1
  951. data/src/core/lib/resource_quota/arena.cc +1 -1
  952. data/src/core/lib/resource_quota/arena.h +34 -2
  953. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  954. data/src/core/lib/resource_quota/connection_quota.h +1 -1
  955. data/src/core/lib/resource_quota/memory_quota.cc +145 -28
  956. data/src/core/lib/resource_quota/memory_quota.h +72 -27
  957. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  958. data/src/core/lib/resource_quota/periodic_update.h +9 -1
  959. data/src/core/lib/resource_quota/resource_quota.cc +23 -4
  960. data/src/core/lib/resource_quota/resource_quota.h +5 -1
  961. data/src/core/lib/resource_quota/stream_quota.cc +22 -0
  962. data/src/core/lib/resource_quota/stream_quota.h +31 -0
  963. data/src/core/lib/resource_quota/telemetry.h +55 -0
  964. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  965. data/src/core/lib/resource_quota/thread_quota.h +1 -1
  966. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  967. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  968. data/src/core/lib/security/authorization/audit_logging.cc +7 -7
  969. data/src/core/lib/security/authorization/audit_logging.h +1 -1
  970. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  971. data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
  972. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  973. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  974. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +4 -5
  975. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
  976. data/src/core/lib/security/authorization/matchers.cc +2 -2
  977. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  978. data/src/core/lib/slice/percent_encoding.cc +1 -1
  979. data/src/core/lib/slice/slice.cc +1 -1
  980. data/src/core/lib/slice/slice.h +7 -2
  981. data/src/core/lib/slice/slice_buffer.cc +1 -1
  982. data/src/core/lib/slice/slice_buffer.h +6 -0
  983. data/src/core/lib/slice/slice_internal.h +1 -1
  984. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  985. data/src/core/lib/surface/call.cc +65 -31
  986. data/src/core/lib/surface/call.h +19 -11
  987. data/src/core/lib/surface/call_log_batch.cc +2 -2
  988. data/src/core/lib/surface/call_utils.cc +7 -7
  989. data/src/core/lib/surface/call_utils.h +85 -20
  990. data/src/core/lib/surface/channel.cc +6 -5
  991. data/src/core/lib/surface/channel.h +13 -3
  992. data/src/core/lib/surface/channel_create.cc +145 -6
  993. data/src/core/lib/surface/channel_create.h +5 -1
  994. data/src/core/lib/surface/channel_init.cc +239 -65
  995. data/src/core/lib/surface/channel_init.h +90 -10
  996. data/src/core/lib/surface/completion_queue.cc +23 -24
  997. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  998. data/src/core/lib/surface/connection_context.h +45 -2
  999. data/src/core/lib/surface/filter_stack_call.cc +43 -40
  1000. data/src/core/lib/surface/filter_stack_call.h +6 -7
  1001. data/src/core/lib/surface/init.cc +12 -21
  1002. data/src/core/lib/surface/lame_client.cc +2 -2
  1003. data/src/core/lib/surface/lame_client.h +3 -3
  1004. data/src/core/lib/surface/legacy_channel.cc +13 -15
  1005. data/src/core/lib/surface/legacy_channel.h +4 -2
  1006. data/src/core/lib/surface/validate_metadata.cc +2 -2
  1007. data/src/core/lib/surface/validate_metadata.h +3 -3
  1008. data/src/core/lib/surface/version.cc +2 -2
  1009. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  1010. data/src/core/lib/transport/bdp_estimator.h +5 -5
  1011. data/src/core/lib/transport/connectivity_state.cc +1 -1
  1012. data/src/core/lib/transport/connectivity_state.h +2 -2
  1013. data/src/core/lib/transport/error_utils.h +1 -1
  1014. data/src/core/lib/transport/promise_endpoint.cc +110 -0
  1015. data/src/core/lib/transport/promise_endpoint.h +307 -0
  1016. data/src/core/lib/transport/status_conversion.cc +7 -34
  1017. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  1018. data/src/core/lib/transport/transport.cc +5 -5
  1019. data/src/core/lib/transport/transport.h +65 -4
  1020. data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
  1021. data/src/core/lib/transport/transport_op_string.cc +2 -2
  1022. data/src/core/load_balancing/address_filtering.cc +1 -1
  1023. data/src/core/load_balancing/address_filtering.h +2 -2
  1024. data/src/core/load_balancing/backend_metric_parser.cc +13 -19
  1025. data/src/core/load_balancing/backend_metric_parser.h +1 -1
  1026. data/src/core/load_balancing/child_policy_handler.cc +10 -12
  1027. data/src/core/load_balancing/child_policy_handler.h +2 -2
  1028. data/src/core/load_balancing/delegating_helper.h +4 -5
  1029. data/src/core/load_balancing/endpoint_list.cc +34 -7
  1030. data/src/core/load_balancing/endpoint_list.h +2 -2
  1031. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +10 -8
  1032. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +6 -2
  1033. data/src/core/load_balancing/grpclb/grpclb.cc +39 -50
  1034. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
  1035. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  1036. data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
  1037. data/src/core/load_balancing/health_check_client.cc +16 -18
  1038. data/src/core/load_balancing/health_check_client_internal.h +5 -5
  1039. data/src/core/load_balancing/lb_policy.h +12 -11
  1040. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  1041. data/src/core/load_balancing/lb_policy_registry.cc +3 -3
  1042. data/src/core/load_balancing/lb_policy_registry.h +2 -2
  1043. data/src/core/load_balancing/oob_backend_metric.cc +14 -16
  1044. data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
  1045. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +13 -20
  1046. data/src/core/load_balancing/pick_first/pick_first.cc +80 -40
  1047. data/src/core/load_balancing/priority/priority.cc +29 -30
  1048. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
  1049. data/src/core/load_balancing/rls/rls.cc +29 -28
  1050. data/src/core/load_balancing/round_robin/round_robin.cc +18 -19
  1051. data/src/core/load_balancing/subchannel_interface.h +2 -2
  1052. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  1053. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +46 -45
  1054. data/src/core/load_balancing/weighted_target/weighted_target.cc +17 -23
  1055. data/src/core/load_balancing/xds/cds.cc +91 -38
  1056. data/src/core/load_balancing/xds/xds_cluster_impl.cc +29 -44
  1057. data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
  1058. data/src/core/load_balancing/xds/xds_override_host.cc +69 -48
  1059. data/src/core/load_balancing/xds/xds_override_host.h +1 -1
  1060. data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
  1061. data/src/core/net/socket_mutator.cc +19 -0
  1062. data/src/core/net/socket_mutator.h +25 -0
  1063. data/src/core/plugin_registry/grpc_plugin_registry.cc +8 -0
  1064. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  1065. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
  1066. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
  1067. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +7 -2
  1068. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  1069. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +37 -36
  1070. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +24 -21
  1071. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +4 -3
  1072. data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
  1073. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
  1074. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
  1075. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  1076. data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
  1077. data/src/core/resolver/endpoint_addresses.cc +6 -6
  1078. data/src/core/resolver/endpoint_addresses.h +4 -1
  1079. data/src/core/resolver/fake/fake_resolver.cc +3 -3
  1080. data/src/core/resolver/fake/fake_resolver.h +3 -3
  1081. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
  1082. data/src/core/resolver/polling_resolver.cc +8 -8
  1083. data/src/core/resolver/polling_resolver.h +1 -1
  1084. data/src/core/resolver/resolver.h +2 -2
  1085. data/src/core/resolver/resolver_factory.h +2 -2
  1086. data/src/core/resolver/resolver_registry.cc +5 -4
  1087. data/src/core/resolver/resolver_registry.h +1 -1
  1088. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +6 -5
  1089. data/src/core/resolver/xds/xds_config.cc +7 -4
  1090. data/src/core/resolver/xds/xds_config.h +12 -7
  1091. data/src/core/resolver/xds/xds_dependency_manager.cc +27 -12
  1092. data/src/core/resolver/xds/xds_dependency_manager.h +5 -4
  1093. data/src/core/resolver/xds/xds_resolver.cc +56 -32
  1094. data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
  1095. data/src/core/server/add_port.cc +87 -0
  1096. data/src/core/server/server.cc +175 -105
  1097. data/src/core/server/server.h +31 -13
  1098. data/src/core/server/server_call_tracer_filter.cc +1 -67
  1099. data/src/core/server/server_call_tracer_filter.h +68 -0
  1100. data/src/core/server/server_config_selector.h +2 -2
  1101. data/src/core/server/server_config_selector_filter.cc +6 -6
  1102. data/src/core/server/xds_channel_stack_modifier.cc +3 -2
  1103. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  1104. data/src/core/server/xds_server_config_fetcher.cc +81 -42
  1105. data/src/core/service_config/service_config.h +2 -2
  1106. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  1107. data/src/core/service_config/service_config_channel_arg_filter.h +85 -0
  1108. data/src/core/service_config/service_config_impl.cc +3 -3
  1109. data/src/core/service_config/service_config_impl.h +5 -5
  1110. data/src/core/service_config/service_config_parser.h +1 -1
  1111. data/src/core/telemetry/call_tracer.cc +55 -59
  1112. data/src/core/telemetry/call_tracer.h +211 -29
  1113. data/src/core/telemetry/context_list_entry.cc +38 -0
  1114. data/src/core/{ext/transport/chttp2/transport → telemetry}/context_list_entry.h +45 -15
  1115. data/src/core/telemetry/default_tcp_tracer.cc +26 -0
  1116. data/src/core/telemetry/default_tcp_tracer.h +44 -0
  1117. data/src/core/telemetry/histogram.h +205 -0
  1118. data/src/core/telemetry/instrument.cc +999 -0
  1119. data/src/core/telemetry/instrument.h +1105 -0
  1120. data/src/core/telemetry/metrics.cc +15 -5
  1121. data/src/core/telemetry/metrics.h +44 -13
  1122. data/src/core/telemetry/stats.h +2 -7
  1123. data/src/core/telemetry/stats_data.cc +541 -492
  1124. data/src/core/telemetry/stats_data.h +470 -298
  1125. data/src/core/telemetry/tcp_tracer.cc +38 -0
  1126. data/src/core/telemetry/tcp_tracer.h +14 -16
  1127. data/src/core/transport/auth_context.cc +23 -4
  1128. data/src/core/transport/auth_context.h +6 -2
  1129. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  1130. data/src/core/transport/endpoint_transport.h +90 -0
  1131. data/src/core/transport/endpoint_transport_client_channel_factory.cc +61 -0
  1132. data/src/core/transport/endpoint_transport_client_channel_factory.h +57 -0
  1133. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
  1134. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
  1135. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
  1136. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +115 -51
  1137. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +4 -1
  1138. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  1139. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +118 -54
  1140. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +8 -2
  1141. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
  1142. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  1143. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +4 -4
  1144. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
  1145. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
  1146. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +16 -8
  1147. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
  1148. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +28 -7
  1149. data/src/core/tsi/fake_transport_security.cc +23 -5
  1150. data/src/core/tsi/local_transport_security.cc +1 -1
  1151. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  1152. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
  1153. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
  1154. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
  1155. data/src/core/tsi/ssl_transport_security.cc +416 -125
  1156. data/src/core/tsi/ssl_transport_security.h +26 -12
  1157. data/src/core/tsi/ssl_transport_security_utils.cc +31 -10
  1158. data/src/core/tsi/ssl_transport_security_utils.h +6 -2
  1159. data/src/core/tsi/transport_security.h +3 -0
  1160. data/src/core/tsi/transport_security_grpc.cc +16 -0
  1161. data/src/core/tsi/transport_security_grpc.h +37 -3
  1162. data/src/core/tsi/transport_security_interface.h +30 -25
  1163. data/src/core/util/alloc.cc +1 -1
  1164. data/src/core/util/backoff.cc +5 -16
  1165. data/src/core/util/backoff.h +2 -2
  1166. data/src/core/util/chunked_vector.h +4 -4
  1167. data/src/core/util/crash.h +1 -1
  1168. data/src/core/util/down_cast.h +1 -1
  1169. data/src/core/util/dual_ref_counted.h +50 -2
  1170. data/src/core/util/event_log.cc +2 -2
  1171. data/src/core/util/event_log.h +3 -3
  1172. data/src/core/util/function_signature.h +80 -0
  1173. data/src/core/util/gcp_metadata_query.cc +10 -9
  1174. data/src/core/util/gcp_metadata_query.h +2 -2
  1175. data/src/core/util/glob.cc +2 -0
  1176. data/src/core/util/grpc_check.cc +24 -0
  1177. data/src/core/util/grpc_check.h +103 -0
  1178. data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
  1179. data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
  1180. data/src/core/util/http_client/format_request.cc +1 -1
  1181. data/src/core/util/http_client/httpcli.cc +17 -10
  1182. data/src/core/util/http_client/httpcli.h +8 -5
  1183. data/src/core/util/http_client/httpcli_security_connector.cc +9 -6
  1184. data/src/core/util/http_client/parser.cc +4 -4
  1185. data/src/core/util/json/json_channel_args.h +1 -1
  1186. data/src/core/util/json/json_object_loader.h +9 -9
  1187. data/src/core/util/json/json_reader.cc +2 -2
  1188. data/src/core/util/json/json_reader.h +1 -1
  1189. data/src/core/util/json/json_util.h +3 -3
  1190. data/src/core/util/json/json_writer.cc +1 -1
  1191. data/src/core/util/latent_see.cc +202 -123
  1192. data/src/core/util/latent_see.h +423 -204
  1193. data/src/core/util/linux/cpu.cc +1 -1
  1194. data/src/core/util/linux/env.cc +3 -1
  1195. data/src/core/util/load_file.cc +1 -1
  1196. data/src/core/util/load_file.h +1 -1
  1197. data/src/core/util/log.cc +7 -3
  1198. data/src/core/util/lru_cache.h +4 -4
  1199. data/src/core/util/matchers.h +1 -1
  1200. data/src/core/util/memory_usage.h +284 -0
  1201. data/src/core/util/mpscq.h +1 -1
  1202. data/src/core/util/notification.h +1 -1
  1203. data/src/core/util/per_cpu.cc +2 -0
  1204. data/src/core/util/per_cpu.h +7 -0
  1205. data/src/core/util/posix/cpu.cc +1 -1
  1206. data/src/core/util/posix/directory_reader.cc +3 -2
  1207. data/src/core/util/posix/stat.cc +2 -2
  1208. data/src/core/util/posix/sync.cc +24 -24
  1209. data/src/core/util/posix/thd.cc +2 -2
  1210. data/src/core/util/posix/tmpfile.cc +2 -2
  1211. data/src/core/util/postmortem_emit.cc +52 -0
  1212. data/src/core/util/postmortem_emit.h +30 -0
  1213. data/src/core/util/ref_counted.h +2 -2
  1214. data/src/core/util/ref_counted_ptr.h +32 -1
  1215. data/src/core/util/ref_counted_string.h +1 -1
  1216. data/src/core/util/shared_bit_gen.cc +21 -0
  1217. data/src/core/util/shared_bit_gen.h +64 -0
  1218. data/src/core/util/single_set_ptr.h +40 -4
  1219. data/src/core/util/status_helper.cc +8 -8
  1220. data/src/core/util/status_helper.h +1 -1
  1221. data/src/core/util/string.cc +2 -2
  1222. data/src/core/util/sync_abseil.cc +1 -1
  1223. data/src/core/util/table.h +1 -1
  1224. data/src/core/util/time.cc +1 -1
  1225. data/src/core/util/time_precise.cc +1 -1
  1226. data/src/core/util/trie_lookup.h +170 -0
  1227. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  1228. data/src/core/util/unique_type_name.h +1 -1
  1229. data/src/core/util/upb_utils.h +48 -1
  1230. data/src/core/util/uri.cc +76 -17
  1231. data/src/core/util/uri.h +13 -8
  1232. data/src/core/util/useful.h +144 -2
  1233. data/src/core/util/validation_errors.cc +2 -2
  1234. data/src/core/util/validation_errors.h +2 -3
  1235. data/src/core/util/wait_for_single_owner.cc +31 -0
  1236. data/src/core/util/wait_for_single_owner.h +25 -1
  1237. data/src/core/util/windows/directory_reader.cc +2 -1
  1238. data/src/core/util/windows/stat.cc +2 -2
  1239. data/src/core/util/windows/thd.cc +3 -5
  1240. data/src/core/util/windows/time.cc +1 -1
  1241. data/src/core/util/work_serializer.cc +4 -4
  1242. data/src/core/util/work_serializer.h +2 -2
  1243. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  1244. data/src/core/xds/grpc/certificate_provider_store.h +2 -2
  1245. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +35 -8
  1246. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +6 -1
  1247. data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
  1248. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  1249. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +9 -7
  1250. data/src/core/xds/grpc/xds_bootstrap_grpc.h +13 -3
  1251. data/src/core/xds/grpc/xds_certificate_provider.cc +9 -10
  1252. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  1253. data/src/core/xds/grpc/xds_client_grpc.cc +43 -20
  1254. data/src/core/xds/grpc/xds_client_grpc.h +6 -3
  1255. data/src/core/xds/grpc/xds_cluster.cc +2 -2
  1256. data/src/core/xds/grpc/xds_cluster.h +1 -1
  1257. data/src/core/xds/grpc/xds_cluster_parser.cc +7 -7
  1258. data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
  1259. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
  1260. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  1261. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  1262. data/src/core/xds/grpc/xds_common_types.h +1 -1
  1263. data/src/core/xds/grpc/xds_common_types_parser.cc +143 -63
  1264. data/src/core/xds/grpc/xds_common_types_parser.h +12 -0
  1265. data/src/core/xds/grpc/xds_endpoint.h +2 -2
  1266. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -7
  1267. data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
  1268. data/src/core/xds/grpc/xds_health_status.cc +1 -1
  1269. data/src/core/xds/grpc/xds_health_status.h +1 -1
  1270. data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
  1271. data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
  1272. data/src/core/xds/grpc/xds_http_filter.h +10 -3
  1273. data/src/core/xds/grpc/xds_http_filter_registry.cc +5 -6
  1274. data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
  1275. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +25 -3
  1276. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +5 -2
  1277. data/src/core/xds/grpc/xds_http_rbac_filter.cc +14 -21
  1278. data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
  1279. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
  1280. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
  1281. data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
  1282. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  1283. data/src/core/xds/grpc/xds_listener.cc +2 -2
  1284. data/src/core/xds/grpc/xds_listener_parser.cc +9 -9
  1285. data/src/core/xds/grpc/xds_listener_parser.h +1 -1
  1286. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  1287. data/src/core/xds/grpc/xds_matcher.h +432 -0
  1288. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  1289. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  1290. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  1291. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  1292. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  1293. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  1294. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  1295. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  1296. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  1297. data/src/core/xds/grpc/xds_metadata.h +3 -3
  1298. data/src/core/xds/grpc/xds_metadata_parser.cc +42 -66
  1299. data/src/core/xds/grpc/xds_metadata_parser.h +0 -2
  1300. data/src/core/xds/grpc/xds_route_config.cc +3 -3
  1301. data/src/core/xds/grpc/xds_route_config_parser.cc +84 -129
  1302. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  1303. data/src/core/xds/grpc/xds_routing.cc +6 -6
  1304. data/src/core/xds/grpc/xds_routing.h +2 -2
  1305. data/src/core/xds/grpc/xds_server_grpc.cc +65 -15
  1306. data/src/core/xds/grpc/xds_server_grpc.h +10 -2
  1307. data/src/core/xds/grpc/xds_server_grpc_interface.h +4 -0
  1308. data/src/core/xds/grpc/xds_transport_grpc.cc +29 -11
  1309. data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
  1310. data/src/core/xds/xds_client/lrs_client.cc +9 -9
  1311. data/src/core/xds/xds_client/lrs_client.h +4 -4
  1312. data/src/core/xds/xds_client/xds_api.h +1 -1
  1313. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
  1314. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
  1315. data/src/core/xds/xds_client/xds_bootstrap.h +2 -0
  1316. data/src/core/xds/xds_client/xds_client.cc +44 -23
  1317. data/src/core/xds/xds_client/xds_client.h +5 -5
  1318. data/src/core/xds/xds_client/xds_locality.h +2 -2
  1319. data/src/core/xds/xds_client/xds_resource_type.h +2 -2
  1320. data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
  1321. data/src/core/xds/xds_client/xds_transport.h +2 -2
  1322. data/src/ruby/ext/grpc/extconf.rb +17 -13
  1323. data/src/ruby/ext/grpc/rb_call.c +1 -9
  1324. data/src/ruby/ext/grpc/rb_channel.c +70 -557
  1325. data/src/ruby/ext/grpc/rb_channel.h +0 -3
  1326. data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
  1327. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  1328. data/src/ruby/ext/grpc/rb_completion_queue.c +26 -14
  1329. data/src/ruby/ext/grpc/rb_completion_queue.h +1 -7
  1330. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  1331. data/src/ruby/ext/grpc/rb_grpc.c +9 -5
  1332. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -3
  1333. data/src/ruby/ext/grpc/rb_loader.c +0 -4
  1334. data/src/ruby/ext/grpc/rb_server.c +31 -50
  1335. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  1336. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  1337. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  1338. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -4
  1339. data/src/ruby/lib/grpc/grpc.rb +7 -9
  1340. data/src/ruby/lib/grpc/version.rb +1 -1
  1341. data/src/ruby/spec/client_server_spec.rb +1 -1
  1342. data/src/ruby/spec/core_spec.rb +22 -0
  1343. data/src/ruby/spec/generic/active_call_spec.rb +1 -1
  1344. data/src/ruby/spec/generic/client_stub_spec.rb +2 -6
  1345. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  1346. data/src/ruby/spec/generic/rpc_server_spec.rb +4 -5
  1347. data/src/ruby/spec/spec_helper.rb +1 -1
  1348. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +2 -2
  1349. data/third_party/abseil-cpp/absl/algorithm/container.h +81 -67
  1350. data/third_party/abseil-cpp/absl/base/attributes.h +142 -23
  1351. data/third_party/abseil-cpp/absl/base/call_once.h +18 -16
  1352. data/third_party/abseil-cpp/absl/base/config.h +23 -132
  1353. data/third_party/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  1354. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  1355. data/third_party/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  1356. data/third_party/abseil-cpp/absl/base/internal/endian.h +34 -38
  1357. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  1358. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -5
  1359. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +106 -0
  1360. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +1 -1
  1361. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +0 -9
  1362. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -13
  1363. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +14 -0
  1364. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +5 -1
  1365. data/third_party/abseil-cpp/absl/base/internal/tracing.cc +39 -0
  1366. data/third_party/abseil-cpp/absl/base/internal/tracing.h +81 -0
  1367. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  1368. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +0 -10
  1369. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +17 -0
  1370. data/third_party/abseil-cpp/absl/base/macros.h +35 -4
  1371. data/third_party/abseil-cpp/absl/base/no_destructor.h +11 -32
  1372. data/third_party/abseil-cpp/absl/base/nullability.h +124 -56
  1373. data/third_party/abseil-cpp/absl/base/optimization.h +8 -12
  1374. data/third_party/abseil-cpp/absl/base/options.h +7 -81
  1375. data/third_party/abseil-cpp/absl/base/policy_checks.h +9 -7
  1376. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  1377. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  1378. data/third_party/abseil-cpp/absl/container/btree_map.h +891 -0
  1379. data/third_party/abseil-cpp/absl/container/btree_set.h +826 -0
  1380. data/third_party/abseil-cpp/absl/container/fixed_array.h +9 -15
  1381. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +22 -3
  1382. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +23 -4
  1383. data/third_party/abseil-cpp/absl/container/inlined_vector.h +10 -6
  1384. data/third_party/abseil-cpp/absl/container/internal/btree.h +3149 -0
  1385. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +867 -0
  1386. data/third_party/abseil-cpp/absl/container/internal/common.h +43 -0
  1387. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +10 -2
  1388. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -10
  1389. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +1 -8
  1390. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +0 -4
  1391. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +527 -0
  1392. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +20 -4
  1393. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +31 -12
  1394. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +6 -9
  1395. data/third_party/abseil-cpp/absl/container/internal/layout.h +27 -43
  1396. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  1397. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  1398. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +1462 -263
  1399. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1170 -1547
  1400. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +80 -0
  1401. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  1402. data/third_party/abseil-cpp/absl/crc/crc32c.cc +0 -4
  1403. data/third_party/abseil-cpp/absl/crc/crc32c.h +7 -5
  1404. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +56 -0
  1405. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  1406. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +45 -74
  1407. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_memcpy.h +21 -7
  1408. data/third_party/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  1409. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  1410. data/third_party/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  1411. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +12 -37
  1412. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  1413. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +1 -1
  1414. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -21
  1415. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  1416. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +7 -0
  1417. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  1418. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  1419. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  1420. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -8
  1421. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  1422. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  1423. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +19 -9
  1424. data/third_party/abseil-cpp/absl/debugging/leak_check.cc +73 -0
  1425. data/third_party/abseil-cpp/absl/debugging/leak_check.h +150 -0
  1426. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +144 -27
  1427. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  1428. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +3 -2
  1429. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +67 -18
  1430. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  1431. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  1432. data/third_party/abseil-cpp/absl/flags/commandlineflag.cc +1 -0
  1433. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +9 -2
  1434. data/third_party/abseil-cpp/absl/flags/flag.h +18 -15
  1435. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  1436. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +14 -5
  1437. data/third_party/abseil-cpp/absl/flags/internal/flag.h +23 -11
  1438. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.cc +4 -0
  1439. data/third_party/abseil-cpp/absl/flags/internal/private_handle_accessor.h +3 -0
  1440. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +13 -12
  1441. data/third_party/abseil-cpp/absl/flags/internal/registry.h +4 -3
  1442. data/third_party/abseil-cpp/absl/flags/reflection.cc +2 -3
  1443. data/third_party/abseil-cpp/absl/flags/usage_config.cc +9 -4
  1444. data/third_party/abseil-cpp/absl/functional/any_invocable.h +8 -10
  1445. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -9
  1446. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +110 -226
  1447. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  1448. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  1449. data/third_party/abseil-cpp/absl/hash/hash.h +44 -2
  1450. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +14 -18
  1451. data/third_party/abseil-cpp/absl/hash/internal/hash.h +257 -127
  1452. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +27 -72
  1453. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +2 -6
  1454. data/third_party/abseil-cpp/absl/hash/internal/weakly_mixed_integer.h +38 -0
  1455. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +2 -0
  1456. data/third_party/abseil-cpp/absl/log/check.h +2 -1
  1457. data/third_party/abseil-cpp/absl/log/globals.h +4 -5
  1458. data/third_party/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  1459. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +43 -38
  1460. data/third_party/abseil-cpp/absl/log/internal/check_op.h +124 -99
  1461. data/third_party/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  1462. data/third_party/abseil-cpp/absl/log/internal/conditions.h +7 -2
  1463. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +158 -64
  1464. data/third_party/abseil-cpp/absl/log/internal/log_message.h +140 -83
  1465. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  1466. data/third_party/abseil-cpp/absl/log/internal/proto.cc +3 -5
  1467. data/third_party/abseil-cpp/absl/log/internal/proto.h +28 -18
  1468. data/third_party/abseil-cpp/absl/log/internal/strip.h +4 -12
  1469. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +115 -0
  1470. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +107 -0
  1471. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +8 -1
  1472. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  1473. data/third_party/abseil-cpp/absl/log/internal/voidify.h +10 -4
  1474. data/third_party/abseil-cpp/absl/log/log.h +48 -35
  1475. data/third_party/abseil-cpp/absl/log/log_sink_registry.h +5 -2
  1476. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +2 -0
  1477. data/third_party/abseil-cpp/absl/meta/type_traits.h +62 -181
  1478. data/third_party/abseil-cpp/absl/numeric/bits.h +68 -2
  1479. data/third_party/abseil-cpp/absl/numeric/int128.cc +0 -52
  1480. data/third_party/abseil-cpp/absl/numeric/int128.h +15 -3
  1481. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +6 -4
  1482. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +6 -3
  1483. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +7 -3
  1484. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  1485. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +3 -1
  1486. data/third_party/abseil-cpp/absl/random/beta_distribution.h +3 -1
  1487. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +12 -12
  1488. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +10 -0
  1489. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +4 -2
  1490. data/third_party/abseil-cpp/absl/random/distributions.h +6 -8
  1491. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -0
  1492. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +3 -2
  1493. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -7
  1494. data/third_party/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +22 -90
  1495. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.h +35 -0
  1496. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +5 -2
  1497. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  1498. data/third_party/abseil-cpp/absl/random/internal/platform.h +12 -12
  1499. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +57 -6
  1500. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -1
  1501. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  1502. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  1503. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +2 -2
  1504. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +0 -1
  1505. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +1 -4
  1506. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +4 -3
  1507. data/third_party/abseil-cpp/absl/random/random.h +88 -53
  1508. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +2 -3
  1509. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  1510. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -2
  1511. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -1
  1512. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +2 -0
  1513. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +5 -4
  1514. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +10 -7
  1515. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  1516. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -3
  1517. data/third_party/abseil-cpp/absl/status/status.cc +4 -8
  1518. data/third_party/abseil-cpp/absl/status/status.h +8 -8
  1519. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  1520. data/third_party/abseil-cpp/absl/status/statusor.cc +2 -2
  1521. data/third_party/abseil-cpp/absl/status/statusor.h +6 -6
  1522. data/third_party/abseil-cpp/absl/strings/ascii.cc +44 -29
  1523. data/third_party/abseil-cpp/absl/strings/ascii.h +62 -22
  1524. data/third_party/abseil-cpp/absl/strings/charconv.cc +25 -29
  1525. data/third_party/abseil-cpp/absl/strings/charconv.h +5 -5
  1526. data/third_party/abseil-cpp/absl/strings/charset.h +3 -4
  1527. data/third_party/abseil-cpp/absl/strings/cord.cc +54 -58
  1528. data/third_party/abseil-cpp/absl/strings/cord.h +99 -102
  1529. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  1530. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  1531. data/third_party/abseil-cpp/absl/strings/escaping.cc +186 -197
  1532. data/third_party/abseil-cpp/absl/strings/escaping.h +9 -10
  1533. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1534. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +1 -1
  1535. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +53 -22
  1536. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  1537. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +0 -4
  1538. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  1539. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  1540. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  1541. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +3 -2
  1542. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  1543. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  1544. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  1545. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -0
  1546. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  1547. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  1548. data/third_party/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  1549. data/third_party/abseil-cpp/absl/strings/match.h +21 -11
  1550. data/third_party/abseil-cpp/absl/strings/numbers.cc +55 -33
  1551. data/third_party/abseil-cpp/absl/strings/numbers.h +87 -58
  1552. data/third_party/abseil-cpp/absl/strings/str_cat.cc +6 -7
  1553. data/third_party/abseil-cpp/absl/strings/str_cat.h +41 -30
  1554. data/third_party/abseil-cpp/absl/strings/str_format.h +18 -18
  1555. data/third_party/abseil-cpp/absl/strings/str_replace.cc +3 -3
  1556. data/third_party/abseil-cpp/absl/strings/str_replace.h +6 -6
  1557. data/third_party/abseil-cpp/absl/strings/str_split.h +18 -1
  1558. data/third_party/abseil-cpp/absl/strings/string_view.cc +4 -9
  1559. data/third_party/abseil-cpp/absl/strings/string_view.h +46 -50
  1560. data/third_party/abseil-cpp/absl/strings/strip.h +11 -8
  1561. data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -4
  1562. data/third_party/abseil-cpp/absl/strings/substitute.h +66 -64
  1563. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +16 -10
  1564. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +6 -0
  1565. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +5 -1
  1566. data/third_party/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  1567. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  1568. data/third_party/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  1569. data/third_party/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  1570. data/third_party/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  1571. data/third_party/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  1572. data/third_party/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  1573. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +39 -13
  1574. data/third_party/abseil-cpp/absl/synchronization/mutex.h +97 -69
  1575. data/third_party/abseil-cpp/absl/synchronization/notification.cc +10 -2
  1576. data/third_party/abseil-cpp/absl/synchronization/notification.h +12 -2
  1577. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -0
  1578. data/third_party/abseil-cpp/absl/time/duration.cc +18 -58
  1579. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  1580. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1581. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +1 -1
  1582. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.cc +3 -3
  1583. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +2 -2
  1584. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +2 -2
  1585. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +3 -3
  1586. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +2 -2
  1587. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +1 -1
  1588. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.h +1 -1
  1589. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +92 -112
  1590. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_posix.cc +1 -1
  1591. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -4
  1592. data/third_party/abseil-cpp/absl/time/time.h +89 -23
  1593. data/third_party/abseil-cpp/absl/types/internal/span.h +3 -2
  1594. data/third_party/abseil-cpp/absl/types/optional.h +7 -745
  1595. data/third_party/abseil-cpp/absl/types/span.h +98 -54
  1596. data/third_party/abseil-cpp/absl/types/variant.h +5 -784
  1597. data/third_party/abseil-cpp/absl/utility/utility.h +10 -185
  1598. data/third_party/boringssl-with-bazel/src/crypto/aes/aes.cc +41 -0
  1599. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.cc +16 -0
  1600. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.cc +15 -0
  1601. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +19 -3
  1602. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.cc +79 -48
  1603. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.cc +11 -19
  1604. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.cc +3 -7
  1605. data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +0 -35
  1606. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.cc +0 -2
  1607. data/third_party/boringssl-with-bazel/src/crypto/bio/internal.h +3 -5
  1608. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.cc +0 -3
  1609. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.cc +0 -2
  1610. data/third_party/boringssl-with-bazel/src/crypto/bn/convert.cc +31 -47
  1611. data/third_party/boringssl-with-bazel/src/crypto/bn/div.cc +100 -0
  1612. data/third_party/boringssl-with-bazel/src/crypto/bn/exponentiation.cc +166 -0
  1613. data/third_party/boringssl-with-bazel/src/crypto/bn/sqrt.cc +93 -0
  1614. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.cc +14 -8
  1615. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.cc +1 -1
  1616. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +3 -3
  1617. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +4 -4
  1618. data/third_party/boringssl-with-bazel/src/crypto/cipher/derive_key.cc +13 -15
  1619. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aeseax.cc +289 -0
  1620. data/third_party/boringssl-with-bazel/src/crypto/cipher/e_aesgcmsiv.cc +179 -102
  1621. data/third_party/boringssl-with-bazel/src/crypto/cipher/internal.h +3 -3
  1622. data/third_party/boringssl-with-bazel/src/crypto/cms/cms.cc +172 -0
  1623. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.cc +28 -5
  1624. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +11 -9
  1625. data/third_party/boringssl-with-bazel/src/crypto/cpu_intel.cc +0 -6
  1626. data/third_party/boringssl-with-bazel/src/crypto/crypto.cc +1 -1
  1627. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +3 -3
  1628. data/third_party/boringssl-with-bazel/src/crypto/des/internal.h +3 -3
  1629. data/third_party/boringssl-with-bazel/src/crypto/dh/dh_asn1.cc +13 -14
  1630. data/third_party/boringssl-with-bazel/src/crypto/dh/params.cc +27 -61
  1631. data/third_party/boringssl-with-bazel/src/crypto/digest/digest_extra.cc +16 -8
  1632. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.cc +112 -122
  1633. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.cc +23 -35
  1634. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +3 -3
  1635. data/third_party/boringssl-with-bazel/src/crypto/ec/ec_asn1.cc +47 -63
  1636. data/third_party/boringssl-with-bazel/src/crypto/ec/hash_to_curve.cc +60 -68
  1637. data/third_party/boringssl-with-bazel/src/crypto/ec/internal.h +3 -3
  1638. data/third_party/boringssl-with-bazel/src/crypto/ecdsa/ecdsa_asn1.cc +11 -17
  1639. data/third_party/boringssl-with-bazel/src/crypto/err/err.cc +0 -2
  1640. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.cc +10 -11
  1641. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_ctx.cc +10 -11
  1642. data/third_party/boringssl-with-bazel/src/crypto/evp/internal.h +3 -3
  1643. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.cc +6 -6
  1644. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ec_asn1.cc +6 -6
  1645. data/third_party/boringssl-with-bazel/src/crypto/evp/p_ed25519_asn1.cc +6 -6
  1646. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa_asn1.cc +6 -6
  1647. data/third_party/boringssl-with-bazel/src/crypto/evp/p_x25519_asn1.cc +6 -6
  1648. data/third_party/boringssl-with-bazel/src/crypto/evp/sign.cc +23 -42
  1649. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/aes.cc.inc +29 -18
  1650. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/gcm.cc.inc +10 -10
  1651. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +16 -45
  1652. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -4
  1653. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/mode_wrappers.cc.inc +15 -6
  1654. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.cc +3 -3
  1655. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +101 -5
  1656. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.cc.inc +96 -187
  1657. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/exponentiation.cc.inc +24 -512
  1658. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd.cc.inc +58 -80
  1659. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.cc.inc +29 -45
  1660. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +27 -25
  1661. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/jacobi.cc.inc +7 -16
  1662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/montgomery.cc.inc +27 -48
  1663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/mul.cc.inc +34 -34
  1664. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.cc.inc +102 -154
  1665. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/rsaz_exp.h +3 -3
  1666. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/shift.cc.inc +3 -8
  1667. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.cc.inc +1 -78
  1668. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.cc.inc +10 -17
  1669. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/internal.h +3 -3
  1670. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +15 -8
  1671. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/check.cc.inc +40 -53
  1672. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.cc.inc +57 -76
  1673. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.cc.inc +4 -10
  1674. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/internal.h +3 -3
  1675. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +3 -3
  1676. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.cc.inc +37 -52
  1677. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.cc.inc +13 -20
  1678. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +3 -3
  1679. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.cc.inc +28 -39
  1680. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.h +3 -3
  1681. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.cc.inc +6 -11
  1682. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/keccak/internal.h +3 -3
  1683. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/fips_known_values.inc +1345 -0
  1684. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mldsa/mldsa.cc.inc +335 -28
  1685. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/fips_known_values.inc +411 -0
  1686. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/mlkem/mlkem.cc.inc +265 -33
  1687. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +3 -3
  1688. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.cc.inc +1 -1
  1689. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +3 -3
  1690. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.cc.inc +19 -26
  1691. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.cc.inc +7 -7
  1692. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.cc.inc +121 -138
  1693. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.cc.inc +96 -83
  1694. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/internal.h +3 -3
  1695. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +8 -20
  1696. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/fips_known_values.inc +674 -0
  1697. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +235 -60
  1698. data/third_party/boringssl-with-bazel/src/crypto/fuzzer_mode.cc +30 -0
  1699. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +3 -3
  1700. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -30
  1701. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +3 -3
  1702. data/third_party/boringssl-with-bazel/src/crypto/md5/internal.h +3 -3
  1703. data/third_party/boringssl-with-bazel/src/crypto/mem.cc +0 -2
  1704. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.cc +2 -8
  1705. data/third_party/boringssl-with-bazel/src/crypto/pem/internal.h +3 -3
  1706. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.cc +8 -13
  1707. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +22 -8
  1708. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.cc +19 -17
  1709. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.cc +134 -136
  1710. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +14 -8
  1711. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/p5_pbev2.cc +25 -21
  1712. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.cc +36 -52
  1713. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.cc +97 -79
  1714. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +3 -3
  1715. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +3 -3
  1716. data/third_party/boringssl-with-bazel/src/crypto/rand/deterministic.cc +1 -1
  1717. data/third_party/boringssl-with-bazel/src/crypto/rand/fork_detect.cc +2 -2
  1718. data/third_party/boringssl-with-bazel/src/crypto/rand/getentropy.cc +1 -1
  1719. data/third_party/boringssl-with-bazel/src/crypto/rand/{sysrand_internal.h → internal.h} +22 -4
  1720. data/third_party/boringssl-with-bazel/src/crypto/rand/ios.cc +1 -1
  1721. data/third_party/boringssl-with-bazel/src/crypto/rand/trusty.cc +1 -1
  1722. data/third_party/boringssl-with-bazel/src/crypto/rand/urandom.cc +1 -1
  1723. data/third_party/boringssl-with-bazel/src/crypto/rand/windows.cc +1 -5
  1724. data/third_party/boringssl-with-bazel/src/crypto/rsa/internal.h +3 -3
  1725. data/third_party/boringssl-with-bazel/src/crypto/rsa/rsa_crypt.cc +14 -22
  1726. data/third_party/boringssl-with-bazel/src/crypto/spake2plus/internal.h +3 -3
  1727. data/third_party/boringssl-with-bazel/src/crypto/thread_win.cc +0 -2
  1728. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +3 -3
  1729. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.cc +3 -5
  1730. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.cc +8 -12
  1731. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +15 -3
  1732. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_conf.cc +16 -24
  1733. data/third_party/boringssl-with-bazel/src/crypto/x509/v3_info.cc +18 -21
  1734. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.cc +10 -3
  1735. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.cc +9 -0
  1736. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.cc +10 -1
  1737. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.cc +64 -85
  1738. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.cc +16 -32
  1739. data/third_party/boringssl-with-bazel/src/gen/crypto/err_data.cc +576 -567
  1740. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +16 -8
  1741. data/third_party/boringssl-with-bazel/src/include/openssl/aes.h +1 -1
  1742. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -54
  1743. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +1 -1
  1744. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +8 -4
  1745. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +1 -1
  1746. data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +1 -1
  1747. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +1 -1
  1748. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -1
  1749. data/third_party/boringssl-with-bazel/src/include/openssl/blowfish.h +1 -1
  1750. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +1 -1
  1751. data/third_party/boringssl-with-bazel/src/include/openssl/buf.h +1 -1
  1752. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +7 -1
  1753. data/third_party/boringssl-with-bazel/src/include/openssl/cast.h +1 -1
  1754. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1755. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +1 -1
  1756. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +1 -1
  1757. data/third_party/boringssl-with-bazel/src/include/openssl/cms.h +146 -0
  1758. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +1 -1
  1759. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +23 -3
  1760. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +1 -1
  1761. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +1 -1
  1762. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +1 -1
  1763. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +1 -1
  1764. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -7
  1765. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +1 -1
  1766. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +1 -1
  1767. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +1 -1
  1768. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +1 -1
  1769. data/third_party/boringssl-with-bazel/src/include/openssl/ecdh.h +1 -1
  1770. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +1 -1
  1771. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +1 -1
  1772. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +2 -1
  1773. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
  1774. data/third_party/boringssl-with-bazel/src/include/openssl/ex_data.h +1 -1
  1775. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +1 -1
  1776. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +1 -1
  1777. data/third_party/boringssl-with-bazel/src/include/openssl/hmac.h +1 -1
  1778. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +4 -4
  1779. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +1 -1
  1780. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +1 -1
  1781. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +1 -1
  1782. data/third_party/boringssl-with-bazel/src/include/openssl/md4.h +1 -1
  1783. data/third_party/boringssl-with-bazel/src/include/openssl/md5.h +1 -1
  1784. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +1 -1
  1785. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +1 -1
  1786. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +1 -1
  1787. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +1 -1
  1788. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +1 -1
  1789. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +1 -1
  1790. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +10 -4
  1791. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +1 -1
  1792. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +19 -6
  1793. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +1 -1
  1794. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +1 -1
  1795. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +1 -1
  1796. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  1797. data/third_party/boringssl-with-bazel/src/include/openssl/rc4.h +1 -1
  1798. data/third_party/boringssl-with-bazel/src/include/openssl/ripemd.h +1 -1
  1799. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +2 -2
  1800. data/third_party/boringssl-with-bazel/src/include/openssl/service_indicator.h +1 -1
  1801. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +1 -1
  1802. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +1 -1
  1803. data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +1 -1
  1804. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +1 -1
  1805. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +291 -40
  1806. data/third_party/boringssl-with-bazel/src/include/openssl/stack.h +1 -1
  1807. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +0 -5
  1808. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +1 -1
  1809. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +9 -1
  1810. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -1
  1811. data/third_party/boringssl-with-bazel/src/include/openssl/type_check.h +1 -1
  1812. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +7 -4
  1813. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +2 -0
  1814. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +32 -26
  1815. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +49 -49
  1816. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +253 -50
  1817. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +12 -12
  1818. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +7 -5
  1819. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +2 -1
  1820. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +24 -32
  1821. data/third_party/boringssl-with-bazel/src/ssl/internal.h +93 -4
  1822. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +6 -12
  1823. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +18 -4
  1824. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +83 -7
  1825. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +1 -1
  1826. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +173 -19
  1827. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +5 -18
  1828. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +28 -15
  1829. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +1 -1
  1830. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +31 -7
  1831. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +13 -1
  1832. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +7 -11
  1833. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +13 -11
  1834. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +2 -5
  1835. data/third_party/cares/cares/include/ares.h +925 -460
  1836. data/third_party/cares/cares/include/ares_dns.h +86 -71
  1837. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  1838. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  1839. data/third_party/cares/cares/include/ares_version.h +37 -14
  1840. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  1841. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  1842. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  1843. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  1844. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  1845. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  1846. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  1847. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  1848. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  1849. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  1850. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  1851. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  1852. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  1853. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  1854. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  1855. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  1856. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  1857. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  1858. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  1859. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  1860. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  1861. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  1862. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  1863. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  1864. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  1865. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  1866. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  1867. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  1868. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  1869. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  1870. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  1871. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  1872. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  1873. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  1874. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  1875. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  1876. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  1877. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  1878. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  1879. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  1880. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  1881. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  1882. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  1883. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  1884. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  1885. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  1886. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  1887. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  1888. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  1889. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  1890. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  1891. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  1892. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  1893. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  1894. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  1895. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  1896. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  1897. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  1898. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  1899. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  1900. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  1901. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  1902. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  1903. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  1904. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  1905. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  1906. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  1907. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  1908. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  1909. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  1910. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  1911. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  1912. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  1913. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  1914. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  1915. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  1916. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  1917. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  1918. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  1919. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  1920. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  1921. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  1922. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  1923. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  1924. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  1925. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  1926. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  1927. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  1928. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  1929. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  1930. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  1931. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  1932. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  1933. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  1934. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  1935. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  1936. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  1937. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  1938. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  1939. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  1940. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  1941. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  1942. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  1943. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  1944. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  1945. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  1946. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  1947. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  1948. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  1949. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  1950. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  1951. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  1952. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  1953. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  1954. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  1955. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  1956. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  1957. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  1958. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  1959. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  1960. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  1961. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  1962. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  1963. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  1964. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  1965. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  1966. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  1967. data/third_party/upb/upb/hash/common.c +310 -189
  1968. data/third_party/upb/upb/hash/common.h +44 -43
  1969. data/third_party/upb/upb/hash/int_table.h +29 -5
  1970. data/third_party/upb/upb/hash/str_table.h +6 -0
  1971. data/third_party/upb/upb/mem/arena.c +180 -57
  1972. data/third_party/upb/upb/mem/arena.h +10 -0
  1973. data/third_party/upb/upb/mem/internal/arena.h +62 -24
  1974. data/third_party/upb/upb/message/accessors.c +1 -5
  1975. data/third_party/upb/upb/message/array.c +7 -6
  1976. data/third_party/upb/upb/message/array.h +4 -4
  1977. data/third_party/upb/upb/message/internal/accessors.h +3 -3
  1978. data/third_party/upb/upb/message/internal/extension.c +0 -12
  1979. data/third_party/upb/upb/message/internal/extension.h +0 -4
  1980. data/third_party/upb/upb/message/internal/iterator.h +3 -3
  1981. data/third_party/upb/upb/message/internal/map.h +75 -20
  1982. data/third_party/upb/upb/message/internal/map_sorter.h +10 -2
  1983. data/third_party/upb/upb/message/internal/message.h +53 -5
  1984. data/third_party/upb/upb/message/map.c +68 -20
  1985. data/third_party/upb/upb/message/map.h +8 -1
  1986. data/third_party/upb/upb/message/map_gencode_util.h +3 -45
  1987. data/third_party/upb/upb/message/map_sorter.c +32 -8
  1988. data/third_party/upb/upb/message/merge.h +3 -3
  1989. data/third_party/upb/upb/message/message.c +120 -14
  1990. data/third_party/upb/upb/message/message.h +17 -8
  1991. data/third_party/upb/upb/mini_descriptor/build_enum.c +15 -5
  1992. data/third_party/upb/upb/mini_descriptor/decode.c +18 -2
  1993. data/third_party/upb/upb/mini_descriptor/link.c +4 -0
  1994. data/third_party/upb/upb/mini_table/extension.h +8 -1
  1995. data/third_party/upb/upb/mini_table/extension_registry.c +1 -1
  1996. data/third_party/upb/upb/mini_table/internal/enum.h +1 -1
  1997. data/third_party/upb/upb/mini_table/internal/extension.h +24 -1
  1998. data/third_party/upb/upb/mini_table/internal/field.h +4 -4
  1999. data/third_party/upb/upb/mini_table/internal/message.h +1 -1
  2000. data/third_party/upb/upb/port/def.inc +32 -16
  2001. data/third_party/upb/upb/port/undef.inc +1 -0
  2002. data/third_party/upb/upb/reflection/def_pool.h +2 -2
  2003. data/third_party/upb/upb/reflection/descriptor_bootstrap.h +3 -3
  2004. data/third_party/upb/upb/reflection/enum_def.c +4 -4
  2005. data/third_party/upb/upb/reflection/enum_reserved_range.c +1 -1
  2006. data/third_party/upb/upb/reflection/enum_value_def.c +9 -8
  2007. data/third_party/upb/upb/reflection/extension_range.c +1 -2
  2008. data/third_party/upb/upb/reflection/field_def.c +3 -5
  2009. data/third_party/upb/upb/reflection/field_def.h +1 -1
  2010. data/third_party/upb/upb/reflection/file_def.c +4 -5
  2011. data/third_party/upb/upb/reflection/internal/def_builder.h +35 -10
  2012. data/third_party/upb/upb/reflection/internal/enum_value_def.h +1 -1
  2013. data/third_party/upb/upb/reflection/internal/upb_edition_defaults.h +1 -1
  2014. data/third_party/upb/upb/reflection/message_def.c +4 -7
  2015. data/third_party/upb/upb/reflection/message_reserved_range.c +1 -1
  2016. data/third_party/upb/upb/reflection/method_def.c +1 -1
  2017. data/third_party/upb/upb/reflection/oneof_def.c +3 -3
  2018. data/third_party/upb/upb/reflection/service_def.c +2 -5
  2019. data/third_party/upb/upb/text/encode.c +16 -0
  2020. data/third_party/upb/upb/text/internal/encode.h +2 -1
  2021. data/third_party/upb/upb/wire/decode.c +104 -72
  2022. data/third_party/upb/upb/wire/encode.c +37 -13
  2023. data/third_party/upb/upb/wire/internal/decode_fast.c +2 -2
  2024. data/third_party/upb/upb/wire/internal/decode_fast.h +4 -0
  2025. metadata +298 -79
  2026. data/src/core/lib/event_engine/forkable.cc +0 -105
  2027. data/src/core/lib/event_engine/forkable.h +0 -67
  2028. data/src/core/lib/iomgr/executor.cc +0 -441
  2029. data/src/core/lib/iomgr/executor.h +0 -119
  2030. data/src/core/lib/iomgr/python_util.h +0 -46
  2031. data/src/core/util/ring_buffer.h +0 -122
  2032. data/third_party/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  2033. data/third_party/abseil-cpp/absl/base/internal/invoke.h +0 -241
  2034. data/third_party/abseil-cpp/absl/base/internal/nullability_impl.h +0 -108
  2035. data/third_party/abseil-cpp/absl/log/log_entry.cc +0 -41
  2036. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  2037. data/third_party/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  2038. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  2039. data/third_party/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  2040. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  2041. data/third_party/abseil-cpp/absl/types/internal/optional.h +0 -352
  2042. data/third_party/abseil-cpp/absl/types/internal/variant.h +0 -1622
  2043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/polyval.cc.inc +0 -89
  2044. data/third_party/cares/cares/include/ares_rules.h +0 -125
  2045. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  2046. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  2047. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  2048. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  2049. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  2050. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  2051. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  2052. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  2053. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  2054. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  2055. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  2056. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  2057. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  2058. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  2059. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  2060. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  2061. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  2062. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  2063. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  2064. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  2065. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  2066. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  2067. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  2068. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  2069. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  2070. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  2071. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  2072. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  2073. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  2074. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  2075. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  2076. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  2077. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  2078. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  2079. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  2080. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  2081. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  2082. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  2083. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  2084. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  2085. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  2086. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  2087. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  2088. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  2089. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  2090. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -0,0 +1,2076 @@
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_client_transport.h"
20
+
21
+ #include <grpc/event_engine/event_engine.h>
22
+ #include <grpc/grpc.h>
23
+ #include <grpc/support/port_platform.h>
24
+ #include <limits.h>
25
+
26
+ #include <algorithm>
27
+ #include <cstddef>
28
+ #include <cstdint>
29
+ #include <iterator>
30
+ #include <memory>
31
+ #include <optional>
32
+ #include <string>
33
+ #include <utility>
34
+ #include <vector>
35
+
36
+ #include "src/core/call/call_spine.h"
37
+ #include "src/core/call/message.h"
38
+ #include "src/core/call/metadata.h"
39
+ #include "src/core/call/metadata_batch.h"
40
+ #include "src/core/call/metadata_info.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/http2_settings.h"
48
+ #include "src/core/ext/transport/chttp2/transport/http2_settings_promises.h"
49
+ #include "src/core/ext/transport/chttp2/transport/http2_status.h"
50
+ #include "src/core/ext/transport/chttp2/transport/http2_transport.h"
51
+ #include "src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h"
52
+ #include "src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.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/stream.h"
57
+ #include "src/core/ext/transport/chttp2/transport/stream_data_queue.h"
58
+ #include "src/core/ext/transport/chttp2/transport/transport_common.h"
59
+ #include "src/core/lib/channel/channel_args.h"
60
+ #include "src/core/lib/iomgr/exec_ctx.h"
61
+ #include "src/core/lib/promise/activity.h"
62
+ #include "src/core/lib/promise/context.h"
63
+ #include "src/core/lib/promise/for_each.h"
64
+ #include "src/core/lib/promise/if.h"
65
+ #include "src/core/lib/promise/loop.h"
66
+ #include "src/core/lib/promise/map.h"
67
+ #include "src/core/lib/promise/match_promise.h"
68
+ #include "src/core/lib/promise/party.h"
69
+ #include "src/core/lib/promise/poll.h"
70
+ #include "src/core/lib/promise/promise.h"
71
+ #include "src/core/lib/promise/race.h"
72
+ #include "src/core/lib/promise/sleep.h"
73
+ #include "src/core/lib/promise/try_seq.h"
74
+ #include "src/core/lib/resource_quota/arena.h"
75
+ #include "src/core/lib/resource_quota/resource_quota.h"
76
+ #include "src/core/lib/slice/slice.h"
77
+ #include "src/core/lib/slice/slice_buffer.h"
78
+ #include "src/core/lib/transport/connectivity_state.h"
79
+ #include "src/core/lib/transport/promise_endpoint.h"
80
+ #include "src/core/lib/transport/transport.h"
81
+ #include "src/core/util/debug_location.h"
82
+ #include "src/core/util/grpc_check.h"
83
+ #include "src/core/util/latent_see.h"
84
+ #include "src/core/util/orphanable.h"
85
+ #include "src/core/util/ref_counted_ptr.h"
86
+ #include "src/core/util/sync.h"
87
+ #include "src/core/util/time.h"
88
+ #include "absl/base/thread_annotations.h"
89
+ #include "absl/container/flat_hash_map.h"
90
+ #include "absl/log/log.h"
91
+ #include "absl/status/status.h"
92
+ #include "absl/strings/cord.h"
93
+ #include "absl/strings/str_cat.h"
94
+ #include "absl/strings/string_view.h"
95
+ #include "absl/types/span.h"
96
+
97
+ namespace grpc_core {
98
+ namespace http2 {
99
+
100
+ // TODO(akshitpatel)(tjagtap) [PH2][P2] : When settings frame increases incoming
101
+ // window size, our transport must make the streams that were blocked on stream
102
+ // flow control as writeable.
103
+
104
+ // As a gRPC server never initiates a stream, the last incoming stream id on
105
+ // the client side will always be 0.
106
+ constexpr uint32_t kLastIncomingStreamIdClient = 0;
107
+
108
+ using grpc_event_engine::experimental::EventEngine;
109
+ using StreamWritabilityUpdate =
110
+ StreamDataQueue<ClientMetadataHandle>::StreamWritabilityUpdate;
111
+
112
+ // Experimental : This is just the initial skeleton of class
113
+ // and it is functions. The code will be written iteratively.
114
+ // Do not use or edit any of these functions unless you are
115
+ // familiar with the PH2 project (Moving chttp2 to promises.)
116
+ // TODO(tjagtap) : [PH2][P3] : Delete this comment when http2
117
+ // rollout begins
118
+
119
+ template <typename Factory>
120
+ void Http2ClientTransport::SpawnInfallible(RefCountedPtr<Party> party,
121
+ absl::string_view name,
122
+ Factory&& factory) {
123
+ party->Spawn(name, std::forward<Factory>(factory), [](Empty) {});
124
+ }
125
+
126
+ template <typename Factory>
127
+ void Http2ClientTransport::SpawnInfallibleTransportParty(absl::string_view name,
128
+ Factory&& factory) {
129
+ SpawnInfallible(general_party_, name, std::forward<Factory>(factory));
130
+ }
131
+
132
+ template <typename Factory>
133
+ void Http2ClientTransport::SpawnGuardedTransportParty(absl::string_view name,
134
+ Factory&& factory) {
135
+ general_party_->Spawn(
136
+ name, std::forward<Factory>(factory),
137
+ [self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
138
+ if (!status.ok()) {
139
+ GRPC_UNUSED absl::Status error = self->HandleError(
140
+ /*stream_id=*/std::nullopt, ToHttpOkOrConnError(status));
141
+ }
142
+ });
143
+ }
144
+
145
+ void Http2ClientTransport::PerformOp(grpc_transport_op* op) {
146
+ // Notes : Refer : src/core/ext/transport/chaotic_good/client_transport.cc
147
+ // Functions : StartConnectivityWatch, StopConnectivityWatch, PerformOp
148
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport PerformOp Begin";
149
+ bool did_stuff = false;
150
+ if (op->start_connectivity_watch != nullptr) {
151
+ StartConnectivityWatch(op->start_connectivity_watch_state,
152
+ std::move(op->start_connectivity_watch));
153
+ did_stuff = true;
154
+ }
155
+ if (op->stop_connectivity_watch != nullptr) {
156
+ StopConnectivityWatch(op->stop_connectivity_watch);
157
+ did_stuff = true;
158
+ }
159
+ GRPC_CHECK(!op->set_accept_stream)
160
+ << "Set_accept_stream not supported on clients";
161
+ GRPC_DCHECK(did_stuff) << "Unimplemented transport perform op ";
162
+
163
+ ExecCtx::Run(DEBUG_LOCATION, op->on_consumed, absl::OkStatus());
164
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport PerformOp End";
165
+ // TODO(tjagtap) : [PH2][P2] :
166
+ // Refer src/core/ext/transport/chttp2/transport/chttp2_transport.cc
167
+ // perform_transport_op_locked
168
+ // Maybe more operations needed to be implemented.
169
+ // TODO(tjagtap) : [PH2][P2] : Consider either not using a transport level
170
+ // lock, or making this run on the Transport party - whatever is better.
171
+ }
172
+
173
+ void Http2ClientTransport::StartConnectivityWatch(
174
+ grpc_connectivity_state state,
175
+ OrphanablePtr<ConnectivityStateWatcherInterface> watcher) {
176
+ MutexLock lock(&transport_mutex_);
177
+ state_tracker_.AddWatcher(state, std::move(watcher));
178
+ }
179
+
180
+ void Http2ClientTransport::StopConnectivityWatch(
181
+ ConnectivityStateWatcherInterface* watcher) {
182
+ MutexLock lock(&transport_mutex_);
183
+ state_tracker_.RemoveWatcher(watcher);
184
+ }
185
+
186
+ void Http2ClientTransport::ReportDisconnection(
187
+ const absl::Status& status, StateWatcher::DisconnectInfo disconnect_info,
188
+ const char* reason) {
189
+ MutexLock lock(&transport_mutex_);
190
+ ReportDisconnectionLocked(status, disconnect_info, reason);
191
+ }
192
+
193
+ void Http2ClientTransport::ReportDisconnectionLocked(
194
+ const absl::Status& status, StateWatcher::DisconnectInfo disconnect_info,
195
+ const char* reason) {
196
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ReportDisconnection: status="
197
+ << status.ToString() << "; reason=" << reason;
198
+ state_tracker_.SetState(GRPC_CHANNEL_TRANSIENT_FAILURE, status, reason);
199
+ NotifyStateWatcherOnDisconnectLocked(status, disconnect_info);
200
+ }
201
+
202
+ void Http2ClientTransport::StartWatch(RefCountedPtr<StateWatcher> watcher) {
203
+ MutexLock lock(&transport_mutex_);
204
+ GRPC_CHECK(watcher_ == nullptr);
205
+ watcher_ = std::move(watcher);
206
+ if (is_transport_closed_) {
207
+ // TODO(tjagtap) : [PH2][P2] : Provide better status message and
208
+ // disconnect info here.
209
+ NotifyStateWatcherOnDisconnectLocked(
210
+ absl::UnknownError("transport closed before watcher started"), {});
211
+ } else {
212
+ // TODO(tjagtap) : [PH2][P2] : Notify the state watcher of the current
213
+ // value of the peer's MAX_CONCURRENT_STREAMS setting.
214
+ }
215
+ }
216
+
217
+ void Http2ClientTransport::StopWatch(RefCountedPtr<StateWatcher> watcher) {
218
+ MutexLock lock(&transport_mutex_);
219
+ if (watcher_ == watcher) watcher_.reset();
220
+ }
221
+
222
+ void Http2ClientTransport::NotifyStateWatcherOnDisconnectLocked(
223
+ absl::Status status, StateWatcher::DisconnectInfo disconnect_info) {
224
+ if (watcher_ == nullptr) return;
225
+ event_engine_->Run([watcher = std::move(watcher_), status = std::move(status),
226
+ disconnect_info]() mutable {
227
+ ExecCtx exec_ctx;
228
+ watcher->OnDisconnect(std::move(status), disconnect_info);
229
+ watcher.reset(); // Before ExecCtx goes out of scope.
230
+ });
231
+ }
232
+
233
+ void Http2ClientTransport::Orphan() {
234
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Orphan Begin";
235
+ // Accessing general_party here is not advisable. It may so happen that
236
+ // the party is already freed/may free up any time. The only guarantee here
237
+ // is that the transport is still valid.
238
+ SourceDestructing();
239
+ MaybeSpawnCloseTransport(
240
+ ToHttpOkOrConnError(absl::UnavailableError("Orphaned")));
241
+ Unref();
242
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Orphan End";
243
+ }
244
+
245
+ ///////////////////////////////////////////////////////////////////////////////
246
+ // Processing each type of frame
247
+
248
+ Http2Status Http2ClientTransport::ProcessHttp2DataFrame(Http2DataFrame frame) {
249
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-data
250
+ GRPC_HTTP2_CLIENT_DLOG
251
+ << "Http2ClientTransport ProcessHttp2DataFrame { stream_id="
252
+ << frame.stream_id << ", end_stream=" << frame.end_stream
253
+ << ", payload=" << MaybeTruncatePayload(frame.payload)
254
+ << ", payload length=" << frame.payload.Length() << "}";
255
+
256
+ // TODO(akshitpatel) : [PH2][P3] : Investigate if we should do this even if
257
+ // the function returns a non-ok status?
258
+ ping_manager_->ReceivedDataFrame();
259
+
260
+ // Lookup stream
261
+ GRPC_HTTP2_CLIENT_DLOG
262
+ << "Http2ClientTransport ProcessHttp2DataFrame LookupStream";
263
+ RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
264
+
265
+ ValueOrHttp2Status<chttp2::FlowControlAction> flow_control_action =
266
+ ProcessIncomingDataFrameFlowControl(current_frame_header_, flow_control_,
267
+ stream);
268
+ if (!flow_control_action.IsOk()) {
269
+ return ValueOrHttp2Status<chttp2::FlowControlAction>::TakeStatus(
270
+ std::move(flow_control_action));
271
+ }
272
+ ActOnFlowControlAction(flow_control_action.value(), stream);
273
+
274
+ if (stream == nullptr) {
275
+ // TODO(tjagtap) : [PH2][P2] : Implement the correct behaviour later.
276
+ // RFC9113 : If a DATA frame is received whose stream is not in the "open"
277
+ // or "half-closed (local)" state, the recipient MUST respond with a stream
278
+ // error (Section 5.4.2) of type STREAM_CLOSED.
279
+ GRPC_HTTP2_CLIENT_DLOG
280
+ << "Http2ClientTransport ProcessHttp2DataFrame { stream_id="
281
+ << frame.stream_id << "} Lookup Failed";
282
+ return Http2Status::Ok();
283
+ }
284
+
285
+ // TODO(akshitpatel) : [PH2][P3] : We should add a check to reset stream if
286
+ // the stream state is kIdle as well.
287
+
288
+ Http2Status stream_status = stream->CanStreamReceiveDataFrames();
289
+ if (!stream_status.IsOk()) {
290
+ return stream_status;
291
+ }
292
+
293
+ // Add frame to assembler
294
+ GRPC_HTTP2_CLIENT_DLOG
295
+ << "Http2ClientTransport ProcessHttp2DataFrame AppendNewDataFrame";
296
+ GrpcMessageAssembler& assembler = stream->assembler;
297
+ Http2Status status =
298
+ assembler.AppendNewDataFrame(frame.payload, frame.end_stream);
299
+ if (!status.IsOk()) {
300
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2DataFrame "
301
+ "AppendNewDataFrame Failed";
302
+ return status;
303
+ }
304
+
305
+ // Pass the messages up the stack if it is ready.
306
+ while (true) {
307
+ GRPC_HTTP2_CLIENT_DLOG
308
+ << "Http2ClientTransport ProcessHttp2DataFrame ExtractMessage";
309
+ ValueOrHttp2Status<MessageHandle> result = assembler.ExtractMessage();
310
+ if (!result.IsOk()) {
311
+ GRPC_HTTP2_CLIENT_DLOG
312
+ << "Http2ClientTransport ProcessHttp2DataFrame ExtractMessage Failed";
313
+ return ValueOrHttp2Status<MessageHandle>::TakeStatus(std::move(result));
314
+ }
315
+ MessageHandle message = TakeValue(std::move(result));
316
+ if (message != nullptr) {
317
+ GRPC_HTTP2_CLIENT_DLOG
318
+ << "Http2ClientTransport ProcessHttp2DataFrame SpawnPushMessage "
319
+ << message->DebugString();
320
+ stream->call.SpawnPushMessage(std::move(message));
321
+ continue;
322
+ }
323
+ GRPC_HTTP2_CLIENT_DLOG
324
+ << "Http2ClientTransport ProcessHttp2DataFrame While Break";
325
+ break;
326
+ }
327
+
328
+ // TODO(tjagtap) : [PH2][P2] : List of Tests:
329
+ // 1. Data frame with unknown stream ID
330
+ // 2. Data frame with only half a message and then end stream
331
+ // 3. One data frame with a full message
332
+ // 4. Three data frames with one full message
333
+ // 5. One data frame with three full messages. All messages should be pushed.
334
+ // Will need to mock the call_handler object and test this along with the
335
+ // Header reading code. Because we need a stream in place for the lookup to
336
+ // work.
337
+ return Http2Status::Ok();
338
+ }
339
+
340
+ Http2Status Http2ClientTransport::ProcessHttp2HeaderFrame(
341
+ Http2HeaderFrame frame) {
342
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-headers
343
+ GRPC_HTTP2_CLIENT_DLOG
344
+ << "Http2ClientTransport ProcessHttp2HeaderFrame Promise { stream_id="
345
+ << frame.stream_id << ", end_headers=" << frame.end_headers
346
+ << ", end_stream=" << frame.end_stream
347
+ << ", payload=" << MaybeTruncatePayload(frame.payload) << " }";
348
+ // State update MUST happen before processing the frame.
349
+ incoming_headers_.OnHeaderReceived(frame);
350
+
351
+ ping_manager_->ReceivedDataFrame();
352
+
353
+ RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
354
+ if (stream == nullptr) {
355
+ // TODO(tjagtap) : [PH2][P3] : Implement this.
356
+ // RFC9113 : The identifier of a newly established stream MUST be
357
+ // numerically greater than all streams that the initiating endpoint has
358
+ // opened or reserved. This governs streams that are opened using a HEADERS
359
+ // frame and streams that are reserved using PUSH_PROMISE. An endpoint that
360
+ // receives an unexpected stream identifier MUST respond with a connection
361
+ // error (Section 5.4.1) of type PROTOCOL_ERROR.
362
+ GRPC_HTTP2_CLIENT_DLOG
363
+ << "Http2ClientTransport ProcessHttp2HeaderFrame Promise { stream_id="
364
+ << frame.stream_id << "} Lookup Failed";
365
+ return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
366
+ /*stream=*/nullptr, Http2Status::Ok());
367
+ }
368
+
369
+ if (stream->IsStreamHalfClosedRemote()) {
370
+ return ParseAndDiscardHeaders(
371
+ std::move(frame.payload), frame.end_headers, stream,
372
+ Http2Status::Http2StreamError(
373
+ Http2ErrorCode::kStreamClosed,
374
+ std::string(RFC9113::kHalfClosedRemoteState)));
375
+ }
376
+
377
+ if (incoming_headers_.ClientReceivedDuplicateMetadata(
378
+ stream->did_receive_initial_metadata,
379
+ stream->did_receive_trailing_metadata)) {
380
+ return ParseAndDiscardHeaders(
381
+ std::move(frame.payload), frame.end_headers, stream,
382
+ Http2Status::Http2StreamError(
383
+ Http2ErrorCode::kInternalError,
384
+ std::string(GrpcErrors::kTooManyMetadata)));
385
+ }
386
+
387
+ Http2Status append_result = stream->header_assembler.AppendHeaderFrame(frame);
388
+ if (!append_result.IsOk()) {
389
+ // Frame payload is not consumed if AppendHeaderFrame returns a non-OK
390
+ // status. We need to process it to keep our in consistent state.
391
+ return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
392
+ stream, std::move(append_result));
393
+ }
394
+
395
+ Http2Status status = ProcessMetadata(stream);
396
+ if (!status.IsOk()) {
397
+ // Frame payload has been moved to the HeaderAssembler. So calling
398
+ // ParseAndDiscardHeaders with an empty buffer.
399
+ return ParseAndDiscardHeaders(SliceBuffer(), frame.end_headers, stream,
400
+ std::move(status));
401
+ }
402
+
403
+ // Frame payload has either been processed or moved to the HeaderAssembler.
404
+ return Http2Status::Ok();
405
+ }
406
+
407
+ Http2Status Http2ClientTransport::ProcessMetadata(
408
+ RefCountedPtr<Stream> stream) {
409
+ HeaderAssembler& assembler = stream->header_assembler;
410
+ CallHandler call = stream->call;
411
+
412
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessMetadata";
413
+ if (assembler.IsReady()) {
414
+ ValueOrHttp2Status<ServerMetadataHandle> read_result =
415
+ assembler.ReadMetadata(parser_, !incoming_headers_.HeaderHasEndStream(),
416
+ /*is_client=*/true,
417
+ /*max_header_list_size_soft_limit=*/
418
+ incoming_headers_.soft_limit(),
419
+ /*max_header_list_size_hard_limit=*/
420
+ settings_->acked().max_header_list_size());
421
+ if (read_result.IsOk()) {
422
+ ServerMetadataHandle metadata = TakeValue(std::move(read_result));
423
+ if (incoming_headers_.HeaderHasEndStream()) {
424
+ // TODO(tjagtap) : [PH2][P1] : Is this the right way to differentiate
425
+ // between initial and trailing metadata?
426
+ stream->MarkHalfClosedRemote();
427
+ stream->did_receive_trailing_metadata = true;
428
+ BeginCloseStream(stream, /*reset_stream_error_code=*/std::nullopt,
429
+ std::move(metadata));
430
+ } else {
431
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessMetadata "
432
+ "SpawnPushServerInitialMetadata";
433
+ stream->did_receive_initial_metadata = true;
434
+ call.SpawnPushServerInitialMetadata(std::move(metadata));
435
+ }
436
+ return Http2Status::Ok();
437
+ }
438
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessMetadata Failed";
439
+ return ValueOrHttp2Status<Arena::PoolPtr<grpc_metadata_batch>>::TakeStatus(
440
+ std::move(read_result));
441
+ }
442
+ return Http2Status::Ok();
443
+ }
444
+
445
+ Http2Status Http2ClientTransport::ProcessHttp2RstStreamFrame(
446
+ Http2RstStreamFrame frame) {
447
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-rst_stream
448
+ GRPC_HTTP2_CLIENT_DLOG
449
+ << "Http2ClientTransport ProcessHttp2RstStreamFrame { stream_id="
450
+ << frame.stream_id << ", error_code=" << frame.error_code << " }";
451
+
452
+ Http2ErrorCode error_code = FrameErrorCodeToHttp2ErrorCode(frame.error_code);
453
+ absl::Status status = absl::Status(ErrorCodeToAbslStatusCode(error_code),
454
+ "Reset stream frame received.");
455
+ RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
456
+ if (stream != nullptr) {
457
+ stream->MarkHalfClosedRemote();
458
+ BeginCloseStream(stream, /*reset_stream_error_code=*/std::nullopt,
459
+ CancelledServerMetadataFromStatus(status));
460
+ }
461
+
462
+ // In case of stream error, we do not want the Read Loop to be broken. Hence
463
+ // returning an ok status.
464
+ return Http2Status::Ok();
465
+ }
466
+
467
+ Http2Status Http2ClientTransport::ProcessHttp2SettingsFrame(
468
+ Http2SettingsFrame frame) {
469
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-settings
470
+
471
+ GRPC_HTTP2_CLIENT_DLOG
472
+ << "Http2ClientTransport ProcessHttp2SettingsFrame { ack=" << frame.ack
473
+ << ", settings length=" << frame.settings.size() << "}";
474
+
475
+ if (!frame.ack) {
476
+ Http2Status status = ValidateSettingsValues(frame.settings);
477
+ if (!status.IsOk()) {
478
+ return status;
479
+ }
480
+ settings_->BufferPeerSettings(std::move(frame.settings));
481
+ SpawnGuardedTransportParty("SettingsAck", TriggerWriteCycle());
482
+ if (GPR_UNLIKELY(!settings_->IsFirstPeerSettingsApplied())) {
483
+ // Apply the first settings before we read any other frames.
484
+ reader_state_.SetPauseReadLoop();
485
+ }
486
+ } else {
487
+ if (settings_->OnSettingsAckReceived()) {
488
+ parser_.hpack_table()->SetMaxBytes(
489
+ settings_->acked().header_table_size());
490
+ ActOnFlowControlAction(flow_control_.SetAckedInitialWindow(
491
+ settings_->acked().initial_window_size()),
492
+ /*stream=*/nullptr);
493
+ } else {
494
+ // TODO(tjagtap) [PH2][P4] : The RFC does not say anything about what
495
+ // should happen if we receive an unsolicited SETTINGS ACK. Decide if we
496
+ // want to respond with any error or just proceed.
497
+ LOG(ERROR) << "Settings ack received without sending settings";
498
+ }
499
+ }
500
+
501
+ return Http2Status::Ok();
502
+ }
503
+
504
+ auto Http2ClientTransport::ProcessHttp2PingFrame(Http2PingFrame frame) {
505
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-ping
506
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2PingFrame { ack="
507
+ << frame.ack << ", opaque=" << frame.opaque << " }";
508
+ return AssertResultType<Http2Status>(If(
509
+ frame.ack,
510
+ [self = RefAsSubclass<Http2ClientTransport>(), opaque = frame.opaque]() {
511
+ // Received a ping ack.
512
+ return self->AckPing(opaque);
513
+ },
514
+ [self = RefAsSubclass<Http2ClientTransport>(), opaque = frame.opaque]() {
515
+ return If(
516
+ self->test_only_ack_pings_,
517
+ [self, opaque]() {
518
+ // TODO(akshitpatel) : [PH2][P2] : Have a counter to track number
519
+ // of pending induced frames (Ping/Settings Ack). This is to
520
+ // ensure that if write is taking a long time, we can stop reads
521
+ // and prioritize writes. RFC9113: PING responses SHOULD be given
522
+ // higher priority than any other frame.
523
+ self->ping_manager_->AddPendingPingAck(opaque);
524
+ // TODO(akshitpatel) : [PH2][P2] : This is done assuming that the
525
+ // other ProcessFrame promises may return stream or connection
526
+ // failures. If this does not turn out to be true, consider
527
+ // returning absl::Status here.
528
+ return Map(self->TriggerWriteCycle(), [](absl::Status status) {
529
+ return ToHttpOkOrConnError(status);
530
+ });
531
+ },
532
+ []() {
533
+ GRPC_HTTP2_CLIENT_DLOG
534
+ << "Http2ClientTransport ProcessHttp2PingFrame "
535
+ "test_only_ack_pings_ is false. Ignoring the ping "
536
+ "request.";
537
+ return Immediate(Http2Status::Ok());
538
+ });
539
+ }));
540
+ }
541
+
542
+ Http2Status Http2ClientTransport::ProcessHttp2GoawayFrame(
543
+ Http2GoawayFrame frame) {
544
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-goaway
545
+ GRPC_HTTP2_CLIENT_DLOG
546
+ << "Http2ClientTransport ProcessHttp2GoawayFrame Promise { "
547
+ "last_stream_id="
548
+ << frame.last_stream_id << ", error_code=" << frame.error_code
549
+ << ", debug_data=" << frame.debug_data.as_string_view() << "}";
550
+ LOG_IF(ERROR,
551
+ frame.error_code != static_cast<uint32_t>(Http2ErrorCode::kNoError))
552
+ << "Received GOAWAY frame with error code: " << frame.error_code
553
+ << " and debug data: " << frame.debug_data.as_string_view();
554
+
555
+ uint32_t last_stream_id = 0;
556
+ absl::Status status(ErrorCodeToAbslStatusCode(
557
+ FrameErrorCodeToHttp2ErrorCode(frame.error_code)),
558
+ frame.debug_data.as_string_view());
559
+ if (frame.error_code == static_cast<uint32_t>(Http2ErrorCode::kNoError) &&
560
+ frame.last_stream_id == RFC9113::kMaxStreamId31Bit) {
561
+ const uint32_t next_stream_id = PeekNextStreamId();
562
+ last_stream_id = (next_stream_id > 1) ? next_stream_id - 2 : 0;
563
+ } else {
564
+ last_stream_id = frame.last_stream_id;
565
+ }
566
+ SetMaxAllowedStreamId(last_stream_id);
567
+
568
+ bool close_transport = false;
569
+ {
570
+ MutexLock lock(&transport_mutex_);
571
+ if (CanCloseTransportLocked()) {
572
+ close_transport = true;
573
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2GoawayFrame "
574
+ "stream_list_ is empty";
575
+ }
576
+ }
577
+
578
+ StateWatcher::DisconnectInfo disconnect_info;
579
+ disconnect_info.reason = Transport::StateWatcher::kGoaway;
580
+ disconnect_info.http2_error_code =
581
+ static_cast<Http2ErrorCode>(frame.error_code);
582
+
583
+ // Throttle keepalive time if the server sends a GOAWAY with error code
584
+ // ENHANCE_YOUR_CALM and debug data equal to "too_many_pings". This will
585
+ // apply to any new transport created on by any subchannel of this channel.
586
+ if (GPR_UNLIKELY(frame.error_code == static_cast<uint32_t>(
587
+ Http2ErrorCode::kEnhanceYourCalm) &&
588
+ frame.debug_data == "too_many_pings")) {
589
+ LOG(ERROR) << ": Received a GOAWAY with error code ENHANCE_YOUR_CALM and "
590
+ "debug data equal to \"too_many_pings\". Current keepalive "
591
+ "time (before throttling): "
592
+ << keepalive_time_.ToString();
593
+ constexpr int max_keepalive_time_millis =
594
+ INT_MAX / KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
595
+ uint64_t throttled_keepalive_time =
596
+ keepalive_time_.millis() > max_keepalive_time_millis
597
+ ? INT_MAX
598
+ : keepalive_time_.millis() * KEEPALIVE_TIME_BACKOFF_MULTIPLIER;
599
+ if (!IsTransportStateWatcherEnabled()) {
600
+ status.SetPayload(kKeepaliveThrottlingKey,
601
+ absl::Cord(std::to_string(throttled_keepalive_time)));
602
+ }
603
+ disconnect_info.keepalive_time =
604
+ Duration::Milliseconds(throttled_keepalive_time);
605
+ }
606
+
607
+ if (close_transport) {
608
+ // TODO(akshitpatel) : [PH2][P3] : Ideally the error here should be
609
+ // kNoError. However, Http2Status does not support kNoError. We should
610
+ // revisit this and update the error code.
611
+ MaybeSpawnCloseTransport(Http2Status::Http2ConnectionError(
612
+ FrameErrorCodeToHttp2ErrorCode((
613
+ frame.error_code ==
614
+ Http2ErrorCodeToFrameErrorCode(Http2ErrorCode::kNoError)
615
+ ? Http2ErrorCodeToFrameErrorCode(Http2ErrorCode::kInternalError)
616
+ : frame.error_code)),
617
+ std::string(frame.debug_data.as_string_view())));
618
+ }
619
+
620
+ // lie: use transient failure from the transport to indicate goaway has been
621
+ // received.
622
+ ReportDisconnection(status, disconnect_info, "got_goaway");
623
+ return Http2Status::Ok();
624
+ }
625
+
626
+ Http2Status Http2ClientTransport::ProcessHttp2WindowUpdateFrame(
627
+ Http2WindowUpdateFrame frame) {
628
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-window_update
629
+ GRPC_HTTP2_CLIENT_DLOG
630
+ << "Http2ClientTransport ProcessHttp2WindowUpdateFrame Promise { "
631
+ " stream_id="
632
+ << frame.stream_id << ", increment=" << frame.increment << "}";
633
+
634
+ RefCountedPtr<Stream> stream = nullptr;
635
+ if (frame.stream_id != 0) {
636
+ stream = LookupStream(frame.stream_id);
637
+ }
638
+ if (stream != nullptr) {
639
+ StreamWritabilityUpdate update =
640
+ stream->ReceivedFlowControlWindowUpdate(frame.increment);
641
+ if (update.became_writable) {
642
+ absl::Status status = writable_stream_list_.EnqueueWrapper(
643
+ stream, update.priority, AreTransportFlowControlTokensAvailable());
644
+ if (!status.ok()) {
645
+ return ToHttpOkOrConnError(status);
646
+ }
647
+ }
648
+ }
649
+
650
+ const bool should_trigger_write =
651
+ ProcessIncomingWindowUpdateFrameFlowControl(frame, flow_control_, stream);
652
+ if (should_trigger_write) {
653
+ SpawnGuardedTransportParty("TransportTokensAvailable", TriggerWriteCycle());
654
+ }
655
+ return Http2Status::Ok();
656
+ }
657
+
658
+ Http2Status Http2ClientTransport::ProcessHttp2ContinuationFrame(
659
+ Http2ContinuationFrame frame) {
660
+ // https://www.rfc-editor.org/rfc/rfc9113.html#name-continuation
661
+ GRPC_HTTP2_CLIENT_DLOG
662
+ << "Http2ClientTransport ProcessHttp2ContinuationFrame Promise { "
663
+ "stream_id="
664
+ << frame.stream_id << ", end_headers=" << frame.end_headers
665
+ << ", payload=" << MaybeTruncatePayload(frame.payload) << " }";
666
+
667
+ // State update MUST happen before processing the frame.
668
+ incoming_headers_.OnContinuationReceived(frame);
669
+
670
+ RefCountedPtr<Stream> stream = LookupStream(frame.stream_id);
671
+ if (stream == nullptr) {
672
+ // TODO(tjagtap) : [PH2][P3] : Implement this.
673
+ // RFC9113 : The identifier of a newly established stream MUST be
674
+ // numerically greater than all streams that the initiating endpoint has
675
+ // opened or reserved. This governs streams that are opened using a HEADERS
676
+ // frame and streams that are reserved using PUSH_PROMISE. An endpoint that
677
+ // receives an unexpected stream identifier MUST respond with a connection
678
+ // error (Section 5.4.1) of type PROTOCOL_ERROR.
679
+ return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
680
+ nullptr, Http2Status::Ok());
681
+ }
682
+
683
+ if (stream->IsStreamHalfClosedRemote()) {
684
+ return ParseAndDiscardHeaders(
685
+ std::move(frame.payload), frame.end_headers, stream,
686
+ Http2Status::Http2StreamError(
687
+ Http2ErrorCode::kStreamClosed,
688
+ std::string(RFC9113::kHalfClosedRemoteState)));
689
+ }
690
+
691
+ Http2Status append_result =
692
+ stream->header_assembler.AppendContinuationFrame(frame);
693
+ if (!append_result.IsOk()) {
694
+ // Frame payload is not consumed if AppendContinuationFrame returns a
695
+ // non-OK status. We need to process it to keep our in consistent state.
696
+ return ParseAndDiscardHeaders(std::move(frame.payload), frame.end_headers,
697
+ stream, std::move(append_result));
698
+ }
699
+
700
+ Http2Status status = ProcessMetadata(stream);
701
+ if (!status.IsOk()) {
702
+ // Frame payload is consumed by HeaderAssembler. So passing an empty
703
+ // SliceBuffer to ParseAndDiscardHeaders.
704
+ return ParseAndDiscardHeaders(SliceBuffer(), frame.end_headers, stream,
705
+ std::move(status));
706
+ }
707
+
708
+ // Frame payload has either been processed or moved to the HeaderAssembler.
709
+ return Http2Status::Ok();
710
+ }
711
+
712
+ Http2Status Http2ClientTransport::ProcessHttp2SecurityFrame(
713
+ Http2SecurityFrame frame) {
714
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessHttp2SecurityFrame "
715
+ "{ payload.Length="
716
+ << frame.payload.Length() << " }";
717
+ if (settings_->IsSecurityFrameExpected()) {
718
+ // TODO(tjagtap) : [PH2][P3] : Add handling of Security frame
719
+ // Just the frame.payload needs to be passed to the endpoint_ object.
720
+ // Refer usage of TransportFramingEndpointExtension.
721
+ }
722
+ // Ignore the Security frame if it is not expected.
723
+ return Http2Status::Ok();
724
+ }
725
+
726
+ auto Http2ClientTransport::ProcessOneFrame(Http2Frame frame) {
727
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ProcessOneFrame Factory";
728
+ return AssertResultType<Http2Status>(MatchPromise(
729
+ std::move(frame),
730
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2DataFrame frame) {
731
+ return self->ProcessHttp2DataFrame(std::move(frame));
732
+ },
733
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2HeaderFrame frame) {
734
+ return self->ProcessHttp2HeaderFrame(std::move(frame));
735
+ },
736
+ [self =
737
+ RefAsSubclass<Http2ClientTransport>()](Http2RstStreamFrame frame) {
738
+ return self->ProcessHttp2RstStreamFrame(frame);
739
+ },
740
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2SettingsFrame frame) {
741
+ return self->ProcessHttp2SettingsFrame(std::move(frame));
742
+ },
743
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2PingFrame frame) {
744
+ return self->ProcessHttp2PingFrame(frame);
745
+ },
746
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2GoawayFrame frame) {
747
+ return self->ProcessHttp2GoawayFrame(std::move(frame));
748
+ },
749
+ [self = RefAsSubclass<Http2ClientTransport>()](
750
+ Http2WindowUpdateFrame frame) {
751
+ return self->ProcessHttp2WindowUpdateFrame(frame);
752
+ },
753
+ [self = RefAsSubclass<Http2ClientTransport>()](
754
+ Http2ContinuationFrame frame) {
755
+ return self->ProcessHttp2ContinuationFrame(std::move(frame));
756
+ },
757
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2SecurityFrame frame) {
758
+ return self->ProcessHttp2SecurityFrame(std::move(frame));
759
+ },
760
+ [](GRPC_UNUSED Http2UnknownFrame frame) {
761
+ // RFC9113: Implementations MUST ignore and discard frames of
762
+ // unknown types.
763
+ return Http2Status::Ok();
764
+ },
765
+ [](GRPC_UNUSED Http2EmptyFrame frame) {
766
+ LOG(DFATAL)
767
+ << "ParseFramePayload should never return a Http2EmptyFrame";
768
+ return Http2Status::Ok();
769
+ }));
770
+ }
771
+
772
+ Http2Status Http2ClientTransport::ParseAndDiscardHeaders(
773
+ SliceBuffer&& buffer, const bool is_end_headers,
774
+ const RefCountedPtr<Stream> stream, Http2Status&& original_status,
775
+ DebugLocation whence) {
776
+ const bool is_initial_metadata = !incoming_headers_.HeaderHasEndStream();
777
+ const uint32_t incoming_stream_id = incoming_headers_.GetStreamId();
778
+ GRPC_HTTP2_CLIENT_DLOG
779
+ << "Http2ClientTransport ParseAndDiscardHeaders buffer "
780
+ "size: "
781
+ << buffer.Length() << " is_initial_metadata: " << is_initial_metadata
782
+ << " is_end_headers: " << is_end_headers
783
+ << " incoming_stream_id: " << incoming_stream_id
784
+ << " stream_id: " << (stream == nullptr ? 0 : stream->GetStreamId())
785
+ << " original_status: " << original_status.DebugString()
786
+ << " whence: " << whence.file() << ":" << whence.line();
787
+
788
+ return http2::ParseAndDiscardHeaders(
789
+ parser_, std::move(buffer),
790
+ HeaderAssembler::ParseHeaderArgs{
791
+ /*is_initial_metadata=*/is_initial_metadata,
792
+ /*is_end_headers=*/is_end_headers,
793
+ /*is_client=*/true,
794
+ /*max_header_list_size_soft_limit=*/
795
+ incoming_headers_.soft_limit(),
796
+ /*max_header_list_size_hard_limit=*/
797
+ settings_->acked().max_header_list_size(),
798
+ /*stream_id=*/incoming_stream_id,
799
+ },
800
+ stream, std::move(original_status));
801
+ }
802
+
803
+ ///////////////////////////////////////////////////////////////////////////////
804
+ // Read Related Promises and Promise Factories
805
+ auto Http2ClientTransport::EndpointReadSlice(const size_t num_bytes) {
806
+ return Map(
807
+ endpoint_.ReadSlice(num_bytes),
808
+ [self = RefAsSubclass<Http2ClientTransport>(),
809
+ num_bytes](absl::StatusOr<Slice> status) {
810
+ if (status.ok()) {
811
+ self->keepalive_manager_->GotData();
812
+ self->ztrace_collector_->Append(PromiseEndpointReadTrace{num_bytes});
813
+ }
814
+ return status;
815
+ });
816
+ }
817
+
818
+ auto Http2ClientTransport::EndpointRead(const size_t num_bytes) {
819
+ return Map(
820
+ endpoint_.Read(num_bytes),
821
+ [self = RefAsSubclass<Http2ClientTransport>(),
822
+ num_bytes](absl::StatusOr<SliceBuffer> status) {
823
+ if (status.ok()) {
824
+ self->keepalive_manager_->GotData();
825
+ self->ztrace_collector_->Append(PromiseEndpointReadTrace{num_bytes});
826
+ }
827
+ return status;
828
+ });
829
+ }
830
+
831
+ auto Http2ClientTransport::ReadAndProcessOneFrame() {
832
+ GRPC_HTTP2_CLIENT_DLOG
833
+ << "Http2ClientTransport ReadAndProcessOneFrame Factory";
834
+ return AssertResultType<absl::Status>(TrySeq(
835
+ // Fetch the first kFrameHeaderSize bytes of the Frame, these contain
836
+ // the frame header.
837
+ EndpointReadSlice(kFrameHeaderSize),
838
+ // Parse the frame header.
839
+ [](Slice header_bytes) -> Http2FrameHeader {
840
+ GRPC_HTTP2_CLIENT_DLOG
841
+ << "Http2ClientTransport ReadAndProcessOneFrame Parse "
842
+ << header_bytes.as_string_view();
843
+ return Http2FrameHeader::Parse(header_bytes.begin());
844
+ },
845
+ // Validate the incoming frame as per the current state of the transport
846
+ [self = RefAsSubclass<Http2ClientTransport>()](Http2FrameHeader header) {
847
+ Http2Status status = ValidateFrameHeader(
848
+ /*max_frame_size_setting*/ self->settings_->acked()
849
+ .max_frame_size(),
850
+ /*incoming_header_in_progress*/
851
+ self->incoming_headers_.IsWaitingForContinuationFrame(),
852
+ /*incoming_header_stream_id*/
853
+ self->incoming_headers_.GetStreamId(),
854
+ /*current_frame_header*/ header,
855
+ /*last_stream_id=*/self->GetLastStreamId(),
856
+ /*is_client=*/true, /*is_first_settings_processed=*/
857
+ self->settings_->IsFirstPeerSettingsApplied());
858
+
859
+ if (GPR_UNLIKELY(!status.IsOk())) {
860
+ GRPC_DCHECK(status.GetType() ==
861
+ Http2Status::Http2ErrorType::kConnectionError);
862
+ return self->HandleError(std::nullopt, std::move(status));
863
+ }
864
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ReadAndProcessOneFrame "
865
+ "Validated Frame Header:"
866
+ << header.ToString();
867
+ self->current_frame_header_ = header;
868
+ return absl::OkStatus();
869
+ },
870
+ // Read the payload of the frame.
871
+ [self = RefAsSubclass<Http2ClientTransport>()]() {
872
+ GRPC_HTTP2_CLIENT_DLOG
873
+ << "Http2ClientTransport ReadAndProcessOneFrame Read Frame ";
874
+ return AssertResultType<absl::StatusOr<SliceBuffer>>(
875
+ self->EndpointRead(self->current_frame_header_.length));
876
+ },
877
+ // Parse the payload of the frame based on frame type.
878
+ [self = RefAsSubclass<Http2ClientTransport>()](
879
+ SliceBuffer payload) -> absl::StatusOr<Http2Frame> {
880
+ GRPC_HTTP2_CLIENT_DLOG
881
+ << "Http2ClientTransport ReadAndProcessOneFrame ParseFramePayload "
882
+ << MaybeTruncatePayload(payload);
883
+ ValueOrHttp2Status<Http2Frame> frame =
884
+ ParseFramePayload(self->current_frame_header_, std::move(payload));
885
+ if (!frame.IsOk()) {
886
+ return self->HandleError(
887
+ self->current_frame_header_.stream_id,
888
+ ValueOrHttp2Status<Http2Frame>::TakeStatus(std::move(frame)));
889
+ }
890
+ return TakeValue(std::move(frame));
891
+ },
892
+ [self = RefAsSubclass<Http2ClientTransport>()](
893
+ GRPC_UNUSED Http2Frame frame) {
894
+ GRPC_HTTP2_CLIENT_DLOG
895
+ << "Http2ClientTransport ReadAndProcessOneFrame ProcessOneFrame";
896
+ return AssertResultType<absl::Status>(Map(
897
+ self->ProcessOneFrame(std::move(frame)),
898
+ [self](Http2Status status) {
899
+ if (!status.IsOk()) {
900
+ return self->HandleError(self->current_frame_header_.stream_id,
901
+ std::move(status));
902
+ }
903
+ return absl::OkStatus();
904
+ }));
905
+ },
906
+ [self = RefAsSubclass<Http2ClientTransport>()]() -> Poll<absl::Status> {
907
+ return self->reader_state_.MaybePauseReadLoop();
908
+ }));
909
+ }
910
+
911
+ auto Http2ClientTransport::ReadLoop() {
912
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport ReadLoop Factory";
913
+ return AssertResultType<absl::Status>(
914
+ Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
915
+ return TrySeq(self->ReadAndProcessOneFrame(),
916
+ []() -> LoopCtl<absl::Status> {
917
+ GRPC_HTTP2_CLIENT_DLOG
918
+ << "Http2ClientTransport ReadLoop Continue";
919
+ return Continue();
920
+ });
921
+ }));
922
+ }
923
+
924
+ ///////////////////////////////////////////////////////////////////////////////
925
+ // Flow Control for the Transport
926
+
927
+ auto Http2ClientTransport::FlowControlPeriodicUpdateLoop() {
928
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport PeriodicUpdateLoop Factory";
929
+ return AssertResultType<absl::Status>(
930
+ Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
931
+ GRPC_HTTP2_CLIENT_DLOG
932
+ << "Http2ClientTransport FlowControlPeriodicUpdateLoop Loop";
933
+ return TrySeq(
934
+ // TODO(tjagtap) [PH2][P2][BDP] Remove this static sleep when the
935
+ // BDP code is done.
936
+ Sleep(chttp2::kFlowControlPeriodicUpdateTimer),
937
+ [self]() -> Poll<absl::Status> {
938
+ GRPC_HTTP2_CLIENT_DLOG
939
+ << "Http2ClientTransport FlowControl PeriodicUpdate()";
940
+ chttp2::FlowControlAction action =
941
+ self->flow_control_.PeriodicUpdate();
942
+ bool is_action_empty = action == chttp2::FlowControlAction();
943
+ // This may trigger a write cycle
944
+ self->ActOnFlowControlAction(action, nullptr);
945
+ if (is_action_empty) {
946
+ // TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is
947
+ // done. We must continue to do PeriodicUpdate once BDP is in
948
+ // place.
949
+ MutexLock lock(&self->transport_mutex_);
950
+ if (self->GetActiveStreamCountLocked() == 0) {
951
+ self->AddPeriodicUpdatePromiseWaker();
952
+ return Pending{};
953
+ }
954
+ }
955
+ return absl::OkStatus();
956
+ },
957
+ [self]() -> LoopCtl<absl::Status> { return Continue{}; });
958
+ }));
959
+ }
960
+
961
+ // Equivalent to grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
962
+ void Http2ClientTransport::ActOnFlowControlAction(
963
+ const chttp2::FlowControlAction& action, RefCountedPtr<Stream> stream) {
964
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::ActOnFlowControlAction"
965
+ << action.DebugString();
966
+ if (action.send_stream_update() != kNoActionNeeded) {
967
+ if (GPR_LIKELY(stream != nullptr)) {
968
+ GRPC_DCHECK_GT(stream->GetStreamId(), 0u);
969
+ if (stream->CanSendWindowUpdateFrames()) {
970
+ window_update_list_.insert(stream->GetStreamId());
971
+ GRPC_HTTP2_CLIENT_DLOG
972
+ << "Http2ClientTransport::ActOnFlowControlAction "
973
+ "added stream "
974
+ << stream->GetStreamId() << " to window_update_list_";
975
+ }
976
+ } else {
977
+ GRPC_HTTP2_CLIENT_DLOG
978
+ << "Http2ClientTransport::ActOnFlowControlAction stream is null";
979
+ }
980
+ }
981
+
982
+ ActOnFlowControlActionSettings(
983
+ action, settings_->mutable_local(),
984
+ enable_preferred_rx_crypto_frame_advertisement_);
985
+
986
+ if (action.AnyUpdateImmediately()) {
987
+ // Prioritize sending flow control updates over reading data. If we
988
+ // continue reading while urgent flow control updates are pending, we might
989
+ // exhaust the flow control window. This prevents us from sending window
990
+ // updates to the peer, causing the peer to block unnecessarily while
991
+ // waiting for flow control tokens.
992
+ reader_state_.SetPauseReadLoop();
993
+ SpawnGuardedTransportParty("SendControlFrames", TriggerWriteCycle());
994
+ GRPC_HTTP2_CLIENT_DLOG << "Update Immediately : "
995
+ << action.ImmediateUpdateReasons();
996
+ }
997
+ }
998
+
999
+ ///////////////////////////////////////////////////////////////////////////////
1000
+ // Write Related Promises and Promise Factories
1001
+
1002
+ auto Http2ClientTransport::ProcessAndWriteControlFrames() {
1003
+ SliceBuffer output_buf;
1004
+ if (is_first_write_) {
1005
+ // RFC9113: That is, the connection preface starts with the string
1006
+ // "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
1007
+ // This sequence MUST be followed by a SETTINGS frame, which MAY be empty.
1008
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport WriteControlFrames "
1009
+ "GRPC_CHTTP2_CLIENT_CONNECT_STRING";
1010
+ output_buf.Append(
1011
+ Slice::FromCopiedString(GRPC_CHTTP2_CLIENT_CONNECT_STRING));
1012
+ settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_, output_buf);
1013
+ // TODO(tjagtap) [PH2][P2][Server] : This will be opposite for server. We
1014
+ // must read before we write for the server. So the ReadLoop will be Spawned
1015
+ // just after the constructor, and the write loop should be spawned only
1016
+ // after the first SETTINGS frame is completely received.
1017
+ //
1018
+ // Because the client is expected to write before it reads, we spawn the
1019
+ // ReadLoop of the client only after the first write is queued.
1020
+ SpawnGuardedTransportParty("ReadLoop", UntilTransportClosed(ReadLoop()));
1021
+ is_first_write_ = false;
1022
+ }
1023
+
1024
+ // Order of Control Frames is important.
1025
+ // 1. GOAWAY - This is first because if this is the final GoAway, then we may
1026
+ // not need to send anything else to the peer.
1027
+ // 2. SETTINGS and SETTINGS ACK
1028
+ // 3. PING and PING acks.
1029
+ // 4. WINDOW_UPDATE
1030
+ // 5. Custom gRPC security frame
1031
+
1032
+ goaway_manager_.MaybeGetSerializedGoawayFrame(output_buf);
1033
+ http2::Http2ErrorCode apply_status =
1034
+ settings_->MaybeReportAndApplyBufferedPeerSettings(event_engine_.get());
1035
+ if (!goaway_manager_.IsImmediateGoAway() &&
1036
+ apply_status == http2::Http2ErrorCode::kNoError) {
1037
+ EnforceLatestIncomingSettings();
1038
+ settings_->MaybeGetSettingsAndSettingsAckFrames(flow_control_, output_buf);
1039
+ ping_manager_->MaybeGetSerializedPingFrames(output_buf,
1040
+ NextAllowedPingInterval());
1041
+ MaybeGetWindowUpdateFrames(output_buf);
1042
+ }
1043
+ const uint64_t buffer_length = output_buf.Length();
1044
+ ztrace_collector_->Append(PromiseEndpointWriteTrace{buffer_length});
1045
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport WriteControlFrames Size : "
1046
+ << buffer_length;
1047
+ return AssertResultType<absl::Status>(
1048
+ If((buffer_length > 0 && apply_status == http2::Http2ErrorCode::kNoError),
1049
+ [self = RefAsSubclass<Http2ClientTransport>(),
1050
+ output_buf = std::move(output_buf)]() mutable {
1051
+ return self->endpoint_.Write(std::move(output_buf),
1052
+ GetWriteArgs(self->settings_->peer()));
1053
+ },
1054
+ [self = RefAsSubclass<Http2ClientTransport>(), apply_status]() {
1055
+ if (apply_status != http2::Http2ErrorCode::kNoError) {
1056
+ return self->HandleError(
1057
+ std::nullopt,
1058
+ Http2Status::Http2ConnectionError(
1059
+ apply_status, "Failed to apply incoming settings"));
1060
+ }
1061
+ return absl::OkStatus();
1062
+ }));
1063
+ }
1064
+
1065
+ void Http2ClientTransport::NotifyControlFramesWriteDone() {
1066
+ // Notify Control modules that we have sent the frames.
1067
+ // All notifications are expected to be synchronous.
1068
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport NotifyControlFramesWriteDone";
1069
+ reader_state_.ResumeReadLoopIfPaused();
1070
+ ping_manager_->NotifyPingSent();
1071
+ goaway_manager_.NotifyGoawaySent();
1072
+ MaybeSpawnWaitForSettingsTimeout();
1073
+ }
1074
+
1075
+ auto Http2ClientTransport::SerializeAndWrite(std::vector<Http2Frame>&& frames) {
1076
+ SliceBuffer output_buf;
1077
+ should_reset_ping_clock_ =
1078
+ Serialize(absl::Span<Http2Frame>(frames), output_buf)
1079
+ .should_reset_ping_clock;
1080
+ size_t output_buf_length = output_buf.Length();
1081
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport SerializeAndWrite Write "
1082
+ "output_buf.length() = "
1083
+ << output_buf_length;
1084
+ return AssertResultType<absl::Status>(If(
1085
+ output_buf_length > 0,
1086
+ [self = RefAsSubclass<Http2ClientTransport>(),
1087
+ output_buf = std::move(output_buf)]() mutable {
1088
+ return self->endpoint_.Write(std::move(output_buf),
1089
+ GetWriteArgs(self->settings_->peer()));
1090
+ },
1091
+ []() { return absl::OkStatus(); }));
1092
+ }
1093
+
1094
+ absl::StatusOr<std::vector<Http2Frame>>
1095
+ Http2ClientTransport::DequeueStreamFrames(RefCountedPtr<Stream> stream) {
1096
+ // write_bytes_remaining_ is passed as an upper bound on the max
1097
+ // number of tokens that can be dequeued to prevent dequeuing huge
1098
+ // data frames when write_bytes_remaining_ is very low. As the
1099
+ // available transport tokens can only range from 0 to 2^31 - 1,
1100
+ // we are clamping the write_bytes_remaining_ to that range.
1101
+ const uint32_t tokens =
1102
+ GetMaxPermittedDequeue(flow_control_, stream->flow_control,
1103
+ write_bytes_remaining_, settings_->peer());
1104
+ const uint32_t stream_flow_control_tokens = static_cast<uint32_t>(
1105
+ GetStreamFlowControlTokens(stream->flow_control, settings_->peer()));
1106
+ stream->flow_control.ReportIfStalled(
1107
+ /*is_client=*/true, stream->GetStreamId(), settings_->peer());
1108
+ StreamDataQueue<ClientMetadataHandle>::DequeueResult result =
1109
+ stream->DequeueFrames(tokens, stream_flow_control_tokens,
1110
+ settings_->peer().max_frame_size(), encoder_);
1111
+ ProcessOutgoingDataFrameFlowControl(stream->flow_control,
1112
+ result.flow_control_tokens_consumed);
1113
+ if (result.is_writable) {
1114
+ // Stream is still writable. Enqueue it back to the writable
1115
+ // stream list.
1116
+ absl::Status status = writable_stream_list_.EnqueueWrapper(
1117
+ stream, result.priority, AreTransportFlowControlTokensAvailable());
1118
+
1119
+ if (GPR_UNLIKELY(!status.ok())) {
1120
+ GRPC_HTTP2_CLIENT_DLOG
1121
+ << "Http2ClientTransport DequeueStreamFrames Failed to "
1122
+ "enqueue stream "
1123
+ << stream->GetStreamId() << " with status: " << status;
1124
+ // Close transport if we fail to enqueue stream.
1125
+ return HandleError(std::nullopt, ToHttpOkOrConnError(status));
1126
+ }
1127
+ }
1128
+
1129
+ // If the stream is aborted before initial metadata is dequeued, we will
1130
+ // not dequeue any frames from the stream data queue (including RST_STREAM).
1131
+ // Because of this, we will add the stream to the stream_list only when
1132
+ // we are guaranteed to send initial metadata on the wire. If the above
1133
+ // mentioned scenario occurs, the stream ref will be dropped by the
1134
+ // multiplexer loop as the stream will never be writable again. Additionally,
1135
+ // the other two stream refs, CallHandler OnDone and OutboundLoop will be
1136
+ // dropped by Callv3 triggering cleaning up the stream object.
1137
+ if (result.InitialMetadataDequeued()) {
1138
+ GRPC_HTTP2_CLIENT_DLOG
1139
+ << "Http2ClientTransport DequeueStreamFrames InitialMetadataDequeued "
1140
+ "stream_id = "
1141
+ << stream->GetStreamId();
1142
+ stream->SentInitialMetadata();
1143
+ // After this point, initial metadata is guaranteed to be sent out.
1144
+ AddToStreamList(stream);
1145
+ }
1146
+
1147
+ if (result.HalfCloseDequeued()) {
1148
+ GRPC_HTTP2_CLIENT_DLOG
1149
+ << "Http2ClientTransport DequeueStreamFrames HalfCloseDequeued "
1150
+ "stream_id = "
1151
+ << stream->GetStreamId();
1152
+ stream->MarkHalfClosedLocal();
1153
+ CloseStream(
1154
+ stream,
1155
+ CloseStreamArgs{/*close_reads=*/stream->did_receive_trailing_metadata,
1156
+ /*close_writes=*/true});
1157
+ }
1158
+ if (result.ResetStreamDequeued()) {
1159
+ GRPC_HTTP2_CLIENT_DLOG
1160
+ << "Http2ClientTransport DequeueStreamFrames ResetStreamDequeued "
1161
+ "stream_id = "
1162
+ << stream->GetStreamId();
1163
+ stream->MarkHalfClosedLocal();
1164
+ CloseStream(stream, CloseStreamArgs{/*close_reads=*/true,
1165
+ /*close_writes=*/true});
1166
+ }
1167
+
1168
+ // Update the write_bytes_remaining_ based on the bytes consumed
1169
+ // in the current dequeue.
1170
+ write_bytes_remaining_ =
1171
+ (write_bytes_remaining_ >= result.total_bytes_consumed)
1172
+ ? (write_bytes_remaining_ - result.total_bytes_consumed)
1173
+ : 0;
1174
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport DequeueStreamFrames "
1175
+ "write_bytes_remaining_ after dequeue = "
1176
+ << write_bytes_remaining_ << " total_bytes_consumed = "
1177
+ << result.total_bytes_consumed
1178
+ << " stream_id = " << stream->GetStreamId()
1179
+ << " is_writable = " << result.is_writable
1180
+ << " stream_priority = "
1181
+ << static_cast<uint8_t>(result.priority)
1182
+ << " number of frames = " << result.frames.size();
1183
+ return std::move(result.frames);
1184
+ }
1185
+
1186
+ // This MultiplexerLoop promise is responsible for Multiplexing multiple gRPC
1187
+ // Requests (HTTP2 Streams) and writing them into one common endpoint.
1188
+ auto Http2ClientTransport::MultiplexerLoop() {
1189
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport MultiplexerLoop Factory";
1190
+ return AssertResultType<
1191
+ absl::Status>(Loop([self = RefAsSubclass<Http2ClientTransport>()]() {
1192
+ self->write_bytes_remaining_ = self->GetMaxWriteSize();
1193
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport MultiplexerLoop "
1194
+ << " max_write_size_=" << self->GetMaxWriteSize();
1195
+ return TrySeq(
1196
+ self->writable_stream_list_.WaitForReady(
1197
+ self->AreTransportFlowControlTokensAvailable()),
1198
+ [self]() {
1199
+ // TODO(akshitpatel) : [PH2][P2] : Return an `important` tag from
1200
+ // WriteControlFrames() to indicate if we should do a separate write
1201
+ // for the queued control frames or send the queued frames with the
1202
+ // data frames(if any).
1203
+ return Map(
1204
+ self->ProcessAndWriteControlFrames(),
1205
+ [self](absl::Status status) {
1206
+ if (GPR_UNLIKELY(!status.ok())) {
1207
+ GRPC_HTTP2_CLIENT_DLOG
1208
+ << "Http2ClientTransport MultiplexerLoop Failed to "
1209
+ "write control frames with status: "
1210
+ << status;
1211
+ return status;
1212
+ }
1213
+ self->NotifyControlFramesWriteDone();
1214
+ return absl::OkStatus();
1215
+ });
1216
+ },
1217
+ [self]() -> absl::StatusOr<std::vector<Http2Frame>> {
1218
+ std::vector<Http2Frame> frames;
1219
+ // Drain all the writable streams till we have written
1220
+ // max_write_size_ bytes of data or there is no more data to send. In
1221
+ // some cases, we may write more than max_write_size_ bytes(like
1222
+ // writing metadata).
1223
+ while (self->write_bytes_remaining_ > 0) {
1224
+ std::optional<RefCountedPtr<Stream>> optional_stream =
1225
+ self->writable_stream_list_.ImmediateNext(
1226
+ self->AreTransportFlowControlTokensAvailable());
1227
+ if (!optional_stream.has_value()) {
1228
+ GRPC_HTTP2_CLIENT_DLOG
1229
+ << "Http2ClientTransport MultiplexerLoop "
1230
+ "No writable streams available, write_bytes_remaining_ = "
1231
+ << self->write_bytes_remaining_;
1232
+ break;
1233
+ }
1234
+ RefCountedPtr<Stream> stream = std::move(optional_stream.value());
1235
+ GRPC_HTTP2_CLIENT_DLOG
1236
+ << "Http2ClientTransport MultiplexerLoop "
1237
+ "Next writable stream id = "
1238
+ << stream->GetStreamId()
1239
+ << " is_closed_for_writes = " << stream->IsClosedForWrites();
1240
+
1241
+ if (stream->GetStreamId() == kInvalidStreamId) {
1242
+ GRPC_DCHECK(stream->IsStreamIdle());
1243
+ // TODO(akshitpatel) : [PH2][P5] : We will waste a stream id in
1244
+ // the rare scenario where the stream is aborted before it can be
1245
+ // written to. This is a possible area to optimize in future.
1246
+ absl::Status status = self->InitializeStream(stream);
1247
+ if (!status.ok()) {
1248
+ GRPC_HTTP2_CLIENT_DLOG
1249
+ << "Http2ClientTransport MultiplexerLoop "
1250
+ "Failed to assign stream id and add to stream list for "
1251
+ "stream: "
1252
+ << stream.get() << " closing this stream.";
1253
+ self->BeginCloseStream(
1254
+ stream, /*reset_stream_error_code=*/std::nullopt,
1255
+ CancelledServerMetadataFromStatus(status));
1256
+ continue;
1257
+ }
1258
+ }
1259
+
1260
+ if (GPR_LIKELY(!stream->IsClosedForWrites())) {
1261
+ absl::StatusOr<std::vector<Http2Frame>> stream_frames =
1262
+ self->DequeueStreamFrames(stream);
1263
+ if (GPR_UNLIKELY(!stream_frames.ok())) {
1264
+ GRPC_HTTP2_CLIENT_DLOG
1265
+ << "Http2ClientTransport MultiplexerLoop "
1266
+ "Failed to dequeue stream frames with status: "
1267
+ << stream_frames.status();
1268
+ return stream_frames.status();
1269
+ }
1270
+
1271
+ frames.reserve(frames.size() + stream_frames.value().size());
1272
+ frames.insert(
1273
+ frames.end(),
1274
+ std::make_move_iterator(stream_frames.value().begin()),
1275
+ std::make_move_iterator(stream_frames.value().end()));
1276
+ }
1277
+ }
1278
+
1279
+ GRPC_HTTP2_CLIENT_DLOG
1280
+ << "Http2ClientTransport MultiplexerLoop "
1281
+ "write_bytes_remaining_ after draining all writable streams = "
1282
+ << self->write_bytes_remaining_;
1283
+
1284
+ return std::move(frames);
1285
+ },
1286
+ [self](std::vector<Http2Frame> frames) {
1287
+ return self->SerializeAndWrite(std::move(frames));
1288
+ },
1289
+ [self]() -> LoopCtl<absl::Status> {
1290
+ if (self->should_reset_ping_clock_) {
1291
+ GRPC_HTTP2_CLIENT_DLOG
1292
+ << "Http2ClientTransport MultiplexerLoop ResetPingClock";
1293
+ self->ping_manager_->ResetPingClock(/*is_client=*/true);
1294
+ self->should_reset_ping_clock_ = false;
1295
+ }
1296
+ return Continue();
1297
+ });
1298
+ }));
1299
+ }
1300
+
1301
+ absl::Status Http2ClientTransport::InitializeStream(
1302
+ RefCountedPtr<Stream> stream) {
1303
+ absl::StatusOr<uint32_t> next_stream_id = NextStreamId();
1304
+ if (!next_stream_id.ok()) {
1305
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport InitializeStream "
1306
+ "Failed to get next stream id for stream: "
1307
+ << stream.get();
1308
+ return std::move(next_stream_id).status();
1309
+ }
1310
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport InitializeStream "
1311
+ "Assigned stream id: "
1312
+ << next_stream_id.value()
1313
+ << " to stream: " << stream.get()
1314
+ << ", allow_true_binary_metadata:"
1315
+ << settings_->peer().allow_true_binary_metadata();
1316
+ stream->InitializeStream(next_stream_id.value(),
1317
+ settings_->peer().allow_true_binary_metadata(),
1318
+ settings_->acked().allow_true_binary_metadata());
1319
+ return absl::OkStatus();
1320
+ }
1321
+
1322
+ void Http2ClientTransport::AddToStreamList(RefCountedPtr<Stream> stream) {
1323
+ bool should_wake_periodic_updates = false;
1324
+ {
1325
+ MutexLock lock(&transport_mutex_);
1326
+ GRPC_DCHECK(stream != nullptr) << "stream is null";
1327
+ GRPC_DCHECK_GT(stream->GetStreamId(), 0u) << "stream id is invalid";
1328
+ GRPC_HTTP2_CLIENT_DLOG
1329
+ << "Http2ClientTransport AddToStreamList for stream id: "
1330
+ << stream->GetStreamId();
1331
+ stream_list_.emplace(stream->GetStreamId(), stream);
1332
+ // TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
1333
+ if (GetActiveStreamCountLocked() == 1) {
1334
+ should_wake_periodic_updates = true;
1335
+ }
1336
+ }
1337
+ // TODO(tjagtap) [PH2][P2][BDP] Remove this when the BDP code is done.
1338
+ if (should_wake_periodic_updates) {
1339
+ // Release the lock before you wake up another promise on the party.
1340
+ WakeupPeriodicUpdatePromise();
1341
+ }
1342
+ }
1343
+
1344
+ ///////////////////////////////////////////////////////////////////////////////
1345
+ // Settings and Window Update Management
1346
+
1347
+ void Http2ClientTransport::EnforceLatestIncomingSettings() {
1348
+ encoder_.SetMaxTableSize(settings_->peer().header_table_size());
1349
+ }
1350
+
1351
+ auto Http2ClientTransport::WaitForSettingsTimeoutOnDone() {
1352
+ return [self = RefAsSubclass<Http2ClientTransport>()](absl::Status status) {
1353
+ if (!status.ok()) {
1354
+ GRPC_UNUSED absl::Status result = self->HandleError(
1355
+ std::nullopt, Http2Status::Http2ConnectionError(
1356
+ Http2ErrorCode::kProtocolError,
1357
+ std::string(RFC9113::kSettingsTimeout)));
1358
+ }
1359
+ };
1360
+ }
1361
+
1362
+ void Http2ClientTransport::MaybeSpawnWaitForSettingsTimeout() {
1363
+ if (settings_->ShouldSpawnWaitForSettingsTimeout()) {
1364
+ GRPC_HTTP2_CLIENT_DLOG
1365
+ << "Http2ClientTransport::MaybeSpawnWaitForSettingsTimeout Spawning";
1366
+ general_party_->Spawn("WaitForSettingsTimeout",
1367
+ settings_->WaitForSettingsTimeout(),
1368
+ WaitForSettingsTimeoutOnDone());
1369
+ }
1370
+ }
1371
+
1372
+ void Http2ClientTransport::MaybeGetWindowUpdateFrames(SliceBuffer& output_buf) {
1373
+ std::vector<Http2Frame> frames;
1374
+ frames.reserve(window_update_list_.size() + 1);
1375
+ uint32_t window_size =
1376
+ flow_control_.DesiredAnnounceSize(/*writing_anyway=*/true);
1377
+ if (window_size > 0) {
1378
+ GRPC_HTTP2_CLIENT_DLOG
1379
+ << "Http2ClientTransport::MaybeGetWindowUpdateFrames Transport Window "
1380
+ "Update : "
1381
+ << window_size;
1382
+ frames.emplace_back(Http2WindowUpdateFrame{/*stream_id=*/0, window_size});
1383
+ flow_control_.SentUpdate(window_size);
1384
+ }
1385
+ for (const uint32_t stream_id : window_update_list_) {
1386
+ RefCountedPtr<Stream> stream = LookupStream(stream_id);
1387
+ MaybeAddStreamWindowUpdateFrame(stream, frames);
1388
+ }
1389
+ window_update_list_.clear();
1390
+ if (!frames.empty()) {
1391
+ GRPC_HTTP2_CLIENT_DLOG
1392
+ << "Http2ClientTransport::MaybeGetWindowUpdateFrames Total Window "
1393
+ "Update Frames : "
1394
+ << frames.size();
1395
+ Serialize(absl::Span<Http2Frame>(frames), output_buf);
1396
+ }
1397
+ }
1398
+
1399
+ ///////////////////////////////////////////////////////////////////////////////
1400
+ // Constructor Destructor
1401
+
1402
+ Http2ClientTransport::Http2ClientTransport(
1403
+ PromiseEndpoint endpoint, GRPC_UNUSED const ChannelArgs& channel_args,
1404
+ std::shared_ptr<EventEngine> event_engine,
1405
+ absl::AnyInvocable<void(absl::StatusOr<uint32_t>)> on_receive_settings)
1406
+ : channelz::DataSource(http2::CreateChannelzSocketNode(
1407
+ endpoint.GetEventEngineEndpoint(), channel_args)),
1408
+ event_engine_(std::move(event_engine)),
1409
+ endpoint_(std::move(endpoint)),
1410
+ settings_(MakeRefCounted<SettingsPromiseManager>(
1411
+ std::move(on_receive_settings))),
1412
+ next_stream_id_(/*Initial Stream ID*/ 1),
1413
+ should_reset_ping_clock_(false),
1414
+ is_first_write_(true),
1415
+ max_write_size_(kMaxWriteSize),
1416
+ ping_manager_(std::nullopt),
1417
+ keepalive_manager_(std::nullopt),
1418
+ goaway_manager_(GoawayInterfaceImpl::Make(this)),
1419
+ memory_owner_(channel_args.GetObject<ResourceQuota>()
1420
+ ->memory_quota()
1421
+ ->CreateMemoryOwner()),
1422
+ flow_control_(
1423
+ "PH2_Client",
1424
+ channel_args.GetBool(GRPC_ARG_HTTP2_BDP_PROBE).value_or(true),
1425
+ &memory_owner_),
1426
+ ztrace_collector_(std::make_shared<PromiseHttp2ZTraceCollector>()) {
1427
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Constructor Begin";
1428
+ // Initialize the general party and write party.
1429
+ RefCountedPtr<Arena> party_arena = SimpleArenaAllocator(0)->MakeArena();
1430
+ party_arena->SetContext<EventEngine>(event_engine_.get());
1431
+ general_party_ = Party::Make(std::move(party_arena));
1432
+
1433
+ InitLocalSettings(settings_->mutable_local(), /*is_client=*/true);
1434
+ TransportChannelArgs args;
1435
+ ReadChannelArgs(channel_args, args);
1436
+
1437
+ ping_manager_.emplace(channel_args, args.ping_timeout,
1438
+ PingSystemInterfaceImpl::Make(this), event_engine_);
1439
+
1440
+ // The keepalive loop is only spawned if the keepalive time is not infinity.
1441
+ keepalive_manager_.emplace(
1442
+ KeepAliveInterfaceImpl::Make(this),
1443
+ ((args.keepalive_timeout < args.ping_timeout) ? args.keepalive_timeout
1444
+ : Duration::Infinity()),
1445
+ args.keepalive_time, general_party_.get());
1446
+
1447
+ if (settings_->local().allow_security_frame()) {
1448
+ // TODO(tjagtap) : [PH2][P3] : Setup the plumbing to pass the security frame
1449
+ // to the endpoing via TransportFramingEndpointExtension.
1450
+ // Also decide if this plumbing is done here, or when the peer sends
1451
+ // allow_security_frame too.
1452
+ }
1453
+
1454
+ GRPC_DCHECK(ping_manager_.has_value());
1455
+ GRPC_DCHECK(keepalive_manager_.has_value());
1456
+ SourceConstructed();
1457
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Constructor End";
1458
+ }
1459
+
1460
+ void Http2ClientTransport::SpawnTransportLoops() {
1461
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops Begin";
1462
+ SpawnGuardedTransportParty(
1463
+ "FlowControlPeriodicUpdateLoop",
1464
+ UntilTransportClosed(FlowControlPeriodicUpdateLoop()));
1465
+
1466
+ SpawnGuardedTransportParty("FlushInitialFrames", TriggerWriteCycle());
1467
+ SpawnGuardedTransportParty("MultiplexerLoop",
1468
+ UntilTransportClosed(MultiplexerLoop()));
1469
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::SpawnTransportLoops End";
1470
+ }
1471
+
1472
+ void Http2ClientTransport::ReadChannelArgs(const ChannelArgs& channel_args,
1473
+ TransportChannelArgs& args) {
1474
+ http2::ReadChannelArgs(channel_args, args, settings_->mutable_local(),
1475
+ flow_control_,
1476
+ /*is_client=*/true);
1477
+
1478
+ // Assign the channel args to the member variables.
1479
+ keepalive_time_ = args.keepalive_time;
1480
+ incoming_headers_.set_soft_limit(args.max_header_list_size_soft_limit);
1481
+ keepalive_permit_without_calls_ = args.keepalive_permit_without_calls;
1482
+ enable_preferred_rx_crypto_frame_advertisement_ =
1483
+ args.enable_preferred_rx_crypto_frame_advertisement;
1484
+ test_only_ack_pings_ = args.test_only_ack_pings;
1485
+
1486
+ if (args.initial_sequence_number > 0) {
1487
+ next_stream_id_ = args.initial_sequence_number;
1488
+ }
1489
+
1490
+ settings_->SetSettingsTimeout(args.settings_timeout);
1491
+ if (args.max_usable_hpack_table_size >= 0) {
1492
+ encoder_.SetMaxUsableSize(args.max_usable_hpack_table_size);
1493
+ }
1494
+ }
1495
+
1496
+ // This function MUST be idempotent. This function MUST be called from the
1497
+ // transport party.
1498
+ void Http2ClientTransport::CloseStream(RefCountedPtr<Stream> stream,
1499
+ CloseStreamArgs args,
1500
+ DebugLocation whence) {
1501
+ std::optional<Http2Status> close_transport_error;
1502
+
1503
+ {
1504
+ // TODO(akshitpatel) : [PH2][P3] : Measure the impact of holding mutex
1505
+ // throughout this function.
1506
+ MutexLock lock(&transport_mutex_);
1507
+ GRPC_DCHECK(stream != nullptr) << "stream is null";
1508
+ GRPC_HTTP2_CLIENT_DLOG
1509
+ << "Http2ClientTransport::CloseStream for stream id: "
1510
+ << stream->GetStreamId() << " close_reads=" << args.close_reads
1511
+ << " close_writes=" << args.close_writes
1512
+ << " incoming_headers_=" << incoming_headers_.DebugString()
1513
+ << " location=" << whence.file() << ":" << whence.line();
1514
+
1515
+ if (args.close_writes) {
1516
+ stream->SetWriteClosed();
1517
+ }
1518
+
1519
+ if (args.close_reads) {
1520
+ GRPC_HTTP2_CLIENT_DLOG
1521
+ << "Http2ClientTransport::CloseStream for stream id: "
1522
+ << stream->GetStreamId() << " closing stream for reads.";
1523
+ // If the stream is closed while reading HEADER/CONTINUATION frames, we
1524
+ // should still parse the enqueued buffer to maintain HPACK state between
1525
+ // peers.
1526
+ if (incoming_headers_.IsWaitingForContinuationFrame()) {
1527
+ Http2Status result = http2::ParseAndDiscardHeaders(
1528
+ parser_, SliceBuffer(),
1529
+ HeaderAssembler::ParseHeaderArgs{
1530
+ /*is_initial_metadata=*/!incoming_headers_.HeaderHasEndStream(),
1531
+ /*is_end_headers=*/false,
1532
+ /*is_client=*/true,
1533
+ /*max_header_list_size_soft_limit=*/
1534
+ incoming_headers_.soft_limit(),
1535
+ /*max_header_list_size_hard_limit=*/
1536
+ settings_->acked().max_header_list_size(),
1537
+ /*stream_id=*/incoming_headers_.GetStreamId(),
1538
+ },
1539
+ stream, /*original_status=*/Http2Status::Ok());
1540
+ if (result.GetType() == Http2Status::Http2ErrorType::kConnectionError) {
1541
+ GRPC_HTTP2_CLIENT_DLOG
1542
+ << "Http2ClientTransport::CloseStream for stream id: "
1543
+ << stream->GetStreamId()
1544
+ << " failed to partially process header: "
1545
+ << result.DebugString();
1546
+ close_transport_error.emplace(std::move(result));
1547
+ }
1548
+ }
1549
+
1550
+ stream_list_.erase(stream->GetStreamId());
1551
+ if (!close_transport_error.has_value() && CanCloseTransportLocked()) {
1552
+ // TODO(akshitpatel) : [PH2][P3] : Is kInternalError the right error
1553
+ // code to use here? IMO it should be kNoError.
1554
+ close_transport_error.emplace(Http2Status::Http2ConnectionError(
1555
+ Http2ErrorCode::kInternalError,
1556
+ std::string(RFC9113::kLastStreamClosed)));
1557
+ }
1558
+ }
1559
+ }
1560
+
1561
+ if (close_transport_error.has_value()) {
1562
+ GRPC_UNUSED absl::Status status = HandleError(
1563
+ /*stream_id=*/std::nullopt, std::move(*close_transport_error));
1564
+ }
1565
+ }
1566
+
1567
+ // This function is idempotent and MUST be called from the transport party.
1568
+ // All the scenarios that can lead to this function being called are:
1569
+ // 1. Reading a RST stream frame: In this case, the stream is immediately
1570
+ // closed for reads and writes and removed from the stream_list_.
1571
+ // 2. Reading a Trailing Metadata frame: There are two possible scenarios:
1572
+ // a. The stream is closed for writes: Close the stream for reads and writes
1573
+ // and remove the stream from the stream_list_.
1574
+ // b. The stream is NOT closed for writes: Stream is kept open for reads and
1575
+ // writes. CallHandler OnDone will trigger sending a half close frame. If
1576
+ // before the multiplexer loop triggers sending a half close a RST stream
1577
+ // is read, the stream is closed for reads and writes immediately and the
1578
+ // half close is discarded. If no RST stream is read, the stream is closed
1579
+ // for reads and writes upon sending the half close frame from the
1580
+ // multiplexer loop.
1581
+ // 3. Hitting error condition in the transport: In this case, RST stream is
1582
+ // enqueued and the stream is closed for reads immediately. This implies we
1583
+ // reduce the number of active streams inline. When multiplexer loop
1584
+ // processes the RST stream frame, the stream ref will dropped. The other
1585
+ // stream ref will be dropped when CallHandler's OnDone is executed causing
1586
+ // the stream to be destroyed. CallHandlers OnDone also tries to enqueue a
1587
+ // RST stream frame. This is a no-op at this point.
1588
+ // 4. Application abort: In this case, CallHandler OnDone will enqueue RST
1589
+ // stream frame to the stream data queue. The multiplexer loop will send the
1590
+ // reset stream frame and close the stream from reads and writes.
1591
+ // 5. Transport close: This takes up the same path as case 3.
1592
+ // In all the above cases, trailing metadata is pushed to the call spine.
1593
+ // Note: The stream ref is held in atmost 3 places:
1594
+ // 1. stream_list_ : This is released when the stream is closed for reads.
1595
+ // 2. CallHandler OnDone : This is released when Trailing Metadata is pushed to
1596
+ // the call spine.
1597
+ // 3. List of writable streams : This is released after the final frame is
1598
+ // dequeued from the StreamDataQueue.
1599
+ void Http2ClientTransport::BeginCloseStream(
1600
+ RefCountedPtr<Stream> stream,
1601
+ std::optional<uint32_t> reset_stream_error_code,
1602
+ ServerMetadataHandle&& metadata, DebugLocation whence) {
1603
+ if (stream == nullptr) {
1604
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::BeginCloseStream stream "
1605
+ "is null reset_stream_error_code="
1606
+ << (reset_stream_error_code.has_value()
1607
+ ? absl::StrCat(*reset_stream_error_code)
1608
+ : "nullopt")
1609
+ << " metadata=" << metadata->DebugString();
1610
+ return;
1611
+ }
1612
+
1613
+ GRPC_HTTP2_CLIENT_DLOG
1614
+ << "Http2ClientTransport::BeginCloseStream for stream id: "
1615
+ << stream->GetStreamId() << " error_code="
1616
+ << (reset_stream_error_code.has_value()
1617
+ ? absl::StrCat(*reset_stream_error_code)
1618
+ : "nullopt")
1619
+ << " ServerMetadata=" << metadata->DebugString()
1620
+ << " location=" << whence.file() << ":" << whence.line();
1621
+
1622
+ bool close_reads = false;
1623
+ bool close_writes = false;
1624
+ if (metadata->get(GrpcCallWasCancelled())) {
1625
+ if (!reset_stream_error_code) {
1626
+ // Callers taking this path:
1627
+ // 1. Reading a RST stream frame (will not send any frame out).
1628
+ // 2. Closing a stream before initial metadata is sent.
1629
+ close_reads = true;
1630
+ close_writes = true;
1631
+ GRPC_HTTP2_CLIENT_DLOG
1632
+ << "Http2ClientTransport::BeginCloseStream for stream id: "
1633
+ << stream->GetStreamId() << " close_reads= " << close_reads
1634
+ << " close_writes= " << close_writes;
1635
+ } else {
1636
+ // Callers taking this path:
1637
+ // 1. Processing Error in transport (will send reset stream from here).
1638
+ absl::StatusOr<StreamWritabilityUpdate> enqueue_result =
1639
+ stream->EnqueueResetStream(reset_stream_error_code.value());
1640
+ GRPC_HTTP2_CLIENT_DLOG << "Enqueued ResetStream with error code="
1641
+ << reset_stream_error_code.value()
1642
+ << " status=" << enqueue_result.status();
1643
+ if (enqueue_result.ok()) {
1644
+ GRPC_UNUSED absl::Status status =
1645
+ MaybeAddStreamToWritableStreamList(stream, enqueue_result.value());
1646
+ }
1647
+ close_reads = true;
1648
+ GRPC_HTTP2_CLIENT_DLOG
1649
+ << "Http2ClientTransport::BeginCloseStream for stream id: "
1650
+ << stream->GetStreamId() << " close_reads= " << close_reads
1651
+ << " close_writes= " << close_writes;
1652
+ }
1653
+ } else {
1654
+ // Callers taking this path:
1655
+ // 1. Reading Trailing Metadata (MAY send half close from OnDone).
1656
+ if (stream->IsClosedForWrites()) {
1657
+ close_reads = true;
1658
+ close_writes = true;
1659
+ GRPC_HTTP2_CLIENT_DLOG
1660
+ << "Http2ClientTransport::BeginCloseStream for stream id: "
1661
+ << stream->GetStreamId() << " close_reads= " << close_reads
1662
+ << " close_writes= " << close_writes;
1663
+ }
1664
+ }
1665
+
1666
+ if (close_reads || close_writes) {
1667
+ CloseStream(stream, CloseStreamArgs{close_reads, close_writes}, whence);
1668
+ }
1669
+
1670
+ // If the call was cancelled, the stream MUST be closed for reads.
1671
+ GRPC_DCHECK(metadata->get(GrpcCallWasCancelled()) ? close_reads : true);
1672
+
1673
+ // This maybe called multiple times while closing a stream. In CallV3, the
1674
+ // flow for pushing server trailing metadata is idempotent. However, there is
1675
+ // a subtle difference. When we push server trailing metadata with a cancelled
1676
+ // status PushServerTrailingMetadata is spawned inline on the Call party
1677
+ // whereas for the non-cancelled status, PushServerTrailingMetadata is
1678
+ // spawned in the server_to_client spawn serializer. Because of this, in
1679
+ // case when the server pushes trailing metadata (non-cancelled) followed by a
1680
+ // RST stream with cancelled status, it is possible that the cancelled
1681
+ // trailing metadata (for RST stream) is processed before. This would result
1682
+ // in losing the actual status/message pushed by the server.
1683
+ // To address this, we push the server trailing metadata to the stream only
1684
+ // if it is not pushed already.
1685
+ stream->MaybePushServerTrailingMetadata(std::move(metadata));
1686
+ }
1687
+
1688
+ void Http2ClientTransport::CloseTransport() {
1689
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CloseTransport";
1690
+
1691
+ transport_closed_latch_.Set();
1692
+ settings_->HandleTransportShutdown(event_engine_.get());
1693
+
1694
+ MutexLock lock(&transport_mutex_);
1695
+ // This is the only place where the general_party_ is reset.
1696
+ general_party_.reset();
1697
+ }
1698
+
1699
+ void Http2ClientTransport::MaybeSpawnCloseTransport(Http2Status http2_status,
1700
+ DebugLocation whence) {
1701
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::MaybeSpawnCloseTransport "
1702
+ "status="
1703
+ << http2_status << " location=" << whence.file() << ":"
1704
+ << whence.line();
1705
+
1706
+ // Free up the stream_list at this point. This would still allow the frames
1707
+ // in the MPSC to be drained and block any additional frames from being
1708
+ // enqueued. Additionally this also prevents additional frames with non-zero
1709
+ // stream_ids from being processed by the read loop.
1710
+ ReleasableMutexLock lock(&transport_mutex_);
1711
+ if (is_transport_closed_) {
1712
+ lock.Release();
1713
+ return;
1714
+ }
1715
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::MaybeSpawnCloseTransport "
1716
+ "Initiating transport close";
1717
+ is_transport_closed_ = true;
1718
+ absl::flat_hash_map<uint32_t, RefCountedPtr<Stream>> stream_list =
1719
+ std::move(stream_list_);
1720
+ stream_list_.clear();
1721
+ ReportDisconnectionLocked(
1722
+ http2_status.GetAbslConnectionError(), {},
1723
+ absl::StrCat("Transport closed: ", http2_status.DebugString()).c_str());
1724
+ lock.Release();
1725
+
1726
+ SpawnInfallibleTransportParty(
1727
+ "CloseTransport", [self = RefAsSubclass<Http2ClientTransport>(),
1728
+ stream_list = std::move(stream_list),
1729
+ http2_status = std::move(http2_status)]() mutable {
1730
+ GRPC_HTTP2_CLIENT_DLOG
1731
+ << "Http2ClientTransport::CloseTransport Cleaning up call stacks";
1732
+ // Clean up the call stacks for all active streams.
1733
+ for (const auto& pair : stream_list) {
1734
+ // There is no merit in transitioning the stream to
1735
+ // closed state here as the subsequent lookups would
1736
+ // fail. Also, as this is running on the transport
1737
+ // party, there would not be concurrent access to the stream.
1738
+ auto& stream = pair.second;
1739
+ self->BeginCloseStream(stream,
1740
+ Http2ErrorCodeToFrameErrorCode(
1741
+ http2_status.GetConnectionErrorCode()),
1742
+ CancelledServerMetadataFromStatus(
1743
+ http2_status.GetAbslConnectionError()));
1744
+ }
1745
+
1746
+ // RFC9113 : A GOAWAY frame might not immediately precede closing of
1747
+ // the connection; a receiver of a GOAWAY that has no more use for the
1748
+ // connection SHOULD still send a GOAWAY frame before terminating the
1749
+ // connection.
1750
+ return Map(
1751
+ // TODO(akshitpatel) : [PH2][P4] : This is creating a copy of
1752
+ // the debug data. Verify if this is causing a performance
1753
+ // issue.
1754
+ Race(AssertResultType<absl::Status>(
1755
+ self->goaway_manager_.RequestGoaway(
1756
+ http2_status.GetConnectionErrorCode(),
1757
+ /*debug_data=*/
1758
+ Slice::FromCopiedString(
1759
+ http2_status.GetAbslConnectionError().message()),
1760
+ kLastIncomingStreamIdClient, /*immediate=*/true)),
1761
+ // Failsafe to close the transport if goaway is not
1762
+ // sent within kGoawaySendTimeoutSeconds seconds.
1763
+ Sleep(Duration::Seconds(kGoawaySendTimeoutSeconds))),
1764
+ [self](auto) mutable {
1765
+ self->CloseTransport();
1766
+ return Empty{};
1767
+ });
1768
+ ;
1769
+ });
1770
+ }
1771
+
1772
+ bool Http2ClientTransport::CanCloseTransportLocked() const {
1773
+ // If there are no more streams and next stream id is greater than the
1774
+ // max allowed stream id, then no more streams can be created and it is
1775
+ // safe to close the transport.
1776
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::CanCloseTransportLocked "
1777
+ "GetActiveStreamCountLocked="
1778
+ << GetActiveStreamCountLocked()
1779
+ << " PeekNextStreamId=" << PeekNextStreamId()
1780
+ << " GetMaxAllowedStreamId="
1781
+ << GetMaxAllowedStreamId();
1782
+ return GetActiveStreamCountLocked() == 0 &&
1783
+ PeekNextStreamId() > GetMaxAllowedStreamId();
1784
+ }
1785
+
1786
+ Http2ClientTransport::~Http2ClientTransport() {
1787
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Destructor Begin";
1788
+ GRPC_DCHECK(stream_list_.empty());
1789
+ GRPC_DCHECK(general_party_ == nullptr);
1790
+ memory_owner_.Reset();
1791
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport Destructor End";
1792
+ }
1793
+
1794
+ void Http2ClientTransport::SpawnAddChannelzData(RefCountedPtr<Party> party,
1795
+ channelz::DataSink sink) {
1796
+ SpawnInfallible(
1797
+ std::move(party), "AddData",
1798
+ [self = RefAsSubclass<Http2ClientTransport>(),
1799
+ sink = std::move(sink)]() mutable {
1800
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::AddData Promise";
1801
+ sink.AddData(
1802
+ "Http2ClientTransport",
1803
+ channelz::PropertyList()
1804
+ .Set("keepalive_time", self->keepalive_time_)
1805
+ .Set("keepalive_permit_without_calls",
1806
+ self->keepalive_permit_without_calls_)
1807
+ .Set("settings", self->settings_->ChannelzProperties())
1808
+ .Set("flow_control",
1809
+ self->flow_control_.stats().ChannelzProperties()));
1810
+ self->general_party_->ExportToChannelz("Http2ClientTransport Party",
1811
+ sink);
1812
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::AddData End";
1813
+ return Empty{};
1814
+ });
1815
+ }
1816
+
1817
+ void Http2ClientTransport::AddData(channelz::DataSink sink) {
1818
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport::AddData Begin";
1819
+
1820
+ event_engine_->Run([self = RefAsSubclass<Http2ClientTransport>(),
1821
+ sink = std::move(sink)]() mutable {
1822
+ bool is_party_null = false;
1823
+ {
1824
+ // Apart from CloseTransport, this is the only place where a lock is taken
1825
+ // to access general_party_. All other access to general_party_ happens
1826
+ // on the general party itself and hence do not race with CloseTransport.
1827
+ // TODO(akshitpatel) : [PH2][P4] : Check if a new mutex is needed to
1828
+ // protect general_party_. Curently transport_mutex_ can is used in
1829
+ // these places:
1830
+ // 1. In promises running on the transport party
1831
+ // 2. In AddData promise
1832
+ // 3. In Orphan function.
1833
+ // 4. Stream creation (this will be removed soon).
1834
+ // Given that #1 is already serialized (guaranteed by party), #2 is on
1835
+ // demand and #3 happens once for the lifetime of the transport while
1836
+ // closing the transport, the contention should be minimal.
1837
+ MutexLock lock(&self->transport_mutex_);
1838
+ // TODO(akshitpatel) : [PH2][P2] : There is still a potential for a race
1839
+ // here where the general_party_ is reset between the lock being
1840
+ // released and the spawn. We cannot just do a spawn inside the mutex as
1841
+ // that may result in deadlock.
1842
+ // Potential fix to hold a ref to the party inside the mutex and do a
1843
+ // spawn outside the mutex. The only side effect is that this introduces
1844
+ // an additional ref to the party other the transport's copy.
1845
+ if (GPR_UNLIKELY(self->general_party_ == nullptr)) {
1846
+ is_party_null = true;
1847
+ GRPC_HTTP2_CLIENT_DLOG
1848
+ << "Http2ClientTransport::AddData general_party_ is "
1849
+ "null. Transport is closed.";
1850
+ }
1851
+ }
1852
+
1853
+ ExecCtx exec_ctx;
1854
+ if (!is_party_null) {
1855
+ self->SpawnAddChannelzData(self->general_party_, std::move(sink));
1856
+ }
1857
+ self.reset(); // Cleanup with exec_ctx in scope
1858
+ });
1859
+ }
1860
+
1861
+ ///////////////////////////////////////////////////////////////////////////////
1862
+ // Stream Related Operations
1863
+
1864
+ RefCountedPtr<Stream> Http2ClientTransport::LookupStream(uint32_t stream_id) {
1865
+ MutexLock lock(&transport_mutex_);
1866
+ auto it = stream_list_.find(stream_id);
1867
+ if (it == stream_list_.end()) {
1868
+ GRPC_HTTP2_CLIENT_DLOG
1869
+ << "Http2ClientTransport::LookupStream Stream not found stream_id="
1870
+ << stream_id;
1871
+ return nullptr;
1872
+ }
1873
+ return it->second;
1874
+ }
1875
+
1876
+ bool Http2ClientTransport::SetOnDone(CallHandler call_handler,
1877
+ RefCountedPtr<Stream> stream) {
1878
+ return call_handler.OnDone(
1879
+ [self = RefAsSubclass<Http2ClientTransport>(), stream,
1880
+ stream_id = stream->GetStreamId()](bool cancelled) {
1881
+ GRPC_HTTP2_CLIENT_DLOG << "PH2: Client call " << self.get()
1882
+ << " id=" << stream_id
1883
+ << " done: cancelled=" << cancelled;
1884
+ absl::StatusOr<StreamWritabilityUpdate> enqueue_result;
1885
+ GRPC_HTTP2_CLIENT_DLOG
1886
+ << "PH2: Client call " << self.get() << " id=" << stream_id
1887
+ << " done: stream=" << stream.get() << " cancelled=" << cancelled;
1888
+ if (cancelled) {
1889
+ // In most of the cases, EnqueueResetStream would be a no-op as
1890
+ // BeginCloseStream would have already enqueued the reset stream.
1891
+ // Currently only Aborts from application will actually enqueue
1892
+ // the reset stream here.
1893
+ enqueue_result = stream->EnqueueResetStream(
1894
+ static_cast<uint32_t>(Http2ErrorCode::kCancel));
1895
+ GRPC_HTTP2_CLIENT_DLOG
1896
+ << "Enqueued ResetStream with error code="
1897
+ << static_cast<uint32_t>(Http2ErrorCode::kCancel)
1898
+ << " status=" << enqueue_result.status();
1899
+ } else {
1900
+ enqueue_result = stream->EnqueueHalfClosed();
1901
+ GRPC_HTTP2_CLIENT_DLOG << "Enqueued HalfClosed with result="
1902
+ << enqueue_result.status();
1903
+ }
1904
+
1905
+ if (enqueue_result.ok()) {
1906
+ GRPC_HTTP2_CLIENT_DLOG
1907
+ << "Http2ClientTransport::SetOnDone "
1908
+ "MaybeAddStreamToWritableStreamList for stream= "
1909
+ << stream->GetStreamId() << " enqueue_result={became_writable="
1910
+ << enqueue_result.value().became_writable << ", priority="
1911
+ << static_cast<uint8_t>(enqueue_result.value().priority) << "}";
1912
+ GRPC_UNUSED absl::Status status =
1913
+ self->MaybeAddStreamToWritableStreamList(stream,
1914
+ enqueue_result.value());
1915
+ }
1916
+ });
1917
+ }
1918
+
1919
+ std::optional<RefCountedPtr<Stream>> Http2ClientTransport::MakeStream(
1920
+ CallHandler call_handler) {
1921
+ // https://datatracker.ietf.org/doc/html/rfc9113#name-stream-identifiers
1922
+ RefCountedPtr<Stream> stream;
1923
+ {
1924
+ // TODO(akshitpatel) : [PH2][P3] : Remove this mutex once settings is in
1925
+ // place.
1926
+ MutexLock lock(&transport_mutex_);
1927
+ stream = MakeRefCounted<Stream>(call_handler, flow_control_);
1928
+ }
1929
+ const bool on_done_added = SetOnDone(call_handler, stream);
1930
+ if (!on_done_added) return std::nullopt;
1931
+ return stream;
1932
+ }
1933
+
1934
+ uint32_t Http2ClientTransport::GetMaxAllowedStreamId() const {
1935
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport GetMaxAllowedStreamId "
1936
+ << max_allowed_stream_id_;
1937
+ return max_allowed_stream_id_;
1938
+ }
1939
+
1940
+ void Http2ClientTransport::SetMaxAllowedStreamId(
1941
+ const uint32_t max_allowed_stream_id) {
1942
+ const uint32_t old_max_allowed_stream_id = GetMaxAllowedStreamId();
1943
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport SetMaxAllowedStreamId "
1944
+ << " max_allowed_stream_id: " << max_allowed_stream_id
1945
+ << " old_allowed_max_stream_id: "
1946
+ << old_max_allowed_stream_id;
1947
+ // RFC9113 : Endpoints MUST NOT increase the value they send in the last
1948
+ // stream identifier, since the peers might already have retried unprocessed
1949
+ // requests on another connection.
1950
+ if (GPR_LIKELY(max_allowed_stream_id <= old_max_allowed_stream_id)) {
1951
+ max_allowed_stream_id_ = max_allowed_stream_id;
1952
+ } else {
1953
+ LOG_IF(ERROR, max_allowed_stream_id > old_max_allowed_stream_id)
1954
+ << "Endpoints MUST NOT increase the value they send in the last "
1955
+ "stream "
1956
+ "identifier";
1957
+ GRPC_DCHECK_LE(max_allowed_stream_id, old_max_allowed_stream_id)
1958
+ << "Endpoints MUST NOT increase the value they send in the last "
1959
+ "stream "
1960
+ "identifier";
1961
+ }
1962
+ }
1963
+
1964
+ ///////////////////////////////////////////////////////////////////////////////
1965
+ // Call Spine related operations
1966
+
1967
+ auto Http2ClientTransport::CallOutboundLoop(CallHandler call_handler,
1968
+ RefCountedPtr<Stream> stream,
1969
+ ClientMetadataHandle metadata) {
1970
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport CallOutboundLoop";
1971
+ GRPC_DCHECK(stream != nullptr);
1972
+
1973
+ auto send_message = [self = RefAsSubclass<Http2ClientTransport>(),
1974
+ stream](MessageHandle&& message) mutable {
1975
+ return TrySeq(stream->EnqueueMessage(std::move(message)),
1976
+ [self, stream](const StreamWritabilityUpdate result) mutable {
1977
+ GRPC_HTTP2_CLIENT_DLOG
1978
+ << "Http2ClientTransport CallOutboundLoop "
1979
+ "Enqueued Message";
1980
+ return self->MaybeAddStreamToWritableStreamList(
1981
+ std::move(stream), result);
1982
+ });
1983
+ };
1984
+
1985
+ auto send_initial_metadata = [self = RefAsSubclass<Http2ClientTransport>(),
1986
+ stream,
1987
+ metadata = std::move(metadata)]() mutable {
1988
+ return TrySeq(
1989
+ [stream, metadata = std::move(metadata)]() mutable {
1990
+ return stream->EnqueueInitialMetadata(std::move(metadata));
1991
+ },
1992
+ [self, stream](const StreamWritabilityUpdate result) mutable {
1993
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport CallOutboundLoop "
1994
+ "Enqueued Initial Metadata";
1995
+ return self->MaybeAddStreamToWritableStreamList(std::move(stream),
1996
+ result);
1997
+ });
1998
+ };
1999
+
2000
+ auto send_half_closed = [self = RefAsSubclass<Http2ClientTransport>(),
2001
+ stream]() mutable {
2002
+ return TrySeq([stream]() { return stream->EnqueueHalfClosed(); },
2003
+ [self, stream](const StreamWritabilityUpdate result) mutable {
2004
+ GRPC_HTTP2_CLIENT_DLOG
2005
+ << "Http2ClientTransport CallOutboundLoop "
2006
+ "Enqueued Half Closed";
2007
+ return self->MaybeAddStreamToWritableStreamList(
2008
+ std::move(stream), result);
2009
+ });
2010
+ };
2011
+ return GRPC_LATENT_SEE_PROMISE(
2012
+ "Ph2CallOutboundLoop",
2013
+ TrySeq(
2014
+ send_initial_metadata(),
2015
+ [call_handler, send_message]() {
2016
+ // The lock will be released once the promise is constructed from
2017
+ // this factory. ForEach will be polled after the lock is
2018
+ // released.
2019
+ return ForEach(MessagesFrom(call_handler), send_message);
2020
+ },
2021
+ [self = RefAsSubclass<Http2ClientTransport>(),
2022
+ send_half_closed = std::move(send_half_closed)]() mutable {
2023
+ return send_half_closed();
2024
+ },
2025
+ [call_handler]() mutable {
2026
+ return Map(call_handler.WasCancelled(), [](bool cancelled) {
2027
+ GRPC_HTTP2_CLIENT_DLOG
2028
+ << "Http2ClientTransport PH2CallOutboundLoop End with "
2029
+ "cancelled="
2030
+ << cancelled;
2031
+ return (cancelled) ? absl::CancelledError() : absl::OkStatus();
2032
+ });
2033
+ }));
2034
+ }
2035
+
2036
+ void Http2ClientTransport::StartCall(CallHandler call_handler) {
2037
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport StartCall Begin";
2038
+ call_handler.SpawnGuarded(
2039
+ "OutboundLoop",
2040
+ TrySeq(call_handler.PullClientInitialMetadata(),
2041
+ [self = RefAsSubclass<Http2ClientTransport>(),
2042
+ call_handler](ClientMetadataHandle metadata) mutable {
2043
+ // For a gRPC Client, we only need to check the
2044
+ // MAX_CONCURRENT_STREAMS setting compliance at the time of
2045
+ // sending (that is write path). A gRPC Client will never
2046
+ // receive a stream initiated by a server, so we dont have to
2047
+ // check MAX_CONCURRENT_STREAMS compliance on the Read-Path.
2048
+ //
2049
+ // TODO(tjagtap) : [PH2][P1] Check for MAX_CONCURRENT_STREAMS
2050
+ // sent by peer before making a stream. Decide behaviour if we
2051
+ // are crossing this threshold.
2052
+ //
2053
+ // TODO(tjagtap) : [PH2][P1] : For a server we will have to do
2054
+ // this for incoming streams only. If a server receives more
2055
+ // streams from a client than is allowed by the clients settings,
2056
+ // whether or not we should fail is debatable.
2057
+ std::optional<RefCountedPtr<Stream>> stream =
2058
+ self->MakeStream(call_handler);
2059
+ return If(
2060
+ stream.has_value(),
2061
+ [self, call_handler, stream,
2062
+ initial_metadata = std::move(metadata)]() mutable {
2063
+ return Map(
2064
+ self->CallOutboundLoop(call_handler, stream.value(),
2065
+ std::move(initial_metadata)),
2066
+ [](absl::Status status) { return status; });
2067
+ },
2068
+ []() {
2069
+ return absl::InternalError("Failed to make stream");
2070
+ });
2071
+ }));
2072
+ GRPC_HTTP2_CLIENT_DLOG << "Http2ClientTransport StartCall End";
2073
+ }
2074
+
2075
+ } // namespace http2
2076
+ } // namespace grpc_core