grpc 1.32.0 → 1.52.0

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 (2668) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1741 -3302
  3. data/etc/roots.pem +592 -899
  4. data/include/grpc/byte_buffer.h +76 -1
  5. data/include/grpc/byte_buffer_reader.h +19 -1
  6. data/include/grpc/compression.h +3 -3
  7. data/include/grpc/event_engine/README.md +38 -0
  8. data/include/grpc/event_engine/endpoint_config.h +49 -0
  9. data/include/grpc/event_engine/event_engine.h +467 -0
  10. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  11. data/include/grpc/event_engine/internal/slice_cast.h +67 -0
  12. data/include/grpc/event_engine/memory_allocator.h +211 -0
  13. data/include/grpc/event_engine/memory_request.h +57 -0
  14. data/include/grpc/event_engine/port.h +39 -0
  15. data/include/grpc/event_engine/slice.h +306 -0
  16. data/include/grpc/event_engine/slice_buffer.h +147 -0
  17. data/include/grpc/fork.h +25 -1
  18. data/include/grpc/grpc.h +93 -38
  19. data/include/grpc/grpc_posix.h +22 -18
  20. data/include/grpc/grpc_security.h +536 -302
  21. data/include/grpc/grpc_security_constants.h +17 -14
  22. data/include/grpc/impl/codegen/atm.h +4 -70
  23. data/include/grpc/impl/codegen/atm_gcc_atomic.h +4 -66
  24. data/include/grpc/impl/codegen/atm_gcc_sync.h +4 -60
  25. data/include/grpc/impl/codegen/atm_windows.h +4 -103
  26. data/include/grpc/impl/codegen/byte_buffer.h +4 -76
  27. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -17
  28. data/include/grpc/impl/codegen/compression_types.h +5 -83
  29. data/include/grpc/impl/codegen/connectivity_state.h +5 -19
  30. data/include/grpc/impl/codegen/fork.h +4 -23
  31. data/include/grpc/impl/codegen/gpr_types.h +5 -34
  32. data/include/grpc/impl/codegen/grpc_types.h +5 -762
  33. data/include/grpc/impl/codegen/log.h +4 -87
  34. data/include/grpc/impl/codegen/port_platform.h +3 -669
  35. data/include/grpc/impl/codegen/propagation_bits.h +4 -27
  36. data/include/grpc/impl/codegen/slice.h +4 -102
  37. data/include/grpc/impl/codegen/status.h +4 -129
  38. data/include/grpc/impl/codegen/sync.h +4 -40
  39. data/include/grpc/impl/codegen/sync_abseil.h +4 -11
  40. data/include/grpc/impl/codegen/sync_custom.h +4 -13
  41. data/include/grpc/impl/codegen/sync_generic.h +4 -23
  42. data/include/grpc/impl/codegen/sync_posix.h +4 -27
  43. data/include/grpc/impl/codegen/sync_windows.h +4 -11
  44. data/include/grpc/impl/compression_types.h +109 -0
  45. data/include/grpc/impl/connectivity_state.h +47 -0
  46. data/include/grpc/impl/grpc_types.h +824 -0
  47. data/include/grpc/impl/propagation_bits.h +54 -0
  48. data/include/grpc/impl/slice_type.h +112 -0
  49. data/include/grpc/load_reporting.h +1 -1
  50. data/include/grpc/module.modulemap +19 -15
  51. data/include/grpc/slice.h +1 -12
  52. data/include/grpc/slice_buffer.h +3 -3
  53. data/include/grpc/status.h +131 -1
  54. data/include/grpc/support/atm.h +70 -1
  55. data/include/grpc/support/atm_gcc_atomic.h +59 -1
  56. data/include/grpc/support/atm_gcc_sync.h +58 -1
  57. data/include/grpc/support/atm_windows.h +105 -1
  58. data/include/grpc/support/log.h +87 -1
  59. data/include/grpc/support/log_windows.h +1 -1
  60. data/include/grpc/support/port_platform.h +767 -1
  61. data/include/grpc/support/string_util.h +1 -1
  62. data/include/grpc/support/sync.h +38 -5
  63. data/include/grpc/support/sync_abseil.h +11 -1
  64. data/include/grpc/support/sync_custom.h +13 -1
  65. data/include/grpc/support/sync_generic.h +24 -1
  66. data/include/grpc/support/sync_posix.h +27 -1
  67. data/include/grpc/support/sync_windows.h +15 -1
  68. data/include/grpc/support/time.h +32 -9
  69. data/src/core/ext/filters/census/grpc_context.cc +20 -17
  70. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  71. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  72. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  73. data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
  74. data/src/core/ext/filters/client_channel/backend_metric.cc +36 -34
  75. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  76. data/src/core/ext/filters/client_channel/backup_poller.cc +49 -44
  77. data/src/core/ext/filters/client_channel/backup_poller.h +23 -24
  78. data/src/core/ext/filters/client_channel/channel_connectivity.cc +205 -204
  79. data/src/core/ext/filters/client_channel/client_channel.cc +2262 -3309
  80. data/src/core/ext/filters/client_channel/client_channel.h +605 -60
  81. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +21 -24
  82. data/src/core/ext/filters/client_channel/client_channel_channelz.h +32 -22
  83. data/src/core/ext/filters/client_channel/client_channel_factory.cc +19 -42
  84. data/src/core/ext/filters/client_channel/client_channel_factory.h +25 -26
  85. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +33 -61
  86. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  87. data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
  88. data/src/core/ext/filters/client_channel/config_selector.cc +2 -4
  89. data/src/core/ext/filters/client_channel/config_selector.h +81 -23
  90. data/src/core/ext/filters/client_channel/connector.h +32 -27
  91. data/src/core/ext/filters/client_channel/dynamic_filters.cc +175 -0
  92. data/src/core/ext/filters/client_channel/dynamic_filters.h +108 -0
  93. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +27 -163
  94. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +37 -42
  95. data/src/core/ext/filters/client_channel/health/health_check_client.cc +140 -578
  96. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -158
  97. data/src/core/ext/filters/client_channel/http_proxy.cc +152 -170
  98. data/src/core/ext/filters/client_channel/http_proxy.h +43 -19
  99. data/src/core/ext/filters/client_channel/lb_call_state_internal.h +39 -0
  100. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +56 -39
  101. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +13 -9
  102. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +45 -19
  104. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +16 -11
  105. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +64 -143
  106. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +38 -21
  107. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +732 -590
  108. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +27 -31
  109. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +16 -4
  110. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +8 -6
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +19 -20
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +29 -23
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +47 -39
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +28 -27
  115. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +415 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  117. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1129 -0
  118. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  119. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +249 -230
  120. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +520 -484
  121. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +890 -0
  122. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +47 -0
  123. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2526 -0
  124. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +285 -259
  125. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +181 -174
  126. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +297 -262
  127. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +558 -213
  128. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  129. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +64 -0
  130. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +29 -0
  131. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +794 -0
  132. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +699 -0
  133. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1224 -0
  134. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +651 -0
  135. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.h +60 -0
  136. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  137. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +31 -67
  138. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +29 -27
  139. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +148 -0
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +691 -361
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +64 -78
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +57 -51
  143. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +130 -146
  144. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +715 -314
  145. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +102 -63
  146. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc +18 -18
  147. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +22 -21
  148. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  149. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +20 -20
  150. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +129 -250
  151. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +75 -90
  152. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +26 -9
  153. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +471 -0
  154. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +269 -0
  155. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +121 -0
  156. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +87 -85
  157. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +1004 -407
  158. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +30 -0
  159. data/src/core/ext/filters/client_channel/retry_filter.cc +2661 -0
  160. data/src/core/ext/filters/client_channel/retry_filter.h +31 -0
  161. data/src/core/ext/filters/client_channel/retry_service_config.cc +282 -0
  162. data/src/core/ext/filters/client_channel/retry_service_config.h +105 -0
  163. data/src/core/ext/filters/client_channel/retry_throttle.cc +42 -94
  164. data/src/core/ext/filters/client_channel/retry_throttle.h +47 -32
  165. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +78 -46
  166. data/src/core/ext/filters/client_channel/subchannel.cc +443 -653
  167. data/src/core/ext/filters/client_channel/subchannel.h +191 -218
  168. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  169. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +28 -59
  170. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +57 -48
  171. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  172. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  173. data/src/core/ext/filters/deadline/deadline_filter.cc +165 -133
  174. data/src/core/ext/filters/deadline/deadline_filter.h +18 -15
  175. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +280 -0
  176. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +71 -0
  177. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  178. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
  179. data/src/core/ext/filters/http/client/http_client_filter.cc +126 -564
  180. data/src/core/ext/filters/http/client/http_client_filter.h +52 -22
  181. data/src/core/ext/filters/http/client_authority_filter.cc +70 -139
  182. data/src/core/ext/filters/http/client_authority_filter.h +46 -24
  183. data/src/core/ext/filters/http/http_filters_plugin.cc +65 -89
  184. data/src/core/ext/filters/http/message_compress/compression_filter.cc +315 -0
  185. data/src/core/ext/filters/http/message_compress/compression_filter.h +132 -0
  186. data/src/core/ext/filters/http/server/http_server_filter.cc +121 -488
  187. data/src/core/ext/filters/http/server/http_server_filter.h +55 -21
  188. data/src/core/ext/filters/message_size/message_size_filter.cc +162 -188
  189. data/src/core/ext/filters/message_size/message_size_filter.h +42 -17
  190. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  191. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  192. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
  193. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
  194. data/src/core/ext/filters/server_config_selector/server_config_selector.h +83 -0
  195. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +159 -0
  196. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  197. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +229 -0
  198. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +66 -0
  199. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.cc +82 -0
  200. data/src/core/ext/filters/stateful_session/stateful_session_service_config_parser.h +93 -0
  201. data/src/core/ext/transport/chttp2/alpn/alpn.cc +20 -19
  202. data/src/core/ext/transport/chttp2/alpn/alpn.h +22 -22
  203. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +326 -144
  204. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +42 -34
  205. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +892 -280
  206. data/src/core/ext/transport/chttp2/server/chttp2_server.h +30 -21
  207. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +35 -33
  208. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +33 -31
  209. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +32 -30
  210. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +27 -27
  211. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +1021 -1350
  212. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +49 -25
  213. data/src/core/ext/transport/chttp2/transport/context_list.cc +27 -25
  214. data/src/core/ext/transport/chttp2/transport/context_list.h +32 -31
  215. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +251 -0
  216. data/src/core/ext/transport/chttp2/transport/decode_huff.h +971 -0
  217. data/src/core/ext/transport/chttp2/transport/flow_control.cc +361 -285
  218. data/src/core/ext/transport/chttp2/transport/flow_control.h +259 -320
  219. data/src/core/ext/transport/chttp2/transport/frame.h +19 -23
  220. data/src/core/ext/transport/chttp2/transport/frame_data.cc +91 -239
  221. data/src/core/ext/transport/chttp2/transport/frame_data.h +41 -63
  222. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +61 -56
  223. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +28 -25
  224. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +44 -39
  225. data/src/core/ext/transport/chttp2/transport/frame_ping.h +30 -25
  226. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +48 -39
  227. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +28 -24
  228. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +60 -60
  229. data/src/core/ext/transport/chttp2/transport/frame_settings.h +33 -27
  230. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +46 -44
  231. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +26 -24
  232. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +47 -0
  233. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +520 -800
  234. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +204 -94
  235. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +89 -0
  236. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +80 -0
  237. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +859 -1276
  238. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +129 -104
  239. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +246 -0
  240. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +137 -0
  241. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +21 -19
  242. data/src/core/ext/transport/chttp2/transport/http2_settings.h +36 -35
  243. data/src/core/ext/transport/chttp2/transport/http_trace.cc +19 -0
  244. data/src/core/ext/transport/chttp2/transport/http_trace.h +24 -0
  245. data/src/core/ext/transport/chttp2/transport/huffsyms.cc +20 -20
  246. data/src/core/ext/transport/chttp2/transport/huffsyms.h +19 -19
  247. data/src/core/ext/transport/chttp2/transport/internal.h +270 -341
  248. data/src/core/ext/transport/chttp2/transport/parsing.cc +416 -384
  249. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +32 -32
  250. data/src/core/ext/transport/chttp2/transport/stream_map.cc +24 -24
  251. data/src/core/ext/transport/chttp2/transport/stream_map.h +32 -31
  252. data/src/core/ext/transport/chttp2/transport/varint.cc +29 -24
  253. data/src/core/ext/transport/chttp2/transport/varint.h +70 -54
  254. data/src/core/ext/transport/chttp2/transport/writing.cc +235 -250
  255. data/src/core/ext/transport/inproc/inproc_plugin.cc +17 -22
  256. data/src/core/ext/transport/inproc/inproc_transport.cc +371 -413
  257. data/src/core/ext/transport/inproc/inproc_transport.h +22 -23
  258. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  259. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  260. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  261. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  262. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +125 -0
  263. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +516 -0
  264. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  265. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  266. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  267. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  268. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  269. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  270. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  271. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  272. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  273. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  274. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  275. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  276. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  277. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  278. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  279. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  280. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  281. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +53 -1
  282. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  283. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +63 -13
  284. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +154 -108
  285. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +891 -291
  286. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +413 -0
  287. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2251 -0
  288. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +50 -29
  289. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +250 -82
  290. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +374 -210
  291. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +2308 -620
  292. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  293. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +58 -20
  294. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +61 -27
  295. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +317 -91
  296. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  297. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +81 -48
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +470 -140
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -8
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +63 -22
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +255 -143
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1431 -409
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +110 -43
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +611 -133
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  307. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +52 -19
  308. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +47 -0
  309. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +107 -0
  310. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  311. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  312. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +169 -95
  313. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +986 -291
  314. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +142 -92
  315. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +866 -295
  316. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  317. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +72 -26
  318. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +245 -74
  319. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1438 -215
  320. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -6
  321. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +42 -12
  322. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  323. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +177 -0
  324. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  325. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +89 -29
  326. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +56 -0
  327. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +182 -0
  328. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  329. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +122 -0
  330. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -37
  331. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +234 -94
  332. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +92 -39
  333. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +486 -112
  334. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  335. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +419 -163
  336. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  337. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +50 -17
  338. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +138 -57
  339. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +812 -172
  340. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +115 -67
  341. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +704 -225
  342. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +63 -0
  343. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +238 -0
  344. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +30 -12
  345. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +131 -39
  346. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  347. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  348. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +165 -0
  349. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +748 -0
  350. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +174 -0
  351. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +757 -0
  352. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +145 -98
  353. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +736 -241
  354. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +48 -25
  355. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +304 -106
  356. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +781 -458
  357. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4982 -1397
  358. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -19
  359. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +189 -57
  360. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  361. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  362. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  363. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  364. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  365. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  366. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -15
  367. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +104 -37
  368. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  369. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  370. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  371. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  372. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  373. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  374. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  375. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  376. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  377. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  378. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  379. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  380. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  381. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  382. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  383. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  384. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +42 -0
  385. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +89 -0
  386. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +96 -0
  387. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +395 -0
  388. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +94 -0
  389. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +445 -0
  390. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  391. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  392. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +55 -0
  393. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +172 -0
  394. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.c +62 -0
  395. data/src/core/ext/upb-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upb.h +179 -0
  396. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +331 -172
  397. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2090 -484
  398. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.c +46 -0
  399. data/src/core/ext/upb-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upb.h +98 -0
  400. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  401. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  402. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  403. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  404. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -2
  405. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +8 -4
  406. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +116 -50
  407. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +718 -187
  408. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +43 -27
  409. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +196 -74
  410. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +137 -51
  411. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +833 -158
  412. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  413. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  414. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  415. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +35 -10
  416. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +214 -63
  417. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1189 -200
  418. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -19
  419. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +138 -56
  420. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +138 -0
  421. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +651 -0
  422. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  423. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  424. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  425. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +265 -0
  426. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  427. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  428. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  429. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +127 -45
  430. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +49 -0
  431. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +121 -0
  432. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  433. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +62 -22
  434. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  435. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +52 -19
  436. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +37 -21
  437. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +156 -55
  438. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -18
  439. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +150 -51
  440. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +60 -0
  441. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +178 -0
  442. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  443. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +186 -68
  444. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  445. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +309 -110
  446. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  447. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +295 -106
  448. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  449. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  450. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  451. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +5 -1
  452. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  453. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  454. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  455. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +87 -26
  456. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  457. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +134 -37
  458. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  459. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  460. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  461. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  462. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
  463. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +54 -14
  464. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  465. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  466. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  467. data/src/core/ext/upb-generated/google/api/annotations.upb.h +25 -1
  468. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +271 -0
  469. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +1280 -0
  470. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +167 -118
  471. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +965 -338
  472. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  473. data/src/core/ext/upb-generated/google/api/http.upb.h +252 -100
  474. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  475. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  476. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  477. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +52 -17
  478. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +375 -283
  479. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2467 -972
  480. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  481. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +50 -15
  482. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  483. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +35 -10
  484. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  485. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +213 -78
  486. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  487. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +50 -15
  488. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  489. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +356 -118
  490. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  491. data/src/core/ext/upb-generated/google/rpc/status.upb.h +66 -25
  492. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  493. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  494. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  495. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +119 -44
  496. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +136 -108
  497. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +817 -316
  498. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +28 -13
  499. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +105 -33
  500. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  501. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +81 -25
  502. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  503. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +495 -186
  504. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  505. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +216 -0
  506. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  507. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  508. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  509. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +229 -42
  510. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +55 -0
  511. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +112 -0
  512. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  513. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +18 -1
  514. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  515. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +70 -15
  516. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  517. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +63 -13
  518. data/src/core/ext/upb-generated/validate/validate.upb.c +407 -295
  519. data/src/core/ext/upb-generated/validate/validate.upb.h +3054 -1023
  520. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  521. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  522. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  523. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  524. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  525. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  526. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  527. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +306 -0
  528. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  529. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  530. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +41 -0
  531. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +83 -0
  532. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.c +47 -0
  533. data/src/core/ext/upb-generated/xds/core/v3/cidr.upb.h +107 -0
  534. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +66 -0
  535. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +208 -0
  536. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +56 -0
  537. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +119 -0
  538. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  539. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  540. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +49 -0
  541. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +131 -0
  542. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +68 -0
  543. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +248 -0
  544. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +49 -0
  545. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +125 -0
  546. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +74 -0
  547. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +200 -0
  548. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +46 -0
  549. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  550. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.c +46 -0
  551. data/src/core/ext/upb-generated/xds/type/matcher/v3/cel.upb.h +98 -0
  552. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.c +62 -0
  553. data/src/core/ext/upb-generated/xds/type/matcher/v3/domain.upb.h +174 -0
  554. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.c +36 -0
  555. data/src/core/ext/upb-generated/xds/type/matcher/v3/http_inputs.upb.h +74 -0
  556. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.c +65 -0
  557. data/src/core/ext/upb-generated/xds/type/matcher/v3/ip.upb.h +191 -0
  558. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  559. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  560. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.c +127 -0
  561. data/src/core/ext/upb-generated/xds/type/matcher/v3/range.upb.h +474 -0
  562. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  563. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  564. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  565. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  566. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.c +67 -0
  567. data/src/core/ext/upb-generated/xds/type/v3/cel.upb.h +214 -0
  568. data/src/core/ext/upb-generated/xds/type/v3/range.upb.c +64 -0
  569. data/src/core/ext/upb-generated/xds/type/v3/range.upb.h +208 -0
  570. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +45 -0
  571. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +107 -0
  572. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  573. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  574. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  575. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  576. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +102 -0
  577. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +55 -0
  578. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  579. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  580. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  581. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  582. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  583. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  584. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  585. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  586. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  587. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  588. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  589. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  590. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  591. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  592. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  593. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  594. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +48 -0
  595. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
  596. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +38 -0
  597. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +222 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +397 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +98 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +559 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +155 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +51 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +138 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +112 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +54 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +270 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +150 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +168 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +65 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +53 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +47 -0
  623. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +35 -0
  624. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  625. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  626. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +235 -0
  627. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
  628. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +228 -0
  629. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +75 -0
  630. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +53 -0
  631. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
  632. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +300 -0
  633. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +110 -0
  634. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +41 -0
  635. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
  636. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  637. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  638. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +57 -0
  639. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
  640. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +70 -0
  641. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
  642. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  643. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  644. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +99 -0
  645. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
  646. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +128 -0
  647. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +60 -0
  648. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +136 -0
  649. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
  650. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +48 -0
  651. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
  652. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +220 -0
  653. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +65 -0
  654. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +190 -0
  655. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
  656. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  657. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  658. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +71 -0
  659. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
  660. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  661. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  662. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +125 -0
  663. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  664. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +134 -0
  665. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  666. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  667. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  668. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +112 -0
  669. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
  670. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +939 -0
  671. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +305 -0
  672. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +77 -0
  673. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
  674. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  675. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  676. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  677. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  678. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  679. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  680. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +57 -0
  681. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
  682. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  683. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  684. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  685. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  686. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  687. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  688. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  689. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  690. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  691. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  692. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  693. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  694. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  695. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  696. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  697. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  698. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +50 -0
  699. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  700. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +92 -0
  701. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  702. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +117 -0
  703. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  704. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  705. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  706. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +78 -0
  707. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  708. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.c +60 -0
  709. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/stateful_session/v3/stateful_session.upbdefs.h +40 -0
  710. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +562 -0
  711. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +130 -0
  712. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.c +50 -0
  713. data/src/core/ext/upbdefs-generated/envoy/extensions/http/stateful_session/cookie/v3/cookie.upbdefs.h +35 -0
  714. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
  715. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
  716. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +213 -0
  717. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +65 -0
  718. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +91 -0
  719. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
  720. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +254 -0
  721. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +65 -0
  722. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  723. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  724. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +58 -0
  725. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
  726. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +197 -0
  727. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +100 -0
  728. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +76 -0
  729. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
  730. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +153 -0
  731. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  732. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  733. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  734. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  735. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  736. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  737. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  738. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +61 -0
  739. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
  740. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +54 -0
  741. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  742. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +52 -0
  743. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
  744. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +51 -0
  745. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
  746. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +71 -0
  747. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
  748. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +65 -0
  749. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
  750. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +58 -0
  751. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  752. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +75 -0
  753. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
  754. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +78 -0
  755. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
  756. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +85 -0
  757. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
  758. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  759. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  760. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +36 -0
  761. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
  762. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  763. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  764. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +54 -0
  765. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
  766. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +48 -0
  767. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
  768. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  769. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  770. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  771. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  772. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +44 -0
  773. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
  774. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  775. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  776. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
  777. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
  778. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  779. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  780. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  781. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  782. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +52 -0
  783. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
  784. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  785. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  786. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +34 -0
  787. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
  788. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +331 -0
  789. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
  790. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +35 -0
  791. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
  792. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +32 -0
  793. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
  794. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +54 -0
  795. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
  796. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +35 -0
  797. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
  798. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +45 -0
  799. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
  800. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +37 -0
  801. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
  802. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  803. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  804. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  805. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  806. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +62 -0
  807. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
  808. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +47 -0
  809. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
  810. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +34 -0
  811. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
  812. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +46 -0
  813. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
  814. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +39 -0
  815. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
  816. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +283 -0
  817. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
  818. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  819. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  820. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  821. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  822. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  823. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  824. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  825. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  826. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  827. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  828. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +38 -0
  829. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  830. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.c +45 -0
  831. data/src/core/ext/upbdefs-generated/xds/core/v3/cidr.upbdefs.h +35 -0
  832. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +56 -0
  833. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  834. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +39 -0
  835. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  836. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  837. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  838. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +45 -0
  839. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  840. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +61 -0
  841. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  842. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +46 -0
  843. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  844. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.c +43 -0
  845. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/cel.upbdefs.h +35 -0
  846. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.c +51 -0
  847. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/domain.upbdefs.h +40 -0
  848. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.c +36 -0
  849. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/http_inputs.upbdefs.h +35 -0
  850. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.c +55 -0
  851. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/ip.upbdefs.h +40 -0
  852. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  853. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  854. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.c +71 -0
  855. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/range.upbdefs.h +60 -0
  856. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  857. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  858. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  859. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  860. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.c +60 -0
  861. data/src/core/ext/upbdefs-generated/xds/type/v3/cel.upbdefs.h +40 -0
  862. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.c +36 -0
  863. data/src/core/ext/upbdefs-generated/xds/type/v3/range.upbdefs.h +45 -0
  864. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +37 -0
  865. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  866. data/src/core/ext/xds/certificate_provider_store.cc +159 -0
  867. data/src/core/ext/xds/certificate_provider_store.h +138 -0
  868. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +150 -0
  869. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +77 -0
  870. data/src/core/ext/xds/upb_utils.h +45 -0
  871. data/src/core/ext/xds/xds_api.cc +314 -2078
  872. data/src/core/ext/xds/xds_api.h +141 -308
  873. data/src/core/ext/xds/xds_bootstrap.cc +10 -345
  874. data/src/core/ext/xds/xds_bootstrap.h +43 -48
  875. data/src/core/ext/xds/xds_bootstrap_grpc.cc +361 -0
  876. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  877. data/src/core/ext/xds/xds_certificate_provider.cc +416 -0
  878. data/src/core/ext/xds/xds_certificate_provider.h +183 -0
  879. data/src/core/ext/xds/xds_channel_args.h +11 -5
  880. data/src/core/ext/xds/xds_channel_stack_modifier.cc +119 -0
  881. data/src/core/ext/xds/xds_channel_stack_modifier.h +65 -0
  882. data/src/core/ext/xds/xds_client.cc +1442 -1516
  883. data/src/core/ext/xds/xds_client.h +212 -144
  884. data/src/core/ext/xds/xds_client_grpc.cc +236 -0
  885. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  886. data/src/core/ext/xds/xds_client_stats.cc +103 -59
  887. data/src/core/ext/xds/xds_client_stats.h +71 -40
  888. data/src/core/ext/xds/xds_cluster.cc +707 -0
  889. data/src/core/ext/xds/xds_cluster.h +137 -0
  890. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +132 -0
  891. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +97 -0
  892. data/src/core/ext/xds/xds_common_types.cc +502 -0
  893. data/src/core/ext/xds/xds_common_types.h +108 -0
  894. data/src/core/ext/xds/xds_endpoint.cc +474 -0
  895. data/src/core/ext/xds/xds_endpoint.h +139 -0
  896. data/src/core/ext/xds/xds_health_status.cc +80 -0
  897. data/src/core/ext/xds/xds_health_status.h +82 -0
  898. data/src/core/ext/xds/xds_http_fault_filter.cc +236 -0
  899. data/src/core/ext/xds/xds_http_fault_filter.h +58 -0
  900. data/src/core/ext/xds/xds_http_filters.cc +121 -0
  901. data/src/core/ext/xds/xds_http_filters.h +181 -0
  902. data/src/core/ext/xds/xds_http_rbac_filter.cc +506 -0
  903. data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
  904. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +218 -0
  905. data/src/core/ext/xds/xds_http_stateful_session_filter.h +58 -0
  906. data/src/core/ext/xds/xds_lb_policy_registry.cc +239 -0
  907. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  908. data/src/core/ext/xds/xds_listener.cc +1130 -0
  909. data/src/core/ext/xds/xds_listener.h +226 -0
  910. data/src/core/ext/xds/xds_resource_type.h +104 -0
  911. data/src/core/ext/xds/xds_resource_type_impl.h +88 -0
  912. data/src/core/ext/xds/xds_route_config.cc +1138 -0
  913. data/src/core/ext/xds/xds_route_config.h +252 -0
  914. data/src/core/ext/xds/xds_routing.cc +264 -0
  915. data/src/core/ext/xds/xds_routing.h +106 -0
  916. data/src/core/ext/xds/xds_server_config_fetcher.cc +1363 -0
  917. data/src/core/ext/xds/xds_transport.h +86 -0
  918. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  919. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  920. data/src/core/lib/address_utils/parse_address.cc +340 -0
  921. data/src/core/lib/address_utils/parse_address.h +86 -0
  922. data/src/core/lib/address_utils/sockaddr_utils.cc +444 -0
  923. data/src/core/lib/address_utils/sockaddr_utils.h +100 -0
  924. data/src/core/lib/avl/avl.h +476 -88
  925. data/src/core/lib/backoff/backoff.cc +26 -57
  926. data/src/core/lib/backoff/backoff.h +30 -30
  927. data/src/core/lib/channel/call_finalization.h +88 -0
  928. data/src/core/lib/channel/call_tracer.h +103 -0
  929. data/src/core/lib/channel/channel_args.cc +309 -64
  930. data/src/core/lib/channel/channel_args.h +454 -44
  931. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  932. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  933. data/src/core/lib/channel/channel_fwd.h +26 -0
  934. data/src/core/lib/channel/channel_stack.cc +125 -62
  935. data/src/core/lib/channel/channel_stack.h +226 -136
  936. data/src/core/lib/channel/channel_stack_builder.cc +35 -307
  937. data/src/core/lib/channel/channel_stack_builder.h +112 -158
  938. data/src/core/lib/channel/channel_stack_builder_impl.cc +113 -0
  939. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  940. data/src/core/lib/channel/channel_trace.cc +36 -43
  941. data/src/core/lib/channel/channel_trace.h +27 -23
  942. data/src/core/lib/channel/channelz.cc +201 -151
  943. data/src/core/lib/channel/channelz.h +121 -81
  944. data/src/core/lib/channel/channelz_registry.cc +59 -51
  945. data/src/core/lib/channel/channelz_registry.h +31 -28
  946. data/src/core/lib/channel/connected_channel.cc +745 -81
  947. data/src/core/lib/channel/connected_channel.h +21 -23
  948. data/src/core/lib/channel/context.h +32 -18
  949. data/src/core/lib/channel/promise_based_filter.cc +2249 -0
  950. data/src/core/lib/channel/promise_based_filter.h +857 -0
  951. data/src/core/lib/channel/status_util.cc +76 -19
  952. data/src/core/lib/channel/status_util.h +45 -22
  953. data/src/core/lib/compression/compression.cc +46 -129
  954. data/src/core/lib/compression/compression_internal.cc +191 -229
  955. data/src/core/lib/compression/compression_internal.h +87 -90
  956. data/src/core/lib/compression/message_compress.cc +41 -39
  957. data/src/core/lib/compression/message_compress.h +28 -29
  958. data/src/core/lib/config/core_configuration.cc +111 -0
  959. data/src/core/lib/config/core_configuration.h +243 -0
  960. data/src/core/lib/debug/event_log.cc +88 -0
  961. data/src/core/lib/debug/event_log.h +81 -0
  962. data/src/core/lib/debug/histogram_view.cc +69 -0
  963. data/src/core/lib/debug/histogram_view.h +37 -0
  964. data/src/core/lib/debug/stats.cc +48 -152
  965. data/src/core/lib/debug/stats.h +49 -55
  966. data/src/core/lib/debug/stats_data.cc +291 -637
  967. data/src/core/lib/debug/stats_data.h +264 -527
  968. data/src/core/lib/debug/trace.cc +19 -20
  969. data/src/core/lib/debug/trace.h +34 -32
  970. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +40 -0
  971. data/src/core/lib/event_engine/channel_args_endpoint_config.h +49 -0
  972. data/src/core/lib/event_engine/common_closures.h +71 -0
  973. data/src/core/lib/event_engine/default_event_engine.cc +94 -0
  974. data/src/core/lib/event_engine/default_event_engine.h +49 -0
  975. data/src/core/lib/event_engine/default_event_engine_factory.cc +48 -0
  976. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  977. data/src/core/lib/event_engine/executor/executor.h +38 -0
  978. data/src/core/lib/event_engine/forkable.cc +101 -0
  979. data/src/core/lib/event_engine/forkable.h +61 -0
  980. data/src/core/lib/event_engine/handle_containers.h +67 -0
  981. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  982. data/src/core/lib/event_engine/poller.h +62 -0
  983. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +614 -0
  984. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  985. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +900 -0
  986. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  987. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  988. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  989. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  990. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  991. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  992. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +265 -0
  993. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  994. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1308 -0
  995. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +684 -0
  996. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +570 -0
  997. data/src/core/lib/event_engine/posix_engine/posix_engine.h +245 -0
  998. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  999. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +236 -0
  1000. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +228 -0
  1001. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.cc +380 -0
  1002. data/src/core/lib/event_engine/posix_engine/posix_engine_listener_utils.h +91 -0
  1003. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +853 -0
  1004. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +316 -0
  1005. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  1006. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  1007. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  1008. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  1009. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +173 -0
  1010. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  1011. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +332 -0
  1012. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +185 -0
  1013. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +127 -0
  1014. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  1015. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +150 -0
  1016. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  1017. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  1018. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  1019. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  1020. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  1021. data/src/core/lib/event_engine/slice.cc +103 -0
  1022. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  1023. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  1024. data/src/core/lib/event_engine/tcp_socket_utils.cc +373 -0
  1025. data/src/core/lib/event_engine/tcp_socket_utils.h +85 -0
  1026. data/src/core/lib/event_engine/thread_pool.cc +277 -0
  1027. data/src/core/lib/event_engine/thread_pool.h +137 -0
  1028. data/src/core/lib/event_engine/time_util.cc +30 -0
  1029. data/src/core/lib/event_engine/time_util.h +32 -0
  1030. data/src/core/lib/event_engine/trace.cc +18 -0
  1031. data/src/core/lib/event_engine/trace.h +30 -0
  1032. data/src/core/lib/event_engine/utils.cc +44 -0
  1033. data/src/core/lib/event_engine/utils.h +36 -0
  1034. data/src/core/lib/event_engine/windows/iocp.cc +156 -0
  1035. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  1036. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  1037. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  1038. data/src/core/lib/event_engine/windows/windows_engine.cc +165 -0
  1039. data/src/core/lib/event_engine/windows/windows_engine.h +124 -0
  1040. data/src/core/lib/experiments/config.cc +146 -0
  1041. data/src/core/lib/experiments/config.h +43 -0
  1042. data/src/core/lib/experiments/experiments.cc +75 -0
  1043. data/src/core/lib/experiments/experiments.h +58 -0
  1044. data/src/core/lib/gpr/alloc.cc +26 -30
  1045. data/src/core/lib/gpr/alloc.h +18 -18
  1046. data/src/core/lib/gpr/atm.cc +18 -18
  1047. data/src/core/lib/gpr/cpu_iphone.cc +34 -26
  1048. data/src/core/lib/gpr/cpu_linux.cc +28 -23
  1049. data/src/core/lib/gpr/cpu_posix.cc +24 -23
  1050. data/src/core/lib/gpr/cpu_windows.cc +20 -18
  1051. data/src/core/lib/gpr/log.cc +91 -36
  1052. data/src/core/lib/gpr/log_android.cc +25 -22
  1053. data/src/core/lib/gpr/log_linux.cc +46 -27
  1054. data/src/core/lib/gpr/log_posix.cc +41 -23
  1055. data/src/core/lib/gpr/log_windows.cc +43 -29
  1056. data/src/core/lib/gpr/spinlock.h +28 -20
  1057. data/src/core/lib/gpr/string.cc +48 -46
  1058. data/src/core/lib/gpr/string.h +62 -63
  1059. data/src/core/lib/gpr/string_posix.cc +24 -24
  1060. data/src/core/lib/gpr/string_util_windows.cc +25 -52
  1061. data/src/core/lib/gpr/string_windows.cc +24 -24
  1062. data/src/core/lib/gpr/sync.cc +31 -31
  1063. data/src/core/lib/gpr/sync_abseil.cc +29 -43
  1064. data/src/core/lib/gpr/sync_posix.cc +26 -37
  1065. data/src/core/lib/gpr/sync_windows.cc +31 -29
  1066. data/src/core/lib/gpr/time.cc +51 -45
  1067. data/src/core/lib/gpr/time_posix.cc +41 -45
  1068. data/src/core/lib/gpr/time_precise.cc +26 -23
  1069. data/src/core/lib/gpr/time_precise.h +25 -22
  1070. data/src/core/lib/gpr/time_windows.cc +38 -31
  1071. data/src/core/lib/gpr/tmpfile.h +22 -22
  1072. data/src/core/lib/gpr/tmpfile_msys.cc +21 -20
  1073. data/src/core/lib/gpr/tmpfile_posix.cc +23 -22
  1074. data/src/core/lib/gpr/tmpfile_windows.cc +28 -29
  1075. data/src/core/lib/gpr/useful.h +169 -50
  1076. data/src/core/lib/gpr/wrap_memcpy.cc +25 -24
  1077. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  1078. data/src/core/lib/gprpp/bitset.h +225 -0
  1079. data/src/core/lib/gprpp/chunked_vector.h +257 -0
  1080. data/src/core/lib/gprpp/construct_destruct.h +40 -0
  1081. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  1082. data/src/core/lib/gprpp/crash.cc +33 -0
  1083. data/src/core/lib/gprpp/crash.h +34 -0
  1084. data/src/core/lib/gprpp/debug_location.h +59 -25
  1085. data/src/core/lib/gprpp/dual_ref_counted.h +327 -0
  1086. data/src/core/lib/gprpp/env.h +53 -0
  1087. data/src/core/lib/gprpp/env_linux.cc +80 -0
  1088. data/src/core/lib/gprpp/env_posix.cc +47 -0
  1089. data/src/core/lib/gprpp/env_windows.cc +56 -0
  1090. data/src/core/lib/gprpp/examine_stack.cc +43 -0
  1091. data/src/core/lib/gprpp/examine_stack.h +45 -0
  1092. data/src/core/lib/gprpp/fork.cc +50 -60
  1093. data/src/core/lib/gprpp/fork.h +26 -34
  1094. data/src/core/lib/gprpp/global_config.h +20 -23
  1095. data/src/core/lib/gprpp/global_config_custom.h +18 -18
  1096. data/src/core/lib/gprpp/global_config_env.cc +38 -36
  1097. data/src/core/lib/gprpp/global_config_env.h +28 -26
  1098. data/src/core/lib/gprpp/global_config_generic.h +18 -22
  1099. data/src/core/lib/gprpp/host_port.cc +28 -26
  1100. data/src/core/lib/gprpp/host_port.h +29 -28
  1101. data/src/core/lib/gprpp/load_file.cc +75 -0
  1102. data/src/core/lib/gprpp/load_file.h +33 -0
  1103. data/src/core/lib/gprpp/manual_constructor.h +25 -91
  1104. data/src/core/lib/gprpp/match.h +75 -0
  1105. data/src/core/lib/gprpp/memory.h +26 -24
  1106. data/src/core/lib/gprpp/mpscq.cc +26 -26
  1107. data/src/core/lib/gprpp/mpscq.h +24 -23
  1108. data/src/core/lib/gprpp/no_destruct.h +95 -0
  1109. data/src/core/lib/gprpp/notification.h +67 -0
  1110. data/src/core/lib/gprpp/orphanable.h +27 -34
  1111. data/src/core/lib/gprpp/overload.h +59 -0
  1112. data/src/core/lib/gprpp/packed_table.h +40 -0
  1113. data/src/core/lib/gprpp/per_cpu.h +46 -0
  1114. data/src/core/lib/gprpp/ref_counted.h +142 -105
  1115. data/src/core/lib/gprpp/ref_counted_ptr.h +187 -41
  1116. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  1117. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  1118. data/src/core/lib/gprpp/stat.h +36 -0
  1119. data/src/core/lib/gprpp/stat_posix.cc +55 -0
  1120. data/src/core/lib/gprpp/stat_windows.cc +50 -0
  1121. data/src/core/lib/gprpp/status_helper.cc +455 -0
  1122. data/src/core/lib/gprpp/status_helper.h +189 -0
  1123. data/src/core/lib/gprpp/strerror.cc +41 -0
  1124. data/src/core/lib/gprpp/strerror.h +29 -0
  1125. data/src/core/lib/gprpp/sync.h +129 -64
  1126. data/src/core/lib/gprpp/table.h +452 -0
  1127. data/src/core/lib/gprpp/tchar.cc +49 -0
  1128. data/src/core/lib/gprpp/tchar.h +33 -0
  1129. data/src/core/lib/gprpp/thd.h +24 -27
  1130. data/src/core/lib/gprpp/thd_posix.cc +76 -70
  1131. data/src/core/lib/gprpp/thd_windows.cc +32 -35
  1132. data/src/core/lib/gprpp/time.cc +240 -0
  1133. data/src/core/lib/gprpp/time.h +366 -0
  1134. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  1135. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1136. data/src/core/lib/gprpp/time_util.cc +81 -0
  1137. data/src/core/lib/gprpp/time_util.h +42 -0
  1138. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  1139. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  1140. data/src/core/lib/gprpp/validation_errors.h +127 -0
  1141. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  1142. data/src/core/lib/gprpp/work_serializer.h +86 -0
  1143. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1144. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1145. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1146. data/src/core/lib/http/format_request.cc +81 -47
  1147. data/src/core/lib/http/format_request.h +29 -25
  1148. data/src/core/lib/http/httpcli.cc +321 -234
  1149. data/src/core/lib/http/httpcli.h +254 -109
  1150. data/src/core/lib/http/httpcli_security_connector.cc +104 -106
  1151. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  1152. data/src/core/lib/http/parser.cc +208 -129
  1153. data/src/core/lib/http/parser.h +53 -36
  1154. data/src/core/lib/iomgr/block_annotate.h +21 -21
  1155. data/src/core/lib/iomgr/buffer_list.cc +165 -146
  1156. data/src/core/lib/iomgr/buffer_list.h +128 -108
  1157. data/src/core/lib/iomgr/call_combiner.cc +61 -58
  1158. data/src/core/lib/iomgr/call_combiner.h +31 -34
  1159. data/src/core/lib/iomgr/cfstream_handle.cc +38 -41
  1160. data/src/core/lib/iomgr/cfstream_handle.h +23 -23
  1161. data/src/core/lib/iomgr/closure.h +110 -54
  1162. data/src/core/lib/iomgr/combiner.cc +51 -59
  1163. data/src/core/lib/iomgr/combiner.h +21 -20
  1164. data/src/core/lib/iomgr/dualstack_socket_posix.cc +22 -21
  1165. data/src/core/lib/iomgr/dynamic_annotations.h +20 -20
  1166. data/src/core/lib/iomgr/endpoint.cc +22 -26
  1167. data/src/core/lib/iomgr/endpoint.h +53 -54
  1168. data/src/core/lib/iomgr/endpoint_cfstream.cc +78 -99
  1169. data/src/core/lib/iomgr/endpoint_cfstream.h +31 -31
  1170. data/src/core/lib/iomgr/endpoint_pair.h +19 -18
  1171. data/src/core/lib/iomgr/endpoint_pair_posix.cc +39 -30
  1172. data/src/core/lib/iomgr/endpoint_pair_windows.cc +25 -25
  1173. data/src/core/lib/iomgr/error.cc +145 -752
  1174. data/src/core/lib/iomgr/error.h +119 -227
  1175. data/src/core/lib/iomgr/error_cfstream.cc +25 -24
  1176. data/src/core/lib/iomgr/error_cfstream.h +21 -21
  1177. data/src/core/lib/iomgr/ev_apple.cc +40 -36
  1178. data/src/core/lib/iomgr/ev_apple.h +18 -18
  1179. data/src/core/lib/iomgr/ev_epoll1_linux.cc +313 -297
  1180. data/src/core/lib/iomgr/ev_epoll1_linux.h +19 -19
  1181. data/src/core/lib/iomgr/ev_poll_posix.cc +359 -332
  1182. data/src/core/lib/iomgr/ev_poll_posix.h +20 -20
  1183. data/src/core/lib/iomgr/ev_posix.cc +100 -134
  1184. data/src/core/lib/iomgr/ev_posix.h +100 -94
  1185. data/src/core/lib/iomgr/ev_windows.cc +18 -18
  1186. data/src/core/lib/iomgr/exec_ctx.cc +48 -139
  1187. data/src/core/lib/iomgr/exec_ctx.h +175 -221
  1188. data/src/core/lib/iomgr/executor.cc +50 -68
  1189. data/src/core/lib/iomgr/executor.h +28 -31
  1190. data/src/core/lib/iomgr/fork_posix.cc +25 -22
  1191. data/src/core/lib/iomgr/fork_windows.cc +21 -21
  1192. data/src/core/lib/iomgr/gethostname.h +18 -18
  1193. data/src/core/lib/iomgr/gethostname_fallback.cc +17 -17
  1194. data/src/core/lib/iomgr/gethostname_host_name_max.cc +17 -17
  1195. data/src/core/lib/iomgr/gethostname_sysconf.cc +17 -17
  1196. data/src/core/lib/iomgr/grpc_if_nametoindex.h +20 -20
  1197. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +22 -21
  1198. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +22 -21
  1199. data/src/core/lib/iomgr/internal_errqueue.cc +44 -50
  1200. data/src/core/lib/iomgr/internal_errqueue.h +81 -86
  1201. data/src/core/lib/iomgr/iocp_windows.cc +32 -31
  1202. data/src/core/lib/iomgr/iocp_windows.h +19 -19
  1203. data/src/core/lib/iomgr/iomgr.cc +31 -24
  1204. data/src/core/lib/iomgr/iomgr.h +35 -35
  1205. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1206. data/src/core/lib/iomgr/iomgr_internal.cc +25 -29
  1207. data/src/core/lib/iomgr/iomgr_internal.h +31 -30
  1208. data/src/core/lib/iomgr/iomgr_posix.cc +25 -23
  1209. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +64 -33
  1210. data/src/core/lib/iomgr/iomgr_windows.cc +27 -26
  1211. data/src/core/lib/iomgr/load_file.cc +26 -29
  1212. data/src/core/lib/iomgr/load_file.h +22 -22
  1213. data/src/core/lib/iomgr/lockfree_event.cc +131 -125
  1214. data/src/core/lib/iomgr/lockfree_event.h +21 -21
  1215. data/src/core/lib/iomgr/nameser.h +84 -84
  1216. data/src/core/lib/iomgr/polling_entity.cc +26 -22
  1217. data/src/core/lib/iomgr/polling_entity.h +33 -27
  1218. data/src/core/lib/iomgr/pollset.cc +22 -22
  1219. data/src/core/lib/iomgr/pollset.h +62 -62
  1220. data/src/core/lib/iomgr/pollset_set.cc +17 -17
  1221. data/src/core/lib/iomgr/pollset_set.h +23 -25
  1222. data/src/core/lib/iomgr/pollset_set_windows.cc +19 -18
  1223. data/src/core/lib/iomgr/pollset_set_windows.h +18 -18
  1224. data/src/core/lib/iomgr/pollset_windows.cc +36 -35
  1225. data/src/core/lib/iomgr/pollset_windows.h +22 -22
  1226. data/src/core/lib/iomgr/port.h +58 -44
  1227. data/src/core/lib/iomgr/python_util.h +26 -25
  1228. data/src/core/lib/iomgr/resolve_address.cc +39 -39
  1229. data/src/core/lib/iomgr/resolve_address.h +100 -65
  1230. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1231. data/src/core/lib/iomgr/resolve_address_posix.cc +136 -109
  1232. data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
  1233. data/src/core/lib/iomgr/resolve_address_windows.cc +133 -90
  1234. data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
  1235. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1236. data/src/core/lib/iomgr/sockaddr.h +24 -24
  1237. data/src/core/lib/iomgr/sockaddr_posix.h +20 -18
  1238. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +64 -0
  1239. data/src/core/lib/iomgr/sockaddr_windows.h +20 -18
  1240. data/src/core/lib/iomgr/socket_factory_posix.cc +25 -24
  1241. data/src/core/lib/iomgr/socket_factory_posix.h +31 -30
  1242. data/src/core/lib/iomgr/socket_mutator.cc +39 -24
  1243. data/src/core/lib/iomgr/socket_mutator.h +54 -30
  1244. data/src/core/lib/iomgr/socket_utils.h +24 -24
  1245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +108 -142
  1246. data/src/core/lib/iomgr/socket_utils_linux.cc +22 -21
  1247. data/src/core/lib/iomgr/socket_utils_posix.cc +105 -21
  1248. data/src/core/lib/iomgr/socket_utils_posix.h +198 -106
  1249. data/src/core/lib/iomgr/socket_utils_windows.cc +22 -21
  1250. data/src/core/lib/iomgr/socket_windows.cc +37 -36
  1251. data/src/core/lib/iomgr/socket_windows.h +56 -58
  1252. data/src/core/lib/iomgr/systemd_utils.cc +116 -0
  1253. data/src/core/lib/iomgr/systemd_utils.h +33 -0
  1254. data/src/core/lib/iomgr/tcp_client.cc +28 -24
  1255. data/src/core/lib/iomgr/tcp_client.h +48 -34
  1256. data/src/core/lib/iomgr/tcp_client_cfstream.cc +53 -58
  1257. data/src/core/lib/iomgr/tcp_client_posix.cc +249 -130
  1258. data/src/core/lib/iomgr/tcp_client_posix.h +55 -51
  1259. data/src/core/lib/iomgr/tcp_client_windows.cc +70 -62
  1260. data/src/core/lib/iomgr/tcp_posix.cc +685 -497
  1261. data/src/core/lib/iomgr/tcp_posix.h +46 -39
  1262. data/src/core/lib/iomgr/tcp_server.cc +36 -27
  1263. data/src/core/lib/iomgr/tcp_server.h +84 -73
  1264. data/src/core/lib/iomgr/tcp_server_posix.cc +216 -164
  1265. data/src/core/lib/iomgr/tcp_server_utils_posix.h +88 -80
  1266. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +140 -99
  1267. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +55 -52
  1268. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +23 -23
  1269. data/src/core/lib/iomgr/tcp_server_windows.cc +129 -132
  1270. data/src/core/lib/iomgr/tcp_windows.cc +136 -135
  1271. data/src/core/lib/iomgr/tcp_windows.h +32 -33
  1272. data/src/core/lib/iomgr/timer.cc +20 -19
  1273. data/src/core/lib/iomgr/timer.h +81 -72
  1274. data/src/core/lib/iomgr/timer_generic.cc +237 -257
  1275. data/src/core/lib/iomgr/timer_generic.h +20 -19
  1276. data/src/core/lib/iomgr/timer_heap.cc +27 -28
  1277. data/src/core/lib/iomgr/timer_heap.h +19 -19
  1278. data/src/core/lib/iomgr/timer_manager.cc +48 -47
  1279. data/src/core/lib/iomgr/timer_manager.h +25 -25
  1280. data/src/core/lib/iomgr/unix_sockets_posix.cc +48 -52
  1281. data/src/core/lib/iomgr/unix_sockets_posix.h +25 -24
  1282. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +32 -29
  1283. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +26 -26
  1284. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +24 -23
  1285. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +37 -35
  1286. data/src/core/lib/iomgr/wakeup_fd_pipe.h +18 -18
  1287. data/src/core/lib/iomgr/wakeup_fd_posix.cc +37 -33
  1288. data/src/core/lib/iomgr/wakeup_fd_posix.h +58 -58
  1289. data/src/core/lib/json/json.h +32 -26
  1290. data/src/core/lib/json/json_args.h +34 -0
  1291. data/src/core/lib/json/json_channel_args.h +42 -0
  1292. data/src/core/lib/json/json_object_loader.cc +217 -0
  1293. data/src/core/lib/json/json_object_loader.h +634 -0
  1294. data/src/core/lib/json/json_reader.cc +193 -118
  1295. data/src/core/lib/json/json_util.cc +106 -0
  1296. data/src/core/lib/json/json_util.h +163 -0
  1297. data/src/core/lib/json/json_writer.cc +64 -61
  1298. data/src/core/lib/load_balancing/lb_policy.cc +93 -0
  1299. data/src/core/lib/load_balancing/lb_policy.h +438 -0
  1300. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1301. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  1302. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1303. data/src/core/lib/load_balancing/subchannel_interface.h +133 -0
  1304. data/src/core/lib/matchers/matchers.cc +331 -0
  1305. data/src/core/lib/matchers/matchers.h +162 -0
  1306. data/src/core/lib/promise/activity.cc +134 -0
  1307. data/src/core/lib/promise/activity.h +612 -0
  1308. data/src/core/lib/promise/arena_promise.h +231 -0
  1309. data/src/core/lib/promise/context.h +93 -0
  1310. data/src/core/lib/promise/detail/basic_seq.h +497 -0
  1311. data/src/core/lib/promise/detail/promise_factory.h +236 -0
  1312. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1313. data/src/core/lib/promise/detail/status.h +78 -0
  1314. data/src/core/lib/promise/detail/switch.h +1455 -0
  1315. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +56 -0
  1316. data/src/core/lib/promise/for_each.h +155 -0
  1317. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1318. data/src/core/lib/promise/latch.h +97 -0
  1319. data/src/core/lib/promise/loop.h +138 -0
  1320. data/src/core/lib/promise/map.h +88 -0
  1321. data/src/core/lib/promise/map_pipe.h +88 -0
  1322. data/src/core/lib/promise/pipe.cc +19 -0
  1323. data/src/core/lib/promise/pipe.h +505 -0
  1324. data/src/core/lib/promise/poll.h +85 -0
  1325. data/src/core/lib/promise/promise.h +96 -0
  1326. data/src/core/lib/promise/race.h +83 -0
  1327. data/src/core/lib/promise/seq.h +107 -0
  1328. data/src/core/lib/promise/sleep.cc +90 -0
  1329. data/src/core/lib/promise/sleep.h +84 -0
  1330. data/src/core/lib/promise/try_concurrently.h +342 -0
  1331. data/src/core/lib/promise/try_seq.h +175 -0
  1332. data/src/core/lib/resolver/resolver.cc +37 -0
  1333. data/src/core/lib/resolver/resolver.h +138 -0
  1334. data/src/core/lib/resolver/resolver_factory.h +77 -0
  1335. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1336. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1337. data/src/core/lib/resolver/server_address.cc +181 -0
  1338. data/src/core/lib/resolver/server_address.h +145 -0
  1339. data/src/core/lib/resource_quota/api.cc +104 -0
  1340. data/src/core/lib/resource_quota/api.h +49 -0
  1341. data/src/core/lib/resource_quota/arena.cc +138 -0
  1342. data/src/core/lib/resource_quota/arena.h +252 -0
  1343. data/src/core/lib/resource_quota/memory_quota.cc +699 -0
  1344. data/src/core/lib/resource_quota/memory_quota.h +592 -0
  1345. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1346. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1347. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1348. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1349. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1350. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1351. data/src/core/lib/resource_quota/trace.cc +19 -0
  1352. data/src/core/lib/resource_quota/trace.h +24 -0
  1353. data/src/core/lib/security/authorization/authorization_engine.h +13 -53
  1354. data/src/core/lib/security/authorization/authorization_policy_provider.h +47 -0
  1355. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +49 -0
  1356. data/src/core/lib/security/authorization/evaluate_args.cc +152 -84
  1357. data/src/core/lib/security/authorization/evaluate_args.h +55 -19
  1358. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
  1359. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1360. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
  1361. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1362. data/src/core/lib/security/authorization/matchers.cc +241 -0
  1363. data/src/core/lib/security/authorization/matchers.h +218 -0
  1364. data/src/core/lib/security/authorization/rbac_policy.cc +445 -0
  1365. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1366. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
  1367. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1368. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1369. data/src/core/lib/security/context/security_context.cc +45 -37
  1370. data/src/core/lib/security/context/security_context.h +65 -34
  1371. data/src/core/lib/security/credentials/alts/alts_credentials.cc +36 -27
  1372. data/src/core/lib/security/credentials/alts/alts_credentials.h +68 -54
  1373. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +20 -20
  1374. data/src/core/lib/security/credentials/alts/check_gcp_environment.h +41 -41
  1375. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +19 -19
  1376. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +20 -19
  1377. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +20 -19
  1378. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +20 -22
  1379. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.cc +18 -18
  1380. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +36 -37
  1381. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +19 -22
  1382. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1383. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1384. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1385. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1386. data/src/core/lib/security/credentials/composite/composite_credentials.cc +56 -114
  1387. data/src/core/lib/security/credentials/composite/composite_credentials.h +62 -37
  1388. data/src/core/lib/security/credentials/credentials.cc +37 -39
  1389. data/src/core/lib/security/credentials/credentials.h +148 -134
  1390. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +546 -0
  1391. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +100 -0
  1392. data/src/core/lib/security/credentials/external/aws_request_signer.cc +224 -0
  1393. data/src/core/lib/security/credentials/external/aws_request_signer.h +72 -0
  1394. data/src/core/lib/security/credentials/external/external_account_credentials.cc +561 -0
  1395. data/src/core/lib/security/credentials/external/external_account_credentials.h +129 -0
  1396. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +138 -0
  1397. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +55 -0
  1398. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +242 -0
  1399. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +71 -0
  1400. data/src/core/lib/security/credentials/fake/fake_credentials.cc +64 -63
  1401. data/src/core/lib/security/credentials/fake/fake_credentials.h +68 -60
  1402. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +24 -27
  1403. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +240 -142
  1404. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +38 -26
  1405. data/src/core/lib/security/credentials/iam/iam_credentials.cc +51 -48
  1406. data/src/core/lib/security/credentials/iam/iam_credentials.h +43 -27
  1407. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +73 -0
  1408. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1409. data/src/core/lib/security/credentials/jwt/json_token.cc +48 -39
  1410. data/src/core/lib/security/credentials/jwt/json_token.h +34 -33
  1411. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +83 -75
  1412. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +62 -36
  1413. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +179 -147
  1414. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +49 -47
  1415. data/src/core/lib/security/credentials/local/local_credentials.cc +37 -30
  1416. data/src/core/lib/security/credentials/local/local_credentials.h +39 -23
  1417. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +269 -287
  1418. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +105 -56
  1419. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +123 -177
  1420. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +98 -45
  1421. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +55 -59
  1422. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +48 -26
  1423. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +340 -0
  1424. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +216 -0
  1425. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +471 -0
  1426. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +206 -0
  1427. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1428. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1429. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +83 -206
  1430. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +93 -299
  1431. data/src/core/lib/security/credentials/tls/tls_credentials.cc +79 -58
  1432. data/src/core/lib/security/credentials/tls/tls_credentials.h +33 -24
  1433. data/src/core/lib/security/credentials/tls/tls_utils.cc +127 -0
  1434. data/src/core/lib/security/credentials/tls/tls_utils.h +51 -0
  1435. data/src/core/lib/security/credentials/xds/xds_credentials.cc +235 -0
  1436. data/src/core/lib/security/credentials/xds/xds_credentials.h +114 -0
  1437. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +77 -67
  1438. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +50 -48
  1439. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +94 -104
  1440. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +23 -26
  1441. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +120 -0
  1442. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +103 -0
  1443. data/src/core/lib/security/security_connector/load_system_roots.h +22 -18
  1444. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +23 -20
  1445. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +175 -0
  1446. data/src/core/lib/security/security_connector/load_system_roots_supported.h +45 -0
  1447. data/src/core/lib/security/security_connector/local/local_security_connector.cc +90 -65
  1448. data/src/core/lib/security/security_connector/local/local_security_connector.h +47 -44
  1449. data/src/core/lib/security/security_connector/security_connector.cc +48 -52
  1450. data/src/core/lib/security/security_connector/security_connector.h +90 -66
  1451. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +78 -66
  1452. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +43 -43
  1453. data/src/core/lib/security/security_connector/ssl_utils.cc +124 -83
  1454. data/src/core/lib/security/security_connector/ssl_utils.h +74 -75
  1455. data/src/core/lib/security/security_connector/ssl_utils_config.cc +22 -22
  1456. data/src/core/lib/security/security_connector/ssl_utils_config.h +19 -20
  1457. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +672 -450
  1458. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +231 -128
  1459. data/src/core/lib/security/transport/auth_filters.h +64 -23
  1460. data/src/core/lib/security/transport/client_auth_filter.cc +143 -383
  1461. data/src/core/lib/security/transport/secure_endpoint.cc +314 -200
  1462. data/src/core/lib/security/transport/secure_endpoint.h +27 -25
  1463. data/src/core/lib/security/transport/security_handshaker.cc +267 -168
  1464. data/src/core/lib/security/transport/security_handshaker.h +27 -21
  1465. data/src/core/lib/security/transport/server_auth_filter.cc +122 -89
  1466. data/src/core/lib/security/transport/tsi_error.cc +24 -22
  1467. data/src/core/lib/security/transport/tsi_error.h +20 -19
  1468. data/src/core/lib/security/util/json_util.cc +29 -31
  1469. data/src/core/lib/security/util/json_util.h +20 -21
  1470. data/src/core/lib/service_config/service_config.h +89 -0
  1471. data/src/core/lib/service_config/service_config_call_data.h +82 -0
  1472. data/src/core/lib/service_config/service_config_impl.cc +191 -0
  1473. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1474. data/src/core/lib/service_config/service_config_parser.cc +81 -0
  1475. data/src/core/lib/service_config/service_config_parser.h +105 -0
  1476. data/src/core/lib/slice/b64.cc +26 -26
  1477. data/src/core/lib/slice/b64.h +31 -29
  1478. data/src/core/lib/slice/percent_encoding.cc +95 -114
  1479. data/src/core/lib/slice/percent_encoding.h +43 -54
  1480. data/src/core/lib/slice/slice.cc +140 -234
  1481. data/src/core/lib/slice/slice.h +435 -0
  1482. data/src/core/lib/slice/slice_buffer.cc +145 -81
  1483. data/src/core/lib/slice/slice_buffer.h +162 -0
  1484. data/src/core/lib/slice/slice_internal.h +37 -305
  1485. data/src/core/lib/slice/slice_refcount.h +60 -0
  1486. data/src/core/lib/slice/slice_string_helpers.cc +17 -116
  1487. data/src/core/lib/slice/slice_string_helpers.h +20 -38
  1488. data/src/core/lib/surface/api_trace.cc +19 -18
  1489. data/src/core/lib/surface/api_trace.h +23 -22
  1490. data/src/core/lib/surface/builtins.cc +54 -0
  1491. data/src/core/lib/surface/builtins.h +26 -0
  1492. data/src/core/lib/surface/byte_buffer.cc +26 -21
  1493. data/src/core/lib/surface/byte_buffer_reader.cc +25 -25
  1494. data/src/core/lib/surface/call.cc +2509 -1450
  1495. data/src/core/lib/surface/call.h +114 -58
  1496. data/src/core/lib/surface/call_details.cc +28 -29
  1497. data/src/core/lib/surface/call_log_batch.cc +26 -20
  1498. data/src/core/lib/surface/call_test_only.h +31 -28
  1499. data/src/core/lib/surface/call_trace.cc +113 -0
  1500. data/src/core/lib/surface/call_trace.h +30 -0
  1501. data/src/core/lib/surface/channel.cc +251 -365
  1502. data/src/core/lib/surface/channel.h +148 -102
  1503. data/src/core/lib/surface/channel_init.cc +39 -93
  1504. data/src/core/lib/surface/channel_init.h +63 -57
  1505. data/src/core/lib/surface/channel_ping.cc +28 -23
  1506. data/src/core/lib/surface/channel_stack_type.cc +21 -18
  1507. data/src/core/lib/surface/channel_stack_type.h +20 -20
  1508. data/src/core/lib/surface/completion_queue.cc +337 -363
  1509. data/src/core/lib/surface/completion_queue.h +56 -53
  1510. data/src/core/lib/surface/completion_queue_factory.cc +37 -31
  1511. data/src/core/lib/surface/completion_queue_factory.h +19 -20
  1512. data/src/core/lib/surface/event_string.cc +18 -23
  1513. data/src/core/lib/surface/event_string.h +19 -19
  1514. data/src/core/lib/surface/init.cc +143 -162
  1515. data/src/core/lib/surface/init.h +20 -22
  1516. data/src/core/lib/surface/init_internally.cc +25 -0
  1517. data/src/core/lib/surface/init_internally.h +37 -0
  1518. data/src/core/lib/surface/lame_client.cc +101 -138
  1519. data/src/core/lib/surface/lame_client.h +63 -20
  1520. data/src/core/lib/surface/metadata_array.cc +20 -19
  1521. data/src/core/lib/surface/server.cc +304 -304
  1522. data/src/core/lib/surface/server.h +189 -62
  1523. data/src/core/lib/surface/validate_metadata.cc +74 -57
  1524. data/src/core/lib/surface/validate_metadata.h +27 -20
  1525. data/src/core/lib/surface/version.cc +21 -21
  1526. data/src/core/lib/transport/bdp_estimator.cc +29 -30
  1527. data/src/core/lib/transport/bdp_estimator.h +23 -24
  1528. data/src/core/lib/transport/connectivity_state.cc +33 -29
  1529. data/src/core/lib/transport/connectivity_state.h +34 -33
  1530. data/src/core/lib/transport/error_utils.cc +90 -73
  1531. data/src/core/lib/transport/error_utils.h +39 -28
  1532. data/src/core/lib/transport/handshaker.cc +228 -0
  1533. data/src/core/lib/transport/handshaker.h +172 -0
  1534. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1535. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1536. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1537. data/src/core/lib/transport/http2_errors.h +20 -20
  1538. data/src/core/lib/transport/http_connect_handshaker.cc +400 -0
  1539. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1540. data/src/core/lib/transport/metadata_batch.cc +218 -316
  1541. data/src/core/lib/transport/metadata_batch.h +1322 -177
  1542. data/src/core/lib/transport/parsed_metadata.cc +35 -0
  1543. data/src/core/lib/transport/parsed_metadata.h +410 -0
  1544. data/src/core/lib/transport/pid_controller.cc +24 -24
  1545. data/src/core/lib/transport/pid_controller.h +24 -24
  1546. data/src/core/lib/transport/status_conversion.cc +25 -25
  1547. data/src/core/lib/transport/status_conversion.h +23 -23
  1548. data/src/core/lib/transport/tcp_connect_handshaker.cc +246 -0
  1549. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1550. data/src/core/lib/transport/timeout_encoding.cc +229 -96
  1551. data/src/core/lib/transport/timeout_encoding.h +62 -28
  1552. data/src/core/lib/transport/transport.cc +118 -91
  1553. data/src/core/lib/transport/transport.h +276 -153
  1554. data/src/core/lib/transport/transport_fwd.h +20 -0
  1555. data/src/core/lib/transport/transport_impl.h +56 -32
  1556. data/src/core/lib/transport/transport_op_string.cc +46 -68
  1557. data/src/core/lib/uri/uri_parser.cc +312 -248
  1558. data/src/core/lib/uri/uri_parser.h +90 -40
  1559. data/src/core/plugin_registry/grpc_plugin_registry.cc +108 -118
  1560. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +66 -0
  1561. data/src/core/tsi/alts/crypt/aes_gcm.cc +26 -23
  1562. data/src/core/tsi/alts/crypt/gsec.cc +31 -30
  1563. data/src/core/tsi/alts/crypt/gsec.h +339 -334
  1564. data/src/core/tsi/alts/frame_protector/alts_counter.cc +23 -23
  1565. data/src/core/tsi/alts/frame_protector/alts_counter.h +66 -66
  1566. data/src/core/tsi/alts/frame_protector/alts_crypter.cc +19 -19
  1567. data/src/core/tsi/alts/frame_protector/alts_crypter.h +206 -206
  1568. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +85 -83
  1569. data/src/core/tsi/alts/frame_protector/alts_frame_protector.h +38 -38
  1570. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.cc +18 -18
  1571. data/src/core/tsi/alts/frame_protector/alts_record_protocol_crypter_common.h +80 -81
  1572. data/src/core/tsi/alts/frame_protector/alts_seal_privacy_integrity_crypter.cc +22 -22
  1573. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +22 -22
  1574. data/src/core/tsi/alts/frame_protector/frame_handler.cc +44 -42
  1575. data/src/core/tsi/alts/frame_protector/frame_handler.h +166 -166
  1576. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +167 -148
  1577. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +103 -104
  1578. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +27 -18
  1579. data/src/core/tsi/alts/handshaker/alts_shared_resource.h +41 -42
  1580. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +131 -108
  1581. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +59 -59
  1582. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +23 -22
  1583. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +23 -22
  1584. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +37 -37
  1585. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +22 -24
  1586. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +104 -103
  1587. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -46
  1588. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +38 -39
  1589. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +38 -36
  1590. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.h +33 -34
  1591. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol.h +65 -66
  1592. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +33 -32
  1593. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.h +53 -54
  1594. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +62 -59
  1595. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.h +138 -139
  1596. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +73 -64
  1597. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +41 -42
  1598. data/src/core/tsi/fake_transport_security.cc +177 -121
  1599. data/src/core/tsi/fake_transport_security.h +33 -27
  1600. data/src/core/tsi/local_transport_security.cc +84 -120
  1601. data/src/core/tsi/local_transport_security.h +33 -37
  1602. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +146 -0
  1603. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1604. data/src/core/tsi/ssl/session_cache/ssl_session.h +21 -21
  1605. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +22 -20
  1606. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +38 -72
  1607. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +37 -28
  1608. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +29 -22
  1609. data/src/core/tsi/ssl_transport_security.cc +495 -453
  1610. data/src/core/tsi/ssl_transport_security.h +239 -198
  1611. data/src/core/tsi/ssl_transport_security_utils.cc +250 -0
  1612. data/src/core/tsi/ssl_transport_security_utils.h +147 -0
  1613. data/src/core/tsi/ssl_types.h +25 -25
  1614. data/src/core/tsi/transport_security.cc +69 -43
  1615. data/src/core/tsi/transport_security.h +50 -34
  1616. data/src/core/tsi/transport_security_grpc.cc +23 -22
  1617. data/src/core/tsi/transport_security_grpc.h +43 -39
  1618. data/src/core/tsi/transport_security_interface.h +368 -328
  1619. data/src/ruby/bin/math_services_pb.rb +1 -1
  1620. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.clang +2 -0
  1621. data/src/ruby/ext/grpc/ext-export-truffleruby-with-ruby-abi-version.gcc +7 -0
  1622. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.clang +2 -0
  1623. data/src/ruby/ext/grpc/ext-export-with-ruby-abi-version.gcc +7 -0
  1624. data/src/ruby/ext/grpc/ext-export.gcc +1 -1
  1625. data/src/ruby/ext/grpc/extconf.rb +122 -24
  1626. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1627. data/src/ruby/ext/grpc/rb_call.c +6 -5
  1628. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1629. data/src/ruby/ext/grpc/rb_channel.c +25 -10
  1630. data/src/ruby/ext/grpc/rb_channel_args.c +3 -2
  1631. data/src/ruby/ext/grpc/rb_channel_credentials.c +15 -5
  1632. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1633. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1634. data/src/ruby/ext/grpc/rb_compression_options.c +7 -6
  1635. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1636. data/src/ruby/ext/grpc/rb_event_thread.c +4 -2
  1637. data/src/ruby/ext/grpc/rb_grpc.c +10 -4
  1638. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1639. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +108 -84
  1640. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +178 -142
  1641. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1642. data/src/ruby/ext/grpc/rb_server.c +26 -10
  1643. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1644. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1645. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1646. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1647. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1648. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1649. data/src/ruby/lib/grpc/errors.rb +1 -1
  1650. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1651. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -0
  1652. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  1653. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1654. data/src/ruby/lib/grpc/version.rb +1 -1
  1655. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1656. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  1657. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +39 -0
  1658. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1659. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +23 -5
  1660. data/src/ruby/pb/test/client.rb +769 -0
  1661. data/src/ruby/pb/test/server.rb +252 -0
  1662. data/src/ruby/pb/test/xds_client.rb +415 -0
  1663. data/src/ruby/spec/call_spec.rb +1 -1
  1664. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  1665. data/src/ruby/spec/channel_spec.rb +21 -48
  1666. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1667. data/src/ruby/spec/client_server_spec.rb +21 -9
  1668. data/src/ruby/spec/errors_spec.rb +1 -1
  1669. data/src/ruby/spec/generic/active_call_spec.rb +14 -5
  1670. data/src/ruby/spec/generic/client_stub_spec.rb +27 -27
  1671. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1672. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1673. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  1674. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1675. data/src/ruby/spec/server_spec.rb +22 -0
  1676. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1677. data/third_party/abseil-cpp/absl/algorithm/container.h +164 -117
  1678. data/third_party/abseil-cpp/absl/base/attributes.h +211 -70
  1679. data/third_party/abseil-cpp/absl/base/call_once.h +3 -10
  1680. data/third_party/abseil-cpp/absl/base/casts.h +61 -65
  1681. data/third_party/abseil-cpp/absl/base/config.h +320 -78
  1682. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +417 -335
  1683. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1684. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1685. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +12 -4
  1686. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
  1687. data/third_party/abseil-cpp/absl/base/internal/endian.h +78 -62
  1688. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1689. data/third_party/abseil-cpp/absl/base/internal/invoke.h +58 -4
  1690. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
  1691. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +31 -4
  1692. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1693. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +56 -47
  1694. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +29 -16
  1695. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +39 -40
  1696. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +44 -31
  1697. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1698. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +13 -8
  1699. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1700. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
  1701. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1702. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1703. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1704. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +96 -5
  1705. data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
  1706. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +11 -7
  1707. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
  1708. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1709. data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
  1710. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1711. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +23 -10
  1712. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +18 -9
  1713. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1714. data/third_party/abseil-cpp/absl/base/log_severity.h +55 -4
  1715. data/third_party/abseil-cpp/absl/base/macros.h +47 -109
  1716. data/third_party/abseil-cpp/absl/base/optimization.h +77 -6
  1717. data/third_party/abseil-cpp/absl/base/options.h +31 -4
  1718. data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
  1719. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1720. data/third_party/abseil-cpp/absl/base/thread_annotations.h +97 -42
  1721. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1722. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1723. data/third_party/abseil-cpp/absl/container/fixed_array.h +46 -32
  1724. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +613 -0
  1725. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +18 -11
  1726. data/third_party/abseil-cpp/absl/container/inlined_vector.h +155 -137
  1727. data/third_party/abseil-cpp/absl/container/internal/common.h +12 -7
  1728. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +34 -9
  1729. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +59 -57
  1730. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +23 -6
  1731. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
  1732. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +83 -114
  1733. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +99 -97
  1734. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  1735. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +495 -434
  1736. data/third_party/abseil-cpp/absl/container/internal/layout.h +11 -9
  1737. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +198 -0
  1738. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +25 -2
  1739. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +852 -369
  1740. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -87
  1741. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +93 -29
  1742. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1743. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1744. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +17 -5
  1745. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +21 -7
  1746. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +42 -24
  1747. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1748. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
  1749. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +14 -4
  1750. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1751. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
  1752. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1753. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +33 -8
  1754. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -25
  1755. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1756. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +19 -1
  1757. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
  1758. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +160 -27
  1759. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1760. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1761. data/third_party/abseil-cpp/absl/functional/bind_front.h +193 -0
  1762. data/third_party/abseil-cpp/absl/functional/function_ref.h +7 -3
  1763. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1764. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
  1765. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  1766. data/third_party/abseil-cpp/absl/hash/hash.h +110 -13
  1767. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  1768. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  1769. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +27 -13
  1770. data/third_party/abseil-cpp/absl/hash/internal/hash.h +426 -123
  1771. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1772. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1773. data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
  1774. data/third_party/abseil-cpp/absl/meta/type_traits.h +49 -11
  1775. data/third_party/abseil-cpp/absl/numeric/bits.h +178 -0
  1776. data/third_party/abseil-cpp/absl/numeric/int128.cc +18 -37
  1777. data/third_party/abseil-cpp/absl/numeric/int128.h +161 -87
  1778. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1779. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1780. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1781. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1782. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1783. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1784. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1785. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1786. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1787. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1788. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1789. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1790. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1791. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1792. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1793. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1794. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1795. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1796. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1797. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1798. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1799. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1800. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1801. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1802. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1803. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1804. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1805. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1806. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1807. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1808. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1809. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1810. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1811. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1812. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1813. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1814. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1815. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1816. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1817. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1818. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1819. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1820. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1821. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1822. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1823. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1824. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1825. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1826. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1827. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1828. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1829. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1830. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +86 -0
  1831. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +396 -0
  1832. data/third_party/abseil-cpp/absl/status/status.cc +205 -36
  1833. data/third_party/abseil-cpp/absl/status/status.h +586 -122
  1834. data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
  1835. data/third_party/abseil-cpp/absl/status/statusor.cc +103 -0
  1836. data/third_party/abseil-cpp/absl/status/statusor.h +776 -0
  1837. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1838. data/third_party/abseil-cpp/absl/strings/charconv.cc +10 -10
  1839. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1840. data/third_party/abseil-cpp/absl/strings/cord.cc +592 -1283
  1841. data/third_party/abseil-cpp/absl/strings/cord.h +840 -319
  1842. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1843. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1844. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1845. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1846. data/third_party/abseil-cpp/absl/strings/escaping.cc +13 -13
  1847. data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
  1848. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  1849. data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
  1850. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +9 -9
  1851. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1852. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +77 -0
  1853. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +561 -57
  1854. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1855. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1856. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1857. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1858. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1859. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1860. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1861. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1862. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1863. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1864. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +187 -0
  1865. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +773 -0
  1866. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1867. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1868. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1869. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1870. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1871. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1872. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1873. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1874. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1875. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1876. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1877. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1878. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1879. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1880. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +236 -136
  1881. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +159 -65
  1882. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +19 -6
  1883. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +63 -24
  1884. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +28 -16
  1885. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +36 -13
  1886. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +188 -155
  1887. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +1017 -87
  1888. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +17 -3
  1889. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +6 -13
  1890. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +82 -77
  1891. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +55 -29
  1892. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1893. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
  1894. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +72 -0
  1895. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1896. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1897. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1898. data/third_party/abseil-cpp/absl/strings/numbers.cc +135 -7
  1899. data/third_party/abseil-cpp/absl/strings/numbers.h +69 -32
  1900. data/third_party/abseil-cpp/absl/strings/str_cat.cc +8 -8
  1901. data/third_party/abseil-cpp/absl/strings/str_cat.h +21 -14
  1902. data/third_party/abseil-cpp/absl/strings/str_format.h +290 -15
  1903. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1904. data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
  1905. data/third_party/abseil-cpp/absl/strings/str_split.h +40 -6
  1906. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1907. data/third_party/abseil-cpp/absl/strings/string_view.h +146 -57
  1908. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1909. data/third_party/abseil-cpp/absl/strings/substitute.cc +7 -6
  1910. data/third_party/abseil-cpp/absl/strings/substitute.h +119 -83
  1911. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1912. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1913. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +12 -9
  1914. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1915. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1916. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +4 -3
  1917. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +29 -28
  1918. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -6
  1919. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +6 -11
  1920. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +2 -83
  1921. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +14 -12
  1922. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +209 -151
  1923. data/third_party/abseil-cpp/absl/synchronization/mutex.h +106 -72
  1924. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1925. data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -11
  1926. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1927. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1928. data/third_party/abseil-cpp/absl/time/duration.cc +98 -65
  1929. data/third_party/abseil-cpp/absl/time/format.cc +43 -36
  1930. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +42 -32
  1931. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +97 -22
  1932. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
  1933. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1934. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
  1935. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1936. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
  1937. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
  1938. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +219 -150
  1939. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
  1940. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +15 -8
  1941. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1942. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +3 -3
  1943. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +1 -1
  1944. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1945. data/third_party/abseil-cpp/absl/time/time.h +122 -86
  1946. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1947. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1948. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1949. data/third_party/abseil-cpp/absl/types/internal/variant.h +8 -8
  1950. data/third_party/abseil-cpp/absl/types/optional.h +26 -23
  1951. data/third_party/abseil-cpp/absl/types/span.h +52 -38
  1952. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  1953. data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
  1954. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1955. data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
  1956. data/third_party/boringssl-with-bazel/err_data.c +763 -721
  1957. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +70 -57
  1958. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1959. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1960. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  1961. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1962. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  1963. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1964. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +67 -54
  1965. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1966. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1967. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +650 -0
  1968. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1969. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1970. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
  1971. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1972. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1973. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +74 -68
  1974. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1975. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1976. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1977. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +224 -0
  1978. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +79 -354
  1979. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +327 -281
  1980. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1981. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1982. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -8
  1983. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1984. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1985. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1986. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
  1987. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1988. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1989. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1990. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1991. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1992. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1993. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1994. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1995. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1996. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +11 -10
  1997. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1998. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1999. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  2000. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  2001. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  2002. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  2003. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  2004. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  2005. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  2006. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  2007. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  2008. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  2009. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  2010. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  2011. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +272 -0
  2012. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  2013. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +30 -43
  2014. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa_asn1.c +55 -4
  2015. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +34 -0
  2016. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  2017. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  2018. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +13 -0
  2019. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  2020. data/third_party/boringssl-with-bazel/src/crypto/evp/p_dsa_asn1.c +6 -2
  2021. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  2022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  2023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  2024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  2025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  2026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +15 -4
  2027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  2028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  2029. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +44 -16
  2030. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +208 -37
  2031. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  2032. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  2033. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +456 -0
  2034. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +11 -0
  2035. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  2036. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  2037. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  2038. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  2039. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  2040. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
  2041. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  2042. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  2043. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  2044. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  2045. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  2046. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  2047. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  2048. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  2049. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  2050. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  2051. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +30 -9
  2052. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
  2053. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
  2054. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +4 -0
  2055. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +80 -43
  2056. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +120 -62
  2057. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  2058. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +176 -18
  2059. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  2060. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  2061. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  2062. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +401 -239
  2063. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  2064. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  2065. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  2066. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  2067. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  2068. data/third_party/boringssl-with-bazel/src/crypto/mem.c +46 -9
  2069. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  2070. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  2071. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  2072. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  2073. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  2074. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  2075. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  2076. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  2077. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  2078. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  2079. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  2080. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +96 -49
  2081. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  2082. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  2083. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  2084. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  2085. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  2086. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  2087. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  2088. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  2089. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  2090. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  2091. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  2092. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  2093. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  2094. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  2095. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +118 -49
  2096. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +267 -95
  2097. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +210 -34
  2098. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
  2099. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  2100. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +7 -5
  2101. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  2102. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  2103. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  2104. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
  2105. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  2106. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  2107. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +13 -8
  2108. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  2109. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +1 -180
  2110. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  2111. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  2112. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +11 -33
  2113. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +29 -23
  2114. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  2115. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +2 -1
  2116. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  2117. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +41 -27
  2118. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +5 -3
  2119. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_txt.c +67 -67
  2120. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +29 -26
  2121. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +54 -104
  2122. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  2123. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +74 -25
  2124. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -12
  2125. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  2126. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  2127. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +13 -26
  2128. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  2129. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +17 -15
  2130. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  2131. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +49 -59
  2132. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  2133. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  2134. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  2135. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  2136. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  2137. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +49 -11
  2138. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  2139. data/third_party/boringssl-with-bazel/src/crypto/x509v3/ext_dat.h +1 -4
  2140. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +239 -11
  2141. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  2142. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +7 -5
  2143. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  2144. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  2145. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  2146. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  2147. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  2148. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +43 -32
  2149. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  2150. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -28
  2151. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -13
  2152. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  2153. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  2154. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +42 -22
  2155. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  2156. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +1 -1
  2157. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +48 -40
  2158. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  2159. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  2160. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +15 -14
  2161. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +57 -10
  2162. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +8 -7
  2163. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  2164. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +25 -4
  2165. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +76 -9
  2166. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1794 -666
  2167. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -179
  2168. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +67 -15
  2169. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  2170. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +7 -1
  2171. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  2172. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  2173. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  2174. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  2175. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +42 -7
  2176. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  2177. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  2178. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +25 -5
  2179. data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
  2180. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +66 -32
  2181. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +19 -2
  2182. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  2183. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  2184. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  2185. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
  2186. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  2187. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +70 -106
  2188. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +99 -0
  2189. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  2190. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  2191. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  2192. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  2193. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  2194. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  2195. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
  2196. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +194 -146
  2197. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
  2198. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
  2199. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  2200. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  2201. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
  2202. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  2203. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +499 -122
  2204. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +52 -36
  2205. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +42 -14
  2206. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1554 -427
  2207. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  2208. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +642 -452
  2209. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
  2210. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  2211. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  2212. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  2213. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +4325 -0
  2214. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +333 -22
  2215. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +99 -51
  2216. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +315 -219
  2217. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +178 -36
  2218. data/third_party/boringssl-with-bazel/src/ssl/internal.h +533 -159
  2219. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  2220. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -2
  2221. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  2222. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +49 -9
  2223. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  2224. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +10 -11
  2225. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  2226. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +129 -110
  2227. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  2228. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +147 -118
  2229. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  2230. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  2231. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +11 -3
  2232. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  2233. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  2234. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +80 -36
  2235. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +285 -190
  2236. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +160 -91
  2237. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +381 -136
  2238. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  2239. data/third_party/cares/cares/include/ares.h +742 -0
  2240. data/third_party/cares/cares/include/ares_dns.h +112 -0
  2241. data/third_party/cares/cares/include/ares_version.h +24 -0
  2242. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  2243. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  2244. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  2245. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  2246. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  2247. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  2248. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  2249. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  2250. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  2251. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  2252. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  2253. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  2254. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  2255. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  2256. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  2257. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  2258. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  2259. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  2260. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  2261. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  2262. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  2263. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  2264. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  2265. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  2266. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  2267. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  2268. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  2269. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  2270. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  2271. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  2272. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  2273. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  2274. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  2275. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  2276. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  2277. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  2278. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  2279. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  2280. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  2281. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  2282. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  2283. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  2284. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  2285. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  2286. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  2287. data/third_party/re2/re2/bitstate.cc +3 -3
  2288. data/third_party/re2/re2/compile.cc +91 -109
  2289. data/third_party/re2/re2/dfa.cc +40 -52
  2290. data/third_party/re2/re2/filtered_re2.cc +18 -2
  2291. data/third_party/re2/re2/filtered_re2.h +10 -5
  2292. data/third_party/re2/re2/nfa.cc +5 -5
  2293. data/third_party/re2/re2/onepass.cc +2 -2
  2294. data/third_party/re2/re2/parse.cc +42 -23
  2295. data/third_party/re2/re2/perl_groups.cc +34 -34
  2296. data/third_party/re2/re2/prefilter.cc +3 -2
  2297. data/third_party/re2/re2/prefilter_tree.cc +27 -59
  2298. data/third_party/re2/re2/prefilter_tree.h +3 -2
  2299. data/third_party/re2/re2/prog.cc +193 -6
  2300. data/third_party/re2/re2/prog.h +45 -14
  2301. data/third_party/re2/re2/re2.cc +93 -129
  2302. data/third_party/re2/re2/re2.h +156 -141
  2303. data/third_party/re2/re2/regexp.cc +13 -7
  2304. data/third_party/re2/re2/regexp.h +8 -2
  2305. data/third_party/re2/re2/set.cc +31 -9
  2306. data/third_party/re2/re2/set.h +9 -4
  2307. data/third_party/re2/re2/simplify.cc +11 -3
  2308. data/third_party/re2/re2/stringpiece.h +10 -7
  2309. data/third_party/re2/re2/tostring.cc +1 -1
  2310. data/third_party/re2/re2/unicode_casefold.cc +25 -11
  2311. data/third_party/re2/re2/unicode_groups.cc +319 -151
  2312. data/third_party/re2/re2/walker-inl.h +4 -3
  2313. data/third_party/re2/util/mutex.h +6 -6
  2314. data/third_party/re2/util/pcre.h +3 -3
  2315. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  2316. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  2317. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  2318. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  2319. data/third_party/upb/upb/arena.c +277 -0
  2320. data/third_party/upb/upb/arena.h +225 -0
  2321. data/third_party/upb/upb/array.c +114 -0
  2322. data/third_party/upb/upb/array.h +83 -0
  2323. data/third_party/upb/upb/collections.h +36 -0
  2324. data/third_party/upb/upb/decode.c +979 -379
  2325. data/third_party/upb/upb/decode.h +80 -6
  2326. data/third_party/upb/upb/decode_fast.c +1055 -0
  2327. data/third_party/upb/upb/decode_fast.h +153 -0
  2328. data/third_party/upb/upb/def.c +3269 -0
  2329. data/third_party/upb/upb/def.h +416 -0
  2330. data/third_party/upb/upb/def.hpp +441 -0
  2331. data/third_party/upb/upb/encode.c +439 -246
  2332. data/third_party/upb/upb/encode.h +66 -6
  2333. data/third_party/upb/upb/extension_registry.c +93 -0
  2334. data/third_party/upb/upb/extension_registry.h +84 -0
  2335. data/third_party/upb/upb/internal/decode.h +211 -0
  2336. data/third_party/upb/upb/internal/table.h +385 -0
  2337. data/third_party/upb/upb/internal/upb.h +68 -0
  2338. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  2339. data/third_party/upb/upb/json_decode.c +1512 -0
  2340. data/third_party/upb/upb/json_decode.h +47 -0
  2341. data/third_party/upb/upb/json_encode.c +780 -0
  2342. data/third_party/upb/upb/json_encode.h +65 -0
  2343. data/third_party/upb/upb/map.c +108 -0
  2344. data/third_party/upb/upb/map.h +117 -0
  2345. data/third_party/upb/upb/message_value.h +66 -0
  2346. data/third_party/upb/upb/mini_table.c +1147 -0
  2347. data/third_party/upb/upb/mini_table.h +189 -0
  2348. data/third_party/upb/upb/mini_table.hpp +112 -0
  2349. data/third_party/upb/upb/msg.c +291 -100
  2350. data/third_party/upb/upb/msg.h +48 -450
  2351. data/third_party/upb/upb/msg_internal.h +837 -0
  2352. data/third_party/upb/upb/port_def.inc +166 -83
  2353. data/third_party/upb/upb/port_undef.inc +43 -8
  2354. data/third_party/upb/upb/reflection.c +323 -0
  2355. data/third_party/upb/upb/reflection.h +110 -0
  2356. data/third_party/upb/upb/reflection.hpp +37 -0
  2357. data/third_party/upb/upb/status.c +86 -0
  2358. data/third_party/upb/upb/status.h +66 -0
  2359. data/third_party/upb/upb/table.c +422 -376
  2360. data/third_party/upb/upb/table_internal.h +36 -0
  2361. data/third_party/upb/upb/text_encode.c +473 -0
  2362. data/third_party/upb/upb/text_encode.h +64 -0
  2363. data/third_party/upb/upb/upb.c +56 -267
  2364. data/third_party/upb/upb/upb.h +115 -239
  2365. data/third_party/upb/upb/upb.hpp +51 -24
  2366. data/third_party/xxhash/xxhash.h +5580 -0
  2367. data/third_party/zlib/compress.c +3 -3
  2368. data/third_party/zlib/crc32.c +975 -292
  2369. data/third_party/zlib/crc32.h +9441 -436
  2370. data/third_party/zlib/deflate.c +183 -129
  2371. data/third_party/zlib/deflate.h +12 -15
  2372. data/third_party/zlib/gzguts.h +3 -2
  2373. data/third_party/zlib/gzlib.c +6 -4
  2374. data/third_party/zlib/gzread.c +8 -12
  2375. data/third_party/zlib/gzwrite.c +26 -14
  2376. data/third_party/zlib/infback.c +12 -8
  2377. data/third_party/zlib/inffast.c +14 -14
  2378. data/third_party/zlib/inflate.c +44 -10
  2379. data/third_party/zlib/inflate.h +3 -2
  2380. data/third_party/zlib/inftrees.c +3 -3
  2381. data/third_party/zlib/inftrees.h +1 -1
  2382. data/third_party/zlib/trees.c +85 -107
  2383. data/third_party/zlib/uncompr.c +2 -2
  2384. data/third_party/zlib/zconf.h +16 -3
  2385. data/third_party/zlib/zlib.h +129 -106
  2386. data/third_party/zlib/zutil.c +11 -9
  2387. data/third_party/zlib/zutil.h +13 -9
  2388. metadata +1180 -323
  2389. data/include/grpc/impl/codegen/gpr_slice.h +0 -69
  2390. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -389
  2391. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -34
  2392. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -45
  2393. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -85
  2394. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -946
  2395. data/src/core/ext/filters/client_channel/lb_policy/xds/lrs.cc +0 -537
  2396. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -32
  2397. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_routing.cc +0 -1141
  2398. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -138
  2399. data/src/core/ext/filters/client_channel/lb_policy.h +0 -425
  2400. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -47
  2401. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -181
  2402. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  2403. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  2404. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  2405. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  2406. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  2407. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  2408. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  2409. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  2410. data/src/core/ext/filters/client_channel/resolver.cc +0 -85
  2411. data/src/core/ext/filters/client_channel/resolver.h +0 -144
  2412. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -73
  2413. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -196
  2414. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  2415. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -442
  2416. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -126
  2417. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -354
  2418. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -142
  2419. data/src/core/ext/filters/client_channel/server_address.cc +0 -81
  2420. data/src/core/ext/filters/client_channel/server_address.h +0 -128
  2421. data/src/core/ext/filters/client_channel/service_config.cc +0 -221
  2422. data/src/core/ext/filters/client_channel/service_config.h +0 -123
  2423. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -68
  2424. data/src/core/ext/filters/client_channel/service_config_parser.cc +0 -87
  2425. data/src/core/ext/filters/client_channel/service_config_parser.h +0 -89
  2426. data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -94
  2427. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -440
  2428. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +0 -546
  2429. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +0 -53
  2430. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +0 -399
  2431. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +0 -31
  2432. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -557
  2433. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  2434. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  2435. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -27
  2436. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  2437. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  2438. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  2439. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  2440. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -112
  2441. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -79
  2442. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -200
  2443. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -45
  2444. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -69
  2445. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -86
  2446. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  2447. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
  2448. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  2449. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  2450. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  2451. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  2452. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -49
  2453. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -30
  2454. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -49
  2455. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -30
  2456. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -49
  2457. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -29
  2458. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -49
  2459. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  2460. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -49
  2461. data/src/core/ext/upb-generated/gogoproto/gogo.upb.c +0 -17
  2462. data/src/core/ext/upb-generated/gogoproto/gogo.upb.h +0 -29
  2463. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  2464. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -117
  2465. data/src/core/ext/xds/xds_channel.h +0 -46
  2466. data/src/core/ext/xds/xds_channel_secure.cc +0 -103
  2467. data/src/core/lib/avl/avl.cc +0 -306
  2468. data/src/core/lib/channel/handshaker.cc +0 -262
  2469. data/src/core/lib/channel/handshaker.h +0 -179
  2470. data/src/core/lib/channel/handshaker_factory.h +0 -42
  2471. data/src/core/lib/channel/handshaker_registry.cc +0 -105
  2472. data/src/core/lib/channel/handshaker_registry.h +0 -54
  2473. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  2474. data/src/core/lib/compression/compression_args.cc +0 -134
  2475. data/src/core/lib/compression/compression_args.h +0 -56
  2476. data/src/core/lib/compression/stream_compression.cc +0 -80
  2477. data/src/core/lib/compression/stream_compression.h +0 -116
  2478. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  2479. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  2480. data/src/core/lib/compression/stream_compression_identity.cc +0 -92
  2481. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  2482. data/src/core/lib/gpr/arena.h +0 -47
  2483. data/src/core/lib/gpr/env.h +0 -40
  2484. data/src/core/lib/gpr/env_linux.cc +0 -76
  2485. data/src/core/lib/gpr/env_posix.cc +0 -47
  2486. data/src/core/lib/gpr/env_windows.cc +0 -74
  2487. data/src/core/lib/gpr/murmur_hash.cc +0 -80
  2488. data/src/core/lib/gpr/murmur_hash.h +0 -29
  2489. data/src/core/lib/gpr/string_windows.h +0 -32
  2490. data/src/core/lib/gpr/tls.h +0 -68
  2491. data/src/core/lib/gpr/tls_gcc.h +0 -52
  2492. data/src/core/lib/gpr/tls_msvc.h +0 -52
  2493. data/src/core/lib/gpr/tls_pthread.cc +0 -30
  2494. data/src/core/lib/gpr/tls_pthread.h +0 -56
  2495. data/src/core/lib/gprpp/arena.cc +0 -103
  2496. data/src/core/lib/gprpp/arena.h +0 -120
  2497. data/src/core/lib/gprpp/atomic.h +0 -104
  2498. data/src/core/lib/gprpp/map.h +0 -53
  2499. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  2500. data/src/core/lib/iomgr/error_internal.h +0 -61
  2501. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1650
  2502. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  2503. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -183
  2504. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -175
  2505. data/src/core/lib/iomgr/executor/threadpool.cc +0 -137
  2506. data/src/core/lib/iomgr/executor/threadpool.h +0 -149
  2507. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  2508. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  2509. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  2510. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  2511. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  2512. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  2513. data/src/core/lib/iomgr/parse_address.cc +0 -238
  2514. data/src/core/lib/iomgr/parse_address.h +0 -53
  2515. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -87
  2516. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  2517. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  2518. data/src/core/lib/iomgr/pollset_custom.h +0 -35
  2519. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  2520. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  2521. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  2522. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  2523. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -168
  2524. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  2525. data/src/core/lib/iomgr/resource_quota.cc +0 -1016
  2526. data/src/core/lib/iomgr/resource_quota.h +0 -177
  2527. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  2528. data/src/core/lib/iomgr/sockaddr_utils.cc +0 -296
  2529. data/src/core/lib/iomgr/sockaddr_utils.h +0 -80
  2530. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  2531. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  2532. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -160
  2533. data/src/core/lib/iomgr/tcp_custom.cc +0 -386
  2534. data/src/core/lib/iomgr/tcp_custom.h +0 -84
  2535. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -477
  2536. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  2537. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2538. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2539. data/src/core/lib/iomgr/timer_custom.cc +0 -95
  2540. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2541. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  2542. data/src/core/lib/iomgr/udp_server.cc +0 -748
  2543. data/src/core/lib/iomgr/udp_server.h +0 -104
  2544. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  2545. data/src/core/lib/iomgr/work_serializer.h +0 -65
  2546. data/src/core/lib/profiling/basic_timers.cc +0 -293
  2547. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2548. data/src/core/lib/profiling/timers.h +0 -94
  2549. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  2550. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  2551. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -42
  2552. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -68
  2553. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -93
  2554. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  2555. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -56
  2556. data/src/core/lib/security/authorization/mock_cel/statusor.h +0 -50
  2557. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  2558. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -171
  2559. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -44
  2560. data/src/core/lib/slice/slice_intern.cc +0 -375
  2561. data/src/core/lib/slice/slice_utils.h +0 -200
  2562. data/src/core/lib/surface/init_secure.cc +0 -81
  2563. data/src/core/lib/transport/authority_override.cc +0 -38
  2564. data/src/core/lib/transport/authority_override.h +0 -32
  2565. data/src/core/lib/transport/byte_stream.cc +0 -158
  2566. data/src/core/lib/transport/byte_stream.h +0 -165
  2567. data/src/core/lib/transport/metadata.cc +0 -679
  2568. data/src/core/lib/transport/metadata.h +0 -446
  2569. data/src/core/lib/transport/static_metadata.cc +0 -1249
  2570. data/src/core/lib/transport/static_metadata.h +0 -604
  2571. data/src/core/lib/transport/status_metadata.cc +0 -61
  2572. data/src/core/lib/transport/status_metadata.h +0 -48
  2573. data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
  2574. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -218
  2575. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2576. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2577. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -49
  2578. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -261
  2579. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  2580. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2581. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +0 -533
  2582. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +0 -93
  2583. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  2584. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -192
  2585. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +0 -653
  2586. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  2587. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +0 -116
  2588. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2589. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pku.c +0 -110
  2590. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_sxnet.c +0 -274
  2591. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +0 -3895
  2592. data/third_party/cares/cares/ares.h +0 -670
  2593. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2594. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2595. data/third_party/cares/cares/ares_create_query.c +0 -206
  2596. data/third_party/cares/cares/ares_data.c +0 -222
  2597. data/third_party/cares/cares/ares_data.h +0 -72
  2598. data/third_party/cares/cares/ares_dns.h +0 -103
  2599. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2600. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2601. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2602. data/third_party/cares/cares/ares_getenv.c +0 -30
  2603. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2604. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2605. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2606. data/third_party/cares/cares/ares_getopt.c +0 -122
  2607. data/third_party/cares/cares/ares_getopt.h +0 -53
  2608. data/third_party/cares/cares/ares_init.c +0 -2615
  2609. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2610. data/third_party/cares/cares/ares_library_init.c +0 -195
  2611. data/third_party/cares/cares/ares_library_init.h +0 -43
  2612. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2613. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2614. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2615. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2616. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2617. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2618. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2619. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2620. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2621. data/third_party/cares/cares/ares_private.h +0 -382
  2622. data/third_party/cares/cares/ares_process.c +0 -1473
  2623. data/third_party/cares/cares/ares_query.c +0 -186
  2624. data/third_party/cares/cares/ares_search.c +0 -323
  2625. data/third_party/cares/cares/ares_send.c +0 -137
  2626. data/third_party/cares/cares/ares_setup.h +0 -217
  2627. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2628. data/third_party/cares/cares/ares_version.h +0 -24
  2629. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2630. data/third_party/cares/cares/inet_ntop.c +0 -207
  2631. data/third_party/upb/upb/port.c +0 -26
  2632. data/third_party/upb/upb/table.int.h +0 -466
  2633. /data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  2634. /data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  2635. /data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  2636. /data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  2637. /data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  2638. /data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  2639. /data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  2640. /data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  2641. /data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  2642. /data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  2643. /data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  2644. /data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  2645. /data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  2646. /data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  2647. /data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  2648. /data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  2649. /data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  2650. /data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  2651. /data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  2652. /data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  2653. /data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  2654. /data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  2655. /data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  2656. /data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  2657. /data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  2658. /data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  2659. /data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  2660. /data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  2661. /data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  2662. /data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  2663. /data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  2664. /data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  2665. /data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  2666. /data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  2667. /data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  2668. /data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
