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
@@ -0,0 +1,286 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_EVENT_ENGINE_SLICE_H
16
+ #define GRPC_EVENT_ENGINE_SLICE_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <string.h>
21
+
22
+ #include <cstdint>
23
+ #include <string>
24
+ #include <utility>
25
+
26
+ #include "absl/strings/string_view.h"
27
+
28
+ #include <grpc/slice.h>
29
+ #include <grpc/support/log.h>
30
+
31
+ // This public slice definition largely based of the internal grpc_core::Slice
32
+ // implementation. Changes to this implementation might warrant changes to the
33
+ // internal grpc_core::Slice type as well.
34
+
35
+ namespace grpc_event_engine {
36
+ namespace experimental {
37
+
38
+ // Forward declarations
39
+ class Slice;
40
+ class MutableSlice;
41
+
42
+ namespace slice_detail {
43
+
44
+ // Returns an empty slice.
45
+ static constexpr grpc_slice EmptySlice() { return {nullptr, {}}; }
46
+
47
+ // BaseSlice holds the grpc_slice object, but does not apply refcounting policy.
48
+ // It does export immutable access into the slice, such that this can be shared
49
+ // by all storage policies.
50
+ class BaseSlice {
51
+ public:
52
+ BaseSlice(const BaseSlice&) = delete;
53
+ BaseSlice& operator=(const BaseSlice&) = delete;
54
+ BaseSlice(BaseSlice&& other) = delete;
55
+ BaseSlice& operator=(BaseSlice&& other) = delete;
56
+
57
+ // Iterator access to the underlying bytes
58
+ const uint8_t* begin() const { return GRPC_SLICE_START_PTR(c_slice()); }
59
+ const uint8_t* end() const { return GRPC_SLICE_END_PTR(c_slice()); }
60
+ const uint8_t* cbegin() const { return GRPC_SLICE_START_PTR(c_slice()); }
61
+ const uint8_t* cend() const { return GRPC_SLICE_END_PTR(c_slice()); }
62
+
63
+ // Retrieve a borrowed reference to the underlying grpc_slice.
64
+ const grpc_slice& c_slice() const { return slice_; }
65
+
66
+ // Retrieve the underlying grpc_slice, and replace the one in this object with
67
+ // EmptySlice().
68
+ grpc_slice TakeCSlice() {
69
+ grpc_slice out = slice_;
70
+ slice_ = EmptySlice();
71
+ return out;
72
+ }
73
+
74
+ // As other things... borrowed references.
75
+ absl::string_view as_string_view() const {
76
+ return absl::string_view(reinterpret_cast<const char*>(data()), size());
77
+ }
78
+
79
+ // Array access
80
+ uint8_t operator[](size_t i) const {
81
+ return GRPC_SLICE_START_PTR(c_slice())[i];
82
+ }
83
+
84
+ // Access underlying data
85
+ const uint8_t* data() const { return GRPC_SLICE_START_PTR(c_slice()); }
86
+
87
+ // Size of the slice
88
+ size_t size() const { return GRPC_SLICE_LENGTH(c_slice()); }
89
+ size_t length() const { return size(); }
90
+ bool empty() const { return size() == 0; }
91
+
92
+ // For inlined slices - are these two slices equal?
93
+ // For non-inlined slices - do these two slices refer to the same block of
94
+ // memory?
95
+ bool is_equivalent(const BaseSlice& other) const {
96
+ return grpc_slice_is_equivalent(slice_, other.slice_);
97
+ }
98
+
99
+ uint32_t Hash() const;
100
+
101
+ protected:
102
+ BaseSlice() : slice_(EmptySlice()) {}
103
+ explicit BaseSlice(const grpc_slice& slice) : slice_(slice) {}
104
+ ~BaseSlice() = default;
105
+
106
+ void Swap(BaseSlice* other) { std::swap(slice_, other->slice_); }
107
+ void SetCSlice(const grpc_slice& slice) { slice_ = slice; }
108
+
109
+ uint8_t* mutable_data() { return GRPC_SLICE_START_PTR(slice_); }
110
+
111
+ grpc_slice* c_slice_ptr() { return &slice_; }
112
+
113
+ private:
114
+ grpc_slice slice_;
115
+ };
116
+
117
+ inline bool operator==(const BaseSlice& a, const BaseSlice& b) {
118
+ return grpc_slice_eq(a.c_slice(), b.c_slice()) != 0;
119
+ }
120
+
121
+ inline bool operator!=(const BaseSlice& a, const BaseSlice& b) {
122
+ return grpc_slice_eq(a.c_slice(), b.c_slice()) == 0;
123
+ }
124
+
125
+ inline bool operator==(const BaseSlice& a, absl::string_view b) {
126
+ return a.as_string_view() == b;
127
+ }
128
+
129
+ inline bool operator!=(const BaseSlice& a, absl::string_view b) {
130
+ return a.as_string_view() != b;
131
+ }
132
+
133
+ inline bool operator==(absl::string_view a, const BaseSlice& b) {
134
+ return a == b.as_string_view();
135
+ }
136
+
137
+ inline bool operator!=(absl::string_view a, const BaseSlice& b) {
138
+ return a != b.as_string_view();
139
+ }
140
+
141
+ inline bool operator==(const BaseSlice& a, const grpc_slice& b) {
142
+ return grpc_slice_eq(a.c_slice(), b) != 0;
143
+ }
144
+
145
+ inline bool operator!=(const BaseSlice& a, const grpc_slice& b) {
146
+ return grpc_slice_eq(a.c_slice(), b) == 0;
147
+ }
148
+
149
+ inline bool operator==(const grpc_slice& a, const BaseSlice& b) {
150
+ return grpc_slice_eq(a, b.c_slice()) != 0;
151
+ }
152
+
153
+ inline bool operator!=(const grpc_slice& a, const BaseSlice& b) {
154
+ return grpc_slice_eq(a, b.c_slice()) == 0;
155
+ }
156
+
157
+ template <typename Out>
158
+ struct CopyConstructors {
159
+ static Out FromCopiedString(const char* s) {
160
+ return FromCopiedBuffer(s, strlen(s));
161
+ }
162
+ static Out FromCopiedString(absl::string_view s) {
163
+ return FromCopiedBuffer(s.data(), s.size());
164
+ }
165
+ static Out FromCopiedString(std::string s);
166
+
167
+ static Out FromCopiedBuffer(const char* p, size_t len) {
168
+ return Out(grpc_slice_from_copied_buffer(p, len));
169
+ }
170
+
171
+ template <typename Buffer>
172
+ static Out FromCopiedBuffer(const Buffer& buffer) {
173
+ return FromCopiedBuffer(reinterpret_cast<const char*>(buffer.data()),
174
+ buffer.size());
175
+ }
176
+ };
177
+
178
+ } // namespace slice_detail
179
+
180
+ class MutableSlice : public slice_detail::BaseSlice,
181
+ public slice_detail::CopyConstructors<MutableSlice> {
182
+ public:
183
+ MutableSlice() = default;
184
+ explicit MutableSlice(const grpc_slice& slice);
185
+ ~MutableSlice();
186
+
187
+ MutableSlice(const MutableSlice&) = delete;
188
+ MutableSlice& operator=(const MutableSlice&) = delete;
189
+ MutableSlice(MutableSlice&& other) noexcept
190
+ : slice_detail::BaseSlice(other.TakeCSlice()) {}
191
+ MutableSlice& operator=(MutableSlice&& other) noexcept {
192
+ Swap(&other);
193
+ return *this;
194
+ }
195
+
196
+ static MutableSlice CreateUninitialized(size_t length) {
197
+ return MutableSlice(grpc_slice_malloc(length));
198
+ }
199
+
200
+ // Return a sub slice of this one. Leaves this slice in an indeterminate but
201
+ // valid state.
202
+ MutableSlice TakeSubSlice(size_t pos, size_t n) {
203
+ return MutableSlice(grpc_slice_sub_no_ref(TakeCSlice(), pos, pos + n));
204
+ }
205
+
206
+ // Iterator access to the underlying bytes
207
+ uint8_t* begin() { return mutable_data(); }
208
+ uint8_t* end() { return mutable_data() + size(); }
209
+ uint8_t* data() { return mutable_data(); }
210
+
211
+ // Array access
212
+ uint8_t& operator[](size_t i) { return mutable_data()[i]; }
213
+ };
214
+
215
+ class Slice : public slice_detail::BaseSlice,
216
+ public slice_detail::CopyConstructors<Slice> {
217
+ public:
218
+ Slice() = default;
219
+ ~Slice();
220
+ explicit Slice(const grpc_slice& slice) : slice_detail::BaseSlice(slice) {}
221
+ explicit Slice(slice_detail::BaseSlice&& other)
222
+ : slice_detail::BaseSlice(other.TakeCSlice()) {}
223
+
224
+ Slice(const Slice&) = delete;
225
+ Slice& operator=(const Slice&) = delete;
226
+ Slice(Slice&& other) noexcept : slice_detail::BaseSlice(other.TakeCSlice()) {}
227
+ Slice& operator=(Slice&& other) noexcept {
228
+ Swap(&other);
229
+ return *this;
230
+ }
231
+
232
+ // A slice might refer to some memory that we keep a refcount to (this is
233
+ // owned), or some memory that's inlined into the slice (also owned), or some
234
+ // other block of memory that we know will be available for the lifetime of
235
+ // some operation in the common case (not owned). In the *less common* case
236
+ // that we need to keep that slice text for longer than our API's guarantee us
237
+ // access, we need to take a copy and turn this into something that we do own.
238
+
239
+ // TakeOwned returns an owned slice regardless of current ownership, and
240
+ // leaves the current slice in a valid but externally unpredictable state - in
241
+ // doing so it can avoid adding a ref to the underlying slice.
242
+ Slice TakeOwned();
243
+
244
+ // AsOwned returns an owned slice but does not mutate the current slice,
245
+ // meaning that it may add a reference to the underlying slice.
246
+ Slice AsOwned() const;
247
+
248
+ // TakeMutable returns a MutableSlice, and leaves the current slice in an
249
+ // indeterminate but valid state.
250
+ // A mutable slice requires only one reference to the bytes of the slice -
251
+ // this can be achieved either with inlined storage or with a single
252
+ // reference.
253
+ // If the current slice is refcounted and there are more than one references
254
+ // to that slice, then the slice is copied in order to achieve a mutable
255
+ // version.
256
+ MutableSlice TakeMutable();
257
+
258
+ // Return a sub slice of this one. Leaves this slice in an indeterminate but
259
+ // valid state.
260
+ Slice TakeSubSlice(size_t pos, size_t n) {
261
+ return Slice(grpc_slice_sub_no_ref(TakeCSlice(), pos, pos + n));
262
+ }
263
+
264
+ // Return a sub slice of this one. Adds a reference to the underlying slice.
265
+ Slice RefSubSlice(size_t pos, size_t n) const {
266
+ return Slice(grpc_slice_sub(c_slice(), pos, pos + n));
267
+ }
268
+
269
+ // Split this slice, returning a new slice containing (split:end] and
270
+ // leaving this slice with [begin:split).
271
+ Slice Split(size_t split) {
272
+ return Slice(grpc_slice_split_tail(c_slice_ptr(), split));
273
+ }
274
+
275
+ Slice Ref() const;
276
+
277
+ Slice Copy() const { return Slice(grpc_slice_copy(c_slice())); }
278
+
279
+ static Slice FromRefcountAndBytes(grpc_slice_refcount* r,
280
+ const uint8_t* begin, const uint8_t* end);
281
+ };
282
+
283
+ } // namespace experimental
284
+ } // namespace grpc_event_engine
285
+
286
+ #endif // GRPC_EVENT_ENGINE_SLICE_H
@@ -0,0 +1,112 @@
1
+ // Copyright 2022 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_EVENT_ENGINE_SLICE_BUFFER_H
16
+ #define GRPC_EVENT_ENGINE_SLICE_BUFFER_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <string.h>
21
+
22
+ #include <cstdint>
23
+ #include <string>
24
+
25
+ #include "absl/strings/string_view.h"
26
+ #include "absl/utility/utility.h"
27
+
28
+ #include <grpc/event_engine/slice.h>
29
+ #include <grpc/slice.h>
30
+ #include <grpc/slice_buffer.h>
31
+ #include <grpc/support/log.h>
32
+
33
+ namespace grpc_event_engine {
34
+ namespace experimental {
35
+
36
+ /// A Wrapper around \a grpc_slice_buffer pointer.
37
+ ///
38
+ /// A slice buffer holds the memory for a collection of slices.
39
+ /// The SliceBuffer object itself is meant to only hide the C-style API,
40
+ /// and won't hold the data itself. In terms of lifespan, the
41
+ /// grpc_slice_buffer ought to be kept somewhere inside the caller's objects,
42
+ /// like a transport or an endpoint.
43
+ ///
44
+ /// This lifespan rule is likely to change in the future, as we may
45
+ /// collapse the grpc_slice_buffer structure straight into this class.
46
+ ///
47
+ /// The SliceBuffer API is basically a replica of the grpc_slice_buffer's,
48
+ /// and its documentation will move here once we remove the C structure,
49
+ /// which should happen before the Event Engine's API is no longer
50
+ /// an experimental API.
51
+ class SliceBuffer {
52
+ public:
53
+ explicit SliceBuffer() { grpc_slice_buffer_init(&slice_buffer_); }
54
+ SliceBuffer(const SliceBuffer& other) = delete;
55
+ SliceBuffer(SliceBuffer&& other) noexcept
56
+ : slice_buffer_(other.slice_buffer_) {
57
+ grpc_slice_buffer_reset_and_unref(&slice_buffer_);
58
+ grpc_slice_buffer_swap(&slice_buffer_, &other.slice_buffer_);
59
+ }
60
+ /// Upon destruction, the underlying raw slice buffer is cleaned out and all
61
+ /// slices are unreffed.
62
+ ~SliceBuffer() { grpc_slice_buffer_destroy(&slice_buffer_); }
63
+
64
+ /// Appends a new slice into the SliceBuffer and makes an attempt to merge
65
+ /// this slice with the last slice in the SliceBuffer.
66
+ void Append(Slice slice);
67
+
68
+ /// Adds a new slice into the SliceBuffer at the next available index.
69
+ /// Returns the index at which the new slice is added.
70
+ size_t AppendIndexed(Slice slice);
71
+
72
+ /// Returns the number of slices held by the SliceBuffer.
73
+ size_t Count() { return slice_buffer_.count; }
74
+
75
+ /// Removes/deletes the last n bytes in the SliceBuffer.
76
+ void RemoveLastNBytes(size_t n) {
77
+ grpc_slice_buffer_trim_end(&slice_buffer_, n, nullptr);
78
+ }
79
+
80
+ /// Move the first n bytes of the SliceBuffer into a memory pointed to by dst.
81
+ void MoveFirstNBytesIntoBuffer(size_t n, void* dst) {
82
+ grpc_slice_buffer_move_first_into_buffer(&slice_buffer_, n, dst);
83
+ }
84
+
85
+ /// Removes and unrefs all slices in the SliceBuffer.
86
+ void Clear() { grpc_slice_buffer_reset_and_unref(&slice_buffer_); }
87
+
88
+ /// Removes the first slice in the SliceBuffer and returns it.
89
+ Slice TakeFirst();
90
+
91
+ /// Prepends the slice to the the front of the SliceBuffer.
92
+ void Prepend(Slice slice);
93
+
94
+ /// Increased the ref-count of slice at the specified index and returns the
95
+ /// associated slice.
96
+ Slice RefSlice(size_t index);
97
+
98
+ /// The total number of bytes held by the SliceBuffer
99
+ size_t Length() { return slice_buffer_.length; }
100
+
101
+ /// Return a pointer to the back raw grpc_slice_buffer
102
+ grpc_slice_buffer* RawSliceBuffer() { return &slice_buffer_; }
103
+
104
+ private:
105
+ /// The backing raw slice buffer.
106
+ grpc_slice_buffer slice_buffer_;
107
+ };
108
+
109
+ } // namespace experimental
110
+ } // namespace grpc_event_engine
111
+
112
+ #endif // GRPC_EVENT_ENGINE_SLICE_BUFFER_H
@@ -1047,6 +1047,17 @@ typedef struct grpc_tls_certificate_verifier_external {
1047
1047
  grpc_tls_certificate_verifier* grpc_tls_certificate_verifier_external_create(
1048
1048
  grpc_tls_certificate_verifier_external* external_verifier);
1049
1049
 
1050
+ /**
1051
+ * EXPERIMENTAL API - Subject to change
1052
+ *
1053
+ * Factory function for an internal verifier that won't perform any
1054
+ * post-handshake verification. Note: using this solely without any other
1055
+ * authentication mechanisms on the peer identity will leave your applications
1056
+ * to the MITM(Man-In-The-Middle) attacks. Users should avoid doing so in
1057
+ * production environments.
1058
+ */
1059
+ grpc_tls_certificate_verifier* grpc_tls_certificate_verifier_no_op_create();
1060
+
1050
1061
  /**
1051
1062
  * EXPERIMENTAL API - Subject to change
1052
1063
  *
@@ -207,6 +207,7 @@
207
207
  #define GPR_CPU_POSIX 1
208
208
  #define GPR_PLATFORM_STRING "asylo"
209
209
  #define GPR_GCC_SYNC 1
210
+ #define GPR_POSIX_STAT 1
210
211
  #define GPR_POSIX_SYNC 1
211
212
  #define GPR_POSIX_STRING 1
212
213
  #define GPR_POSIX_LOG 1
@@ -352,6 +353,32 @@
352
353
  #else /* _LP64 */
353
354
  #define GPR_ARCH_32 1
354
355
  #endif /* _LP64 */
356
+ #elif defined(__NetBSD__)
357
+ // NetBSD is a community-supported platform.
358
+ // Please contact Thomas Klausner <wiz@NetBSD.org> for support.
359
+ #define GPR_PLATFORM_STRING "netbsd"
360
+ #ifndef _BSD_SOURCE
361
+ #define _BSD_SOURCE
362
+ #endif
363
+ #define GPR_NETBSD 1
364
+ #define GPR_CPU_POSIX 1
365
+ #define GPR_GCC_ATOMIC 1
366
+ #define GPR_GCC_TLS 1
367
+ #define GPR_POSIX_LOG 1
368
+ #define GPR_POSIX_ENV 1
369
+ #define GPR_POSIX_TMPFILE 1
370
+ #define GPR_POSIX_STAT 1
371
+ #define GPR_POSIX_STRING 1
372
+ #define GPR_POSIX_SUBPROCESS 1
373
+ #define GPR_POSIX_SYNC 1
374
+ #define GPR_POSIX_TIME 1
375
+ #define GPR_GETPID_IN_UNISTD_H 1
376
+ #define GPR_SUPPORT_CHANNELS_FROM_FD 1
377
+ #ifdef _LP64
378
+ #define GPR_ARCH_64 1
379
+ #else /* _LP64 */
380
+ #define GPR_ARCH_32 1
381
+ #endif /* _LP64 */
355
382
  #elif defined(__native_client__)
356
383
  #define GPR_PLATFORM_STRING "nacl"
357
384
  #ifndef _BSD_SOURCE
@@ -404,6 +431,32 @@
404
431
  #define GPR_HAS_PTHREAD_H 1
405
432
  #define GPR_GETPID_IN_UNISTD_H 1
406
433
  #define GRPC_ROOT_PEM_PATH "/config/ssl/cert.pem"
434
+ #elif defined(__HAIKU__)
435
+ #define GPR_PLATFORM_STRING "haiku"
436
+ // Haiku is a community-supported platform.
437
+ // Please contact Jerome Duval <jerome.duval@gmail.com> for support.
438
+ #ifndef _BSD_SOURCE
439
+ #define _BSD_SOURCE
440
+ #endif
441
+ #define GPR_HAIKU 1
442
+ #define GPR_CPU_POSIX 1
443
+ #define GPR_GCC_ATOMIC 1
444
+ #define GPR_POSIX_LOG 1
445
+ #define GPR_POSIX_ENV 1
446
+ #define GPR_POSIX_TMPFILE 1
447
+ #define GPR_POSIX_STAT 1
448
+ #define GPR_POSIX_STRING 1
449
+ #define GPR_POSIX_SUBPROCESS 1
450
+ #define GPR_POSIX_SYNC 1
451
+ #define GPR_POSIX_TIME 1
452
+ #define GPR_HAS_PTHREAD_H 1
453
+ #define GPR_GETPID_IN_UNISTD_H 1
454
+ #define GPR_SUPPORT_CHANNELS_FROM_FD 1
455
+ #ifdef _LP64
456
+ #define GPR_ARCH_64 1
457
+ #else /* _LP64 */
458
+ #define GPR_ARCH_32 1
459
+ #endif /* _LP64 */
407
460
  #else
408
461
  #error "Could not auto-detect platform"
409
462
  #endif
@@ -528,6 +581,19 @@ typedef unsigned __int64 uint64_t;
528
581
  #define GRPC_MUST_USE_RESULT
529
582
  #define GPR_ALIGN_STRUCT(n)
530
583
  #endif
584
+ #ifdef USE_STRICT_WARNING
585
+ /* When building with USE_STRICT_WARNING (which -Werror), types with this
586
+ attribute will be treated as annotated with warn_unused_result, enforcing
587
+ returned values of this type should be used.
588
+ This is added in grpc::Status in mind to address the issue where it always
589
+ has this annotation internally but OSS doesn't, sometimes causing internal
590
+ build failure. To prevent this, this is added while not introducing
591
+ a breaking change to existing user code which may not use returned values
592
+ of grpc::Status. */
593
+ #define GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING GRPC_MUST_USE_RESULT
594
+ #else
595
+ #define GRPC_MUST_USE_RESULT_WHEN_USE_STRICT_WARNING
596
+ #endif
531
597
  #endif
532
598
 
533
599
  #ifndef GRPC_UNUSED
@@ -547,14 +613,43 @@ typedef unsigned __int64 uint64_t;
547
613
  #endif
548
614
  #endif /* GPR_PRINT_FORMAT_CHECK */
549
615
 
616
+ #ifndef GPR_HAS_CPP_ATTRIBUTE
617
+ #ifdef __has_cpp_attribute
618
+ #define GPR_HAS_CPP_ATTRIBUTE(a) __has_cpp_attribute(a)
619
+ #else
620
+ #define GPR_HAS_CPP_ATTRIBUTE(a) 0
621
+ #endif
622
+ #endif /* GPR_HAS_CPP_ATTRIBUTE */
623
+
624
+ #ifndef GPR_HAS_ATTRIBUTE
625
+ #ifdef __has_attribute
626
+ #define GPR_HAS_ATTRIBUTE(a) __has_attribute(a)
627
+ #else
628
+ #define GPR_HAS_ATTRIBUTE(a) 0
629
+ #endif
630
+ #endif /* GPR_HAS_ATTRIBUTE */
631
+
632
+ #if GPR_HAS_ATTRIBUTE(noreturn)
633
+ #define GPR_ATTRIBUTE_NORETURN __attribute__((noreturn))
634
+ #else
635
+ #define GPR_ATTRIBUTE_NORETURN
636
+ #endif
637
+
550
638
  #if GPR_FORBID_UNREACHABLE_CODE
551
639
  #define GPR_UNREACHABLE_CODE(STATEMENT)
552
640
  #else
553
- #define GPR_UNREACHABLE_CODE(STATEMENT) \
554
- do { \
555
- gpr_log(GPR_ERROR, "Should never reach here."); \
556
- abort(); \
557
- STATEMENT; \
641
+ #ifdef __cplusplus
642
+ extern "C" {
643
+ #endif
644
+ extern void gpr_unreachable_code(const char* reason, const char* file,
645
+ int line) GPR_ATTRIBUTE_NORETURN;
646
+ #ifdef __cplusplus
647
+ }
648
+ #endif
649
+ #define GPR_UNREACHABLE_CODE(STATEMENT) \
650
+ do { \
651
+ gpr_unreachable_code(#STATEMENT, __FILE__, __LINE__); \
652
+ STATEMENT; \
558
653
  } while (0)
559
654
  #endif /* GPR_FORBID_UNREACHABLE_CODE */
560
655
 
@@ -570,22 +665,6 @@ typedef unsigned __int64 uint64_t;
570
665
  #define CENSUSAPI GRPCAPI
571
666
  #endif
572
667
 
573
- #ifndef GPR_HAS_CPP_ATTRIBUTE
574
- #ifdef __has_cpp_attribute
575
- #define GPR_HAS_CPP_ATTRIBUTE(a) __has_cpp_attribute(a)
576
- #else
577
- #define GPR_HAS_CPP_ATTRIBUTE(a) 0
578
- #endif
579
- #endif /* GPR_HAS_CPP_ATTRIBUTE */
580
-
581
- #ifndef GPR_HAS_ATTRIBUTE
582
- #ifdef __has_attribute
583
- #define GPR_HAS_ATTRIBUTE(a) __has_attribute(a)
584
- #else
585
- #define GPR_HAS_ATTRIBUTE(a) 0
586
- #endif
587
- #endif /* GPR_HAS_ATTRIBUTE */
588
-
589
668
  #ifndef GPR_HAS_FEATURE
590
669
  #ifdef __has_feature
591
670
  #define GPR_HAS_FEATURE(a) __has_feature(a)
@@ -692,21 +771,6 @@ typedef unsigned __int64 uint64_t;
692
771
  #define __STDC_FORMAT_MACROS
693
772
  #endif
694
773
 
695
- /* Selectively enable EventEngine on specific platforms. This default can be
696
- * overridden using the GRPC_USE_EVENT_ENGINE compiler flag.
697
- */
698
- #ifndef GRPC_USE_EVENT_ENGINE
699
- /* Not enabled by default on any platforms yet. (2021.06) */
700
- #elif GRPC_USE_EVENT_ENGINE == 0
701
- /* Building with `-DGRPC_USE_EVENT_ENGINE=0` will override the default. */
702
- #undef GRPC_USE_EVENT_ENGINE
703
- #endif /* GRPC_USE_EVENT_ENGINE */
704
-
705
- #ifdef GRPC_USE_EVENT_ENGINE
706
- #undef GPR_SUPPORT_CHANNELS_FROM_FD
707
- #define GRPC_ARES 0
708
- #endif /* GRPC_USE_EVENT_ENGINE */
709
-
710
774
  #define GRPC_CALLBACK_API_NONEXPERIMENTAL
711
775
 
712
776
  /* clang 11 with msan miscompiles destruction of [[no_unique_address]] members
@@ -19,7 +19,7 @@
19
19
  #ifndef GRPC_IMPL_CODEGEN_SLICE_H
20
20
  #define GRPC_IMPL_CODEGEN_SLICE_H
21
21
 
22
- // IWYU pragma: private, include <grpc/slice.h>
22
+ // IWYU pragma: private
23
23
 
24
24
  #include <grpc/impl/codegen/port_platform.h>
25
25