grpc 1.47.0 → 1.48.0.pre1

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

Potentially problematic release.


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

Files changed (574) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +105 -47
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +20 -11
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +2 -1
  11. data/include/grpc/impl/codegen/port_platform.h +6 -3
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +17 -5
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +16 -0
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +51 -65
  19. data/src/core/ext/filters/client_channel/client_channel.h +19 -4
  20. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  21. data/src/core/ext/filters/client_channel/connector.h +1 -1
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  23. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  24. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +73 -43
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  29. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +33 -35
  31. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +106 -112
  32. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +91 -42
  33. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +177 -138
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +4 -1
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +47 -44
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +118 -103
  37. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +83 -78
  38. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +57 -67
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +2 -2
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -7
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +13 -17
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +3 -3
  43. data/src/core/ext/filters/client_channel/lb_policy.h +0 -7
  44. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +3 -5
  45. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -1
  46. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -1
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +6 -6
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +10 -5
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +12 -3
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +5 -5
  52. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +3 -4
  53. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +1 -1
  54. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +1 -0
  55. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +24 -15
  56. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -7
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -36
  59. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  60. data/src/core/ext/filters/client_channel/retry_service_config.cc +4 -4
  61. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +2 -1
  62. data/src/core/ext/filters/client_channel/subchannel.cc +53 -50
  63. data/src/core/ext/filters/client_channel/subchannel.h +6 -22
  64. data/src/core/ext/filters/client_channel/subchannel_interface.h +10 -18
  65. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +12 -97
  66. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  67. data/src/core/ext/filters/deadline/deadline_filter.cc +12 -7
  68. data/src/core/ext/filters/deadline/deadline_filter.h +8 -1
  69. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +21 -2
  70. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +8 -3
  71. data/src/core/ext/filters/fault_injection/service_config_parser.cc +7 -4
  72. data/src/core/ext/filters/fault_injection/service_config_parser.h +17 -3
  73. data/src/core/ext/filters/http/client/http_client_filter.cc +16 -5
  74. data/src/core/ext/filters/http/client/http_client_filter.h +8 -1
  75. data/src/core/ext/filters/http/client_authority_filter.cc +11 -10
  76. data/src/core/ext/filters/http/client_authority_filter.h +5 -2
  77. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  78. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  79. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  80. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  81. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  82. data/src/core/ext/filters/http/server/http_server_filter.cc +16 -9
  83. data/src/core/ext/filters/http/server/http_server_filter.h +6 -1
  84. data/src/core/ext/filters/message_size/message_size_filter.cc +25 -15
  85. data/src/core/ext/filters/message_size/message_size_filter.h +13 -0
  86. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  87. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  88. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +13 -2
  89. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +14 -2
  90. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  91. data/src/core/ext/filters/server_config_selector/server_config_selector.h +9 -0
  92. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +22 -2
  93. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  94. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -4
  95. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +15 -15
  96. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +196 -476
  97. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -1
  98. data/src/core/ext/transport/chttp2/transport/flow_control.cc +141 -261
  99. data/src/core/ext/transport/chttp2/transport/flow_control.h +176 -289
  100. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  101. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  102. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  103. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +7 -6
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  106. data/src/core/ext/transport/chttp2/transport/internal.h +9 -111
  107. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  108. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  109. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  110. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  111. data/src/core/ext/transport/inproc/inproc_transport.cc +85 -81
  112. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  113. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  114. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +164 -0
  115. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  116. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +94 -0
  117. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  118. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  119. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  120. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  121. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  122. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  123. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  124. data/src/core/ext/xds/upb_utils.h +1 -2
  125. data/src/core/ext/xds/xds_api.cc +16 -18
  126. data/src/core/ext/xds/xds_api.h +12 -5
  127. data/src/core/ext/xds/xds_bootstrap.cc +37 -24
  128. data/src/core/ext/xds/xds_bootstrap.h +9 -11
  129. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  130. data/src/core/ext/xds/xds_certificate_provider.h +16 -1
  131. data/src/core/ext/xds/xds_channel_stack_modifier.cc +9 -0
  132. data/src/core/ext/xds/xds_channel_stack_modifier.h +5 -1
  133. data/src/core/ext/xds/xds_client.cc +71 -22
  134. data/src/core/ext/xds/xds_client.h +17 -3
  135. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  136. data/src/core/ext/xds/xds_client_stats.h +4 -3
  137. data/src/core/ext/xds/xds_cluster.cc +21 -10
  138. data/src/core/ext/xds/xds_cluster.h +9 -1
  139. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +16 -7
  140. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +1 -8
  141. data/src/core/ext/xds/xds_common_types.cc +36 -22
  142. data/src/core/ext/xds/xds_common_types.h +12 -4
  143. data/src/core/ext/xds/xds_endpoint.cc +25 -15
  144. data/src/core/ext/xds/xds_endpoint.h +13 -5
  145. data/src/core/ext/xds/xds_http_fault_filter.cc +7 -5
  146. data/src/core/ext/xds/xds_http_fault_filter.h +3 -1
  147. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  148. data/src/core/ext/xds/xds_http_filters.h +3 -3
  149. data/src/core/ext/xds/xds_http_rbac_filter.cc +16 -0
  150. data/src/core/ext/xds/xds_http_rbac_filter.h +7 -0
  151. data/src/core/ext/xds/xds_lb_policy_registry.cc +291 -0
  152. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  153. data/src/core/ext/xds/xds_listener.cc +51 -33
  154. data/src/core/ext/xds/xds_listener.h +10 -1
  155. data/src/core/ext/xds/xds_resource_type.h +3 -3
  156. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  157. data/src/core/ext/xds/xds_route_config.cc +56 -28
  158. data/src/core/ext/xds/xds_route_config.h +11 -2
  159. data/src/core/ext/xds/xds_routing.cc +16 -0
  160. data/src/core/ext/xds/xds_routing.h +7 -2
  161. data/src/core/ext/xds/xds_server_config_fetcher.cc +54 -6
  162. data/src/core/lib/address_utils/parse_address.cc +5 -8
  163. data/src/core/lib/address_utils/parse_address.h +3 -2
  164. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  165. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  166. data/src/core/lib/avl/avl.h +3 -3
  167. data/src/core/lib/backoff/backoff.cc +1 -1
  168. data/src/core/lib/backoff/backoff.h +1 -1
  169. data/src/core/lib/channel/call_tracer.h +3 -3
  170. data/src/core/lib/channel/channel_args.h +1 -0
  171. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  172. data/src/core/lib/channel/channel_fwd.h +26 -0
  173. data/src/core/lib/channel/channel_stack.cc +4 -4
  174. data/src/core/lib/channel/channel_stack.h +1 -11
  175. data/src/core/lib/channel/channel_stack_builder.h +2 -5
  176. data/src/core/lib/channel/channel_stack_builder_impl.cc +1 -1
  177. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  178. data/src/core/lib/channel/channelz.cc +2 -1
  179. data/src/core/lib/channel/channelz.h +2 -3
  180. data/src/core/lib/channel/channelz_registry.cc +4 -5
  181. data/src/core/lib/channel/connected_channel.cc +1 -0
  182. data/src/core/lib/channel/connected_channel.h +1 -0
  183. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  184. data/src/core/lib/channel/promise_based_filter.h +2 -0
  185. data/src/core/lib/compression/compression.cc +6 -1
  186. data/src/core/lib/compression/compression_internal.cc +3 -6
  187. data/src/core/lib/compression/compression_internal.h +3 -2
  188. data/src/core/lib/compression/message_compress.cc +3 -1
  189. data/src/core/lib/compression/message_compress.h +2 -3
  190. data/src/core/lib/debug/stats.cc +9 -9
  191. data/src/core/lib/debug/stats.h +2 -1
  192. data/src/core/lib/debug/stats_data.cc +2 -1
  193. data/src/core/lib/debug/stats_data.h +0 -4
  194. data/src/core/lib/debug/trace.h +13 -12
  195. data/src/core/lib/event_engine/default_event_engine_factory.cc +1 -1
  196. data/src/core/lib/event_engine/event_engine.cc +24 -19
  197. data/src/core/lib/event_engine/event_engine_factory.h +2 -2
  198. data/src/core/lib/event_engine/{iomgr_engine.cc → iomgr_engine/iomgr_engine.cc} +44 -91
  199. data/src/core/lib/event_engine/{iomgr_engine.h → iomgr_engine/iomgr_engine.h} +20 -16
  200. data/src/core/lib/event_engine/iomgr_engine/thread_pool.cc +123 -0
  201. data/src/core/lib/event_engine/iomgr_engine/thread_pool.h +70 -0
  202. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.cc +62 -0
  203. data/src/core/lib/event_engine/iomgr_engine/time_averaged_stats.h +81 -0
  204. data/src/core/lib/event_engine/iomgr_engine/timer.cc +312 -0
  205. data/src/core/lib/event_engine/iomgr_engine/timer.h +193 -0
  206. data/src/core/lib/event_engine/iomgr_engine/timer_heap.cc +107 -0
  207. data/src/core/lib/event_engine/iomgr_engine/timer_heap.h +56 -0
  208. data/src/core/lib/event_engine/iomgr_engine/timer_manager.cc +254 -0
  209. data/src/core/lib/event_engine/iomgr_engine/timer_manager.h +111 -0
  210. data/src/core/lib/event_engine/promise.h +69 -0
  211. data/src/core/lib/gpr/time_posix.cc +6 -9
  212. data/src/core/lib/gpr/time_windows.cc +10 -7
  213. data/src/core/lib/gprpp/manual_constructor.h +0 -67
  214. data/src/core/lib/gprpp/status_helper.cc +44 -30
  215. data/src/core/lib/gprpp/time.cc +8 -0
  216. data/src/core/lib/gprpp/time.h +4 -0
  217. data/src/core/lib/http/format_request.cc +5 -4
  218. data/src/core/lib/http/format_request.h +1 -1
  219. data/src/core/lib/http/httpcli.cc +18 -12
  220. data/src/core/lib/http/httpcli.h +19 -3
  221. data/src/core/lib/http/httpcli_security_connector.cc +16 -4
  222. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  223. data/src/core/lib/http/parser.cc +6 -7
  224. data/src/core/lib/http/parser.h +3 -0
  225. data/src/core/lib/iomgr/call_combiner.cc +2 -2
  226. data/src/core/lib/iomgr/endpoint.h +1 -1
  227. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  228. data/src/core/lib/iomgr/error.cc +11 -9
  229. data/src/core/lib/iomgr/error.h +9 -5
  230. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  231. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  232. data/src/core/lib/iomgr/ev_poll_posix.cc +77 -52
  233. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  234. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  235. data/src/core/lib/iomgr/ev_posix.h +5 -3
  236. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  237. data/src/core/lib/iomgr/iomgr.cc +7 -0
  238. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  239. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  240. data/src/core/lib/iomgr/load_file.cc +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +1 -1
  242. data/src/core/lib/iomgr/resolve_address_windows.cc +1 -1
  243. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  244. data/src/core/lib/iomgr/tcp_client.h +24 -13
  245. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  246. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  247. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  248. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  249. data/src/core/lib/iomgr/tcp_posix.cc +91 -29
  250. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  251. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  252. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  254. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  256. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  257. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  258. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  259. data/src/core/lib/iomgr/work_serializer.h +2 -3
  260. data/src/core/lib/matchers/matchers.cc +6 -3
  261. data/src/core/lib/matchers/matchers.h +2 -0
  262. data/src/core/lib/promise/activity.cc +0 -1
  263. data/src/core/lib/promise/activity.h +7 -13
  264. data/src/core/lib/promise/loop.h +1 -0
  265. data/src/core/lib/promise/promise.h +1 -0
  266. data/src/core/lib/promise/sleep.cc +36 -31
  267. data/src/core/lib/promise/sleep.h +25 -25
  268. data/src/core/lib/resolver/resolver.cc +5 -0
  269. data/src/core/lib/resolver/resolver.h +3 -0
  270. data/src/core/lib/resolver/resolver_factory.h +5 -2
  271. data/src/core/lib/resolver/resolver_registry.cc +2 -9
  272. data/src/core/lib/resolver/resolver_registry.h +12 -1
  273. data/src/core/lib/resolver/server_address.cc +8 -0
  274. data/src/core/lib/resolver/server_address.h +9 -2
  275. data/src/core/lib/resource_quota/memory_quota.cc +18 -60
  276. data/src/core/lib/resource_quota/memory_quota.h +11 -25
  277. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  278. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  279. data/src/core/lib/security/authorization/evaluate_args.cc +9 -3
  280. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  281. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  282. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  283. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -0
  284. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +12 -1
  285. data/src/core/lib/security/authorization/matchers.cc +9 -1
  286. data/src/core/lib/security/authorization/matchers.h +7 -0
  287. data/src/core/lib/security/authorization/rbac_policy.cc +5 -0
  288. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  289. data/src/core/lib/security/context/security_context.cc +5 -2
  290. data/src/core/lib/security/context/security_context.h +14 -2
  291. data/src/core/lib/security/credentials/alts/alts_credentials.cc +4 -2
  292. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -1
  293. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  294. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  295. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  296. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  297. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  298. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  299. data/src/core/lib/security/credentials/composite/composite_credentials.cc +4 -4
  300. data/src/core/lib/security/credentials/composite/composite_credentials.h +16 -2
  301. data/src/core/lib/security/credentials/credentials.cc +4 -8
  302. data/src/core/lib/security/credentials/credentials.h +10 -8
  303. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +28 -10
  304. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  305. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  306. data/src/core/lib/security/credentials/external/external_account_credentials.cc +24 -9
  307. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  308. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +12 -4
  309. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  310. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -4
  311. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  312. data/src/core/lib/security/credentials/fake/fake_credentials.cc +8 -6
  313. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -1
  314. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  315. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +27 -10
  316. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -1
  317. data/src/core/lib/security/credentials/iam/iam_credentials.cc +9 -3
  318. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  319. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +4 -0
  320. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +5 -0
  321. data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
  322. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  323. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +11 -5
  324. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  325. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +28 -3
  326. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  327. data/src/core/lib/security/credentials/local/local_credentials.cc +4 -3
  328. data/src/core/lib/security/credentials/local/local_credentials.h +7 -0
  329. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +26 -13
  330. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  331. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -7
  332. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  333. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -0
  334. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +13 -0
  335. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  336. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  337. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  338. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +9 -4
  339. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  340. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  341. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  342. data/src/core/lib/security/credentials/tls/tls_credentials.cc +7 -2
  343. data/src/core/lib/security/credentials/tls/tls_credentials.h +5 -1
  344. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  345. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  346. data/src/core/lib/security/credentials/xds/xds_credentials.cc +8 -1
  347. data/src/core/lib/security/credentials/xds/xds_credentials.h +14 -0
  348. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -2
  349. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  350. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +17 -1
  351. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +2 -2
  352. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +9 -0
  353. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +17 -2
  354. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  355. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  356. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  357. data/src/core/lib/security/security_connector/local/local_security_connector.cc +22 -3
  358. data/src/core/lib/security/security_connector/local/local_security_connector.h +6 -2
  359. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  360. data/src/core/lib/security/security_connector/security_connector.h +18 -6
  361. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +18 -6
  362. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  363. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  364. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  365. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  366. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +21 -13
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +23 -3
  368. data/src/core/lib/security/transport/auth_filters.h +7 -0
  369. data/src/core/lib/security/transport/client_auth_filter.cc +18 -9
  370. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  371. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  372. data/src/core/lib/security/transport/security_handshaker.cc +44 -11
  373. data/src/core/lib/security/transport/security_handshaker.h +4 -0
  374. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  375. data/src/core/lib/security/util/json_util.cc +3 -2
  376. data/src/core/lib/security/util/json_util.h +0 -2
  377. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  378. data/src/core/lib/service_config/service_config_impl.cc +6 -6
  379. data/src/core/lib/service_config/service_config_impl.h +1 -3
  380. data/src/core/lib/service_config/service_config_parser.cc +2 -4
  381. data/src/core/lib/slice/slice_buffer.cc +30 -1
  382. data/src/core/lib/slice/slice_buffer.h +37 -6
  383. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  384. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  385. data/src/core/lib/surface/call.cc +53 -115
  386. data/src/core/lib/surface/call.h +5 -1
  387. data/src/core/lib/surface/channel.h +2 -0
  388. data/src/core/lib/surface/channel_ping.cc +1 -1
  389. data/src/core/lib/surface/completion_queue.cc +15 -14
  390. data/src/core/lib/surface/completion_queue.h +2 -1
  391. data/src/core/lib/surface/init.cc +0 -1
  392. data/src/core/lib/surface/lame_client.cc +1 -1
  393. data/src/core/lib/surface/lame_client.h +1 -1
  394. data/src/core/lib/surface/server.cc +14 -8
  395. data/src/core/lib/surface/server.h +4 -1
  396. data/src/core/lib/surface/validate_metadata.cc +1 -1
  397. data/src/core/lib/surface/version.cc +2 -2
  398. data/src/core/lib/transport/error_utils.cc +13 -7
  399. data/src/core/lib/transport/handshaker.cc +3 -3
  400. data/src/core/lib/transport/http_connect_handshaker.cc +4 -4
  401. data/src/core/lib/transport/tcp_connect_handshaker.cc +2 -2
  402. data/src/core/lib/transport/transport.cc +0 -3
  403. data/src/core/lib/transport/transport.h +20 -14
  404. data/src/core/lib/transport/transport_fwd.h +20 -0
  405. data/src/core/lib/transport/transport_impl.h +1 -0
  406. data/src/core/lib/transport/transport_op_string.cc +9 -9
  407. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +1 -1
  408. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  409. data/src/core/tsi/fake_transport_security.cc +13 -1
  410. data/src/core/tsi/fake_transport_security.h +6 -0
  411. data/src/core/tsi/ssl_transport_security.cc +1 -1
  412. data/src/core/tsi/transport_security_grpc.cc +3 -2
  413. data/src/core/tsi/transport_security_grpc.h +5 -2
  414. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  415. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  416. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  417. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  418. data/src/ruby/ext/grpc/extconf.rb +49 -18
  419. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  420. data/src/ruby/lib/grpc/errors.rb +1 -1
  421. data/src/ruby/lib/grpc/version.rb +1 -1
  422. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  423. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  424. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  426. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  427. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  429. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  430. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  431. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  432. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  433. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  434. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  436. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  437. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  438. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  439. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  440. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  441. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  442. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  443. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  444. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  445. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  446. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  447. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  448. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  449. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  450. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  451. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  452. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  453. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  454. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  455. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  456. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  457. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  458. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  459. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  460. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  461. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  462. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  463. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  464. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  465. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  466. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  467. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  468. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  469. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  470. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  471. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  472. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  473. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  474. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  475. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  476. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  477. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  478. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  479. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  480. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  481. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  482. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  483. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  484. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  485. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  486. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  487. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  488. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  489. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  490. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  491. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  492. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  493. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  494. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  495. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  496. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  497. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  498. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  499. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  500. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  501. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  502. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  503. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  504. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  505. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  506. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  507. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  508. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  509. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  510. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  511. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  512. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  513. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  514. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  515. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  516. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  517. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  518. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  519. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  520. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  521. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  522. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  523. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  524. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  525. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  526. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  527. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  528. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  529. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  530. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  531. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  532. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  533. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  534. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  535. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  536. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  537. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  538. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  539. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  540. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  541. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  542. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  543. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  544. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  545. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  546. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  547. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  548. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  549. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  550. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  551. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  552. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  553. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  554. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  555. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  556. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  557. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  558. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  559. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  560. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  561. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  562. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  563. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  564. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  565. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  566. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  567. metadata +39 -15
  568. data/src/core/lib/slice/slice_split.cc +0 -103
  569. data/src/core/lib/slice/slice_split.h +0 -36
  570. data/src/core/lib/transport/byte_stream.cc +0 -165
  571. data/src/core/lib/transport/byte_stream.h +0 -170
  572. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  573. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  574. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -707,7 +707,7 @@ void Server::FailCall(size_t cq_idx, RequestedCall* rc,
707
707
  grpc_error_handle error) {
708
708
  *rc->call = nullptr;
709
709
  rc->initial_metadata->count = 0;
710
- GPR_ASSERT(error != GRPC_ERROR_NONE);
710
+ GPR_ASSERT(!GRPC_ERROR_IS_NONE(error));
711
711
  grpc_cq_end_op(cqs_[cq_idx], rc->tag, error, DoneRequestEvent, rc,
712
712
  &rc->completion);
713
713
  }