@@ -1,240 +1,591 @@
1
- /*
2
- *
3
- * Copyright 2015 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ //
3
+ // Copyright 2015 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
18
 
19
19
  #include <grpc/support/port_platform.h>
20
20
 
21
- #include <assert.h>
21
+ #include "src/core/lib/surface/call.h"
22
+
23
+ #include <inttypes.h>
22
24
  #include <limits.h>
23
- #include <stdio.h>
24
25
  #include <stdlib.h>
25
- #include <string.h>
26
26
 
27
+ #include <algorithm>
28
+ #include <atomic>
29
+ #include <memory>
30
+ #include <new>
27
31
  #include <string>
28
-
32
+ #include <type_traits>
33
+ #include <utility>
34
+ #include <vector>
35
+
36
+ #include "absl/base/thread_annotations.h"
37
+ #include "absl/cleanup/cleanup.h"
38
+ #include "absl/meta/type_traits.h"
39
+ #include "absl/status/status.h"
29
40
  #include "absl/strings/str_cat.h"
30
41
  #include "absl/strings/str_format.h"
42
+ #include "absl/strings/str_join.h"
43
+ #include "absl/strings/string_view.h"
44
+ #include "absl/types/variant.h"
31
45
 
46
+ #include <grpc/byte_buffer.h>
32
47
  #include <grpc/compression.h>
48
+ #include <grpc/event_engine/event_engine.h>
33
49
  #include <grpc/grpc.h>
50
+ #include <grpc/impl/propagation_bits.h>
34
51
  #include <grpc/slice.h>
52
+ #include <grpc/slice_buffer.h>
53
+ #include <grpc/status.h>
35
54
  #include <grpc/support/alloc.h>
55
+ #include <grpc/support/atm.h>
36
56
  #include <grpc/support/log.h>
37
57
  #include <grpc/support/string_util.h>
58
+ #include <grpc/support/time.h>
38
59
 
60
+ #include "src/core/lib/channel/call_finalization.h"
39
61
  #include "src/core/lib/channel/channel_stack.h"
40
- #include "src/core/lib/compression/algorithm_metadata.h"
62
+ #include "src/core/lib/channel/channelz.h"
63
+ #include "src/core/lib/channel/context.h"
64
+ #include "src/core/lib/channel/status_util.h"
65
+ #include "src/core/lib/compression/compression_internal.h"
41
66
  #include "src/core/lib/debug/stats.h"
67
+ #include "src/core/lib/debug/stats_data.h"
68
+ #include "src/core/lib/experiments/experiments.h"
42
69
  #include "src/core/lib/gpr/alloc.h"
43
- #include "src/core/lib/gpr/string.h"
44
70
  #include "src/core/lib/gpr/time_precise.h"
45
71
  #include "src/core/lib/gpr/useful.h"
46
- #include "src/core/lib/gprpp/arena.h"
47
- #include "src/core/lib/gprpp/manual_constructor.h"
72
+ #include "src/core/lib/gprpp/bitset.h"
73
+ #include "src/core/lib/gprpp/cpp_impl_of.h"
74
+ #include "src/core/lib/gprpp/crash.h"
75
+ #include "src/core/lib/gprpp/debug_location.h"
48
76
  #include "src/core/lib/gprpp/ref_counted.h"
49
- #include "src/core/lib/iomgr/timer.h"
50
- #include "src/core/lib/profiling/timers.h"
51
- #include "src/core/lib/slice/slice_string_helpers.h"
52
- #include "src/core/lib/slice/slice_utils.h"
77
+ #include "src/core/lib/gprpp/ref_counted_ptr.h"
78
+ #include "src/core/lib/gprpp/status_helper.h"
79
+ #include "src/core/lib/gprpp/sync.h"
80
+ #include "src/core/lib/iomgr/call_combiner.h"
81
+ #include "src/core/lib/iomgr/exec_ctx.h"
82
+ #include "src/core/lib/iomgr/polling_entity.h"
83
+ #include "src/core/lib/promise/activity.h"
84
+ #include "src/core/lib/promise/arena_promise.h"
85
+ #include "src/core/lib/promise/context.h"
86
+ #include "src/core/lib/promise/latch.h"
87
+ #include "src/core/lib/promise/pipe.h"
88
+ #include "src/core/lib/promise/poll.h"
89
+ #include "src/core/lib/resource_quota/arena.h"
90
+ #include "src/core/lib/slice/slice_buffer.h"
91
+ #include "src/core/lib/slice/slice_internal.h"
53
92
  #include "src/core/lib/surface/api_trace.h"
54
- #include "src/core/lib/surface/call.h"
55
93
  #include "src/core/lib/surface/call_test_only.h"
56
94
  #include "src/core/lib/surface/channel.h"
57
95
  #include "src/core/lib/surface/completion_queue.h"
58
96
  #include "src/core/lib/surface/server.h"
59
97
  #include "src/core/lib/surface/validate_metadata.h"
60
98
  #include "src/core/lib/transport/error_utils.h"
61
- #include "src/core/lib/transport/metadata.h"
62
- #include "src/core/lib/transport/static_metadata.h"
63
- #include "src/core/lib/transport/status_metadata.h"
99
+ #include "src/core/lib/transport/metadata_batch.h"
64
100
  #include "src/core/lib/transport/transport.h"
65
101
 
66
- /** The maximum number of concurrent batches possible.
67
- Based upon the maximum number of individually queueable ops in the batch
68
- api:
69
- - initial metadata send
70
- - message send
71
- - status/close send (depending on client/server)
72
- - initial metadata recv
73
- - message recv
74
- - status/close recv (depending on client/server) */
75
- #define MAX_CONCURRENT_BATCHES 6
76
-
77
- #define MAX_SEND_EXTRA_METADATA_COUNT 3
78
-
79
- // Used to create arena for the first call.
80
- #define ESTIMATED_MDELEM_COUNT 16
81
-
82
- struct batch_control {
83
- batch_control() = default;
84
-
85
- grpc_call* call = nullptr;
86
- grpc_transport_stream_op_batch op;
87
- /* Share memory for cq_completion and notify_tag as they are never needed
88
- simultaneously. Each byte used in this data structure count as six bytes
89
- per call, so any savings we can make are worthwhile,
90
-
91
- We use notify_tag to determine whether or not to send notification to the
92
- completion queue. Once we've made that determination, we can reuse the
93
- memory for cq_completion. */
94
- union {
95
- grpc_cq_completion cq_completion;
96
- struct {
97
- /* Any given op indicates completion by either (a) calling a closure or
98
- (b) sending a notification on the call's completion queue. If
99
- \a is_closure is true, \a tag indicates a closure to be invoked;
100
- otherwise, \a tag indicates the tag to be used in the notification to
101
- be sent to the completion queue. */
102
- void* tag;
103
- bool is_closure;
104
- } notify_tag;
105
- } completion_data;
106
- grpc_closure start_batch;
107
- grpc_closure finish_batch;
108
- grpc_core::Atomic<intptr_t> steps_to_complete;
109
- gpr_atm batch_error = reinterpret_cast<gpr_atm>(GRPC_ERROR_NONE);
110
- void set_num_steps_to_complete(uintptr_t steps) {
111
- steps_to_complete.Store(steps, grpc_core::MemoryOrder::RELEASE);
102
+ grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
103
+ grpc_core::TraceFlag grpc_compression_trace(false, "compression");
104
+ grpc_core::TraceFlag grpc_call_trace(false, "call");
105
+ grpc_core::TraceFlag grpc_call_refcount_trace(false, "call_refcount");
106
+
107
+ namespace grpc_core {
108
+
109
+ ///////////////////////////////////////////////////////////////////////////////
110
+ // Call
111
+
112
+ class Call : public CppImplOf<Call, grpc_call> {
113
+ public:
114
+ Arena* arena() { return arena_; }
115
+ bool is_client() const { return is_client_; }
116
+
117
+ virtual void ContextSet(grpc_context_index elem, void* value,
118
+ void (*destroy)(void* value)) = 0;
119
+ virtual void* ContextGet(grpc_context_index elem) const = 0;
120
+ virtual bool Completed() = 0;
121
+ void CancelWithStatus(grpc_status_code status, const char* description);
122
+ virtual void CancelWithError(grpc_error_handle error) = 0;
123
+ virtual void SetCompletionQueue(grpc_completion_queue* cq) = 0;
124
+ char* GetPeer();
125
+ virtual grpc_call_error StartBatch(const grpc_op* ops, size_t nops,
126
+ void* notify_tag,
127
+ bool is_notify_tag_closure) = 0;
128
+ virtual bool failed_before_recv_message() const = 0;
129
+ virtual bool is_trailers_only() const = 0;
130
+ virtual absl::string_view GetServerAuthority() const = 0;
131
+ virtual void ExternalRef() = 0;
132
+ virtual void ExternalUnref() = 0;
133
+ virtual void InternalRef(const char* reason) = 0;
134
+ virtual void InternalUnref(const char* reason) = 0;
135
+
136
+ virtual grpc_compression_algorithm test_only_compression_algorithm() = 0;
137
+ virtual uint32_t test_only_message_flags() = 0;
138
+ virtual uint32_t test_only_encodings_accepted_by_peer() = 0;
139
+ virtual grpc_compression_algorithm compression_for_level(
140
+ grpc_compression_level level) = 0;
141
+
142
+ // This should return nullptr for the promise stack (and alternative means
143
+ // for that functionality be invented)
144
+ virtual grpc_call_stack* call_stack() = 0;
145
+
146
+ gpr_atm* peer_string_atm_ptr() { return &peer_string_; }
147
+
148
+ protected:
149
+ // The maximum number of concurrent batches possible.
150
+ // Based upon the maximum number of individually queueable ops in the batch
151
+ // api:
152
+ // - initial metadata send
153
+ // - message send
154
+ // - status/close send (depending on client/server)
155
+ // - initial metadata recv
156
+ // - message recv
157
+ // - status/close recv (depending on client/server)
158
+ static constexpr size_t kMaxConcurrentBatches = 6;
159
+
160
+ struct ParentCall {
161
+ Mutex child_list_mu;
162
+ Call* first_child ABSL_GUARDED_BY(child_list_mu) = nullptr;
163
+ };
164
+
165
+ struct ChildCall {
166
+ explicit ChildCall(Call* parent) : parent(parent) {}
167
+ Call* parent;
168
+ /// siblings: children of the same parent form a list, and this list is
169
+ /// protected under
170
+ /// parent->mu
171
+ Call* sibling_next = nullptr;
172
+ Call* sibling_prev = nullptr;
173
+ };
174
+
175
+ Call(Arena* arena, bool is_client, Timestamp send_deadline,
176
+ RefCountedPtr<Channel> channel)
177
+ : channel_(std::move(channel)),
178
+ arena_(arena),
179
+ send_deadline_(send_deadline),
180
+ is_client_(is_client) {
181
+ GPR_DEBUG_ASSERT(arena_ != nullptr);
182
+ GPR_DEBUG_ASSERT(channel_ != nullptr);
183
+ }
184
+ virtual ~Call() = default;
185
+
186
+ void DeleteThis();
187
+
188
+ ParentCall* GetOrCreateParentCall();
189
+ ParentCall* parent_call();
190
+ Channel* channel() {
191
+ GPR_DEBUG_ASSERT(channel_ != nullptr);
192
+ return channel_.get();
193
+ }
194
+
195
+ absl::Status InitParent(Call* parent, uint32_t propagation_mask);
196
+ void PublishToParent(Call* parent);
197
+ void MaybeUnpublishFromParent();
198
+ void PropagateCancellationToChildren();
199
+
200
+ Timestamp send_deadline() const { return send_deadline_; }
201
+ void set_send_deadline(Timestamp send_deadline) {
202
+ send_deadline_ = send_deadline;
203
+ }
204
+
205
+ void ClearPeerString() { gpr_atm_rel_store(&peer_string_, 0); }
206
+
207
+ private:
208
+ RefCountedPtr<Channel> channel_;
209
+ Arena* const arena_;
210
+ std::atomic<ParentCall*> parent_call_{nullptr};
211
+ ChildCall* child_ = nullptr;
212
+ Timestamp send_deadline_;
213
+ const bool is_client_;
214
+ // flag indicating that cancellation is inherited
215
+ bool cancellation_is_inherited_ = false;
216
+ // A char* indicating the peer name.
217
+ gpr_atm peer_string_ = 0;
218
+ };
219
+
220
+ Call::ParentCall* Call::GetOrCreateParentCall() {
221
+ ParentCall* p = parent_call_.load(std::memory_order_acquire);
222
+ if (p == nullptr) {
223
+ p = arena_->New<ParentCall>();
224
+ ParentCall* expected = nullptr;
225
+ if (!parent_call_.compare_exchange_strong(expected, p,
226
+ std::memory_order_release,
227
+ std::memory_order_relaxed)) {
228
+ p->~ParentCall();
229
+ p = expected;
230
+ }
231
+ }
232
+ return p;
233
+ }
234
+
235
+ Call::ParentCall* Call::parent_call() {
236
+ return parent_call_.load(std::memory_order_acquire);
237
+ }
238
+
239
+ absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
240
+ child_ = arena()->New<ChildCall>(parent);
241
+
242
+ parent->InternalRef("child");
243
+ GPR_ASSERT(is_client_);
244
+ GPR_ASSERT(!parent->is_client_);
245
+
246
+ if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
247
+ send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
112
248
  }
113
- bool completed_batch_step() {
114
- return steps_to_complete.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1;
249
+ // for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
250
+ // GRPC_PROPAGATE_STATS_CONTEXT
251
+ // TODO(ctiller): This should change to use the appropriate census start_op
252
+ // call.
253
+ if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
254
+ if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
255
+ return absl::UnknownError(
256
+ "Census tracing propagation requested without Census context "
257
+ "propagation");
258
+ }
259
+ ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
260
+ nullptr);
261
+ } else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
262
+ return absl::UnknownError(
263
+ "Census context propagation requested without Census tracing "
264
+ "propagation");
265
+ }
266
+ if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
267
+ cancellation_is_inherited_ = true;
268
+ }
269
+ return absl::OkStatus();
270
+ }
271
+
272
+ void Call::PublishToParent(Call* parent) {
273
+ ChildCall* cc = child_;
274
+ ParentCall* pc = parent->GetOrCreateParentCall();
275
+ MutexLock lock(&pc->child_list_mu);
276
+ if (pc->first_child == nullptr) {
277
+ pc->first_child = this;
278
+ cc->sibling_next = cc->sibling_prev = this;
279
+ } else {
280
+ cc->sibling_next = pc->first_child;
281
+ cc->sibling_prev = pc->first_child->child_->sibling_prev;
282
+ cc->sibling_next->child_->sibling_prev =
283
+ cc->sibling_prev->child_->sibling_next = this;
115
284
  }
116
- };
285
+ if (parent->Completed()) {
286
+ CancelWithError(absl::CancelledError());
287
+ }
288
+ }
117
289
 
