grpc 1.75.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 (839) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +24 -5
  3. data/include/grpc/credentials.h +27 -6
  4. data/include/grpc/event_engine/memory_allocator.h +2 -0
  5. data/include/grpc/event_engine/memory_request.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +5 -0
  7. data/include/grpc/support/metrics.h +7 -1
  8. data/src/core/call/call_filters.cc +5 -5
  9. data/src/core/call/call_filters.h +211 -37
  10. data/src/core/call/call_spine.cc +1 -1
  11. data/src/core/call/call_spine.h +54 -32
  12. data/src/core/call/channelz_context.h +30 -0
  13. data/src/core/call/client_call.cc +49 -10
  14. data/src/core/call/client_call.h +6 -3
  15. data/src/core/call/filter_fusion.h +9 -9
  16. data/src/core/call/interception_chain.h +7 -6
  17. data/src/core/call/metadata_batch.cc +49 -55
  18. data/src/core/call/metadata_batch.h +10 -9
  19. data/src/core/call/metadata_info.cc +1 -1
  20. data/src/core/call/parsed_metadata.h +2 -2
  21. data/src/core/call/request_buffer.cc +1 -1
  22. data/src/core/call/security_context.cc +2 -2
  23. data/src/core/call/security_context.h +1 -1
  24. data/src/core/call/server_call.cc +5 -5
  25. data/src/core/call/server_call.h +6 -4
  26. data/src/core/call/simple_slice_based_metadata.h +1 -1
  27. data/src/core/call/status_util.cc +1 -1
  28. data/src/core/channelz/channel_trace.cc +1 -1
  29. data/src/core/channelz/channel_trace.h +3 -3
  30. data/src/core/channelz/channelz.cc +25 -29
  31. data/src/core/channelz/channelz.h +73 -22
  32. data/src/core/channelz/channelz_registry.cc +2 -2
  33. data/src/core/channelz/channelz_registry.h +53 -2
  34. data/src/core/channelz/property_list.cc +18 -0
  35. data/src/core/channelz/property_list.h +15 -4
  36. data/src/core/channelz/text_encode.cc +66 -0
  37. data/src/core/channelz/text_encode.h +29 -0
  38. data/src/core/channelz/v2tov1/convert.cc +17 -6
  39. data/src/core/channelz/v2tov1/legacy_api.cc +18 -12
  40. data/src/core/channelz/v2tov1/property_list.cc +2 -1
  41. data/src/core/channelz/ztrace_collector.h +260 -87
  42. data/src/core/client_channel/backup_poller.cc +7 -8
  43. data/src/core/client_channel/buffered_call.cc +140 -0
  44. data/src/core/client_channel/buffered_call.h +104 -0
  45. data/src/core/client_channel/client_channel.cc +144 -84
  46. data/src/core/client_channel/client_channel.h +8 -11
  47. data/src/core/client_channel/client_channel_factory.h +1 -1
  48. data/src/core/client_channel/client_channel_filter.cc +424 -686
  49. data/src/core/client_channel/client_channel_filter.h +57 -150
  50. data/src/core/client_channel/client_channel_internal.h +8 -5
  51. data/src/core/client_channel/client_channel_service_config.cc +43 -3
  52. data/src/core/client_channel/client_channel_service_config.h +12 -1
  53. data/src/core/client_channel/config_selector.h +5 -5
  54. data/src/core/client_channel/connector.h +2 -0
  55. data/src/core/client_channel/dynamic_filters.cc +5 -5
  56. data/src/core/client_channel/global_subchannel_pool.cc +0 -37
  57. data/src/core/client_channel/global_subchannel_pool.h +1 -28
  58. data/src/core/client_channel/lb_metadata.h +1 -1
  59. data/src/core/client_channel/load_balanced_call_destination.cc +10 -12
  60. data/src/core/client_channel/load_balanced_call_destination.h +1 -1
  61. data/src/core/client_channel/local_subchannel_pool.cc +4 -4
  62. data/src/core/client_channel/retry_filter.cc +2 -2
  63. data/src/core/client_channel/retry_filter.h +3 -3
  64. data/src/core/client_channel/retry_filter_legacy_call_data.cc +11 -12
  65. data/src/core/client_channel/retry_filter_legacy_call_data.h +6 -8
  66. data/src/core/client_channel/retry_service_config.cc +3 -3
  67. data/src/core/client_channel/retry_service_config.h +1 -1
  68. data/src/core/client_channel/subchannel.cc +114 -25
  69. data/src/core/client_channel/subchannel.h +24 -8
  70. data/src/core/client_channel/subchannel_pool_interface.cc +2 -2
  71. data/src/core/client_channel/subchannel_pool_interface.h +1 -1
  72. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  73. data/src/core/client_channel/subchannel_stream_client.h +3 -3
  74. data/src/core/config/config_vars.cc +38 -3
  75. data/src/core/config/config_vars.h +26 -0
  76. data/src/core/config/core_configuration.cc +5 -5
  77. data/src/core/config/core_configuration.h +8 -8
  78. data/src/core/config/load_config.cc +13 -1
  79. data/src/core/config/load_config.h +2 -0
  80. data/src/core/credentials/call/call_credentials.h +4 -4
  81. data/src/core/credentials/call/call_creds_registry.h +1 -1
  82. data/src/core/credentials/call/call_creds_registry_init.cc +2 -2
  83. data/src/core/credentials/call/call_creds_util.cc +7 -6
  84. data/src/core/credentials/call/composite/composite_call_credentials.cc +6 -6
  85. data/src/core/credentials/call/composite/composite_call_credentials.h +1 -1
  86. data/src/core/credentials/call/external/aws_external_account_credentials.cc +9 -9
  87. data/src/core/credentials/call/external/aws_external_account_credentials.h +1 -1
  88. data/src/core/credentials/call/external/external_account_credentials.cc +12 -12
  89. data/src/core/credentials/call/external/external_account_credentials.h +1 -1
  90. data/src/core/credentials/call/external/file_external_account_credentials.cc +3 -3
  91. data/src/core/credentials/call/external/file_external_account_credentials.h +1 -1
  92. data/src/core/credentials/call/external/url_external_account_credentials.cc +7 -7
  93. data/src/core/credentials/call/external/url_external_account_credentials.h +1 -1
  94. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.cc +24 -71
  95. data/src/core/credentials/call/gcp_service_account_identity/gcp_service_account_identity_credentials.h +1 -8
  96. data/src/core/credentials/call/iam/iam_credentials.cc +6 -6
  97. data/src/core/credentials/call/iam/iam_credentials.h +1 -1
  98. data/src/core/credentials/call/json_util.cc +1 -1
  99. data/src/core/credentials/call/jwt/json_token.cc +7 -7
  100. data/src/core/credentials/call/jwt/jwt_credentials.cc +5 -5
  101. data/src/core/credentials/call/jwt/jwt_credentials.h +4 -4
  102. data/src/core/credentials/call/jwt/jwt_verifier.cc +19 -18
  103. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.cc +2 -2
  104. data/src/core/credentials/call/jwt_token_file/jwt_token_file_call_credentials.h +3 -3
  105. data/src/core/credentials/call/jwt_util.cc +3 -3
  106. data/src/core/credentials/call/jwt_util.h +1 -1
  107. data/src/core/credentials/call/oauth2/oauth2_credentials.cc +49 -72
  108. data/src/core/credentials/call/oauth2/oauth2_credentials.h +3 -9
  109. data/src/core/credentials/call/plugin/plugin_credentials.cc +6 -6
  110. data/src/core/credentials/call/plugin/plugin_credentials.h +2 -2
  111. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +46 -0
  112. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.h +32 -3
  113. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -5
  114. data/src/core/credentials/transport/alts/alts_security_connector.cc +17 -15
  115. data/src/core/credentials/transport/alts/check_gcp_environment_no_op.cc +1 -1
  116. data/src/core/credentials/transport/alts/grpc_alts_credentials_client_options.cc +23 -3
  117. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.cc +10 -1
  118. data/src/core/credentials/transport/alts/grpc_alts_credentials_options.h +31 -0
  119. data/src/core/credentials/transport/alts/grpc_alts_credentials_server_options.cc +8 -3
  120. data/src/core/credentials/transport/channel_creds_registry.h +1 -1
  121. data/src/core/credentials/transport/channel_creds_registry_init.cc +1 -1
  122. data/src/core/credentials/transport/composite/composite_channel_credentials.cc +7 -7
  123. data/src/core/credentials/transport/composite/composite_channel_credentials.h +1 -1
  124. data/src/core/credentials/transport/fake/fake_credentials.cc +1 -1
  125. data/src/core/credentials/transport/fake/fake_credentials.h +1 -1
  126. data/src/core/credentials/transport/fake/fake_security_connector.cc +7 -7
  127. data/src/core/credentials/transport/google_default/credentials_generic.cc +2 -2
  128. data/src/core/credentials/transport/google_default/google_default_credentials.cc +83 -39
  129. data/src/core/credentials/transport/google_default/google_default_credentials.h +0 -2
  130. data/src/core/credentials/transport/insecure/insecure_security_connector.cc +3 -3
  131. data/src/core/credentials/transport/insecure/insecure_security_connector.h +2 -2
  132. data/src/core/credentials/transport/local/local_security_connector.cc +13 -13
  133. data/src/core/credentials/transport/security_connector.cc +6 -6
  134. data/src/core/credentials/transport/security_connector.h +2 -2
  135. data/src/core/credentials/transport/ssl/ssl_credentials.cc +13 -13
  136. data/src/core/credentials/transport/ssl/ssl_credentials.h +2 -2
  137. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -8
  138. data/src/core/credentials/transport/tls/certificate_provider_factory.h +1 -1
  139. data/src/core/credentials/transport/tls/certificate_provider_registry.cc +2 -2
  140. data/src/core/credentials/transport/tls/certificate_provider_registry.h +1 -1
  141. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +25 -25
  142. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +2 -2
  143. data/src/core/credentials/transport/tls/grpc_tls_certificate_match.cc +1 -1
  144. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +8 -8
  145. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +5 -5
  146. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  147. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.h +4 -4
  148. data/src/core/credentials/transport/tls/grpc_tls_credentials_options.cc +18 -18
  149. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +5 -5
  150. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.h +3 -3
  151. data/src/core/credentials/transport/tls/load_system_roots_supported.cc +1 -1
  152. data/src/core/credentials/transport/tls/spiffe_utils.cc +10 -8
  153. data/src/core/credentials/transport/tls/spiffe_utils.h +2 -2
  154. data/src/core/credentials/transport/tls/ssl_utils.cc +18 -13
  155. data/src/core/credentials/transport/tls/ssl_utils.h +2 -2
  156. data/src/core/credentials/transport/tls/tls_credentials.cc +3 -3
  157. data/src/core/credentials/transport/tls/tls_security_connector.cc +15 -15
  158. data/src/core/credentials/transport/tls/tls_security_connector.h +3 -3
  159. data/src/core/credentials/transport/transport_credentials.cc +3 -3
  160. data/src/core/credentials/transport/transport_credentials.h +4 -4
  161. data/src/core/credentials/transport/xds/xds_credentials.cc +5 -5
  162. data/src/core/credentials/transport/xds/xds_credentials.h +1 -1
  163. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +2 -2
  164. data/src/core/ext/filters/backend_metrics/backend_metric_filter.h +4 -1
  165. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +6 -4
  166. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.h +2 -2
  167. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +7 -7
  168. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +6 -3
  169. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +1 -1
  170. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  171. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +6 -3
  172. data/src/core/ext/filters/gcp_authentication/gcp_authentication_service_config_parser.h +1 -1
  173. data/src/core/ext/filters/http/client/http_client_filter.cc +6 -6
  174. data/src/core/ext/filters/http/client/http_client_filter.h +4 -1
  175. data/src/core/ext/filters/http/client_authority_filter.cc +2 -2
  176. data/src/core/ext/filters/http/client_authority_filter.h +4 -1
  177. data/src/core/ext/filters/http/http_filters_plugin.cc +1 -1
  178. data/src/core/ext/filters/http/message_compress/compression_filter.cc +11 -11
  179. data/src/core/ext/filters/http/message_compress/compression_filter.h +24 -5
  180. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
  181. data/src/core/ext/filters/http/server/http_server_filter.h +4 -1
  182. data/src/core/ext/filters/message_size/message_size_filter.cc +2 -2
  183. data/src/core/ext/filters/message_size/message_size_filter.h +8 -2
  184. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  185. data/src/core/ext/filters/rbac/rbac_filter.h +4 -1
  186. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +3 -3
  187. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +1 -1
  188. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +14 -14
  189. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +13 -2
  190. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +1 -1
  191. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -2
  192. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +58 -44
  193. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +2 -3
  194. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +25 -24
  195. data/src/core/ext/transport/chttp2/server/chttp2_server.h +1 -2
  196. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +6 -6
  197. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +6 -6
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +306 -148
  199. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +10 -2
  200. data/src/core/ext/transport/chttp2/transport/flow_control.cc +42 -7
  201. data/src/core/ext/transport/chttp2/transport/flow_control.h +223 -83
  202. data/src/core/ext/transport/chttp2/transport/flow_control_manager.h +105 -0
  203. data/src/core/ext/transport/chttp2/transport/frame.cc +175 -27
  204. data/src/core/ext/transport/chttp2/transport/frame.h +58 -10
  205. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  206. data/src/core/ext/transport/chttp2/transport/frame_data.h +1 -1
  207. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +5 -5
  208. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +6 -6
  209. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +7 -7
  210. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -1
  211. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +7 -15
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  213. data/src/core/ext/transport/chttp2/transport/goaway.cc +129 -0
  214. data/src/core/ext/transport/chttp2/transport/goaway.h +350 -0
  215. data/src/core/ext/transport/chttp2/transport/header_assembler.h +194 -54
  216. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +3 -3
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -6
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +8 -8
  219. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +3 -3
  220. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +5 -5
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +34 -34
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +6 -7
  223. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +8 -8
  224. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +1 -1
  225. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +1475 -632
  226. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +384 -373
  227. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +1 -1
  228. data/src/core/ext/transport/chttp2/transport/http2_settings.h +6 -4
  229. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +4 -3
  230. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +6 -5
  231. data/src/core/ext/transport/chttp2/transport/http2_settings_promises.h +417 -0
  232. data/src/core/ext/transport/chttp2/transport/http2_status.h +7 -1
  233. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +337 -30
  234. data/src/core/ext/transport/chttp2/transport/http2_transport.h +196 -21
  235. data/src/core/ext/transport/chttp2/transport/http2_ztrace_collector.h +172 -72
  236. data/src/core/ext/transport/chttp2/transport/incoming_metadata_tracker.h +128 -0
  237. data/src/core/ext/transport/chttp2/transport/internal.h +31 -19
  238. data/src/core/ext/transport/chttp2/transport/keepalive.cc +12 -5
  239. data/src/core/ext/transport/chttp2/transport/keepalive.h +14 -10
  240. data/src/core/ext/transport/chttp2/transport/message_assembler.h +30 -21
  241. data/src/core/ext/transport/chttp2/transport/parsing.cc +25 -23
  242. data/src/core/ext/transport/chttp2/transport/ping_callbacks.cc +2 -2
  243. data/src/core/ext/transport/chttp2/transport/ping_callbacks.h +3 -3
  244. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +70 -28
  245. data/src/core/ext/transport/chttp2/transport/ping_promise.h +63 -23
  246. data/src/core/ext/transport/chttp2/transport/ping_rate_policy.cc +1 -1
  247. data/src/core/ext/transport/chttp2/transport/security_frame.cc +31 -0
  248. data/src/core/ext/transport/chttp2/transport/security_frame.h +32 -0
  249. data/src/core/ext/transport/chttp2/transport/stream.h +287 -0
  250. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +476 -208
  251. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +8 -8
  252. data/src/core/ext/transport/chttp2/transport/transport_common.cc +17 -1
  253. data/src/core/ext/transport/chttp2/transport/transport_common.h +57 -0
  254. data/src/core/ext/transport/chttp2/transport/varint.h +2 -2
  255. data/src/core/ext/transport/chttp2/transport/writable_streams.h +202 -84
  256. data/src/core/ext/transport/chttp2/transport/write_size_policy.cc +2 -2
  257. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -6
  258. data/src/core/ext/transport/inproc/inproc_transport.cc +9 -3
  259. data/src/core/ext/transport/inproc/legacy_inproc_transport.cc +11 -8
  260. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb.h +740 -0
  261. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.c +218 -0
  262. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/service.upb_minitable.h +46 -0
  263. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb.h +87 -55
  264. data/src/core/ext/upb-gen/src/proto/grpc/gcp/handshaker.upb_minitable.c +23 -21
  265. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.c +80 -0
  266. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/channelz.upbdefs.h +47 -0
  267. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.c +129 -0
  268. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/service.upbdefs.h +72 -0
  269. data/src/core/filter/auth/auth_filters.h +7 -1
  270. data/src/core/filter/auth/client_auth_filter.cc +2 -2
  271. data/src/core/filter/auth/server_auth_filter.cc +5 -5
  272. data/src/core/filter/blackboard.h +2 -2
  273. data/src/core/filter/filter_args.h +40 -2
  274. data/src/core/handshaker/endpoint_info/endpoint_info_handshaker.cc +2 -2
  275. data/src/core/handshaker/handshaker.cc +8 -8
  276. data/src/core/handshaker/handshaker.h +2 -2
  277. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +5 -5
  278. data/src/core/handshaker/http_connect/http_proxy_mapper.cc +12 -12
  279. data/src/core/handshaker/http_connect/http_proxy_mapper.h +1 -1
  280. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.cc +1 -1
  281. data/src/core/handshaker/http_connect/xds_http_proxy_mapper.h +1 -1
  282. data/src/core/handshaker/proxy_mapper.h +1 -1
  283. data/src/core/handshaker/proxy_mapper_registry.h +1 -1
  284. data/src/core/handshaker/security/legacy_secure_endpoint.cc +6 -6
  285. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +38 -15
  286. data/src/core/handshaker/security/secure_endpoint.cc +31 -11
  287. data/src/core/handshaker/security/security_handshaker.cc +11 -8
  288. data/src/core/handshaker/security/security_handshaker.h +1 -1
  289. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +6 -6
  290. data/src/core/lib/address_utils/parse_address.cc +5 -5
  291. data/src/core/lib/address_utils/parse_address.h +2 -2
  292. data/src/core/lib/address_utils/sockaddr_utils.cc +4 -4
  293. data/src/core/lib/address_utils/sockaddr_utils.h +1 -1
  294. data/src/core/lib/channel/channel_args.cc +1 -1
  295. data/src/core/lib/channel/channel_args.h +2 -2
  296. data/src/core/lib/channel/channel_stack.cc +29 -25
  297. data/src/core/lib/channel/channel_stack.h +8 -3
  298. data/src/core/lib/channel/channel_stack_builder.cc +8 -4
  299. data/src/core/lib/channel/channel_stack_builder.h +10 -9
  300. data/src/core/lib/channel/channel_stack_builder_impl.cc +8 -13
  301. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -1
  302. data/src/core/lib/channel/connected_channel.cc +4 -4
  303. data/src/core/lib/channel/promise_based_filter.cc +132 -72
  304. data/src/core/lib/channel/promise_based_filter.h +39 -23
  305. data/src/core/lib/compression/compression_internal.cc +6 -6
  306. data/src/core/lib/compression/compression_internal.h +1 -1
  307. data/src/core/lib/compression/message_compress.cc +8 -8
  308. data/src/core/lib/debug/trace.cc +2 -5
  309. data/src/core/lib/debug/trace.h +10 -0
  310. data/src/core/lib/debug/trace_flags.cc +2 -2
  311. data/src/core/lib/debug/trace_flags.h +1 -1
  312. data/src/core/lib/event_engine/ares_resolver.cc +30 -28
  313. data/src/core/lib/event_engine/ares_resolver.h +4 -4
  314. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +3 -3
  315. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +2 -2
  316. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +1 -1
  317. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.cc +4 -4
  318. data/src/core/lib/event_engine/cf_engine/dns_service_resolver.h +3 -3
  319. data/src/core/lib/event_engine/channel_args_endpoint_config.h +1 -1
  320. data/src/core/lib/event_engine/default_event_engine.cc +1 -1
  321. data/src/core/lib/event_engine/event_engine.cc +1 -1
  322. data/src/core/lib/event_engine/extensions/channelz.h +3 -3
  323. data/src/core/lib/event_engine/extensions/chaotic_good_extension.h +1 -1
  324. data/src/core/lib/event_engine/extensions/supports_fd.h +5 -5
  325. data/src/core/lib/event_engine/extensions/tcp_trace.h +8 -1
  326. data/src/core/lib/event_engine/grpc_polled_fd.h +1 -1
  327. data/src/core/lib/event_engine/memory_allocator_factory.h +1 -1
  328. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -12
  329. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +5 -5
  330. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -15
  331. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +3 -3
  332. data/src/core/lib/event_engine/posix_engine/event_poller.h +2 -2
  333. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +2 -2
  334. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +1 -1
  335. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.h +1 -1
  336. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +4 -4
  337. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +1 -1
  338. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +3 -3
  339. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +1 -1
  340. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.cc +3 -3
  341. data/src/core/lib/event_engine/posix_engine/native_posix_dns_resolver.h +1 -1
  342. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +28 -27
  343. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +17 -17
  344. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +175 -177
  345. data/src/core/lib/event_engine/posix_engine/posix_engine.h +40 -61
  346. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +11 -7
  347. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +4 -4
  348. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +9 -9
  349. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +1 -1
  350. data/src/core/lib/event_engine/posix_engine/posix_interface.h +2 -2
  351. data/src/core/lib/event_engine/posix_engine/posix_interface_posix.cc +5 -5
  352. data/src/core/lib/event_engine/posix_engine/posix_write_event_sink.h +1 -1
  353. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1 -1
  354. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  355. data/src/core/lib/event_engine/posix_engine/timer.h +1 -1
  356. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +4 -4
  357. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  358. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +2 -2
  359. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +2 -2
  360. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +1 -1
  361. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +2 -2
  362. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +1 -1
  363. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +2 -2
  364. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +1 -1
  365. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +2 -2
  366. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +1 -1
  367. data/src/core/lib/event_engine/ref_counted_dns_resolver_interface.h +1 -1
  368. data/src/core/lib/event_engine/resolved_address.cc +3 -3
  369. data/src/core/lib/event_engine/shim.cc +8 -11
  370. data/src/core/lib/event_engine/shim.h +2 -1
  371. data/src/core/lib/event_engine/slice.cc +2 -2
  372. data/src/core/lib/event_engine/tcp_socket_utils.cc +15 -15
  373. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  374. data/src/core/lib/event_engine/thread_pool/thread_count.h +1 -1
  375. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +11 -11
  376. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +3 -3
  377. data/src/core/lib/event_engine/utils.cc +3 -3
  378. data/src/core/lib/event_engine/utils.h +1 -1
  379. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +32 -32
  380. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.h +2 -2
  381. data/src/core/lib/event_engine/windows/iocp.cc +11 -11
  382. data/src/core/lib/event_engine/windows/iocp.h +1 -1
  383. data/src/core/lib/event_engine/windows/native_windows_dns_resolver.cc +5 -2
  384. data/src/core/lib/event_engine/windows/win_socket.cc +7 -7
  385. data/src/core/lib/event_engine/windows/win_socket.h +2 -2
  386. data/src/core/lib/event_engine/windows/windows_endpoint.cc +16 -16
  387. data/src/core/lib/event_engine/windows/windows_engine.cc +20 -18
  388. data/src/core/lib/event_engine/windows/windows_engine.h +3 -3
  389. data/src/core/lib/event_engine/windows/windows_listener.cc +10 -10
  390. data/src/core/lib/event_engine/windows/windows_listener.h +2 -2
  391. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +2 -2
  392. data/src/core/lib/experiments/config.cc +4 -4
  393. data/src/core/lib/experiments/experiments.cc +255 -42
  394. data/src/core/lib/experiments/experiments.h +105 -21
  395. data/src/core/lib/iomgr/buffer_list.cc +1 -1
  396. data/src/core/lib/iomgr/call_combiner.cc +4 -4
  397. data/src/core/lib/iomgr/call_combiner.h +2 -2
  398. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  399. data/src/core/lib/iomgr/closure.h +2 -2
  400. data/src/core/lib/iomgr/combiner.cc +2 -2
  401. data/src/core/lib/iomgr/endpoint.h +1 -1
  402. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -7
  403. data/src/core/lib/iomgr/endpoint_pair_posix.cc +6 -6
  404. data/src/core/lib/iomgr/endpoint_pair_windows.cc +16 -15
  405. data/src/core/lib/iomgr/error.cc +1 -1
  406. data/src/core/lib/iomgr/error.h +2 -2
  407. data/src/core/lib/iomgr/error_cfstream.cc +1 -1
  408. data/src/core/lib/iomgr/ev_apple.cc +1 -1
  409. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -19
  410. data/src/core/lib/iomgr/ev_poll_posix.cc +14 -14
  411. data/src/core/lib/iomgr/ev_posix.cc +3 -3
  412. data/src/core/lib/iomgr/event_engine_shims/closure.cc +3 -3
  413. data/src/core/lib/iomgr/event_engine_shims/closure.h +1 -1
  414. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +10 -9
  415. data/src/core/lib/iomgr/event_engine_shims/endpoint.h +1 -1
  416. data/src/core/lib/iomgr/event_engine_shims/tcp_client.cc +2 -2
  417. data/src/core/lib/iomgr/exec_ctx.cc +3 -3
  418. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  419. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  420. data/src/core/lib/iomgr/internal_errqueue.cc +1 -1
  421. data/src/core/lib/iomgr/iocp_windows.cc +9 -9
  422. data/src/core/lib/iomgr/iomgr.cc +1 -1
  423. data/src/core/lib/iomgr/iomgr_windows.cc +3 -3
  424. data/src/core/lib/iomgr/lockfree_event.cc +3 -3
  425. data/src/core/lib/iomgr/polling_entity.cc +4 -4
  426. data/src/core/lib/iomgr/resolve_address.cc +1 -1
  427. data/src/core/lib/iomgr/resolve_address.h +2 -2
  428. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -4
  429. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  430. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +1 -1
  431. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -4
  432. data/src/core/lib/iomgr/socket_windows.cc +6 -6
  433. data/src/core/lib/iomgr/tcp_client_cfstream.cc +1 -1
  434. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -7
  435. data/src/core/lib/iomgr/tcp_client_windows.cc +4 -4
  436. data/src/core/lib/iomgr/tcp_posix.cc +47 -47
  437. data/src/core/lib/iomgr/tcp_server.cc +5 -0
  438. data/src/core/lib/iomgr/tcp_server.h +7 -0
  439. data/src/core/lib/iomgr/tcp_server_posix.cc +62 -31
  440. data/src/core/lib/iomgr/tcp_server_utils_posix.h +4 -1
  441. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -7
  442. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -4
  443. data/src/core/lib/iomgr/tcp_server_windows.cc +70 -31
  444. data/src/core/lib/iomgr/tcp_windows.cc +8 -8
  445. data/src/core/lib/iomgr/timer_generic.cc +5 -5
  446. data/src/core/lib/iomgr/timer_manager.cc +3 -3
  447. data/src/core/lib/iomgr/unix_sockets_posix.cc +3 -3
  448. data/src/core/lib/iomgr/unix_sockets_posix.h +1 -1
  449. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +2 -2
  450. data/src/core/lib/iomgr/vsock.cc +1 -1
  451. data/src/core/lib/iomgr/vsock.h +1 -1
  452. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +1 -1
  453. data/src/core/lib/promise/activity.cc +3 -3
  454. data/src/core/lib/promise/activity.h +11 -10
  455. data/src/core/lib/promise/all_ok.h +3 -3
  456. data/src/core/lib/promise/arena_promise.h +47 -6
  457. data/src/core/lib/promise/context.h +3 -3
  458. data/src/core/lib/promise/detail/join_state.h +10 -10
  459. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  460. data/src/core/lib/promise/detail/promise_like.h +1 -1
  461. data/src/core/lib/promise/detail/seq_state.h +16 -16
  462. data/src/core/lib/promise/detail/status.h +2 -2
  463. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +1 -1
  464. data/src/core/lib/promise/for_each.h +8 -8
  465. data/src/core/lib/promise/if.h +1 -1
  466. data/src/core/lib/promise/inter_activity_latch.h +3 -3
  467. data/src/core/lib/promise/inter_activity_mutex.h +1 -1
  468. data/src/core/lib/promise/interceptor_list.h +5 -5
  469. data/src/core/lib/promise/latch.h +9 -9
  470. data/src/core/lib/promise/loop.h +2 -2
  471. data/src/core/lib/promise/map.h +2 -2
  472. data/src/core/lib/promise/mpsc.cc +31 -30
  473. data/src/core/lib/promise/mpsc.h +2 -2
  474. data/src/core/lib/promise/observable.h +6 -6
  475. data/src/core/lib/promise/party.cc +43 -30
  476. data/src/core/lib/promise/party.h +27 -23
  477. data/src/core/lib/promise/pipe.h +31 -17
  478. data/src/core/lib/promise/poll.h +6 -5
  479. data/src/core/lib/promise/promise.h +2 -4
  480. data/src/core/lib/promise/sleep.cc +3 -1
  481. data/src/core/lib/promise/sleep.h +1 -1
  482. data/src/core/lib/promise/status_flag.h +8 -8
  483. data/src/core/lib/promise/try_join.h +5 -5
  484. data/src/core/lib/promise/try_seq.h +5 -5
  485. data/src/core/lib/promise/wait_set.h +2 -2
  486. data/src/core/lib/resource_quota/api.cc +1 -1
  487. data/src/core/lib/resource_quota/arena.cc +1 -1
  488. data/src/core/lib/resource_quota/arena.h +15 -2
  489. data/src/core/lib/resource_quota/connection_quota.cc +9 -7
  490. data/src/core/lib/resource_quota/connection_quota.h +1 -1
  491. data/src/core/lib/resource_quota/memory_quota.cc +48 -27
  492. data/src/core/lib/resource_quota/memory_quota.h +56 -20
  493. data/src/core/lib/resource_quota/periodic_update.h +1 -1
  494. data/src/core/lib/resource_quota/resource_quota.cc +8 -0
  495. data/src/core/lib/resource_quota/resource_quota.h +2 -1
  496. data/src/core/lib/resource_quota/stream_quota.cc +22 -0
  497. data/src/core/lib/resource_quota/stream_quota.h +31 -0
  498. data/src/core/lib/resource_quota/telemetry.h +55 -0
  499. data/src/core/lib/resource_quota/thread_quota.cc +2 -2
  500. data/src/core/lib/resource_quota/thread_quota.h +1 -1
  501. data/src/core/lib/resource_tracker/resource_tracker.cc +33 -0
  502. data/src/core/lib/resource_tracker/resource_tracker.h +46 -0
  503. data/src/core/lib/security/authorization/audit_logging.cc +7 -7
  504. data/src/core/lib/security/authorization/audit_logging.h +1 -1
  505. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  506. data/src/core/lib/security/authorization/evaluate_args.cc +5 -5
  507. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  508. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +2 -2
  509. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -3
  510. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +4 -1
  511. data/src/core/lib/security/authorization/matchers.cc +2 -2
  512. data/src/core/lib/security/authorization/stdout_logger.cc +3 -3
  513. data/src/core/lib/slice/percent_encoding.cc +1 -1
  514. data/src/core/lib/slice/slice.cc +1 -1
  515. data/src/core/lib/slice/slice.h +2 -2
  516. data/src/core/lib/slice/slice_buffer.cc +1 -1
  517. data/src/core/lib/slice/slice_internal.h +1 -1
  518. data/src/core/lib/surface/byte_buffer_reader.cc +2 -2
  519. data/src/core/lib/surface/call.cc +58 -28
  520. data/src/core/lib/surface/call.h +13 -6
  521. data/src/core/lib/surface/call_log_batch.cc +2 -2
  522. data/src/core/lib/surface/call_utils.cc +7 -7
  523. data/src/core/lib/surface/call_utils.h +85 -20
  524. data/src/core/lib/surface/channel.cc +6 -5
  525. data/src/core/lib/surface/channel.h +13 -3
  526. data/src/core/lib/surface/channel_create.cc +12 -8
  527. data/src/core/lib/surface/channel_create.h +1 -1
  528. data/src/core/lib/surface/channel_init.cc +84 -27
  529. data/src/core/lib/surface/channel_init.h +30 -13
  530. data/src/core/lib/surface/completion_queue.cc +21 -20
  531. data/src/core/lib/surface/completion_queue_factory.cc +7 -7
  532. data/src/core/lib/surface/connection_context.h +45 -2
  533. data/src/core/lib/surface/filter_stack_call.cc +25 -31
  534. data/src/core/lib/surface/filter_stack_call.h +6 -7
  535. data/src/core/lib/surface/init.cc +4 -4
  536. data/src/core/lib/surface/lame_client.cc +2 -2
  537. data/src/core/lib/surface/lame_client.h +3 -3
  538. data/src/core/lib/surface/legacy_channel.cc +10 -10
  539. data/src/core/lib/surface/legacy_channel.h +1 -1
  540. data/src/core/lib/surface/validate_metadata.cc +2 -2
  541. data/src/core/lib/surface/validate_metadata.h +3 -3
  542. data/src/core/lib/surface/version.cc +2 -2
  543. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  544. data/src/core/lib/transport/bdp_estimator.h +5 -5
  545. data/src/core/lib/transport/connectivity_state.cc +1 -1
  546. data/src/core/lib/transport/connectivity_state.h +2 -2
  547. data/src/core/lib/transport/error_utils.h +1 -1
  548. data/src/core/lib/transport/promise_endpoint.cc +4 -4
  549. data/src/core/lib/transport/promise_endpoint.h +11 -11
  550. data/src/core/lib/transport/timeout_encoding.cc +4 -4
  551. data/src/core/lib/transport/transport.cc +3 -3
  552. data/src/core/lib/transport/transport.h +62 -4
  553. data/src/core/lib/transport/transport_framing_endpoint_extension.h +1 -1
  554. data/src/core/lib/transport/transport_op_string.cc +2 -2
  555. data/src/core/load_balancing/address_filtering.cc +1 -1
  556. data/src/core/load_balancing/address_filtering.h +2 -2
  557. data/src/core/load_balancing/backend_metric_parser.cc +1 -1
  558. data/src/core/load_balancing/backend_metric_parser.h +1 -1
  559. data/src/core/load_balancing/child_policy_handler.cc +8 -8
  560. data/src/core/load_balancing/child_policy_handler.h +2 -2
  561. data/src/core/load_balancing/delegating_helper.h +2 -2
  562. data/src/core/load_balancing/endpoint_list.cc +6 -6
  563. data/src/core/load_balancing/endpoint_list.h +2 -2
  564. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +7 -5
  565. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +5 -1
  566. data/src/core/load_balancing/grpclb/grpclb.cc +37 -48
  567. data/src/core/load_balancing/grpclb/grpclb_client_stats.h +2 -2
  568. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  569. data/src/core/load_balancing/grpclb/load_balancer_api.h +1 -1
  570. data/src/core/load_balancing/health_check_client.cc +13 -9
  571. data/src/core/load_balancing/health_check_client_internal.h +5 -5
  572. data/src/core/load_balancing/lb_policy.h +11 -8
  573. data/src/core/load_balancing/lb_policy_factory.h +2 -2
  574. data/src/core/load_balancing/lb_policy_registry.cc +3 -3
  575. data/src/core/load_balancing/lb_policy_registry.h +2 -2
  576. data/src/core/load_balancing/oob_backend_metric.cc +11 -7
  577. data/src/core/load_balancing/oob_backend_metric_internal.h +4 -4
  578. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +9 -17
  579. data/src/core/load_balancing/pick_first/pick_first.cc +62 -32
  580. data/src/core/load_balancing/priority/priority.cc +29 -30
  581. data/src/core/load_balancing/ring_hash/ring_hash.cc +11 -11
  582. data/src/core/load_balancing/rls/rls.cc +23 -23
  583. data/src/core/load_balancing/round_robin/round_robin.cc +16 -16
  584. data/src/core/load_balancing/subchannel_interface.h +2 -2
  585. data/src/core/load_balancing/weighted_round_robin/static_stride_scheduler.cc +3 -3
  586. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +42 -41
  587. data/src/core/load_balancing/weighted_target/weighted_target.cc +14 -14
  588. data/src/core/load_balancing/xds/cds.cc +81 -37
  589. data/src/core/load_balancing/xds/xds_cluster_impl.cc +24 -41
  590. data/src/core/load_balancing/xds/xds_cluster_manager.cc +6 -6
  591. data/src/core/load_balancing/xds/xds_override_host.cc +14 -14
  592. data/src/core/load_balancing/xds/xds_override_host.h +1 -1
  593. data/src/core/load_balancing/xds/xds_wrr_locality.cc +5 -5
  594. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +8 -8
  595. data/src/core/resolver/dns/c_ares/dns_resolver_ares.h +1 -1
  596. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -1
  597. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  598. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +35 -35
  599. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +16 -16
  600. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -2
  601. data/src/core/resolver/dns/dns_resolver_plugin.cc +8 -5
  602. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +10 -10
  603. data/src/core/resolver/dns/event_engine/event_engine_client_channel_resolver.h +1 -1
  604. data/src/core/resolver/dns/event_engine/service_config_helper.cc +2 -2
  605. data/src/core/resolver/dns/native/dns_resolver.cc +7 -7
  606. data/src/core/resolver/endpoint_addresses.cc +6 -6
  607. data/src/core/resolver/endpoint_addresses.h +4 -1
  608. data/src/core/resolver/fake/fake_resolver.cc +3 -3
  609. data/src/core/resolver/fake/fake_resolver.h +3 -3
  610. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +46 -59
  611. data/src/core/resolver/polling_resolver.cc +8 -8
  612. data/src/core/resolver/polling_resolver.h +1 -1
  613. data/src/core/resolver/resolver.h +2 -2
  614. data/src/core/resolver/resolver_factory.h +2 -2
  615. data/src/core/resolver/resolver_registry.cc +5 -4
  616. data/src/core/resolver/resolver_registry.h +1 -1
  617. data/src/core/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  618. data/src/core/resolver/xds/xds_config.cc +1 -1
  619. data/src/core/resolver/xds/xds_config.h +3 -3
  620. data/src/core/resolver/xds/xds_dependency_manager.cc +7 -7
  621. data/src/core/resolver/xds/xds_dependency_manager.h +3 -3
  622. data/src/core/resolver/xds/xds_resolver.cc +25 -22
  623. data/src/core/resolver/xds/xds_resolver_attributes.h +1 -1
  624. data/src/core/server/add_port.cc +2 -2
  625. data/src/core/server/server.cc +47 -43
  626. data/src/core/server/server.h +8 -7
  627. data/src/core/server/server_call_tracer_filter.cc +1 -1
  628. data/src/core/server/server_call_tracer_filter.h +9 -5
  629. data/src/core/server/server_config_selector.h +2 -2
  630. data/src/core/server/server_config_selector_filter.cc +5 -5
  631. data/src/core/server/xds_channel_stack_modifier.cc +3 -2
  632. data/src/core/server/xds_channel_stack_modifier.h +1 -1
  633. data/src/core/server/xds_server_config_fetcher.cc +19 -18
  634. data/src/core/service_config/service_config.h +1 -1
  635. data/src/core/service_config/service_config_channel_arg_filter.h +4 -1
  636. data/src/core/service_config/service_config_impl.cc +3 -3
  637. data/src/core/service_config/service_config_impl.h +4 -4
  638. data/src/core/service_config/service_config_parser.h +1 -1
  639. data/src/core/telemetry/call_tracer.cc +39 -49
  640. data/src/core/telemetry/call_tracer.h +201 -24
  641. data/src/core/telemetry/default_tcp_tracer.h +3 -3
  642. data/src/core/telemetry/histogram.h +205 -0
  643. data/src/core/telemetry/instrument.cc +999 -0
  644. data/src/core/telemetry/instrument.h +1105 -0
  645. data/src/core/telemetry/metrics.cc +15 -5
  646. data/src/core/telemetry/metrics.h +36 -5
  647. data/src/core/telemetry/stats.h +2 -2
  648. data/src/core/telemetry/stats_data.cc +1 -20
  649. data/src/core/telemetry/stats_data.h +2 -21
  650. data/src/core/transport/auth_context.cc +3 -3
  651. data/src/core/transport/auth_context.h +2 -1
  652. data/src/core/transport/auth_context_comparator_registry.h +1 -1
  653. data/src/core/tsi/alts/crypt/aes_gcm.cc +1 -1
  654. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +2 -2
  655. data/src/core/tsi/alts/frame_protector/frame_handler.cc +1 -1
  656. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +81 -48
  657. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -0
  658. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +3 -3
  659. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +46 -36
  660. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -4
  661. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +1 -1
  662. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +4 -4
  663. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +11 -3
  664. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +10 -0
  665. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +16 -8
  666. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +3 -0
  667. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +18 -5
  668. data/src/core/tsi/fake_transport_security.cc +6 -5
  669. data/src/core/tsi/local_transport_security.cc +1 -1
  670. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  671. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +1 -1
  672. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +10 -10
  673. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -4
  674. data/src/core/tsi/ssl_transport_security.cc +30 -30
  675. data/src/core/tsi/ssl_transport_security.h +1 -1
  676. data/src/core/tsi/ssl_transport_security_utils.cc +10 -10
  677. data/src/core/tsi/ssl_transport_security_utils.h +2 -2
  678. data/src/core/tsi/transport_security_grpc.cc +8 -0
  679. data/src/core/tsi/transport_security_grpc.h +15 -0
  680. data/src/core/util/alloc.cc +1 -1
  681. data/src/core/util/backoff.h +1 -1
  682. data/src/core/util/chunked_vector.h +4 -4
  683. data/src/core/util/crash.h +1 -1
  684. data/src/core/util/dual_ref_counted.h +2 -2
  685. data/src/core/util/event_log.cc +2 -2
  686. data/src/core/util/event_log.h +3 -3
  687. data/src/core/util/gcp_metadata_query.cc +7 -7
  688. data/src/core/util/gcp_metadata_query.h +2 -2
  689. data/src/core/util/glob.cc +2 -0
  690. data/src/core/util/grpc_check.cc +24 -0
  691. data/src/core/util/grpc_check.h +103 -0
  692. data/src/core/util/grpc_if_nametoindex_posix.cc +1 -1
  693. data/src/core/util/grpc_if_nametoindex_unsupported.cc +1 -1
  694. data/src/core/util/http_client/format_request.cc +1 -1
  695. data/src/core/util/http_client/httpcli.cc +6 -6
  696. data/src/core/util/http_client/httpcli.h +4 -4
  697. data/src/core/util/http_client/httpcli_security_connector.cc +4 -4
  698. data/src/core/util/http_client/parser.cc +4 -4
  699. data/src/core/util/json/json_channel_args.h +1 -1
  700. data/src/core/util/json/json_object_loader.h +6 -6
  701. data/src/core/util/json/json_reader.cc +2 -2
  702. data/src/core/util/json/json_reader.h +1 -1
  703. data/src/core/util/json/json_util.h +3 -3
  704. data/src/core/util/json/json_writer.cc +1 -1
  705. data/src/core/util/latent_see.cc +45 -24
  706. data/src/core/util/latent_see.h +199 -28
  707. data/src/core/util/linux/cpu.cc +1 -1
  708. data/src/core/util/load_file.cc +1 -1
  709. data/src/core/util/load_file.h +1 -1
  710. data/src/core/util/log.cc +3 -3
  711. data/src/core/util/lru_cache.h +4 -4
  712. data/src/core/util/matchers.h +1 -1
  713. data/src/core/util/memory_usage.h +17 -1
  714. data/src/core/util/mpscq.h +1 -1
  715. data/src/core/util/notification.h +1 -1
  716. data/src/core/util/posix/cpu.cc +1 -1
  717. data/src/core/util/posix/directory_reader.cc +3 -2
  718. data/src/core/util/posix/stat.cc +2 -2
  719. data/src/core/util/posix/sync.cc +24 -24
  720. data/src/core/util/posix/thd.cc +2 -2
  721. data/src/core/util/posix/tmpfile.cc +2 -2
  722. data/src/core/util/postmortem_emit.cc +52 -0
  723. data/src/core/util/postmortem_emit.h +30 -0
  724. data/src/core/util/ref_counted.h +2 -2
  725. data/src/core/util/ref_counted_ptr.h +6 -1
  726. data/src/core/util/ref_counted_string.h +1 -1
  727. data/src/core/util/single_set_ptr.h +3 -1
  728. data/src/core/util/status_helper.cc +8 -8
  729. data/src/core/util/status_helper.h +1 -1
  730. data/src/core/util/string.cc +2 -2
  731. data/src/core/util/sync_abseil.cc +1 -1
  732. data/src/core/util/table.h +1 -1
  733. data/src/core/util/time.cc +1 -1
  734. data/src/core/util/time_precise.cc +1 -1
  735. data/src/core/util/trie_lookup.h +170 -0
  736. data/src/core/util/unique_ptr_with_bitset.h +5 -5
  737. data/src/core/util/unique_type_name.h +1 -1
  738. data/src/core/util/upb_utils.h +6 -1
  739. data/src/core/util/validation_errors.cc +2 -2
  740. data/src/core/util/validation_errors.h +2 -3
  741. data/src/core/util/wait_for_single_owner.h +2 -2
  742. data/src/core/util/windows/directory_reader.cc +1 -1
  743. data/src/core/util/windows/stat.cc +2 -2
  744. data/src/core/util/windows/thd.cc +2 -2
  745. data/src/core/util/windows/time.cc +1 -1
  746. data/src/core/util/work_serializer.cc +3 -3
  747. data/src/core/util/work_serializer.h +2 -2
  748. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  749. data/src/core/xds/grpc/certificate_provider_store.h +2 -2
  750. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +3 -3
  751. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +1 -1
  752. data/src/core/xds/grpc/xds_audit_logger_registry.cc +3 -3
  753. data/src/core/xds/grpc/xds_audit_logger_registry.h +1 -1
  754. data/src/core/xds/grpc/xds_bootstrap_grpc.cc +7 -7
  755. data/src/core/xds/grpc/xds_bootstrap_grpc.h +8 -3
  756. data/src/core/xds/grpc/xds_certificate_provider.cc +4 -4
  757. data/src/core/xds/grpc/xds_certificate_provider.h +2 -2
  758. data/src/core/xds/grpc/xds_client_grpc.cc +39 -20
  759. data/src/core/xds/grpc/xds_client_grpc.h +6 -3
  760. data/src/core/xds/grpc/xds_cluster.cc +2 -2
  761. data/src/core/xds/grpc/xds_cluster.h +1 -1
  762. data/src/core/xds/grpc/xds_cluster_parser.cc +7 -7
  763. data/src/core/xds/grpc/xds_cluster_parser.h +1 -1
  764. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +4 -4
  765. data/src/core/xds/grpc/xds_cluster_specifier_plugin.h +1 -1
  766. data/src/core/xds/grpc/xds_common_types.cc +1 -1
  767. data/src/core/xds/grpc/xds_common_types.h +1 -1
  768. data/src/core/xds/grpc/xds_common_types_parser.cc +5 -5
  769. data/src/core/xds/grpc/xds_endpoint.h +2 -2
  770. data/src/core/xds/grpc/xds_endpoint_parser.cc +7 -7
  771. data/src/core/xds/grpc/xds_endpoint_parser.h +1 -1
  772. data/src/core/xds/grpc/xds_health_status.cc +1 -1
  773. data/src/core/xds/grpc/xds_health_status.h +1 -1
  774. data/src/core/xds/grpc/xds_http_fault_filter.cc +4 -4
  775. data/src/core/xds/grpc/xds_http_fault_filter.h +2 -2
  776. data/src/core/xds/grpc/xds_http_filter.h +3 -3
  777. data/src/core/xds/grpc/xds_http_filter_registry.cc +4 -3
  778. data/src/core/xds/grpc/xds_http_filter_registry.h +2 -2
  779. data/src/core/xds/grpc/xds_http_gcp_authn_filter.cc +3 -3
  780. data/src/core/xds/grpc/xds_http_gcp_authn_filter.h +2 -2
  781. data/src/core/xds/grpc/xds_http_rbac_filter.cc +4 -4
  782. data/src/core/xds/grpc/xds_http_rbac_filter.h +2 -2
  783. data/src/core/xds/grpc/xds_http_stateful_session_filter.cc +3 -3
  784. data/src/core/xds/grpc/xds_http_stateful_session_filter.h +2 -2
  785. data/src/core/xds/grpc/xds_lb_policy_registry.cc +1 -1
  786. data/src/core/xds/grpc/xds_lb_policy_registry.h +1 -1
  787. data/src/core/xds/grpc/xds_listener.cc +2 -2
  788. data/src/core/xds/grpc/xds_listener_parser.cc +9 -9
  789. data/src/core/xds/grpc/xds_listener_parser.h +1 -1
  790. data/src/core/xds/grpc/xds_matcher.cc +277 -0
  791. data/src/core/xds/grpc/xds_matcher.h +432 -0
  792. data/src/core/xds/grpc/xds_matcher_action.cc +47 -0
  793. data/src/core/xds/grpc/xds_matcher_action.h +48 -0
  794. data/src/core/xds/grpc/xds_matcher_context.cc +29 -0
  795. data/src/core/xds/grpc/xds_matcher_context.h +46 -0
  796. data/src/core/xds/grpc/xds_matcher_input.cc +79 -0
  797. data/src/core/xds/grpc/xds_matcher_input.h +105 -0
  798. data/src/core/xds/grpc/xds_matcher_parse.cc +356 -0
  799. data/src/core/xds/grpc/xds_matcher_parse.h +39 -0
  800. data/src/core/xds/grpc/xds_metadata.cc +4 -3
  801. data/src/core/xds/grpc/xds_metadata.h +3 -3
  802. data/src/core/xds/grpc/xds_metadata_parser.cc +2 -2
  803. data/src/core/xds/grpc/xds_route_config.cc +3 -3
  804. data/src/core/xds/grpc/xds_route_config_parser.cc +14 -14
  805. data/src/core/xds/grpc/xds_route_config_parser.h +1 -1
  806. data/src/core/xds/grpc/xds_routing.cc +6 -6
  807. data/src/core/xds/grpc/xds_routing.h +2 -2
  808. data/src/core/xds/grpc/xds_server_grpc.cc +2 -2
  809. data/src/core/xds/grpc/xds_transport_grpc.cc +11 -11
  810. data/src/core/xds/grpc/xds_transport_grpc.h +2 -2
  811. data/src/core/xds/xds_client/lrs_client.cc +9 -9
  812. data/src/core/xds/xds_client/lrs_client.h +4 -4
  813. data/src/core/xds/xds_client/xds_api.h +1 -1
  814. data/src/core/xds/xds_client/xds_backend_metric_propagation.cc +1 -1
  815. data/src/core/xds/xds_client/xds_backend_metric_propagation.h +1 -1
  816. data/src/core/xds/xds_client/xds_client.cc +17 -17
  817. data/src/core/xds/xds_client/xds_client.h +5 -5
  818. data/src/core/xds/xds_client/xds_locality.h +2 -2
  819. data/src/core/xds/xds_client/xds_resource_type.h +2 -2
  820. data/src/core/xds/xds_client/xds_resource_type_impl.h +1 -1
  821. data/src/core/xds/xds_client/xds_transport.h +2 -2
  822. data/src/ruby/ext/grpc/extconf.rb +14 -12
  823. data/src/ruby/ext/grpc/rb_call.c +0 -1
  824. data/src/ruby/ext/grpc/rb_channel_args.c +0 -1
  825. data/src/ruby/ext/grpc/rb_channel_credentials.c +0 -1
  826. data/src/ruby/ext/grpc/rb_compression_options.c +0 -1
  827. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +2 -2
  828. data/src/ruby/ext/grpc/rb_server_credentials.c +0 -1
  829. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +0 -1
  830. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +0 -1
  831. data/src/ruby/lib/grpc/grpc.rb +7 -9
  832. data/src/ruby/lib/grpc/version.rb +1 -1
  833. data/src/ruby/spec/client_server_spec.rb +1 -1
  834. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  835. data/src/ruby/spec/generic/rpc_server_spec.rb +3 -4
  836. data/src/ruby/spec/spec_helper.rb +1 -1
  837. data/third_party/abseil-cpp/absl/container/internal/node_slot_policy.h +95 -0
  838. data/third_party/abseil-cpp/absl/container/node_hash_map.h +687 -0
  839. metadata +67 -8
