grpc 1.46.2-x86_64-linux → 1.48.0.pre1-x86_64-linux

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 (816) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +138 -128
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +62 -18
  5. data/include/grpc/event_engine/memory_allocator.h +0 -15
  6. data/include/grpc/event_engine/port.h +1 -1
  7. data/include/grpc/event_engine/slice.h +286 -0
  8. data/include/grpc/event_engine/slice_buffer.h +118 -0
  9. data/include/grpc/grpc.h +3 -3
  10. data/include/grpc/grpc_security.h +11 -0
  11. data/include/grpc/impl/codegen/compression_types.h +2 -1
  12. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  13. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  14. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  15. data/include/grpc/impl/codegen/port_platform.h +106 -39
  16. data/include/grpc/impl/codegen/slice.h +1 -1
  17. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  18. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +35 -35
  19. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +20 -1
  20. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  21. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  22. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  23. data/src/core/ext/filters/client_channel/backup_poller.cc +8 -6
  24. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  25. data/src/core/ext/filters/client_channel/channel_connectivity.cc +43 -21
  26. data/src/core/ext/filters/client_channel/client_channel.cc +111 -82
  27. data/src/core/ext/filters/client_channel/client_channel.h +43 -8
  28. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  29. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  30. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  31. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  32. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  33. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  34. data/src/core/ext/filters/client_channel/config_selector.h +8 -6
  35. data/src/core/ext/filters/client_channel/connector.h +9 -3
  36. data/src/core/ext/filters/client_channel/dynamic_filters.cc +19 -6
  37. data/src/core/ext/filters/client_channel/dynamic_filters.h +12 -2
  38. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  39. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  40. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  41. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  42. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  43. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  45. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  46. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  47. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -5
  50. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +132 -62
  52. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  53. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  54. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  56. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +407 -0
  57. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  58. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1036 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  60. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +149 -147
  61. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +176 -85
  62. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +303 -203
  63. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +6 -1
  64. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +92 -54
  65. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +240 -214
  66. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +119 -111
  67. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +86 -71
  68. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +101 -25
  69. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  70. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +35 -11
  71. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +36 -20
  72. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +78 -14
  73. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  74. data/src/core/ext/filters/client_channel/lb_policy.h +18 -31
  75. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  76. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +11 -6
  77. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  78. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  79. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  80. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  81. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +1 -0
  82. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  83. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +26 -6
  84. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +139 -48
  85. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  86. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  87. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +6 -6
  88. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +36 -14
  89. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  90. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  91. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  92. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  93. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +39 -7
  94. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -19
  95. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  96. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +61 -16
  97. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +14 -2
  98. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  99. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +17 -12
  100. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +111 -46
  101. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  102. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +12 -18
  103. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  104. data/src/core/ext/filters/client_channel/retry_filter.cc +75 -36
  105. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  106. data/src/core/ext/filters/client_channel/retry_service_config.cc +12 -13
  107. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  108. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  109. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  110. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +24 -6
  111. data/src/core/ext/filters/client_channel/subchannel.cc +186 -187
  112. data/src/core/ext/filters/client_channel/subchannel.h +80 -36
  113. data/src/core/ext/filters/client_channel/subchannel_interface.h +51 -41
  114. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  115. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  116. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  117. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +24 -95
  118. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +17 -9
  119. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -9
  120. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  121. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +22 -6
  122. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  123. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  124. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  125. data/src/core/ext/filters/http/client/http_client_filter.cc +30 -10
  126. data/src/core/ext/filters/http/client/http_client_filter.h +15 -2
  127. data/src/core/ext/filters/http/client_authority_filter.cc +16 -20
  128. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  129. data/src/core/ext/filters/http/http_filters_plugin.cc +16 -9
  130. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +65 -187
  131. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  132. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -107
  133. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  134. data/src/core/ext/filters/http/server/http_server_filter.cc +95 -255
  135. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  136. data/src/core/ext/filters/message_size/message_size_filter.cc +45 -41
  137. data/src/core/ext/filters/message_size/message_size_filter.h +15 -2
  138. data/src/core/ext/filters/rbac/rbac_filter.cc +15 -3
  139. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  140. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  141. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  142. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  143. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  144. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  145. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  146. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +104 -138
  147. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  148. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +58 -29
  149. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  150. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  151. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  152. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  153. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +260 -491
  154. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +6 -1
  155. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  156. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  157. data/src/core/ext/transport/chttp2/transport/flow_control.cc +145 -261
  158. data/src/core/ext/transport/chttp2/transport/flow_control.h +179 -288
  159. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  160. data/src/core/ext/transport/chttp2/transport/frame_data.cc +59 -211
  161. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  162. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  163. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  164. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  165. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  166. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  167. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  168. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +10 -42
  169. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  170. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +10 -12
  171. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  172. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  173. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  174. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  175. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  176. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +32 -13
  177. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  178. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +53 -37
  179. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  180. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  181. data/src/core/ext/transport/chttp2/transport/internal.h +31 -112
  182. data/src/core/ext/transport/chttp2/transport/parsing.cc +77 -43
  183. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  184. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  185. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  186. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  187. data/src/core/ext/transport/chttp2/transport/writing.cc +54 -21
  188. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  189. data/src/core/ext/transport/inproc/inproc_transport.cc +93 -86
  190. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  191. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  192. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  193. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  194. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  195. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  196. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  197. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  198. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  199. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  200. data/src/core/ext/xds/certificate_provider_store.cc +6 -2
  201. data/src/core/ext/xds/certificate_provider_store.h +10 -1
  202. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  203. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  204. data/src/core/ext/xds/upb_utils.h +1 -2
  205. data/src/core/ext/xds/xds_api.cc +16 -18
  206. data/src/core/ext/xds/xds_api.h +12 -5
  207. data/src/core/ext/xds/xds_bootstrap.cc +39 -26
  208. data/src/core/ext/xds/xds_bootstrap.h +11 -11
  209. data/src/core/ext/xds/xds_certificate_provider.cc +16 -4
  210. data/src/core/ext/xds/xds_certificate_provider.h +17 -2
  211. data/src/core/ext/xds/xds_channel_stack_modifier.cc +14 -5
  212. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  213. data/src/core/ext/xds/xds_client.cc +121 -46
  214. data/src/core/ext/xds/xds_client.h +19 -4
  215. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  216. data/src/core/ext/xds/xds_client_stats.h +4 -3
  217. data/src/core/ext/xds/xds_cluster.cc +126 -25
  218. data/src/core/ext/xds/xds_cluster.h +12 -1
  219. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  220. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  221. data/src/core/ext/xds/xds_common_types.cc +36 -22
  222. data/src/core/ext/xds/xds_common_types.h +12 -4
  223. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  224. data/src/core/ext/xds/xds_endpoint.h +13 -5
  225. data/src/core/ext/xds/xds_http_fault_filter.cc +10 -8
  226. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  227. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  228. data/src/core/ext/xds/xds_http_filters.h +3 -3
  229. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  230. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  231. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  232. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  233. data/src/core/ext/xds/xds_listener.cc +70 -42
  234. data/src/core/ext/xds/xds_listener.h +10 -1
  235. data/src/core/ext/xds/xds_resource_type.h +3 -3
  236. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  237. data/src/core/ext/xds/xds_route_config.cc +56 -28
  238. data/src/core/ext/xds/xds_route_config.h +11 -2
  239. data/src/core/ext/xds/xds_routing.cc +16 -0
  240. data/src/core/ext/xds/xds_routing.h +7 -2
  241. data/src/core/ext/xds/xds_server_config_fetcher.cc +56 -7
  242. data/src/core/lib/address_utils/parse_address.cc +5 -8
  243. data/src/core/lib/address_utils/parse_address.h +3 -2
  244. data/src/core/lib/address_utils/sockaddr_utils.cc +60 -26
  245. data/src/core/lib/address_utils/sockaddr_utils.h +9 -4
  246. data/src/core/lib/avl/avl.h +6 -4
  247. data/src/core/lib/backoff/backoff.cc +1 -1
  248. data/src/core/lib/backoff/backoff.h +1 -1
  249. data/src/core/lib/channel/call_finalization.h +4 -0
  250. data/src/core/lib/channel/call_tracer.h +11 -5
  251. data/src/core/lib/channel/channel_args.cc +41 -22
  252. data/src/core/lib/channel/channel_args.h +34 -3
  253. data/src/core/lib/channel/channel_args_preconditioning.cc +4 -3
  254. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  255. data/src/core/lib/channel/channel_fwd.h +26 -0
  256. data/src/core/lib/channel/channel_stack.cc +45 -7
  257. data/src/core/lib/channel/channel_stack.h +45 -9
  258. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  259. data/src/core/lib/channel/channel_stack_builder.h +17 -32
  260. data/src/core/lib/channel/channel_stack_builder_impl.cc +38 -43
  261. data/src/core/lib/channel/channel_stack_builder_impl.h +4 -6
  262. data/src/core/lib/channel/channel_trace.cc +8 -13
  263. data/src/core/lib/channel/channel_trace.h +6 -3
  264. data/src/core/lib/channel/channelz.cc +10 -14
  265. data/src/core/lib/channel/channelz.h +15 -7
  266. data/src/core/lib/channel/channelz_registry.cc +11 -19
  267. data/src/core/lib/channel/channelz_registry.h +10 -9
  268. data/src/core/lib/channel/connected_channel.cc +22 -31
  269. data/src/core/lib/channel/connected_channel.h +2 -0
  270. data/src/core/lib/channel/promise_based_filter.cc +451 -190
  271. data/src/core/lib/channel/promise_based_filter.h +162 -27
  272. data/src/core/lib/channel/status_util.cc +2 -0
  273. data/src/core/lib/channel/status_util.h +0 -3
  274. data/src/core/lib/compression/compression.cc +6 -1
  275. data/src/core/lib/compression/compression_internal.cc +48 -16
  276. data/src/core/lib/compression/compression_internal.h +4 -3
  277. data/src/core/lib/compression/message_compress.cc +3 -1
  278. data/src/core/lib/compression/message_compress.h +2 -3
  279. data/src/core/lib/config/core_configuration.cc +3 -0
  280. data/src/core/lib/config/core_configuration.h +2 -1
  281. data/src/core/lib/debug/stats.cc +9 -9
  282. data/src/core/lib/debug/stats.h +2 -1
  283. data/src/core/lib/debug/stats_data.cc +2 -1
  284. data/src/core/lib/debug/stats_data.h +0 -4
  285. data/src/core/lib/debug/trace.h +13 -12
  286. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  287. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  288. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  289. data/src/core/lib/event_engine/event_engine.cc +29 -14
  290. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  291. data/src/core/lib/event_engine/handle_containers.h +67 -0
  292. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.cc +159 -0
  293. data/src/core/lib/event_engine/iomgr_engine/iomgr_engine.h +122 -0
  294. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  295. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  296. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  297. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  298. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  299. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  300. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  301. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  302. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  303. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  304. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  305. data/src/core/lib/{iomgr/event_engine → event_engine}/promise.h +27 -9
  306. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  307. data/src/core/lib/event_engine/slice.cc +102 -0
  308. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  309. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  310. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  311. data/src/core/lib/gpr/log.cc +5 -0
  312. data/src/core/lib/gpr/time_posix.cc +6 -9
  313. data/src/core/lib/gpr/time_windows.cc +10 -7
  314. data/src/core/lib/gpr/tls.h +3 -5
  315. data/src/core/lib/gprpp/bitset.h +5 -1
  316. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  317. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  318. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  319. data/src/core/lib/gprpp/examine_stack.h +0 -1
  320. data/src/core/lib/gprpp/fork.cc +3 -6
  321. data/src/core/lib/gprpp/global_config.h +2 -4
  322. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  323. data/src/core/lib/gprpp/global_config_env.h +3 -1
  324. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  325. data/src/core/lib/gprpp/host_port.cc +2 -0
  326. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  327. data/src/core/lib/gprpp/match.h +2 -0
  328. data/src/core/lib/gprpp/memory.h +1 -5
  329. data/src/core/lib/gprpp/orphanable.h +1 -4
  330. data/src/core/lib/gprpp/ref_counted.h +1 -3
  331. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  332. data/src/core/lib/gprpp/stat.h +0 -2
  333. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  334. data/src/core/lib/gprpp/status_helper.cc +50 -32
  335. data/src/core/lib/gprpp/status_helper.h +4 -0
  336. data/src/core/lib/gprpp/sync.h +3 -1
  337. data/src/core/lib/gprpp/table.h +10 -0
  338. data/src/core/lib/gprpp/thd.h +2 -5
  339. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  340. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  341. data/src/core/lib/gprpp/time.cc +16 -0
  342. data/src/core/lib/gprpp/time.h +10 -1
  343. data/src/core/lib/gprpp/time_util.cc +4 -0
  344. data/src/core/lib/gprpp/time_util.h +1 -1
  345. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  346. data/src/core/lib/http/format_request.cc +34 -4
  347. data/src/core/lib/http/format_request.h +3 -1
  348. data/src/core/lib/http/httpcli.cc +106 -93
  349. data/src/core/lib/http/httpcli.h +58 -10
  350. data/src/core/lib/http/httpcli_security_connector.cc +19 -8
  351. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  352. data/src/core/lib/http/parser.cc +6 -7
  353. data/src/core/lib/http/parser.h +3 -0
  354. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  355. data/src/core/lib/iomgr/endpoint.cc +4 -4
  356. data/src/core/lib/iomgr/endpoint.h +7 -5
  357. data/src/core/lib/iomgr/endpoint_cfstream.cc +9 -6
  358. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  359. data/src/core/lib/iomgr/error.cc +11 -9
  360. data/src/core/lib/iomgr/error.h +9 -5
  361. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  362. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  363. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  364. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  365. data/src/core/lib/iomgr/ev_posix.cc +55 -96
  366. data/src/core/lib/iomgr/ev_posix.h +5 -3
  367. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  368. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  369. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  370. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  371. data/src/core/lib/iomgr/iomgr.cc +7 -1
  372. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  373. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  374. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  375. data/src/core/lib/iomgr/load_file.cc +1 -1
  376. data/src/core/lib/iomgr/pollset_set.h +1 -2
  377. data/src/core/lib/iomgr/port.h +25 -6
  378. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  379. data/src/core/lib/iomgr/resolve_address.h +21 -14
  380. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  381. data/src/core/lib/iomgr/resolve_address_posix.cc +9 -15
  382. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  383. data/src/core/lib/iomgr/resolve_address_windows.cc +8 -15
  384. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  385. data/src/core/lib/iomgr/sockaddr.h +2 -3
  386. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  387. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  388. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  389. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  390. data/src/core/lib/iomgr/tcp_client.h +24 -13
  391. data/src/core/lib/iomgr/tcp_client_cfstream.cc +24 -10
  392. data/src/core/lib/iomgr/tcp_client_posix.cc +154 -29
  393. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  394. data/src/core/lib/iomgr/tcp_client_windows.cc +27 -16
  395. data/src/core/lib/iomgr/tcp_posix.cc +96 -52
  396. data/src/core/lib/iomgr/tcp_server_posix.cc +33 -19
  397. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +41 -38
  398. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +9 -6
  399. data/src/core/lib/iomgr/tcp_server_windows.cc +20 -12
  400. data/src/core/lib/iomgr/tcp_windows.cc +12 -9
  401. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  402. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  403. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  404. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  405. data/src/core/lib/iomgr/work_serializer.h +2 -3
  406. data/src/core/lib/json/json.h +1 -2
  407. data/src/core/lib/json/json_reader.cc +9 -1
  408. data/src/core/lib/json/json_util.cc +7 -0
  409. data/src/core/lib/json/json_util.h +10 -1
  410. data/src/core/lib/json/json_writer.cc +6 -1
  411. data/src/core/lib/matchers/matchers.cc +6 -3
  412. data/src/core/lib/matchers/matchers.h +2 -0
  413. data/src/core/lib/promise/activity.cc +1 -2
  414. data/src/core/lib/promise/activity.h +13 -19
  415. data/src/core/lib/promise/arena_promise.h +11 -1
  416. data/src/core/lib/promise/call_push_pull.h +4 -0
  417. data/src/core/lib/promise/context.h +1 -1
  418. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  419. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  420. data/src/core/lib/promise/latch.h +0 -1
  421. data/src/core/lib/promise/loop.h +2 -0
  422. data/src/core/lib/promise/promise.h +1 -0
  423. data/src/core/lib/promise/race.h +0 -1
  424. data/src/core/lib/promise/seq.h +0 -2
  425. data/src/core/lib/promise/sleep.cc +38 -31
  426. data/src/core/lib/promise/sleep.h +32 -22
  427. data/src/core/lib/promise/try_seq.h +2 -2
  428. data/src/core/lib/resolver/resolver.cc +5 -0
  429. data/src/core/lib/resolver/resolver.h +3 -0
  430. data/src/core/lib/resolver/resolver_factory.h +6 -4
  431. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  432. data/src/core/lib/resolver/resolver_registry.h +12 -1
  433. data/src/core/lib/resolver/server_address.cc +17 -3
  434. data/src/core/lib/resolver/server_address.h +13 -6
  435. data/src/core/lib/resource_quota/api.cc +14 -1
  436. data/src/core/lib/resource_quota/api.h +4 -1
  437. data/src/core/lib/resource_quota/arena.cc +0 -6
  438. data/src/core/lib/resource_quota/arena.h +1 -2
  439. data/src/core/lib/resource_quota/memory_quota.cc +62 -62
  440. data/src/core/lib/resource_quota/memory_quota.h +35 -30
  441. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  442. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  443. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  444. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  445. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  446. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  447. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  448. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  449. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  450. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +15 -0
  451. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  452. data/src/core/lib/security/authorization/matchers.cc +9 -1
  453. data/src/core/lib/security/authorization/matchers.h +7 -0
  454. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  455. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  456. data/src/core/lib/security/context/security_context.cc +5 -2
  457. data/src/core/lib/security/context/security_context.h +14 -2
  458. data/src/core/lib/security/credentials/alts/alts_credentials.cc +12 -4
  459. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -3
  460. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  461. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  462. data/src/core/lib/security/credentials/call_creds_util.cc +10 -0
  463. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  464. data/src/core/lib/security/credentials/channel_creds_registry.h +7 -1
  465. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  466. data/src/core/lib/security/credentials/composite/composite_credentials.cc +11 -7
  467. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -6
  468. data/src/core/lib/security/credentials/credentials.cc +4 -8
  469. data/src/core/lib/security/credentials/credentials.h +27 -18
  470. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +108 -9
  471. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +18 -0
  472. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  473. data/src/core/lib/security/credentials/external/external_account_credentials.cc +27 -9
  474. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  475. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  476. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  477. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +22 -4
  478. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  479. data/src/core/lib/security/credentials/fake/fake_credentials.cc +21 -9
  480. data/src/core/lib/security/credentials/fake/fake_credentials.h +15 -3
  481. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  482. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +51 -24
  483. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +12 -3
  484. data/src/core/lib/security/credentials/iam/iam_credentials.cc +13 -4
  485. data/src/core/lib/security/credentials/iam/iam_credentials.h +12 -2
  486. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +12 -2
  487. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +9 -4
  488. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  489. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  490. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +14 -7
  491. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +16 -2
  492. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  493. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  494. data/src/core/lib/security/credentials/local/local_credentials.cc +12 -5
  495. data/src/core/lib/security/credentials/local/local_credentials.h +9 -2
  496. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +36 -19
  497. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -4
  498. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +12 -8
  499. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +25 -1
  500. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +13 -2
  501. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +17 -4
  502. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  503. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  504. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +39 -10
  505. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +14 -11
  506. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +35 -3
  507. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +34 -11
  508. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  509. data/src/core/lib/security/credentials/tls/tls_credentials.cc +17 -2
  510. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -3
  511. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  512. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  513. data/src/core/lib/security/credentials/xds/xds_credentials.cc +20 -4
  514. data/src/core/lib/security/credentials/xds/xds_credentials.h +19 -5
  515. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  516. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  517. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +18 -2
  518. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  519. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  520. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  521. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  522. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  523. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  524. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  525. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  526. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  527. data/src/core/lib/security/security_connector/security_connector.h +19 -7
  528. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +19 -7
  529. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  530. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  531. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  532. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  533. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  534. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  535. data/src/core/lib/security/transport/auth_filters.h +7 -0
  536. data/src/core/lib/security/transport/client_auth_filter.cc +24 -17
  537. data/src/core/lib/security/transport/secure_endpoint.cc +81 -20
  538. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  539. data/src/core/lib/security/transport/security_handshaker.cc +49 -16
  540. data/src/core/lib/security/transport/security_handshaker.h +5 -1
  541. data/src/core/lib/security/transport/server_auth_filter.cc +29 -6
  542. data/src/core/lib/security/util/json_util.cc +3 -2
  543. data/src/core/lib/security/util/json_util.h +0 -2
  544. data/src/core/lib/service_config/service_config.h +4 -8
  545. data/src/core/lib/service_config/service_config_call_data.h +6 -2
  546. data/src/core/lib/service_config/service_config_impl.cc +13 -6
  547. data/src/core/lib/service_config/service_config_impl.h +9 -4
  548. data/src/core/lib/service_config/service_config_parser.cc +8 -2
  549. data/src/core/lib/service_config/service_config_parser.h +7 -0
  550. data/src/core/lib/slice/b64.cc +1 -1
  551. data/src/core/lib/slice/b64.h +2 -0
  552. data/src/core/lib/slice/percent_encoding.cc +4 -1
  553. data/src/core/lib/slice/percent_encoding.h +0 -6
  554. data/src/core/lib/slice/slice.cc +2 -1
  555. data/src/core/lib/slice/slice.h +10 -5
  556. data/src/core/lib/slice/slice_api.cc +1 -1
  557. data/src/core/lib/slice/slice_buffer.cc +79 -23
  558. data/src/core/lib/slice/slice_buffer.h +137 -0
  559. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  560. data/src/core/lib/slice/slice_internal.h +4 -3
  561. data/src/core/lib/slice/slice_refcount.h +2 -3
  562. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  563. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  564. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  565. data/src/core/lib/surface/builtins.cc +7 -2
  566. data/src/core/lib/surface/byte_buffer.cc +7 -1
  567. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  568. data/src/core/lib/surface/call.cc +90 -137
  569. data/src/core/lib/surface/call.h +21 -3
  570. data/src/core/lib/surface/call_details.cc +4 -4
  571. data/src/core/lib/surface/call_log_batch.cc +7 -1
  572. data/src/core/lib/surface/call_test_only.h +4 -1
  573. data/src/core/lib/surface/channel.cc +179 -242
  574. data/src/core/lib/surface/channel.h +97 -58
  575. data/src/core/lib/surface/channel_init.h +2 -0
  576. data/src/core/lib/surface/channel_ping.cc +8 -2
  577. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  578. data/src/core/lib/surface/channel_stack_type.h +0 -2
  579. data/src/core/lib/surface/completion_queue.cc +29 -20
  580. data/src/core/lib/surface/completion_queue.h +7 -2
  581. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  582. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  583. data/src/core/lib/surface/event_string.cc +1 -7
  584. data/src/core/lib/surface/event_string.h +1 -1
  585. data/src/core/lib/surface/init.cc +17 -46
  586. data/src/core/lib/surface/init.h +0 -8
  587. data/src/core/lib/surface/lame_client.cc +63 -109
  588. data/src/core/lib/surface/lame_client.h +41 -3
  589. data/src/core/lib/surface/metadata_array.cc +2 -0
  590. data/src/core/lib/surface/server.cc +83 -64
  591. data/src/core/lib/surface/server.h +42 -9
  592. data/src/core/lib/surface/validate_metadata.cc +3 -6
  593. data/src/core/lib/surface/validate_metadata.h +3 -0
  594. data/src/core/lib/surface/version.cc +2 -2
  595. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  596. data/src/core/lib/transport/bdp_estimator.h +2 -3
  597. data/src/core/lib/transport/connectivity_state.cc +6 -4
  598. data/src/core/lib/transport/connectivity_state.h +2 -3
  599. data/src/core/lib/transport/error_utils.cc +16 -8
  600. data/src/core/lib/transport/error_utils.h +5 -1
  601. data/src/core/lib/{channel → transport}/handshaker.cc +12 -7
  602. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  603. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  604. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  605. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  606. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +28 -14
  607. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  608. data/src/core/lib/transport/metadata_batch.cc +287 -0
  609. data/src/core/lib/transport/metadata_batch.h +133 -264
  610. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  611. data/src/core/lib/transport/parsed_metadata.h +10 -3
  612. data/src/core/lib/transport/status_conversion.cc +2 -0
  613. data/src/core/lib/transport/status_conversion.h +2 -2
  614. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  615. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  616. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  617. data/src/core/lib/transport/timeout_encoding.h +5 -1
  618. data/src/core/lib/transport/transport.cc +18 -20
  619. data/src/core/lib/transport/transport.h +48 -16
  620. data/src/core/lib/transport/transport_fwd.h +20 -0
  621. data/src/core/lib/transport/transport_impl.h +11 -0
  622. data/src/core/lib/transport/transport_op_string.cc +17 -18
  623. data/src/core/lib/uri/uri_parser.cc +11 -3
  624. data/src/core/lib/uri/uri_parser.h +0 -2
  625. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  626. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  627. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  628. data/src/core/tsi/fake_transport_security.cc +13 -1
  629. data/src/core/tsi/fake_transport_security.h +6 -0
  630. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  631. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  632. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  633. data/src/core/tsi/ssl_transport_security.cc +1 -1
  634. data/src/core/tsi/transport_security_grpc.cc +3 -2
  635. data/src/core/tsi/transport_security_grpc.h +5 -2
  636. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  637. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  638. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  639. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  640. data/src/ruby/ext/grpc/extconf.rb +50 -19
  641. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  642. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  643. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  644. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  645. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  646. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  647. data/src/ruby/lib/grpc/errors.rb +1 -1
  648. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  649. data/src/ruby/lib/grpc/version.rb +1 -1
  650. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  651. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  652. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  653. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  654. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  655. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  656. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  657. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  658. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  659. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  660. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  661. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  662. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  663. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  664. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  665. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  666. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  667. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  668. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  669. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  670. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  671. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  672. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  673. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  674. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  675. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  676. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  677. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  678. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  679. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  680. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  681. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  682. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  683. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  684. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  685. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  686. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  687. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  688. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  689. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  690. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  691. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  692. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  693. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  694. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  695. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  696. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  697. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  698. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  699. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  700. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  701. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  702. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  703. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  704. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  705. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  706. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  707. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  708. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  709. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  710. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  711. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  712. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  713. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  714. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  715. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  716. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  717. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  718. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  719. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  720. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  721. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  722. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  723. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  724. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  725. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  726. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  727. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  728. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  729. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  730. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  731. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  732. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  733. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  734. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  735. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  736. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  737. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  738. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  739. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  740. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  741. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  742. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  743. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  744. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  745. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  746. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  747. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  748. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  749. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  750. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  751. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  752. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  753. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  754. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  755. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  756. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  757. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  758. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  759. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  760. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  761. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  762. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  763. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  764. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  765. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  766. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  767. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  768. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  769. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  770. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  771. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  772. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  773. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  774. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  775. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  776. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  777. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  778. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  779. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  780. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  781. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  782. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  783. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  784. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  785. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  786. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  787. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  788. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  789. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  790. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  791. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  792. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  793. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  794. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  795. metadata +69 -38
  796. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  797. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  798. data/src/core/lib/event_engine/sockaddr.h +0 -44
  799. data/src/core/lib/gprpp/capture.h +0 -76
  800. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  801. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  802. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  803. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  804. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  805. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  806. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  807. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  808. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  809. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  810. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  811. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  812. data/src/core/lib/slice/slice_split.cc +0 -100
  813. data/src/core/lib/slice/slice_split.h +0 -40
  814. data/src/core/lib/transport/byte_stream.cc +0 -164
  815. data/src/core/lib/transport/byte_stream.h +0 -166
  816. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -21,12 +21,20 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <assert.h>
