grpc 1.46.3-x86_64-linux → 1.47.0-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 (487) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +49 -97
  3. data/include/grpc/event_engine/event_engine.h +42 -7
  4. data/include/grpc/event_engine/memory_allocator.h +0 -15
  5. data/include/grpc/event_engine/port.h +1 -1
  6. data/include/grpc/event_engine/slice.h +286 -0
  7. data/include/grpc/event_engine/slice_buffer.h +112 -0
  8. data/include/grpc/grpc_security.h +11 -0
  9. data/include/grpc/impl/codegen/port_platform.h +100 -36
  10. data/include/grpc/impl/codegen/slice.h +1 -1
  11. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +18 -30
  12. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +4 -1
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +17 -12
  14. data/src/core/ext/filters/client_channel/backend_metric.h +19 -9
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -5
  16. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +42 -20
  18. data/src/core/ext/filters/client_channel/client_channel.cc +60 -17
  19. data/src/core/ext/filters/client_channel/client_channel.h +26 -6
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +3 -5
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  22. data/src/core/ext/filters/client_channel/client_channel_factory.cc +5 -0
  23. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -0
  24. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +4 -13
  25. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  26. data/src/core/ext/filters/client_channel/config_selector.h +7 -5
  27. data/src/core/ext/filters/client_channel/connector.h +8 -2
  28. data/src/core/ext/filters/client_channel/dynamic_filters.cc +13 -2
  29. data/src/core/ext/filters/client_channel/dynamic_filters.h +11 -1
  30. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -0
  31. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -0
  32. data/src/core/ext/filters/client_channel/health/health_check_client.cc +14 -1
  33. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -0
  34. data/src/core/ext/filters/client_channel/http_proxy.cc +10 -2
  35. data/src/core/ext/filters/client_channel/http_proxy.h +3 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +6 -2
  37. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  39. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +12 -0
  40. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +9 -3
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +59 -19
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +4 -0
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -0
  45. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +10 -1
  46. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +6 -3
  47. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  48. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  50. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  51. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +60 -52
  52. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +102 -60
  53. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +157 -96
  54. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +2 -0
  55. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +45 -10
  56. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +182 -171
  57. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +39 -36
  58. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +30 -5
  59. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +99 -23
  60. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +6 -0
  61. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +30 -4
  62. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +23 -3
  63. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +75 -11
  64. data/src/core/ext/filters/client_channel/lb_policy.cc +4 -2
  65. data/src/core/ext/filters/client_channel/lb_policy.h +18 -24
  66. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -0
  67. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -1
  68. data/src/core/ext/filters/client_channel/lb_policy_registry.h +6 -1
  69. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  70. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  71. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  72. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  73. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  74. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +23 -5
  75. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +134 -43
  76. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +8 -1
  77. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +10 -8
  78. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +1 -1
  79. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +26 -9
  80. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +13 -4
  81. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -1
  82. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  83. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  84. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +30 -7
  85. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -14
  86. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +5 -2
  87. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +59 -13
  88. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +13 -1
  89. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +8 -1
  90. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +15 -11
  91. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +89 -33
  92. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +5 -11
  93. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +11 -5
  94. data/src/core/ext/filters/client_channel/retry_filter.cc +42 -2
  95. data/src/core/ext/filters/client_channel/retry_service_config.cc +8 -9
  96. data/src/core/ext/filters/client_channel/retry_service_config.h +10 -1
  97. data/src/core/ext/filters/client_channel/retry_throttle.cc +1 -8
  98. data/src/core/ext/filters/client_channel/retry_throttle.h +7 -1
  99. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +22 -5
  100. data/src/core/ext/filters/client_channel/subchannel.cc +156 -160
  101. data/src/core/ext/filters/client_channel/subchannel.h +80 -20
  102. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  103. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  104. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +12 -2
  105. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -3
  106. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +16 -2
  107. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +12 -0
  108. data/src/core/ext/filters/deadline/deadline_filter.cc +6 -2
  109. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -4
  110. data/src/core/ext/filters/http/client/http_client_filter.cc +14 -5
  111. data/src/core/ext/filters/http/client/http_client_filter.h +7 -1
  112. data/src/core/ext/filters/http/client_authority_filter.cc +5 -10
  113. data/src/core/ext/filters/http/http_filters_plugin.cc +7 -8
  114. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +1 -0
  115. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +3 -1
  116. data/src/core/ext/filters/http/server/http_server_filter.cc +80 -247
  117. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  118. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -26
  119. data/src/core/ext/filters/message_size/message_size_filter.h +2 -2
  120. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -0
  121. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +101 -135
  122. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -7
  123. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +44 -15
  124. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -0
  125. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +3 -3
  126. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  127. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  128. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +69 -20
  129. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +5 -0
  130. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -0
  131. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -1
  132. data/src/core/ext/transport/chttp2/transport/flow_control.cc +6 -2
  133. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -2
  134. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  135. data/src/core/ext/transport/chttp2/transport/frame_data.cc +7 -1
  136. data/src/core/ext/transport/chttp2/transport/frame_data.h +4 -1
  137. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +3 -0
  138. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  139. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +5 -0
  140. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  141. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +6 -2
  142. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  143. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +12 -3
  144. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  145. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +4 -1
  146. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  147. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +14 -12
  148. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +15 -2
  149. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +3 -0
  150. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +3 -0
  151. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +25 -7
  152. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -1
  153. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +55 -37
  154. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +38 -21
  155. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  156. data/src/core/ext/transport/chttp2/transport/internal.h +24 -3
  157. data/src/core/ext/transport/chttp2/transport/parsing.cc +27 -6
  158. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +13 -9
  159. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  160. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  161. data/src/core/ext/transport/chttp2/transport/varint.h +2 -0
  162. data/src/core/ext/transport/chttp2/transport/writing.cc +38 -2
  163. data/src/core/ext/transport/inproc/inproc_transport.cc +8 -5
  164. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  165. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  166. data/src/core/ext/xds/certificate_provider_store.cc +4 -2
  167. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  168. data/src/core/ext/xds/xds_certificate_provider.cc +4 -1
  169. data/src/core/ext/xds/xds_certificate_provider.h +1 -1
  170. data/src/core/ext/xds/xds_channel_stack_modifier.cc +5 -5
  171. data/src/core/ext/xds/xds_client.cc +46 -22
  172. data/src/core/ext/xds/xds_cluster.cc +106 -16
  173. data/src/core/ext/xds/xds_cluster.h +3 -0
  174. data/src/core/ext/xds/xds_http_fault_filter.cc +3 -3
  175. data/src/core/ext/xds/xds_listener.cc +19 -9
  176. data/src/core/ext/xds/xds_server_config_fetcher.cc +2 -1
  177. data/src/core/lib/address_utils/sockaddr_utils.cc +56 -23
  178. data/src/core/lib/address_utils/sockaddr_utils.h +7 -4
  179. data/src/core/lib/avl/avl.h +3 -1
  180. data/src/core/lib/channel/call_finalization.h +4 -0
  181. data/src/core/lib/channel/call_tracer.h +8 -2
  182. data/src/core/lib/channel/channel_args.cc +41 -22
  183. data/src/core/lib/channel/channel_args.h +33 -3
  184. data/src/core/lib/channel/channel_args_preconditioning.cc +3 -3
  185. data/src/core/lib/channel/channel_args_preconditioning.h +3 -2
  186. data/src/core/lib/channel/channel_stack.cc +41 -3
  187. data/src/core/lib/channel/channel_stack.h +49 -3
  188. data/src/core/lib/channel/channel_stack_builder.cc +9 -19
  189. data/src/core/lib/channel/channel_stack_builder.h +15 -27
  190. data/src/core/lib/channel/channel_stack_builder_impl.cc +36 -41
  191. data/src/core/lib/channel/channel_stack_builder_impl.h +3 -6
  192. data/src/core/lib/channel/channel_trace.cc +8 -13
  193. data/src/core/lib/channel/channel_trace.h +6 -3
  194. data/src/core/lib/channel/channelz.cc +8 -13
  195. data/src/core/lib/channel/channelz.h +13 -4
  196. data/src/core/lib/channel/channelz_registry.cc +7 -14
  197. data/src/core/lib/channel/channelz_registry.h +10 -9
  198. data/src/core/lib/channel/connected_channel.cc +21 -31
  199. data/src/core/lib/channel/connected_channel.h +1 -0
  200. data/src/core/lib/channel/promise_based_filter.cc +444 -189
  201. data/src/core/lib/channel/promise_based_filter.h +160 -27
  202. data/src/core/lib/channel/status_util.cc +2 -0
  203. data/src/core/lib/channel/status_util.h +0 -3
  204. data/src/core/lib/compression/compression_internal.cc +45 -10
  205. data/src/core/lib/compression/compression_internal.h +1 -1
  206. data/src/core/lib/config/core_configuration.cc +3 -0
  207. data/src/core/lib/config/core_configuration.h +2 -1
  208. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +4 -2
  209. data/src/core/lib/event_engine/channel_args_endpoint_config.h +3 -2
  210. data/src/core/lib/event_engine/default_event_engine_factory.cc +8 -2
  211. data/src/core/lib/event_engine/event_engine.cc +12 -2
  212. data/src/core/lib/event_engine/event_engine_factory.h +5 -0
  213. data/src/core/lib/event_engine/handle_containers.h +67 -0
  214. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  215. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  216. data/src/core/lib/event_engine/memory_allocator.cc +12 -4
  217. data/src/core/lib/event_engine/resolved_address.cc +4 -2
  218. data/src/core/lib/event_engine/slice.cc +102 -0
  219. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  220. data/src/core/lib/{iomgr/event_engine/pollset.h → event_engine/trace.cc} +3 -10
  221. data/src/core/lib/{iomgr/endpoint_pair_event_engine.cc → event_engine/trace.h} +12 -14
  222. data/src/core/lib/gpr/log.cc +5 -0
  223. data/src/core/lib/gpr/tls.h +3 -5
  224. data/src/core/lib/gprpp/bitset.h +5 -1
  225. data/src/core/lib/gprpp/chunked_vector.h +4 -0
  226. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  227. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  228. data/src/core/lib/gprpp/examine_stack.h +0 -1
  229. data/src/core/lib/gprpp/fork.cc +3 -6
  230. data/src/core/lib/gprpp/global_config.h +2 -4
  231. data/src/core/lib/gprpp/global_config_env.cc +3 -2
  232. data/src/core/lib/gprpp/global_config_env.h +3 -1
  233. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  234. data/src/core/lib/gprpp/host_port.cc +2 -0
  235. data/src/core/lib/gprpp/manual_constructor.h +0 -1
  236. data/src/core/lib/gprpp/match.h +2 -0
  237. data/src/core/lib/gprpp/memory.h +1 -5
  238. data/src/core/lib/gprpp/orphanable.h +1 -4
  239. data/src/core/lib/gprpp/ref_counted.h +1 -3
  240. data/src/core/lib/gprpp/ref_counted_ptr.h +1 -1
  241. data/src/core/lib/gprpp/stat.h +0 -2
  242. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  243. data/src/core/lib/gprpp/status_helper.cc +8 -4
  244. data/src/core/lib/gprpp/status_helper.h +4 -0
  245. data/src/core/lib/gprpp/sync.h +3 -1
  246. data/src/core/lib/gprpp/table.h +10 -0
  247. data/src/core/lib/gprpp/thd.h +2 -5
  248. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  249. data/src/core/lib/gprpp/thd_windows.cc +2 -0
  250. data/src/core/lib/gprpp/time.cc +8 -0
  251. data/src/core/lib/gprpp/time.h +6 -1
  252. data/src/core/lib/gprpp/time_util.cc +4 -0
  253. data/src/core/lib/gprpp/time_util.h +1 -1
  254. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  255. data/src/core/lib/http/format_request.cc +29 -0
  256. data/src/core/lib/http/format_request.h +2 -0
  257. data/src/core/lib/http/httpcli.cc +88 -81
  258. data/src/core/lib/http/httpcli.h +39 -7
  259. data/src/core/lib/http/httpcli_security_connector.cc +3 -4
  260. data/src/core/lib/iomgr/endpoint.cc +4 -4
  261. data/src/core/lib/iomgr/endpoint.h +6 -4
  262. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -4
  263. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  264. data/src/core/lib/iomgr/ev_posix.cc +1 -4
  265. data/src/core/lib/iomgr/exec_ctx.h +1 -2
  266. data/src/core/lib/iomgr/internal_errqueue.cc +38 -47
  267. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  268. data/src/core/lib/iomgr/iomgr.cc +0 -1
  269. data/src/core/{ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc → lib/iomgr/iomgr_fwd.h} +9 -12
  270. data/src/core/lib/iomgr/pollset_set.h +1 -2
  271. data/src/core/lib/iomgr/port.h +25 -6
  272. data/src/core/lib/iomgr/resolve_address.cc +8 -0
  273. data/src/core/lib/iomgr/resolve_address.h +21 -14
  274. data/src/core/lib/iomgr/resolve_address_impl.h +2 -3
  275. data/src/core/lib/iomgr/resolve_address_posix.cc +8 -14
  276. data/src/core/lib/iomgr/resolve_address_posix.h +5 -2
  277. data/src/core/lib/iomgr/resolve_address_windows.cc +7 -14
  278. data/src/core/lib/iomgr/resolve_address_windows.h +5 -2
  279. data/src/core/lib/iomgr/sockaddr.h +2 -3
  280. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  281. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  282. data/src/core/lib/iomgr/socket_utils_common_posix.cc +3 -2
  283. data/src/core/lib/iomgr/tcp_client_cfstream.cc +10 -2
  284. data/src/core/lib/iomgr/tcp_client_posix.cc +12 -5
  285. data/src/core/lib/iomgr/tcp_client_windows.cc +13 -6
  286. data/src/core/lib/iomgr/tcp_posix.cc +9 -27
  287. data/src/core/lib/iomgr/tcp_server_posix.cc +26 -12
  288. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +30 -27
  289. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +7 -4
  290. data/src/core/lib/iomgr/tcp_server_windows.cc +13 -5
  291. data/src/core/lib/iomgr/tcp_windows.cc +7 -4
  292. data/src/core/lib/json/json.h +1 -2
  293. data/src/core/lib/json/json_reader.cc +9 -1
  294. data/src/core/lib/json/json_util.cc +7 -0
  295. data/src/core/lib/json/json_util.h +10 -1
  296. data/src/core/lib/json/json_writer.cc +6 -1
  297. data/src/core/lib/promise/activity.cc +1 -1
  298. data/src/core/lib/promise/activity.h +6 -6
  299. data/src/core/lib/promise/arena_promise.h +11 -1
  300. data/src/core/lib/promise/call_push_pull.h +4 -0
  301. data/src/core/lib/promise/context.h +1 -1
  302. data/src/core/lib/promise/detail/basic_seq.h +2 -2
  303. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  304. data/src/core/lib/promise/latch.h +0 -1
  305. data/src/core/lib/promise/loop.h +1 -0
  306. data/src/core/lib/promise/race.h +0 -1
  307. data/src/core/lib/promise/seq.h +0 -2
  308. data/src/core/lib/promise/sleep.cc +2 -0
  309. data/src/core/lib/promise/sleep.h +10 -0
  310. data/src/core/lib/promise/try_seq.h +2 -2
  311. data/src/core/lib/resolver/resolver_factory.h +1 -2
  312. data/src/core/lib/resolver/server_address.cc +9 -3
  313. data/src/core/lib/resolver/server_address.h +4 -4
  314. data/src/core/lib/resource_quota/api.cc +14 -1
  315. data/src/core/lib/resource_quota/api.h +4 -1
  316. data/src/core/lib/resource_quota/arena.cc +0 -6
  317. data/src/core/lib/resource_quota/arena.h +1 -2
  318. data/src/core/lib/resource_quota/memory_quota.cc +47 -5
  319. data/src/core/lib/resource_quota/memory_quota.h +24 -5
  320. data/src/core/lib/resource_quota/resource_quota.h +8 -0
  321. data/src/core/lib/resource_quota/thread_quota.cc +2 -0
  322. data/src/core/lib/resource_quota/thread_quota.h +4 -0
  323. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +3 -0
  324. data/src/core/lib/security/credentials/alts/alts_credentials.cc +8 -2
  325. data/src/core/lib/security/credentials/alts/alts_credentials.h +2 -2
  326. data/src/core/lib/security/credentials/call_creds_util.cc +2 -0
  327. data/src/core/lib/security/credentials/channel_creds_registry.h +1 -0
  328. data/src/core/lib/security/credentials/composite/composite_credentials.cc +7 -3
  329. data/src/core/lib/security/credentials/composite/composite_credentials.h +5 -4
  330. data/src/core/lib/security/credentials/credentials.h +17 -10
  331. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +81 -0
  332. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +8 -0
  333. data/src/core/lib/security/credentials/external/external_account_credentials.cc +3 -0
  334. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -0
  335. data/src/core/lib/security/credentials/fake/fake_credentials.cc +13 -3
  336. data/src/core/lib/security/credentials/fake/fake_credentials.h +2 -2
  337. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +25 -15
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +2 -2
  339. data/src/core/lib/security/credentials/iam/iam_credentials.cc +4 -1
  340. data/src/core/lib/security/credentials/iam/iam_credentials.h +2 -2
  341. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +8 -2
  342. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +4 -4
  343. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +3 -2
  344. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -2
  345. data/src/core/lib/security/credentials/local/local_credentials.cc +8 -2
  346. data/src/core/lib/security/credentials/local/local_credentials.h +2 -2
  347. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +10 -6
  348. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +4 -4
  349. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +4 -1
  350. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +1 -1
  351. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +8 -2
  352. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +4 -4
  353. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +10 -0
  354. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +5 -7
  355. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +26 -1
  356. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +28 -4
  357. data/src/core/lib/security/credentials/tls/tls_credentials.cc +10 -0
  358. data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
  359. data/src/core/lib/security/credentials/xds/xds_credentials.cc +12 -3
  360. data/src/core/lib/security/credentials/xds/xds_credentials.h +5 -5
  361. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  362. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +1 -1
  364. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  365. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +1 -1
  366. data/src/core/lib/security/transport/client_auth_filter.cc +6 -8
  367. data/src/core/lib/security/transport/secure_endpoint.cc +23 -12
  368. data/src/core/lib/security/transport/security_handshaker.cc +5 -5
  369. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  370. data/src/core/lib/security/transport/server_auth_filter.cc +3 -2
  371. data/src/core/lib/service_config/service_config.h +4 -8
  372. data/src/core/lib/service_config/service_config_call_data.h +4 -1
  373. data/src/core/lib/service_config/service_config_impl.cc +7 -0
  374. data/src/core/lib/service_config/service_config_impl.h +9 -2
  375. data/src/core/lib/service_config/service_config_parser.cc +8 -0
  376. data/src/core/lib/service_config/service_config_parser.h +7 -0
  377. data/src/core/lib/slice/b64.cc +1 -1
  378. data/src/core/lib/slice/b64.h +2 -0
  379. data/src/core/lib/slice/percent_encoding.cc +4 -1
  380. data/src/core/lib/slice/percent_encoding.h +0 -6
  381. data/src/core/lib/slice/slice.cc +2 -1
  382. data/src/core/lib/slice/slice.h +10 -5
  383. data/src/core/lib/slice/slice_api.cc +1 -1
  384. data/src/core/lib/slice/slice_buffer.cc +50 -23
  385. data/src/core/lib/slice/slice_buffer.h +106 -0
  386. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  387. data/src/core/lib/slice/slice_internal.h +4 -3
  388. data/src/core/lib/slice/slice_refcount.h +2 -3
  389. data/src/core/lib/slice/slice_refcount_base.h +2 -3
  390. data/src/core/lib/slice/slice_split.cc +3 -0
  391. data/src/core/lib/slice/slice_split.h +0 -4
  392. data/src/core/lib/slice/slice_string_helpers.cc +4 -0
  393. data/src/core/lib/slice/slice_string_helpers.h +1 -4
  394. data/src/core/lib/surface/builtins.cc +7 -2
  395. data/src/core/lib/surface/byte_buffer.cc +7 -1
  396. data/src/core/lib/surface/byte_buffer_reader.cc +4 -4
  397. data/src/core/lib/surface/call.cc +41 -26
  398. data/src/core/lib/surface/call.h +16 -2
  399. data/src/core/lib/surface/call_details.cc +4 -4
  400. data/src/core/lib/surface/call_log_batch.cc +7 -1
  401. data/src/core/lib/surface/call_test_only.h +4 -1
  402. data/src/core/lib/surface/channel.cc +179 -242
  403. data/src/core/lib/surface/channel.h +94 -57
  404. data/src/core/lib/surface/channel_init.h +2 -0
  405. data/src/core/lib/surface/channel_ping.cc +8 -2
  406. data/src/core/lib/surface/channel_stack_type.cc +0 -2
  407. data/src/core/lib/surface/channel_stack_type.h +0 -2
  408. data/src/core/lib/surface/completion_queue.cc +14 -6
  409. data/src/core/lib/surface/completion_queue.h +5 -1
  410. data/src/core/lib/surface/completion_queue_factory.cc +1 -0
  411. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  412. data/src/core/lib/surface/event_string.cc +1 -7
  413. data/src/core/lib/surface/event_string.h +1 -1
  414. data/src/core/lib/surface/init.cc +17 -45
  415. data/src/core/lib/surface/init.h +0 -8
  416. data/src/core/lib/surface/lame_client.cc +64 -110
  417. data/src/core/lib/surface/lame_client.h +40 -2
  418. data/src/core/lib/surface/metadata_array.cc +2 -0
  419. data/src/core/lib/surface/server.cc +69 -56
  420. data/src/core/lib/surface/server.h +39 -9
  421. data/src/core/lib/surface/validate_metadata.cc +2 -5
  422. data/src/core/lib/surface/validate_metadata.h +3 -0
  423. data/src/core/lib/surface/version.cc +2 -2
  424. data/src/core/lib/transport/bdp_estimator.cc +3 -1
  425. data/src/core/lib/transport/bdp_estimator.h +2 -3
  426. data/src/core/lib/transport/byte_stream.cc +4 -3
  427. data/src/core/lib/transport/byte_stream.h +5 -1
  428. data/src/core/lib/transport/connectivity_state.cc +6 -4
  429. data/src/core/lib/transport/connectivity_state.h +2 -3
  430. data/src/core/lib/transport/error_utils.cc +4 -2
  431. data/src/core/lib/transport/error_utils.h +5 -1
  432. data/src/core/lib/{channel → transport}/handshaker.cc +9 -4
  433. data/src/core/lib/{channel → transport}/handshaker.h +13 -6
  434. data/src/core/lib/{channel → transport}/handshaker_factory.h +9 -10
  435. data/src/core/lib/{channel → transport}/handshaker_registry.cc +5 -1
  436. data/src/core/lib/{channel → transport}/handshaker_registry.h +5 -4
  437. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.cc +24 -10
  438. data/src/core/{ext/filters/client_channel → lib/transport}/http_connect_handshaker.h +3 -3
  439. data/src/core/lib/transport/metadata_batch.cc +287 -0
  440. data/src/core/lib/transport/metadata_batch.h +133 -264
  441. data/src/core/lib/transport/parsed_metadata.cc +2 -0
  442. data/src/core/lib/transport/parsed_metadata.h +10 -3
  443. data/src/core/lib/transport/status_conversion.cc +2 -0
  444. data/src/core/lib/transport/status_conversion.h +2 -2
  445. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  446. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  447. data/src/core/lib/transport/timeout_encoding.cc +2 -6
  448. data/src/core/lib/transport/timeout_encoding.h +5 -1
  449. data/src/core/lib/transport/transport.cc +18 -17
  450. data/src/core/lib/transport/transport.h +28 -2
  451. data/src/core/lib/transport/transport_impl.h +10 -0
  452. data/src/core/lib/transport/transport_op_string.cc +9 -10
  453. data/src/core/lib/uri/uri_parser.cc +11 -3
  454. data/src/core/lib/uri/uri_parser.h +0 -2
  455. data/src/core/plugin_registry/grpc_plugin_registry.cc +11 -0
  456. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  457. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  458. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -0
  459. data/src/ruby/ext/grpc/extconf.rb +2 -2
  460. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  461. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  462. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  463. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  464. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  465. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  466. data/src/ruby/lib/grpc/version.rb +1 -1
  467. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  468. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  469. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +504 -0
  470. metadata +36 -29
  471. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  472. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  473. data/src/core/lib/event_engine/sockaddr.h +0 -44
  474. data/src/core/lib/gprpp/capture.h +0 -76
  475. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  476. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  477. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -172
  478. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  479. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -85
  480. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -87
  481. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  482. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -47
  483. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -37
  484. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -133
  485. data/src/core/lib/iomgr/event_engine/resolver.h +0 -56
  486. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -296
  487. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