118
- struct parent_call {
119
- parent_call() { gpr_mu_init(&child_list_mu); }
120
- ~parent_call() { gpr_mu_destroy(&child_list_mu); }
290
+ void Call::MaybeUnpublishFromParent() {
291
+ ChildCall* cc = child_;
292
+ if (cc == nullptr) return;
121
293
 
122
- gpr_mu child_list_mu;
123
- grpc_call* first_child = nullptr;
124
- };
294
+ ParentCall* pc = cc->parent->parent_call();
295
+ {
296
+ MutexLock lock(&pc->child_list_mu);
297
+ if (this == pc->first_child) {
298
+ pc->first_child = cc->sibling_next;
299
+ if (this == pc->first_child) {
300
+ pc->first_child = nullptr;
301
+ }
302
+ }
303
+ cc->sibling_prev->child_->sibling_next = cc->sibling_next;
304
+ cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
305
+ }
306
+ cc->parent->InternalUnref("child");
307
+ }
125
308
 
126
- struct child_call {
127
- child_call(grpc_call* parent) : parent(parent) {}
128
- grpc_call* parent;
129
- /** siblings: children of the same parent form a list, and this list is
130
- protected under
131
- parent->mu */
132
- grpc_call* sibling_next = nullptr;
133
- grpc_call* sibling_prev = nullptr;
134
- };
309
+ void Call::CancelWithStatus(grpc_status_code status, const char* description) {
310
+ // copying 'description' is needed to ensure the grpc_call_cancel_with_status
311
+ // guarantee that can be short-lived.
312
+ CancelWithError(grpc_error_set_int(
313
+ grpc_error_set_str(GRPC_ERROR_CREATE(description),
314
+ StatusStrProperty::kGrpcMessage, description),
315
+ StatusIntProperty::kRpcStatus, status));
316
+ }
317
+
318
+ void Call::PropagateCancellationToChildren() {
319
+ ParentCall* pc = parent_call();
320
+ if (pc != nullptr) {
321
+ Call* child;
322
+ MutexLock lock(&pc->child_list_mu);
323
+ child = pc->first_child;
324
+ if (child != nullptr) {
325
+ do {
326
+ Call* next_child_call = child->child_->sibling_next;
327
+ if (child->cancellation_is_inherited_) {
328
+ child->InternalRef("propagate_cancel");
329
+ child->CancelWithError(absl::CancelledError());
330
+ child->InternalUnref("propagate_cancel");
331
+ }
332
+ child = next_child_call;
333
+ } while (child != pc->first_child);
334
+ }
335
+ }
336
+ }
337
+
338
+ char* Call::GetPeer() {
339
+ char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
340
+ if (peer_string != nullptr) return gpr_strdup(peer_string);
341
+ peer_string = grpc_channel_get_target(channel_->c_ptr());
342
+ if (peer_string != nullptr) return peer_string;
343
+ return gpr_strdup("unknown");
344
+ }
135
345
 
