grpc 1.47.0 → 1.48.0.pre1

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

Potentially problematic release.


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

Files changed (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -27,6 +27,7 @@
27
27
  #include <string>
28
28
 
29
29
  #include "absl/strings/string_view.h"
30
+ #include "absl/types/optional.h"
30
31
 
31
32
  #include <grpc/event_engine/memory_allocator.h>
32
33
  #include <grpc/impl/codegen/grpc_types.h>
@@ -34,7 +35,6 @@
34
35
 
35
36
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
36
37
  #include "src/core/ext/transport/chttp2/transport/frame.h"
37
- #include "src/core/ext/transport/chttp2/transport/frame_data.h"
38
38
  #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
39
39
  #include "src/core/ext/transport/chttp2/transport/frame_ping.h"
40
40
  #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
@@ -48,8 +48,6 @@
48
48
  #include "src/core/lib/debug/trace.h"
49
49
  #include "src/core/lib/gprpp/bitset.h"
50
50
  #include "src/core/lib/gprpp/debug_location.h"
51
- #include "src/core/lib/gprpp/manual_constructor.h"
52
- #include "src/core/lib/gprpp/orphanable.h"
53
51
  #include "src/core/lib/gprpp/ref_counted.h"
54
52
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
55
53
  #include "src/core/lib/gprpp/time.h"
@@ -60,10 +58,11 @@
60
58
  #include "src/core/lib/iomgr/timer.h"
61
59
  #include "src/core/lib/resource_quota/arena.h"
62
60
  #include "src/core/lib/resource_quota/memory_quota.h"
63
- #include "src/core/lib/transport/byte_stream.h"
61
+ #include "src/core/lib/slice/slice_buffer.h"
64
62
  #include "src/core/lib/transport/connectivity_state.h"
65
63
  #include "src/core/lib/transport/metadata_batch.h"
66
64
  #include "src/core/lib/transport/transport.h"
65
+ #include "src/core/lib/transport/transport_fwd.h"
67
66
  #include "src/core/lib/transport/transport_impl.h"
68
67
 
69
68
  namespace grpc_core {
@@ -229,76 +228,6 @@ typedef struct grpc_chttp2_write_cb {
229
228
  struct grpc_chttp2_write_cb* next;
230
229
  } grpc_chttp2_write_cb;
231
230
 
232
- namespace grpc_core {
233
-
234
- class Chttp2IncomingByteStream : public ByteStream {
235
- public:
236
- Chttp2IncomingByteStream(grpc_chttp2_transport* transport,
237
- grpc_chttp2_stream* stream, uint32_t frame_size,
238
- uint32_t flags);
239
-
240
- void Orphan() override;
241
-
242
- bool Next(size_t max_size_hint, grpc_closure* on_complete) override;
243
- grpc_error_handle Pull(grpc_slice* slice) override;
244
- void Shutdown(grpc_error_handle error) override;
245
-
246
- // TODO(roth): When I converted this class to C++, I wanted to make it
247
- // inherit from RefCounted or InternallyRefCounted instead of continuing
248
- // to use its own custom ref-counting code. However, that would require
249
- // using multiple inheritance, which sucks in general. And to make matters
250
- // worse, it causes problems with our New<> and Delete<> wrappers.
251
- // Specifically, unless RefCounted is first in the list of parent classes,
252
- // it will see a different value of the address of the object than the one
253
- // we actually allocated, in which case gpr_free() will be called on a
254
- // different address than the one we got from gpr_malloc(), thus causing a
255
- // crash. Given the fragility of depending on that, as well as a desire to
256
- // avoid multiple inheritance in general, I've decided to leave this
257
- // alone for now. We can revisit this once we're able to link against
258
- // libc++, at which point we can eliminate New<> and Delete<> and
259
- // switch to std::shared_ptr<>.
260
- void Ref() { refs_.Ref(); }
261
- void Unref() {
262
- if (GPR_UNLIKELY(refs_.Unref())) {
263
- delete this;
264
- }
265
- }
266
-
267
- void PublishError(grpc_error_handle error);
268
-
269
- grpc_error_handle Push(const grpc_slice& slice, grpc_slice* slice_out);
270
-
271
- grpc_error_handle Finished(grpc_error_handle error, bool reset_on_error);
272
-
273
- uint32_t remaining_bytes() const { return remaining_bytes_; }
274
-
275
- private:
276
- static void NextLocked(void* arg, grpc_error_handle error_ignored);
277
- static void OrphanLocked(void* arg, grpc_error_handle error_ignored);
278
-
279
- grpc_chttp2_transport* transport_; // Immutable.
280
- grpc_chttp2_stream* stream_; // Immutable.
281
-
282
- RefCount refs_;
283
-
284
- /* Accessed only by transport thread when stream->pending_byte_stream == false
285
- * Accessed only by application thread when stream->pending_byte_stream ==
286
- * true */
287
- uint32_t remaining_bytes_;
288
-
289
- /* Accessed only by transport thread when stream->pending_byte_stream == false
290
- * Accessed only by application thread when stream->pending_byte_stream ==
291
- * true */
292
- struct {
293
- grpc_closure closure;
294
- size_t max_size_hint;
295
- grpc_closure* on_complete;
296
- } next_action_;
297
- grpc_closure destroy_action_;
298
- };
299
-
300
- } // namespace grpc_core
301
-
302
231
  typedef enum {
303
232
  GRPC_CHTTP2_KEEPALIVE_STATE_WAITING,
304
233
  GRPC_CHTTP2_KEEPALIVE_STATE_PINGING,
@@ -427,11 +356,7 @@ struct grpc_chttp2_transport {
427
356
  /** parser for goaway frames */
428
357
  grpc_chttp2_goaway_parser goaway_parser;
429
358
 
430
- grpc_core::PolymorphicManualConstructor<
431
- grpc_core::chttp2::TransportFlowControlBase,
432
- grpc_core::chttp2::TransportFlowControl,
433
- grpc_core::chttp2::TransportFlowControlDisabled>
434
- flow_control;
359
+ grpc_core::chttp2::TransportFlowControl flow_control;
435
360
  /** initial window change. This is tracked as we parse settings frames from
436
361
  * the remote peer. If there is a positive delta, then we will make all
437
362
  * streams readable since they may have become unstalled */
@@ -565,19 +490,16 @@ struct grpc_chttp2_stream {
565
490
  bool* sent_trailing_metadata_op = nullptr;
566
491
  grpc_closure* send_trailing_metadata_finished = nullptr;
567
492
 
568
- grpc_core::OrphanablePtr<grpc_core::ByteStream> fetching_send_message;
569
- uint32_t fetched_send_message_length = 0;
570
- grpc_slice fetching_slice = grpc_empty_slice();
571
493
  int64_t next_message_end_offset;
572
494
  int64_t flow_controlled_bytes_written = 0;
573
495
  int64_t flow_controlled_bytes_flowed = 0;
574
- grpc_closure complete_fetch_locked;
575
- grpc_closure* fetching_send_message_finished = nullptr;
496
+ grpc_closure* send_message_finished = nullptr;
576
497
 
577
498
  grpc_metadata_batch* recv_initial_metadata;
578
499
  grpc_closure* recv_initial_metadata_ready = nullptr;
579
500
  bool* trailing_metadata_available = nullptr;
580
- grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message = nullptr;
501
+ absl::optional<grpc_core::SliceBuffer>* recv_message = nullptr;
502
+ uint32_t* recv_message_flags = nullptr;
581
503
  bool* call_failed_before_recv_message = nullptr;
582
504
  grpc_closure* recv_message_ready = nullptr;
583
505
  grpc_metadata_batch* recv_trailing_metadata;
@@ -614,22 +536,7 @@ struct grpc_chttp2_stream {
614
536
  grpc_metadata_batch initial_metadata_buffer;
615
537
  grpc_metadata_batch trailing_metadata_buffer;
616
538
 
617
- grpc_slice_buffer frame_storage; /* protected by t combiner */
618
-
619
- grpc_closure* on_next = nullptr; /* protected by t combiner */
620
- bool pending_byte_stream = false; /* protected by t combiner */
621
- // cached length of buffer to be used by the transport thread in cases where
622
- // stream->pending_byte_stream == true. The value is saved before
623
- // application threads are allowed to modify
624
- // unprocessed_incoming_frames_buffer
625
- size_t unprocessed_incoming_frames_buffer_cached_length = 0;
626
- /* Accessed only by transport thread when stream->pending_byte_stream == false
627
- * Accessed only by application thread when stream->pending_byte_stream ==
628
- * true */
629
- grpc_slice_buffer unprocessed_incoming_frames_buffer;
630
- grpc_closure reset_byte_stream;
631
- grpc_error_handle byte_stream_error =
632
- GRPC_ERROR_NONE; /* protected by t combiner */
539
+ grpc_slice_buffer frame_storage; /* protected by t combiner */
633
540
  bool received_last_frame = false; /* protected by t combiner */
634
541
 
635
542
  grpc_core::Timestamp deadline = grpc_core::Timestamp::InfFuture();
@@ -638,22 +545,13 @@ struct grpc_chttp2_stream {
638
545
  grpc_error_handle forced_close_error = GRPC_ERROR_NONE;
639
546
  /** how many header frames have we received? */
640
547
  uint8_t header_frames_received = 0;
641
- /** parsing state for data frames */
642
- /* Accessed only by transport thread when stream->pending_byte_stream == false
643
- * Accessed only by application thread when stream->pending_byte_stream ==
644
- * true */
645
- grpc_chttp2_data_parser data_parser;
646
548
  /** number of bytes received - reset at end of parse thread execution */
647
549
  int64_t received_bytes = 0;
648
550
 
649
551
  bool sent_initial_metadata = false;
650
552
  bool sent_trailing_metadata = false;
651
553
 
652
- grpc_core::PolymorphicManualConstructor<
653
- grpc_core::chttp2::StreamFlowControlBase,
654
- grpc_core::chttp2::StreamFlowControl,
655
- grpc_core::chttp2::StreamFlowControlDisabled>
656
- flow_control;
554
+ grpc_core::chttp2::StreamFlowControl flow_control;
657
555
 
658
556
  grpc_slice_buffer flow_controlled_buffer;
659
557
 
@@ -24,6 +24,7 @@
24
24
  #include <string>
25
25
 
26
26
  #include "absl/base/attributes.h"
27
+ #include "absl/status/status.h"
27
28
  #include "absl/strings/str_cat.h"
28
29
  #include "absl/strings/str_format.h"
29
30
 
@@ -46,11 +47,11 @@
46
47
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
47
48
  #include "src/core/lib/channel/channelz.h"
48
49
  #include "src/core/lib/debug/trace.h"
49
- #include "src/core/lib/gprpp/manual_constructor.h"
50
50
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
51
  #include "src/core/lib/gprpp/time.h"
52
52
  #include "src/core/lib/iomgr/error.h"
53
53
  #include "src/core/lib/transport/bdp_estimator.h"
54
+ #include "src/core/lib/transport/error_utils.h"
54
55
  #include "src/core/lib/transport/http2_errors.h"
55
56
  #include "src/core/lib/transport/metadata_batch.h"
56
57
  #include "src/core/lib/transport/transport.h"
@@ -74,6 +75,10 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
74
75
  const grpc_slice& slice,
75
76
  int is_last);
76
77
 
78
+ static char get_utf8_safe_char(char c) {
79
+ return static_cast<unsigned char>(c) < 128 ? c : 32;
80
+ }
81
+
77
82
  grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
78
83
  const grpc_slice& slice) {
79
84
  const uint8_t* beg = GRPC_SLICE_START_PTR(slice);
@@ -113,10 +118,12 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
113
118
  return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
114
119
  "Connect string mismatch: expected '%c' (%d) got '%c' (%d) "
115
120
  "at byte %d",
116
- GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state],
121
+ get_utf8_safe_char(
122
+ GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state]),
117
123
  static_cast<int>(static_cast<uint8_t>(
118
124
  GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state])),
119
- *cur, static_cast<int>(*cur), t->deframe_state));
125
+ get_utf8_safe_char(*cur), static_cast<int>(*cur),
126
+ t->deframe_state));
120
127
  }
