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
@@ -18,17 +18,17 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
+ #include <stdint.h>
21
22
  #include <string.h>
22
23
 
23
24
  #include <grpc/byte_buffer.h>
24
25
  #include <grpc/byte_buffer_reader.h>
25
- #include <grpc/grpc.h>
26
- #include <grpc/slice_buffer.h>
27
- #include <grpc/support/alloc.h>
26
+ #include <grpc/impl/codegen/grpc_types.h>
27
+ #include <grpc/slice.h>
28
28
  #include <grpc/support/log.h>
29
29
 
30
30
  #include "src/core/lib/iomgr/exec_ctx.h"
31
- #include "src/core/lib/slice/slice_internal.h"
31
+ #include "src/core/lib/slice/slice_refcount.h"
32
32
 
33
33
  int grpc_byte_buffer_reader_init(grpc_byte_buffer_reader* reader,
34
34
  grpc_byte_buffer* buffer) {
@@ -20,41 +20,54 @@
20
20
 
21
21
  #include "src/core/lib/surface/call.h"
22
22
 
23
- #include <assert.h>
24
23
  #include <limits.h>
25
- #include <stdio.h>
26
24
  #include <stdlib.h>
27
- #include <string.h>
28
25
 
26
+ #include <algorithm>
29
27
  #include <atomic>
28
+ #include <new>
30
29
  #include <string>
30
+ #include <utility>
31
31
 
32
+ #include "absl/base/thread_annotations.h"
33
+ #include "absl/meta/type_traits.h"
34
+ #include "absl/status/status.h"
32
35
  #include "absl/strings/str_cat.h"
33
36
  #include "absl/strings/str_format.h"
37
+ #include "absl/strings/string_view.h"
34
38
 
39
+ #include <grpc/byte_buffer.h>
35
40
  #include <grpc/compression.h>
36
41
  #include <grpc/grpc.h>
42
+ #include <grpc/impl/codegen/gpr_types.h>
43
+ #include <grpc/impl/codegen/propagation_bits.h>
37
44
  #include <grpc/slice.h>
45
+ #include <grpc/slice_buffer.h>
46
+ #include <grpc/status.h>
38
47
  #include <grpc/support/alloc.h>
48
+ #include <grpc/support/atm.h>
39
49
  #include <grpc/support/log.h>
40
50
  #include <grpc/support/string_util.h>
41
51
 
42
52
  #include "src/core/lib/channel/channel_stack.h"
53
+ #include "src/core/lib/channel/channelz.h"
43
54
  #include "src/core/lib/channel/context.h"
44
55
  #include "src/core/lib/compression/compression_internal.h"
45
56
  #include "src/core/lib/debug/stats.h"
46
57
  #include "src/core/lib/gpr/alloc.h"
47
- #include "src/core/lib/gpr/string.h"
48
58
  #include "src/core/lib/gpr/time_precise.h"
49
- #include "src/core/lib/gpr/useful.h"
50
- #include "src/core/lib/gprpp/manual_constructor.h"
59
+ #include "src/core/lib/gprpp/cpp_impl_of.h"
60
+ #include "src/core/lib/gprpp/debug_location.h"
51
61
  #include "src/core/lib/gprpp/ref_counted.h"
52
- #include "src/core/lib/iomgr/timer.h"
62
+ #include "src/core/lib/gprpp/sync.h"
63
+ #include "src/core/lib/iomgr/call_combiner.h"
64
+ #include "src/core/lib/iomgr/exec_ctx.h"
65
+ #include "src/core/lib/iomgr/polling_entity.h"
53
66
  #include "src/core/lib/profiling/timers.h"
54
67
  #include "src/core/lib/resource_quota/arena.h"
68
+ #include "src/core/lib/slice/slice_buffer.h"
55
69
  #include "src/core/lib/slice/slice_internal.h"
56
- #include "src/core/lib/slice/slice_split.h"
57
- #include "src/core/lib/slice/slice_string_helpers.h"
70
+ #include "src/core/lib/slice/slice_refcount.h"
58
71
  #include "src/core/lib/surface/api_trace.h"
59
72
  #include "src/core/lib/surface/call_test_only.h"
60
73
  #include "src/core/lib/surface/channel.h"
@@ -62,6 +75,7 @@
62
75
  #include "src/core/lib/surface/server.h"
63
76
  #include "src/core/lib/surface/validate_metadata.h"
64
77
  #include "src/core/lib/transport/error_utils.h"
78
+ #include "src/core/lib/transport/metadata_batch.h"
65
79
  #include "src/core/lib/transport/transport.h"
66
80
 
67
81
  grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
@@ -87,6 +101,7 @@ class Call : public CppImplOf<Call, grpc_call> {
87
101
  bool is_notify_tag_closure) = 0;
88
102
  virtual bool failed_before_recv_message() const = 0;
89
103
  virtual bool is_trailers_only() const = 0;
104
+ virtual absl::string_view GetServerAuthority() const = 0;
90
105
  virtual void ExternalRef() = 0;
91
106
  virtual void ExternalUnref() = 0;
92
107
  virtual void InternalRef(const char* reason) = 0;
@@ -217,6 +232,13 @@ class FilterStackCall final : public Call {
217
232
  return call_failed_before_recv_message_;
218
233
  }
219
234
 
235
+ absl::string_view GetServerAuthority() const override {
236
+ const Slice* authority_metadata =
237
+ recv_initial_metadata_.get_pointer(HttpAuthorityMetadata());
238
+ if (authority_metadata == nullptr) return "";
239
+ return authority_metadata->as_string_view();
240
+ }
241
+
220
242
  grpc_compression_algorithm test_only_compression_algorithm() override {
221
243
  return incoming_compression_algorithm_;
222
244
  }
@@ -284,8 +306,6 @@ class FilterStackCall final : public Call {
284
306
 
285
307
  void PostCompletion();
286
308
  void FinishStep();
287
- void ContinueReceivingSlices();
288
- void ReceivingSliceReady(grpc_error_handle error);
289
309
  void ProcessDataAfterMetadata();
290
310
  void ReceivingStreamReady(grpc_error_handle error);
291
311
  void ValidateFilteredMetadata();
@@ -297,7 +317,7 @@ class FilterStackCall final : public Call {
297
317
  FilterStackCall(Arena* arena, const grpc_call_create_args& args)
298
318
  : Call(arena, args.server_transport_data == nullptr, args.send_deadline),
299
319
  cq_(args.cq),
300
- channel_(args.channel),
320
+ channel_(args.channel->Ref()),
301
321
  stream_op_payload_(context_) {}
302
322
 
303
323
  static void ReleaseCall(void* call, grpc_error_handle);
@@ -328,7 +348,7 @@ class FilterStackCall final : public Call {
328
348
  CallCombiner call_combiner_;
329
349
  grpc_completion_queue* cq_;
330
350
  grpc_polling_entity pollent_;
331
- grpc_channel* channel_;
351
+ RefCountedPtr<Channel> channel_;
332
352
  gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
333
353
 
334
354
  /** has grpc_call_unref been called */
@@ -342,7 +362,6 @@ class FilterStackCall final : public Call {
342
362
  bool received_initial_metadata_ = false;
343
363
  bool receiving_message_ = false;
344
364
  bool requested_final_op_ = false;
345
- gpr_atm any_ops_sent_atm_ = 0;
346
365
  gpr_atm received_final_op_atm_ = 0;
347
366
 
348
367
  BatchControl* active_batches_[kMaxConcurrentBatches] = {};
@@ -375,13 +394,13 @@ class FilterStackCall final : public Call {
375
394
  /* Contexts for various subsystems (security, tracing, ...). */
376
395
  grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
377
396
 
378
- ManualConstructor<SliceBufferByteStream> sending_stream_;
397
+ SliceBuffer send_slice_buffer_;
398
+ absl::optional<SliceBuffer> receiving_slice_buffer_;
399
+ uint32_t receiving_stream_flags_;
379
400
 
380
- OrphanablePtr<ByteStream> receiving_stream_;
381
401
  bool call_failed_before_recv_message_ = false;
382
402
  grpc_byte_buffer** receiving_buffer_ = nullptr;
383
403
  grpc_slice receiving_slice_ = grpc_empty_slice();
384
- grpc_closure receiving_slice_ready_;
385
404
  grpc_closure receiving_stream_ready_;
386
405
  grpc_closure receiving_initial_metadata_ready_;
387
406
  grpc_closure receiving_trailing_metadata_ready_;
@@ -499,12 +518,12 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
499
518
  grpc_call** out_call) {
500
519
  GPR_TIMER_SCOPE("grpc_call_create", 0);
501
520
 
502
- GRPC_CHANNEL_INTERNAL_REF(args->channel, "call");
521
+ Channel* channel = args->channel.get();
503
522
 
504
523
  auto add_init_error = [](grpc_error_handle* composite,
505
524
  grpc_error_handle new_err) {
506
- if (new_err == GRPC_ERROR_NONE) return;
507
- if (*composite == GRPC_ERROR_NONE) {
525
+ if (GRPC_ERROR_IS_NONE(new_err)) return;
526
+ if (GRPC_ERROR_IS_NONE(*composite)) {
508
527
  *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
509
528
  }
510
529
  *composite = grpc_error_add_child(*composite, new_err);
@@ -513,16 +532,15 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
513
532
  Arena* arena;
514
533
  FilterStackCall* call;
515
534
  grpc_error_handle error = GRPC_ERROR_NONE;
516
- grpc_channel_stack* channel_stack =
517
- grpc_channel_get_channel_stack(args->channel);
518
- size_t initial_size = grpc_channel_get_call_size_estimate(args->channel);
535
+ grpc_channel_stack* channel_stack = channel->channel_stack();
536
+ size_t initial_size = channel->CallSizeEstimate();
519
537
  GRPC_STATS_INC_CALL_INITIAL_SIZE(initial_size);
520
538
  size_t call_alloc_size =
521
539
  GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
522
540
  channel_stack->call_stack_size;
523
541
 
524
542
  std::pair<Arena*, void*> arena_with_call = Arena::CreateWithAlloc(
525
- initial_size, call_alloc_size, &*args->channel->allocator);
543
+ initial_size, call_alloc_size, channel->allocator());
526
544
  arena = arena_with_call.first;
527
545
  call = new (arena_with_call.second) FilterStackCall(arena, *args);
528
546
  GPR_DEBUG_ASSERT(FromC(call->c_ptr()) == call);
@@ -565,7 +583,7 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
565
583
  call->PublishToParent(parent);
566
584
  }
567
585
 
568
- if (error != GRPC_ERROR_NONE) {
586
+ if (!GRPC_ERROR_IS_NONE(error)) {
569
587
  call->CancelWithError(GRPC_ERROR_REF(error));
570
588
  }
571
589
  if (args->cq != nullptr) {
@@ -586,8 +604,7 @@ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
586
604
  }
587
605
 
588
606
  if (call->is_client()) {
589
- channelz::ChannelNode* channelz_channel =
590
- grpc_channel_get_channelz_node(call->channel_);
607
+ channelz::ChannelNode* channelz_channel = channel->channelz_node();
591
608
  if (channelz_channel != nullptr) {
592
609
  channelz_channel->RecordCallStarted();
593
610
  }
@@ -619,11 +636,10 @@ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
619
636
 
620
637
  void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
621
638
  auto* c = static_cast<FilterStackCall*>(call);
622
- grpc_channel* channel = c->channel_;
639
+ RefCountedPtr<Channel> channel = std::move(c->channel_);
623
640
  Arena* arena = c->arena();
624
641
  c->~FilterStackCall();
625
- grpc_channel_update_call_size_estimate(channel, arena->Destroy());
626
- GRPC_CHANNEL_INTERNAL_UNREF(channel, "call");
642
+ channel->UpdateCallSizeEstimate(arena->Destroy());
627
643
  }
628
644
 
629
645
  void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
@@ -631,7 +647,7 @@ void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
631
647
  auto* c = static_cast<FilterStackCall*>(call);
632
648
  c->recv_initial_metadata_.Clear();
633
649
  c->recv_trailing_metadata_.Clear();
634
- c->receiving_stream_.reset();
650
+ c->receiving_slice_buffer_.reset();
635
651
  ParentCall* pc = c->parent_call();
636
652
  if (pc != nullptr) {
637
653
  pc->~ParentCall();
@@ -685,8 +701,7 @@ void FilterStackCall::ExternalUnref() {
685
701
 
686
702
  GPR_ASSERT(!destroy_called_);
687
703
  destroy_called_ = true;
688
- bool cancel = gpr_atm_acq_load(&any_ops_sent_atm_) != 0 &&
689
- gpr_atm_acq_load(&received_final_op_atm_) == 0;
704
+ bool cancel = gpr_atm_acq_load(&received_final_op_atm_) == 0;
690
705
  if (cancel) {
691
706
  CancelWithError(GRPC_ERROR_CANCELLED);
692
707
  } else {
@@ -702,7 +717,7 @@ void FilterStackCall::ExternalUnref() {
702
717
  char* FilterStackCall::GetPeer() {
703
718
  char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
704
719
  if (peer_string != nullptr) return gpr_strdup(peer_string);
705
- peer_string = grpc_channel_get_target(channel_);
720
+ peer_string = grpc_channel_get_target(channel_->c_ptr());
706
721
  if (peer_string != nullptr) return peer_string;
707
722
  return gpr_strdup("unknown");
708
723
  }
@@ -793,8 +808,7 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
793
808
  grpc_slice_from_cpp_string(std::move(status_details));
794
809
  status_error_.set(error);
795
810
  GRPC_ERROR_UNREF(error);
796
- channelz::ChannelNode* channelz_channel =
797
- grpc_channel_get_channelz_node(channel_);
811
+ channelz::ChannelNode* channelz_channel = channel_->channelz_node();
798
812
  if (channelz_channel != nullptr) {
799
813
  if (*final_op_.client.status != GRPC_STATUS_OK) {
800
814
  channelz_channel->RecordCallFailed();
@@ -804,7 +818,7 @@ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
804
818
  }
805
819
  } else {
806
820
  *final_op_.server.cancelled =
807
- error != GRPC_ERROR_NONE || !sent_server_trailing_metadata_;
821
+ !GRPC_ERROR_IS_NONE(error) || !sent_server_trailing_metadata_;
808
822
  channelz::ServerNode* channelz_node =
809
823
  final_op_.server.core_server->channelz_node();
810
824
  if (channelz_node != nullptr) {
@@ -938,7 +952,7 @@ void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
938
952
 
939
953
  void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
940
954
  grpc_error_handle batch_error) {
941
- if (batch_error != GRPC_ERROR_NONE) {
955
+ if (!GRPC_ERROR_IS_NONE(batch_error)) {
942
956
  SetFinalStatus(batch_error);
943
957
  } else {
944
958
  absl::optional<grpc_status_code> grpc_status =
@@ -958,7 +972,7 @@ void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
958
972
  if (grpc_message.has_value()) {
959
973
  error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
960
974
  grpc_message->as_string_view());
961
- } else if (error != GRPC_ERROR_NONE) {
975
+ } else if (!GRPC_ERROR_IS_NONE(error)) {
962
976
  error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "");
963
977
  }
964
978
  SetFinalStatus(GRPC_ERROR_REF(error));
@@ -1063,12 +1077,13 @@ void FilterStackCall::BatchControl::PostCompletion() {
1063
1077
  }
1064
1078
  if (op_.send_message) {
1065
1079
  if (op_.payload->send_message.stream_write_closed &&
1066
- error == GRPC_ERROR_NONE) {
1080
+ GRPC_ERROR_IS_NONE(error)) {
1067
1081
  error = grpc_error_add_child(
1068
1082
  error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1069
1083
  "Attempt to send message after stream was closed."));
1070
1084
  }
1071
1085
  call->sending_message_ = false;
1086
+ call->send_slice_buffer_.Clear();
1072
1087
  }
1073
1088
  if (op_.send_trailing_metadata) {
1074
1089
  call->send_trailing_metadata_.Clear();
@@ -1080,7 +1095,7 @@ void FilterStackCall::BatchControl::PostCompletion() {
1080
1095
  GRPC_ERROR_UNREF(error);
1081
1096
  error = GRPC_ERROR_NONE;
1082
1097
  }
1083
- if (error != GRPC_ERROR_NONE && op_.recv_message &&
1098
+ if (!GRPC_ERROR_IS_NONE(error) && op_.recv_message &&
1084
1099
  *call->receiving_buffer_ != nullptr) {
1085
1100
  grpc_byte_buffer_destroy(*call->receiving_buffer_);
1086
1101
  *call->receiving_buffer_ = nullptr;
@@ -1114,103 +1129,35 @@ void FilterStackCall::BatchControl::FinishStep() {
1114
1129
  }
1115
1130
  }
1116
1131
 
1117
- void FilterStackCall::BatchControl::ContinueReceivingSlices() {
1118
- grpc_error_handle error;
1119
- FilterStackCall* call = call_;
1120
- for (;;) {
1121
- size_t remaining = call->receiving_stream_->length() -
1122
- (*call->receiving_buffer_)->data.raw.slice_buffer.length;
1123
- if (remaining == 0) {
1124
- call->receiving_message_ = false;
1125
- call->receiving_stream_.reset();
1126
- FinishStep();
1127
- return;
1128
- }
1129
- if (call->receiving_stream_->Next(remaining,
1130
- &call->receiving_slice_ready_)) {
1131
- error = call->receiving_stream_->Pull(&call->receiving_slice_);
1132
- if (error == GRPC_ERROR_NONE) {
1133
- grpc_slice_buffer_add(
1134
- &(*call->receiving_buffer_)->data.raw.slice_buffer,
1135
- call->receiving_slice_);
1136
- } else {
1137
- call->receiving_stream_.reset();
1138
- grpc_byte_buffer_destroy(*call->receiving_buffer_);
1139
- *call->receiving_buffer_ = nullptr;
1140
- call->receiving_message_ = false;
1141
- FinishStep();
1142
- GRPC_ERROR_UNREF(error);
1143
- return;
1144
- }
1145
- } else {
1146
- return;
1147
- }
1148
- }
1149
- }
1150
-
1151
- void FilterStackCall::BatchControl::ReceivingSliceReady(
1152
- grpc_error_handle error) {
1153
- FilterStackCall* call = call_;
1154
- bool release_error = false;
1155
-
1156
- if (error == GRPC_ERROR_NONE) {
1157
- grpc_slice slice;
1158
- error = call->receiving_stream_->Pull(&slice);
1159
- if (error == GRPC_ERROR_NONE) {
1160
- grpc_slice_buffer_add(&(*call->receiving_buffer_)->data.raw.slice_buffer,
1161
- slice);
1162
- ContinueReceivingSlices();
1163
- } else {
1164
- /* Error returned by ByteStream::Pull() needs to be released manually */
1165
- release_error = true;
1166
- }
1167
- }
1168
-
1169
- if (error != GRPC_ERROR_NONE) {
1170
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
1171
- GRPC_LOG_IF_ERROR("receiving_slice_ready", GRPC_ERROR_REF(error));
1172
- }
1173
- call->receiving_stream_.reset();
1174
- grpc_byte_buffer_destroy(*call->receiving_buffer_);
1175
- *call->receiving_buffer_ = nullptr;
1176
- call->receiving_message_ = false;
1177
- FinishStep();
1178
- if (release_error) {
1179
- GRPC_ERROR_UNREF(error);
1180
- }
1181
- }
1182
- }
1183
-
1184
1132
  void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1185
1133
  FilterStackCall* call = call_;
1186
- if (call->receiving_stream_ == nullptr) {
1134
+ if (!call->receiving_slice_buffer_.has_value()) {
1187
1135
  *call->receiving_buffer_ = nullptr;
1188
1136
  call->receiving_message_ = false;
1189
1137
  FinishStep();
1190
1138
  } else {
1191
- call->test_only_last_message_flags_ = call->receiving_stream_->flags();
1192
- if ((call->receiving_stream_->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
1139
+ call->test_only_last_message_flags_ = call->receiving_stream_flags_;
1140
+ if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
1193
1141
  (call->incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
1194
1142
  *call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
1195
1143
  nullptr, 0, call->incoming_compression_algorithm_);
1196
1144
  } else {
1197
1145
  *call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
1198
1146
  }
1199
- GRPC_CLOSURE_INIT(
1200
- &call->receiving_slice_ready_,
1201
- [](void* bctl, grpc_error_handle error) {
1202
- static_cast<BatchControl*>(bctl)->ReceivingSliceReady(error);
1203
- },
1204
- this, grpc_schedule_on_exec_ctx);
1205
- ContinueReceivingSlices();
1147
+ grpc_slice_buffer_move_into(
1148
+ call->receiving_slice_buffer_->c_slice_buffer(),
1149
+ &(*call->receiving_buffer_)->data.raw.slice_buffer);
1150
+ call->receiving_message_ = false;
1151
+ call->receiving_slice_buffer_.reset();
1152
+ FinishStep();
1206
1153
  }
1207
1154
  }
1208
1155
 
1209
1156
  void FilterStackCall::BatchControl::ReceivingStreamReady(
1210
1157
  grpc_error_handle error) {
1211
1158
  FilterStackCall* call = call_;
1212
- if (error != GRPC_ERROR_NONE) {
1213
- call->receiving_stream_.reset();
1159
+ if (!GRPC_ERROR_IS_NONE(error)) {
1160
+ call->receiving_slice_buffer_.reset();
1214
1161
  if (batch_error_.ok()) {
1215
1162
  batch_error_.set(error);
1216
1163
  }
@@ -1219,7 +1166,8 @@ void FilterStackCall::BatchControl::ReceivingStreamReady(
1219
1166
  /* If recv_state is kRecvNone, we will save the batch_control
1220
1167
  * object with rel_cas, and will not use it after the cas. Its corresponding
1221
1168
  * acq_load is in receiving_initial_metadata_ready() */
1222
- if (error != GRPC_ERROR_NONE || call->receiving_stream_ == nullptr ||
1169
+ if (!GRPC_ERROR_IS_NONE(error) ||
1170
+ !call->receiving_slice_buffer_.has_value() ||
1223
1171
  !gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
1224
1172
  reinterpret_cast<gpr_atm>(this))) {
1225
1173
  ProcessDataAfterMetadata();
@@ -1243,14 +1191,15 @@ void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
1243
1191
  gpr_log(GPR_ERROR,
1244
1192
  "Compression algorithm ('%s') not present in the "
1245
1193
  "accepted encodings (%s)",
1246
- algo_name, encodings_accepted_by_peer_.ToString().c_str());
1194
+ algo_name,
1195
+ std::string(encodings_accepted_by_peer_.ToString()).c_str());
1247
1196
  }
1248
1197
 
1249
1198
  void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
1250
1199
  FilterStackCall* call = call_;
1251
1200
 
1252
1201
  const grpc_compression_options compression_options =
1253
- grpc_channel_compression_options(call->channel_);
1202
+ call->channel_->compression_options();
1254
1203
  const grpc_compression_algorithm compression_algorithm =
1255
1204
  call->incoming_compression_algorithm_;
1256
1205
  if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
@@ -1275,7 +1224,7 @@ void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1275
1224
 
1276
1225
  GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
1277
1226
 
1278
- if (error == GRPC_ERROR_NONE) {
1227
+ if (GRPC_ERROR_IS_NONE(error)) {
1279
1228
  grpc_metadata_batch* md = &call->recv_initial_metadata_;
1280
1229
  call->RecvInitialFilter(md);
1281
1230
 
@@ -1342,7 +1291,7 @@ void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
1342
1291
  if (batch_error_.ok()) {
1343
1292
  batch_error_.set(error);
1344
1293
  }
1345
- if (error != GRPC_ERROR_NONE) {
1294
+ if (!GRPC_ERROR_IS_NONE(error)) {
1346
1295
  call_->CancelWithError(GRPC_ERROR_REF(error));
1347
1296
  }
1348
1297
  FinishStep();
@@ -1432,7 +1381,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1432
1381
  level_set = true;
1433
1382
  } else {
1434
1383
  const grpc_compression_options copts =
1435
- grpc_channel_compression_options(channel_);
1384
+ channel_->compression_options();
1436
1385
  if (copts.default_level.is_set) {
1437
1386
  level_set = true;
1438
1387
  effective_compression_level = copts.default_level.level;
@@ -1499,10 +1448,12 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1499
1448
  }
1500
1449
  stream_op->send_message = true;
1501
1450
  sending_message_ = true;
1502
- sending_stream_.Init(
1503
- &op->data.send_message.send_message->data.raw.slice_buffer, flags);
1504
- stream_op_payload->send_message.send_message.reset(
1505
- sending_stream_.get());
1451
+ send_slice_buffer_.Clear();
1452
+ grpc_slice_buffer_move_into(
1453
+ &op->data.send_message.send_message->data.raw.slice_buffer,
1454
+ send_slice_buffer_.c_slice_buffer());
1455
+ stream_op_payload->send_message.flags = flags;
1456
+ stream_op_payload->send_message.send_message = &send_slice_buffer_;
1506
1457
  has_send_ops = true;
1507
1458
  break;
1508
1459
  }
@@ -1570,7 +1521,7 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1570
1521
  GrpcMessageMetadata(),
1571
1522
  Slice(grpc_slice_copy(
1572
1523
  *op->data.send_status_from_server.status_details)));
1573
- if (status_error != GRPC_ERROR_NONE) {
1524
+ if (!GRPC_ERROR_IS_NONE(status_error)) {
1574
1525
  status_error = grpc_error_set_str(
1575
1526
  status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1576
1527
  StringViewFromSlice(
@@ -1639,8 +1590,11 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1639
1590
  }
1640
1591
  receiving_message_ = true;
1641
1592
  stream_op->recv_message = true;
1593
+ receiving_slice_buffer_.reset();
1642
1594
  receiving_buffer_ = op->data.recv_message.recv_message;
1643
- stream_op_payload->recv_message.recv_message = &receiving_stream_;
1595
+ stream_op_payload->recv_message.recv_message = &receiving_slice_buffer_;
1596
+ receiving_stream_flags_ = 0;
1597
+ stream_op_payload->recv_message.flags = &receiving_stream_flags_;
1644
1598
  stream_op_payload->recv_message.call_failed_before_recv_message =
1645
1599
  &call_failed_before_recv_message_;
1646
1600
  GRPC_CLOSURE_INIT(
@@ -1751,7 +1705,6 @@ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1751
1705
  stream_op->on_complete = &bctl->finish_batch_;
1752
1706
  }
1753
1707
 
1754
- gpr_atm_rel_store(&any_ops_sent_atm_, 1);
1755
1708
  ExecuteBatch(stream_op, &bctl->start_batch_);
1756
1709
 
1757
1710
  done:
@@ -1765,10 +1718,6 @@ done_with_error:
1765
1718
  }
1766
1719
  if (stream_op->send_message) {
1767
1720
  sending_message_ = false;
1768
- // No need to invoke call->sending_stream->Orphan() explicitly.
1769
- // stream_op_payload->send_message.send_message.reset() calls Deletor
1770
- // of call->sending_stream which in-turn invokes the Orphan() method.
1771
- stream_op_payload->send_message.send_message.reset();
1772
1721
  }
1773
1722
  if (stream_op->send_trailing_metadata) {
1774
1723
  sent_final_op_ = false;
@@ -1928,6 +1877,10 @@ int grpc_call_failed_before_recv_message(const grpc_call* c) {
1928
1877
  return grpc_core::Call::FromC(c)->failed_before_recv_message();
1929
1878
  }
1930
1879
 
1880
+ absl::string_view grpc_call_server_authority(const grpc_call* call) {
1881
+ return grpc_core::Call::FromC(call)->GetServerAuthority();
1882
+ }
1883
+
1931
1884
  const char* grpc_call_error_to_string(grpc_call_error error) {
1932
1885
  switch (error) {
1933
1886
  case GRPC_CALL_ERROR:
@@ -21,20 +21,35 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/grpc.h>
24
+ #include <stddef.h>
25
+ #include <stdint.h>
26
+
27
+ #include "absl/strings/string_view.h"
28
+ #include "absl/types/optional.h"
29
+
25
30
  #include <grpc/impl/codegen/compression_types.h>
31
+ #include <grpc/impl/codegen/grpc_types.h>
32
+ #include <grpc/support/log.h>
26
33
 
27
- #include "src/core/lib/channel/channel_stack.h"
34
+ #include "src/core/lib/channel/channel_fwd.h"
28
35
  #include "src/core/lib/channel/context.h"
36
+ #include "src/core/lib/debug/trace.h"
37
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
38
+ #include "src/core/lib/gprpp/time.h"
39
+ #include "src/core/lib/iomgr/closure.h"
40
+ #include "src/core/lib/iomgr/error.h"
41
+ #include "src/core/lib/iomgr/iomgr_fwd.h"
29
42
  #include "src/core/lib/resource_quota/arena.h"
43
+ #include "src/core/lib/slice/slice.h"
30
44
  #include "src/core/lib/surface/api_trace.h"
45
+ #include "src/core/lib/surface/channel.h"
31
46
  #include "src/core/lib/surface/server.h"
32
47
 
33
48
  typedef void (*grpc_ioreq_completion_func)(grpc_call* call, int success,
34
49
  void* user_data);
35
50
 
36
51
  typedef struct grpc_call_create_args {
37
- grpc_channel* channel;
52
+ grpc_core::RefCountedPtr<grpc_core::Channel> channel;
38
53
  grpc_core::Server* server;
39
54
 
40
55
  grpc_call* parent;
@@ -111,6 +126,9 @@ grpc_compression_algorithm grpc_call_compression_for_level(
111
126
  Move to surface API if requested by other languages. */
112
127
  bool grpc_call_is_trailers_only(const grpc_call* call);
113
128
 
129
+ // Returns the authority for the call, as seen on the server side.
130
+ absl::string_view grpc_call_server_authority(const grpc_call* call);
131
+
114
132
  extern grpc_core::TraceFlag grpc_call_error_trace;
115
133
  extern grpc_core::TraceFlag grpc_compression_trace;
116
134
 
@@ -18,13 +18,13 @@
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <string.h>
22
-
23
21
  #include <grpc/grpc.h>
24
- #include <grpc/support/alloc.h>
22
+ #include <grpc/impl/codegen/grpc_types.h>
23
+ #include <grpc/slice.h>
25
24
 
25
+ #include "src/core/lib/debug/trace.h"
26
26
  #include "src/core/lib/iomgr/exec_ctx.h"
27
- #include "src/core/lib/slice/slice_internal.h"
27
+ #include "src/core/lib/slice/slice_refcount.h"
28
28
  #include "src/core/lib/surface/api_trace.h"
29
29
 
30
30
  void grpc_call_details_init(grpc_call_details* details) {
@@ -19,16 +19,22 @@
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
21
  #include <inttypes.h>
22
+ #include <stddef.h>
22
23
 
24
+ #include <algorithm>
25
+ #include <string>
23
26
  #include <vector>
24
27
 
25
28
  #include "absl/strings/str_format.h"
26
29
  #include "absl/strings/str_join.h"
30
+ #include "absl/strings/string_view.h"
27
31
 
32
+ #include <grpc/impl/codegen/grpc_types.h>
28
33
  #include <grpc/support/alloc.h>
29
- #include <grpc/support/string_util.h>
34
+ #include <grpc/support/log.h>
30
35
 
31
36
  #include "src/core/lib/gpr/string.h"
37
+ #include "src/core/lib/slice/slice_internal.h"
32
38
  #include "src/core/lib/slice/slice_string_helpers.h"
33
39
  #include "src/core/lib/surface/call.h"
34
40
 
@@ -21,7 +21,10 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <grpc/grpc.h>
24
+ #include <stdint.h>
25
+
26
+ #include <grpc/impl/codegen/compression_types.h>
27
+ #include <grpc/impl/codegen/grpc_types.h>
25
28
 
26
29
  /** Return the message compression algorithm from \a call.
27
30
  *