136
- #define RECV_NONE ((gpr_atm)0)
137
- #define RECV_INITIAL_METADATA_FIRST ((gpr_atm)1)
138
-
139
- struct grpc_call {
140
- grpc_call(grpc_core::Arena* arena, const grpc_call_create_args& args)
141
- : arena(arena),
142
- cq(args.cq),
143
- channel(args.channel),
144
- is_client(args.server_transport_data == nullptr),
145
- stream_op_payload(context) {
146
- for (int i = 0; i < 2; i++) {
147
- for (int j = 0; j < 2; j++) {
148
- metadata_batch[i][j].deadline = GRPC_MILLIS_INF_FUTURE;
346
+ void Call::DeleteThis() {
347
+ RefCountedPtr<Channel> channel = std::move(channel_);
348
+ Arena* arena = arena_;
349
+ this->~Call();
350
+ channel->UpdateCallSizeEstimate(arena->Destroy());
351
+ }
352
+
353
+ ///////////////////////////////////////////////////////////////////////////////
354
+ // FilterStackCall
355
+ // To be removed once promise conversion is complete
356
+
357
+ class FilterStackCall final : public Call {
358
+ public:
359
+ ~FilterStackCall() override {
360
+ for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
361
+ if (context_[i].destroy) {
362
+ context_[i].destroy(context_[i].value);
149
363
  }
150
364
  }
365
+ gpr_free(static_cast<void*>(const_cast<char*>(final_info_.error_string)));
366
+ }
367
+
368
+ bool Completed() override {
369
+ return gpr_atm_acq_load(&received_final_op_atm_) != 0;
151
370
  }
152
371
 
153
- ~grpc_call() {
154
- gpr_free(static_cast<void*>(const_cast<char*>(final_info.error_string)));
155
- }
156
-
157
- grpc_core::RefCount ext_ref;
158
- grpc_core::Arena* arena;
159
- grpc_core::CallCombiner call_combiner;
160
- grpc_completion_queue* cq;
161
- grpc_polling_entity pollent;
162
- grpc_channel* channel;
163
- gpr_cycle_counter start_time = gpr_get_cycle_counter();
164
- /* parent_call* */ gpr_atm parent_call_atm = 0;
165
- child_call* child = nullptr;
166
-
167
- /* client or server call */
168
- bool is_client;
169
- /** has grpc_call_unref been called */
170
- bool destroy_called = false;
171
- /** flag indicating that cancellation is inherited */
172
- bool cancellation_is_inherited = false;
173
- /** which ops are in-flight */
174
- bool sent_initial_metadata = false;
175
- bool sending_message = false;
176
- bool sent_final_op = false;
177
- bool received_initial_metadata = false;
178
- bool receiving_message = false;
179
- bool requested_final_op = false;
180
- gpr_atm any_ops_sent_atm = 0;
181
- gpr_atm received_final_op_atm = 0;
182
-
183
- batch_control* active_batches[MAX_CONCURRENT_BATCHES] = {};
184
- grpc_transport_stream_op_batch_payload stream_op_payload;
185
-
186
- /* first idx: is_receiving, second idx: is_trailing */
187
- grpc_metadata_batch metadata_batch[2][2] = {};
188
-
189
- /* Buffered read metadata waiting to be returned to the application.
190
- Element 0 is initial metadata, element 1 is trailing metadata. */
191
- grpc_metadata_array* buffered_metadata[2] = {};
192
-
193
- grpc_metadata compression_md;
372
+ // TODO(ctiller): return absl::StatusOr<SomeSmartPointer<Call>>?
373
+ static grpc_error_handle Create(grpc_call_create_args* args,
374
+ grpc_call** out_call);
194
375
 
195
- // A char* indicating the peer name.
196
- gpr_atm peer_string = 0;
197
-
198
- /* Call data useful used for reporting. Only valid after the call has
199
- * completed */
200
- grpc_call_final_info final_info;
201
-
202
- /* Compression algorithm for *incoming* data */
203
- grpc_message_compression_algorithm incoming_message_compression_algorithm =
204
- GRPC_MESSAGE_COMPRESS_NONE;
205
- /* Stream compression algorithm for *incoming* data */
206
- grpc_stream_compression_algorithm incoming_stream_compression_algorithm =
207
- GRPC_STREAM_COMPRESS_NONE;
208
- /* Supported encodings (compression algorithms), a bitset.
209
- * Always support no compression. */
210
- uint32_t encodings_accepted_by_peer = 1 << GRPC_MESSAGE_COMPRESS_NONE;
211
- /* Supported stream encodings (stream compression algorithms), a bitset */
212
- uint32_t stream_encodings_accepted_by_peer = 0;
213
-
214
- /* Contexts for various subsystems (security, tracing, ...). */
215
- grpc_call_context_element context[GRPC_CONTEXT_COUNT] = {};
216
-
217
- /* for the client, extra metadata is initial metadata; for the
218
- server, it's trailing metadata */
219
- grpc_linked_mdelem send_extra_metadata[MAX_SEND_EXTRA_METADATA_COUNT];
220
- int send_extra_metadata_count;
221
- grpc_millis send_deadline;
222
-
223
- grpc_core::ManualConstructor<grpc_core::SliceBufferByteStream> sending_stream;
224
-
225
- grpc_core::OrphanablePtr<grpc_core::ByteStream> receiving_stream;
226
- grpc_byte_buffer** receiving_buffer = nullptr;
227
- grpc_slice receiving_slice = grpc_empty_slice();
228
- grpc_closure receiving_slice_ready;
229
- grpc_closure receiving_stream_ready;
230
- grpc_closure receiving_initial_metadata_ready;
231
- grpc_closure receiving_trailing_metadata_ready;
232
- uint32_t test_only_last_message_flags = 0;
376
+ static Call* FromTopElem(grpc_call_element* elem) {
377
+ return FromCallStack(grpc_call_stack_from_top_element(elem));
378
+ }
379
+
380
+ grpc_call_stack* call_stack() override {
381
+ return reinterpret_cast<grpc_call_stack*>(
382
+ reinterpret_cast<char*>(this) +
383
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(*this)));
384
+ }
385
+
386
+ grpc_call_element* call_elem(size_t idx) {
387
+ return grpc_call_stack_element(call_stack(), idx);
388
+ }
389
+
390
+ CallCombiner* call_combiner() { return &call_combiner_; }
391
+
392
+ void CancelWithError(grpc_error_handle error) override;
393
+ void SetCompletionQueue(grpc_completion_queue* cq) override;
394
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
395
+ bool is_notify_tag_closure) override;
396
+ void ExternalRef() override { ext_ref_.Ref(); }
397
+ void ExternalUnref() override;
398
+ void InternalRef(const char* reason) override {
399
+ GRPC_CALL_STACK_REF(call_stack(), reason);
400
+ }
401
+ void InternalUnref(const char* reason) override {
402
+ GRPC_CALL_STACK_UNREF(call_stack(), reason);
403
+ }
404
+
405
+ void ContextSet(grpc_context_index elem, void* value,
406
+ void (*destroy)(void* value)) override;
407
+ void* ContextGet(grpc_context_index elem) const override {
408
+ return context_[elem].value;
409
+ }
410
+
411
+ grpc_compression_algorithm compression_for_level(
412
+ grpc_compression_level level) override {
413
+ return encodings_accepted_by_peer_.CompressionAlgorithmForLevel(level);
414
+ }
415
+
416
+ bool is_trailers_only() const override {
417
+ bool result = is_trailers_only_;
418
+ GPR_DEBUG_ASSERT(!result || recv_initial_metadata_.TransportSize() == 0);
419
+ return result;
420
+ }
421
+
422
+ bool failed_before_recv_message() const override {
423
+ return call_failed_before_recv_message_;
424
+ }
425
+
426
+ absl::string_view GetServerAuthority() const override {
427
+ const Slice* authority_metadata =
428
+ recv_initial_metadata_.get_pointer(HttpAuthorityMetadata());
429
+ if (authority_metadata == nullptr) return "";
430
+ return authority_metadata->as_string_view();
431
+ }
432
+
433
+ grpc_compression_algorithm test_only_compression_algorithm() override {
434
+ return incoming_compression_algorithm_;
435
+ }
436
+
437
+ uint32_t test_only_message_flags() override {
438
+ return test_only_last_message_flags_;
439
+ }
440
+
441
+ uint32_t test_only_encodings_accepted_by_peer() override {
442
+ return encodings_accepted_by_peer_.ToLegacyBitmask();
443
+ }
444
+
445
+ static size_t InitialSizeEstimate() {
446
+ return sizeof(FilterStackCall) +
447
+ sizeof(BatchControl) * kMaxConcurrentBatches;
448
+ }
449
+
450
+ private:
451
+ static constexpr gpr_atm kRecvNone = 0;
452
+ static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
453
+
454
+ struct BatchControl {
455
+ FilterStackCall* call_ = nullptr;
456
+ grpc_transport_stream_op_batch op_;
457
+ // Share memory for cq_completion and notify_tag as they are never needed
458
+ // simultaneously. Each byte used in this data structure count as six bytes
459
+ // per call, so any savings we can make are worthwhile,
460
+
461
+ // We use notify_tag to determine whether or not to send notification to the
462
+ // completion queue. Once we've made that determination, we can reuse the
463
+ // memory for cq_completion.
464
+ union {
465
+ grpc_cq_completion cq_completion;
466
+ struct {
467
+ // Any given op indicates completion by either (a) calling a closure or
468
+ // (b) sending a notification on the call's completion queue. If
469
+ // \a is_closure is true, \a tag indicates a closure to be invoked;
470
+ // otherwise, \a tag indicates the tag to be used in the notification to
471
+ // be sent to the completion queue.
472
+ void* tag;
473
+ bool is_closure;
474
+ } notify_tag;
475
+ } completion_data_;
476
+ grpc_closure start_batch_;
477
+ grpc_closure finish_batch_;
478
+ std::atomic<intptr_t> steps_to_complete_{0};
479
+ AtomicError batch_error_;
480
+ void set_num_steps_to_complete(uintptr_t steps) {
481
+ steps_to_complete_.store(steps, std::memory_order_release);
482
+ }
483
+ bool completed_batch_step() {
484
+ return steps_to_complete_.fetch_sub(1, std::memory_order_acq_rel) == 1;
485
+ }
486
+
487
+ void PostCompletion();
488
+ void FinishStep();
489
+ void ProcessDataAfterMetadata();
490
+ void ReceivingStreamReady(grpc_error_handle error);
491
+ void ValidateFilteredMetadata();
492
+ void ReceivingInitialMetadataReady(grpc_error_handle error);
493
+ void ReceivingTrailingMetadataReady(grpc_error_handle error);
494
+ void FinishBatch(grpc_error_handle error);
495
+ };
496
+
497
+ FilterStackCall(Arena* arena, const grpc_call_create_args& args)
498
+ : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
499
+ args.channel->Ref()),
500
+ cq_(args.cq),
501
+ stream_op_payload_(context_) {}
502
+
503
+ static void ReleaseCall(void* call, grpc_error_handle);
504
+ static void DestroyCall(void* call, grpc_error_handle);
505
+
506
+ static FilterStackCall* FromCallStack(grpc_call_stack* call_stack) {
507
+ return reinterpret_cast<FilterStackCall*>(
508
+ reinterpret_cast<char*>(call_stack) -
509
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)));
510
+ }
511
+
512
+ void ExecuteBatch(grpc_transport_stream_op_batch* batch,
513
+ grpc_closure* start_batch_closure);
514
+ void SetFinalStatus(grpc_error_handle error);
515
+ BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
516
+ void HandleCompressionAlgorithmDisabled(
517
+ grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
518
+ void HandleCompressionAlgorithmNotAccepted(
519
+ grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
520
+ bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
521
+ bool is_trailing);
522
+ void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
523
+ void RecvInitialFilter(grpc_metadata_batch* b);
524
+ void RecvTrailingFilter(grpc_metadata_batch* b,
525
+ grpc_error_handle batch_error);
526
+
527
+ RefCount ext_ref_;
528
+ CallCombiner call_combiner_;
529
+ grpc_completion_queue* cq_;
530
+ grpc_polling_entity pollent_;
531
+ gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
532
+
533
+ /// has grpc_call_unref been called
534
+ bool destroy_called_ = false;
535
+ // Trailers-only response status
536
+ bool is_trailers_only_ = false;
537
+ /// which ops are in-flight
538
+ bool sent_initial_metadata_ = false;
539
+ bool sending_message_ = false;
540
+ bool sent_final_op_ = false;
541
+ bool received_initial_metadata_ = false;
542
+ bool receiving_message_ = false;
543
+ bool requested_final_op_ = false;
544
+ gpr_atm received_final_op_atm_ = 0;
545
+
546
+ BatchControl* active_batches_[kMaxConcurrentBatches] = {};
547
+ grpc_transport_stream_op_batch_payload stream_op_payload_;
548
+
549
+ // first idx: is_receiving, second idx: is_trailing
550
+ grpc_metadata_batch send_initial_metadata_{arena()};
551
+ grpc_metadata_batch send_trailing_metadata_{arena()};
552
+ grpc_metadata_batch recv_initial_metadata_{arena()};
553
+ grpc_metadata_batch recv_trailing_metadata_{arena()};
554
+
555
+ // Buffered read metadata waiting to be returned to the application.
556
+ // Element 0 is initial metadata, element 1 is trailing metadata.
557
+ grpc_metadata_array* buffered_metadata_[2] = {};
558
+
559
+ // Call data useful used for reporting. Only valid after the call has
560
+ // completed
561
+ grpc_call_final_info final_info_;
562
+
563
+ // Compression algorithm for *incoming* data
564
+ grpc_compression_algorithm incoming_compression_algorithm_ =
565
+ GRPC_COMPRESS_NONE;
566
+ // Supported encodings (compression algorithms), a bitset.
567
+ // Always support no compression.
568
+ CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
569
+
570
+ // Contexts for various subsystems (security, tracing, ...).
571
+ grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
572
+
573
+ SliceBuffer send_slice_buffer_;
574
+ absl::optional<SliceBuffer> receiving_slice_buffer_;
575
+ uint32_t receiving_stream_flags_;
576
+
577
+ bool call_failed_before_recv_message_ = false;
578
+ grpc_byte_buffer** receiving_buffer_ = nullptr;
579
+ grpc_slice receiving_slice_ = grpc_empty_slice();
580
+ grpc_closure receiving_stream_ready_;
581
+ grpc_closure receiving_initial_metadata_ready_;
582
+ grpc_closure receiving_trailing_metadata_ready_;
583
+ uint32_t test_only_last_message_flags_ = 0;
233
584
  // Status about operation of call
234
- bool sent_server_trailing_metadata = false;
235
- gpr_atm cancelled_with_error = 0;
585
+ bool sent_server_trailing_metadata_ = false;
586
+ gpr_atm cancelled_with_error_ = 0;
236
587
 
237
- grpc_closure release_call;
588
+ grpc_closure release_call_;
238
589
 
239
590
  union {
240
591
  struct {
@@ -245,877 +596,469 @@ struct grpc_call {
245
596
  struct {
246
597
  int* cancelled;
247
598
  // backpointer to owning server if this is a server side call.
248
- grpc_core::Server* core_server;
599
+ Server* core_server;
249
600
  } server;
250
- } final_op;
251
- gpr_atm status_error = 0;
252
-
253
- /* recv_state can contain one of the following values:
254
- RECV_NONE : : no initial metadata and messages received
255
- RECV_INITIAL_METADATA_FIRST : received initial metadata first
256
- a batch_control* : received messages first
257
-
258
- +------1------RECV_NONE------3-----+
259
- | |
260
- | |
261
- v v
262
- RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
263
- | ^ | ^
264
- | | | |
265
- +-----2-----+ +-----4-----+
266
-
267
- For 1, 4: See receiving_initial_metadata_ready() function
268
- For 2, 3: See receiving_stream_ready() function */
269
- gpr_atm recv_state = 0;
601
+ } final_op_;
602
+ AtomicError status_error_;
603
+
604
+ // recv_state can contain one of the following values:
605
+ // RECV_NONE : : no initial metadata and messages received
606
+ // RECV_INITIAL_METADATA_FIRST : received initial metadata first
607
+ // a batch_control* : received messages first
608
+
609
+ // +------1------RECV_NONE------3-----+
610
+ // | |
611
+ // | |
612
+ // v v
613
+ // RECV_INITIAL_METADATA_FIRST receiving_stream_ready_bctlp
614
+ // | ^ | ^
615
+ // | | | |
616
+ // +-----2-----+ +-----4-----+
617
+
618
+ // For 1, 4: See receiving_initial_metadata_ready() function
619
+ // For 2, 3: See receiving_stream_ready() function
620
+ gpr_atm recv_state_ = 0;
270
621
  };
271
622
 
272
- grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
273
- grpc_core::TraceFlag grpc_compression_trace(false, "compression");
274
-
275
- #define CALL_STACK_FROM_CALL(call) \
276
- (grpc_call_stack*)((char*)(call) + \
277
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)))
278
- #define CALL_FROM_CALL_STACK(call_stack) \
279
- (grpc_call*)(((char*)(call_stack)) - \
280
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)))
281
-
282
- #define CALL_ELEM_FROM_CALL(call, idx) \
283
- grpc_call_stack_element(CALL_STACK_FROM_CALL(call), idx)
284
- #define CALL_FROM_TOP_ELEM(top_elem) \
285
- CALL_FROM_CALL_STACK(grpc_call_stack_from_top_element(top_elem))
286
-
287
- static void execute_batch(grpc_call* call, grpc_transport_stream_op_batch* op,
288
- grpc_closure* start_batch_closure);
289
-
290
- static void cancel_with_status(grpc_call* c, grpc_status_code status,
291
- const char* description);
292
- static void cancel_with_error(grpc_call* c, grpc_error* error);
293
- static void destroy_call(void* call_stack, grpc_error* error);
294
- static void receiving_slice_ready(void* bctlp, grpc_error* error);
295
- static void set_final_status(grpc_call* call, grpc_error* error);
296
- static void process_data_after_md(batch_control* bctl);
297
- static void post_batch_completion(batch_control* bctl);
298
-
299
- static void add_init_error(grpc_error** composite, grpc_error* new_err) {
300
- if (new_err == GRPC_ERROR_NONE) return;
301
- if (*composite == GRPC_ERROR_NONE)
302
- *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
303
- *composite = grpc_error_add_child(*composite, new_err);
304
- }
305
-
306
- void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
307
- return call->arena->Alloc(size);
308
- }
623
+ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
624
+ grpc_call** out_call) {
625
+ Channel* channel = args->channel.get();
309
626
 
310
- static parent_call* get_or_create_parent_call(grpc_call* call) {
311
- parent_call* p = (parent_call*)gpr_atm_acq_load(&call->parent_call_atm);
312
- if (p == nullptr) {
313
- p = call->arena->New<parent_call>();
314
- if (!gpr_atm_rel_cas(&call->parent_call_atm, (gpr_atm) nullptr,
315
- (gpr_atm)p)) {
316
- p->~parent_call();
317
- p = (parent_call*)gpr_atm_acq_load(&call->parent_call_atm);
627
+ auto add_init_error = [](grpc_error_handle* composite,
628
+ grpc_error_handle new_err) {
629
+ if (new_err.ok()) return;
630
+ if (composite->ok()) {
631
+ *composite = GRPC_ERROR_CREATE("Call creation failed");
318
632
  }
319
- }
320
- return p;
321
- }
322
-
323
- static parent_call* get_parent_call(grpc_call* call) {
324
- return (parent_call*)gpr_atm_acq_load(&call->parent_call_atm);
325
- }
326
-
327
- size_t grpc_call_get_initial_size_estimate() {
328
- return sizeof(grpc_call) + sizeof(batch_control) * MAX_CONCURRENT_BATCHES +
329
- sizeof(grpc_linked_mdelem) * ESTIMATED_MDELEM_COUNT;
330
- }
331
-
332
- grpc_error* grpc_call_create(const grpc_call_create_args* args,
333
- grpc_call** out_call) {
334
- GPR_TIMER_SCOPE("grpc_call_create", 0);
335
-
336
- GRPC_CHANNEL_INTERNAL_REF(args->channel, "call");
337
-
338
- grpc_core::Arena* arena;
339
- grpc_call* call;
340
- grpc_error* error = GRPC_ERROR_NONE;
341
- grpc_channel_stack* channel_stack =
342
- grpc_channel_get_channel_stack(args->channel);
343
- size_t initial_size = grpc_channel_get_call_size_estimate(args->channel);
344
- GRPC_STATS_INC_CALL_INITIAL_SIZE(initial_size);
345
- size_t call_and_stack_size =
346
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)) +
347
- channel_stack->call_stack_size;
633
+ *composite = grpc_error_add_child(*composite, new_err);
634
+ };
635
+
636
+ Arena* arena;
637
+ FilterStackCall* call;
638
+ grpc_error_handle error;
639
+ grpc_channel_stack* channel_stack = channel->channel_stack();
640
+ size_t initial_size = channel->CallSizeEstimate();
641
+ global_stats().IncrementCallInitialSize(initial_size);
348
642
  size_t call_alloc_size =
349
- call_and_stack_size + (args->parent ? sizeof(child_call) : 0);
643
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
644
+ channel_stack->call_stack_size;
350
645
 
351
- std::pair<grpc_core::Arena*, void*> arena_with_call =
352
- grpc_core::Arena::CreateWithAlloc(initial_size, call_alloc_size);
646
+ std::pair<Arena*, void*> arena_with_call = Arena::CreateWithAlloc(
647
+ initial_size, call_alloc_size, channel->allocator());
353
648
  arena = arena_with_call.first;
354
- call = new (arena_with_call.second) grpc_call(arena, *args);
355
- *out_call = call;
649
+ call = new (arena_with_call.second) FilterStackCall(arena, *args);
650
+ GPR_DEBUG_ASSERT(FromC(call->c_ptr()) == call);
651
+ GPR_DEBUG_ASSERT(FromCallStack(call->call_stack()) == call);
652
+ *out_call = call->c_ptr();
356
653
  grpc_slice path = grpc_empty_slice();
357
- if (call->is_client) {
358
- call->final_op.client.status_details = nullptr;
359
- call->final_op.client.status = nullptr;
360
- call->final_op.client.error_string = nullptr;
361
- GRPC_STATS_INC_CLIENT_CALLS_CREATED();
362
- GPR_ASSERT(args->add_initial_metadata_count <
363
- MAX_SEND_EXTRA_METADATA_COUNT);
364
- for (size_t i = 0; i < args->add_initial_metadata_count; i++) {
365
- call->send_extra_metadata[i].md = args->add_initial_metadata[i];
366
- if (grpc_slice_eq_static_interned(
367
- GRPC_MDKEY(args->add_initial_metadata[i]), GRPC_MDSTR_PATH)) {
368
- path = grpc_slice_ref_internal(
369
- GRPC_MDVALUE(args->add_initial_metadata[i]));
370
- }
654
+ if (call->is_client()) {
655
+ call->final_op_.client.status_details = nullptr;
656
+ call->final_op_.client.status = nullptr;
657
+ call->final_op_.client.error_string = nullptr;
658
+ global_stats().IncrementClientCallsCreated();
659
+ path = CSliceRef(args->path->c_slice());
660
+ call->send_initial_metadata_.Set(HttpPathMetadata(),
661
+ std::move(*args->path));
662
+ if (args->authority.has_value()) {
663
+ call->send_initial_metadata_.Set(HttpAuthorityMetadata(),
664
+ std::move(*args->authority));
371
665
  }
372
- call->send_extra_metadata_count =
373
- static_cast<int>(args->add_initial_metadata_count);
374
666
  } else {
375
- GRPC_STATS_INC_SERVER_CALLS_CREATED();
376
- call->final_op.server.cancelled = nullptr;
377
- call->final_op.server.core_server = args->server;
378
- GPR_ASSERT(args->add_initial_metadata_count == 0);
379
- call->send_extra_metadata_count = 0;
380
- }
381
-
382
- grpc_millis send_deadline = args->send_deadline;
383
- bool immediately_cancel = false;
384
-
385
- if (args->parent != nullptr) {
386
- call->child = new (reinterpret_cast<char*>(arena_with_call.second) +
387
- call_and_stack_size) child_call(args->parent);
388
-
389
- GRPC_CALL_INTERNAL_REF(args->parent, "child");
390
- GPR_ASSERT(call->is_client);
391
- GPR_ASSERT(!args->parent->is_client);
392
-
393
- if (args->propagation_mask & GRPC_PROPAGATE_DEADLINE) {
394
- send_deadline = GPR_MIN(send_deadline, args->parent->send_deadline);
395
- }
396
- /* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
397
- * GRPC_PROPAGATE_STATS_CONTEXT */
398
- /* TODO(ctiller): This should change to use the appropriate census start_op
399
- * call. */
400
- if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
401
- if (0 == (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
402
- add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
403
- "Census tracing propagation requested "
404
- "without Census context propagation"));
405
- }
406
- grpc_call_context_set(call, GRPC_CONTEXT_TRACING,
407
- args->parent->context[GRPC_CONTEXT_TRACING].value,
408
- nullptr);
409
- } else if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
410
- add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
411
- "Census context propagation requested "
412
- "without Census tracing propagation"));
413
- }
414
- if (args->propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
415
- call->cancellation_is_inherited = 1;
416
- if (gpr_atm_acq_load(&args->parent->received_final_op_atm)) {
417
- immediately_cancel = true;
418
- }
419
- }
420
- }
421
- call->send_deadline = send_deadline;
422
- /* initial refcount dropped by grpc_call_unref */
423
- grpc_call_element_args call_args = {CALL_STACK_FROM_CALL(call),
424
- args->server_transport_data,
425
- call->context,
426
- path,
427
- call->start_time,
428
- send_deadline,
429
- call->arena,
430
- &call->call_combiner};
431
- add_init_error(&error, grpc_call_stack_init(channel_stack, 1, destroy_call,
667
+ global_stats().IncrementServerCallsCreated();
668
+ call->final_op_.server.cancelled = nullptr;
669
+ call->final_op_.server.core_server = args->server;
670
+ }
671
+
672
+ Call* parent = Call::FromC(args->parent);
673
+ if (parent != nullptr) {
674
+ add_init_error(&error, absl_status_to_grpc_error(call->InitParent(
675
+ parent, args->propagation_mask)));
676
+ }
677
+ // initial refcount dropped by grpc_call_unref
678
+ grpc_call_element_args call_args = {
679
+ call->call_stack(), args->server_transport_data,
680
+ call->context_, path,
681
+ call->start_time_, call->send_deadline(),
682
+ call->arena(), &call->call_combiner_};
683
+ add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
432
684
  call, &call_args));
433
685
  // Publish this call to parent only after the call stack has been initialized.
434
- if (args->parent != nullptr) {
435
- child_call* cc = call->child;
436
- parent_call* pc = get_or_create_parent_call(args->parent);
437
- gpr_mu_lock(&pc->child_list_mu);
438
- if (pc->first_child == nullptr) {
439
- pc->first_child = call;
440
- cc->sibling_next = cc->sibling_prev = call;
441
- } else {
442
- cc->sibling_next = pc->first_child;
443
- cc->sibling_prev = pc->first_child->child->sibling_prev;
444
- cc->sibling_next->child->sibling_prev =
445
- cc->sibling_prev->child->sibling_next = call;
446
- }
447
- gpr_mu_unlock(&pc->child_list_mu);
686
+ if (parent != nullptr) {
687
+ call->PublishToParent(parent);
448
688
  }
449
689
 
450
- if (error != GRPC_ERROR_NONE) {
451
- cancel_with_error(call, GRPC_ERROR_REF(error));
452
- }
453
- if (immediately_cancel) {
454
- cancel_with_error(call, GRPC_ERROR_CANCELLED);
690
+ if (!error.ok()) {
691
+ call->CancelWithError(error);
455
692
  }
456
693
  if (args->cq != nullptr) {
457
694
  GPR_ASSERT(args->pollset_set_alternative == nullptr &&
458
695
  "Only one of 'cq' and 'pollset_set_alternative' should be "
459
696
  "non-nullptr.");
460
697
  GRPC_CQ_INTERNAL_REF(args->cq, "bind");
461
- call->pollent =
698
+ call->pollent_ =
462
699
  grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq));
463
700
  }
464
701
  if (args->pollset_set_alternative != nullptr) {
465
- call->pollent = grpc_polling_entity_create_from_pollset_set(
702
+ call->pollent_ = grpc_polling_entity_create_from_pollset_set(
466
703
  args->pollset_set_alternative);
467
704
  }
468
- if (!grpc_polling_entity_is_empty(&call->pollent)) {
469
- grpc_call_stack_set_pollset_or_pollset_set(CALL_STACK_FROM_CALL(call),
470
- &call->pollent);
705
+ if (!grpc_polling_entity_is_empty(&call->pollent_)) {
706
+ grpc_call_stack_set_pollset_or_pollset_set(call->call_stack(),
707
+ &call->pollent_);
471
708
  }
472
709
 
473
- if (call->is_client) {
474
- grpc_core::channelz::ChannelNode* channelz_channel =
475
- grpc_channel_get_channelz_node(call->channel);
710
+ if (call->is_client()) {
711
+ channelz::ChannelNode* channelz_channel = channel->channelz_node();
476
712
  if (channelz_channel != nullptr) {
477
713
  channelz_channel->RecordCallStarted();
478
714
  }
479
- } else if (call->final_op.server.core_server != nullptr) {
480
- grpc_core::channelz::ServerNode* channelz_node =
481
- call->final_op.server.core_server->channelz_node();
715
+ } else if (call->final_op_.server.core_server != nullptr) {
716
+ channelz::ServerNode* channelz_node =
717
+ call->final_op_.server.core_server->channelz_node();
482
718
  if (channelz_node != nullptr) {
483
719
  channelz_node->RecordCallStarted();
484
720
  }
485
721
  }
486
722
 
487
- grpc_slice_unref_internal(path);
723
+ CSliceUnref(path);
488
724
 
489
725
  return error;
490
726
  }
491
727
 
492
- void grpc_call_set_completion_queue(grpc_call* call,
493
- grpc_completion_queue* cq) {
728
+ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
494
729
  GPR_ASSERT(cq);
495
730
 
496
- if (grpc_polling_entity_pollset_set(&call->pollent) != nullptr) {
497
- gpr_log(GPR_ERROR, "A pollset_set is already registered for this call.");
498
- abort();
731
+ if (grpc_polling_entity_pollset_set(&pollent_) != nullptr) {
732
+ Crash("A pollset_set is already registered for this call.");
499
733
  }
500
- call->cq = cq;
734
+ cq_ = cq;
501
735
  GRPC_CQ_INTERNAL_REF(cq, "bind");
502
- call->pollent = grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
503
- grpc_call_stack_set_pollset_or_pollset_set(CALL_STACK_FROM_CALL(call),
504
- &call->pollent);
505
- }
506
-
507
- #ifndef NDEBUG
508
- #define REF_REASON reason
509
- #define REF_ARG , const char* reason
510
- #else
511
- #define REF_REASON ""
512
- #define REF_ARG
513
- #endif
514
- void grpc_call_internal_ref(grpc_call* c REF_ARG) {
515
- GRPC_CALL_STACK_REF(CALL_STACK_FROM_CALL(c), REF_REASON);
516
- }
517
- void grpc_call_internal_unref(grpc_call* c REF_ARG) {
518
- GRPC_CALL_STACK_UNREF(CALL_STACK_FROM_CALL(c), REF_REASON);
736
+ pollent_ = grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
737
+ grpc_call_stack_set_pollset_or_pollset_set(call_stack(), &pollent_);
519
738
  }
520
739
 
521
- static void release_call(void* call, grpc_error* /*error*/) {
522
- grpc_call* c = static_cast<grpc_call*>(call);
523
- grpc_channel* channel = c->channel;
524
- grpc_core::Arena* arena = c->arena;
525
- c->~grpc_call();
526
- grpc_channel_update_call_size_estimate(channel, arena->Destroy());
527
- GRPC_CHANNEL_INTERNAL_UNREF(channel, "call");
740
+ void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
741
+ static_cast<FilterStackCall*>(call)->DeleteThis();
528
742
  }
529
743
 
530
- static void destroy_call(void* call, grpc_error* /*error*/) {
531
- GPR_TIMER_SCOPE("destroy_call", 0);
532
- size_t i;
533
- int ii;
534
- grpc_call* c = static_cast<grpc_call*>(call);
535
- for (i = 0; i < 2; i++) {
536
- grpc_metadata_batch_destroy(
537
- &c->metadata_batch[1 /* is_receiving */][i /* is_initial */]);
538
- }
539
- c->receiving_stream.reset();
540
- parent_call* pc = get_parent_call(c);
744
+ void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
745
+ auto* c = static_cast<FilterStackCall*>(call);
746
+ c->recv_initial_metadata_.Clear();
747
+ c->recv_trailing_metadata_.Clear();
748
+ c->receiving_slice_buffer_.reset();
749
+ ParentCall* pc = c->parent_call();
541
750
  if (pc != nullptr) {
542
- pc->~parent_call();
543
- }
544
- for (ii = 0; ii < c->send_extra_metadata_count; ii++) {
545
- GRPC_MDELEM_UNREF(c->send_extra_metadata[ii].md);
751
+ pc->~ParentCall();
546
752
  }
547
- for (i = 0; i < GRPC_CONTEXT_COUNT; i++) {
548
- if (c->context[i].destroy) {
549
- c->context[i].destroy(c->context[i].value);
550
- }
551
- }
552
- if (c->cq) {
553
- GRPC_CQ_INTERNAL_UNREF(c->cq, "bind");
753
+ if (c->cq_) {
754
+ GRPC_CQ_INTERNAL_UNREF(c->cq_, "bind");
554
755
  }
555
756
 
556
- grpc_error* status_error =
557
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&c->status_error));
558
- grpc_error_get_status(status_error, c->send_deadline,
559
- &c->final_info.final_status, nullptr, nullptr,
560
- &(c->final_info.error_string));
561
- GRPC_ERROR_UNREF(status_error);
562
- c->final_info.stats.latency =
563
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time);
564
- grpc_call_stack_destroy(CALL_STACK_FROM_CALL(c), &c->final_info,
565
- GRPC_CLOSURE_INIT(&c->release_call, release_call, c,
757
+ grpc_error_handle status_error = c->status_error_.get();
758
+ grpc_error_get_status(status_error, c->send_deadline(),
759
+ &c->final_info_.final_status, nullptr, nullptr,
760
+ &(c->final_info_.error_string));
761
+ c->status_error_.set(absl::OkStatus());
762
+ c->final_info_.stats.latency =
763
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time_);
764
+ grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
765
+ GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
566
766
  grpc_schedule_on_exec_ctx));
567
767
  }