25
- #include <stdbool.h>
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
27
+ #include <string>
28
+
29
+ #include "absl/strings/string_view.h"
30
+ #include "absl/types/optional.h"
31
+
32
+ #include <grpc/event_engine/memory_allocator.h>
33
+ #include <grpc/impl/codegen/grpc_types.h>
34
+ #include <grpc/slice.h>
26
35
 
27
36
  #include "src/core/ext/transport/chttp2/transport/flow_control.h"
28
37
  #include "src/core/ext/transport/chttp2/transport/frame.h"
29
- #include "src/core/ext/transport/chttp2/transport/frame_data.h"
30
38
  #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
31
39
  #include "src/core/ext/transport/chttp2/transport/frame_ping.h"
32
40
  #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
@@ -34,15 +42,27 @@
34
42
  #include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
35
43
  #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
36
44
  #include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
45
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
37
46
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
38
47
  #include "src/core/lib/channel/channelz.h"
39
- #include "src/core/lib/gprpp/manual_constructor.h"
48
+ #include "src/core/lib/debug/trace.h"
49
+ #include "src/core/lib/gprpp/bitset.h"
50
+ #include "src/core/lib/gprpp/debug_location.h"
51
+ #include "src/core/lib/gprpp/ref_counted.h"
52
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
53
+ #include "src/core/lib/gprpp/time.h"
54
+ #include "src/core/lib/iomgr/closure.h"
40
55
  #include "src/core/lib/iomgr/combiner.h"