@@ -22,301 +22,134 @@
22
22
 
23
23
  #include <string.h>
24
24
 
25
+ #include <grpc/grpc.h>
25
26
  #include <grpc/support/alloc.h>
26
27
  #include <grpc/support/log.h>
27
28
 
28
29
  #include "src/core/lib/channel/channel_args.h"
29
30
  #include "src/core/lib/gprpp/manual_constructor.h"
30
31
  #include "src/core/lib/profiling/timers.h"
32
+ #include "src/core/lib/promise/call_push_pull.h"
33
+ #include "src/core/lib/promise/promise.h"
34
+ #include "src/core/lib/promise/seq.h"
31
35
  #include "src/core/lib/slice/b64.h"
32
36
  #include "src/core/lib/slice/percent_encoding.h"
33
37
  #include "src/core/lib/slice/slice_internal.h"
34
38
  #include "src/core/lib/slice/slice_string_helpers.h"
35
39
 
36
- static void hs_recv_initial_metadata_ready(void* user_data,
37
- grpc_error_handle err);
38
- static void hs_recv_trailing_metadata_ready(void* user_data,
39
- grpc_error_handle err);
40
+ namespace grpc_core {
40
41
 
41
- namespace {
42
-
43
- struct call_data {
44
- call_data(grpc_call_element* elem, const grpc_call_element_args& args)
45
- : call_combiner(args.call_combiner) {
46
- GRPC_CLOSURE_INIT(&recv_initial_metadata_ready,
47
- hs_recv_initial_metadata_ready, elem,
48
- grpc_schedule_on_exec_ctx);
49
- GRPC_CLOSURE_INIT(&recv_trailing_metadata_ready,
50
- hs_recv_trailing_metadata_ready, elem,
51
- grpc_schedule_on_exec_ctx);
52
- }
53
-
54
- ~call_data() { GRPC_ERROR_UNREF(recv_initial_metadata_ready_error); }
55
-
56
- grpc_core::CallCombiner* call_combiner;
57
-
58
- // State for intercepting recv_initial_metadata.
59
- grpc_closure recv_initial_metadata_ready;
60
- grpc_error_handle recv_initial_metadata_ready_error = GRPC_ERROR_NONE;
61
- grpc_closure* original_recv_initial_metadata_ready;
62
- grpc_metadata_batch* recv_initial_metadata = nullptr;
63
- uint32_t* recv_initial_metadata_flags;
64
- bool seen_recv_initial_metadata_ready = false;
65
-
66
- // State for intercepting recv_trailing_metadata
67
- grpc_closure recv_trailing_metadata_ready;
68
- grpc_closure* original_recv_trailing_metadata_ready;
69
- grpc_error_handle recv_trailing_metadata_ready_error;
70
- bool seen_recv_trailing_metadata_ready = false;
71
- };
72
-
73
- struct channel_data {
74
- bool surface_user_agent;
75
- };
76
-
77
- } // namespace
78
-
79
- static grpc_error_handle hs_filter_outgoing_metadata(grpc_metadata_batch* b) {
80
- if (grpc_core::Slice* grpc_message =
81
- b->get_pointer(grpc_core::GrpcMessageMetadata())) {
82
- *grpc_message = grpc_core::PercentEncodeSlice(
83
- std::move(*grpc_message), grpc_core::PercentEncodingType::Compatible);
84
- }
85
- return GRPC_ERROR_NONE;
86
- }
42
+ const grpc_channel_filter HttpServerFilter::kFilter =
43
+ MakePromiseBasedFilter<HttpServerFilter, FilterEndpoint::kServer,
44
+ kFilterExaminesServerInitialMetadata>("http-server");
87
45
 
88
- static void hs_add_error(const char* error_name, grpc_error_handle* cumulative,
89
- grpc_error_handle new_err) {
90
- if (new_err == GRPC_ERROR_NONE) return;
91
- if (*cumulative == GRPC_ERROR_NONE) {
92
- *cumulative = GRPC_ERROR_CREATE_FROM_COPIED_STRING(error_name);
46
+ namespace {
47
+ void FilterOutgoingMetadata(ServerMetadata* md) {
48
+ if (Slice* grpc_message = md->get_pointer(GrpcMessageMetadata())) {
49
+ *grpc_message = PercentEncodeSlice(std::move(*grpc_message),
50
+ PercentEncodingType::Compatible);
93
51
  }
94
- *cumulative = grpc_error_add_child(*cumulative, new_err);
95
52
  }
53
+ } // namespace
96
54
 
97
- static grpc_error_handle hs_filter_incoming_metadata(grpc_call_element* elem,
98
- grpc_metadata_batch* b) {
99
- grpc_error_handle error = GRPC_ERROR_NONE;
100
- static const char* error_name = "Failed processing incoming headers";
55
+ ArenaPromise<ServerMetadataHandle> HttpServerFilter::MakeCallPromise(
56
+ CallArgs call_args, NextPromiseFactory next_promise_factory) {
57
+ const auto& md = call_args.client_initial_metadata;
101
58
 
102
- auto method = b->get(grpc_core::HttpMethodMetadata());
59
+ auto method = md->get(HttpMethodMetadata());
103
60
  if (method.has_value()) {
104
61
  switch (*method) {
105
- case grpc_core::HttpMethodMetadata::kPost:
106
- break;
107
- case grpc_core::HttpMethodMetadata::kInvalid:
108
- case grpc_core::HttpMethodMetadata::kGet:
109
- hs_add_error(error_name, &error,
110
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad method header"));
62
+ case HttpMethodMetadata::kPost:
111
63
  break;
64
+ case HttpMethodMetadata::kPut:
65
+ if (allow_put_requests_) {
66
+ break;
67
+ }
68
+ ABSL_FALLTHROUGH_INTENDED;
69
+ case HttpMethodMetadata::kInvalid:
70
+ case HttpMethodMetadata::kGet:
71
+ return Immediate(
72
+ ServerMetadataHandle(absl::UnknownError("Bad method header")));
112
73
  }
113
74
  } else {
114
- hs_add_error(error_name, &error,
115
- grpc_error_set_str(
116
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
117
- GRPC_ERROR_STR_KEY, ":method"));
75
+ return Immediate(
76
+ ServerMetadataHandle(absl::UnknownError("Missing :method header")));
118
77
  }
119
78
 
120
- auto te = b->Take(grpc_core::TeMetadata());
121
- if (te == grpc_core::TeMetadata::kTrailers) {
79
+ auto te = md->Take(TeMetadata());
80
+ if (te == TeMetadata::kTrailers) {
122
81
  // Do nothing, ok.
123
82
  } else if (!te.has_value()) {
124
- hs_add_error(error_name, &error,
125
- grpc_error_set_str(
126
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
127
- GRPC_ERROR_STR_KEY, "te"));
83
+ return Immediate(
84
+ ServerMetadataHandle(absl::UnknownError("Missing :te header")));
128
85
  } else {
129
- hs_add_error(error_name, &error,
130
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad te header"));
86
+ return Immediate(
87
+ ServerMetadataHandle(absl::UnknownError("Bad :te header")));
131
88
  }
132
89
 
133
- auto scheme = b->Take(grpc_core::HttpSchemeMetadata());
90
+ auto scheme = md->Take(HttpSchemeMetadata());
134
91
  if (scheme.has_value()) {
135
- if (*scheme == grpc_core::HttpSchemeMetadata::kInvalid) {
136
- hs_add_error(error_name, &error,
137
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Bad :scheme header"));
92
+ if (*scheme == HttpSchemeMetadata::kInvalid) {
93
+ return Immediate(
94
+ ServerMetadataHandle(absl::UnknownError("Bad :scheme header")));
138
95
  }
139
96
  } else {
140
- hs_add_error(error_name, &error,
141
- grpc_error_set_str(
142
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
143
- GRPC_ERROR_STR_KEY, ":scheme"));
97
+ return Immediate(
98
+ ServerMetadataHandle(absl::UnknownError("Missing :scheme header")));
144
99
  }
145
100
 
146
- b->Remove(grpc_core::ContentTypeMetadata());
101
+ md->Remove(ContentTypeMetadata());
147
102
 
148
- grpc_core::Slice* path_slice = b->get_pointer(grpc_core::HttpPathMetadata());
103
+ Slice* path_slice = md->get_pointer(HttpPathMetadata());
149
104
  if (path_slice == nullptr) {
150
- hs_add_error(error_name, &error,
151
- grpc_error_set_str(
152
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
153
- GRPC_ERROR_STR_KEY, ":path"));
105
+ return Immediate(
106
+ ServerMetadataHandle(absl::UnknownError("Missing :path header")));
154
107
  }
155
108
 
156
- if (b->get_pointer(grpc_core::HttpAuthorityMetadata()) == nullptr) {
157
- absl::optional<grpc_core::Slice> host = b->Take(grpc_core::HostMetadata());
109
+ if (md->get_pointer(HttpAuthorityMetadata()) == nullptr) {
110
+ absl::optional<Slice> host = md->Take(HostMetadata());
158
111
  if (host.has_value()) {
159
- b->Set(grpc_core::HttpAuthorityMetadata(), std::move(*host));
112
+ md->Set(HttpAuthorityMetadata(), std::move(*host));
160
113
  }
161
114
  }
162
115
 
163
- if (b->get_pointer(grpc_core::HttpAuthorityMetadata()) == nullptr) {
164
- hs_add_error(error_name, &error,
165
- grpc_error_set_str(
166
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Missing header"),
167
- GRPC_ERROR_STR_KEY, ":authority"));
116
+ if (md->get_pointer(HttpAuthorityMetadata()) == nullptr) {
117
+ return Immediate(
118
+ ServerMetadataHandle(absl::UnknownError("Missing :authority header")));
168
119
  }
169
120
 
170
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
171
- if (!chand->surface_user_agent) {
172
- b->Remove(grpc_core::UserAgentMetadata());
121
+ if (!surface_user_agent_) {
122
+ md->Remove(UserAgentMetadata());
173
123
  }
174
124
 
175
- return error;
176
- }
125
+ auto* read_latch = GetContext<Arena>()->New<Latch<ServerMetadata*>>();
126
+ auto* write_latch =
127
+ absl::exchange(call_args.server_initial_metadata, read_latch);
177
128
 
178
- static void hs_recv_initial_metadata_ready(void* user_data,
179
- grpc_error_handle err) {
180
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
181
- call_data* calld = static_cast<call_data*>(elem->call_data);
182
- calld->seen_recv_initial_metadata_ready = true;
183
- if (err == GRPC_ERROR_NONE) {
184
- err = hs_filter_incoming_metadata(elem, calld->recv_initial_metadata);
185
- calld->recv_initial_metadata_ready_error = GRPC_ERROR_REF(err);
186
- } else {
187
- (void)GRPC_ERROR_REF(err);
188
- }
189
- if (calld->seen_recv_trailing_metadata_ready) {
190
- GRPC_CALL_COMBINER_START(calld->call_combiner,
191
- &calld->recv_trailing_metadata_ready,
192
- calld->recv_trailing_metadata_ready_error,
193
- "resuming hs_recv_trailing_metadata_ready from "
194
- "hs_recv_initial_metadata_ready");
195
- }
196
- grpc_core::Closure::Run(DEBUG_LOCATION,
197
- calld->original_recv_initial_metadata_ready, err);
129
+ return CallPushPull(Seq(next_promise_factory(std::move(call_args)),
130
+ [](ServerMetadataHandle md) -> ServerMetadataHandle {
131
+ FilterOutgoingMetadata(md.get());
132
+ return md;
133
+ }),
134
+ Seq(read_latch->Wait(),
135
+ [write_latch](ServerMetadata** md) {
136
+ FilterOutgoingMetadata(*md);
137
+ (*md)->Set(HttpStatusMetadata(), 200);
138
+ (*md)->Set(ContentTypeMetadata(),
139
+ ContentTypeMetadata::kApplicationGrpc);
140
+ write_latch->Set(*md);
141
+ return absl::OkStatus();
142
+ }),
143
+ []() { return absl::OkStatus(); });
198
144
  }
199
145
 
200
- static void hs_recv_trailing_metadata_ready(void* user_data,
201
- grpc_error_handle err) {
202
- grpc_call_element* elem = static_cast<grpc_call_element*>(user_data);
203
- call_data* calld = static_cast<call_data*>(elem->call_data);
204
- if (!calld->seen_recv_initial_metadata_ready) {
205
- calld->recv_trailing_metadata_ready_error = GRPC_ERROR_REF(err);
206
- calld->seen_recv_trailing_metadata_ready = true;
207
- GRPC_CALL_COMBINER_STOP(calld->call_combiner,
208
- "deferring hs_recv_trailing_metadata_ready until "
209
- "ater hs_recv_initial_metadata_ready");
210
- return;
211
- }
212
- err = grpc_error_add_child(
213
- GRPC_ERROR_REF(err),
214
- GRPC_ERROR_REF(calld->recv_initial_metadata_ready_error));
215
- grpc_core::Closure::Run(DEBUG_LOCATION,
216
- calld->original_recv_trailing_metadata_ready, err);
146
+ absl::StatusOr<HttpServerFilter> HttpServerFilter::Create(ChannelArgs args,
147
+ ChannelFilter::Args) {
148
+ return HttpServerFilter(
149
+ args.GetBool(GRPC_ARG_SURFACE_USER_AGENT).value_or(true),
150
+ args.GetBool(
151
+ GRPC_ARG_DO_NOT_USE_UNLESS_YOU_HAVE_PERMISSION_FROM_GRPC_TEAM_ALLOW_BROKEN_PUT_REQUESTS)
152
+ .value_or(false));
217
153
  }
218
154
 
219
- static grpc_error_handle hs_mutate_op(grpc_call_element* elem,
220
- grpc_transport_stream_op_batch* op) {
221
- /* grab pointers to our data from the call element */
222
- call_data* calld = static_cast<call_data*>(elem->call_data);
223
-
224
- if (op->send_initial_metadata) {
225
- grpc_error_handle error = GRPC_ERROR_NONE;
226
- static const char* error_name = "Failed sending initial metadata";
227
- op->payload->send_initial_metadata.send_initial_metadata->Set(
228
- grpc_core::HttpStatusMetadata(), 200);
229
- op->payload->send_initial_metadata.send_initial_metadata->Set(
230
- grpc_core::ContentTypeMetadata(),
231
- grpc_core::ContentTypeMetadata::kApplicationGrpc);
232
- hs_add_error(error_name, &error,
233
- hs_filter_outgoing_metadata(
234
- op->payload->send_initial_metadata.send_initial_metadata));
235
- if (error != GRPC_ERROR_NONE) return error;
236
- }
237
-
238
- if (op->recv_initial_metadata) {
239
- /* substitute our callback for the higher callback */
240
- GPR_ASSERT(op->payload->recv_initial_metadata.recv_flags != nullptr);
241
- calld->recv_initial_metadata =
242
- op->payload->recv_initial_metadata.recv_initial_metadata;
243
- calld->recv_initial_metadata_flags =
244
- op->payload->recv_initial_metadata.recv_flags;
245
- calld->original_recv_initial_metadata_ready =
246
- op->payload->recv_initial_metadata.recv_initial_metadata_ready;
247
- op->payload->recv_initial_metadata.recv_initial_metadata_ready =
248
- &calld->recv_initial_metadata_ready;
249
- }
250
-
251
- if (op->recv_trailing_metadata) {
252
- calld->original_recv_trailing_metadata_ready =
253
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready;
254
- op->payload->recv_trailing_metadata.recv_trailing_metadata_ready =
255
- &calld->recv_trailing_metadata_ready;
256
- }
257
-
258
- if (op->send_trailing_metadata) {
259
- grpc_error_handle error = hs_filter_outgoing_metadata(
260
- op->payload->send_trailing_metadata.send_trailing_metadata);
261
- if (error != GRPC_ERROR_NONE) return error;
262
- }
263
-
264
- return GRPC_ERROR_NONE;
265
- }
266
-
267
- static void hs_start_transport_stream_op_batch(
268
- grpc_call_element* elem, grpc_transport_stream_op_batch* op) {
269
- GPR_TIMER_SCOPE("hs_start_transport_stream_op_batch", 0);
270
- call_data* calld = static_cast<call_data*>(elem->call_data);
271
- grpc_error_handle error = hs_mutate_op(elem, op);
272
- if (error != GRPC_ERROR_NONE) {
273
- grpc_transport_stream_op_batch_finish_with_failure(op, error,
274
- calld->call_combiner);
275
- } else {
276
- grpc_call_next_op(elem, op);
277
- }
278
- }
279
-
280
- /* Constructor for call_data */
281
- static grpc_error_handle hs_init_call_elem(grpc_call_element* elem,
282
- const grpc_call_element_args* args) {
283
- new (elem->call_data) call_data(elem, *args);
284
- return GRPC_ERROR_NONE;
285
- }
286
-
287
- /* Destructor for call_data */
288
- static void hs_destroy_call_elem(grpc_call_element* elem,
289
- const grpc_call_final_info* /*final_info*/,
290
- grpc_closure* /*ignored*/) {
291
- call_data* calld = static_cast<call_data*>(elem->call_data);
292
- calld->~call_data();
293
- }
294
-
295
- /* Constructor for channel_data */
296
- static grpc_error_handle hs_init_channel_elem(grpc_channel_element* elem,
297
- grpc_channel_element_args* args) {
298
- channel_data* chand = static_cast<channel_data*>(elem->channel_data);
299
- GPR_ASSERT(!args->is_last);
300
- chand->surface_user_agent = grpc_channel_arg_get_bool(
301
- grpc_channel_args_find(args->channel_args,
302
- const_cast<char*>(GRPC_ARG_SURFACE_USER_AGENT)),
303
- true);
304
- return GRPC_ERROR_NONE;
305
- }
306
-
307
- /* Destructor for channel data */
308
- static void hs_destroy_channel_elem(grpc_channel_element* /*elem*/) {}
309
-
310
- const grpc_channel_filter grpc_http_server_filter = {
311
- hs_start_transport_stream_op_batch,
312
- nullptr,
313
- grpc_channel_next_op,
314
- sizeof(call_data),
315
- hs_init_call_elem,
316
- grpc_call_stack_ignore_set_pollset_or_pollset_set,
317
- hs_destroy_call_elem,
318
- sizeof(channel_data),
319
- hs_init_channel_elem,
320
- hs_destroy_channel_elem,
321
- grpc_channel_next_get_info,
322
- "http-server"};
155
+ } // namespace grpc_core
@@ -22,8 +22,37 @@
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
24
  #include "src/core/lib/channel/channel_stack.h"
25
+ #include "src/core/lib/channel/promise_based_filter.h"
25
26
 
26
- /* Processes metadata on the server side for HTTP2 transports */
27
- extern const grpc_channel_filter grpc_http_server_filter;
27
+ namespace grpc_core {
28
+
29
+ // Processes metadata on the server side for HTTP2 transports
30
+ class HttpServerFilter : public ChannelFilter {
31
+ public:
32
+ static const grpc_channel_filter kFilter;
33
+
34
+ static absl::StatusOr<HttpServerFilter> Create(
35
+ ChannelArgs args, ChannelFilter::Args filter_args);
36
+
37
+ // Construct a promise for one call.
38
+ ArenaPromise<ServerMetadataHandle> MakeCallPromise(
39
+ CallArgs call_args, NextPromiseFactory next_promise_factory) override;
40
+
41
+ private:
42
+ HttpServerFilter(bool surface_user_agent, bool allow_put_requests)
43
+ : surface_user_agent_(surface_user_agent),
44
+ allow_put_requests_(allow_put_requests) {}
45
+
46
+ bool surface_user_agent_;
47
+ bool allow_put_requests_;
48
+ };
49
+
50
+ } // namespace grpc_core
51
+
52
+ // A Temporary channel arg that allows servers to accept PUT requests. DO NOT
53
+ // USE WITHOUT PERMISSION.
54
+ #define GRPC_ARG_DO_NOT_USE_UNLESS_YOU_HAVE_PERMISSION_FROM_GRPC_TEAM_ALLOW_BROKEN_PUT_REQUESTS \
55
+ "grpc.http.do_not_use_unless_you_have_permission_from_grpc_team_allow_" \
56
+ "broken_put_requests"
28
57
 
29
58
  #endif /* GRPC_CORE_EXT_FILTERS_HTTP_SERVER_HTTP_SERVER_FILTER_H */
@@ -120,18 +120,16 @@ size_t MessageSizeParser::ParserIndex() {
120
120
  parser_name());
121
121
  }
122
122
 
123
- int GetMaxRecvSizeFromChannelArgs(const grpc_channel_args* args) {
124
- if (grpc_channel_args_want_minimal_stack(args)) return -1;
125
- return grpc_channel_args_find_integer(
126
- args, GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH,
127
- {GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH, -1, INT_MAX});
123
+ int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args) {
124
+ if (args.WantMinimalStack()) return -1;
125
+ return std::max(-1, args.GetInt(GRPC_ARG_MAX_RECEIVE_MESSAGE_LENGTH)
126
+ .value_or(GRPC_DEFAULT_MAX_RECV_MESSAGE_LENGTH));
128
127
  }
129
128
 
130
- int GetMaxSendSizeFromChannelArgs(const grpc_channel_args* args) {
131
- if (grpc_channel_args_want_minimal_stack(args)) return -1;
132
- return grpc_channel_args_find_integer(
133
- args, GRPC_ARG_MAX_SEND_MESSAGE_LENGTH,
134
- {GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH, -1, INT_MAX});
129
+ int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args) {
130
+ if (args.WantMinimalStack()) return -1;
131
+ return std::max(-1, args.GetInt(GRPC_ARG_MAX_SEND_MESSAGE_LENGTH)
132
+ .value_or(GRPC_DEFAULT_MAX_SEND_MESSAGE_LENGTH));
135
133
  }
136
134
 
137
135
  } // namespace grpc_core
@@ -308,7 +306,7 @@ static void message_size_destroy_call_elem(
308
306
  }
309
307
 
310
308
  grpc_core::MessageSizeParsedConfig::message_size_limits get_message_size_limits(
311
- const grpc_channel_args* channel_args) {
309
+ const grpc_core::ChannelArgs& channel_args) {
312
310
  grpc_core::MessageSizeParsedConfig::message_size_limits lim;
313
311
  lim.max_send_size = grpc_core::GetMaxSendSizeFromChannelArgs(channel_args);
314
312
  lim.max_recv_size = grpc_core::GetMaxRecvSizeFromChannelArgs(channel_args);
@@ -321,7 +319,8 @@ static grpc_error_handle message_size_init_channel_elem(
321
319
  GPR_ASSERT(!args->is_last);
322
320
  channel_data* chand = static_cast<channel_data*>(elem->channel_data);
323
321
  new (chand) channel_data();
324
- chand->limits = get_message_size_limits(args->channel_args);
322
+ chand->limits = get_message_size_limits(
323
+ grpc_core::ChannelArgs::FromC(args->channel_args));
325
324
  return GRPC_ERROR_NONE;
326
325
  }
327
326
 
@@ -341,6 +340,7 @@ const grpc_channel_filter grpc_message_size_filter = {
341
340
  message_size_destroy_call_elem,
342
341
  sizeof(channel_data),
343
342
  message_size_init_channel_elem,
343
+ grpc_channel_stack_no_post_init,
344
344
  message_size_destroy_channel_elem,
345
345
  grpc_channel_next_get_info,
346
346
  "message_size"};
@@ -348,11 +348,10 @@ const grpc_channel_filter grpc_message_size_filter = {
348
348
  // Used for GRPC_CLIENT_SUBCHANNEL
349
349
  static bool maybe_add_message_size_filter_subchannel(
350
350
  grpc_core::ChannelStackBuilder* builder) {
351
- const grpc_channel_args* channel_args = builder->channel_args();
352
- if (grpc_channel_args_want_minimal_stack(channel_args)) {
351
+ if (builder->channel_args().WantMinimalStack()) {
353
352
  return true;
354
353
  }
355
- builder->PrependFilter(&grpc_message_size_filter, nullptr);
354
+ builder->PrependFilter(&grpc_message_size_filter);
356
355
  return true;
357
356
  }
358
357
 
@@ -360,21 +359,16 @@ static bool maybe_add_message_size_filter_subchannel(
360
359
  // only if message size limits or service config is specified.
361
360
  static bool maybe_add_message_size_filter(
362
361
  grpc_core::ChannelStackBuilder* builder) {
363
- const grpc_channel_args* channel_args = builder->channel_args();
364
- if (grpc_channel_args_want_minimal_stack(channel_args)) {
362
+ auto channel_args = builder->channel_args();
363
+ if (channel_args.WantMinimalStack()) {
365
364
  return true;
366
365
  }
367
- bool enable = false;
368
366
  grpc_core::MessageSizeParsedConfig::message_size_limits lim =
369
367
  get_message_size_limits(channel_args);
370
- if (lim.max_send_size != -1 || lim.max_recv_size != -1) {
371
- enable = true;
372
- }
373
- const grpc_arg* a =
374
- grpc_channel_args_find(channel_args, GRPC_ARG_SERVICE_CONFIG);
375
- const char* svc_cfg_str = grpc_channel_arg_get_string(a);
376
- if (svc_cfg_str != nullptr) enable = true;
377
- if (enable) builder->PrependFilter(&grpc_message_size_filter, nullptr);
368
+ const bool enable =
369
+ lim.max_send_size != -1 || lim.max_recv_size != -1 ||
370
+ channel_args.GetString(GRPC_ARG_SERVICE_CONFIG).has_value();
371
+ if (enable) builder->PrependFilter(&grpc_message_size_filter);
378
372
  return true;
379
373
  }
380
374
 
@@ -65,8 +65,8 @@ class MessageSizeParser : public ServiceConfigParser::Parser {
65
65
  static absl::string_view parser_name() { return "message_size"; }
66
66
  };
67
67
 
68
- int GetMaxRecvSizeFromChannelArgs(const grpc_channel_args* args);
69
- int GetMaxSendSizeFromChannelArgs(const grpc_channel_args* args);
68
+ int GetMaxRecvSizeFromChannelArgs(const ChannelArgs& args);
69
+ int GetMaxSendSizeFromChannelArgs(const ChannelArgs& args);
70
70
 
71
71
  } // namespace grpc_core
72
72
 
@@ -118,6 +118,7 @@ const grpc_channel_filter RbacFilter::kFilterVtable = {
118
118
  RbacFilter::CallData::Destroy,
119
119
  sizeof(RbacFilter),
120
120
  RbacFilter::Init,
121
+ grpc_channel_stack_no_post_init,
121
122
  RbacFilter::Destroy,
122
123
  grpc_channel_next_get_info,
123
124
  "rbac_filter",