568
768
 
569
- void grpc_call_ref(grpc_call* c) { c->ext_ref.Ref(); }
570
-
571
- void grpc_call_unref(grpc_call* c) {
572
- if (GPR_LIKELY(!c->ext_ref.Unref())) return;
573
-
574
- GPR_TIMER_SCOPE("grpc_call_unref", 0);
769
+ void FilterStackCall::ExternalUnref() {
770
+ if (GPR_LIKELY(!ext_ref_.Unref())) return;
575
771
 
576
- child_call* cc = c->child;
577
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
578
- grpc_core::ExecCtx exec_ctx;
772
+ ApplicationCallbackExecCtx callback_exec_ctx;
773
+ ExecCtx exec_ctx;
579
774
 
580
- GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (c));
775
+ GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (this));
581
776
 
582
- if (cc) {
583
- parent_call* pc = get_parent_call(cc->parent);
584
- gpr_mu_lock(&pc->child_list_mu);
585
- if (c == pc->first_child) {
586
- pc->first_child = cc->sibling_next;
587
- if (c == pc->first_child) {
588
- pc->first_child = nullptr;
589
- }
590
- }
591
- cc->sibling_prev->child->sibling_next = cc->sibling_next;
592
- cc->sibling_next->child->sibling_prev = cc->sibling_prev;
593
- gpr_mu_unlock(&pc->child_list_mu);
594
- GRPC_CALL_INTERNAL_UNREF(cc->parent, "child");
595
- }
777
+ MaybeUnpublishFromParent();
596
778
 
597
- GPR_ASSERT(!c->destroy_called);
598
- c->destroy_called = 1;
599
- bool cancel = gpr_atm_acq_load(&c->any_ops_sent_atm) != 0 &&
600
- gpr_atm_acq_load(&c->received_final_op_atm) == 0;
779
+ GPR_ASSERT(!destroy_called_);
780
+ destroy_called_ = true;
781
+ bool cancel = gpr_atm_acq_load(&received_final_op_atm_) == 0;
601
782
  if (cancel) {
602
- cancel_with_error(c, GRPC_ERROR_CANCELLED);
783
+ CancelWithError(absl::CancelledError());
603
784
  } else {
604
785
  // Unset the call combiner cancellation closure. This has the
605
786
  // effect of scheduling the previously set cancellation closure, if
606
787
  // any, so that it can release any internal references it may be
607
- // holding to the call stack. Also flush the closures on exec_ctx so that
608
- // filters that schedule cancel notification closures on exec_ctx do not
609
- // need to take a ref of the call stack to guarantee closure liveness.
610
- c->call_combiner.SetNotifyOnCancel(nullptr);
611
- grpc_core::ExecCtx::Get()->Flush();
788
+ // holding to the call stack.
789
+ call_combiner_.SetNotifyOnCancel(nullptr);
612
790
  }
613
- GRPC_CALL_INTERNAL_UNREF(c, "destroy");
614
- }
615
-
616
- grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
617
- GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
618
- GPR_ASSERT(!reserved);
619
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
620
- grpc_core::ExecCtx exec_ctx;
621
- cancel_with_error(call, GRPC_ERROR_CANCELLED);
622
- return GRPC_CALL_OK;
623
- }
624
-
625
- // This is called via the call combiner to start sending a batch down
626
- // the filter stack.
627
- static void execute_batch_in_call_combiner(void* arg, grpc_error* /*ignored*/) {
628
- GPR_TIMER_SCOPE("execute_batch_in_call_combiner", 0);
629
- grpc_transport_stream_op_batch* batch =
630
- static_cast<grpc_transport_stream_op_batch*>(arg);
631
- grpc_call* call = static_cast<grpc_call*>(batch->handler_private.extra_arg);
632
- grpc_call_element* elem = CALL_ELEM_FROM_CALL(call, 0);
633
- GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
634
- elem->filter->start_transport_stream_op_batch(elem, batch);
791
+ InternalUnref("destroy");
635
792
  }
636
793
 
637
794
  // start_batch_closure points to a caller-allocated closure to be used
638
795
  // for entering the call combiner.
639
- static void execute_batch(grpc_call* call,
640
- grpc_transport_stream_op_batch* batch,
641
- grpc_closure* start_batch_closure) {
642
- batch->handler_private.extra_arg = call;
796
+ void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
797
+ grpc_closure* start_batch_closure) {
798
+ // This is called via the call combiner to start sending a batch down
799
+ // the filter stack.
800
+ auto execute_batch_in_call_combiner = [](void* arg, grpc_error_handle) {
801
+ grpc_transport_stream_op_batch* batch =
802
+ static_cast<grpc_transport_stream_op_batch*>(arg);
803
+ auto* call =
804
+ static_cast<FilterStackCall*>(batch->handler_private.extra_arg);
805
+ grpc_call_element* elem = call->call_elem(0);
806
+ GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
807
+ elem->filter->start_transport_stream_op_batch(elem, batch);
808
+ };
809
+ batch->handler_private.extra_arg = this;
643
810
  GRPC_CLOSURE_INIT(start_batch_closure, execute_batch_in_call_combiner, batch,
644
811
  grpc_schedule_on_exec_ctx);
645
- GRPC_CALL_COMBINER_START(&call->call_combiner, start_batch_closure,
646
- GRPC_ERROR_NONE, "executing batch");
647
- }
648
-
649
- char* grpc_call_get_peer(grpc_call* call) {
650
- char* peer_string = (char*)gpr_atm_acq_load(&call->peer_string);
651
- if (peer_string != nullptr) return gpr_strdup(peer_string);
652
- peer_string = grpc_channel_get_target(call->channel);
653
- if (peer_string != nullptr) return peer_string;
654
- return gpr_strdup("unknown");
655
- }
656
-
657
- grpc_call* grpc_call_from_top_element(grpc_call_element* elem) {
658
- return CALL_FROM_TOP_ELEM(elem);
659
- }
660
-
661
- /*******************************************************************************
662
- * CANCELLATION
663
- */
664
-
665
- grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
666
- grpc_status_code status,
667
- const char* description,
668
- void* reserved) {
669
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
670
- grpc_core::ExecCtx exec_ctx;
671
- GRPC_API_TRACE(
672
- "grpc_call_cancel_with_status("
673
- "c=%p, status=%d, description=%s, reserved=%p)",
674
- 4, (c, (int)status, description, reserved));
675
- GPR_ASSERT(reserved == nullptr);
676
- cancel_with_status(c, status, description);
677
- return GRPC_CALL_OK;
812
+ GRPC_CALL_COMBINER_START(call_combiner(), start_batch_closure,
813
+ absl::OkStatus(), "executing batch");
678
814
  }
679
815
 
680
- struct cancel_state {
681
- grpc_call* call;
816
+ namespace {
817
+ struct CancelState {
818
+ FilterStackCall* call;
682
819
  grpc_closure start_batch;
683
820
  grpc_closure finish_batch;
684
821
  };
822
+ } // namespace
823
+
685
824
  // The on_complete callback used when sending a cancel_stream batch down
686
825
  // the filter stack. Yields the call combiner when the batch is done.
687
- static void done_termination(void* arg, grpc_error* /*error*/) {
688
- cancel_state* state = static_cast<cancel_state*>(arg);
689
- GRPC_CALL_COMBINER_STOP(&state->call->call_combiner,
826
+ static void done_termination(void* arg, grpc_error_handle /*error*/) {
827
+ CancelState* state = static_cast<CancelState*>(arg);
828
+ GRPC_CALL_COMBINER_STOP(state->call->call_combiner(),
690
829
  "on_complete for cancel_stream op");
691
- GRPC_CALL_INTERNAL_UNREF(state->call, "termination");
692
- gpr_free(state);
830
+ state->call->InternalUnref("termination");
831
+ delete state;
693
832
  }
694
833
 
695
- static void cancel_with_error(grpc_call* c, grpc_error* error) {
696
- if (!gpr_atm_rel_cas(&c->cancelled_with_error, 0, 1)) {
697
- GRPC_ERROR_UNREF(error);
834
+ void FilterStackCall::CancelWithError(grpc_error_handle error) {
835
+ if (!gpr_atm_rel_cas(&cancelled_with_error_, 0, 1)) {
698
836
  return;
699
837
  }
700
- GRPC_CALL_INTERNAL_REF(c, "termination");
838
+ ClearPeerString();
839
+ InternalRef("termination");
701
840
  // Inform the call combiner of the cancellation, so that it can cancel
702
841
  // any in-flight asynchronous actions that may be holding the call
703
842
  // combiner. This ensures that the cancel_stream batch can be sent
704
843
  // down the filter stack in a timely manner.
705
- c->call_combiner.Cancel(GRPC_ERROR_REF(error));
706
- cancel_state* state = static_cast<cancel_state*>(gpr_malloc(sizeof(*state)));
707
- state->call = c;
844
+ call_combiner_.Cancel(error);
845
+ CancelState* state = new CancelState;
846
+ state->call = this;
708
847
  GRPC_CLOSURE_INIT(&state->finish_batch, done_termination, state,
709
848
  grpc_schedule_on_exec_ctx);
710
849
  grpc_transport_stream_op_batch* op =
711
850
  grpc_make_transport_stream_op(&state->finish_batch);
712
851
  op->cancel_stream = true;
713
852
  op->payload->cancel_stream.cancel_error = error;
714
- execute_batch(c, op, &state->start_batch);
715
- }
716
-
717
- void grpc_call_cancel_internal(grpc_call* call) {
718
- cancel_with_error(call, GRPC_ERROR_CANCELLED);
853
+ ExecuteBatch(op, &state->start_batch);
719
854
  }
720
855
 
721
- static grpc_error* error_from_status(grpc_status_code status,
722
- const char* description) {
723
- // copying 'description' is needed to ensure the grpc_call_cancel_with_status
724
- // guarantee that can be short-lived.
725
- return grpc_error_set_int(
726
- grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description),
727
- GRPC_ERROR_STR_GRPC_MESSAGE,
728
- grpc_slice_from_copied_string(description)),
729
- GRPC_ERROR_INT_GRPC_STATUS, status);
730
- }
731
-
732
- static void cancel_with_status(grpc_call* c, grpc_status_code status,
733
- const char* description) {
734
- cancel_with_error(c, error_from_status(status, description));
735
- }
736
-
737
- static void set_final_status(grpc_call* call, grpc_error* error) {
856
+ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
738
857
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
739
- gpr_log(GPR_DEBUG, "set_final_status %s", call->is_client ? "CLI" : "SVR");
740
- gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
741
- }
742
- if (call->is_client) {
743
- grpc_error_get_status(error, call->send_deadline,
744
- call->final_op.client.status,
745
- call->final_op.client.status_details, nullptr,
746
- call->final_op.client.error_string);
747
- // explicitly take a ref
748
- grpc_slice_ref_internal(*call->final_op.client.status_details);
749
- gpr_atm_rel_store(&call->status_error, reinterpret_cast<gpr_atm>(error));
750
- grpc_core::channelz::ChannelNode* channelz_channel =
751
- grpc_channel_get_channelz_node(call->channel);
858
+ gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR");
859
+ gpr_log(GPR_DEBUG, "%s", StatusToString(error).c_str());
860
+ }
861
+ if (is_client()) {
862
+ std::string status_details;
863
+ grpc_error_get_status(error, send_deadline(), final_op_.client.status,
864
+ &status_details, nullptr,
865
+ final_op_.client.error_string);
866
+ *final_op_.client.status_details =
867
+ grpc_slice_from_cpp_string(std::move(status_details));
868
+ status_error_.set(error);
869
+ channelz::ChannelNode* channelz_channel = channel()->channelz_node();
752
870
  if (channelz_channel != nullptr) {
753
- if (*call->final_op.client.status != GRPC_STATUS_OK) {
871
+ if (*final_op_.client.status != GRPC_STATUS_OK) {
754
872
  channelz_channel->RecordCallFailed();
755
873
  } else {
756
874
  channelz_channel->RecordCallSucceeded();
757
875
  }
758
876
  }
759
877
  } else {
760
- *call->final_op.server.cancelled =
761
- error != GRPC_ERROR_NONE || !call->sent_server_trailing_metadata;
762
- grpc_core::channelz::ServerNode* channelz_node =
763
- call->final_op.server.core_server->channelz_node();
878
+ *final_op_.server.cancelled =
879
+ !error.ok() || !sent_server_trailing_metadata_;
880
+ channelz::ServerNode* channelz_node =
881
+ final_op_.server.core_server->channelz_node();
764
882
  if (channelz_node != nullptr) {
765
- if (*call->final_op.server.cancelled ||
766
- reinterpret_cast<grpc_error*>(
767
- gpr_atm_acq_load(&call->status_error)) != GRPC_ERROR_NONE) {
883
+ if (*final_op_.server.cancelled || !status_error_.ok()) {
768
884
  channelz_node->RecordCallFailed();
769
885
  } else {
770
886
  channelz_node->RecordCallSucceeded();
771
887
  }
772
888
  }
773
- GRPC_ERROR_UNREF(error);
774
889
  }
775
890
  }
776
891
 
777
- /*******************************************************************************
778
- * COMPRESSION
779
- */
892
+ bool FilterStackCall::PrepareApplicationMetadata(size_t count,
893
+ grpc_metadata* metadata,
894
+ bool is_trailing) {
895
+ grpc_metadata_batch* batch =
896
+ is_trailing ? &send_trailing_metadata_ : &send_initial_metadata_;
897
+ for (size_t i = 0; i < count; i++) {
898
+ grpc_metadata* md = &metadata[i];
899
+ if (!GRPC_LOG_IF_ERROR("validate_metadata",
900
+ grpc_validate_header_key_is_legal(md->key))) {
901
+ return false;
902
+ } else if (!grpc_is_binary_header_internal(md->key) &&
903
+ !GRPC_LOG_IF_ERROR(
904
+ "validate_metadata",
905
+ grpc_validate_header_nonbin_value_is_legal(md->value))) {
906
+ return false;
907
+ } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
908
+ // HTTP2 hpack encoding has a maximum limit.
909
+ return false;
910
+ } else if (grpc_slice_str_cmp(md->key, "content-length") == 0) {
911
+ // Filter "content-length metadata"
912
+ continue;
913
+ }
914
+ batch->Append(StringViewFromSlice(md->key), Slice(CSliceRef(md->value)),
915
+ [md](absl::string_view error, const Slice& value) {
916
+ gpr_log(GPR_DEBUG, "Append error: %s",
917
+ absl::StrCat("key=", StringViewFromSlice(md->key),
918
+ " error=", error,
919
+ " value=", value.as_string_view())
920
+ .c_str());
921
+ });
922
+ }
780
923
 
781
- static void set_incoming_message_compression_algorithm(
782
- grpc_call* call, grpc_message_compression_algorithm algo) {
783
- GPR_ASSERT(algo < GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT);
784
- call->incoming_message_compression_algorithm = algo;
924
+ return true;
785
925
  }
786
926
 
787
- static void set_incoming_stream_compression_algorithm(
788
- grpc_call* call, grpc_stream_compression_algorithm algo) {
789
- GPR_ASSERT(algo < GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT);
790
- call->incoming_stream_compression_algorithm = algo;
791
- }
927
+ namespace {
928
+ class PublishToAppEncoder {
929
+ public:
930
+ explicit PublishToAppEncoder(grpc_metadata_array* dest) : dest_(dest) {}
792
931
 
793
- grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
794
- grpc_call* call) {
795
- grpc_compression_algorithm algorithm = GRPC_COMPRESS_NONE;
796
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
797
- &algorithm, call->incoming_message_compression_algorithm,
798
- call->incoming_stream_compression_algorithm);
799
- return algorithm;
800
- }
932
+ void Encode(const Slice& key, const Slice& value) {
933
+ Append(key.c_slice(), value.c_slice());
934
+ }
801
935
 
802
- static grpc_compression_algorithm compression_algorithm_for_level_locked(
803
- grpc_call* call, grpc_compression_level level) {
804
- return grpc_compression_algorithm_for_level(level,
805
- call->encodings_accepted_by_peer);
806
- }
936
+ // Catch anything that is not explicitly handled, and do not publish it to the
937
+ // application. If new metadata is added to a batch that needs to be
938
+ // published, it should be called out here.
939
+ template <typename Which>
940
+ void Encode(Which, const typename Which::ValueType&) {}
807
941
 
808
- uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
809
- uint32_t flags;
810
- flags = call->test_only_last_message_flags;
811
- return flags;
812
- }
942
+ void Encode(UserAgentMetadata, const Slice& slice) {
943
+ Append(UserAgentMetadata::key(), slice);
944
+ }
945
+
946
+ void Encode(HostMetadata, const Slice& slice) {
947
+ Append(HostMetadata::key(), slice);
948
+ }
813
949
 
814
- static void destroy_encodings_accepted_by_peer(void* /*p*/) { return; }
950
+ void Encode(GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
951
+ Append(GrpcPreviousRpcAttemptsMetadata::key(), count);
952
+ }
815
953
 
816
- static void set_encodings_accepted_by_peer(grpc_call* /*call*/,
817
- grpc_mdelem mdel,
818
- uint32_t* encodings_accepted_by_peer,
819
- bool stream_encoding) {
820
- size_t i;
821
- uint32_t algorithm;
822
- grpc_slice_buffer accept_encoding_parts;
823
- grpc_slice accept_encoding_slice;
824
- void* accepted_user_data;
825
-
826
- accepted_user_data =
827
- grpc_mdelem_get_user_data(mdel, destroy_encodings_accepted_by_peer);
828
- if (accepted_user_data != nullptr) {
829
- *encodings_accepted_by_peer =
830
- static_cast<uint32_t>(((uintptr_t)accepted_user_data) - 1);
831
- return;
954
+ void Encode(GrpcRetryPushbackMsMetadata, Duration count) {
955
+ Append(GrpcRetryPushbackMsMetadata::key(), count.millis());
832
956
  }
833
957
 
834
- *encodings_accepted_by_peer = 0;
958
+ void Encode(LbTokenMetadata, const Slice& slice) {
959
+ Append(LbTokenMetadata::key(), slice);
960
+ }
835
961
 
836
- accept_encoding_slice = GRPC_MDVALUE(mdel);
837
- grpc_slice_buffer_init(&accept_encoding_parts);
838
- grpc_slice_split_without_space(accept_encoding_slice, ",",
839
- &accept_encoding_parts);
962
+ private:
963
+ void Append(absl::string_view key, int64_t value) {
964
+ Append(StaticSlice::FromStaticString(key).c_slice(),
965
+ Slice::FromInt64(value).c_slice());
966
+ }
840
967
 
841
- GPR_BITSET(encodings_accepted_by_peer, GRPC_COMPRESS_NONE);
842
- for (i = 0; i < accept_encoding_parts.count; i++) {
843
- int r;
844
- grpc_slice accept_encoding_entry_slice = accept_encoding_parts.slices[i];
845
- if (!stream_encoding) {
846
- r = grpc_message_compression_algorithm_parse(
847
- accept_encoding_entry_slice,
848
- reinterpret_cast<grpc_message_compression_algorithm*>(&algorithm));
849
- } else {
850
- r = grpc_stream_compression_algorithm_parse(
851
- accept_encoding_entry_slice,
852
- reinterpret_cast<grpc_stream_compression_algorithm*>(&algorithm));
853
- }
854
- if (r) {
855
- GPR_BITSET(encodings_accepted_by_peer, algorithm);
856
- } else {
857
- char* accept_encoding_entry_str =
858
- grpc_slice_to_c_string(accept_encoding_entry_slice);
859
- gpr_log(GPR_DEBUG,
860
- "Unknown entry in accept encoding metadata: '%s'. Ignoring.",
861
- accept_encoding_entry_str);
862
- gpr_free(accept_encoding_entry_str);
863
- }
968
+ void Append(absl::string_view key, const Slice& value) {
969
+ Append(StaticSlice::FromStaticString(key).c_slice(), value.c_slice());
970
+ }
971
+
972
+ void Append(grpc_slice key, grpc_slice value) {
973
+ auto* mdusr = &dest_->metadata[dest_->count++];
974
+ mdusr->key = key;
975
+ mdusr->value = value;
864
976
  }
865
977
 
866
- grpc_slice_buffer_destroy_internal(&accept_encoding_parts);
978
+ grpc_metadata_array* const dest_;
979
+ };
980
+ } // namespace
867
981
 
868
- grpc_mdelem_set_user_data(
869
- mdel, destroy_encodings_accepted_by_peer,
870
- (void*)((static_cast<uintptr_t>(*encodings_accepted_by_peer)) + 1));
982
+ void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
983
+ bool is_trailing) {
984
+ if (b->count() == 0) return;
985
+ if (!is_client() && is_trailing) return;
986
+ if (is_trailing && buffered_metadata_[1] == nullptr) return;
987
+ grpc_metadata_array* dest;
988
+ dest = buffered_metadata_[is_trailing];
989
+ if (dest->count + b->count() > dest->capacity) {
990
+ dest->capacity =
991
+ std::max(dest->capacity + b->count(), dest->capacity * 3 / 2);
992
+ dest->metadata = static_cast<grpc_metadata*>(
993
+ gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity));
994
+ }
995
+ PublishToAppEncoder encoder(dest);
996
+ b->Encode(&encoder);
871
997
  }
872
998
 
873
- uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
874
- uint32_t encodings_accepted_by_peer;
875
- encodings_accepted_by_peer = call->encodings_accepted_by_peer;
876
- return encodings_accepted_by_peer;
999
+ void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
1000
+ incoming_compression_algorithm_ =
1001
+ b->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
1002
+ encodings_accepted_by_peer_ =
1003
+ b->Take(GrpcAcceptEncodingMetadata())
1004
+ .value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
1005
+ PublishAppMetadata(b, false);
877
1006
  }
878
1007
 
879
- grpc_stream_compression_algorithm
880
- grpc_call_test_only_get_incoming_stream_encodings(grpc_call* call) {
881
- return call->incoming_stream_compression_algorithm;
1008
+ void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
1009
+ grpc_error_handle batch_error) {
1010
+ if (!batch_error.ok()) {
1011
+ SetFinalStatus(batch_error);
1012
+ } else {
1013
+ absl::optional<grpc_status_code> grpc_status =
1014
+ b->Take(GrpcStatusMetadata());
1015
+ if (grpc_status.has_value()) {
1016
+ grpc_status_code status_code = *grpc_status;
1017
+ grpc_error_handle error;
1018
+ if (status_code != GRPC_STATUS_OK) {
1019
+ char* peer = GetPeer();
1020
+ error = grpc_error_set_int(
1021
+ GRPC_ERROR_CREATE(absl::StrCat("Error received from peer ", peer)),
1022
+ StatusIntProperty::kRpcStatus, static_cast<intptr_t>(status_code));
1023
+ gpr_free(peer);
1024
+ }
1025
+ auto grpc_message = b->Take(GrpcMessageMetadata());
1026
+ if (grpc_message.has_value()) {
1027
+ error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage,
1028
+ grpc_message->as_string_view());
1029
+ } else if (!error.ok()) {
1030
+ error = grpc_error_set_str(error, StatusStrProperty::kGrpcMessage, "");
1031
+ }
1032
+ SetFinalStatus(error);
1033
+ } else if (!is_client()) {
1034
+ SetFinalStatus(absl::OkStatus());
1035
+ } else {
1036
+ gpr_log(GPR_DEBUG,
1037
+ "Received trailing metadata with no error and no status");
1038
+ SetFinalStatus(grpc_error_set_int(GRPC_ERROR_CREATE("No status received"),
1039
+ StatusIntProperty::kRpcStatus,
1040
+ GRPC_STATUS_UNKNOWN));
1041
+ }
1042
+ }
1043
+ PublishAppMetadata(b, true);
882
1044
  }
883
1045
 