@@ -0,0 +1,105 @@
1
+ //
2
+ //
3
+ // Copyright 2025 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
+ #ifndef GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
20
+ #define GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
21
+
22
+ #include <algorithm>
23
+ #include <cstdint>
24
+ #include <vector>
25
+
26
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
27
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
28
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
29
+ #include "src/core/util/grpc_check.h"
30
+ #include "absl/container/flat_hash_map.h"
31
+
32
+ namespace grpc_core {
33
+ namespace http2 {
34
+
35
+ constexpr chttp2::FlowControlAction::Urgency kNoActionNeeded =
36
+ chttp2::FlowControlAction::Urgency::NO_ACTION_NEEDED;
37
+ constexpr chttp2::FlowControlAction::Urgency kUpdateImmediately =
38
+ chttp2::FlowControlAction::Urgency::UPDATE_IMMEDIATELY;
39
+ constexpr int64_t kZero = 0;
40
+
41
+ #define GRPC_HTTP2_FLOW_CONTROL_HELPERS \
42
+ DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
43
+
44
+ // Function to update local settings based on FlowControlAction.
45
+ // This function does the settings related tasks equivalent to
46
+ // grpc_chttp2_act_on_flowctl_action in chttp2_transport.cc
47
+ inline void ActOnFlowControlActionSettings(
48
+ const chttp2::FlowControlAction& action, Http2Settings& local_settings,
49
+ const bool enable_preferred_rx_crypto_frame_advertisement) {
50
+ if (action.send_initial_window_update() != kNoActionNeeded) {
51
+ local_settings.SetInitialWindowSize(action.initial_window_size());
52
+ }
53
+ if (action.send_max_frame_size_update() != kNoActionNeeded) {
54
+ local_settings.SetMaxFrameSize(action.max_frame_size());
55
+ }
56
+ if (enable_preferred_rx_crypto_frame_advertisement &&
57
+ action.preferred_rx_crypto_frame_size_update() != kNoActionNeeded) {
58
+ local_settings.SetPreferredReceiveCryptoMessageSize(
59
+ action.preferred_rx_crypto_frame_size());
60
+ }
61
+ }
62
+
63
+ // RFC9113 : A sender MUST NOT allow a flow-control window to exceed ((2^31)-1)
64
+ // octets. If a sender receives a WINDOW_UPDATE that causes a flow-control
65
+ // window to exceed this maximum, it MUST terminate either the stream or the
66
+ // connection, as appropriate.
67
+ // While the return value is int64_t for compatibility with CHTTP2 flow control,
68
+ // we dont expect this value to exceed ((2^31)-1) i.e kMaxSize31Bit
69
+ inline int64_t GetStreamFlowControlTokens(
70
+ chttp2::StreamFlowControl& stream_flow_control,
71
+ const Http2Settings& peer_settings) {
72
+ GRPC_DCHECK(stream_flow_control.remote_window_delta() +
73
+ peer_settings.initial_window_size() <=
74
+ RFC9113::kMaxSize31Bit);
75
+ return std::max(kZero, stream_flow_control.remote_window_delta() +
76
+ peer_settings.initial_window_size());
77
+ }
78
+
79
+ inline uint32_t GetMaxPermittedDequeue(
80
+ chttp2::TransportFlowControl& transport_flow_control,
81
+ chttp2::StreamFlowControl& stream_flow_control, const size_t upper_limit,
82
+ const Http2Settings& peer_settings) {
83
+ const int64_t flow_control_tokens =
84
+ std::min(transport_flow_control.remote_window(),
85
+ GetStreamFlowControlTokens(stream_flow_control, peer_settings));
86
+ uint32_t max_dequeue = 0;
87
+ if (flow_control_tokens > 0) {
88
+ max_dequeue = static_cast<uint32_t>(
89
+ std::min({static_cast<size_t>(flow_control_tokens), upper_limit,
90
+ static_cast<size_t>(RFC9113::kMaxSize31Bit - 1)}));
91
+ }
92
+ GRPC_HTTP2_FLOW_CONTROL_HELPERS
93
+ << "GetFlowControlTokens flow_control_tokens = " << flow_control_tokens
94
+ << " upper_limit = " << upper_limit << " max_dequeue = " << max_dequeue;
95
+ return max_dequeue;
96
+ }
97
+
98
+ // TODO(tjagtap) [PH2][P4] : Ensure that the total transport flow control window
99
+ // or stream flow control window does not exceed the max permitted limit of
100
+ // 2^31-1
101
+
102
+ } // namespace http2
103
+ } // namespace grpc_core
104
+
105
+ #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FLOW_CONTROL_MANAGER_H
@@ -20,14 +20,18 @@
20
20
  #include <cstdint>