@@ -829,8 +829,13 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
829
829
  if (await_requests != nullptr) {
830
830
  await_requests->WaitForNotification();
831
831
  }
832
- // Shutdown listeners.
832
+ StopListening();
833
+ broadcaster.BroadcastShutdown(/*send_goaway=*/true, GRPC_ERROR_NONE);
834
+ }
835
+
836
+ void Server::StopListening() {
833
837
  for (auto& listener : listeners_) {
838
+ if (listener.listener == nullptr) continue;
834
839
  channelz::ListenSocketNode* channelz_listen_socket_node =
835
840
  listener.listener->channelz_listen_socket_node();
836
841
  if (channelz_node_ != nullptr && channelz_listen_socket_node != nullptr) {
@@ -842,7 +847,6 @@ void Server::ShutdownAndNotify(grpc_completion_queue* cq, void* tag) {
842
847
  listener.listener->SetOnDestroyDone(&listener.destroy_done);
843
848
  listener.listener.reset();
844
849
  }
845
- broadcaster.BroadcastShutdown(/*send_goaway=*/true, GRPC_ERROR_NONE);
846
850
  }
847
851
 
848
852
  void Server::CancelAllCalls() {
@@ -1117,7 +1121,7 @@ void Server::ChannelData::AcceptStream(void* arg, grpc_transport* /*transport*/,
1117
1121
  grpc_call_element* elem =
1118
1122
  grpc_call_stack_element(grpc_call_get_call_stack(call), 0);
1119
1123
  auto* calld = static_cast<Server::CallData*>(elem->call_data);
1120
- if (error != GRPC_ERROR_NONE) {
1124
+ if (!GRPC_ERROR_IS_NONE(error)) {
1121
1125
  GRPC_ERROR_UNREF(error);
1122
1126
  calld->FailCallCreation();
1123
1127
  return;
@@ -1269,7 +1273,7 @@ void Server::CallData::PublishNewRpc(void* arg, grpc_error_handle error) {
1269
1273
  auto* chand = static_cast<Server::ChannelData*>(call_elem->channel_data);
1270
1274
  RequestMatcherInterface* rm = calld->matcher_;
1271
1275
  Server* server = rm->server();
1272
- if (error != GRPC_ERROR_NONE || server->ShutdownCalled()) {
1276
+ if (!GRPC_ERROR_IS_NONE(error) || server->ShutdownCalled()) {
1273
1277
  calld->state_.store(CallState::ZOMBIED, std::memory_order_relaxed);
1274
1278
  calld->KillZombie();
1275
1279
  return;
@@ -1333,7 +1337,7 @@ void Server::CallData::RecvInitialMetadataBatchComplete(
1333
1337
  void* arg, grpc_error_handle error) {
1334
1338
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1335
1339
  auto* calld = static_cast<Server::CallData*>(elem->call_data);
1336
- if (error != GRPC_ERROR_NONE) {
1340
+ if (!GRPC_ERROR_IS_NONE(error)) {
1337
1341
  gpr_log(GPR_DEBUG, "Failed call creation: %s",
1338
1342
  grpc_error_std_string(error).c_str());
1339
1343
  calld->FailCallCreation();
@@ -1368,9 +1372,11 @@ void Server::CallData::RecvInitialMetadataReady(void* arg,
1368
1372
  grpc_error_handle error) {
1369
1373
  grpc_call_element* elem = static_cast<grpc_call_element*>(arg);
1370
1374
  CallData* calld = static_cast<CallData*>(elem->call_data);
1371
- if (error == GRPC_ERROR_NONE) {
1375
+ if (GRPC_ERROR_IS_NONE(error)) {
1372
1376
  calld->path_ = calld->recv_initial_metadata_->Take(HttpPathMetadata());
1373
- calld->host_ = calld->recv_initial_metadata_->Take(HttpAuthorityMetadata());
1377
+ auto* host =
1378
+ calld->recv_initial_metadata_->get_pointer(HttpAuthorityMetadata());
1379
+ if (host != nullptr) calld->host_.emplace(host->Ref());
1374
1380
  } else {
1375
1381
  (void)GRPC_ERROR_REF(error);
1376
1382
  }
@@ -43,8 +43,8 @@
43
43
  #include <grpc/support/log.h>
44
44
 
45
45
  #include "src/core/lib/channel/channel_args.h"
46
+ #include "src/core/lib/channel/channel_fwd.h"
46
47
  #include "src/core/lib/channel/channel_stack.h"
47
- #include "src/core/lib/channel/channel_stack_builder.h"
48
48
  #include "src/core/lib/channel/channelz.h"
49
49
  #include "src/core/lib/debug/trace.h"
50
50
  #include "src/core/lib/gprpp/cpp_impl_of.h"
@@ -64,6 +64,7 @@
64
64
  #include "src/core/lib/surface/completion_queue.h"
65
65
  #include "src/core/lib/transport/metadata_batch.h"
66
66
  #include "src/core/lib/transport/transport.h"
67
+ #include "src/core/lib/transport/transport_fwd.h"
67
68
 
68
69
  struct grpc_server_config_fetcher;
69
70
 
@@ -194,6 +195,8 @@ class Server : public InternallyRefCounted<Server>,
194
195
  void ShutdownAndNotify(grpc_completion_queue* cq, void* tag)
195
196
  ABSL_LOCKS_EXCLUDED(mu_global_, mu_call_);
196
197
 
198
+ void StopListening();
199
+
197
200
  void CancelAllCalls() ABSL_LOCKS_EXCLUDED(mu_global_);
198
201
 
199
202
  void SendGoaways() ABSL_LOCKS_EXCLUDED(mu_global_, mu_call_);
@@ -60,7 +60,7 @@ static grpc_error_handle conforms_to(const grpc_slice& slice,
60
60
  }
61
61
 
62
62
  static int error2int(grpc_error_handle error) {
63
- int r = (error == GRPC_ERROR_NONE);
63
+ int r = (GRPC_ERROR_IS_NONE(error));
64
64
  GRPC_ERROR_UNREF(error);
65
65
  return r;
66
66
  }
@@ -23,6 +23,6 @@
23
23
 
24
24
  #include <grpc/grpc.h>
25
25
 
26
- const char* grpc_version_string(void) { return "25.0.0"; }
26
+ const char* grpc_version_string(void) { return "26.0.0"; }
27
27
 
28
- const char* grpc_g_stands_for(void) { return "gridman"; }
28
+ const char* grpc_g_stands_for(void) { return "garum"; }
@@ -22,13 +22,19 @@
22
22
 
23
23
  #include <stdint.h>
24
24
 
25
+ #include <vector>
26
+
25
27
  #include "absl/strings/string_view.h"
26
28
 
27
29
  #include <grpc/support/string_util.h>
28
30
 
29
- #include "src/core/lib/iomgr/error_internal.h"
31
+ #include "src/core/lib/gprpp/status_helper.h"
30
32
  #include "src/core/lib/transport/status_conversion.h"
31
33
 
34
+ #ifndef GRPC_ERROR_IS_ABSEIL_STATUS
35
+ #include "src/core/lib/iomgr/error_internal.h"
36
+ #endif
37
+
32
38
  static grpc_error_handle recursively_find_error_with_field(
33
39
  grpc_error_handle error, grpc_error_ints which) {
34
40
  intptr_t unused;
@@ -40,7 +46,7 @@ static grpc_error_handle recursively_find_error_with_field(
40
46
  std::vector<absl::Status> children = grpc_core::StatusGetChildren(error);
41
47
  for (const absl::Status& child : children) {
42
48
  grpc_error_handle result = recursively_find_error_with_field(child, which);
43
- if (result != GRPC_ERROR_NONE) return result;
49
+ if (!GRPC_ERROR_IS_NONE(result)) return result;
44
50
  }
45
51
  #else
46
52
  if (grpc_error_is_special(error)) return GRPC_ERROR_NONE;
@@ -64,7 +70,7 @@ void grpc_error_get_status(grpc_error_handle error,
64
70
  grpc_http2_error_code* http_error,
65
71
  const char** error_string) {
66
72
  // Fast path: We expect no error.
67
- if (GPR_LIKELY(error == GRPC_ERROR_NONE)) {
73
+ if (GPR_LIKELY(GRPC_ERROR_IS_NONE(error))) {
68
74
  if (code != nullptr) *code = GRPC_STATUS_OK;
69
75
  if (message != nullptr) {
70
76
  // Normally, we call grpc_error_get_str(
@@ -87,7 +93,7 @@ void grpc_error_get_status(grpc_error_handle error,
87
93
  // until we find the first one that has a status code.
88
94
  grpc_error_handle found_error =
89
95
  recursively_find_error_with_field(error, GRPC_ERROR_INT_GRPC_STATUS);
90
- if (found_error == GRPC_ERROR_NONE) {
96
+ if (GRPC_ERROR_IS_NONE(found_error)) {
91
97
  /// If no grpc-status exists, retry through the tree to find a http2 error
92
98
  /// code
93
99
  found_error =
@@ -96,7 +102,7 @@ void grpc_error_get_status(grpc_error_handle error,
96
102
 
97
103
  // If we found an error with a status code above, use that; otherwise,
98
104
  // fall back to using the parent error.
99
- if (found_error == GRPC_ERROR_NONE) found_error = error;
105
+ if (GRPC_ERROR_IS_NONE(found_error)) found_error = error;
100
106
 
101
107
  grpc_status_code status = GRPC_STATUS_UNKNOWN;
102
108
  intptr_t integer;
@@ -125,8 +131,8 @@ void grpc_error_get_status(grpc_error_handle error,
125
131
  *http_error =
126
132
  grpc_status_to_http2_error(static_cast<grpc_status_code>(integer));
127
133
  } else {
128
- *http_error = found_error == GRPC_ERROR_NONE ? GRPC_HTTP2_NO_ERROR
129
- : GRPC_HTTP2_INTERNAL_ERROR;
134
+ *http_error = GRPC_ERROR_IS_NONE(found_error) ? GRPC_HTTP2_NO_ERROR
135
+ : GRPC_HTTP2_INTERNAL_ERROR;
130
136
  }
131
137
  }
132
138
 
@@ -100,9 +100,9 @@ bool HandshakeManager::CallNextHandshakerLocked(grpc_error_handle error) {
100
100
  // If we got an error or we've been shut down or we're exiting early or
101
101
  // we've finished the last handshaker, invoke the on_handshake_done
102
102
  // callback. Otherwise, call the next handshaker.
103
- if (error != GRPC_ERROR_NONE || is_shutdown_ || args_.exit_early ||
103
+ if (!GRPC_ERROR_IS_NONE(error) || is_shutdown_ || args_.exit_early ||
104
104
  index_ == handshakers_.size()) {
105
- if (error == GRPC_ERROR_NONE && is_shutdown_) {
105
+ if (GRPC_ERROR_IS_NONE(error) && is_shutdown_) {
106
106
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("handshaker shutdown");
107
107
  // It is possible that the endpoint has already been destroyed by
108
108
  // a shutdown call while this callback was sitting on the ExecCtx
@@ -165,7 +165,7 @@ void HandshakeManager::CallNextHandshakerFn(void* arg,
165
165
 
166
166
  void HandshakeManager::OnTimeoutFn(void* arg, grpc_error_handle error) {
167
167
  auto* mgr = static_cast<HandshakeManager*>(arg);
168
- if (error == GRPC_ERROR_NONE) { // Timer fired, rather than being cancelled
168
+ if (GRPC_ERROR_IS_NONE(error)) { // Timer fired, rather than being cancelled
169
169
  mgr->Shutdown(GRPC_ERROR_CREATE_FROM_STATIC_STRING("Handshake timed out"));
170
170
  }
171
171
  mgr->Unref();
@@ -125,7 +125,7 @@ void HttpConnectHandshaker::CleanupArgsForFailureLocked() {
125
125
  // If the handshake failed or we're shutting down, clean up and invoke the
126
126
  // callback with the error.
127
127
  void HttpConnectHandshaker::HandshakeFailedLocked(grpc_error_handle error) {
128
- if (error == GRPC_ERROR_NONE) {
128
+ if (GRPC_ERROR_IS_NONE(error)) {
129
129
  // If we were shut down after an endpoint operation succeeded but
130
130
  // before the endpoint callback was invoked, we need to generate our
131
131
  // own error.
@@ -164,7 +164,7 @@ void HttpConnectHandshaker::OnWriteDoneScheduler(void* arg,
164
164
  void HttpConnectHandshaker::OnWriteDone(void* arg, grpc_error_handle error) {
165
165
  auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
166
166
  ReleasableMutexLock lock(&handshaker->mu_);
167
- if (error != GRPC_ERROR_NONE || handshaker->is_shutdown_) {
167
+ if (!GRPC_ERROR_IS_NONE(error) || handshaker->is_shutdown_) {
168
168
  // If the write failed or we're shutting down, clean up and invoke the
169
169
  // callback with the error.
170
170
  handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
@@ -198,7 +198,7 @@ void HttpConnectHandshaker::OnReadDoneScheduler(void* arg,
198
198
  void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
199
199
  auto* handshaker = static_cast<HttpConnectHandshaker*>(arg);
200
200
  ReleasableMutexLock lock(&handshaker->mu_);
201
- if (error != GRPC_ERROR_NONE || handshaker->is_shutdown_) {
201
+ if (!GRPC_ERROR_IS_NONE(error) || handshaker->is_shutdown_) {
202
202
  // If the read failed or we're shutting down, clean up and invoke the
203
203
  // callback with the error.
204
204
  handshaker->HandshakeFailedLocked(GRPC_ERROR_REF(error));
@@ -211,7 +211,7 @@ void HttpConnectHandshaker::OnReadDone(void* arg, grpc_error_handle error) {
211
211
  error = grpc_http_parser_parse(&handshaker->http_parser_,
212
212
  handshaker->args_->read_buffer->slices[i],
213
213
  &body_start_offset);
214
- if (error != GRPC_ERROR_NONE) {
214
+ if (!GRPC_ERROR_IS_NONE(error)) {
215
215
  handshaker->HandshakeFailedLocked(error);
216
216
  goto done;
217
217
  }
@@ -169,8 +169,8 @@ void TCPConnectHandshaker::Connected(void* arg, grpc_error_handle error) {
169
169
  static_cast<TCPConnectHandshaker*>(arg));
170
170
  {
171
171
  MutexLock lock(&self->mu_);
172
- if (error != GRPC_ERROR_NONE || self->shutdown_) {
173
- if (error == GRPC_ERROR_NONE) {
172
+ if (!GRPC_ERROR_IS_NONE(error) || self->shutdown_) {
173
+ if (GRPC_ERROR_IS_NONE(error)) {
174
174
  error = GRPC_ERROR_CREATE_FROM_STATIC_STRING("tcp handshaker shutdown");
175
175
  } else {
176
176
  error = GRPC_ERROR_REF(error);
@@ -161,9 +161,6 @@ void grpc_transport_stream_op_batch_finish_with_failure(
161
161
  void grpc_transport_stream_op_batch_queue_finish_with_failure(
162
162
  grpc_transport_stream_op_batch* batch, grpc_error_handle error,
163
163
  grpc_core::CallCombinerClosureList* closures) {
164
- if (batch->send_message) {
165
- batch->payload->send_message.send_message.reset();
166
- }
167
164
  if (batch->cancel_stream) {
168
165
  GRPC_ERROR_UNREF(batch->payload->cancel_stream.cancel_error);
169
166
  }
@@ -55,9 +55,10 @@
55
55
  #include "src/core/lib/promise/latch.h"
56
56
  #include "src/core/lib/resource_quota/arena.h"
57
57
  #include "src/core/lib/slice/slice.h"
58
- #include "src/core/lib/transport/byte_stream.h"
58
+ #include "src/core/lib/slice/slice_buffer.h"
59
59
  #include "src/core/lib/transport/connectivity_state.h"
60
60
  #include "src/core/lib/transport/metadata_batch.h"
61
+ #include "src/core/lib/transport/transport_fwd.h"
61
62
 
62
63
  struct grpc_transport_stream_op_batch_payload;
63
64
 
@@ -69,6 +70,17 @@ struct grpc_transport_stream_op_batch_payload;
69
70
 
70
71
  #define GRPC_ARG_TRANSPORT "grpc.internal.transport"
71
72
 
73
+ /** Internal bit flag for grpc_begin_message's \a flags signaling the use of
74
+ * compression for the message. (Does not apply for stream compression.) */
75
+ #define GRPC_WRITE_INTERNAL_COMPRESS (0x80000000u)
76
+ /** Internal bit flag for determining whether the message was compressed and had
77
+ * to be decompressed by the message_decompress filter. (Does not apply for
78
+ * stream compression.) */
79
+ #define GRPC_WRITE_INTERNAL_TEST_ONLY_WAS_COMPRESSED (0x40000000u)
80
+ /** Mask of all valid internal flags. */
81
+ #define GRPC_WRITE_INTERNAL_USED_MASK \
82
+ (GRPC_WRITE_INTERNAL_COMPRESS | GRPC_WRITE_INTERNAL_TEST_ONLY_WAS_COMPRESSED)
83
+
72
84
  namespace grpc_core {
73
85
  // TODO(ctiller): eliminate once MetadataHandle is constructable directly.
74
86
  namespace promise_filter_detail {
@@ -156,8 +168,6 @@ using NextPromiseFactory =
156
168
 
157
169
  /* forward declarations */
158
170
 
159
- typedef struct grpc_transport grpc_transport;
160
-
161
171
  /* grpc_stream doesn't actually exist. It's used as a typesafe
162
172
  opaque pointer for whatever data the transport wants to track
163
173
  for a stream. */
@@ -332,12 +342,6 @@ struct grpc_transport_stream_op_batch_payload {
332
342
  explicit grpc_transport_stream_op_batch_payload(
333
343
  grpc_call_context_element* context)
334
344
  : context(context) {}
335
- ~grpc_transport_stream_op_batch_payload() {
336
- // We don't really own `send_message`, so release ownership and let the
337
- // owner clean the data.
338
- (void)send_message.send_message.release();
339
- }
340
-
341
345
  struct {
342
346
  grpc_metadata_batch* send_initial_metadata = nullptr;
343
347
  /** Iff send_initial_metadata != NULL, flags associated with
@@ -366,7 +370,8 @@ struct grpc_transport_stream_op_batch_payload {
366
370
  // the op gets down to the transport) takes ownership.
367
371
  // The batch's on_complete will not be called until after the byte
368
372
  // stream is orphaned.
369
- grpc_core::OrphanablePtr<grpc_core::ByteStream> send_message;
373
+ grpc_core::SliceBuffer* send_message;
374
+ uint32_t flags = 0;
370
375
  // Set by the transport if the stream has been closed for writes. If this
371
376
  // is set and send message op is present, we set the operation to be a
372
377
  // failure without sending a cancel OP down the stack. This is so that the
@@ -405,10 +410,11 @@ struct grpc_transport_stream_op_batch_payload {
405
410
  } recv_initial_metadata;
406
411
 
407
412
  struct {
408
- // Will be set by the transport to point to the byte stream
409
- // containing a received message.
410
- // Will be NULL if trailing metadata is received instead of a message.
411
- grpc_core::OrphanablePtr<grpc_core::ByteStream>* recv_message = nullptr;
413
+ // Will be set by the transport to point to the byte stream containing a
414
+ // received message. Will be nullopt if trailing metadata is received
415
+ // instead of a message.
416
+ absl::optional<grpc_core::SliceBuffer>* recv_message = nullptr;
417
+ uint32_t* flags = nullptr;
412
418
  // Was this recv_message failed for reasons other than a clean end-of-stream
413
419
  bool* call_failed_before_recv_message = nullptr;
414
420
  /** Should be enqueued when one message is ready to be processed. */
@@ -0,0 +1,20 @@
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_CORE_LIB_TRANSPORT_TRANSPORT_FWD_H
16
+ #define GRPC_CORE_LIB_TRANSPORT_TRANSPORT_FWD_H
17
+
18
+ typedef struct grpc_transport grpc_transport;
19
+
20
+ #endif // GRPC_CORE_LIB_TRANSPORT_TRANSPORT_FWD_H
@@ -32,6 +32,7 @@
32
32
  #include "src/core/lib/promise/arena_promise.h"
33
33
  #include "src/core/lib/resource_quota/arena.h"
34
34
  #include "src/core/lib/transport/transport.h"
35
+ #include "src/core/lib/transport/transport_fwd.h"
35
36
 
36
37
  typedef struct grpc_transport_vtable {
37
38
  /* Memory required for a single stream element - this is allocated by upper
@@ -29,10 +29,11 @@
29
29
 
30
30
  #include <grpc/support/log.h>
31
31
 
32
+ #include "src/core/lib/channel/channel_fwd.h"
32
33
  #include "src/core/lib/channel/channel_stack.h"
33
34
  #include "src/core/lib/gprpp/orphanable.h"
34
35
  #include "src/core/lib/iomgr/error.h"
35
- #include "src/core/lib/transport/byte_stream.h"
36
+ #include "src/core/lib/slice/slice_buffer.h"
36
37
  #include "src/core/lib/transport/connectivity_state.h"
37
38
  #include "src/core/lib/transport/metadata_batch.h"
38
39
  #include "src/core/lib/transport/transport.h"
@@ -53,10 +54,9 @@ std::string grpc_transport_stream_op_batch_string(
53
54
 
54
55
  if (op->send_message) {
55
56
  if (op->payload->send_message.send_message != nullptr) {
56
- out.push_back(
57
- absl::StrFormat(" SEND_MESSAGE:flags=0x%08x:len=%d",
58
- op->payload->send_message.send_message->flags(),
59
- op->payload->send_message.send_message->length()));
57
+ out.push_back(absl::StrFormat(
58
+ " SEND_MESSAGE:flags=0x%08x:len=%d", op->payload->send_message.flags,
59
+ op->payload->send_message.send_message->Length()));
60
60
  } else {
61
61
  // This can happen when we check a batch after the transport has
62
62
  // processed and cleared the send_message op.
@@ -107,14 +107,14 @@ std::string grpc_transport_op_string(grpc_transport_op* op) {
107
107
  op->stop_connectivity_watch));
108
108
  }
109
109
 
110
- if (op->disconnect_with_error != GRPC_ERROR_NONE) {
110
+ if (!GRPC_ERROR_IS_NONE(op->disconnect_with_error)) {
111
111
  out.push_back(absl::StrCat(
112
112
  " DISCONNECT:", grpc_error_std_string(op->disconnect_with_error)));
113
113
  }
114
114
 
115
- if (op->goaway_error != GRPC_ERROR_NONE) {
116
- out.push_back(absl::StrCat(" SEND_GOAWAY:%s",
117
- grpc_error_std_string(op->goaway_error)));
115
+ if (!GRPC_ERROR_IS_NONE(op->goaway_error)) {
116
+ out.push_back(
117
+ absl::StrCat(" SEND_GOAWAY:", grpc_error_std_string(op->goaway_error)));
118
118
  }
119
119
 
120
120
  if (op->set_accept_stream) {
@@ -391,7 +391,7 @@ static void on_handshaker_service_resp_recv(void* arg,
391
391
  return;
392
392
  }
393
393
  bool success = true;
394
- if (error != GRPC_ERROR_NONE) {
394
+ if (!GRPC_ERROR_IS_NONE(error)) {
395
395
  gpr_log(GPR_INFO,
396
396
  "ALTS handshaker on_handshaker_service_resp_recv error: %s",
397
397
  grpc_error_std_string(error).c_str());
@@ -174,7 +174,7 @@ static tsi_result alts_zero_copy_grpc_protector_protect(
174
174
 
175
175
  static tsi_result alts_zero_copy_grpc_protector_unprotect(
176
176
  tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
177
- grpc_slice_buffer* unprotected_slices) {
177
+ grpc_slice_buffer* unprotected_slices, int* min_progress_size) {
178
178
  if (self == nullptr || unprotected_slices == nullptr ||
179
179
  protected_slices == nullptr) {
180
180
  gpr_log(GPR_ERROR,
@@ -215,6 +215,14 @@ static tsi_result alts_zero_copy_grpc_protector_unprotect(
215
215
  return status;
216
216
  }
217
217
  }
218
+ if (min_progress_size != nullptr) {
219
+ if (protector->parsed_frame_size > kZeroCopyFrameLengthFieldSize) {
220
+ *min_progress_size =
221
+ protector->parsed_frame_size - protector->protected_sb.length;
222
+ } else {
223
+ *min_progress_size = 1;
224
+ }
225
+ }
218
226
  return TSI_OK;
219
227
  }
220
228
 
@@ -143,6 +143,11 @@ static uint32_t read_frame_size(const grpc_slice_buffer* sb) {
143
143
  return load32_little_endian(frame_size_buffer);
144
144
  }
145
145
 
146
+ uint32_t tsi_fake_zero_copy_grpc_protector_next_frame_size(
147
+ const grpc_slice_buffer* protected_slices) {
148
+ return read_frame_size(protected_slices);
149
+ }
150
+
146
151
  static void tsi_fake_frame_reset(tsi_fake_frame* frame, int needs_draining) {
147
152
  frame->offset = 0;
148
153
  frame->needs_draining = needs_draining;
@@ -432,7 +437,7 @@ static tsi_result fake_zero_copy_grpc_protector_protect(
432
437
 
433
438
  static tsi_result fake_zero_copy_grpc_protector_unprotect(
434
439
  tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
435
- grpc_slice_buffer* unprotected_slices) {
440
+ grpc_slice_buffer* unprotected_slices, int* min_progress_size) {
436
441
  if (self == nullptr || unprotected_slices == nullptr ||
437
442
  protected_slices == nullptr) {
438
443
  return TSI_INVALID_ARGUMENT;
@@ -462,6 +467,13 @@ static tsi_result fake_zero_copy_grpc_protector_unprotect(
462
467
  impl->parsed_frame_size = 0;
463
468
  grpc_slice_buffer_reset_and_unref_internal(&impl->header_sb);
464
469
  }
470
+ if (min_progress_size != nullptr) {
471
+ if (impl->parsed_frame_size > TSI_FAKE_FRAME_HEADER_SIZE) {
472
+ *min_progress_size = impl->parsed_frame_size - impl->protected_sb.length;
473
+ } else {
474
+ *min_progress_size = 1;
475
+ }
476
+ }
465
477
  return TSI_OK;
466
478
  }
467
479
 
@@ -21,6 +21,7 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include "src/core/lib/slice/slice_internal.h"
24
25
  #include "src/core/tsi/transport_security_interface.h"
25
26
 
26
27
  /* Value for the TSI_CERTIFICATE_TYPE_PEER_PROPERTY property for FAKE certs. */
@@ -44,4 +45,9 @@ tsi_frame_protector* tsi_create_fake_frame_protector(
44
45
  tsi_zero_copy_grpc_protector* tsi_create_fake_zero_copy_grpc_protector(
45
46
  size_t* max_protected_frame_size);
46
47
 
48
+ /* Given a buffer containing slices encrypted by a fake_zero_copy_protector
49
+ * it parses these protected slices to return the total frame size of the first
50
+ * contained frame */
51
+ uint32_t tsi_fake_zero_copy_grpc_protector_next_frame_size(
52
+ const grpc_slice_buffer* protected_slices);
47
53
  #endif /* GRPC_CORE_TSI_FAKE_TRANSPORT_SECURITY_H */
@@ -1566,7 +1566,7 @@ static tsi_result ssl_handshaker_write_output_buffer(tsi_handshaker* self,
1566
1566
  size_t* bytes_written) {
1567
1567
  tsi_ssl_handshaker* impl = reinterpret_cast<tsi_ssl_handshaker*>(self);
1568
1568
  tsi_result status = TSI_OK;
1569
- int offset = *bytes_written;
1569
+ size_t offset = *bytes_written;
1570
1570
  do {
1571
1571
  size_t to_send_size = impl->outgoing_bytes_buffer_size - offset;
1572
1572
  status = ssl_handshaker_get_bytes_to_send_to_peer(
@@ -51,13 +51,14 @@ tsi_result tsi_zero_copy_grpc_protector_protect(
51
51
 
52
52
  tsi_result tsi_zero_copy_grpc_protector_unprotect(
53
53
  tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
54
- grpc_slice_buffer* unprotected_slices) {
54
+ grpc_slice_buffer* unprotected_slices, int* min_progress_size) {
55
55
  if (self == nullptr || self->vtable == nullptr ||
56
56
  protected_slices == nullptr || unprotected_slices == nullptr) {
57
57
  return TSI_INVALID_ARGUMENT;
58
58
  }
59
59
  if (self->vtable->unprotect == nullptr) return TSI_UNIMPLEMENTED;
60
- return self->vtable->unprotect(self, protected_slices, unprotected_slices);
60
+ return self->vtable->unprotect(self, protected_slices, unprotected_slices,
61
+ min_progress_size);
61
62
  }
62
63
 
63
64
  void tsi_zero_copy_grpc_protector_destroy(tsi_zero_copy_grpc_protector* self) {
@@ -47,12 +47,14 @@ tsi_result tsi_zero_copy_grpc_protector_protect(
47
47
  /* Outputs unprotected bytes.
48
48
  - protected_slices is the bytes of protected frames.
49
49
  - unprotected_slices is the unprotected output data.
50
+ - if min_progress_size is not null, it returns the size of the last
51
+ incomplete frame which could not be fully unprotected.
50
52
  - This method returns TSI_OK in case of success. Success includes cases where
51
53
  there is not enough data to output in which case unprotected_slices has 0
52
54
  bytes. */
53
55
  tsi_result tsi_zero_copy_grpc_protector_unprotect(
54
56
  tsi_zero_copy_grpc_protector* self, grpc_slice_buffer* protected_slices,
55
- grpc_slice_buffer* unprotected_slices);
57
+ grpc_slice_buffer* unprotected_slices, int* min_progress_size);
56
58
 
57
59
  /* Destroys the tsi_zero_copy_grpc_protector object. */
58
60
  void tsi_zero_copy_grpc_protector_destroy(tsi_zero_copy_grpc_protector* self);
@@ -68,7 +70,8 @@ struct tsi_zero_copy_grpc_protector_vtable {
68
70
  grpc_slice_buffer* protected_slices);
69
71
  tsi_result (*unprotect)(tsi_zero_copy_grpc_protector* self,
70
72
  grpc_slice_buffer* protected_slices,
71
- grpc_slice_buffer* unprotected_slices);
73
+ grpc_slice_buffer* unprotected_slices,
74
+ int* min_progress_size);
72
75
  void (*destroy)(tsi_zero_copy_grpc_protector* self);
73
76
  tsi_result (*max_frame_size)(tsi_zero_copy_grpc_protector* self,
74
77
  size_t* max_frame_size);
@@ -0,0 +1,2 @@
1
+ _Init_grpc_c
2
+ _rb_tr_abi_version
@@ -0,0 +1,7 @@
1
+ grpc_1.0 {
2
+ global:
3
+ Init_grpc_c;
4
+ rb_tr_abi_version;
5
+ local:
6
+ *;
7
+ };
@@ -1 +1,2 @@
1
1
  _Init_grpc_c
2
+ _ruby_abi_version
@@ -1,6 +1,7 @@
1
1
  grpc_1.0 {
2
2
  global:
3
3
  Init_grpc_c;
4
+ ruby_abi_version;
4
5
  local:
5
6
  *;
6
7
  };