884
- static grpc_linked_mdelem* linked_from_md(const grpc_metadata* md) {
885
- return (grpc_linked_mdelem*)&md->internal_data;
1046
+ namespace {
1047
+ bool AreWriteFlagsValid(uint32_t flags) {
1048
+ // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
1049
+ const uint32_t allowed_write_positions =
1050
+ (GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
1051
+ const uint32_t invalid_positions = ~allowed_write_positions;
1052
+ return !(flags & invalid_positions);
886
1053
  }
887
1054
 
888
- static grpc_metadata* get_md_elem(grpc_metadata* metadata,
889
- grpc_metadata* additional_metadata, int i,
890
- int count) {
891
- grpc_metadata* res =
892
- i < count ? &metadata[i] : &additional_metadata[i - count];
893
- GPR_ASSERT(res);
894
- return res;
1055
+ bool AreInitialMetadataFlagsValid(uint32_t flags) {
1056
+ // check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set
1057
+ uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
1058
+ return !(flags & invalid_positions);
895
1059
  }
896
1060
 
897
- static int prepare_application_metadata(grpc_call* call, int count,
898
- grpc_metadata* metadata,
899
- int is_trailing,
900
- int prepend_extra_metadata,
901
- grpc_metadata* additional_metadata,
902
- int additional_metadata_count) {
903
- int total_count = count + additional_metadata_count;
904
- int i;
905
- grpc_metadata_batch* batch =
906
- &call->metadata_batch[0 /* is_receiving */][is_trailing];
907
- for (i = 0; i < total_count; i++) {
908
- const grpc_metadata* md =
909
- get_md_elem(metadata, additional_metadata, i, count);
910
- grpc_linked_mdelem* l = linked_from_md(md);
911
- GPR_ASSERT(sizeof(grpc_linked_mdelem) == sizeof(md->internal_data));
912
- if (!GRPC_LOG_IF_ERROR("validate_metadata",
913
- grpc_validate_header_key_is_legal(md->key))) {
914
- break;
915
- } else if (!grpc_is_binary_header_internal(md->key) &&
916
- !GRPC_LOG_IF_ERROR(
917
- "validate_metadata",
918
- grpc_validate_header_nonbin_value_is_legal(md->value))) {
919
- break;
920
- } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
921
- // HTTP2 hpack encoding has a maximum limit.
922
- break;
923
- }
924
- l->md = grpc_mdelem_from_grpc_metadata(const_cast<grpc_metadata*>(md));
925
- }
926
- if (i != total_count) {
927
- for (int j = 0; j < i; j++) {
928
- const grpc_metadata* md =
929
- get_md_elem(metadata, additional_metadata, j, count);
930
- grpc_linked_mdelem* l = linked_from_md(md);
931
- GRPC_MDELEM_UNREF(l->md);
932
- }
933
- return 0;
934
- }
935
- if (prepend_extra_metadata) {
936
- if (call->send_extra_metadata_count == 0) {
937
- prepend_extra_metadata = 0;
938
- } else {
939
- for (i = 0; i < call->send_extra_metadata_count; i++) {
940
- GRPC_LOG_IF_ERROR("prepare_application_metadata",
941
- grpc_metadata_batch_link_tail(
942
- batch, &call->send_extra_metadata[i]));
943
- }
944
- }
945
- }
946
- for (i = 0; i < total_count; i++) {
947
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
948
- grpc_linked_mdelem* l = linked_from_md(md);
949
- grpc_error* error = grpc_metadata_batch_link_tail(batch, l);
950
- if (error != GRPC_ERROR_NONE) {
951
- GRPC_MDELEM_UNREF(l->md);
952
- }
953
- GRPC_LOG_IF_ERROR("prepare_application_metadata", error);
954
- }
955
- call->send_extra_metadata_count = 0;
956
-
957
- return 1;
958
- }
959
-
960
- static grpc_message_compression_algorithm decode_message_compression(
961
- grpc_mdelem md) {
962
- grpc_message_compression_algorithm algorithm =
963
- grpc_message_compression_algorithm_from_slice(GRPC_MDVALUE(md));
964
- if (algorithm == GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT) {
965
- char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
966
- gpr_log(GPR_ERROR,
967
- "Invalid incoming message compression algorithm: '%s'. "
968
- "Interpreting incoming data as uncompressed.",
969
- md_c_str);
970
- gpr_free(md_c_str);
971
- return GRPC_MESSAGE_COMPRESS_NONE;
972
- }
973
- return algorithm;
974
- }
975
-
976
- static grpc_stream_compression_algorithm decode_stream_compression(
977
- grpc_mdelem md) {
978
- grpc_stream_compression_algorithm algorithm =
979
- grpc_stream_compression_algorithm_from_slice(GRPC_MDVALUE(md));
980
- if (algorithm == GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT) {
981
- char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
982
- gpr_log(GPR_ERROR,
983
- "Invalid incoming stream compression algorithm: '%s'. Interpreting "
984
- "incoming data as uncompressed.",
985
- md_c_str);
986
- gpr_free(md_c_str);
987
- return GRPC_STREAM_COMPRESS_NONE;
988
- }
989
- return algorithm;
990
- }
991
-
992
- static void publish_app_metadata(grpc_call* call, grpc_metadata_batch* b,
993
- int is_trailing) {
994
- if (b->list.count == 0) return;
995
- if (!call->is_client && is_trailing) return;
996
- if (is_trailing && call->buffered_metadata[1] == nullptr) return;
997
- GPR_TIMER_SCOPE("publish_app_metadata", 0);
998
- grpc_metadata_array* dest;
999
- grpc_metadata* mdusr;
1000
- dest = call->buffered_metadata[is_trailing];
1001
- if (dest->count + b->list.count > dest->capacity) {
1002
- dest->capacity =
1003
- GPR_MAX(dest->capacity + b->list.count, dest->capacity * 3 / 2);
1004
- dest->metadata = static_cast<grpc_metadata*>(
1005
- gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity));
1006
- }
1007
- for (grpc_linked_mdelem* l = b->list.head; l != nullptr; l = l->next) {
1008
- mdusr = &dest->metadata[dest->count++];
1009
- /* we pass back borrowed slices that are valid whilst the call is valid */
1010
- mdusr->key = GRPC_MDKEY(l->md);
1011
- mdusr->value = GRPC_MDVALUE(l->md);
1012
- }
1013
- }
1014
-
1015
- static void recv_initial_filter(grpc_call* call, grpc_metadata_batch* b) {
1016
- if (b->idx.named.content_encoding != nullptr) {
1017
- GPR_TIMER_SCOPE("incoming_stream_compression_algorithm", 0);
1018
- set_incoming_stream_compression_algorithm(
1019
- call, decode_stream_compression(b->idx.named.content_encoding->md));
1020
- grpc_metadata_batch_remove(b, GRPC_BATCH_CONTENT_ENCODING);
1021
- }
1022
- if (b->idx.named.grpc_encoding != nullptr) {
1023
- GPR_TIMER_SCOPE("incoming_message_compression_algorithm", 0);
1024
- set_incoming_message_compression_algorithm(
1025
- call, decode_message_compression(b->idx.named.grpc_encoding->md));
1026
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_ENCODING);
1027
- }
1028
- uint32_t message_encodings_accepted_by_peer = 1u;
1029
- uint32_t stream_encodings_accepted_by_peer = 1u;
1030
- if (b->idx.named.grpc_accept_encoding != nullptr) {
1031
- GPR_TIMER_SCOPE("encodings_accepted_by_peer", 0);
1032
- set_encodings_accepted_by_peer(call, b->idx.named.grpc_accept_encoding->md,
1033
- &message_encodings_accepted_by_peer, false);
1034
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_ACCEPT_ENCODING);
1035
- }
1036
- if (b->idx.named.accept_encoding != nullptr) {
1037
- GPR_TIMER_SCOPE("stream_encodings_accepted_by_peer", 0);
1038
- set_encodings_accepted_by_peer(call, b->idx.named.accept_encoding->md,
1039
- &stream_encodings_accepted_by_peer, true);
1040
- grpc_metadata_batch_remove(b, GRPC_BATCH_ACCEPT_ENCODING);
1041
- }
1042
- call->encodings_accepted_by_peer =
1043
- grpc_compression_bitset_from_message_stream_compression_bitset(
1044
- message_encodings_accepted_by_peer,
1045
- stream_encodings_accepted_by_peer);
1046
- publish_app_metadata(call, b, false);
1047
- }
1048
-
1049
- static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
1050
- grpc_error* batch_error) {
1051
- grpc_call* call = static_cast<grpc_call*>(args);
1052
- if (batch_error != GRPC_ERROR_NONE) {
1053
- set_final_status(call, batch_error);
1054
- } else if (b->idx.named.grpc_status != nullptr) {
1055
- grpc_status_code status_code =
1056
- grpc_get_status_code_from_metadata(b->idx.named.grpc_status->md);
1057
- grpc_error* error = GRPC_ERROR_NONE;
1058
- if (status_code != GRPC_STATUS_OK) {
1059
- char* peer = grpc_call_get_peer(call);
1060
- error = grpc_error_set_int(
1061
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1062
- absl::StrCat("Error received from peer ", peer).c_str()),
1063
- GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
1064
- gpr_free(peer);
1065
- }
1066
- if (b->idx.named.grpc_message != nullptr) {
1067
- error = grpc_error_set_str(
1068
- error, GRPC_ERROR_STR_GRPC_MESSAGE,
1069
- grpc_slice_ref_internal(GRPC_MDVALUE(b->idx.named.grpc_message->md)));
1070
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_MESSAGE);
1071
- } else if (error != GRPC_ERROR_NONE) {
1072
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
1073
- grpc_empty_slice());
1074
- }
1075
- set_final_status(call, GRPC_ERROR_REF(error));
1076
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_STATUS);
1077
- GRPC_ERROR_UNREF(error);
1078
- } else if (!call->is_client) {
1079
- set_final_status(call, GRPC_ERROR_NONE);
1080
- } else {
1081
- gpr_log(GPR_DEBUG,
1082
- "Received trailing metadata with no error and no status");
1083
- set_final_status(
1084
- call, grpc_error_set_int(
1085
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
1086
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
1087
- }
1088
- publish_app_metadata(call, b, true);
1089
- }
1090
-
1091
- grpc_core::Arena* grpc_call_get_arena(grpc_call* call) { return call->arena; }
1092
-
1093
- grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
1094
- return CALL_STACK_FROM_CALL(call);
1095
- }
1096
-
1097
- /*******************************************************************************
1098
- * BATCH API IMPLEMENTATION
1099
- */
1100
-
1101
- static bool are_write_flags_valid(uint32_t flags) {
1102
- /* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
1103
- const uint32_t allowed_write_positions =
1104
- (GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
1105
- const uint32_t invalid_positions = ~allowed_write_positions;
1106
- return !(flags & invalid_positions);
1107
- }
1108
-
1109
- static bool are_initial_metadata_flags_valid(uint32_t flags, bool is_client) {
1110
- /* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
1111
- uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
1112
- if (!is_client) {
1113
- invalid_positions |= GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
1114
- }
1115
- return !(flags & invalid_positions);
1116
- }
1117
-
1118
- static size_t batch_slot_for_op(grpc_op_type type) {
1061
+ size_t BatchSlotForOp(grpc_op_type type) {
1119
1062
  switch (type) {
1120
1063
  case GRPC_OP_SEND_INITIAL_METADATA:
1121
1064
  return 0;
@@ -1134,459 +1077,321 @@ static size_t batch_slot_for_op(grpc_op_type type) {
1134
1077
  }
1135
1078
  GPR_UNREACHABLE_CODE(return 123456789);
1136
1079
  }
1080
+ } // namespace
1137
1081
 
1138
- static batch_control* reuse_or_allocate_batch_control(grpc_call* call,
1139
- const grpc_op* ops) {
1140
- size_t slot_idx = batch_slot_for_op(ops[0].op);
1141
- batch_control** pslot = &call->active_batches[slot_idx];
1142
- batch_control* bctl;
1082
+ FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
1083
+ const grpc_op* ops) {
1084
+ size_t slot_idx = BatchSlotForOp(ops[0].op);
1085
+ BatchControl** pslot = &active_batches_[slot_idx];
1086
+ BatchControl* bctl;
1143
1087
  if (*pslot != nullptr) {
1144
1088
  bctl = *pslot;
1145
- if (bctl->call != nullptr) {
1089
+ if (bctl->call_ != nullptr) {
1146
1090
  return nullptr;
1147
1091
  }
1148
- bctl->~batch_control();
1149
- bctl->op = {};
1092
+ bctl->~BatchControl();
1093
+ bctl->op_ = {};
1094
+ new (&bctl->batch_error_) AtomicError();
1150
1095
  } else {
1151
- bctl = call->arena->New<batch_control>();
1096
+ bctl = arena()->New<BatchControl>();
1152
1097
  *pslot = bctl;
1153
1098
  }
1154
- bctl->call = call;
1155
- bctl->op.payload = &call->stream_op_payload;
1099
+ bctl->call_ = this;
1100
+ bctl->op_.payload = &stream_op_payload_;
1156
1101
  return bctl;
1157
1102
  }
1158
1103
 
1159
- static void finish_batch_completion(void* user_data,
1160
- grpc_cq_completion* /*storage*/) {
1161
- batch_control* bctl = static_cast<batch_control*>(user_data);
1162
- grpc_call* call = bctl->call;
1163
- bctl->call = nullptr;
1164
- GRPC_CALL_INTERNAL_UNREF(call, "completion");
1165
- }
1166
-
1167
- static void reset_batch_errors(batch_control* bctl) {
1168
- GRPC_ERROR_UNREF(
1169
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)));
1170
- gpr_atm_rel_store(&bctl->batch_error,
1171
- reinterpret_cast<gpr_atm>(GRPC_ERROR_NONE));
1172
- }
1104
+ void FilterStackCall::BatchControl::PostCompletion() {
1105
+ FilterStackCall* call = call_;
1106
+ grpc_error_handle error = batch_error_.get();
1173
1107
 
1174
- static void post_batch_completion(batch_control* bctl) {
1175
- grpc_call* next_child_call;
1176
- grpc_call* call = bctl->call;
1177
- grpc_error* error = GRPC_ERROR_REF(
1178
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)));
1179
-
1180
- if (bctl->op.send_initial_metadata) {
1181
- grpc_metadata_batch_destroy(
1182
- &call->metadata_batch[0 /* is_receiving */][0 /* is_trailing */]);
1108
+ if (op_.send_initial_metadata) {
1109
+ call->send_initial_metadata_.Clear();
1183
1110
  }
1184
- if (bctl->op.send_message) {
1185
- if (bctl->op.payload->send_message.stream_write_closed &&
1186
- error == GRPC_ERROR_NONE) {
1111
+ if (op_.send_message) {
1112
+ if (op_.payload->send_message.stream_write_closed && error.ok()) {
1187
1113
  error = grpc_error_add_child(
1188
- error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1114
+ error, GRPC_ERROR_CREATE(
1189
1115
  "Attempt to send message after stream was closed."));
1190
1116
  }
1191
- call->sending_message = false;
1192
- }
1193
- if (bctl->op.send_trailing_metadata) {
1194
- grpc_metadata_batch_destroy(
1195
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */]);
1196
- }
1197
- if (bctl->op.recv_trailing_metadata) {
1198
- /* propagate cancellation to any interested children */
1199
- gpr_atm_rel_store(&call->received_final_op_atm, 1);
1200
- parent_call* pc = get_parent_call(call);
1201
- if (pc != nullptr) {
1202
- grpc_call* child;
1203
- gpr_mu_lock(&pc->child_list_mu);
1204
- child = pc->first_child;
1205
- if (child != nullptr) {
1206
- do {
1207
- next_child_call = child->child->sibling_next;
1208
- if (child->cancellation_is_inherited) {
1209
- GRPC_CALL_INTERNAL_REF(child, "propagate_cancel");
1210
- cancel_with_error(child, GRPC_ERROR_CANCELLED);
1211
- GRPC_CALL_INTERNAL_UNREF(child, "propagate_cancel");
1212
- }
1213
- child = next_child_call;
1214
- } while (child != pc->first_child);
1215
- }
1216
- gpr_mu_unlock(&pc->child_list_mu);
1217
- }
1218
- GRPC_ERROR_UNREF(error);
1219
- error = GRPC_ERROR_NONE;
1220
- }
1221
- if (error != GRPC_ERROR_NONE && bctl->op.recv_message &&
1222
- *call->receiving_buffer != nullptr) {
1223
- grpc_byte_buffer_destroy(*call->receiving_buffer);
1224
- *call->receiving_buffer = nullptr;
1225
- }
1226
- reset_batch_errors(bctl);
1227
-
1228
- if (bctl->completion_data.notify_tag.is_closure) {
1229
- /* unrefs error */
1230
- bctl->call = nullptr;
1231
- grpc_core::Closure::Run(DEBUG_LOCATION,
1232
- (grpc_closure*)bctl->completion_data.notify_tag.tag,
1233
- error);
1234
- GRPC_CALL_INTERNAL_UNREF(call, "completion");
1117
+ call->sending_message_ = false;
1118
+ call->send_slice_buffer_.Clear();
1119
+ }
1120
+ if (op_.send_trailing_metadata) {
1121
+ call->send_trailing_metadata_.Clear();
1122
+ }
1123
+ if (op_.recv_trailing_metadata) {
1124
+ // propagate cancellation to any interested children
1125
+ gpr_atm_rel_store(&call->received_final_op_atm_, 1);
1126
+ call->PropagateCancellationToChildren();
1127
+ error = absl::OkStatus();
1128
+ }
1129
+ if (!error.ok() && op_.recv_message && *call->receiving_buffer_ != nullptr) {
1130
+ grpc_byte_buffer_destroy(*call->receiving_buffer_);
1131
+ *call->receiving_buffer_ = nullptr;
1132
+ }
1133
+ batch_error_.set(absl::OkStatus());
1134
+
1135
+ if (completion_data_.notify_tag.is_closure) {
1136
+ // unrefs error
1137
+ call_ = nullptr;
1138
+ Closure::Run(DEBUG_LOCATION,
1139
+ static_cast<grpc_closure*>(completion_data_.notify_tag.tag),
1140
+ error);
1141
+ call->InternalUnref("completion");
1235
1142
  } else {
1236
- /* unrefs error */
1237
- grpc_cq_end_op(bctl->call->cq, bctl->completion_data.notify_tag.tag, error,
1238
- finish_batch_completion, bctl,
1239
- &bctl->completion_data.cq_completion);
1143
+ // unrefs error
1144
+ grpc_cq_end_op(
1145
+ call->cq_, completion_data_.notify_tag.tag, error,
1146
+ [](void* user_data, grpc_cq_completion* /*storage*/) {
1147
+ BatchControl* bctl = static_cast<BatchControl*>(user_data);
1148
+ Call* call = bctl->call_;
1149
+ bctl->call_ = nullptr;
1150
+ call->InternalUnref("completion");
1151
+ },
1152
+ this, &completion_data_.cq_completion);
1240
1153
  }
1241
1154
  }
1242
1155
 
1243
- static void finish_batch_step(batch_control* bctl) {
1244
- if (GPR_UNLIKELY(bctl->completed_batch_step())) {
1245
- post_batch_completion(bctl);
1156
+ void FilterStackCall::BatchControl::FinishStep() {
1157
+ if (GPR_UNLIKELY(completed_batch_step())) {
1158
+ PostCompletion();
1246
1159
  }
1247
1160
  }
1248
1161
 
1249
- static void continue_receiving_slices(batch_control* bctl) {
1250
- grpc_error* error;
1251
- grpc_call* call = bctl->call;
1252
- for (;;) {
1253
- size_t remaining = call->receiving_stream->length() -
1254
- (*call->receiving_buffer)->data.raw.slice_buffer.length;
1255
- if (remaining == 0) {
1256
- call->receiving_message = 0;
1257
- call->receiving_stream.reset();
1258
- finish_batch_step(bctl);
1259
- return;
1260
- }
1261
- if (call->receiving_stream->Next(remaining, &call->receiving_slice_ready)) {
1262
- error = call->receiving_stream->Pull(&call->receiving_slice);
1263
- if (error == GRPC_ERROR_NONE) {
1264
- grpc_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer,
1265
- call->receiving_slice);
1266
- } else {
1267
- call->receiving_stream.reset();
1268
- grpc_byte_buffer_destroy(*call->receiving_buffer);
1269
- *call->receiving_buffer = nullptr;
1270
- call->receiving_message = 0;
1271
- finish_batch_step(bctl);
1272
- GRPC_ERROR_UNREF(error);
1273
- return;
1274
- }
1275
- } else {
1276
- return;
1277
- }
1278
- }
1279
- }
1280
-
1281
- static void receiving_slice_ready(void* bctlp, grpc_error* error) {
1282
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1283
- grpc_call* call = bctl->call;
1284
- bool release_error = false;
1285
-
1286
- if (error == GRPC_ERROR_NONE) {
1287
- grpc_slice slice;
1288
- error = call->receiving_stream->Pull(&slice);
1289
- if (error == GRPC_ERROR_NONE) {
1290
- grpc_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer,
1291
- slice);
1292
- continue_receiving_slices(bctl);
1162
+ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1163
+ FilterStackCall* call = call_;
1164
+ if (!call->receiving_slice_buffer_.has_value()) {
1165
+ *call->receiving_buffer_ = nullptr;
1166
+ call->receiving_message_ = false;
1167
+ FinishStep();
1168
+ } else {
1169
+ call->test_only_last_message_flags_ = call->receiving_stream_flags_;
1170
+ if ((call->receiving_stream_flags_ & GRPC_WRITE_INTERNAL_COMPRESS) &&
1171
+ (call->incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
1172
+ *call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
1173
+ nullptr, 0, call->incoming_compression_algorithm_);
1293
1174
  } else {
1294
- /* Error returned by ByteStream::Pull() needs to be released manually */
1295
- release_error = true;
1296
- }
1297
- }
1298
-
1299
- if (error != GRPC_ERROR_NONE) {
1300
- if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
1301
- GRPC_LOG_IF_ERROR("receiving_slice_ready", GRPC_ERROR_REF(error));
1175
+ *call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
1302
1176
  }
1303
- call->receiving_stream.reset();
1304
- grpc_byte_buffer_destroy(*call->receiving_buffer);
1305
- *call->receiving_buffer = nullptr;
1306
- call->receiving_message = 0;
1307
- finish_batch_step(bctl);
1308
- if (release_error) {
1309
- GRPC_ERROR_UNREF(error);
1177
+ grpc_slice_buffer_move_into(
1178
+ call->receiving_slice_buffer_->c_slice_buffer(),
1179
+ &(*call->receiving_buffer_)->data.raw.slice_buffer);
1180
+ call->receiving_message_ = false;
1181
+ call->receiving_slice_buffer_.reset();
1182
+ FinishStep();
1183
+ }
1184
+ }
1185
+
1186
+ void FilterStackCall::BatchControl::ReceivingStreamReady(
1187
+ grpc_error_handle error) {
1188
+ FilterStackCall* call = call_;
1189
+ if (!error.ok()) {
1190
+ call->receiving_slice_buffer_.reset();
1191
+ if (batch_error_.ok()) {
1192
+ batch_error_.set(error);
1310
1193
  }
1194
+ call->CancelWithError(error);
1311
1195
  }
1312
- }
1313
-
1314
- static void process_data_after_md(batch_control* bctl) {
1315
- grpc_call* call = bctl->call;
1316
- if (call->receiving_stream == nullptr) {
1317
- *call->receiving_buffer = nullptr;
1318
- call->receiving_message = 0;
1319
- finish_batch_step(bctl);
1320
- } else {
1321
- call->test_only_last_message_flags = call->receiving_stream->flags();
1322
- if ((call->receiving_stream->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
1323
- (call->incoming_message_compression_algorithm >
1324
- GRPC_MESSAGE_COMPRESS_NONE)) {
1325
- grpc_compression_algorithm algo;
1326
- GPR_ASSERT(
1327
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
1328
- &algo, call->incoming_message_compression_algorithm,
1329
- (grpc_stream_compression_algorithm)0));
1330
- *call->receiving_buffer =
1331
- grpc_raw_compressed_byte_buffer_create(nullptr, 0, algo);
1332
- } else {
1333
- *call->receiving_buffer = grpc_raw_byte_buffer_create(nullptr, 0);
1334
- }
1335
- GRPC_CLOSURE_INIT(&call->receiving_slice_ready, receiving_slice_ready, bctl,
1336
- grpc_schedule_on_exec_ctx);
1337
- continue_receiving_slices(bctl);
1196
+ // If recv_state is kRecvNone, we will save the batch_control
1197
+ // object with rel_cas, and will not use it after the cas. Its corresponding
1198
+ // acq_load is in receiving_initial_metadata_ready()
1199
+ if (!error.ok() || !call->receiving_slice_buffer_.has_value() ||
1200
+ !gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
1201
+ reinterpret_cast<gpr_atm>(this))) {
1202
+ ProcessDataAfterMetadata();
1338
1203
  }
1339
1204
  }
1340
1205
 
1341
- static void receiving_stream_ready(void* bctlp, grpc_error* error) {
1342
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1343
- grpc_call* call = bctl->call;
1344
- if (error != GRPC_ERROR_NONE) {
1345
- call->receiving_stream.reset();
1346
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1347
- GRPC_ERROR_NONE) {
1348
- gpr_atm_rel_store(&bctl->batch_error,
1349
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1350
- }
1351
- cancel_with_error(call, GRPC_ERROR_REF(error));
1352
- }
1353
- /* If recv_state is RECV_NONE, we will save the batch_control
1354
- * object with rel_cas, and will not use it after the cas. Its corresponding
1355
- * acq_load is in receiving_initial_metadata_ready() */
1356
- if (error != GRPC_ERROR_NONE || call->receiving_stream == nullptr ||
1357
- !gpr_atm_rel_cas(&call->recv_state, RECV_NONE, (gpr_atm)bctlp)) {
1358
- process_data_after_md(bctl);
1359
- }
1360
- }
1361
-
1362
- // The recv_message_ready callback used when sending a batch containing
1363
- // a recv_message op down the filter stack. Yields the call combiner
1364
- // before processing the received message.
1365
- static void receiving_stream_ready_in_call_combiner(void* bctlp,
1366
- grpc_error* error) {
1367
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1368
- grpc_call* call = bctl->call;
1369
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_message_ready");
1370
- receiving_stream_ready(bctlp, error);
1371
- }
1372
-
1373
- static void GPR_ATTRIBUTE_NOINLINE
1374
- handle_both_stream_and_msg_compression_set(grpc_call* call) {
1375
- std::string error_msg = absl::StrFormat(
1376
- "Incoming stream has both stream compression (%d) and message "
1377
- "compression (%d).",
1378
- call->incoming_stream_compression_algorithm,
1379
- call->incoming_message_compression_algorithm);
1380
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1381
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1382
- }
1383
-
1384
- static void GPR_ATTRIBUTE_NOINLINE
1385
- handle_error_parsing_compression_algorithm(grpc_call* call) {
1386
- std::string error_msg = absl::StrFormat(
1387
- "Error in incoming message compression (%d) or stream "
1388
- "compression (%d).",
1389
- call->incoming_stream_compression_algorithm,
1390
- call->incoming_message_compression_algorithm);
1391
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1392
- }
1393
-
1394
- static void GPR_ATTRIBUTE_NOINLINE handle_invalid_compression(
1395
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1396
- std::string error_msg = absl::StrFormat(
1397
- "Invalid compression algorithm value '%d'.", compression_algorithm);
1398
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1399
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1400
- }
1401
-
1402
- static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_disabled(
1403
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1206
+ void FilterStackCall::HandleCompressionAlgorithmDisabled(
1207
+ grpc_compression_algorithm compression_algorithm) {
1404
1208
  const char* algo_name = nullptr;
1405
1209
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1406
1210
  std::string error_msg =
1407
1211
  absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
1408
1212
  gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1409
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1213
+ CancelWithStatus(GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1410
1214
  }
1411
1215
 
1412
- static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_not_accepted(
1413
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1216
+ void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
1217
+ grpc_compression_algorithm compression_algorithm) {
1414
1218
  const char* algo_name = nullptr;
1415
1219
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1416
1220
  gpr_log(GPR_ERROR,
1417
- "Compression algorithm ('%s') not present in the bitset of "
1418
- "accepted encodings ('0x%x')",
1419
- algo_name, call->encodings_accepted_by_peer);
1420
- }
1421
-
1422
- static void validate_filtered_metadata(batch_control* bctl) {
1423
- grpc_compression_algorithm compression_algorithm;
1424
- grpc_call* call = bctl->call;
1425
- if (GPR_UNLIKELY(call->incoming_stream_compression_algorithm !=
1426
- GRPC_STREAM_COMPRESS_NONE &&
1427
- call->incoming_message_compression_algorithm !=
1428
- GRPC_MESSAGE_COMPRESS_NONE)) {
1429
- handle_both_stream_and_msg_compression_set(call);
1430
- } else if (
1431
- GPR_UNLIKELY(
1432
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
1433
- &compression_algorithm,
1434
- call->incoming_message_compression_algorithm,
1435
- call->incoming_stream_compression_algorithm) == 0)) {
1436
- handle_error_parsing_compression_algorithm(call);
1437
- } else {
1438
- const grpc_compression_options compression_options =
1439
- grpc_channel_compression_options(call->channel);
1440
- if (GPR_UNLIKELY(compression_algorithm >= GRPC_COMPRESS_ALGORITHMS_COUNT)) {
1441
- handle_invalid_compression(call, compression_algorithm);
1442
- } else if (GPR_UNLIKELY(
1443
- grpc_compression_options_is_algorithm_enabled_internal(
1444
- &compression_options, compression_algorithm) == 0)) {
1445
- /* check if algorithm is supported by current channel config */
1446
- handle_compression_algorithm_disabled(call, compression_algorithm);
1447
- }
1448
- /* GRPC_COMPRESS_NONE is always set. */
1449
- GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer != 0);
1450
- if (GPR_UNLIKELY(!GPR_BITGET(call->encodings_accepted_by_peer,
1451
- compression_algorithm))) {
1452
- if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1453
- handle_compression_algorithm_not_accepted(call, compression_algorithm);
1454
- }
1221
+ "Compression algorithm ('%s') not present in the "
1222
+ "accepted encodings (%s)",
1223
+ algo_name,
1224
+ std::string(encodings_accepted_by_peer_.ToString()).c_str());
1225
+ }
1226
+
1227
+ void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
1228
+ FilterStackCall* call = call_;
1229
+
1230
+ const grpc_compression_options compression_options =
1231
+ call->channel()->compression_options();
1232
+ const grpc_compression_algorithm compression_algorithm =
1233
+ call->incoming_compression_algorithm_;
1234
+ if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
1235
+ compression_options.enabled_algorithms_bitset)
1236
+ .IsSet(compression_algorithm))) {
1237
+ // check if algorithm is supported by current channel config
1238
+ call->HandleCompressionAlgorithmDisabled(compression_algorithm);
1239
+ }
1240
+ // GRPC_COMPRESS_NONE is always set.
1241
+ GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
1242
+ if (GPR_UNLIKELY(
1243
+ !call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
1244
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1245
+ call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
1455
1246
  }
1456
1247
  }
1457
1248
  }
1458
1249
 