41
56
  #include "src/core/lib/iomgr/endpoint.h"
57
+ #include "src/core/lib/iomgr/error.h"
42
58
  #include "src/core/lib/iomgr/timer.h"
59
+ #include "src/core/lib/resource_quota/arena.h"
43
60
  #include "src/core/lib/resource_quota/memory_quota.h"
61
+ #include "src/core/lib/slice/slice_buffer.h"
44
62
  #include "src/core/lib/transport/connectivity_state.h"
45
63
  #include "src/core/lib/transport/metadata_batch.h"
64
+ #include "src/core/lib/transport/transport.h"
65
+ #include "src/core/lib/transport/transport_fwd.h"
46
66
  #include "src/core/lib/transport/transport_impl.h"
47
67
 
48
68
  namespace grpc_core {
@@ -208,76 +228,6 @@ typedef struct grpc_chttp2_write_cb {
208
228
  struct grpc_chttp2_write_cb* next;
209
229
  } grpc_chttp2_write_cb;
210
230
 
211
- namespace grpc_core {
212
-
213
- class Chttp2IncomingByteStream : public ByteStream {
214
- public:
215
- Chttp2IncomingByteStream(grpc_chttp2_transport* transport,
216
- grpc_chttp2_stream* stream, uint32_t frame_size,
217
- uint32_t flags);
218
-
219
- void Orphan() override;
220
-
221
- bool Next(size_t max_size_hint, grpc_closure* on_complete) override;
222
- grpc_error_handle Pull(grpc_slice* slice) override;
223
- void Shutdown(grpc_error_handle error) override;
224
-
225
- // TODO(roth): When I converted this class to C++, I wanted to make it
226
- // inherit from RefCounted or InternallyRefCounted instead of continuing
227
- // to use its own custom ref-counting code. However, that would require
228
- // using multiple inheritance, which sucks in general. And to make matters
229
- // worse, it causes problems with our New<> and Delete<> wrappers.
230
- // Specifically, unless RefCounted is first in the list of parent classes,
231
- // it will see a different value of the address of the object than the one
232
- // we actually allocated, in which case gpr_free() will be called on a
233
- // different address than the one we got from gpr_malloc(), thus causing a
234
- // crash. Given the fragility of depending on that, as well as a desire to
235
- // avoid multiple inheritance in general, I've decided to leave this
236
- // alone for now. We can revisit this once we're able to link against
237
- // libc++, at which point we can eliminate New<> and Delete<> and
238
- // switch to std::shared_ptr<>.
239
- void Ref() { refs_.Ref(); }
240
- void Unref() {
241
- if (GPR_UNLIKELY(refs_.Unref())) {
242
- delete this;
243
- }
244
- }
245
-
246
- void PublishError(grpc_error_handle error);
247
-
248
- grpc_error_handle Push(const grpc_slice& slice, grpc_slice* slice_out);
249
-
250
- grpc_error_handle Finished(grpc_error_handle error, bool reset_on_error);
251
-
252
- uint32_t remaining_bytes() const { return remaining_bytes_; }
253
-
254
- private:
255
- static void NextLocked(void* arg, grpc_error_handle error_ignored);
256
- static void OrphanLocked(void* arg, grpc_error_handle error_ignored);
257
-
258
- grpc_chttp2_transport* transport_; // Immutable.
259
- grpc_chttp2_stream* stream_; // Immutable.
260
-
261
- RefCount refs_;
262
-
263
- /* Accessed only by transport thread when stream->pending_byte_stream == false
264
- * Accessed only by application thread when stream->pending_byte_stream ==
265
- * true */
266
- uint32_t remaining_bytes_;
267
-
268
- /* Accessed only by transport thread when stream->pending_byte_stream == false
269
- * Accessed only by application thread when stream->pending_byte_stream ==
270
- * true */
271
- struct {
272
- grpc_closure closure;
273
- size_t max_size_hint;
274
- grpc_closure* on_complete;
275
- } next_action_;
276
- grpc_closure destroy_action_;
277
- };
278
-
279
- } // namespace grpc_core
280
-
281
231
  typedef enum {
282
232
  GRPC_CHTTP2_KEEPALIVE_STATE_WAITING,
283
233
  GRPC_CHTTP2_KEEPALIVE_STATE_PINGING,
@@ -406,11 +356,7 @@ struct grpc_chttp2_transport {
406
356
  /** parser for goaway frames */
407
357
  grpc_chttp2_goaway_parser goaway_parser;
408
358
 
409
- grpc_core::PolymorphicManualConstructor<
410
- grpc_core::chttp2::TransportFlowControlBase,
411
- grpc_core::chttp2::TransportFlowControl,
412
- grpc_core::chttp2::TransportFlowControlDisabled>
413
- flow_control;
359
+ grpc_core::chttp2::TransportFlowControl flow_control;
414
360
  /** initial window change. This is tracked as we parse settings frames from
415
361
  * the remote peer. If there is a positive delta, then we will make all
416
362
  * streams readable since they may have become unstalled */
@@ -526,7 +472,7 @@ struct grpc_chttp2_stream {
526
472
  grpc_closure* destroy_stream_arg;
527
473
 
528
474
  grpc_chttp2_stream_link links[STREAM_LIST_COUNT];
529
- uint8_t included[STREAM_LIST_COUNT] = {};
475
+ grpc_core::BitSet<STREAM_LIST_COUNT> included;
530
476
 
531
477
  /** HTTP2 stream id for this stream, or zero if one has not been assigned */
532
478
  uint32_t id = 0;
@@ -544,19 +490,16 @@ struct grpc_chttp2_stream {
544
490
  bool* sent_trailing_metadata_op = nullptr;
545
491
  grpc_closure* send_trailing_metadata_finished = nullptr;
546
492
 
547
- grpc_core::OrphanablePtr<grpc_core::ByteStream> fetching_send_message;
548
- uint32_t fetched_send_message_length = 0;
549
- grpc_slice fetching_slice = grpc_empty_slice();
550
493
  int64_t next_message_end_offset;
551
494
  int64_t flow_controlled_bytes_written = 0;
552
495
  int64_t flow_controlled_bytes_flowed = 0;
553
- grpc_closure complete_fetch_locked;
554
- grpc_closure* fetching_send_message_finished = nullptr;
496
+ grpc_closure* send_message_finished = nullptr;
555
497
 
556
498
  grpc_metadata_batch* recv_initial_metadata;
557
499
  grpc_closure* recv_initial_metadata_ready = nullptr;
558
500
  bool* trailing_metadata_available = nullptr;
559
- 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;
560
503
  bool* call_failed_before_recv_message = nullptr;
561
504
  grpc_closure* recv_message_ready = nullptr;
562
505
  grpc_metadata_batch* recv_trailing_metadata;
@@ -593,22 +536,7 @@ struct grpc_chttp2_stream {
593
536
  grpc_metadata_batch initial_metadata_buffer;
594
537
  grpc_metadata_batch trailing_metadata_buffer;
595
538
 
596
- grpc_slice_buffer frame_storage; /* protected by t combiner */
597
-
598
- grpc_closure* on_next = nullptr; /* protected by t combiner */
599
- bool pending_byte_stream = false; /* protected by t combiner */
600
- // cached length of buffer to be used by the transport thread in cases where
601
- // stream->pending_byte_stream == true. The value is saved before
602
- // application threads are allowed to modify
603
- // unprocessed_incoming_frames_buffer
604
- size_t unprocessed_incoming_frames_buffer_cached_length = 0;
605
- /* Accessed only by transport thread when stream->pending_byte_stream == false
606
- * Accessed only by application thread when stream->pending_byte_stream ==
607
- * true */
608
- grpc_slice_buffer unprocessed_incoming_frames_buffer;
609
- grpc_closure reset_byte_stream;
610
- grpc_error_handle byte_stream_error =
611
- GRPC_ERROR_NONE; /* protected by t combiner */
539
+ grpc_slice_buffer frame_storage; /* protected by t combiner */
612
540
  bool received_last_frame = false; /* protected by t combiner */
613
541
 
614
542
  grpc_core::Timestamp deadline = grpc_core::Timestamp::InfFuture();
@@ -617,22 +545,13 @@ struct grpc_chttp2_stream {
617
545
  grpc_error_handle forced_close_error = GRPC_ERROR_NONE;
618
546
  /** how many header frames have we received? */
619
547
  uint8_t header_frames_received = 0;
620
- /** parsing state for data frames */
621
- /* Accessed only by transport thread when stream->pending_byte_stream == false
622
- * Accessed only by application thread when stream->pending_byte_stream ==
623
- * true */
624
- grpc_chttp2_data_parser data_parser;
625
548
  /** number of bytes received - reset at end of parse thread execution */
626
549
  int64_t received_bytes = 0;
627
550
 
628
551
  bool sent_initial_metadata = false;
629
552
  bool sent_trailing_metadata = false;
630
553
 
631
- grpc_core::PolymorphicManualConstructor<
632
- grpc_core::chttp2::StreamFlowControlBase,
633
- grpc_core::chttp2::StreamFlowControl,
634
- grpc_core::chttp2::StreamFlowControlDisabled>
635
- flow_control;
554
+ grpc_core::chttp2::StreamFlowControl flow_control;
636
555
 
637
556
  grpc_slice_buffer flow_controlled_buffer;
638
557
 
@@ -18,21 +18,43 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <stdint.h>
21
22
  #include <string.h>
22
23
 
24
+ #include <string>
25
+
26
+ #include "absl/base/attributes.h"
27
+ #include "absl/status/status.h"
23
28
  #include "absl/strings/str_cat.h"
24
29
  #include "absl/strings/str_format.h"
25
30
 
26
- #include <grpc/support/alloc.h>
31
+ #include <grpc/slice.h>
27
32
  #include <grpc/support/log.h>
28
33
 
34
+ #include "src/core/ext/transport/chttp2/transport/flow_control.h"
35
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
36
+ #include "src/core/ext/transport/chttp2/transport/frame_data.h"
37
+ #include "src/core/ext/transport/chttp2/transport/frame_goaway.h"
38
+ #include "src/core/ext/transport/chttp2/transport/frame_ping.h"
39
+ #include "src/core/ext/transport/chttp2/transport/frame_rst_stream.h"
40
+ #include "src/core/ext/transport/chttp2/transport/frame_settings.h"
41
+ #include "src/core/ext/transport/chttp2/transport/frame_window_update.h"
42
+ #include "src/core/ext/transport/chttp2/transport/hpack_encoder.h"
43
+ #include "src/core/ext/transport/chttp2/transport/hpack_parser.h"
44
+ #include "src/core/ext/transport/chttp2/transport/hpack_parser_table.h"
45
+ #include "src/core/ext/transport/chttp2/transport/http2_settings.h"
29
46
  #include "src/core/ext/transport/chttp2/transport/internal.h"
30
- #include "src/core/lib/profiling/timers.h"
31
- #include "src/core/lib/slice/slice_internal.h"
32
- #include "src/core/lib/slice/slice_string_helpers.h"
47
+ #include "src/core/ext/transport/chttp2/transport/stream_map.h"
48
+ #include "src/core/lib/channel/channelz.h"
49
+ #include "src/core/lib/debug/trace.h"
50
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
51
+ #include "src/core/lib/gprpp/time.h"
52
+ #include "src/core/lib/iomgr/error.h"
53
+ #include "src/core/lib/transport/bdp_estimator.h"
54
+ #include "src/core/lib/transport/error_utils.h"
33
55
  #include "src/core/lib/transport/http2_errors.h"
34
- #include "src/core/lib/transport/status_conversion.h"
35
- #include "src/core/lib/transport/timeout_encoding.h"
56
+ #include "src/core/lib/transport/metadata_batch.h"
57
+ #include "src/core/lib/transport/transport.h"
36
58
 
37
59
  using grpc_core::HPackParser;
38
60
 
@@ -53,6 +75,10 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
53
75
  const grpc_slice& slice,
54
76
  int is_last);
55
77
 
78
+ static char get_utf8_safe_char(char c) {
79
+ return static_cast<unsigned char>(c) < 128 ? c : 32;
80
+ }
81
+
56
82
  grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
57
83
  const grpc_slice& slice) {
58
84
  const uint8_t* beg = GRPC_SLICE_START_PTR(slice);
@@ -92,10 +118,12 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
92
118
  return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrFormat(
93
119
  "Connect string mismatch: expected '%c' (%d) got '%c' (%d) "
94
120
  "at byte %d",
95
- GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state],
121
+ get_utf8_safe_char(
122
+ GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state]),
96
123
  static_cast<int>(static_cast<uint8_t>(
97
124
  GRPC_CHTTP2_CLIENT_CONNECT_STRING[t->deframe_state])),
98
- *cur, static_cast<int>(*cur), t->deframe_state));
125
+ get_utf8_safe_char(*cur), static_cast<int>(*cur),
126
+ t->deframe_state));
99
127
  }