21
21
  #include <string>
22
22
  #include <utility>
23
+ #include <vector>
23
24
 
24
- #include "absl/log/check.h"
25
- #include "absl/status/status.h"
26
- #include "absl/strings/str_cat.h"
25
+ #include "src/core/call/message.h"
27
26
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
27
+ #include "src/core/lib/debug/trace_impl.h"
28
28
  #include "src/core/lib/slice/slice.h"
29
29
  #include "src/core/lib/slice/slice_buffer.h"
30
30
  #include "src/core/util/crash.h"
31
+ #include "src/core/util/grpc_check.h"
32
+ #include "src/core/util/memory_usage.h"
33
+ #include "absl/log/log.h"
34
+ #include "absl/strings/str_cat.h"
31
35
 
32
36
  // TODO(tjagtap) TODO(akshitpatel): [PH2][P3] : Write micro benchmarks for
33
37
  // framing code
@@ -38,6 +42,9 @@ using grpc_core::http2::ValueOrHttp2Status;
38
42
 
39
43
  namespace grpc_core {
40
44
 
45
+ #define GRPC_HTTP2_FRAME_DLOG \
46
+ DLOG_IF(INFO, GRPC_TRACE_FLAG_ENABLED(http2_ph2_transport))
47
+
41
48
  ///////////////////////////////////////////////////////////////////////////////
42
49
  // Settings Frame Validations
43
50
 
@@ -119,7 +126,7 @@ uint16_t Read2b(const uint8_t* input) {
119
126
  }
120
127
 
121
128
  void Write3b(uint32_t x, uint8_t* output) {
122
- CHECK_LT(x, 16777216u);
129
+ GRPC_CHECK_LT(x, 16777216u);
123
130
  output[0] = static_cast<uint8_t>(x >> 16);
124
131
  output[1] = static_cast<uint8_t>(x >> 8);
125
132
  output[2] = static_cast<uint8_t>(x);
@@ -206,11 +213,18 @@ class SerializeExtraBytesRequired {
206
213
 
207
214
  class SerializeHeaderAndPayload {
208
215
  public:
209
- SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out)
216
+ SerializeHeaderAndPayload(size_t extra_bytes, SliceBuffer& out,
217
+ SerializeReturn& serialize_return)
210
218
  : out_(out),
211
- extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)) {}
219
+ extra_bytes_(MutableSlice::CreateUninitialized(extra_bytes)),
220
+ serialize_return_(serialize_return) {}
212
221
 
213
222
  void operator()(Http2DataFrame& frame) {
223
+ GRPC_HTTP2_FRAME_DLOG
224
+ << "SerializeHeaderAndPayload Http2DataFrame Type:0 { stream_id:"
225
+ << frame.stream_id << ", end_stream:" << frame.end_stream
226
+ << ", payload_length:" << frame.payload.Length()
227
+ << ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
214
228
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
215
229
  Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
216
230
  static_cast<uint8_t>(FrameType::kData),
@@ -219,9 +233,16 @@ class SerializeHeaderAndPayload {
219
233
  .Serialize(hdr.begin());
220
234
  out_.AppendIndexed(Slice(std::move(hdr)));
221
235
  out_.TakeAndAppend(frame.payload);
236
+ serialize_return_.should_reset_ping_clock = true;
222
237
  }
223
238
 
224
239
  void operator()(Http2HeaderFrame& frame) {
240
+ GRPC_HTTP2_FRAME_DLOG
241
+ << "SerializeHeaderAndPayload Http2HeaderFrame Type:1 { stream_id:"
242
+ << frame.stream_id << ", end_headers:" << frame.end_headers
243
+ << ", end_stream:" << frame.end_stream
244
+ << ", payload_length:" << frame.payload.Length()
245
+ << ", payload:" << MaybeTruncatePayload(frame.payload) << "}";
225
246
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
226
247
  Http2FrameHeader{
227
248
  static_cast<uint32_t>(frame.payload.Length()),
@@ -232,9 +253,17 @@ class SerializeHeaderAndPayload {
232
253
  .Serialize(hdr.begin());
233
254
  out_.AppendIndexed(Slice(std::move(hdr)));
234
255
  out_.TakeAndAppend(frame.payload);
256
+ serialize_return_.should_reset_ping_clock = true;
235
257
  }
236
258
 
237
259
  void operator()(Http2ContinuationFrame& frame) {
260
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2ContinuationFrame "
261
+ "Type:9 { stream_id:"
262
+ << frame.stream_id
263
+ << ", end_headers:" << frame.end_headers
264
+ << ", payload_length:" << frame.payload.Length()
265
+ << ", payload:" << MaybeTruncatePayload(frame.payload)
266
+ << "}";
238
267
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
239
268
  Http2FrameHeader{
240
269
  static_cast<uint32_t>(frame.payload.Length()),
@@ -244,9 +273,13 @@ class SerializeHeaderAndPayload {
244
273
  .Serialize(hdr.begin());
245
274
  out_.AppendIndexed(Slice(std::move(hdr)));
246
275
  out_.TakeAndAppend(frame.payload);
276
+ serialize_return_.should_reset_ping_clock = true;
247
277
  }
248
278
 
249
279
  void operator()(Http2RstStreamFrame& frame) {
280
+ GRPC_HTTP2_FRAME_DLOG
281
+ << "SerializeHeaderAndPayload Http2RstStreamFrame Type:3 { stream_id:"
282
+ << frame.stream_id << ", error_code:" << frame.error_code << "}";
250
283
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
251
284
  Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kRstStream), 0,
252
285
  frame.stream_id}
@@ -256,6 +289,10 @@ class SerializeHeaderAndPayload {
256
289
  }
257
290
 
258
291
  void operator()(Http2SettingsFrame& frame) {
292
+ GRPC_HTTP2_FRAME_DLOG
293
+ << "SerializeHeaderAndPayload Http2SettingsFrame Type:4 { ack:"
294
+ << frame.ack << ", length:" << frame.settings.size() << ", settings:["
295
+ << DebugStringSettings(frame.settings) << "] }";
259
296
  // Six bytes per setting (u16 id, u32 value)
260
297
  const size_t payload_size = 6 * frame.settings.size();
261
298
  auto hdr_and_payload =
@@ -274,6 +311,9 @@ class SerializeHeaderAndPayload {
274
311
  }
275
312
 
276
313
  void operator()(Http2PingFrame& frame) {
314
+ GRPC_HTTP2_FRAME_DLOG
315
+ << "SerializeHeaderAndPayload Http2PingFrame Type:6 { ack:" << frame.ack
316
+ << ", opaque:" << frame.opaque << "}";
277
317
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
278
318
  Http2FrameHeader{8, static_cast<uint8_t>(FrameType::kPing),
279
319
  MaybeFlag(frame.ack, kFlagAck), 0}
@@ -283,6 +323,10 @@ class SerializeHeaderAndPayload {
283
323
  }
284
324
 
285
325
  void operator()(Http2GoawayFrame& frame) {
326
+ GRPC_HTTP2_FRAME_DLOG
327
+ << "SerializeHeaderAndPayload Http2GoawayFrame Type:7 { last_stream_id:"
328
+ << frame.last_stream_id << ", error_code:" << frame.error_code
329
+ << ", debug_data:" << frame.debug_data.as_string_view() << "}";
286
330
  auto hdr_and_fixed_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 8);
287
331
  Http2FrameHeader{static_cast<uint32_t>(8 + frame.debug_data.length()),
288
332
  static_cast<uint8_t>(FrameType::kGoaway), 0, 0}
@@ -300,6 +344,10 @@ class SerializeHeaderAndPayload {
300
344
  }
301
345
 
302
346
  void operator()(Http2WindowUpdateFrame& frame) {
347
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2WindowUpdateFrame "
348
+ "Type:8 { stream_id:"
349
+ << frame.stream_id
350
+ << ", increment:" << frame.increment << "}";
303
351
  auto hdr_and_payload = extra_bytes_.TakeFirst(kFrameHeaderSize + 4);
304
352
  Http2FrameHeader{4, static_cast<uint8_t>(FrameType::kWindowUpdate), 0,
305
353
  frame.stream_id}
@@ -311,9 +359,13 @@ class SerializeHeaderAndPayload {
311
359
  }
312
360
  Write31bits(frame.increment, hdr_and_payload.begin() + kFrameHeaderSize);
313
361
  out_.AppendIndexed(Slice(std::move(hdr_and_payload)));
362
+ serialize_return_.should_reset_ping_clock = true;
314
363
  }
315
364
 
316
365
  void operator()(Http2SecurityFrame& frame) {
366
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2SecurityFrame "
367
+ "Type:200 { payload_length:"
368
+ << frame.payload.Length() << ", payload: redacted}";
317
369
  auto hdr = extra_bytes_.TakeFirst(kFrameHeaderSize);
318
370
  Http2FrameHeader{static_cast<uint32_t>(frame.payload.Length()),
319
371
  static_cast<uint8_t>(FrameType::kCustomSecurity), 0, 0}
@@ -324,11 +376,24 @@ class SerializeHeaderAndPayload {
324
376
 
325
377
  void operator()(Http2UnknownFrame&) { Crash("unreachable"); }
326
378
 
327
- void operator()(Http2EmptyFrame&) {}
379
+ void operator()(Http2EmptyFrame&) {
380
+ GRPC_HTTP2_FRAME_DLOG << "SerializeHeaderAndPayload Http2EmptyFrame {}";
381
+ }
328
382
 
329
383
  private:
384
+ std::string DebugStringSettings(
385
+ const std::vector<Http2SettingsFrame::Setting>& settings) {
386
+ std::string settings_str;
387
+ for (const auto& setting : settings) {
388
+ absl::StrAppend(&settings_str, " {id:", setting.id,
389
+ ", value:", setting.value, "}");
390
+ }
391
+ return settings_str;
392
+ }
393
+
330
394
  SliceBuffer& out_;
331
395
  MutableSlice extra_bytes_;
396
+ SerializeReturn& serialize_return_;
332
397
  };
333
398
 
334
399
  Http2Status StripPadding(const Http2FrameHeader& hdr, SliceBuffer& payload) {
@@ -382,6 +447,8 @@ ValueOrHttp2Status<Http2Frame> ParseDataFrame(const Http2FrameHeader& hdr,
382
447
  std::move(payload)});
383
448
  }
384
449
 
450
+ // This function MUST NOT return a Http2StreamError. Doing this will cause the
451
+ // HPACK state to be corrupted.
385
452
  ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
386
453
  SliceBuffer& payload) {
387
454
  if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
@@ -418,6 +485,8 @@ ValueOrHttp2Status<Http2Frame> ParseHeaderFrame(const Http2FrameHeader& hdr,
418
485
  ExtractFlag(hdr.flags, kFlagEndStream), std::move(payload)});
419
486
  }
420
487
 
488
+ // This function MUST NOT return a Http2StreamError. Doing this will cause the
489
+ // HPACK state to be corrupted.
421
490
  ValueOrHttp2Status<Http2Frame> ParseContinuationFrame(
422
491
  const Http2FrameHeader& hdr, SliceBuffer& payload) {
423
492
  if (GPR_UNLIKELY((hdr.stream_id % 2) == 0)) {
@@ -569,15 +638,14 @@ ValueOrHttp2Status<Http2Frame> ParseWindowUpdateFrame(
569
638
  payload.CopyToBuffer(buffer);
570
639
  const uint32_t window_size_increment = Read31bits(buffer);
571
640
  if (GPR_UNLIKELY(window_size_increment == 0)) {
572
- if (hdr.stream_id == 0) {
573
- return Http2Status::Http2ConnectionError(
574
- Http2ErrorCode::kProtocolError,
575
- absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
576
- } else {
577
- return Http2Status::Http2StreamError(
578
- Http2ErrorCode::kProtocolError,
579
- absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
580
- }
641
+ // According to RFC9113, if window_size_increment == 0, and (stream id != 0)
642
+ // the receiver MUST treat this as a stream error of type PROTOCOL_ERROR.
643
+ // However we will be treating this too as a connection error
644
+ // 1. To be consistent with CHTTP2 transport
645
+ // 2. To be less lenient as compared to the RFC9113 for security reasons.
646
+ return Http2Status::Http2ConnectionError(
647
+ Http2ErrorCode::kProtocolError,
648
+ absl::StrCat(RFC9113::kWindowSizeIncrement, hdr.ToString()));
581
649
  }
582
650
  return ValueOrHttp2Status<Http2Frame>(
583
651
  Http2WindowUpdateFrame{hdr.stream_id, window_size_increment});
@@ -642,23 +710,26 @@ std::string Http2FrameHeader::ToString() const {
642
710
  ", length=", length, "}");
643
711
  }
644
712
 
645
- void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
713
+ SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out) {
646
714
  size_t buffer_needed = 0;
715
+ SerializeReturn serialize_return{/*should_reset_ping_clock=*/false};
647
716
  for (auto& frame : frames) {
648
717
  // Bytes needed for framing
649
718
  buffer_needed += kFrameHeaderSize;
650
719
  // Bytes needed for frame payload
651
720
  buffer_needed += std::visit(SerializeExtraBytesRequired(), frame);
652
721
  }
653
- SerializeHeaderAndPayload serialize(buffer_needed, out);
722
+ SerializeHeaderAndPayload serialize(buffer_needed, out, serialize_return);
654
723
  for (auto& frame : frames) {
655
724
  std::visit(serialize, frame);
656
725
  }
726
+
727
+ return serialize_return;
657
728
  }
658
729
 
659
730
  http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
660
731
  const Http2FrameHeader& hdr, SliceBuffer payload) {
661
- CHECK(payload.Length() == hdr.length);
732
+ GRPC_CHECK(payload.Length() == hdr.length);
662
733
 
663
734
  switch (static_cast<FrameType>(hdr.type)) {
664
735
  case FrameType::kData:
@@ -688,9 +759,10 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
688
759
  }
689
760
  }
690
761
 
691
- http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
762
+ http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(
763
+ const uint32_t error_code) {
692
764
  if (GPR_UNLIKELY(error_code > http2::GetMaxHttp2ErrorCode())) {
693
- LOG(ERROR) << "Http2ErrorCodeFromRstFrameErrorCode: Invalid error code "
765
+ LOG(ERROR) << "FrameErrorCodeToHttp2ErrorCode: Invalid error code "
694
766
  "received from RST_STREAM frame: "
695
767
  << error_code;
696
768
  return http2::Http2ErrorCode::kInternalError;
@@ -698,30 +770,86 @@ http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code) {
698
770
  return static_cast<http2::Http2ErrorCode>(error_code);
699
771
  }
700
772
 
773
+ uint32_t Http2ErrorCodeToFrameErrorCode(
774
+ const http2::Http2ErrorCode error_code) {
775
+ GRPC_DCHECK_LE(static_cast<uint8_t>(error_code),
776
+ http2::GetMaxHttp2ErrorCode());
777
+ return static_cast<uint32_t>(error_code);
778
+ }
779
+
780
+ size_t GetFrameMemoryUsage(const Http2Frame& frame) {
781
+ return MemoryUsageOf(frame);
782
+ }
783
+
701
784
  ///////////////////////////////////////////////////////////////////////////////
702
785
  // GRPC Header
786
+ namespace {
787
+ ValueOrHttp2Status<uint32_t> ParseGrpcMessageFlags(const uint8_t flags) {
788
+ switch (flags) {
789
+ case kGrpcMessageHeaderNoFlags:
790
+ return 0u;
791
+ case kGrpcMessageHeaderWriteInternalCompress:
792
+ return GRPC_WRITE_INTERNAL_COMPRESS;
793
+ default:
794
+ LOG(ERROR) << "Invalid gRPC header flags: "
795
+ << static_cast<uint32_t>(flags);
796
+ return Http2Status::Http2StreamError(
797
+ Http2ErrorCode::kInternalError,
798
+ absl::StrCat("Invalid gRPC header flags: ", flags));
799
+ }
800
+ }
703
801
 
704
- GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload) {
705
- CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
802
+ uint8_t SerializeGrpcMessageFlags(const uint32_t flags) {
803
+ return (flags & GRPC_WRITE_INTERNAL_COMPRESS)
804
+ ? kGrpcMessageHeaderWriteInternalCompress
805
+ : kGrpcMessageHeaderNoFlags;
806
+ }
807
+ } // namespace
808
+
809
+ ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(SliceBuffer& payload) {
810
+ GRPC_CHECK_GE(payload.Length(), kGrpcHeaderSizeInBytes);
706
811
  uint8_t buffer[kGrpcHeaderSizeInBytes];
707
812
  payload.CopyFirstNBytesIntoBuffer(kGrpcHeaderSizeInBytes, buffer);
708
813
  GrpcMessageHeader header;
709
- header.flags = buffer[0];
814
+ ValueOrHttp2Status<uint32_t> message_flags = ParseGrpcMessageFlags(buffer[0]);
815
+ if (!message_flags.IsOk()) {
816
+ return message_flags.TakeStatus(std::move(message_flags));
817
+ }
818
+
819
+ header.flags = message_flags.value();
710
820
  header.length = Read4b(buffer + 1);
711
821
  return header;
712
822
  }
713
823
 
714
- void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
824
+ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint32_t flags,
715
825
  const uint32_t length) {
716
826
  uint8_t* frame_hdr = payload.AddTiny(kGrpcHeaderSizeInBytes);
717
- frame_hdr[0] = flags;
827
+ frame_hdr[0] = SerializeGrpcMessageFlags(flags);
718
828
  Write4b(length, frame_hdr + 1);
719
829
  }
720
830
 
721
831
  Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
722
832
  const bool incoming_header_in_progress,
723
833
  const uint32_t incoming_header_stream_id,
724
- Http2FrameHeader& current_frame_header) {
834
+ Http2FrameHeader& current_frame_header,
835
+ const uint32_t last_stream_id,
836
+ const bool is_client,
837
+ const bool is_first_settings_processed) {
838
+ if (GPR_UNLIKELY(!is_first_settings_processed)) {
839
+ // This check works only because we pause the read loop after reading the
840
+ // first SETTINGS frame.
841
+ const bool is_settings_frame =
842
+ (current_frame_header.type ==
843
+ static_cast<uint8_t>(FrameType::kSettings) &&
844
+ !ExtractFlag(current_frame_header.flags, kFlagAck));
845
+ if (GPR_UNLIKELY(!is_settings_frame)) {
846
+ return Http2Status::Http2ConnectionError(
847
+ Http2ErrorCode::kProtocolError,
848
+ std::string(is_client ? RFC9113::kFirstSettingsFrameClient
849
+ : RFC9113::kFirstSettingsFrameServer));
850
+ }
851
+ }
852
+
725
853
  if (GPR_UNLIKELY(current_frame_header.length > max_frame_size_setting)) {
726
854
  return Http2Status::Http2ConnectionError(
727
855
  Http2ErrorCode::kFrameSizeError,
@@ -738,8 +866,28 @@ Http2Status ValidateFrameHeader(const uint32_t max_frame_size_setting,
738
866
  Http2ErrorCode::kProtocolError,
739
867
  std::string(RFC9113::kAssemblerContiguousSequenceError));
740
868
  }
869
+ // If a frame is received with a stream id larger than the last stream id sent
870
+ // by the transport, it is a protocol error. This condition holds for clients
871
+ // as in gRPC only clients can initiate a stream. last_stream_id is the stream
872
+ // id of the last stream created by the transport. If no streams were created
873
+ // by the transport, last_stream_id is 0.
874
+ // TODO(akshitpatel) : [PH2][P3] : Revisit this for server.
875
+ if (is_client && current_frame_header.stream_id > last_stream_id) {
876
+ return Http2Status::Http2ConnectionError(
877
+ Http2ErrorCode::kProtocolError, std::string(RFC9113::kUnknownStreamId));
878
+ }
741
879
  // TODO(tjagtap) : [PH2][P2]:Consider validating MAX_CONCURRENT_STREAMS here
880
+ // for server.
742
881
  return Http2Status::Ok();
743
882
  }
744
883
 
884
+ std::string MaybeTruncatePayload(SliceBuffer& payload, const uint32_t length) {
885
+ if (payload.Length() <= length) {
886
+ return payload.JoinIntoString();
887
+ }
888
+ std::string result(length, '\0');
889
+ payload.CopyFirstNBytesIntoBuffer(length, result.data());
890
+ return absl::StrCat(result, "<clipped>");
891
+ }
892
+
745
893
  } // namespace grpc_core
@@ -22,16 +22,20 @@
22
22
  #include <variant>
23
23
  #include <vector>
24
24
 
25
- #include "absl/status/statusor.h"
26
- #include "absl/strings/string_view.h"
27
- #include "absl/types/span.h"
28
25
  #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
29
26
  #include "src/core/ext/transport/chttp2/transport/http2_status.h"
30
27
  #include "src/core/lib/slice/slice.h"
31
28
  #include "src/core/lib/slice/slice_buffer.h"
29
+ #include "absl/status/statusor.h"
30
+ #include "absl/strings/string_view.h"
31
+ #include "absl/types/span.h"
32
32
 
33
33
  namespace grpc_core {
34
34
 
35
+ // Prints the first `length` bytes of the payload. If the payload is longer than
36
+ // `length`, it appends "<clipped>" to the output.
37
+ std::string MaybeTruncatePayload(SliceBuffer& payload, uint32_t length = 15);
38
+
35
39
  ///////////////////////////////////////////////////////////////////////////////
36
40
  // Frame types
37
41
  //
@@ -224,6 +228,10 @@ struct Http2FrameHeader {
224
228
  ///////////////////////////////////////////////////////////////////////////////
225
229
  // Parsing & serialization
226
230
 
231
+ struct SerializeReturn {
232
+ bool should_reset_ping_clock;
233
+ };
234
+
227
235
  // Given a frame header and a payload, parse the payload into a frame and
228
236
  // return it.
229
237
  // If this function returns an error, that should be considered a connection
@@ -236,27 +244,34 @@ http2::ValueOrHttp2Status<Http2Frame> ParseFramePayload(
236
244
 
237
245
  // Serialize frame and append to out, leaves frames in an unknown state (may
238
246
  // move things out of frames)
239
- void Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
247
+ SerializeReturn Serialize(absl::Span<Http2Frame> frames, SliceBuffer& out);
248
+
249
+ http2::Http2ErrorCode FrameErrorCodeToHttp2ErrorCode(uint32_t error_code);
250
+ uint32_t Http2ErrorCodeToFrameErrorCode(http2::Http2ErrorCode error_code);
240
251
 
241
- http2::Http2ErrorCode Http2ErrorCodeFromRstFrameErrorCode(uint32_t error_code);
252
+ // Returns approximate memory usage of the frame.
253
+ size_t GetFrameMemoryUsage(const Http2Frame& frame);
242
254
 
243
255
  ///////////////////////////////////////////////////////////////////////////////
244
256
  // GRPC Header
245
257
 
246
258
  constexpr uint8_t kGrpcHeaderSizeInBytes = 5;
259
+ constexpr uint8_t kGrpcMessageHeaderNoFlags = 0;
260
+ constexpr uint8_t kGrpcMessageHeaderWriteInternalCompress = 1;
247
261
 
248
262
  struct GrpcMessageHeader {
249
- uint8_t flags = 0;
263
+ uint32_t flags = 0;
250
264
  uint32_t length = 0;
251
265
  };
252
266
 
253
267
  // If the payload SliceBuffer is too small to hold a gRPC header, this function
254
268
  // will crash. The calling function MUST ensure that the payload SliceBuffer
255
269
  // has length greater than or equal to the gRPC header.
256
- GrpcMessageHeader ExtractGrpcHeader(SliceBuffer& payload);
270
+ http2::ValueOrHttp2Status<GrpcMessageHeader> ExtractGrpcHeader(
271
+ SliceBuffer& payload);
257
272
 
258
- void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, const uint8_t flags,
259
- const uint32_t length);
273
+ void AppendGrpcHeaderToSliceBuffer(SliceBuffer& payload, uint32_t flags,
274
+ uint32_t length);
260
275
 
261
276
  ///////////////////////////////////////////////////////////////////////////////
262
277
  // Validations
@@ -267,7 +282,9 @@ http2::Http2Status ValidateSettingsValues(
267
282
  http2::Http2Status ValidateFrameHeader(uint32_t max_frame_size_setting,
268
283
  bool incoming_header_in_progress,
269
284
  uint32_t incoming_header_stream_id,
270
- Http2FrameHeader& current_frame_header);
285
+ Http2FrameHeader& current_frame_header,
286
+ uint32_t last_stream_id, bool is_client,
287
+ bool is_first_settings_processed);
271
288
 
272
289
  ///////////////////////////////////////////////////////////////////////////////
273
290
  // RFC9113 Related Strings and Consts
@@ -301,6 +318,9 @@ inline constexpr absl::string_view kSettingsStreamIdMustBeZero =
301
318
  "RFC9113: If an endpoint receives a SETTINGS frame whose Stream "
302
319
  "Identifier field is anything other than 0x00, the endpoint MUST respond "
303
320
  "with a connection error";
321
+ inline constexpr absl::string_view kUnknownStreamId =
322
+ "RFC9113: An endpoint that receives an unexpected stream identifier MUST "
323
+ "respond with a connection error";
304
324
 
305
325
  // Frame length related errors
306
326
  inline constexpr absl::string_view kRstStreamLength4 =
@@ -357,13 +377,41 @@ inline constexpr absl::string_view kIncorrectFrameSizeSetting =
357
377
  "RFC9113: The initial value is 2^14 (16,384) octets. The value advertised"
358
378
  " by an endpoint MUST be between this initial value and the maximum allowed"
359
379
  " frame size (2^24)-1 or 16,777,215 octets), inclusive. ";
380
+ inline constexpr absl::string_view kSettingsTimeout =
381
+ "Settings timeout. The HTTP2 settings frame was not ACKed within the "
382
+ "timeout. Connection will be closed";
383
+ inline constexpr absl::string_view kLastStreamClosed =
384
+ "Closing last stream and cannot create any more streams.";
385
+ inline constexpr absl::string_view kFirstSettingsFrameClient =
386
+ "RFC9113: The server connection preface consists of a potentially empty "
387
+ "SETTINGS frame that MUST be the first frame the server sends in the "
388
+ "HTTP/2 connection. Clients and servers MUST treat an invalid connection "
389
+ "preface as a connection error of type PROTOCOL_ERROR.";
390
+ inline constexpr absl::string_view kFirstSettingsFrameServer =
391
+ "RFC9113: The client connection preface starts with a sequence of 24 "
392
+ "octets. This sequence is followed by a SETTINGS frame, which MAY be "
393
+ "empty. Clients and servers MUST treat an invalid connection preface as a "
394
+ "connection error of type PROTOCOL_ERROR.";
360
395
 
361
396
  inline constexpr uint32_t kMaxStreamId31Bit = 0x7fffffffu;
362
397
  inline constexpr uint32_t kMaxSize31Bit = 0x7fffffffu;
363
398
  inline constexpr uint32_t kMinimumFrameSize = 16384;
364
399
  inline constexpr uint32_t kMaximumFrameSize = 16777215;
365
400
 
401
+ // Default Initial Window Size as per RFC 9113 Section 6.5.2
402
+ inline constexpr uint32_t kHttp2InitialWindowSize = 65535u;
403
+
366
404
  } // namespace RFC9113
405
+
406
+ namespace GrpcErrors {
407
+ inline constexpr absl::string_view kTooManyMetadata =
408
+ "gRPC Error : A gRPC server can send upto 1 initial metadata followed by "
409
+ "upto 1 trailing metadata.";
410
+ inline constexpr absl::string_view kOutOfOrderDataFrame =
411
+ "gRPC Error : DATA frames must follow initial metadata and precede "
412
+ "trailing metadata.";
413
+ } // namespace GrpcErrors
414
+
367
415
  } // namespace grpc_core
368
416
 
369
417
  #endif // GRPC_SRC_CORE_EXT_TRANSPORT_CHTTP2_TRANSPORT_FRAME_H
@@ -22,9 +22,6 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
  #include <stdlib.h>
24
24
 
25
- #include "absl/log/check.h"
26
- #include "absl/status/status.h"
27
- #include "absl/strings/str_format.h"
28
25
  #include "src/core/ext/transport/chttp2/transport/call_tracer_wrapper.h"
29
26
  #include "src/core/ext/transport/chttp2/transport/internal.h"
30
27
  #include "src/core/lib/experiments/experiments.h"
@@ -32,7 +29,10 @@
32
29
  #include "src/core/lib/slice/slice_buffer.h"
33
30
  #include "src/core/lib/transport/transport.h"
34
31
  #include "src/core/telemetry/stats.h"
32
+ #include "src/core/util/grpc_check.h"
35
33
  #include "src/core/util/status_helper.h"
34
+ #include "absl/status/status.h"
35
+ #include "absl/strings/str_format.h"
36
36
 
37
37
  absl::Status grpc_chttp2_data_parser_begin_frame(uint8_t flags,
38
38
  uint32_t stream_id,
@@ -63,7 +63,7 @@ void grpc_chttp2_encode_data(uint32_t id, grpc_slice_buffer* inbuf,
63
63
 
64
64
  hdr = GRPC_SLICE_MALLOC(header_size);
65
65
  p = GRPC_SLICE_START_PTR(hdr);
66
- CHECK(write_bytes < (1 << 24));
66
+ GRPC_CHECK(write_bytes < (1 << 24));
67
67
  *p++ = static_cast<uint8_t>(write_bytes >> 16);
68
68
  *p++ = static_cast<uint8_t>(write_bytes >> 8);
69
69
  *p++ = static_cast<uint8_t>(write_bytes);