1459
- static void receiving_initial_metadata_ready(void* bctlp, grpc_error* error) {
1460
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1461
- grpc_call* call = bctl->call;
1250
+ void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1251
+ grpc_error_handle error) {
1252
+ FilterStackCall* call = call_;
1462
1253
 
1463
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_initial_metadata_ready");
1254
+ GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
1464
1255
 
1465
- if (error == GRPC_ERROR_NONE) {
1466
- grpc_metadata_batch* md =
1467
- &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1468
- recv_initial_filter(call, md);
1256
+ if (error.ok()) {
1257
+ grpc_metadata_batch* md = &call->recv_initial_metadata_;
1258
+ call->RecvInitialFilter(md);
1469
1259
 
1470
- /* TODO(ctiller): this could be moved into recv_initial_filter now */
1471
- GPR_TIMER_SCOPE("validate_filtered_metadata", 0);
1472
- validate_filtered_metadata(bctl);
1260
+ // TODO(ctiller): this could be moved into recv_initial_filter now
1261
+ ValidateFilteredMetadata();
1473
1262
 
1474
- if (md->deadline != GRPC_MILLIS_INF_FUTURE && !call->is_client) {
1475
- call->send_deadline = md->deadline;
1263
+ absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
1264
+ if (deadline.has_value() && !call->is_client()) {
1265
+ call_->set_send_deadline(*deadline);
1476
1266
  }
1477
1267
  } else {
1478
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1479
- GRPC_ERROR_NONE) {
1480
- gpr_atm_rel_store(&bctl->batch_error,
1481
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1268
+ if (batch_error_.ok()) {
1269
+ batch_error_.set(error);
1482
1270
  }
1483
- cancel_with_error(call, GRPC_ERROR_REF(error));
1271
+ call->CancelWithError(error);
1484
1272
  }
1485
1273
 
1486
1274
  grpc_closure* saved_rsr_closure = nullptr;
1487
1275
  while (true) {
1488
- gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state);
1489
- /* Should only receive initial metadata once */
1276
+ gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state_);
1277
+ // Should only receive initial metadata once
1490
1278
  GPR_ASSERT(rsr_bctlp != 1);
1491
1279
  if (rsr_bctlp == 0) {
1492
- /* We haven't seen initial metadata and messages before, thus initial
1493
- * metadata is received first.
1494
- * no_barrier_cas is used, as this function won't access the batch_control
1495
- * object saved by receiving_stream_ready() if the initial metadata is
1496
- * received first. */
1497
- if (gpr_atm_no_barrier_cas(&call->recv_state, RECV_NONE,
1498
- RECV_INITIAL_METADATA_FIRST)) {
1280
+ // We haven't seen initial metadata and messages before, thus initial
1281
+ // metadata is received first.
1282
+ // no_barrier_cas is used, as this function won't access the batch_control
1283
+ // object saved by receiving_stream_ready() if the initial metadata is
1284
+ // received first.
1285
+ if (gpr_atm_no_barrier_cas(&call->recv_state_, kRecvNone,
1286
+ kRecvInitialMetadataFirst)) {
1499
1287
  break;
1500
1288
  }
1501
1289
  } else {
1502
- /* Already received messages */
1503
- saved_rsr_closure =
1504
- GRPC_CLOSURE_CREATE(receiving_stream_ready, (batch_control*)rsr_bctlp,
1505
- grpc_schedule_on_exec_ctx);
1506
- /* No need to modify recv_state */
1290
+ // Already received messages
1291
+ saved_rsr_closure = GRPC_CLOSURE_CREATE(
1292
+ [](void* bctl, grpc_error_handle error) {
1293
+ static_cast<BatchControl*>(bctl)->ReceivingStreamReady(error);
1294
+ },
1295
+ reinterpret_cast<BatchControl*>(rsr_bctlp),
1296
+ grpc_schedule_on_exec_ctx);
1297
+ // No need to modify recv_state
1507
1298
  break;
1508
1299
  }
1509
1300
  }
1510
1301
  if (saved_rsr_closure != nullptr) {
1511
- grpc_core::Closure::Run(DEBUG_LOCATION, saved_rsr_closure,
1512
- GRPC_ERROR_REF(error));
1302
+ Closure::Run(DEBUG_LOCATION, saved_rsr_closure, error);
1513
1303
  }
1514
1304
 
1515
- finish_batch_step(bctl);
1305
+ FinishStep();
1516
1306
  }
1517
1307
 
1518
- static void receiving_trailing_metadata_ready(void* bctlp, grpc_error* error) {
1519
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1520
- grpc_call* call = bctl->call;
1521
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_trailing_metadata_ready");
1522
- grpc_metadata_batch* md =
1523
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1524
- recv_trailing_filter(call, md, GRPC_ERROR_REF(error));
1525
- finish_batch_step(bctl);
1308
+ void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
1309
+ grpc_error_handle error) {
1310
+ GRPC_CALL_COMBINER_STOP(call_->call_combiner(),
1311
+ "recv_trailing_metadata_ready");
1312
+ grpc_metadata_batch* md = &call_->recv_trailing_metadata_;
1313
+ call_->RecvTrailingFilter(md, error);
1314
+ FinishStep();
1526
1315
  }
1527
1316
 
1528
- static void finish_batch(void* bctlp, grpc_error* error) {
1529
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1530
- grpc_call* call = bctl->call;
1531
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "on_complete");
1532
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1533
- GRPC_ERROR_NONE) {
1534
- gpr_atm_rel_store(&bctl->batch_error,
1535
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1317
+ void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
1318
+ GRPC_CALL_COMBINER_STOP(call_->call_combiner(), "on_complete");
1319
+ if (batch_error_.ok()) {
1320
+ batch_error_.set(error);
1536
1321
  }
1537
- if (error != GRPC_ERROR_NONE) {
1538
- cancel_with_error(call, GRPC_ERROR_REF(error));
1322
+ if (!error.ok()) {
1323
+ call_->CancelWithError(error);
1539
1324
  }
1540
- finish_batch_step(bctl);
1325
+ FinishStep();
1541
1326
  }
1542
1327
 
1543
- static void free_no_op_completion(void* /*p*/, grpc_cq_completion* completion) {
1544
- gpr_free(completion);
1328
+ namespace {
1329
+ void EndOpImmediately(grpc_completion_queue* cq, void* notify_tag,
1330
+ bool is_notify_tag_closure) {
1331
+ if (!is_notify_tag_closure) {
1332
+ GPR_ASSERT(grpc_cq_begin_op(cq, notify_tag));
1333
+ grpc_cq_end_op(
1334
+ cq, notify_tag, absl::OkStatus(),
1335
+ [](void*, grpc_cq_completion* completion) { gpr_free(completion); },
1336
+ nullptr,
1337
+ static_cast<grpc_cq_completion*>(
1338
+ gpr_malloc(sizeof(grpc_cq_completion))));
1339
+ } else {
1340
+ Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
1341
+ absl::OkStatus());
1342
+ }
1545
1343
  }
1344
+ } // namespace
1546
1345
 
1547
- static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1548
- size_t nops, void* notify_tag,
1549
- int is_notify_tag_closure) {
1550
- GPR_TIMER_SCOPE("call_start_batch", 0);
1551
-
1346
+ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1347
+ void* notify_tag,
1348
+ bool is_notify_tag_closure) {
1552
1349
  size_t i;
1553
1350
  const grpc_op* op;
1554
- batch_control* bctl;
1351
+ BatchControl* bctl;
1555
1352
  bool has_send_ops = false;
1556
1353
  int num_recv_ops = 0;
1557
1354
  grpc_call_error error = GRPC_CALL_OK;
1558
1355
  grpc_transport_stream_op_batch* stream_op;
1559
1356
  grpc_transport_stream_op_batch_payload* stream_op_payload;
1357
+ uint32_t seen_ops = 0;
1358
+
1359
+ for (i = 0; i < nops; i++) {
1360
+ if (seen_ops & (1u << ops[i].op)) {
1361
+ return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1362
+ }
1363
+ seen_ops |= (1u << ops[i].op);
1364
+ }
1365
+
1366
+ if (!is_client() &&
1367
+ (seen_ops & (1u << GRPC_OP_SEND_STATUS_FROM_SERVER)) != 0 &&
1368
+ (seen_ops & (1u << GRPC_OP_RECV_MESSAGE)) != 0) {
1369
+ gpr_log(GPR_ERROR,
1370
+ "******************* SEND_STATUS WITH RECV_MESSAGE "
1371
+ "*******************");
1372
+ return GRPC_CALL_ERROR;
1373
+ }
1560
1374
 
1561
1375
  GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
1562
1376
 
1563
1377
  if (nops == 0) {
1564
- if (!is_notify_tag_closure) {
1565
- GPR_ASSERT(grpc_cq_begin_op(call->cq, notify_tag));
1566
- grpc_cq_end_op(call->cq, notify_tag, GRPC_ERROR_NONE,
1567
- free_no_op_completion, nullptr,
1568
- static_cast<grpc_cq_completion*>(
1569
- gpr_malloc(sizeof(grpc_cq_completion))));
1570
- } else {
1571
- grpc_core::Closure::Run(DEBUG_LOCATION, (grpc_closure*)notify_tag,
1572
- GRPC_ERROR_NONE);
1573
- }
1378
+ EndOpImmediately(cq_, notify_tag, is_notify_tag_closure);
1574
1379
  error = GRPC_CALL_OK;
1575
1380
  goto done;
1576
1381
  }
1577
1382
 
1578
- bctl = reuse_or_allocate_batch_control(call, ops);
1383
+ bctl = ReuseOrAllocateBatchControl(ops);
1579
1384
  if (bctl == nullptr) {
1580
1385
  return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1581
1386
  }
1582
- bctl->completion_data.notify_tag.tag = notify_tag;
1583
- bctl->completion_data.notify_tag.is_closure =
1387
+ bctl->completion_data_.notify_tag.tag = notify_tag;
1388
+ bctl->completion_data_.notify_tag.is_closure =
1584
1389
  static_cast<uint8_t>(is_notify_tag_closure != 0);
1585
1390
 
1586
- stream_op = &bctl->op;
1587
- stream_op_payload = &call->stream_op_payload;
1391
+ stream_op = &bctl->op_;
1392
+ stream_op_payload = &stream_op_payload_;
1588
1393
 
1589
- /* rewrite batch ops into a transport op */
1394
+ // rewrite batch ops into a transport op
1590
1395
  for (i = 0; i < nops; i++) {
1591
1396
  op = &ops[i];
1592
1397
  if (op->reserved != nullptr) {
@@ -1595,12 +1400,12 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1595
1400
  }
1596
1401
  switch (op->op) {
1597
1402
  case GRPC_OP_SEND_INITIAL_METADATA: {
1598
- /* Flag validation: currently allow no flags */
1599
- if (!are_initial_metadata_flags_valid(op->flags, call->is_client)) {
1403
+ // Flag validation: currently allow no flags
1404
+ if (!AreInitialMetadataFlagsValid(op->flags)) {
1600
1405
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1601
1406
  goto done_with_error;
1602
1407
  }
1603
- if (call->sent_initial_metadata) {
1408
+ if (sent_initial_metadata_) {
1604
1409
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1605
1410
  goto done_with_error;
1606
1411
  }
@@ -1608,12 +1413,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1608
1413
  // algorithm by setting the initial metadata with key of
1609
1414
  // GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
1610
1415
  // with the compression algorithm mapped from compression level.
1611
- /* process compression level */
1612
- grpc_metadata& compression_md = call->compression_md;
1613
- compression_md.key = grpc_empty_slice();
1614
- compression_md.value = grpc_empty_slice();
1615
- compression_md.flags = 0;
1616
- size_t additional_metadata_count = 0;
1416
+ // process compression level
1617
1417
  grpc_compression_level effective_compression_level =
1618
1418
  GRPC_COMPRESS_LEVEL_NONE;
1619
1419
  bool level_set = false;
@@ -1623,55 +1423,59 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1623
1423
  level_set = true;
1624
1424
  } else {
1625
1425
  const grpc_compression_options copts =
1626
- grpc_channel_compression_options(call->channel);
1426
+ channel()->compression_options();
1627
1427
  if (copts.default_level.is_set) {
1628
1428
  level_set = true;
1629
1429
  effective_compression_level = copts.default_level.level;
1630
1430
  }
1631
1431
  }
1632
1432
  // Currently, only server side supports compression level setting.
1633
- if (level_set && !call->is_client) {
1433
+ if (level_set && !is_client()) {
1634
1434
  const grpc_compression_algorithm calgo =
1635
- compression_algorithm_for_level_locked(
1636
- call, effective_compression_level);
1435
+ encodings_accepted_by_peer_.CompressionAlgorithmForLevel(
1436
+ effective_compression_level);
1637
1437
  // The following metadata will be checked and removed by the message
1638
1438
  // compression filter. It will be used as the call's compression
1639
1439
  // algorithm.
1640
- compression_md.key = GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST;
1641
- compression_md.value = grpc_compression_algorithm_slice(calgo);
1642
- additional_metadata_count++;
1440
+ send_initial_metadata_.Set(GrpcInternalEncodingRequest(), calgo);
1643
1441
  }
1644
- if (op->data.send_initial_metadata.count + additional_metadata_count >
1645
- INT_MAX) {
1442
+ if (op->data.send_initial_metadata.count > INT_MAX) {
1646
1443
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1647
1444
  goto done_with_error;
1648
1445
  }
1649
1446
  stream_op->send_initial_metadata = true;
1650
- call->sent_initial_metadata = true;
1651
- if (!prepare_application_metadata(
1652
- call, static_cast<int>(op->data.send_initial_metadata.count),
1653
- op->data.send_initial_metadata.metadata, 0, call->is_client,
1654
- &compression_md, static_cast<int>(additional_metadata_count))) {
1447
+ sent_initial_metadata_ = true;
1448
+ if (!PrepareApplicationMetadata(op->data.send_initial_metadata.count,
1449
+ op->data.send_initial_metadata.metadata,
1450
+ false)) {
1655
1451
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1656
1452
  goto done_with_error;
1657
1453
  }
1658
- /* TODO(ctiller): just make these the same variable? */
1659
- if (call->is_client) {
1660
- call->metadata_batch[0][0].deadline = call->send_deadline;
1454
+ // Ignore any te metadata key value pairs specified.
1455
+ send_initial_metadata_.Remove(TeMetadata());
1456
+ // TODO(ctiller): just make these the same variable?
1457
+ if (is_client() && send_deadline() != Timestamp::InfFuture()) {
1458
+ send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
1459
+ }
1460
+ if (is_client()) {
1461
+ send_initial_metadata_.Set(
1462
+ WaitForReady(),
1463
+ WaitForReady::ValueType{
1464
+ (op->flags & GRPC_INITIAL_METADATA_WAIT_FOR_READY) != 0,
1465
+ (op->flags &
1466
+ GRPC_INITIAL_METADATA_WAIT_FOR_READY_EXPLICITLY_SET) != 0});
1661
1467
  }
1662
1468
  stream_op_payload->send_initial_metadata.send_initial_metadata =
1663
- &call->metadata_batch[0 /* is_receiving */][0 /* is_trailing */];
1664
- stream_op_payload->send_initial_metadata.send_initial_metadata_flags =
1665
- op->flags;
1666
- if (call->is_client) {
1469
+ &send_initial_metadata_;
1470
+ if (is_client()) {
1667
1471
  stream_op_payload->send_initial_metadata.peer_string =
1668
- &call->peer_string;
1472
+ peer_string_atm_ptr();
1669
1473
  }
1670
1474
  has_send_ops = true;
1671
1475
  break;
1672
1476
  }
1673
1477
  case GRPC_OP_SEND_MESSAGE: {
1674
- if (!are_write_flags_valid(op->flags)) {
1478
+ if (!AreWriteFlagsValid(op->flags)) {
1675
1479
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1676
1480
  goto done_with_error;
1677
1481
  }
@@ -1679,59 +1483,61 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1679
1483
  error = GRPC_CALL_ERROR_INVALID_MESSAGE;
1680
1484
  goto done_with_error;
1681
1485
  }
1682
- if (call->sending_message) {
1486
+ if (sending_message_) {
1683
1487
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1684
1488
  goto done_with_error;
1685
1489
  }
1686
1490
  uint32_t flags = op->flags;
1687
- /* If the outgoing buffer is already compressed, mark it as so in the
1688
- flags. These will be picked up by the compression filter and further
1689
- (wasteful) attempts at compression skipped. */
1491
+ // If the outgoing buffer is already compressed, mark it as so in the
1492
+ // flags. These will be picked up by the compression filter and further
1493
+ // (wasteful) attempts at compression skipped.
1690
1494
  if (op->data.send_message.send_message->data.raw.compression >
1691
1495
  GRPC_COMPRESS_NONE) {
1692
1496
  flags |= GRPC_WRITE_INTERNAL_COMPRESS;
1693
1497
  }
1694
1498
  stream_op->send_message = true;
1695
- call->sending_message = true;
1696
- call->sending_stream.Init(
1697
- &op->data.send_message.send_message->data.raw.slice_buffer, flags);
1698
- stream_op_payload->send_message.send_message.reset(
1699
- call->sending_stream.get());
1499
+ sending_message_ = true;
1500
+ send_slice_buffer_.Clear();
1501
+ grpc_slice_buffer_move_into(
1502
+ &op->data.send_message.send_message->data.raw.slice_buffer,
1503
+ send_slice_buffer_.c_slice_buffer());
1504
+ stream_op_payload->send_message.flags = flags;
1505
+ stream_op_payload->send_message.send_message = &send_slice_buffer_;
1700
1506
  has_send_ops = true;
1701
1507
  break;
1702
1508
  }
1703
1509
  case GRPC_OP_SEND_CLOSE_FROM_CLIENT: {
1704
- /* Flag validation: currently allow no flags */
1510
+ // Flag validation: currently allow no flags
1705
1511
  if (op->flags != 0) {
1706
1512
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1707
1513
  goto done_with_error;
1708
1514
  }
1709
- if (!call->is_client) {
1515
+ if (!is_client()) {
1710
1516
  error = GRPC_CALL_ERROR_NOT_ON_SERVER;
1711
1517
  goto done_with_error;
1712
1518
  }
1713
- if (call->sent_final_op) {
1519
+ if (sent_final_op_) {
1714
1520
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1715
1521
  goto done_with_error;
1716
1522
  }
1717
1523
  stream_op->send_trailing_metadata = true;
1718
- call->sent_final_op = true;
1524
+ sent_final_op_ = true;
1719
1525
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1720
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1526
+ &send_trailing_metadata_;
1721
1527
  has_send_ops = true;
1722
1528
  break;
1723
1529
  }
1724
1530
  case GRPC_OP_SEND_STATUS_FROM_SERVER: {
1725
- /* Flag validation: currently allow no flags */
1531
+ // Flag validation: currently allow no flags
1726
1532
  if (op->flags != 0) {
1727
1533
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1728
1534
  goto done_with_error;
1729
1535
  }
1730
- if (call->is_client) {
1536
+ if (is_client()) {
1731
1537
  error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
1732
1538
  goto done_with_error;
1733
1539
  }
1734
- if (call->sent_final_op) {
1540
+ if (sent_final_op_) {
1735
1541
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1736
1542
  goto done_with_error;
1737
1543
  }
@@ -1741,267 +1547,1520 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1741
1547
  goto done_with_error;
1742
1548
  }
1743
1549
  stream_op->send_trailing_metadata = true;
1744
- call->sent_final_op = true;
1745
- GPR_ASSERT(call->send_extra_metadata_count == 0);
1746
- call->send_extra_metadata_count = 1;
1747
- call->send_extra_metadata[0].md = grpc_get_reffed_status_elem(
1748
- op->data.send_status_from_server.status);
1749
- grpc_error* status_error =
1550
+ sent_final_op_ = true;
1551
+
1552
+ if (!PrepareApplicationMetadata(
1553
+ op->data.send_status_from_server.trailing_metadata_count,
1554
+ op->data.send_status_from_server.trailing_metadata, true)) {
1555
+ error = GRPC_CALL_ERROR_INVALID_METADATA;
1556
+ goto done_with_error;
1557
+ }
1558
+
1559
+ grpc_error_handle status_error =
1750
1560
  op->data.send_status_from_server.status == GRPC_STATUS_OK
1751
- ? GRPC_ERROR_NONE
1561
+ ? absl::OkStatus()
1752
1562
  : grpc_error_set_int(
1753
- GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1754
- "Server returned error"),
1755
- GRPC_ERROR_INT_GRPC_STATUS,
1563
+ GRPC_ERROR_CREATE("Server returned error"),
1564
+ StatusIntProperty::kRpcStatus,
1756
1565
  static_cast<intptr_t>(
1757
1566
  op->data.send_status_from_server.status));
1758
1567
  if (op->data.send_status_from_server.status_details != nullptr) {
1759
- call->send_extra_metadata[1].md = grpc_mdelem_from_slices(
1760
- GRPC_MDSTR_GRPC_MESSAGE,
1761
- grpc_slice_ref_internal(
1762
- *op->data.send_status_from_server.status_details));
1763
- call->send_extra_metadata_count++;
1764
- if (status_error != GRPC_ERROR_NONE) {
1765
- char* msg = grpc_slice_to_c_string(
1766
- GRPC_MDVALUE(call->send_extra_metadata[1].md));
1767
- status_error =
1768
- grpc_error_set_str(status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1769
- grpc_slice_from_copied_string(msg));
1770
- gpr_free(msg);
1568
+ send_trailing_metadata_.Set(
1569
+ GrpcMessageMetadata(),
1570
+ Slice(grpc_slice_copy(
1571
+ *op->data.send_status_from_server.status_details)));
1572
+ if (!status_error.ok()) {
1573
+ status_error = grpc_error_set_str(
1574
+ status_error, StatusStrProperty::kGrpcMessage,
1575
+ StringViewFromSlice(
1576
+ *op->data.send_status_from_server.status_details));
1771
1577
  }
1772
1578
  }
1773
1579
 
1774
- gpr_atm_rel_store(&call->status_error,
1775
- reinterpret_cast<gpr_atm>(status_error));
1776
- if (!prepare_application_metadata(
1777
- call,
1778
- static_cast<int>(
1779
- op->data.send_status_from_server.trailing_metadata_count),
1780
- op->data.send_status_from_server.trailing_metadata, 1, 1,
1781
- nullptr, 0)) {
1782
- for (int n = 0; n < call->send_extra_metadata_count; n++) {
1783
- GRPC_MDELEM_UNREF(call->send_extra_metadata[n].md);
1784
- }
1785
- call->send_extra_metadata_count = 0;
1786
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1787
- goto done_with_error;
1788
- }
1580
+ status_error_.set(status_error);
1581
+
1582
+ send_trailing_metadata_.Set(GrpcStatusMetadata(),
1583
+ op->data.send_status_from_server.status);
1584
+
1585
+ // Ignore any te metadata key value pairs specified.
1586
+ send_trailing_metadata_.Remove(TeMetadata());
1789
1587
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1790
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1588
+ &send_trailing_metadata_;
1791
1589
  stream_op_payload->send_trailing_metadata.sent =
1792
- &call->sent_server_trailing_metadata;
1590
+ &sent_server_trailing_metadata_;
1793
1591
  has_send_ops = true;
1794
1592
  break;
1795
1593
  }
1796
1594
  case GRPC_OP_RECV_INITIAL_METADATA: {
1797
- /* Flag validation: currently allow no flags */
1595
+ // Flag validation: currently allow no flags
1798
1596
  if (op->flags != 0) {
1799
1597
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1800
1598
  goto done_with_error;
1801
1599
  }
1802
- if (call->received_initial_metadata) {
1600
+ if (received_initial_metadata_) {
1803
1601
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1804
1602
  goto done_with_error;
1805
1603
  }
1806
- call->received_initial_metadata = true;
1807
- call->buffered_metadata[0] =
1604
+ received_initial_metadata_ = true;
1605
+ buffered_metadata_[0] =
1808
1606
  op->data.recv_initial_metadata.recv_initial_metadata;
1809
- GRPC_CLOSURE_INIT(&call->receiving_initial_metadata_ready,
1810
- receiving_initial_metadata_ready, bctl,
1811
- grpc_schedule_on_exec_ctx);
1607
+ GRPC_CLOSURE_INIT(
1608
+ &receiving_initial_metadata_ready_,
1609
+ [](void* bctl, grpc_error_handle error) {
1610
+ static_cast<BatchControl*>(bctl)->ReceivingInitialMetadataReady(
1611
+ error);
1612
+ },
1613
+ bctl, grpc_schedule_on_exec_ctx);
1812
1614
  stream_op->recv_initial_metadata = true;
1813
1615
  stream_op_payload->recv_initial_metadata.recv_initial_metadata =
1814
- &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1616
+ &recv_initial_metadata_;
1815
1617
  stream_op_payload->recv_initial_metadata.recv_initial_metadata_ready =
1816
- &call->receiving_initial_metadata_ready;
1817
- if (!call->is_client) {
1618
+ &receiving_initial_metadata_ready_;
1619
+ if (is_client()) {
1620
+ stream_op_payload->recv_initial_metadata.trailing_metadata_available =
1621
+ &is_trailers_only_;
1622
+ } else {
1818
1623
  stream_op_payload->recv_initial_metadata.peer_string =
1819
- &call->peer_string;
1624
+ peer_string_atm_ptr();
1820
1625
  }
1821
1626
  ++num_recv_ops;
1822
1627
  break;
1823
1628
  }
1824
1629
  case GRPC_OP_RECV_MESSAGE: {
1825
- /* Flag validation: currently allow no flags */
1630
+ // Flag validation: currently allow no flags
1826
1631
  if (op->flags != 0) {
1827
1632
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1828
1633
  goto done_with_error;
1829
1634
  }
1830
- if (call->receiving_message) {
1635
+ if (receiving_message_) {
1831
1636
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1832
1637
  goto done_with_error;
1833
1638
  }
1834
- call->receiving_message = true;
1639
+ receiving_message_ = true;
1835
1640
  stream_op->recv_message = true;
1836
- call->receiving_buffer = op->data.recv_message.recv_message;
1837
- stream_op_payload->recv_message.recv_message = &call->receiving_stream;
1838
- GRPC_CLOSURE_INIT(&call->receiving_stream_ready,
1839
- receiving_stream_ready_in_call_combiner, bctl,
1840
- grpc_schedule_on_exec_ctx);
1641
+ receiving_slice_buffer_.reset();
1642
+ receiving_buffer_ = op->data.recv_message.recv_message;
1643
+ stream_op_payload->recv_message.recv_message = &receiving_slice_buffer_;
1644
+ receiving_stream_flags_ = 0;
1645
+ stream_op_payload->recv_message.flags = &receiving_stream_flags_;
1646
+ stream_op_payload->recv_message.call_failed_before_recv_message =
1647
+ &call_failed_before_recv_message_;
1648
+ GRPC_CLOSURE_INIT(
1649
+ &receiving_stream_ready_,
1650
+ [](void* bctlp, grpc_error_handle error) {
1651
+ auto* bctl = static_cast<BatchControl*>(bctlp);
1652
+ auto* call = bctl->call_;
1653
+ // Yields the call combiner before processing the received
1654
+ // message.
1655
+ GRPC_CALL_COMBINER_STOP(call->call_combiner(),
1656
+ "recv_message_ready");
1657
+ bctl->ReceivingStreamReady(error);
1658
+ },
1659
+ bctl, grpc_schedule_on_exec_ctx);
1841
1660
  stream_op_payload->recv_message.recv_message_ready =
1842
- &call->receiving_stream_ready;
1661
+ &receiving_stream_ready_;
1843
1662
  ++num_recv_ops;
1844
1663
  break;
1845
1664
  }
1846
1665
  case GRPC_OP_RECV_STATUS_ON_CLIENT: {
1847
- /* Flag validation: currently allow no flags */
1666
+ // Flag validation: currently allow no flags
1848
1667
  if (op->flags != 0) {
1849
1668
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1850
1669
  goto done_with_error;
1851
1670
  }
1852
- if (!call->is_client) {
1671
+ if (!is_client()) {
1853
1672
  error = GRPC_CALL_ERROR_NOT_ON_SERVER;
1854
1673
  goto done_with_error;
1855
1674
  }
1856
- if (call->requested_final_op) {
1675
+ if (requested_final_op_) {
1857
1676
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1858
1677
  goto done_with_error;
1859
1678
  }
1860
- call->requested_final_op = true;
1861
- call->buffered_metadata[1] =
1679
+ requested_final_op_ = true;
1680
+ buffered_metadata_[1] =
1862
1681
  op->data.recv_status_on_client.trailing_metadata;
1863
- call->final_op.client.status = op->data.recv_status_on_client.status;
1864
- call->final_op.client.status_details =
1682
+ final_op_.client.status = op->data.recv_status_on_client.status;
1683
+ final_op_.client.status_details =
1865
1684
  op->data.recv_status_on_client.status_details;
1866
- call->final_op.client.error_string =
1685
+ final_op_.client.error_string =
1867
1686
  op->data.recv_status_on_client.error_string;
1868
1687
  stream_op->recv_trailing_metadata = true;
1869
1688
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1870
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1689
+ &recv_trailing_metadata_;
1871
1690
  stream_op_payload->recv_trailing_metadata.collect_stats =
1872
- &call->final_info.stats.transport_stream_stats;
1873
- GRPC_CLOSURE_INIT(&call->receiving_trailing_metadata_ready,
1874
- receiving_trailing_metadata_ready, bctl,
1875
- grpc_schedule_on_exec_ctx);
1691
+ &final_info_.stats.transport_stream_stats;
1692
+ GRPC_CLOSURE_INIT(
1693
+ &receiving_trailing_metadata_ready_,
1694
+ [](void* bctl, grpc_error_handle error) {
1695
+ static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
1696
+ error);
1697
+ },
1698
+ bctl, grpc_schedule_on_exec_ctx);
1876
1699
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1877
- &call->receiving_trailing_metadata_ready;
1700
+ &receiving_trailing_metadata_ready_;
1878
1701
  ++num_recv_ops;
1879
1702
  break;
1880
1703
  }
1881
1704
  case GRPC_OP_RECV_CLOSE_ON_SERVER: {
1882
- /* Flag validation: currently allow no flags */
1705
+ // Flag validation: currently allow no flags
1883
1706
  if (op->flags != 0) {
1884
1707
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1885
1708
  goto done_with_error;
1886
1709
  }
1887
- if (call->is_client) {
1710
+ if (is_client()) {
1888
1711
  error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
1889
1712
  goto done_with_error;
1890
1713
  }
1891
- if (call->requested_final_op) {
1714
+ if (requested_final_op_) {
1892
1715
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1893
1716
  goto done_with_error;
1894
1717
  }
1895
- call->requested_final_op = true;
1896
- call->final_op.server.cancelled =
1897
- op->data.recv_close_on_server.cancelled;
1718
+ requested_final_op_ = true;
1719
+ final_op_.server.cancelled = op->data.recv_close_on_server.cancelled;
1898
1720
  stream_op->recv_trailing_metadata = true;
1899
1721
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1900
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1722
+ &recv_trailing_metadata_;
1901
1723
  stream_op_payload->recv_trailing_metadata.collect_stats =
1902
- &call->final_info.stats.transport_stream_stats;
1903
- GRPC_CLOSURE_INIT(&call->receiving_trailing_metadata_ready,
1904
- receiving_trailing_metadata_ready, bctl,
1905
- grpc_schedule_on_exec_ctx);
1724
+ &final_info_.stats.transport_stream_stats;
1725
+ GRPC_CLOSURE_INIT(
1726
+ &receiving_trailing_metadata_ready_,
1727
+ [](void* bctl, grpc_error_handle error) {
1728
+ static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
1729
+ error);
1730
+ },
1731
+ bctl, grpc_schedule_on_exec_ctx);
1906
1732
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1907
- &call->receiving_trailing_metadata_ready;
1733
+ &receiving_trailing_metadata_ready_;
1908
1734
  ++num_recv_ops;
1909
1735
  break;
1910
1736
  }
1911
1737
  }
1912
1738
  }
1913
1739
 
1914
- GRPC_CALL_INTERNAL_REF(call, "completion");
1740
+ InternalRef("completion");
1915
1741
  if (!is_notify_tag_closure) {
1916
- GPR_ASSERT(grpc_cq_begin_op(call->cq, notify_tag));
1742
+ GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
1917
1743
  }
1918
1744
  bctl->set_num_steps_to_complete((has_send_ops ? 1 : 0) + num_recv_ops);
1919
1745
 
1920
1746
  if (has_send_ops) {
1921
- GRPC_CLOSURE_INIT(&bctl->finish_batch, finish_batch, bctl,
1922
- grpc_schedule_on_exec_ctx);
1923
- stream_op->on_complete = &bctl->finish_batch;
1747
+ GRPC_CLOSURE_INIT(
1748
+ &bctl->finish_batch_,
1749
+ [](void* bctl, grpc_error_handle error) {
1750
+ static_cast<BatchControl*>(bctl)->FinishBatch(error);
1751
+ },
1752
+ bctl, grpc_schedule_on_exec_ctx);
1753
+ stream_op->on_complete = &bctl->finish_batch_;
1924
1754
  }
1925
1755
 
1926
- gpr_atm_rel_store(&call->any_ops_sent_atm, 1);
1927
- execute_batch(call, stream_op, &bctl->start_batch);
1756
+ ExecuteBatch(stream_op, &bctl->start_batch_);
1928
1757
 
1929
1758
  done:
1930
1759
  return error;
1931
1760
 
1932
1761
  done_with_error:
1933
- /* reverse any mutations that occurred */
1762
+ // reverse any mutations that occurred
1934
1763
  if (stream_op->send_initial_metadata) {
1935
- call->sent_initial_metadata = false;
1936
- grpc_metadata_batch_clear(&call->metadata_batch[0][0]);
1764
+ sent_initial_metadata_ = false;
1765
+ send_initial_metadata_.Clear();
1937
1766
  }
1938
1767
  if (stream_op->send_message) {
1939
- call->sending_message = false;
1940
- call->sending_stream->Orphan();
1768
+ sending_message_ = false;
1941
1769
  }
1942
1770
  if (stream_op->send_trailing_metadata) {
1943
- call->sent_final_op = false;
1944
- grpc_metadata_batch_clear(&call->metadata_batch[0][1]);
1771
+ sent_final_op_ = false;
1772
+ send_trailing_metadata_.Clear();
1945
1773
  }
1946
1774
  if (stream_op->recv_initial_metadata) {
1947
- call->received_initial_metadata = false;
1775
+ received_initial_metadata_ = false;
1948
1776
  }
1949
1777
  if (stream_op->recv_message) {
1950
- call->receiving_message = false;
1778
+ receiving_message_ = false;
1951
1779
  }
1952
1780
  if (stream_op->recv_trailing_metadata) {
1953
- call->requested_final_op = false;
1781
+ requested_final_op_ = false;
1954
1782
  }
1955
1783
  goto done;
1956
1784
  }
1957
1785
 
1786
+ void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
1787
+ void (*destroy)(void*)) {
1788
+ if (context_[elem].destroy) {
1789
+ context_[elem].destroy(context_[elem].value);
1790
+ }
1791
+ context_[elem].value = value;
1792
+ context_[elem].destroy = destroy;
1793
+ }
1794
+
1795
+ ///////////////////////////////////////////////////////////////////////////////
1796
+ // Metadata validation helpers
1797
+
1798
+ namespace {
1799
+ bool ValidateMetadata(size_t count, grpc_metadata* metadata) {
1800
+ for (size_t i = 0; i < count; i++) {
1801
+ grpc_metadata* md = &metadata[i];
1802
+ if (!GRPC_LOG_IF_ERROR("validate_metadata",
1803
+ grpc_validate_header_key_is_legal(md->key))) {
1804
+ return false;
1805
+ } else if (!grpc_is_binary_header_internal(md->key) &&
1806
+ !GRPC_LOG_IF_ERROR(
1807
+ "validate_metadata",
1808
+ grpc_validate_header_nonbin_value_is_legal(md->value))) {
1809
+ return false;
1810
+ } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
1811
+ // HTTP2 hpack encoding has a maximum limit.
1812
+ return false;
1813
+ }
1814
+ }
1815
+ return true;
1816
+ }
1817
+ } // namespace
1818
+
1819
+ ///////////////////////////////////////////////////////////////////////////////
1820
+ // PromiseBasedCall
1821
+ // Will be folded into Call once the promise conversion is done
1822
+
1823
+ class PromiseBasedCall : public Call,
1824
+ public Activity,
1825
+ public Wakeable,
1826
+ public grpc_event_engine::experimental::EventEngine::
1827
+ Closure /* for deadlines */ {
1828
+ public:
1829
+ PromiseBasedCall(Arena* arena, const grpc_call_create_args& args);
1830
+
1831
+ void ContextSet(grpc_context_index elem, void* value,
1832
+ void (*destroy)(void* value)) override;
1833
+ void* ContextGet(grpc_context_index elem) const override;
1834
+ void SetCompletionQueue(grpc_completion_queue* cq) override;
1835
+
1836
+ // Implementation of call refcounting: move this to DualRefCounted once we
1837
+ // don't need to maintain FilterStackCall compatibility
1838
+ void ExternalRef() final {
1839
+ refs_.fetch_add(MakeRefPair(1, 0), std::memory_order_relaxed);
1840
+ }
1841
+ void ExternalUnref() final {
1842
+ const uint64_t prev_ref_pair =
1843
+ refs_.fetch_add(MakeRefPair(-1, 1), std::memory_order_acq_rel);
1844
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
1845
+ if (GPR_UNLIKELY(strong_refs == 1)) {
1846
+ Orphan();
1847
+ }
1848
+ // Now drop the weak ref.
1849
+ InternalUnref("external_ref");
1850
+ }
1851
+ void InternalRef(const char*) final {
1852
+ refs_.fetch_add(MakeRefPair(0, 1), std::memory_order_relaxed);
1853
+ }
1854
+ void InternalUnref(const char*) final {
1855
+ const uint64_t prev_ref_pair =
1856
+ refs_.fetch_sub(MakeRefPair(0, 1), std::memory_order_acq_rel);
1857
+ if (GPR_UNLIKELY(prev_ref_pair == MakeRefPair(0, 1))) {
1858
+ DeleteThis();
1859
+ }
1860
+ }
1861
+
1862
+ // Activity methods
1863
+ void ForceImmediateRepoll() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override;
1864
+ Waker MakeOwningWaker() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override {
1865
+ InternalRef("wakeup");
1866
+ // If ASAN is defined, we leverage it to detect dropped Waker objects.
1867
+ // Usually Waker must be destroyed or woken up, but (especially with arenas)
1868
+ // it's not uncommon to create a Waker and then do neither. In that case it's
1869
+ // incredibly fraught to diagnose where the dropped reference to this object was
1870
+ // created. Instead, leverage ASAN and create a new object per expected wakeup.
1871
+ // Now when we drop such an object ASAN will fail and we'll get a callstack to
1872
+ // the creation of the waker in question.
1873
+ #if defined(__has_feature)
1874
+ #if __has_feature(address_sanitizer)
1875
+ #define GRPC_CALL_USES_ASAN_WAKER
1876
+ class AsanWaker final : public Wakeable {
1877
+ public:
1878
+ explicit AsanWaker(PromiseBasedCall* call) : call_(call) {}
1879
+
1880
+ void Wakeup() override {
1881
+ call_->Wakeup();
1882
+ delete this;
1883
+ }
1884
+
1885
+ void Drop() override {
1886
+ call_->Drop();
1887
+ delete this;
1888
+ }
1889
+
1890
+ std::string ActivityDebugTag() const override {
1891
+ return call_->DebugTag();
1892
+ }
1893
+
1894
+ private:
1895
+ PromiseBasedCall* call_;
1896
+ };
1897
+ return Waker(new AsanWaker(this));
1898
+ #endif
1899
+ #endif
1900
+ #ifndef GRPC_CALL_USES_ASAN_WAKER
1901
+ return Waker(this);
1902
+ #endif
1903
+ }
1904
+ Waker MakeNonOwningWaker() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) override;
1905
+
1906
+ // Wakeable methods
1907
+ void Wakeup() override {
1908
+ channel()->event_engine()->Run([this] {
1909
+ ApplicationCallbackExecCtx app_exec_ctx;
1910
+ ExecCtx exec_ctx;
1911
+ {
1912
+ ScopedContext activity_context(this);
1913
+ MutexLock lock(&mu_);
1914
+ Update();
1915
+ }
1916
+ InternalUnref("wakeup");
1917
+ });
1918
+ }
1919
+ void Drop() override { InternalUnref("wakeup"); }
1920
+
1921
+ void RunInContext(absl::AnyInvocable<void()> fn) {
1922
+ if (Activity::current() == this) {
1923
+ fn();
1924
+ } else {
1925
+ InternalRef("in_context");
1926
+ channel()->event_engine()->Run([this, fn = std::move(fn)]() mutable {
1927
+ ApplicationCallbackExecCtx app_exec_ctx;
1928
+ ExecCtx exec_ctx;
1929
+ {
1930
+ ScopedContext activity_context(this);
1931
+ MutexLock lock(&mu_);
1932
+ fn();
1933
+ Update();
1934
+ }
1935
+ InternalUnref("in_context");
1936
+ });
1937
+ }
1938
+ }
1939
+
1940
+ grpc_compression_algorithm test_only_compression_algorithm() override {
1941
+ abort();
1942
+ }
1943
+ uint32_t test_only_message_flags() override { abort(); }
1944
+ uint32_t test_only_encodings_accepted_by_peer() override { abort(); }
1945
+ grpc_compression_algorithm compression_for_level(
1946
+ grpc_compression_level) override {
1947
+ abort();
1948
+ }
1949
+
1950
+ // This should return nullptr for the promise stack (and alternative means
1951
+ // for that functionality be invented)
1952
+ grpc_call_stack* call_stack() override { return nullptr; }
1953
+
1954
+ void UpdateDeadline(Timestamp deadline);
1955
+ void ResetDeadline();
1956
+ // Implementation of EventEngine::Closure, called when deadline expires
1957
+ void Run() override;
1958
+
1959
+ protected:
1960
+ class ScopedContext
1961
+ : public ScopedActivity,
1962
+ public promise_detail::Context<Arena>,
1963
+ public promise_detail::Context<grpc_call_context_element>,
1964
+ public promise_detail::Context<CallContext>,
1965
+ public promise_detail::Context<CallFinalization> {
1966
+ public:
1967
+ explicit ScopedContext(PromiseBasedCall* call)
1968
+ : ScopedActivity(call),
1969
+ promise_detail::Context<Arena>(call->arena()),
1970
+ promise_detail::Context<grpc_call_context_element>(call->context_),
1971
+ promise_detail::Context<CallContext>(&call->call_context_),
1972
+ promise_detail::Context<CallFinalization>(&call->finalization_) {}
1973
+ };
1974
+
1975
+ class Completion {
1976
+ public:
1977
+ Completion() : index_(kNullIndex) {}
1978
+ ~Completion() { GPR_ASSERT(index_ == kNullIndex); }
1979
+ explicit Completion(uint8_t index) : index_(index) {}
1980
+ Completion(const Completion& other) = delete;
1981
+ Completion& operator=(const Completion& other) = delete;
1982
+ Completion(Completion&& other) noexcept : index_(other.index_) {
1983
+ other.index_ = kNullIndex;
1984
+ }
1985
+ Completion& operator=(Completion&& other) noexcept {
1986
+ GPR_ASSERT(index_ == kNullIndex);
1987
+ index_ = other.index_;
1988
+ other.index_ = kNullIndex;
1989
+ return *this;
1990
+ }
1991
+
1992
+ uint8_t index() const { return index_; }
1993
+ uint8_t TakeIndex() { return std::exchange(index_, kNullIndex); }
1994
+ bool has_value() const { return index_ != kNullIndex; }
1995
+
1996
+ std::string ToString() const {
1997
+ return index_ == kNullIndex ? "null"
1998
+ : std::to_string(static_cast<int>(index_));
1999
+ }
2000
+
2001
+ private:
2002
+ enum : uint8_t { kNullIndex = 0xff };
2003
+ uint8_t index_;
2004
+ };
2005
+
2006
+ ~PromiseBasedCall() override {
2007
+ if (non_owning_wakeable_) non_owning_wakeable_->DropActivity();
2008
+ if (cq_) GRPC_CQ_INTERNAL_UNREF(cq_, "bind");
2009
+ }
2010
+
2011
+ // Enumerates why a Completion is still pending
2012
+ enum class PendingOp {
2013
+ // We're in the midst of starting a batch of operations
2014
+ kStartingBatch = 0,
2015
+ // The following correspond with the batch operations from above
2016
+ kReceiveInitialMetadata,
2017
+ kReceiveStatusOnClient,
2018
+ kSendMessage,
2019
+ kReceiveMessage,
2020
+ };
2021
+
2022
+ static constexpr const char* PendingOpString(PendingOp reason) {
2023
+ switch (reason) {
2024
+ case PendingOp::kStartingBatch:
2025
+ return "StartingBatch";
2026
+ case PendingOp::kReceiveInitialMetadata:
2027
+ return "ReceiveInitialMetadata";
2028
+ case PendingOp::kReceiveStatusOnClient:
2029
+ return "ReceiveStatusOnClient";
2030
+ case PendingOp::kSendMessage:
2031
+ return "SendMessage";
2032
+ case PendingOp::kReceiveMessage:
2033
+ return "ReceiveMessage";
2034
+ }
2035
+ return "Unknown";
2036
+ }
2037
+
2038
+ static constexpr uint8_t PendingOpBit(PendingOp reason) {
2039
+ return 1 << static_cast<int>(reason);
2040
+ }
2041
+
2042
+ Mutex* mu() const ABSL_LOCK_RETURNED(mu_) { return &mu_; }
2043
+
2044
+ // Begin work on a completion, recording the tag/closure to notify.
2045
+ // Use the op selected in \a ops to determine the index to allocate into.
2046
+ // Starts the "StartingBatch" PendingOp immediately.
2047
+ // Assumes at least one operation in \a ops.
2048
+ Completion StartCompletion(void* tag, bool is_closure, const grpc_op* ops)
2049
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2050
+ // Add one pending op to the completion, and return it.
2051
+ Completion AddOpToCompletion(const Completion& completion, PendingOp reason)
2052
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2053
+ // Finish one op on the completion. Must have been previously been added.
2054
+ // The completion as a whole finishes when all pending ops finish.
2055
+ void FinishOpOnCompletion(Completion* completion, PendingOp reason)
2056
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2057
+ // Mark the completion as failed. Does not finish it.
2058
+ void FailCompletion(const Completion& completion);
2059
+ // Run the promise polling loop until it stalls.
2060
+ void Update() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_);
2061
+ // Update the promise state once.
2062
+ virtual void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) = 0;
2063
+ // Accept the stats from the context (call once we have proof the transport is
2064
+ // done with them).
2065
+ // Right now this means that promise based calls do not record correct stats
2066
+ // with census if they are cancelled.
2067
+ // TODO(ctiller): this should be remedied before promise based calls are
2068
+ // dexperimentalized.
2069
+ void AcceptTransportStatsFromContext() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) {
2070
+ final_stats_ = *call_context_.call_stats();
2071
+ }
2072
+
2073
+ grpc_completion_queue* cq() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu_) { return cq_; }
2074
+
2075
+ void CToMetadata(grpc_metadata* metadata, size_t count,
2076
+ grpc_metadata_batch* batch);
2077
+
2078
+ std::string ActivityDebugTag() const override { return DebugTag(); }
2079
+
2080
+ // At the end of the call run any finalization actions.
2081
+ void RunFinalization(grpc_status_code status, const char* status_details) {
2082
+ grpc_call_final_info final_info;
2083
+ final_info.stats = final_stats_;
2084
+ final_info.final_status = status;
2085
+ final_info.error_string = status_details;
2086
+ finalization_.Run(&final_info);
2087
+ }
2088
+
2089
+ private:
2090
+ union CompletionInfo {
2091
+ struct Pending {
2092
+ // Bitmask of PendingOps
2093
+ uint8_t pending_op_bits;
2094
+ bool is_closure;
2095
+ bool success;
2096
+ void* tag;
2097
+ } pending;
2098
+ grpc_cq_completion completion;
2099
+ };
2100
+
2101
+ class NonOwningWakable final : public Wakeable {
2102
+ public:
2103
+ explicit NonOwningWakable(PromiseBasedCall* call) : call_(call) {}
2104
+
2105
+ // Ref the Handle (not the activity).
2106
+ void Ref() { refs_.fetch_add(1, std::memory_order_relaxed); }
2107
+
2108
+ // Activity is going away... drop its reference and sever the connection
2109
+ // back.
2110
+ void DropActivity() ABSL_LOCKS_EXCLUDED(mu_) {
2111
+ auto unref = absl::MakeCleanup([this]() { Unref(); });
2112
+ MutexLock lock(&mu_);
2113
+ GPR_ASSERT(call_ != nullptr);
2114
+ call_ = nullptr;
2115
+ }
2116
+
2117
+ // Activity needs to wake up (if it still exists!) - wake it up, and drop
2118
+ // the ref that was kept for this handle.
2119
+ void Wakeup() override ABSL_LOCKS_EXCLUDED(mu_) {
2120
+ // Drop the ref to the handle at end of scope (we have one ref = one
2121
+ // wakeup semantics).
2122
+ auto unref = absl::MakeCleanup([this]() { Unref(); });
2123
+ ReleasableMutexLock lock(&mu_);
2124
+ // Note that activity refcount can drop to zero, but we could win the lock
2125
+ // against DropActivity, so we need to only increase activities refcount
2126
+ // if it is non-zero.
2127
+ if (call_ != nullptr && call_->RefIfNonZero()) {
2128
+ PromiseBasedCall* call = call_;
2129
+ lock.Release();
2130
+ // Activity still exists and we have a reference: wake it up, which will
2131
+ // drop the ref.
2132
+ call->Wakeup();
2133
+ }
2134
+ }
2135
+
2136
+ std::string ActivityDebugTag() const override {
2137
+ MutexLock lock(&mu_);
2138
+ return call_ == nullptr ? "<unknown>" : call_->DebugTag();
2139
+ }
2140
+
2141
+ void Drop() override { Unref(); }
2142
+
2143
+ private:
2144
+ // Unref the Handle (not the activity).
2145
+ void Unref() {
2146
+ if (1 == refs_.fetch_sub(1, std::memory_order_acq_rel)) {
2147
+ delete this;
2148
+ }
2149
+ }
2150
+
2151
+ mutable Mutex mu_;
2152
+ // We have two initial refs: one for the wakeup that this is created for,
2153
+ // and will be dropped by Wakeup, and the other for the activity which is
2154
+ // dropped by DropActivity.
2155
+ std::atomic<size_t> refs_{2};
2156
+ PromiseBasedCall* call_ ABSL_GUARDED_BY(mu_);
2157
+ };
2158
+
2159
+ static void OnDestroy(void* arg, grpc_error_handle) {
2160
+ auto* call = static_cast<PromiseBasedCall*>(arg);
2161
+ ScopedContext context(call);
2162
+ call->DeleteThis();
2163
+ }
2164
+
2165
+ // First 32 bits are strong refs, next 32 bits are weak refs.
2166
+ static uint64_t MakeRefPair(uint32_t strong, uint32_t weak) {
2167
+ return (static_cast<uint64_t>(strong) << 32) + static_cast<int64_t>(weak);
2168
+ }
2169
+ static uint32_t GetStrongRefs(uint64_t ref_pair) {
2170
+ return static_cast<uint32_t>(ref_pair >> 32);
2171
+ }
2172
+ static uint32_t GetWeakRefs(uint64_t ref_pair) {
2173
+ return static_cast<uint32_t>(ref_pair & 0xffffffffu);
2174
+ }
2175
+
2176
+ bool RefIfNonZero() {
2177
+ uint64_t prev_ref_pair = refs_.load(std::memory_order_acquire);
2178
+ do {
2179
+ const uint32_t strong_refs = GetStrongRefs(prev_ref_pair);
2180
+ if (strong_refs == 0) return false;
2181
+ } while (!refs_.compare_exchange_weak(
2182
+ prev_ref_pair, prev_ref_pair + MakeRefPair(1, 0),
2183
+ std::memory_order_acq_rel, std::memory_order_acquire));
2184
+ return true;
2185
+ }
2186
+
2187
+ mutable Mutex mu_;
2188
+ std::atomic<uint64_t> refs_{MakeRefPair(1, 0)};
2189
+ CallContext call_context_{this};
2190
+ bool keep_polling_ ABSL_GUARDED_BY(mu()) = false;
2191
+
2192
+ // Contexts for various subsystems (security, tracing, ...).
2193
+ grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
2194
+ grpc_completion_queue* cq_ ABSL_GUARDED_BY(mu_);
2195
+ NonOwningWakable* non_owning_wakeable_ ABSL_GUARDED_BY(mu_) = nullptr;
2196
+ CompletionInfo completion_info_[6];
2197
+ grpc_call_stats final_stats_{};
2198
+ CallFinalization finalization_;
2199
+ // Current deadline.
2200
+ Timestamp deadline_ = Timestamp::InfFuture();
2201
+ grpc_event_engine::experimental::EventEngine::TaskHandle deadline_task_;
2202
+ };
2203
+
2204
+ template <typename T>
2205
+ grpc_error_handle MakePromiseBasedCall(grpc_call_create_args* args,
2206
+ grpc_call** out_call) {
2207
+ Channel* channel = args->channel.get();
2208
+
2209
+ auto alloc = Arena::CreateWithAlloc(channel->CallSizeEstimate(), sizeof(T),
2210
+ channel->allocator());
2211
+ PromiseBasedCall* call = new (alloc.second) T(alloc.first, args);
2212
+ *out_call = call->c_ptr();
2213
+ GPR_DEBUG_ASSERT(Call::FromC(*out_call) == call);
2214
+ return absl::OkStatus();
2215
+ }
2216
+
2217
+ PromiseBasedCall::PromiseBasedCall(Arena* arena,
2218
+ const grpc_call_create_args& args)
2219
+ : Call(arena, args.server_transport_data == nullptr, args.send_deadline,
2220
+ args.channel->Ref()),
2221
+ cq_(args.cq) {
2222
+ if (args.cq != nullptr) {
2223
+ GPR_ASSERT(args.pollset_set_alternative == nullptr &&
2224
+ "Only one of 'cq' and 'pollset_set_alternative' should be "
2225
+ "non-nullptr.");
2226
+ GRPC_CQ_INTERNAL_REF(args.cq, "bind");
2227
+ call_context_.pollent_ =
2228
+ grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args.cq));
2229
+ }
2230
+ if (args.pollset_set_alternative != nullptr) {
2231
+ call_context_.pollent_ = grpc_polling_entity_create_from_pollset_set(
2232
+ args.pollset_set_alternative);
2233
+ }
2234
+ }
2235
+
2236
+ Waker PromiseBasedCall::MakeNonOwningWaker() {
2237
+ if (non_owning_wakeable_ == nullptr) {
2238
+ non_owning_wakeable_ = new NonOwningWakable(this);
2239
+ } else {
2240
+ non_owning_wakeable_->Ref();
2241
+ }
2242
+ return Waker(non_owning_wakeable_);
2243
+ }
2244
+
2245
+ void PromiseBasedCall::CToMetadata(grpc_metadata* metadata, size_t count,
2246
+ grpc_metadata_batch* b) {
2247
+ for (size_t i = 0; i < count; i++) {
2248
+ grpc_metadata* md = &metadata[i];
2249
+ auto key = StringViewFromSlice(md->key);
2250
+ // Filter "content-length metadata"
2251
+ if (key == "content-length") continue;
2252
+ b->Append(key, Slice(CSliceRef(md->value)),
2253
+ [md](absl::string_view error, const Slice& value) {
2254
+ gpr_log(GPR_DEBUG, "Append error: %s",
2255
+ absl::StrCat("key=", StringViewFromSlice(md->key),
2256
+ " error=", error,
2257
+ " value=", value.as_string_view())
2258
+ .c_str());
2259
+ });
2260
+ }
2261
+ }
2262
+
2263
+ void PromiseBasedCall::ContextSet(grpc_context_index elem, void* value,
2264
+ void (*destroy)(void*)) {
2265
+ if (context_[elem].destroy != nullptr) {
2266
+ context_[elem].destroy(context_[elem].value);
2267
+ }
2268
+ context_[elem].value = value;
2269
+ context_[elem].destroy = destroy;
2270
+ }
2271
+
2272
+ void* PromiseBasedCall::ContextGet(grpc_context_index elem) const {
2273
+ return context_[elem].value;
2274
+ }
2275
+
2276
+ PromiseBasedCall::Completion PromiseBasedCall::StartCompletion(
2277
+ void* tag, bool is_closure, const grpc_op* ops) {
2278
+ Completion c(BatchSlotForOp(ops[0].op));
2279
+ if (grpc_call_trace.enabled()) {
2280
+ gpr_log(GPR_INFO, "%sStartCompletion %s tag=%p", DebugTag().c_str(),
2281
+ c.ToString().c_str(), tag);
2282
+ }
2283
+ if (!is_closure) {
2284
+ grpc_cq_begin_op(cq(), tag);
2285
+ }
2286
+ completion_info_[c.index()].pending = {
2287
+ PendingOpBit(PendingOp::kStartingBatch), is_closure, true, tag};
2288
+ return c;
2289
+ }
2290
+
2291
+ PromiseBasedCall::Completion PromiseBasedCall::AddOpToCompletion(
2292
+ const Completion& completion, PendingOp reason) {
2293
+ if (grpc_call_trace.enabled()) {
2294
+ gpr_log(GPR_INFO, "%sAddOpToCompletion %s %s", DebugTag().c_str(),
2295
+ completion.ToString().c_str(), PendingOpString(reason));
2296
+ }
2297
+ auto& pending_op_bits =
2298
+ completion_info_[completion.index()].pending.pending_op_bits;
2299
+ GPR_ASSERT((pending_op_bits & PendingOpBit(reason)) == 0);
2300
+ pending_op_bits |= PendingOpBit(reason);
2301
+ return Completion(completion.index());
2302
+ }
2303
+
2304
+ void PromiseBasedCall::FailCompletion(const Completion& completion) {
2305
+ if (grpc_call_trace.enabled()) {
2306
+ gpr_log(GPR_INFO, "%sFailCompletion %s", DebugTag().c_str(),
2307
+ completion.ToString().c_str());
2308
+ }
2309
+ completion_info_[completion.index()].pending.success = false;
2310
+ }
2311
+
2312
+ void PromiseBasedCall::FinishOpOnCompletion(Completion* completion,
2313
+ PendingOp reason) {
2314
+ if (grpc_call_trace.enabled()) {
2315
+ auto pending_op_bits =
2316
+ completion_info_[completion->index()].pending.pending_op_bits;
2317
+ bool success = completion_info_[completion->index()].pending.success;
2318
+ std::vector<const char*> pending;
2319
+ for (size_t i = 0; i < 8 * sizeof(pending_op_bits); i++) {
2320
+ if (static_cast<PendingOp>(i) == reason) continue;
2321
+ if (pending_op_bits & (1 << i)) {
2322
+ pending.push_back(PendingOpString(static_cast<PendingOp>(i)));
2323
+ }
2324
+ }
2325
+ gpr_log(
2326
+ GPR_INFO, "%sFinishOpOnCompletion %s %s %s", DebugTag().c_str(),
2327
+ completion->ToString().c_str(), PendingOpString(reason),
2328
+ (pending.empty()
2329
+ ? (success ? std::string("done") : std::string("failed"))
2330
+ : absl::StrFormat("pending_ops={%s}", absl::StrJoin(pending, ",")))
2331
+ .c_str());
2332
+ }
2333
+ const uint8_t i = completion->TakeIndex();
2334
+ GPR_ASSERT(i < GPR_ARRAY_SIZE(completion_info_));
2335
+ CompletionInfo::Pending& pending = completion_info_[i].pending;
2336
+ GPR_ASSERT(pending.pending_op_bits & PendingOpBit(reason));
2337
+ pending.pending_op_bits &= ~PendingOpBit(reason);
2338
+ auto error = pending.success ? absl::OkStatus() : absl::CancelledError();
2339
+ if (pending.pending_op_bits == 0) {
2340
+ if (pending.is_closure) {
2341
+ ExecCtx::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(pending.tag),
2342
+ error);
2343
+ } else {
2344
+ grpc_cq_end_op(
2345
+ cq(), pending.tag, error, [](void*, grpc_cq_completion*) {}, nullptr,
2346
+ &completion_info_[i].completion);
2347
+ }
2348
+ }
2349
+ }
2350
+
2351
+ void PromiseBasedCall::Update() {
2352
+ keep_polling_ = false;
2353
+ do {
2354
+ UpdateOnce();
2355
+ } while (std::exchange(keep_polling_, false));
2356
+ }
2357
+
2358
+ void PromiseBasedCall::ForceImmediateRepoll() { keep_polling_ = true; }
2359
+
2360
+ void PromiseBasedCall::SetCompletionQueue(grpc_completion_queue* cq) {
2361
+ MutexLock lock(&mu_);
2362
+ cq_ = cq;
2363
+ GRPC_CQ_INTERNAL_REF(cq, "bind");
2364
+ call_context_.pollent_ =
2365
+ grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
2366
+ }
2367
+
2368
+ void PromiseBasedCall::UpdateDeadline(Timestamp deadline) {
2369
+ if (deadline >= deadline_) return;
2370
+ auto* const event_engine = channel()->event_engine();
2371
+ if (deadline_ != Timestamp::InfFuture()) {
2372
+ if (!event_engine->Cancel(deadline_task_)) return;
2373
+ } else {
2374
+ InternalRef("deadline");
2375
+ }
2376
+ event_engine->RunAfter(deadline - Timestamp::Now(), this);
2377
+ }
2378
+
2379
+ void PromiseBasedCall::ResetDeadline() {
2380
+ if (deadline_ == Timestamp::InfFuture()) return;
2381
+ auto* const event_engine = channel()->event_engine();
2382
+ if (!event_engine->Cancel(deadline_task_)) return;
2383
+ deadline_ = Timestamp::InfFuture();
2384
+ InternalUnref("deadline");
2385
+ }
2386
+
2387
+ void PromiseBasedCall::Run() {
2388
+ ApplicationCallbackExecCtx callback_exec_ctx;
2389
+ ExecCtx exec_ctx;
2390
+ CancelWithError(absl::DeadlineExceededError("Deadline exceeded"));
2391
+ InternalUnref("deadline");
2392
+ }
2393
+
2394
+ ///////////////////////////////////////////////////////////////////////////////
2395
+ // CallContext
2396
+
2397
+ void CallContext::RunInContext(absl::AnyInvocable<void()> fn) {
2398
+ call_->RunInContext(std::move(fn));
2399
+ }
2400
+
2401
+ void CallContext::IncrementRefCount(const char* reason) {
2402
+ call_->InternalRef(reason);
2403
+ }
2404
+
2405
+ void CallContext::Unref(const char* reason) { call_->InternalUnref(reason); }
2406
+
2407
+ void CallContext::UpdateDeadline(Timestamp deadline) {
2408
+ call_->UpdateDeadline(deadline);
2409
+ }
2410
+
2411
+ ///////////////////////////////////////////////////////////////////////////////
2412
+ // ClientPromiseBasedCall
2413
+
2414
+ class ClientPromiseBasedCall final : public PromiseBasedCall {
2415
+ public:
2416
+ ClientPromiseBasedCall(Arena* arena, grpc_call_create_args* args)
2417
+ : PromiseBasedCall(arena, *args) {
2418
+ global_stats().IncrementClientCallsCreated();
2419
+ ScopedContext context(this);
2420
+ send_initial_metadata_ =
2421
+ GetContext<Arena>()->MakePooled<ClientMetadata>(GetContext<Arena>());
2422
+ send_initial_metadata_->Set(HttpPathMetadata(), std::move(*args->path));
2423
+ if (args->authority.has_value()) {
2424
+ send_initial_metadata_->Set(HttpAuthorityMetadata(),
2425
+ std::move(*args->authority));
2426
+ }
2427
+ if (auto* channelz_channel = channel()->channelz_node()) {
2428
+ channelz_channel->RecordCallStarted();
2429
+ }
2430
+ if (args->send_deadline != Timestamp::InfFuture()) {
2431
+ UpdateDeadline(args->send_deadline);
2432
+ }
2433
+ }
2434
+
2435
+ ~ClientPromiseBasedCall() override {
2436
+ ScopedContext context(this);
2437
+ send_initial_metadata_.reset();
2438
+ recv_status_on_client_ = absl::monostate();
2439
+ promise_ = ArenaPromise<ServerMetadataHandle>();
2440
+ // Need to destroy the pipes under the ScopedContext above, so we move them
2441
+ // out here and then allow the destructors to run at end of scope, but
2442
+ // before context.
2443
+ auto c2s = std::move(client_to_server_messages_);
2444
+ auto s2c = std::move(server_to_client_messages_);
2445
+ }
2446
+
2447
+ absl::string_view GetServerAuthority() const override { abort(); }
2448
+ void CancelWithError(grpc_error_handle error) override;
2449
+ bool Completed() override;
2450
+ void Orphan() override {
2451
+ MutexLock lock(mu());
2452
+ ScopedContext ctx(this);
2453
+ if (!completed_) Finish(ServerMetadataFromStatus(absl::CancelledError()));
2454
+ }
2455
+ bool is_trailers_only() const override {
2456
+ MutexLock lock(mu());
2457
+ return is_trailers_only_;
2458
+ }
2459
+ bool failed_before_recv_message() const override { abort(); }
2460
+
2461
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
2462
+ bool is_notify_tag_closure) override;
2463
+
2464
+ std::string DebugTag() const override {
2465
+ return absl::StrFormat("CLIENT_CALL[%p]: ", this);
2466
+ }
2467
+
2468
+ private:
2469
+ // Poll the underlying promise (and sundry objects) once.
2470
+ void UpdateOnce() ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu()) override;
2471
+ // Finish the call with the given status/trailing metadata.
2472
+ void Finish(ServerMetadataHandle trailing_metadata)
2473
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2474
+ // Validate that a set of ops is valid for a client call.
2475
+ grpc_call_error ValidateBatch(const grpc_op* ops, size_t nops) const
2476
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2477
+ // Commit a valid batch of operations to be executed.
2478
+ void CommitBatch(const grpc_op* ops, size_t nops,
2479
+ const Completion& completion)
2480
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2481
+ // Start the underlying promise.
2482
+ void StartPromise(ClientMetadataHandle client_initial_metadata)
2483
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2484
+ // Publish some metadata out to the application.
2485
+ static void PublishMetadataArray(grpc_metadata_array* array,
2486
+ ServerMetadata* md);
2487
+ // Publish status out to the application.
2488
+ void PublishStatus(
2489
+ grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2490
+ ServerMetadataHandle trailing_metadata)
2491
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2492
+ // Publish server initial metadata out to the application.
2493
+ void PublishInitialMetadata(ServerMetadata* metadata)
2494
+ ABSL_EXCLUSIVE_LOCKS_REQUIRED(mu());
2495
+
2496
+ ArenaPromise<ServerMetadataHandle> promise_ ABSL_GUARDED_BY(mu());
2497
+ Latch<ServerMetadata*> server_initial_metadata_ ABSL_GUARDED_BY(mu());
2498
+ Pipe<MessageHandle> client_to_server_messages_ ABSL_GUARDED_BY(mu()){arena()};
2499
+ Pipe<MessageHandle> server_to_client_messages_ ABSL_GUARDED_BY(mu()){arena()};
2500
+
2501
+ ClientMetadataHandle send_initial_metadata_;
2502
+ grpc_metadata_array* recv_initial_metadata_ ABSL_GUARDED_BY(mu()) = nullptr;
2503
+ grpc_byte_buffer** recv_message_ ABSL_GUARDED_BY(mu()) = nullptr;
2504
+ absl::variant<absl::monostate,
2505
+ grpc_op::grpc_op_data::grpc_op_recv_status_on_client,
2506
+ ServerMetadataHandle>
2507
+ recv_status_on_client_ ABSL_GUARDED_BY(mu());
2508
+ absl::optional<PipeSender<MessageHandle>::PushType> outstanding_send_
2509
+ ABSL_GUARDED_BY(mu());
2510
+ absl::optional<PipeReceiver<MessageHandle>::NextType> outstanding_recv_
2511
+ ABSL_GUARDED_BY(mu());
2512
+ absl::optional<LatchWaitPromise<ServerMetadata*>>
2513
+ server_initial_metadata_ready_;
2514
+ absl::optional<grpc_compression_algorithm> incoming_compression_algorithm_;
2515
+ Completion recv_initial_metadata_completion_ ABSL_GUARDED_BY(mu());
2516
+ Completion recv_status_on_client_completion_ ABSL_GUARDED_BY(mu());
2517
+ Completion send_message_completion_ ABSL_GUARDED_BY(mu());
2518
+ Completion recv_message_completion_ ABSL_GUARDED_BY(mu());
2519
+ bool completed_ ABSL_GUARDED_BY(mu()) = false;
2520
+ bool is_trailers_only_ ABSL_GUARDED_BY(mu());
2521
+ };
2522
+
2523
+ void ClientPromiseBasedCall::StartPromise(
2524
+ ClientMetadataHandle client_initial_metadata) {
2525
+ GPR_ASSERT(!promise_.has_value());
2526
+ promise_ = channel()->channel_stack()->MakeClientCallPromise(CallArgs{
2527
+ std::move(client_initial_metadata),
2528
+ &server_initial_metadata_,
2529
+ &client_to_server_messages_.receiver,
2530
+ &server_to_client_messages_.sender,
2531
+ });
2532
+ }
2533
+
2534
+ void ClientPromiseBasedCall::CancelWithError(grpc_error_handle error) {
2535
+ MutexLock lock(mu());
2536
+ ScopedContext context(this);
2537
+ Finish(ServerMetadataFromStatus(grpc_error_to_absl_status(error)));
2538
+ }
2539
+
2540
+ grpc_call_error ClientPromiseBasedCall::ValidateBatch(const grpc_op* ops,
2541
+ size_t nops) const {
2542
+ BitSet<8> got_ops;
2543
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2544
+ const grpc_op& op = ops[op_idx];
2545
+ switch (op.op) {
2546
+ case GRPC_OP_SEND_INITIAL_METADATA:
2547
+ if (!AreInitialMetadataFlagsValid(op.flags)) {
2548
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
2549
+ }
2550
+ if (!ValidateMetadata(op.data.send_initial_metadata.count,
2551
+ op.data.send_initial_metadata.metadata)) {
2552
+ return GRPC_CALL_ERROR_INVALID_METADATA;
2553
+ }
2554
+ break;
2555
+ case GRPC_OP_SEND_MESSAGE:
2556
+ if (!AreWriteFlagsValid(op.flags)) {
2557
+ return GRPC_CALL_ERROR_INVALID_FLAGS;
2558
+ }
2559
+ break;
2560
+ case GRPC_OP_RECV_INITIAL_METADATA:
2561
+ case GRPC_OP_RECV_MESSAGE:
2562
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
2563
+ case GRPC_OP_RECV_STATUS_ON_CLIENT:
2564
+ if (op.flags != 0) return GRPC_CALL_ERROR_INVALID_FLAGS;
2565
+ break;
2566
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
2567
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
2568
+ return GRPC_CALL_ERROR_NOT_ON_CLIENT;
2569
+ }
2570
+ if (got_ops.is_set(op.op)) return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
2571
+ got_ops.set(op.op);
2572
+ }
2573
+ return GRPC_CALL_OK;
2574
+ }
2575
+
2576
+ void ClientPromiseBasedCall::CommitBatch(const grpc_op* ops, size_t nops,
2577
+ const Completion& completion) {
2578
+ for (size_t op_idx = 0; op_idx < nops; op_idx++) {
2579
+ const grpc_op& op = ops[op_idx];
2580
+ switch (op.op) {
2581
+ case GRPC_OP_SEND_INITIAL_METADATA: {
2582
+ // compression not implemented
2583
+ GPR_ASSERT(
2584
+ !op.data.send_initial_metadata.maybe_compression_level.is_set);
2585
+ if (!completed_) {
2586
+ CToMetadata(op.data.send_initial_metadata.metadata,
2587
+ op.data.send_initial_metadata.count,
2588
+ send_initial_metadata_.get());
2589
+ StartPromise(std::move(send_initial_metadata_));
2590
+ }
2591
+ } break;
2592
+ case GRPC_OP_RECV_INITIAL_METADATA: {
2593
+ recv_initial_metadata_ =
2594
+ op.data.recv_initial_metadata.recv_initial_metadata;
2595
+ server_initial_metadata_ready_.emplace(server_initial_metadata_.Wait());
2596
+ recv_initial_metadata_completion_ =
2597
+ AddOpToCompletion(completion, PendingOp::kReceiveInitialMetadata);
2598
+ } break;
2599
+ case GRPC_OP_RECV_STATUS_ON_CLIENT: {
2600
+ recv_status_on_client_completion_ =
2601
+ AddOpToCompletion(completion, PendingOp::kReceiveStatusOnClient);
2602
+ if (auto* finished_metadata =
2603
+ absl::get_if<ServerMetadataHandle>(&recv_status_on_client_)) {
2604
+ PublishStatus(op.data.recv_status_on_client,
2605
+ std::move(*finished_metadata));
2606
+ } else {
2607
+ recv_status_on_client_ = op.data.recv_status_on_client;
2608
+ }
2609
+ } break;
2610
+ case GRPC_OP_SEND_MESSAGE: {
2611
+ GPR_ASSERT(!outstanding_send_.has_value());
2612
+ if (!completed_) {
2613
+ send_message_completion_ =
2614
+ AddOpToCompletion(completion, PendingOp::kSendMessage);
2615
+ SliceBuffer send;
2616
+ grpc_slice_buffer_swap(
2617
+ &op.data.send_message.send_message->data.raw.slice_buffer,
2618
+ send.c_slice_buffer());
2619
+ outstanding_send_.emplace(client_to_server_messages_.sender.Push(
2620
+ GetContext<Arena>()->MakePooled<Message>(std::move(send),
2621
+ op.flags)));
2622
+ } else {
2623
+ FailCompletion(completion);
2624
+ }
2625
+ } break;
2626
+ case GRPC_OP_RECV_MESSAGE: {
2627
+ GPR_ASSERT(!outstanding_recv_.has_value());
2628
+ recv_message_ = op.data.recv_message.recv_message;
2629
+ recv_message_completion_ =
2630
+ AddOpToCompletion(completion, PendingOp::kReceiveMessage);
2631
+ outstanding_recv_.emplace(server_to_client_messages_.receiver.Next());
2632
+ } break;
2633
+ case GRPC_OP_SEND_CLOSE_FROM_CLIENT: {
2634
+ client_to_server_messages_.sender.Close();
2635
+ } break;
2636
+ case GRPC_OP_SEND_STATUS_FROM_SERVER:
2637
+ case GRPC_OP_RECV_CLOSE_ON_SERVER:
2638
+ abort(); // unreachable
2639
+ }
2640
+ }
2641
+ }
2642
+
2643
+ grpc_call_error ClientPromiseBasedCall::StartBatch(const grpc_op* ops,
2644
+ size_t nops,
2645
+ void* notify_tag,
2646
+ bool is_notify_tag_closure) {
2647
+ MutexLock lock(mu());
2648
+ ScopedContext activity_context(this);
2649
+ if (nops == 0) {
2650
+ EndOpImmediately(cq(), notify_tag, is_notify_tag_closure);
2651
+ return GRPC_CALL_OK;
2652
+ }
2653
+ const grpc_call_error validation_result = ValidateBatch(ops, nops);
2654
+ if (validation_result != GRPC_CALL_OK) {
2655
+ return validation_result;
2656
+ }
2657
+ Completion completion =
2658
+ StartCompletion(notify_tag, is_notify_tag_closure, ops);
2659
+ CommitBatch(ops, nops, completion);
2660
+ Update();
2661
+ FinishOpOnCompletion(&completion, PendingOp::kStartingBatch);
2662
+ return GRPC_CALL_OK;
2663
+ }
2664
+
2665
+ void ClientPromiseBasedCall::PublishInitialMetadata(ServerMetadata* metadata) {
2666
+ incoming_compression_algorithm_ =
2667
+ metadata->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
2668
+ server_initial_metadata_ready_.reset();
2669
+ GPR_ASSERT(recv_initial_metadata_ != nullptr);
2670
+ PublishMetadataArray(std::exchange(recv_initial_metadata_, nullptr),
2671
+ metadata);
2672
+ FinishOpOnCompletion(&recv_initial_metadata_completion_,
2673
+ PendingOp::kReceiveInitialMetadata);
2674
+ }
2675
+
2676
+ void ClientPromiseBasedCall::UpdateOnce() {
2677
+ if (grpc_call_trace.enabled()) {
2678
+ auto present_and_completion_text =
2679
+ [](const char* caption, bool has,
2680
+ const Completion& completion) -> std::string {
2681
+ if (has) {
2682
+ if (completion.has_value()) {
2683
+ return absl::StrCat(caption, ":",
2684
+ static_cast<int>(completion.index()), " ");
2685
+ } else {
2686
+ return absl::StrCat(caption,
2687
+ ":!!BUG:operation is present, no completion!! ");
2688
+ }
2689
+ } else {
2690
+ if (!completion.has_value()) {
2691
+ return "";
2692
+ } else {
2693
+ return absl::StrCat(
2694
+ caption, ":no-op:", static_cast<int>(completion.index()), " ");
2695
+ }
2696
+ }
2697
+ };
2698
+ gpr_log(
2699
+ GPR_INFO, "%sUpdateOnce: %s%s%shas_promise=%s", DebugTag().c_str(),
2700
+ present_and_completion_text("server_initial_metadata_ready",
2701
+ server_initial_metadata_ready_.has_value(),
2702
+ recv_initial_metadata_completion_)
2703
+ .c_str(),
2704
+ present_and_completion_text("outstanding_send",
2705
+ outstanding_send_.has_value(),
2706
+ send_message_completion_)
2707
+ .c_str(),
2708
+ present_and_completion_text("outstanding_recv",
2709
+ outstanding_recv_.has_value(),
2710
+ recv_message_completion_)
2711
+ .c_str(),
2712
+ promise_.has_value() ? "true" : "false");
2713
+ }
2714
+ if (send_message_completion_.has_value()) {
2715
+ FinishOpOnCompletion(&send_message_completion_, PendingOp::kSendMessage);
2716
+ }
2717
+ if (server_initial_metadata_ready_.has_value()) {
2718
+ Poll<ServerMetadata**> r = (*server_initial_metadata_ready_)();
2719
+ if (ServerMetadata*** server_initial_metadata =
2720
+ absl::get_if<ServerMetadata**>(&r)) {
2721
+ PublishInitialMetadata(**server_initial_metadata);
2722
+ } else if (completed_) {
2723
+ ServerMetadata no_metadata{GetContext<Arena>()};
2724
+ PublishInitialMetadata(&no_metadata);
2725
+ }
2726
+ }
2727
+ if (outstanding_send_.has_value()) {
2728
+ Poll<bool> r = (*outstanding_send_)();
2729
+ if (const bool* result = absl::get_if<bool>(&r)) {
2730
+ outstanding_send_.reset();
2731
+ if (!*result) {
2732
+ FailCompletion(send_message_completion_);
2733
+ Finish(ServerMetadataFromStatus(absl::Status(
2734
+ absl::StatusCode::kInternal, "Failed to send message to server")));
2735
+ }
2736
+ }
2737
+ }
2738
+ if (promise_.has_value()) {
2739
+ Poll<ServerMetadataHandle> r = promise_();
2740
+ if (grpc_call_trace.enabled()) {
2741
+ gpr_log(GPR_INFO, "%sUpdateOnce: promise returns %s", DebugTag().c_str(),
2742
+ PollToString(r, [](const ServerMetadataHandle& h) {
2743
+ return h->DebugString();
2744
+ }).c_str());
2745
+ }
2746
+ if (auto* result = absl::get_if<ServerMetadataHandle>(&r)) {
2747
+ AcceptTransportStatsFromContext();
2748
+ Finish(std::move(*result));
2749
+ }
2750
+ }
2751
+ if (incoming_compression_algorithm_.has_value() &&
2752
+ outstanding_recv_.has_value()) {
2753
+ Poll<NextResult<MessageHandle>> r = (*outstanding_recv_)();
2754
+ if (auto* result = absl::get_if<NextResult<MessageHandle>>(&r)) {
2755
+ outstanding_recv_.reset();
2756
+ if (result->has_value()) {
2757
+ MessageHandle& message = **result;
2758
+ if ((message->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
2759
+ (incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
2760
+ *recv_message_ = grpc_raw_compressed_byte_buffer_create(
2761
+ nullptr, 0, *incoming_compression_algorithm_);
2762
+ } else {
2763
+ *recv_message_ = grpc_raw_byte_buffer_create(nullptr, 0);
2764
+ }
2765
+ grpc_slice_buffer_move_into(message->payload()->c_slice_buffer(),
2766
+ &(*recv_message_)->data.raw.slice_buffer);
2767
+ if (grpc_call_trace.enabled()) {
2768
+ gpr_log(GPR_INFO,
2769
+ "%sUpdateOnce: outstanding_recv finishes: received %" PRIdPTR
2770
+ " byte message",
2771
+ DebugTag().c_str(),
2772
+ (*recv_message_)->data.raw.slice_buffer.length);
2773
+ }
2774
+ } else {
2775
+ if (grpc_call_trace.enabled()) {
2776
+ gpr_log(
2777
+ GPR_INFO,
2778
+ "%sUpdateOnce: outstanding_recv finishes: received end-of-stream",
2779
+ DebugTag().c_str());
2780
+ }
2781
+ *recv_message_ = nullptr;
2782
+ }
2783
+ FinishOpOnCompletion(&recv_message_completion_,
2784
+ PendingOp::kReceiveMessage);
2785
+ } else if (completed_) {
2786
+ if (grpc_call_trace.enabled()) {
2787
+ gpr_log(GPR_INFO,
2788
+ "%sUpdateOnce: outstanding_recv finishes: promise has "
2789
+ "completed without queuing a message, forcing end-of-stream",
2790
+ DebugTag().c_str());
2791
+ }
2792
+ outstanding_recv_.reset();
2793
+ *recv_message_ = nullptr;
2794
+ FinishOpOnCompletion(&recv_message_completion_,
2795
+ PendingOp::kReceiveMessage);
2796
+ }
2797
+ }
2798
+ }
2799
+
2800
+ void ClientPromiseBasedCall::Finish(ServerMetadataHandle trailing_metadata) {
2801
+ if (grpc_call_trace.enabled()) {
2802
+ gpr_log(GPR_INFO, "%sFinish: %s", DebugTag().c_str(),
2803
+ trailing_metadata->DebugString().c_str());
2804
+ }
2805
+ promise_ = ArenaPromise<ServerMetadataHandle>();
2806
+ ResetDeadline();
2807
+ completed_ = true;
2808
+ if (recv_initial_metadata_ != nullptr) {
2809
+ ForceImmediateRepoll();
2810
+ }
2811
+ const bool pending_initial_metadata =
2812
+ server_initial_metadata_ready_.has_value();
2813
+ server_initial_metadata_ready_.reset();
2814
+ Poll<ServerMetadata**> r = server_initial_metadata_.Wait()();
2815
+ if (auto* result = absl::get_if<ServerMetadata**>(&r)) {
2816
+ if (pending_initial_metadata) PublishInitialMetadata(**result);
2817
+ is_trailers_only_ = false;
2818
+ } else {
2819
+ if (pending_initial_metadata) {
2820
+ ServerMetadata no_metadata{GetContext<Arena>()};
2821
+ PublishInitialMetadata(&no_metadata);
2822
+ }
2823
+ is_trailers_only_ = true;
2824
+ }
2825
+ if (auto* channelz_channel = channel()->channelz_node()) {
2826
+ if (trailing_metadata->get(GrpcStatusMetadata())
2827
+ .value_or(GRPC_STATUS_UNKNOWN) == GRPC_STATUS_OK) {
2828
+ channelz_channel->RecordCallSucceeded();
2829
+ } else {
2830
+ channelz_channel->RecordCallFailed();
2831
+ }
2832
+ }
2833
+ if (auto* status_request =
2834
+ absl::get_if<grpc_op::grpc_op_data::grpc_op_recv_status_on_client>(
2835
+ &recv_status_on_client_)) {
2836
+ PublishStatus(*status_request, std::move(trailing_metadata));
2837
+ } else {
2838
+ recv_status_on_client_ = std::move(trailing_metadata);
2839
+ }
2840
+ }
2841
+
2842
+ namespace {
2843
+ std::string MakeErrorString(const ServerMetadata* trailing_metadata) {
2844
+ std::string out = absl::StrCat(
2845
+ trailing_metadata->get(GrpcStatusFromWire()).value_or(false)
2846
+ ? "Error received from peer"
2847
+ : "Error generated by client",
2848
+ "grpc_status: ",
2849
+ grpc_status_code_to_string(trailing_metadata->get(GrpcStatusMetadata())
2850
+ .value_or(GRPC_STATUS_UNKNOWN)));
2851
+ if (const Slice* message =
2852
+ trailing_metadata->get_pointer(GrpcMessageMetadata())) {
2853
+ absl::StrAppend(&out, "\ngrpc_message: ", message->as_string_view());
2854
+ }
2855
+ if (auto annotations = trailing_metadata->get_pointer(GrpcStatusContext())) {
2856
+ absl::StrAppend(&out, "\nStatus Context:");
2857
+ for (const std::string& annotation : *annotations) {
2858
+ absl::StrAppend(&out, "\n ", annotation);
2859
+ }
2860
+ }
2861
+ return out;
2862
+ }
2863
+ } // namespace
2864
+
2865
+ void ClientPromiseBasedCall::PublishStatus(
2866
+ grpc_op::grpc_op_data::grpc_op_recv_status_on_client op_args,
2867
+ ServerMetadataHandle trailing_metadata) {
2868
+ const grpc_status_code status = trailing_metadata->get(GrpcStatusMetadata())
2869
+ .value_or(GRPC_STATUS_UNKNOWN);
2870
+ *op_args.status = status;
2871
+ absl::string_view message_string;
2872
+ if (Slice* message = trailing_metadata->get_pointer(GrpcMessageMetadata())) {
2873
+ message_string = message->as_string_view();
2874
+ *op_args.status_details = message->Ref().TakeCSlice();
2875
+ } else {
2876
+ *op_args.status_details = grpc_empty_slice();
2877
+ }
2878
+ if (message_string.empty()) {
2879
+ RunFinalization(status, nullptr);
2880
+ } else {
2881
+ std::string error_string(message_string);
2882
+ RunFinalization(status, error_string.c_str());
2883
+ }
2884
+ if (op_args.error_string != nullptr && status != GRPC_STATUS_OK) {
2885
+ *op_args.error_string =
2886
+ gpr_strdup(MakeErrorString(trailing_metadata.get()).c_str());
2887
+ }
2888
+ PublishMetadataArray(op_args.trailing_metadata, trailing_metadata.get());
2889
+ // Clear state saying we have a RECV_STATUS_ON_CLIENT outstanding
2890
+ // (so we don't call through twice)
2891
+ recv_status_on_client_ = absl::monostate();
2892
+ FinishOpOnCompletion(&recv_status_on_client_completion_,
2893
+ PendingOp::kReceiveStatusOnClient);
2894
+ }
2895
+
2896
+ void ClientPromiseBasedCall::PublishMetadataArray(grpc_metadata_array* array,
2897
+ ServerMetadata* md) {
2898
+ const auto md_count = md->count();
2899
+ if (md_count > array->capacity) {
2900
+ array->capacity =
2901
+ std::max(array->capacity + md->count(), array->capacity * 3 / 2);
2902
+ array->metadata = static_cast<grpc_metadata*>(
2903
+ gpr_realloc(array->metadata, sizeof(grpc_metadata) * array->capacity));
2904
+ }
2905
+ PublishToAppEncoder encoder(array);
2906
+ md->Encode(&encoder);
2907
+ }
2908
+
2909
+ bool ClientPromiseBasedCall::Completed() {
2910
+ MutexLock lock(mu());
2911
+ return completed_;
2912
+ }
2913
+
2914
+ gpr_atm* CallContext::peer_string_atm_ptr() {
2915
+ return call_->peer_string_atm_ptr();
2916
+ }
2917
+
2918
+ } // namespace grpc_core
2919
+
2920
+ ///////////////////////////////////////////////////////////////////////////////
2921
+ // C-based API
2922
+
2923
+ void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
2924
+ grpc_core::ExecCtx exec_ctx;
2925
+ return grpc_core::Call::FromC(call)->arena()->Alloc(size);
2926
+ }
2927
+
2928
+ size_t grpc_call_get_initial_size_estimate() {
2929
+ return grpc_core::FilterStackCall::InitialSizeEstimate();
2930
+ }
2931
+
2932
+ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
2933
+ grpc_call** out_call) {
2934
+ if (grpc_core::IsPromiseBasedClientCallEnabled() &&
2935
+ args->channel->is_promising()) {
2936
+ if (args->server_transport_data == nullptr) {
2937
+ return grpc_core::MakePromiseBasedCall<grpc_core::ClientPromiseBasedCall>(
2938
+ args, out_call);
2939
+ }
2940
+ }
2941
+ return grpc_core::FilterStackCall::Create(args, out_call);
2942
+ }
2943
+
2944
+ void grpc_call_set_completion_queue(grpc_call* call,
2945
+ grpc_completion_queue* cq) {
2946
+ grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
2947
+ }
2948
+
2949
+ void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
2950
+
2951
+ void grpc_call_unref(grpc_call* c) {
2952
+ grpc_core::ExecCtx exec_ctx;
2953
+ grpc_core::Call::FromC(c)->ExternalUnref();
2954
+ }
2955
+
2956
+ char* grpc_call_get_peer(grpc_call* call) {
2957
+ return grpc_core::Call::FromC(call)->GetPeer();
2958
+ }
2959
+
2960
+ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
2961
+ return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
2962
+ }
2963
+
2964
+ grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
2965
+ GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
2966
+ GPR_ASSERT(reserved == nullptr);
2967
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2968
+ grpc_core::ExecCtx exec_ctx;
2969
+ grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
2970
+ return GRPC_CALL_OK;
2971
+ }
2972
+
2973
+ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
2974
+ grpc_status_code status,
2975
+ const char* description,
2976
+ void* reserved) {
2977
+ GRPC_API_TRACE(
2978
+ "grpc_call_cancel_with_status("
2979
+ "c=%p, status=%d, description=%s, reserved=%p)",
2980
+ 4, (c, (int)status, description, reserved));
2981
+ GPR_ASSERT(reserved == nullptr);
2982
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
2983
+ grpc_core::ExecCtx exec_ctx;
2984
+ grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
2985
+ return GRPC_CALL_OK;
2986
+ }
2987
+
2988
+ void grpc_call_cancel_internal(grpc_call* call) {
2989
+ grpc_core::Call::FromC(call)->CancelWithError(absl::CancelledError());
2990
+ }
2991
+
2992
+ grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
2993
+ grpc_call* call) {
2994
+ return grpc_core::Call::FromC(call)->test_only_compression_algorithm();
2995
+ }
2996
+
2997
+ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
2998
+ return grpc_core::Call::FromC(call)->test_only_message_flags();
2999
+ }
3000
+
3001
+ uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
3002
+ return grpc_core::Call::FromC(call)->test_only_encodings_accepted_by_peer();
3003
+ }
3004
+
3005
+ grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
3006
+ return grpc_core::Call::FromC(call)->arena();
3007
+ }
3008
+
3009
+ grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
3010
+ return grpc_core::Call::FromC(call)->call_stack();
3011
+ }
3012
+
1958
3013
  grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