100
128
  ++cur;
101
129
  // NOLINTNEXTLINE(bugprone-misplaced-widening-cast)
@@ -176,12 +204,12 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
176
204
  t->incoming_stream_id |= (static_cast<uint32_t>(*cur));
177
205
  t->deframe_state = GRPC_DTS_FRAME;
178
206
  err = init_frame_parser(t);
179
- if (err != GRPC_ERROR_NONE) {
207
+ if (!GRPC_ERROR_IS_NONE(err)) {
180
208
  return err;
181
209
  }
182
210
  if (t->incoming_frame_size == 0) {
183
211
  err = parse_frame_slice(t, grpc_empty_slice(), 1);
184
- if (err != GRPC_ERROR_NONE) {
212
+ if (!GRPC_ERROR_IS_NONE(err)) {
185
213
  return err;
186
214
  }
187
215
  t->incoming_stream = nullptr;
@@ -190,10 +218,9 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
190
218
  return GRPC_ERROR_NONE;
191
219
  }
192
220
  goto dts_fh_0; /* loop */
193
- } else if (t->flow_control->flow_control_enabled() &&
194
- t->incoming_frame_size >
195
- t->settings[GRPC_ACKED_SETTINGS]
196
- [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]) {
197
224
  return GRPC_ERROR_CREATE_FROM_CPP_STRING(
198
225
  absl::StrFormat("Frame size %d is larger than max frame size %d",
199
226
  t->incoming_frame_size,
@@ -212,7 +239,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
212
239
  grpc_slice_sub_no_ref(slice, static_cast<size_t>(cur - beg),
213
240
  static_cast<size_t>(end - beg)),
214
241
  1);
215
- if (err != GRPC_ERROR_NONE) {
242
+ if (!GRPC_ERROR_IS_NONE(err)) {
216
243
  return err;
217
244
  }
218
245
  t->deframe_state = GRPC_DTS_FH_0;
@@ -225,7 +252,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
225
252
  grpc_slice_sub_no_ref(slice, cur_offset,
226
253
  cur_offset + t->incoming_frame_size),
227
254
  1);
228
- if (err != GRPC_ERROR_NONE) {
255
+ if (!GRPC_ERROR_IS_NONE(err)) {
229
256
  return err;
230
257
  }
231
258
  cur += t->incoming_frame_size;
@@ -237,7 +264,7 @@ grpc_error_handle grpc_chttp2_perform_read(grpc_chttp2_transport* t,
237
264
  grpc_slice_sub_no_ref(slice, static_cast<size_t>(cur - beg),
238
265
  static_cast<size_t>(end - beg)),
239
266
  0);
240
- if (err != GRPC_ERROR_NONE) {
267
+ if (!GRPC_ERROR_IS_NONE(err)) {
241
268
  return err;
242
269
  }
243
270
  t->incoming_frame_size -= static_cast<uint32_t>(end - cur);
@@ -357,7 +384,7 @@ void grpc_chttp2_parsing_become_skip_parser(grpc_chttp2_transport* t) {
357
384
 
358
385
  static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
359
386
  // Update BDP accounting since we have received a data frame.
360
- grpc_core::BdpEstimator* bdp_est = t->flow_control->bdp_estimator();
387
+ grpc_core::BdpEstimator* bdp_est = t->flow_control.bdp_estimator();
361
388
  if (bdp_est) {
362
389
  if (t->bdp_ping_blocked) {
363
390
  t->bdp_ping_blocked = false;
@@ -368,17 +395,21 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
368
395
  }
369
396
  grpc_chttp2_stream* s =
370
397
  grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
371
- grpc_error_handle err = GRPC_ERROR_NONE;
398
+ absl::Status status;
372
399
  grpc_core::chttp2::FlowControlAction action;
373
400
  if (s == nullptr) {
374
- err = t->flow_control->RecvData(t->incoming_frame_size);
375
- 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();
376
405
  } else {
377
- err = s->flow_control->RecvData(t->incoming_frame_size);
378
- 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();
379
410
  }
380
411
  grpc_chttp2_act_on_flowctl_action(action, t, s);
381
- if (err != GRPC_ERROR_NONE) {
412
+ if (!status.ok()) {
382
413
  goto error_handler;
383
414
  }
384
415
  if (s == nullptr) {
@@ -386,33 +417,29 @@ static grpc_error_handle init_data_frame_parser(grpc_chttp2_transport* t) {
386
417
  }
387
418
  s->received_bytes += t->incoming_frame_size;
388
419
  s->stats.incoming.framing_bytes += 9;
389
- if (err == GRPC_ERROR_NONE && s->read_closed) {
420
+ if (s->read_closed) {
390
421
  return init_non_header_skip_frame_parser(t);
391
422
  }
392
- if (err == GRPC_ERROR_NONE) {
393
- err = grpc_chttp2_data_parser_begin_frame(
394
- &s->data_parser, t->incoming_frame_flags, s->id, s);
395
- }
423
+ status =
424
+ grpc_chttp2_data_parser_begin_frame(t->incoming_frame_flags, s->id, s);
396
425
  error_handler:
397
- intptr_t unused;
398
- if (err == GRPC_ERROR_NONE) {
426
+ if (status.ok()) {
399
427
  t->incoming_stream = s;
400
428
  /* t->parser = grpc_chttp2_data_parser_parse;*/
401
429
  t->parser = grpc_chttp2_data_parser_parse;
402
- t->parser_data = &s->data_parser;
430
+ t->parser_data = nullptr;
403
431
  t->ping_state.last_ping_sent_time = grpc_core::Timestamp::InfPast();
404
432
  return GRPC_ERROR_NONE;
405
- } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, &unused)) {
433
+ } else if (s != nullptr) {
406
434
  /* handle stream errors by closing the stream */
407
- if (s != nullptr) {
408
- grpc_chttp2_mark_stream_closed(t, s, true, false, err);
409
- }
435
+ grpc_chttp2_mark_stream_closed(t, s, true, false,
436
+ absl_status_to_grpc_error(status));
410
437
  grpc_chttp2_add_rst_stream_to_next_write(t, t->incoming_stream_id,
411
438
  GRPC_HTTP2_PROTOCOL_ERROR,
412
439
  &s->stats.outgoing);
413
440
  return init_non_header_skip_frame_parser(t);
414
441
  } else {
415
- return err;
442
+ return absl_status_to_grpc_error(status);
416
443
  }
417
444
  }
418
445
 
@@ -541,6 +568,10 @@ static grpc_error_handle init_header_frame_parser(grpc_chttp2_transport* t,
541
568
  gpr_log(GPR_ERROR, "too many header frames received");
542
569
  return init_header_skip_frame_parser(t, priority_type);
543
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
+ }
544
575
  t->hpack_parser.BeginFrame(
545
576
  incoming_metadata_buffer,
546
577
  t->settings[GRPC_ACKED_SETTINGS]
@@ -555,7 +586,7 @@ static grpc_error_handle init_window_update_frame_parser(
555
586
  grpc_error_handle err = grpc_chttp2_window_update_parser_begin_frame(
556
587
  &t->simple.window_update, t->incoming_frame_size,
557
588
  t->incoming_frame_flags);
558
- if (err != GRPC_ERROR_NONE) return err;
589
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
559
590
  if (t->incoming_stream_id != 0) {
560
591
  grpc_chttp2_stream* s = t->incoming_stream =
561
592
  grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
@@ -572,7 +603,7 @@ static grpc_error_handle init_window_update_frame_parser(
572
603
  static grpc_error_handle init_ping_parser(grpc_chttp2_transport* t) {
573
604
  grpc_error_handle err = grpc_chttp2_ping_parser_begin_frame(
574
605
  &t->simple.ping, t->incoming_frame_size, t->incoming_frame_flags);
575
- if (err != GRPC_ERROR_NONE) return err;
606
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
576
607
  t->parser = grpc_chttp2_ping_parser_parse;
577
608
  t->parser_data = &t->simple.ping;
578
609
  return GRPC_ERROR_NONE;
@@ -581,7 +612,7 @@ static grpc_error_handle init_ping_parser(grpc_chttp2_transport* t) {
581
612
  static grpc_error_handle init_rst_stream_parser(grpc_chttp2_transport* t) {
582
613
  grpc_error_handle err = grpc_chttp2_rst_stream_parser_begin_frame(
583
614
  &t->simple.rst_stream, t->incoming_frame_size, t->incoming_frame_flags);
584
- if (err != GRPC_ERROR_NONE) return err;
615
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
585
616
  grpc_chttp2_stream* s = t->incoming_stream =
586
617
  grpc_chttp2_parsing_lookup_stream(t, t->incoming_stream_id);
587
618
  if (!t->incoming_stream) {
@@ -596,7 +627,7 @@ static grpc_error_handle init_rst_stream_parser(grpc_chttp2_transport* t) {
596
627
  static grpc_error_handle init_goaway_parser(grpc_chttp2_transport* t) {
597
628
  grpc_error_handle err = grpc_chttp2_goaway_parser_begin_frame(
598
629
  &t->goaway_parser, t->incoming_frame_size, t->incoming_frame_flags);
599
- if (err != GRPC_ERROR_NONE) return err;
630
+ if (!GRPC_ERROR_IS_NONE(err)) return err;
600
631
  t->parser = grpc_chttp2_goaway_parser_parse;
601
632
  t->parser_data = &t->goaway_parser;
602
633
  return GRPC_ERROR_NONE;
@@ -611,7 +642,7 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
611
642
  grpc_error_handle err = grpc_chttp2_settings_parser_begin_frame(
612
643
  &t->simple.settings, t->incoming_frame_size, t->incoming_frame_flags,
613
644
  t->settings[GRPC_PEER_SETTINGS]);
614
- if (err != GRPC_ERROR_NONE) {
645
+ if (!GRPC_ERROR_IS_NONE(err)) {
615
646
  return err;
616
647
  }
617
648
  if (t->incoming_frame_flags & GRPC_CHTTP2_FLAG_ACK) {
@@ -620,6 +651,9 @@ static grpc_error_handle init_settings_frame_parser(grpc_chttp2_transport* t) {
620
651
  t->hpack_parser.hpack_table()->SetMaxBytes(
621
652
  t->settings[GRPC_ACKED_SETTINGS]
622
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]);
623
657
  t->sent_local_settings = false;
624
658
  }
625
659
  t->parser = grpc_chttp2_settings_parser_parse;
@@ -633,7 +667,7 @@ static grpc_error_handle parse_frame_slice(grpc_chttp2_transport* t,
633
667
  grpc_chttp2_stream* s = t->incoming_stream;
634
668
  grpc_error_handle err = t->parser(t->parser_data, t, s, slice, is_last);
635
669
  intptr_t unused;
636
- if (GPR_LIKELY(err == GRPC_ERROR_NONE)) {
670
+ if (GPR_LIKELY(GRPC_ERROR_IS_NONE(err))) {
637
671
  return err;
638
672
  } else if (grpc_error_get_int(err, GRPC_ERROR_INT_STREAM_ID, &unused)) {
639
673
  if (GRPC_TRACE_FLAG_ENABLED(grpc_http_trace)) {
@@ -20,8 +20,10 @@
20
20
 
21
21
  #include <grpc/support/log.h>
22
22
 
23
- #include "src/core/ext/transport/chttp2/transport/chttp2_transport.h"
23
+ #include "src/core/ext/transport/chttp2/transport/frame.h"
24
24
  #include "src/core/ext/transport/chttp2/transport/internal.h"
25
+ #include "src/core/lib/debug/trace.h"
26
+ #include "src/core/lib/gprpp/bitset.h"
25
27
 
26
28
  static const char* stream_list_id_string(grpc_chttp2_stream_list_id id) {
27
29
  switch (id) {
@@ -56,7 +58,7 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
56
58
  grpc_chttp2_stream* s = t->lists[id].head;
57
59
  if (s) {
58
60
  grpc_chttp2_stream* new_head = s->links[id].next;
59
- GPR_ASSERT(s->included[id]);
61
+ GPR_ASSERT(s->included.is_set(id));
60
62
  if (new_head) {
61
63
  t->lists[id].head = new_head;
62
64
  new_head->links[id].prev = nullptr;
@@ -64,7 +66,7 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
64
66
  t->lists[id].head = nullptr;
65
67
  t->lists[id].tail = nullptr;
66
68
  }
67
- s->included[id] = 0;
69
+ s->included.clear(id);
68
70
  }
69
71
  *stream = s;
70
72
  if (s && GRPC_TRACE_FLAG_ENABLED(grpc_trace_http2_stream_state)) {
@@ -76,8 +78,8 @@ static bool stream_list_pop(grpc_chttp2_transport* t,
76
78
 
77
79
  static void stream_list_remove(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
78
80
  grpc_chttp2_stream_list_id id) {
79
- GPR_ASSERT(s->included[id]);
80
- s->included[id] = 0;
81
+ GPR_ASSERT(s->included.is_set(id));
82
+ s->included.clear(id);
81
83
  if (s->links[id].prev) {
82
84
  s->links[id].prev->links[id].next = s->links[id].next;
83
85
  } else {
@@ -98,7 +100,7 @@ static void stream_list_remove(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
98
100
  static bool stream_list_maybe_remove(grpc_chttp2_transport* t,
99
101
  grpc_chttp2_stream* s,
100
102
  grpc_chttp2_stream_list_id id) {
101
- if (s->included[id]) {
103
+ if (s->included.is_set(id)) {
102
104
  stream_list_remove(t, s, id);
103
105
  return true;
104
106
  } else {
@@ -110,7 +112,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
110
112
  grpc_chttp2_stream* s,
111
113
  grpc_chttp2_stream_list_id id) {
112
114
  grpc_chttp2_stream* old_tail;
113
- GPR_ASSERT(!s->included[id]);
115
+ GPR_ASSERT(!s->included.is_set(id));
114
116
  old_tail = t->lists[id].tail;
115
117
  s->links[id].next = nullptr;
116
118
  s->links[id].prev = old_tail;
@@ -120,7 +122,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
120
122
  t->lists[id].head = s;
121
123
  }
122
124
  t->lists[id].tail = s;
123
- s->included[id] = 1;
125
+ s->included.set(id);
124
126
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_http2_stream_state)) {
125
127
  gpr_log(GPR_INFO, "%p[%d][%s]: add to %s", t, s->id,
126
128
  t->is_client ? "cli" : "svr", stream_list_id_string(id));
@@ -129,7 +131,7 @@ static void stream_list_add_tail(grpc_chttp2_transport* t,
129
131
 
130
132
  static bool stream_list_add(grpc_chttp2_transport* t, grpc_chttp2_stream* s,
131
133
  grpc_chttp2_stream_list_id id) {
132
- if (s->included[id]) {
134
+ if (s->included.is_set(id)) {
133
135
  return false;
134
136
  }
135
137
  stream_list_add_tail(t, s, id);
@@ -185,7 +187,6 @@ void grpc_chttp2_list_remove_waiting_for_concurrency(grpc_chttp2_transport* t,
185
187
 
186
188
  void grpc_chttp2_list_add_stalled_by_transport(grpc_chttp2_transport* t,
187
189
  grpc_chttp2_stream* s) {
188
- GPR_ASSERT(t->flow_control->flow_control_enabled());
189
190
  stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_TRANSPORT);
190
191
  }
191
192
 
@@ -201,7 +202,6 @@ void grpc_chttp2_list_remove_stalled_by_transport(grpc_chttp2_transport* t,
201
202
 
202
203
  void grpc_chttp2_list_add_stalled_by_stream(grpc_chttp2_transport* t,
203
204
  grpc_chttp2_stream* s) {
204
- GPR_ASSERT(t->flow_control->flow_control_enabled());
205
205
  stream_list_add(t, s, GRPC_CHTTP2_LIST_STALLED_BY_STREAM);
206
206
  }
207
207
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  #include "src/core/ext/transport/chttp2/transport/stream_map.h"
22
22
 
23
- #include <string.h>
23
+ #include <stdlib.h>
24
24
 
25
25
  #include <grpc/support/alloc.h>
26
26
  #include <grpc/support/log.h>
@@ -22,6 +22,7 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include <stddef.h>
25
+ #include <stdint.h>
25
26
 
26
27
  /* Data structure to map a uint32_t to a data object (represented by a void*)
27
28
 
@@ -21,6 +21,8 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <stdint.h>
25
+
24
26
  /* Helpers for hpack varint encoding */
25
27
 
26
28
  namespace grpc_core {