121
128
  ++cur;
122
129
  // NOLINTNEXTLINE(bugprone-misplaced-widening-cast)
@@ -197,12 +204,12 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
197
204
  t->incoming_stream_id |= (static_cast<uint32_t>(*cur));
198
205
  t->deframe_state = GRPC_DTS_FRAME;
199
206
  err = init_frame_parser(t);
200
- if (err != GRPC_ERROR_NONE) {
207
+ if (!GRPC_ERROR_IS_NONE(err)) {
201
208
  return err;
202
209
  }
203
210
  if (t->incoming_frame_size == 0) {
204
211
  err = parse_frame_slice(t, grpc_empty_slice(), 1);
205
- if (err != GRPC_ERROR_NONE) {
212
+ if (!GRPC_ERROR_IS_NONE(err)) {
206
213
  return err;
207
214
  }
208
215
  t->incoming_stream = nullptr;
@@ -211,10 +218,9 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
211
218
  return GRPC_ERROR_NONE;
212
219
  }
213
220
  goto dts_fh_0; /* loop */
214
- } else if (t->flow_control->flow_control_enabled() &&
215
- t->incoming_frame_size >
216
- t->settings[GRPC_ACKED_SETTINGS]
217
- [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
221
+ } else if (t->incoming_frame_size >
222
+ t->settings[GRPC_ACKED_SETTINGS]
223
+ [GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE]) {
218
224
  return GRPC_ERROR_CREATE_FROM_CPP_STRING(
219
225
  absl::StrFormat("Frame size %d is larger than max frame size %d",
220
226
  t->incoming_frame_size,
@@ -233,7 +239,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
233
239
  grpc_slice_sub_no_ref(slice, static_cast<size_t>(cur - beg),
234
240
  static_cast<size_t>(end - beg)),
235
241
  1);
236
- if (err != GRPC_ERROR_NONE) {
242
+ if (!GRPC_ERROR_IS_NONE(err)) {
237
243
  return err;
238
244
  }
239
245
  t->deframe_state = GRPC_DTS_FH_0;
@@ -246,7 +252,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
246
252
  grpc_slice_sub_no_ref(slice, cur_offset,
247
253
  cur_offset + t->incoming_frame_size),
248
254
  1);
249
- if (err != GRPC_ERROR_NONE) {
255
+ if (!GRPC_ERROR_IS_NONE(err)) {
250
256
  return err;
251
257
  }
252
258
  cur += t->incoming_frame_size;
@@ -258,7 +264,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
258
264
  grpc_slice_sub_no_ref(slice, static_cast<size_t>(cur - beg),
259
265
  static_cast<size_t>(end - beg)),
260
266
  0);
261
- if (err != GRPC_ERROR_NONE) {
267
+ if (!GRPC_ERROR_IS_NONE(err)) {
262
268
  return err;
263
269
  }
264
270
  t->incoming_frame_size -= static_cast<uint32_t>(end - cur);
@@ -378,7 +384,7 @@ void grpc_chttp2_parsing_become_skip_parser(grpc_chttp2_transport* t) {
378
384
 
379
385
  static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
380
386
  // Update BDP accounting since we have received a data frame.
381
- grpc_core::BdpEstimator* bdp_est = t->flow_control->bdp_estimator();
387
+ grpc_core::BdpEstimator* bdp_est = t->flow_control.bdp_estimator();
382
388
  if (bdp_est) {
383
389
  if (t->bdp_ping_blocked) {
384
390
  t->bdp_ping_blocked = false;
@@ -389,17 +395,21 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
389
395
  }
390
396
  grpc_chttp2_stream* s =
391
397
  grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
392
- grpc_error_handle err = GRPC_ERROR_NONE;
398
+ absl::Status status;
393
399
  grpc_core::chttp2::FlowControlAction action;
394
400
  if (s == nullptr) {
395
- err = t->flow_control->RecvData(t->incoming_frame_size);
396
- action = t->flow_control->MakeAction();
401
+ grpc_core::chttp2::TransportFlowControl::IncomingUpdateContext upd(
402
+ &t->flow_control);
403
+ status = upd.RecvData(t->incoming_frame_size);
404
+ action = upd.MakeAction();
397
405
  } else {
398
- err = s->flow_control->RecvData(t->incoming_frame_size);
399
- action = s->flow_control->MakeAction();
406
+ grpc_core::chttp2::StreamFlowControl::IncomingUpdateContext upd(
407
+ &s->flow_control);
408
+ status = upd.RecvData(t->incoming_frame_size);
409
+ action = upd.MakeAction();
400
410
  }
401
411
  grpc_chttp2_act_on_flowctl_action(action, t, s);
402
- if (err != GRPC_ERROR_NONE) {
412
+ if (!status.ok()) {
403
413
  goto error_handler;
404
414
  }
405
415
  if (s == nullptr) {
@@ -407,33 +417,29 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
407
417
  }
408
418
  s->received_bytes += t->incoming_frame_size;
409
419
  s->stats.incoming.framing_bytes += 9;
410
- if (err == GRPC_ERROR_NONE && s->read_closed) {
420
+ if (s->read_closed) {
411
421
  return init_non_header_skip_frame_parser(t);
412
422
  }
413
- if (err == GRPC_ERROR_NONE) {
414
- err = grpc_chttp2_data_parser_begin_frame(
415
- &s->data_parser, t->incoming_frame_flags, s->id, s);
416
- }
423
+ status =
424
+ grpc_chttp2_data_parser_begin_frame(t->incoming_frame_flags, s->id, s);
417
425
  error_handler:
418
- intptr_t unused;
419
- if (err == GRPC_ERROR_NONE) {
426
+ if (status.ok()) {
420
427
  t->incoming_stream = s;
421
428
  /* t->parser = grpc_chttp2_data_parser_parse;*/
422
429
  t->parser = grpc_chttp2_data_parser_parse;
423
- t->parser_data = &s->data_parser;
430
+ t->parser_data = nullptr;
424
431
  t->ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
425
432
  return GRPC_ERROR_NONE;
426
- } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, &unused)) {
433
+ } else if (s != nullptr) {
427
434
  /* handle stream errors by closing the stream */
428
- if (s != nullptr) {
429
- grpc_chttp2_mark_stream_closed(t, s, true, false, err);
430
- }
435
+ grpc_chttp2_mark_stream_closed(t, s, true, false,
436
+ absl_status_to_grpc_error(status));
431
437
  grpc_chttp2_add_rst_stream_to_next_write(t, t->incoming_stream_id,
432
438
  GRPC_HTTP2_PROTOCOL_ERROR,
433
439
  &s->stats.outgoing);
434
440
  return init_non_header_skip_frame_parser(t);
435
441
  } else {
436
- return err;
442
+ return absl_status_to_grpc_error(status);
437
443
  }
438
444
  }
439
445
 
@@ -562,6 +568,10 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
562
568
  gpr_log(GPR_ERROR, "too many header frames received");
563
569
  return init_header_skip_frame_parser(t, priority_type);
564
570
  }
571
+ if (frame_type == HPackParser::LogInfo::kTrailers && !t->header_eof) {
572
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
573
+ "Trailing metadata frame received without an end-o-stream");
574
+ }
565
575
  t->hpack_parser.BeginFrame(
566
576
  incoming_metadata_buffer,
567
577
  t->settings[GRPC_ACKED_SETTINGS]
@@ -576,7 +586,7 @@ static grpc_error_handle init_window_update_frame_parser(
576
586
  grpc_error_handle err = grpc_chttp2_window_update_parser_begin_frame(
577
587
  &t->simple.window_update, t->incoming_frame_size,
578
588
  t->incoming_frame_flags);
579
- if (err != GRPC_ERROR_NONE) return err;
589
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
580
590
  if (t->incoming_stream_id != 0) {
581
591
  grpc_chttp2_stream* s = t->incoming_stream =
582
592
  grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
@@ -593,7 +603,7 @@ static grpc_error_handle init_window_update_frame_parser(
593
603
  static grpc_error_handle init_ping_parser(grpc_chttp2_transport* t) {
594
604
  grpc_error_handle err = grpc_chttp2_ping_parser_begin_frame(
595
605
  &t->simple.ping, t->incoming_frame_size, t->incoming_frame_flags);
596
- if (err != GRPC_ERROR_NONE) return err;
606
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
597
607
  t->parser = grpc_chttp2_ping_parser_parse;
598
608
  t->parser_data = &t->simple.ping;
599
609
  return GRPC_ERROR_NONE;
@@ -602,7 +612,7 @@ static grpc_error_handle init_ping_parser(grpc_chttp2_transport* t) {
602
612
  static grpc_error_handle init_rst_stream_parser(grpc_chttp2_transport* t) {
603
613
  grpc_error_handle err = grpc_chttp2_rst_stream_parser_begin_frame(
604
614
  &t->simple.rst_stream, t->incoming_frame_size, t->incoming_frame_flags);
605
- if (err != GRPC_ERROR_NONE) return err;
615
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
606
616
  grpc_chttp2_stream* s = t->incoming_stream =
607
617
  grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
608
618
  if (!t->incoming_stream) {
@@ -617,7 +627,7 @@ static grpc_error_handle init_rst_stream_parser(grpc_chttp2_transport* t) {
617
627
  static grpc_error_handle init_goaway_parser(grpc_chttp2_transport* t) {
618
628
  grpc_error_handle err = grpc_chttp2_goaway_parser_begin_frame(
619
629
  &t->goaway_parser, t->incoming_frame_size, t->incoming_frame_flags);
620
- if (err != GRPC_ERROR_NONE) return err;
630
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
621
631
  t->parser = grpc_chttp2_goaway_parser_parse;
622
632
  t->parser_data = &t->goaway_parser;
623
633
  return GRPC_ERROR_NONE;
@@ -632,7 +642,7 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
632
642
  grpc_error_handle err = grpc_chttp2_settings_parser_begin_frame(
633
643
  &t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
634
644
  t->settings[GRPC_PEER_SETTINGS]);
635
- if (err != GRPC_ERROR_NONE) {
645
+ if (!GRPC_ERROR_IS_NONE(err)) {
636
646
  return err;
637
647
  }
638
648
  if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
@@ -641,6 +651,9 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
641
651
  t->hpack_parser.hpack_table()->SetMaxBytes(
642
652
  t->settings[GRPC_ACKED_SETTINGS]
643
653
  [GRPC_CHTTP2_SETTINGS_HEADER_TABLE_SIZE]);
654
+ t->flow_control.SetAckedInitialWindow(
655
+ t->settings[GRPC_ACKED_SETTINGS]
656
+ [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]);
644
657
  t->sent_local_settings = false;
645
658
  }
646
659
  t->parser = grpc_chttp2_settings_parser_parse;
@@ -654,7 +667,7 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
654
667
  grpc_chttp2_stream* s = t->incoming_stream;
655
668
  grpc_error_handle err = t->parser(t->parser_data, t, s, slice, is_last);
656
669
  intptr_t unused;
657
- if (GPR_LIKELY(err == GRPC_ERROR_NONE)) {
670
+ if (GPR_LIKELY(GRPC_ERROR_IS_NONE(err))) {
658
671
  return err;
659
672
  } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, &unused)) {
660
673
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
@@ -20,12 +20,10 @@
20
20
 
21
21
  #include <grpc/support/log.h>
22
22
 
23
- #include "src/core/ext/transport/chttp2/transport/flow_control.h"
24
23
  #include "src/core/ext/transport/chttp2/transport/frame.h"
25
24
  #include "src/core/ext/transport/chttp2/transport/internal.h"
26
25
  #include "src/core/lib/debug/trace.h"
27
26
  #include "src/core/lib/gprpp/bitset.h"
28
- #include "src/core/lib/gprpp/manual_constructor.h"
29
27
 
30
28
  static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
31
29
  switch (id) {
@@ -189,7 +187,6 @@ void grpc_chttp2_list_remove_waiting_for_concurrency(grpc_chttp2_transport* t,
189
187
 
190
188
  void grpc_chttp2_list_add_stalled_by_transport(grpc_chttp2_transport* t,
191
189
  grpc_chttp2_stream* s) {
192
- GPR_ASSERT(t->flow_control->flow_control_enabled());
193
190
  stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
194
191
  }
195
192
 
@@ -205,7 +202,6 @@ void grpc_chttp2_list_remove_stalled_by_transport(grpc_chttp2_transport* t,
205
202
 
206
203
  void grpc_chttp2_list_add_stalled_by_stream(grpc_chttp2_transport* t,
207
204
  grpc_chttp2_stream* s) {
208
- GPR_ASSERT(t->flow_control->flow_control_enabled());
209
205
  stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_STREAM);
210
206
  }
211
207
 
@@ -22,7 +22,6 @@
22
22
  #include <stddef.h>
23
23
 
24
24
  #include <algorithm>
25
- #include <memory>
26
25
  #include <string>
27
26
 
28
27
  #include "absl/types/optional.h"
@@ -50,7 +49,6 @@
50
49
  #include "src/core/lib/debug/stats.h"
51
50
  #include "src/core/lib/debug/trace.h"
52
51
  #include "src/core/lib/gprpp/debug_location.h"
53
- #include "src/core/lib/gprpp/manual_constructor.h"
54
52
  #include "src/core/lib/gprpp/ref_counted.h"
55
53
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
56
54
  #include "src/core/lib/gprpp/time.h"
@@ -220,14 +218,14 @@ static void report_stall(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
220
218
  s->flow_controlled_buffer.length, s->flow_controlled_bytes_flowed,
221
219
  t->settings[GRPC_ACKED_SETTINGS]
222
220
  [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE],
223
- t->flow_control->remote_window(),
221
+ t->flow_control.remote_window(),
224
222
  static_cast<uint32_t>(std::max(
225
223
  int64_t(0),
226
- s->flow_control->remote_window_delta() +
224
+ s->flow_control.remote_window_delta() +
227
225
  static_cast<int64_t>(
228
226
  t->settings[GRPC_PEER_SETTINGS]
229
227
  [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE]))),
230
- s->flow_control->remote_window_delta());
228
+ s->flow_control.remote_window_delta());
231
229
  }
232
230
  }
233
231
 
@@ -304,7 +302,7 @@ class WriteContext {
304
302
 
305
303
  void FlushWindowUpdates() {
306
304
  uint32_t transport_announce =
307
- t_->flow_control->MaybeSendUpdate(t_->outbuf.count > 0);
305
+ t_->flow_control.MaybeSendUpdate(t_->outbuf.count > 0);
308
306
  if (transport_announce) {
309
307
  grpc_transport_one_way_stats throwaway_stats;
310
308
  grpc_slice_buffer_add(
@@ -331,7 +329,7 @@ class WriteContext {
331
329
  void UpdateStreamsNoLongerStalled() {
332
330
  grpc_chttp2_stream* s;
333
331
  while (grpc_chttp2_list_pop_stalled_by_transport(t_, &s)) {
334
- if (t_->closed_with_error == GRPC_ERROR_NONE &&
332
+ if (GRPC_ERROR_IS_NONE(t_->closed_with_error) &&
335
333
  grpc_chttp2_list_add_writable_stream(t_, s)) {
336
334
  if (!s->refcount->refs.RefIfNonZero()) {
337
335
  grpc_chttp2_list_remove_writable_stream(t_, s);
@@ -392,7 +390,7 @@ class DataSendContext {
392
390
  uint32_t stream_remote_window() const {
393
391
  return static_cast<uint32_t>(std::max(
394
392
  int64_t(0),
395
- s_->flow_control->remote_window_delta() +
393
+ s_->flow_control.remote_window_delta() +
396
394
  static_cast<int64_t>(
397
395
  t_->settings[GRPC_PEER_SETTINGS]
398
396
  [GRPC_CHTTP2_SETTINGS_INITIAL_WINDOW_SIZE])));
@@ -402,7 +400,7 @@ class DataSendContext {
402
400
  return static_cast<uint32_t>(std::min(
403
401
  t_->settings[GRPC_PEER_SETTINGS][GRPC_CHTTP2_SETTINGS_MAX_FRAME_SIZE],
404
402
  static_cast<uint32_t>(std::min(int64_t(stream_remote_window()),
405
- t_->flow_control->remote_window()))));
403
+ t_->flow_control.remote_window()))));
406
404
  }
407
405
 
408
406
  bool AnyOutgoing() const { return max_outgoing() > 0; }
@@ -411,12 +409,11 @@ class DataSendContext {
411
409
  uint32_t send_bytes = static_cast<uint32_t>(
412
410
  std::min(size_t(max_outgoing()), s_->flow_controlled_buffer.length));
413
411
  is_last_frame_ = send_bytes == s_->flow_controlled_buffer.length &&
414
- s_->fetching_send_message == nullptr &&
415
412
  s_->send_trailing_metadata != nullptr &&
416
413
  s_->send_trailing_metadata->empty();
417
414
  grpc_chttp2_encode_data(s_->id, &s_->flow_controlled_buffer, send_bytes,
418
415
  is_last_frame_, &s_->stats.outgoing, &t_->outbuf);
419
- s_->flow_control->SentData(send_bytes);
416
+ sfc_upd_.SentData(send_bytes);
420
417
  s_->sending_bytes += send_bytes;
421
418
  }
422
419
 
@@ -436,6 +433,8 @@ class DataSendContext {
436
433
  WriteContext* write_context_;
437
434
  grpc_chttp2_transport* t_;
438
435
  grpc_chttp2_stream* s_;
436
+ grpc_core::chttp2::StreamFlowControl::OutgoingUpdateContext sfc_upd_{
437
+ &s_->flow_control};
439
438
  const size_t sending_bytes_before_;
440
439
  bool is_last_frame_ = false;
441
440
  };
@@ -445,11 +444,9 @@ class StreamWriteContext {
445
444
  StreamWriteContext(WriteContext* write_context, grpc_chttp2_stream* s)
446
445
  : write_context_(write_context), t_(write_context->transport()), s_(s) {
447
446
  GRPC_CHTTP2_IF_TRACING(
448
- gpr_log(GPR_INFO, "W:%p %s[%d] im-(sent,send)=(%d,%d) announce=%d", t_,
447
+ gpr_log(GPR_INFO, "W:%p %s[%d] im-(sent,send)=(%d,%d)", t_,
449
448
  t_->is_client ? "CLIENT" : "SERVER", s->id,
450
- s->sent_initial_metadata, s->send_initial_metadata != nullptr,
451
- (int)(s->flow_control->local_window_delta() -
452
- s->flow_control->announced_window_delta())));
449
+ s->sent_initial_metadata, s->send_initial_metadata != nullptr));
453
450
  }
454
451
 
455
452
  void FlushInitialMetadata() {
@@ -462,8 +459,7 @@ class StreamWriteContext {
462
459
  // trailing metadata. This results in a Trailers-Only response,
463
460
  // which is required for retries, as per:
464
461
  // https://github.com/grpc/proposal/blob/master/A6-client-retries.md#when-retries-are-valid
465
- if (!t_->is_client && s_->fetching_send_message == nullptr &&
466
- s_->flow_controlled_buffer.length == 0 &&
462
+ if (!t_->is_client && s_->flow_controlled_buffer.length == 0 &&
467
463
  s_->send_trailing_metadata != nullptr &&
468
464
  is_default_initial_metadata(s_->send_initial_metadata)) {
469
465
  ConvertInitialMetadataToTrailingMetadata();
@@ -495,8 +491,10 @@ class StreamWriteContext {
495
491
  }
496
492
 
497
493
  void FlushWindowUpdates() {
494
+ if (s_->read_closed) return;
495
+
498
496
  /* send any window updates */
499
- const uint32_t stream_announce = s_->flow_control->MaybeSendUpdate();
497
+ const uint32_t stream_announce = s_->flow_control.MaybeSendUpdate();
500
498
  if (stream_announce == 0) return;
501
499
 
502
500
  grpc_slice_buffer_add(
@@ -516,7 +514,7 @@ class StreamWriteContext {
516
514
  DataSendContext data_send_context(write_context_, t_, s_);
517
515
 
518
516
  if (!data_send_context.AnyOutgoing()) {
519
- if (t_->flow_control->remote_window() <= 0) {
517
+ if (t_->flow_control.remote_window() <= 0) {
520
518
  report_stall(t_, s_, "transport");
521
519
  grpc_chttp2_list_add_stalled_by_transport(t_, s_);
522
520
  } else if (data_send_context.stream_remote_window() <= 0) {
@@ -547,7 +545,6 @@ class StreamWriteContext {
547
545
  if (!s_->sent_initial_metadata) return;
548
546
 
549
547
  if (s_->send_trailing_metadata == nullptr) return;
550
- if (s_->fetching_send_message != nullptr) return;
551
548
  if (s_->flow_controlled_buffer.length != 0) return;
552
549
 
553
550
  GRPC_CHTTP2_IF_TRACING(gpr_log(GPR_INFO, "sending trailing_metadata"));
@@ -635,7 +632,7 @@ grpc_chttp2_begin_write_result grpc_chttp2_begin_write(
635
632
  ctx.FlushQueuedBuffers();
636
633
  ctx.EnactHpackSettings();
637
634
 
638
- if (t->flow_control->remote_window() > 0) {
635
+ if (t->flow_control.remote_window() > 0) {
639
636
  ctx.UpdateStreamsNoLongerStalled();
640
637
  }
641
638
 
@@ -18,7 +18,6 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include "src/core/ext/transport/inproc/inproc_transport.h"
22
21
  #include "src/core/lib/debug/trace.h"
23
22
 
24
23
  grpc_core::TraceFlag grpc_inproc_trace(false, "inproc");