1959
3014
  size_t nops, void* tag, void* reserved) {
1960
- grpc_call_error err;
1961
-
1962
3015
  GRPC_API_TRACE(
1963
3016
  "grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, "
1964
3017
  "reserved=%p)",
1965
3018
  5, (call, ops, (unsigned long)nops, tag, reserved));
1966
3019
 
1967
3020
  if (reserved != nullptr) {
1968
- err = GRPC_CALL_ERROR;
3021
+ return GRPC_CALL_ERROR;
1969
3022
  } else {
1970
3023
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1971
3024
  grpc_core::ExecCtx exec_ctx;
1972
- err = call_start_batch(call, ops, nops, tag, 0);
3025
+ return grpc_core::Call::FromC(call)->StartBatch(ops, nops, tag, false);
1973
3026
  }
1974
-
1975
- return err;
1976
3027
  }
1977
3028
 
1978
3029
  grpc_call_error grpc_call_start_batch_and_execute(grpc_call* call,
1979
3030
  const grpc_op* ops,
1980
3031
  size_t nops,
1981
3032
  grpc_closure* closure) {
1982
- return call_start_batch(call, ops, nops, closure, 1);
3033
+ return grpc_core::Call::FromC(call)->StartBatch(ops, nops, closure, true);
1983
3034
  }
1984
3035
 
1985
3036
  void grpc_call_context_set(grpc_call* call, grpc_context_index elem,
1986
3037
  void* value, void (*destroy)(void* value)) {
1987
- if (call->context[elem].destroy) {
1988
- call->context[elem].destroy(call->context[elem].value);
1989
- }
1990
- call->context[elem].value = value;
1991
- call->context[elem].destroy = destroy;
3038
+ return grpc_core::Call::FromC(call)->ContextSet(elem, value, destroy);
1992
3039
  }
1993
3040
 
1994
3041
  void* grpc_call_context_get(grpc_call* call, grpc_context_index elem) {
1995
- return call->context[elem].value;
3042
+ return grpc_core::Call::FromC(call)->ContextGet(elem);
1996
3043
  }
1997
3044
 
1998
- uint8_t grpc_call_is_client(grpc_call* call) { return call->is_client; }
3045
+ uint8_t grpc_call_is_client(grpc_call* call) {
3046
+ return grpc_core::Call::FromC(call)->is_client();
3047
+ }
1999
3048
 
2000
3049
  grpc_compression_algorithm grpc_call_compression_for_level(
2001
3050
  grpc_call* call, grpc_compression_level level) {
2002
- grpc_compression_algorithm algo =
2003
- compression_algorithm_for_level_locked(call, level);
2004
- return algo;
3051
+ return grpc_core::Call::FromC(call)->compression_for_level(level);
3052
+ }
3053
+
3054
+ bool grpc_call_is_trailers_only(const grpc_call* call) {
3055
+ return grpc_core::Call::FromC(call)->is_trailers_only();
3056
+ }
3057
+
3058
+ int grpc_call_failed_before_recv_message(const grpc_call* c) {
3059
+ return grpc_core::Call::FromC(c)->failed_before_recv_message();
3060
+ }
3061
+
3062
+ absl::string_view grpc_call_server_authority(const grpc_call* call) {
3063
+ return grpc_core::Call::FromC(call)->GetServerAuthority();
2005
3064
  }
2006
3065
 
2007
3066
  const char* grpc_call_error_to_string(grpc_call_error error) {