grpc 1.35.0 → 1.47.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 (2272) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +617 -386
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/event_engine/README.md +38 -0
  7. data/include/grpc/event_engine/endpoint_config.h +43 -0
  8. data/include/grpc/event_engine/event_engine.h +434 -0
  9. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  10. data/include/grpc/event_engine/memory_allocator.h +211 -0
  11. data/include/grpc/event_engine/memory_request.h +57 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/event_engine/slice.h +286 -0
  14. data/include/grpc/event_engine/slice_buffer.h +112 -0
  15. data/include/grpc/fork.h +1 -1
  16. data/include/grpc/grpc.h +76 -19
  17. data/include/grpc/grpc_posix.h +22 -18
  18. data/include/grpc/grpc_security.h +378 -195
  19. data/include/grpc/grpc_security_constants.h +17 -14
  20. data/include/grpc/impl/codegen/atm.h +5 -3
  21. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  22. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  23. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  24. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  25. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  26. data/include/grpc/impl/codegen/compression_types.h +2 -2
  27. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  28. data/include/grpc/impl/codegen/fork.h +2 -0
  29. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  30. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  31. data/include/grpc/impl/codegen/grpc_types.h +68 -41
  32. data/include/grpc/impl/codegen/log.h +2 -0
  33. data/include/grpc/impl/codegen/port_platform.h +162 -35
  34. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  35. data/include/grpc/impl/codegen/slice.h +6 -1
  36. data/include/grpc/impl/codegen/status.h +2 -0
  37. data/include/grpc/impl/codegen/sync.h +8 -5
  38. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  39. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  40. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  41. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  42. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  43. data/include/grpc/module.modulemap +14 -14
  44. data/include/grpc/slice.h +1 -12
  45. data/include/grpc/status.h +1 -1
  46. data/include/grpc/support/atm.h +1 -1
  47. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  48. data/include/grpc/support/atm_gcc_sync.h +1 -1
  49. data/include/grpc/support/atm_windows.h +1 -1
  50. data/include/grpc/support/log.h +1 -1
  51. data/include/grpc/support/port_platform.h +1 -1
  52. data/include/grpc/support/sync.h +1 -1
  53. data/include/grpc/support/sync_abseil.h +1 -1
  54. data/include/grpc/support/sync_custom.h +1 -1
  55. data/include/grpc/support/sync_generic.h +1 -1
  56. data/include/grpc/support/sync_posix.h +1 -1
  57. data/include/grpc/support/sync_windows.h +1 -1
  58. data/include/grpc/support/time.h +2 -2
  59. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  60. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +297 -0
  61. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +125 -0
  62. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  63. data/src/core/ext/filters/channel_idle/idle_filter_state.h +66 -0
  64. data/src/core/ext/filters/client_channel/backend_metric.cc +32 -30
  65. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  66. data/src/core/ext/filters/client_channel/backup_poller.cc +22 -17
  67. data/src/core/ext/filters/client_channel/backup_poller.h +2 -3
  68. data/src/core/ext/filters/client_channel/channel_connectivity.cc +181 -203
  69. data/src/core/ext/filters/client_channel/client_channel.cc +1429 -3634
  70. data/src/core/ext/filters/client_channel/client_channel.h +583 -56
  71. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -7
  72. data/src/core/ext/filters/client_channel/client_channel_channelz.h +14 -4
  73. data/src/core/ext/filters/client_channel/client_channel_factory.cc +7 -1
  74. data/src/core/ext/filters/client_channel/client_channel_factory.h +26 -19
  75. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +19 -31
  76. data/src/core/ext/filters/client_channel/config_selector.cc +3 -1
  77. data/src/core/ext/filters/client_channel/config_selector.h +37 -15
  78. data/src/core/ext/filters/client_channel/connector.h +28 -22
  79. data/src/core/ext/filters/client_channel/dynamic_filters.cc +35 -21
  80. data/src/core/ext/filters/client_channel/dynamic_filters.h +16 -6
  81. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +27 -163
  82. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +19 -24
  83. data/src/core/ext/filters/client_channel/health/health_check_client.cc +141 -581
  84. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -158
  85. data/src/core/ext/filters/client_channel/http_proxy.cc +110 -109
  86. data/src/core/ext/filters/client_channel/http_proxy.h +20 -0
  87. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +10 -5
  88. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  89. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  90. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +18 -2
  91. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +5 -0
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -27
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +350 -213
  94. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  95. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +5 -1
  96. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  97. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
  98. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +11 -4
  99. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -19
  100. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -7
  101. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +408 -0
  102. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  103. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1038 -0
  104. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +54 -0
  105. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +144 -111
  106. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +334 -245
  107. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +865 -0
  108. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +39 -0
  109. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2577 -0
  110. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +205 -195
  111. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +55 -47
  112. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +146 -89
  113. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +418 -275
  114. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +7 -1
  115. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  116. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +219 -133
  117. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +84 -76
  118. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +532 -515
  119. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -29
  120. data/src/core/ext/filters/client_channel/lb_policy.h +168 -141
  121. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -1
  122. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +16 -12
  123. data/src/core/ext/filters/client_channel/lb_policy_registry.h +7 -2
  124. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +31 -67
  125. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +11 -9
  126. data/src/core/ext/filters/client_channel/proxy_mapper.h +1 -1
  127. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -0
  128. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +5 -0
  129. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +151 -0
  130. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +396 -336
  131. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +31 -13
  132. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +33 -26
  133. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +55 -71
  134. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +220 -332
  135. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +52 -30
  136. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +4 -3
  137. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  138. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  139. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +118 -245
  140. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +70 -73
  141. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +14 -8
  142. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +446 -0
  143. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +213 -0
  144. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +113 -0
  145. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +59 -54
  146. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +786 -452
  147. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +46 -263
  148. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +43 -60
  149. data/src/core/ext/filters/client_channel/retry_filter.cc +2695 -0
  150. data/src/core/ext/filters/client_channel/retry_filter.h +30 -0
  151. data/src/core/ext/filters/client_channel/retry_service_config.cc +313 -0
  152. data/src/core/ext/filters/client_channel/retry_service_config.h +111 -0
  153. data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -66
  154. data/src/core/ext/filters/client_channel/retry_throttle.h +18 -6
  155. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +72 -40
  156. data/src/core/ext/filters/client_channel/subchannel.cc +319 -464
  157. data/src/core/ext/filters/client_channel/subchannel.h +163 -154
  158. data/src/core/ext/filters/client_channel/subchannel_interface.h +41 -23
  159. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  160. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +48 -9
  161. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +26 -12
  162. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +558 -0
  163. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +226 -0
  164. data/src/core/ext/filters/deadline/deadline_filter.cc +45 -43
  165. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  166. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +255 -0
  167. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +62 -0
  168. data/src/core/ext/filters/fault_injection/service_config_parser.cc +179 -0
  169. data/src/core/ext/filters/fault_injection/service_config_parser.h +91 -0
  170. data/src/core/ext/filters/http/client/http_client_filter.cc +92 -538
  171. data/src/core/ext/filters/http/client/http_client_filter.h +27 -4
  172. data/src/core/ext/filters/http/client_authority_filter.cc +42 -111
  173. data/src/core/ext/filters/http/client_authority_filter.h +24 -5
  174. data/src/core/ext/filters/http/http_filters_plugin.cc +54 -73
  175. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +68 -157
  176. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +45 -56
  177. data/src/core/ext/filters/http/server/http_server_filter.cc +91 -464
  178. data/src/core/ext/filters/http/server/http_server_filter.h +31 -2
  179. data/src/core/ext/filters/message_size/message_size_filter.cc +78 -90
  180. data/src/core/ext/filters/message_size/message_size_filter.h +13 -6
  181. data/src/core/ext/filters/rbac/rbac_filter.cc +163 -0
  182. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  183. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  184. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  185. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +61 -0
  186. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  187. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +143 -0
  188. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +32 -0
  189. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  190. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +285 -86
  191. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +15 -13
  192. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +778 -235
  193. data/src/core/ext/transport/chttp2/server/chttp2_server.h +13 -2
  194. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -5
  195. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -1
  196. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -0
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +604 -489
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +29 -5
  199. data/src/core/ext/transport/chttp2/transport/context_list.cc +8 -6
  200. data/src/core/ext/transport/chttp2/transport/context_list.h +7 -6
  201. data/src/core/ext/transport/chttp2/transport/flow_control.cc +72 -49
  202. data/src/core/ext/transport/chttp2/transport/flow_control.h +33 -23
  203. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  204. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -26
  205. data/src/core/ext/transport/chttp2/transport/frame_data.h +15 -11
  206. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +24 -20
  207. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -7
  208. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +22 -17
  209. data/src/core/ext/transport/chttp2/transport/frame_ping.h +11 -6
  210. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +23 -17
  211. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -6
  212. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +63 -20
  213. data/src/core/ext/transport/chttp2/transport/frame_settings.h +11 -6
  214. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +20 -14
  215. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +8 -6
  216. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  217. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +526 -757
  218. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +198 -73
  219. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +89 -0
  220. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +74 -0
  221. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +836 -1200
  222. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +109 -84
  223. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +257 -0
  224. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +132 -0
  225. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  226. data/src/core/ext/transport/chttp2/transport/internal.h +80 -79
  227. data/src/core/ext/transport/chttp2/transport/parsing.cc +192 -299
  228. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +15 -11
  229. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  230. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  231. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  232. data/src/core/ext/transport/chttp2/transport/varint.h +41 -28
  233. data/src/core/ext/transport/chttp2/transport/writing.cc +169 -173
  234. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  235. data/src/core/ext/transport/inproc/inproc_transport.cc +190 -216
  236. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  237. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  238. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +482 -0
  239. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  240. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +553 -0
  241. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +444 -0
  242. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2156 -0
  243. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  244. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +151 -0
  245. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  246. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +160 -0
  247. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  248. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +124 -0
  249. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  250. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +102 -0
  251. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  252. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +97 -0
  253. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  254. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +605 -0
  255. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  256. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +103 -0
  257. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  258. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +52 -1
  259. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  260. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +57 -18
  261. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -118
  262. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +761 -386
  263. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +411 -0
  264. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2161 -0
  265. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +50 -29
  266. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +224 -95
  267. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +341 -256
  268. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1943 -800
  269. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  270. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +50 -24
  271. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +61 -27
  272. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +291 -95
  273. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  274. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1381 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +75 -54
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +398 -190
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +22 -8
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +53 -25
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +252 -143
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1285 -493
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +107 -47
  282. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +562 -172
  283. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  284. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +46 -24
  285. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +17 -23
  286. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +49 -95
  287. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  288. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +151 -0
  289. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +146 -118
  290. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +853 -415
  291. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +142 -92
  292. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +807 -340
  293. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  294. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +65 -31
  295. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +235 -89
  296. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1244 -288
  297. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -6
  298. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +36 -17
  299. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  300. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +169 -0
  301. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  302. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +83 -34
  303. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +30 -10
  304. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +118 -32
  305. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  306. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +118 -0
  307. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -37
  308. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +214 -109
  309. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +92 -39
  310. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +449 -131
  311. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  312. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +389 -188
  313. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  314. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +42 -21
  315. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +105 -68
  316. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +616 -242
  317. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +106 -75
  318. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +637 -287
  319. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +63 -0
  320. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +234 -0
  321. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -12
  322. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +96 -49
  323. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  324. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +136 -0
  325. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +165 -0
  326. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +716 -0
  327. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +174 -0
  328. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +721 -0
  329. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +131 -100
  330. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +628 -282
  331. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +63 -25
  332. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +338 -115
  333. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +688 -537
  334. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4135 -1819
  335. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
  336. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +168 -72
  337. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +222 -0
  338. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1052 -0
  339. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  340. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +88 -0
  341. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  342. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +103 -0
  343. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -15
  344. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +91 -46
  345. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  346. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +134 -0
  347. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  348. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +250 -0
  349. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  350. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +94 -0
  351. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  352. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +213 -0
  353. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  354. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  355. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  356. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +218 -0
  357. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  358. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +146 -0
  359. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +42 -0
  360. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +85 -0
  361. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +96 -0
  362. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +375 -0
  363. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +94 -0
  364. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +433 -0
  365. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +64 -0
  366. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +183 -0
  367. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +55 -0
  368. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +168 -0
  369. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +301 -202
  370. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1794 -663
  371. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -2
  372. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
  373. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +114 -49
  374. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +652 -198
  375. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +43 -31
  376. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +176 -104
  377. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +128 -84
  378. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +673 -259
  379. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  380. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +160 -0
  381. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  382. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
  383. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +99 -73
  384. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +550 -282
  385. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -19
  386. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +121 -62
  387. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +138 -0
  388. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +631 -0
  389. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  390. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +112 -0
  391. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  392. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +249 -0
  393. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  394. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +214 -0
  395. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  396. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +116 -56
  397. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +49 -0
  398. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +117 -0
  399. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  400. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +56 -27
  401. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  402. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +46 -24
  403. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +37 -21
  404. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +137 -69
  405. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -19
  406. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +137 -65
  407. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +60 -0
  408. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +170 -0
  409. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  410. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +170 -83
  411. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  412. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +273 -145
  413. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  414. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +268 -132
  415. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  416. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +201 -0
  417. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  418. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
  419. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  420. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +139 -0
  421. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  422. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +76 -36
  423. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  424. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +118 -52
  425. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  426. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  427. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
  428. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +48 -19
  429. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  430. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +127 -0
  431. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  432. data/src/core/ext/upb-generated/google/api/annotations.upb.h +24 -1
  433. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +155 -126
  434. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +791 -385
  435. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +167 -118
  436. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +886 -390
  437. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  438. data/src/core/ext/upb-generated/google/api/http.upb.h +236 -115
  439. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  440. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +111 -0
  441. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  442. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +46 -22
  443. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -283
  444. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2263 -1053
  445. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  446. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +44 -20
  447. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  448. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
  449. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  450. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +197 -93
  451. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  452. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +44 -20
  453. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  454. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +296 -149
  455. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  456. data/src/core/ext/upb-generated/google/rpc/status.upb.h +60 -30
  457. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  458. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +319 -0
  459. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  460. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +111 -48
  461. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +136 -108
  462. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +753 -365
  463. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +28 -13
  464. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +90 -41
  465. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  466. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +70 -35
  467. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  468. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +448 -232
  469. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  470. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +208 -0
  471. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  472. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +764 -0
  473. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  474. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +213 -57
  475. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
  476. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +62 -18
  477. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  478. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +17 -1
  479. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  480. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +64 -20
  481. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  482. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +57 -18
  483. data/src/core/ext/upb-generated/validate/validate.upb.c +407 -295
  484. data/src/core/ext/upb-generated/validate/validate.upb.h +3021 -1221
  485. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  486. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +278 -0
  487. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  488. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +108 -0
  489. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  490. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  491. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  492. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +290 -0
  493. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  494. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +99 -0
  495. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +41 -0
  496. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +79 -0
  497. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +66 -0
  498. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +200 -0
  499. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +56 -0
  500. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +115 -0
  501. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  502. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +103 -0
  503. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +49 -0
  504. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +127 -0
  505. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +68 -0
  506. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +240 -0
  507. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +49 -0
  508. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +121 -0
  509. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  510. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +187 -0
  511. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  512. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +109 -0
  513. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  514. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +878 -0
  515. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  516. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +143 -0
  517. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  518. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +218 -0
  519. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  520. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +103 -0
  521. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  522. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  523. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  524. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  525. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +309 -0
  526. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +140 -0
  527. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  528. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  529. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  530. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  531. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  532. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  533. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  534. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  535. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  536. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  537. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  538. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  539. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  540. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  541. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +22 -12
  542. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  543. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  544. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  545. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +183 -215
  546. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  547. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +393 -0
  548. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +120 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  550. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  551. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +497 -498
  552. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
  553. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  554. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  555. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +28 -23
  556. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  557. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  558. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +225 -224
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +83 -58
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -115
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  568. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  569. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  570. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  571. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  572. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  573. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  574. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  575. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +182 -187
  576. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  577. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  578. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  579. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +267 -197
  580. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +61 -31
  581. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +15 -20
  582. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  583. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  584. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  586. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  587. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +46 -31
  588. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  589. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  590. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +69 -80
  592. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  593. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
  594. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
  595. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  596. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  597. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  598. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  599. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +157 -150
  600. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -16
  601. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -150
  602. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  603. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -39
  606. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  607. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +125 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +70 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +134 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +75 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +85 -67
  616. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +12 -7
  617. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +826 -845
  618. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +166 -151
  619. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  620. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  621. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  622. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  623. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  624. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  625. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  626. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  627. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +32 -39
  628. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  629. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  630. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  631. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  632. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  633. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  634. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  635. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  636. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  637. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  638. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  639. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  640. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  641. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  642. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +50 -0
  644. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  645. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +92 -0
  646. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +55 -0
  647. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +117 -0
  648. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +45 -0
  649. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  650. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  651. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +78 -0
  652. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +35 -0
  653. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +428 -388
  654. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +67 -52
  655. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +22 -22
  656. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  657. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -130
  658. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
  659. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +57 -71
  660. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  661. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +217 -212
  662. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  663. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  664. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  665. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  666. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  667. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +99 -123
  668. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +24 -19
  669. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +19 -26
  670. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  671. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +153 -0
  672. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +55 -0
  673. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  674. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  677. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  678. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
  680. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  681. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +54 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +35 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  684. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  685. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  686. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  687. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +45 -48
  688. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  689. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +40 -47
  690. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  691. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +58 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +40 -0
  693. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  694. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  695. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  696. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  697. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  698. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  699. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  700. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  701. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  702. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  703. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  704. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  705. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  706. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  707. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  708. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  709. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  710. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  711. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  712. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  713. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  714. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  715. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  716. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  717. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  718. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  719. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  720. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  721. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  722. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  723. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  724. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  725. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  726. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  727. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
  728. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  729. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  730. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  731. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  732. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  733. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  734. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  735. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  736. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  737. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  738. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  739. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +9 -14
  740. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  741. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  742. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  743. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  744. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  745. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
  746. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  747. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
  748. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  749. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
  750. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  751. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
  752. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  753. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
  754. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  755. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +189 -213
  756. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  757. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  758. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  759. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  760. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  761. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  762. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  763. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  764. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  765. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  766. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  767. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +38 -0
  768. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  769. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +56 -0
  770. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  771. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +39 -0
  772. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  773. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  774. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  775. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +45 -0
  776. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  777. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +61 -0
  778. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  779. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +46 -0
  780. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  781. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  782. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  783. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  784. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  785. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  786. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  787. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  788. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  789. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  790. data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
  791. data/src/core/ext/xds/certificate_provider_store.cc +10 -0
  792. data/src/core/ext/xds/certificate_provider_store.h +13 -4
  793. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +7 -7
  794. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +4 -4
  795. data/src/core/ext/xds/upb_utils.h +67 -0
  796. data/src/core/ext/xds/xds_api.cc +347 -1925
  797. data/src/core/ext/xds/xds_api.h +127 -405
  798. data/src/core/ext/xds/xds_bootstrap.cc +324 -274
  799. data/src/core/ext/xds/xds_bootstrap.h +61 -26
  800. data/src/core/ext/xds/xds_certificate_provider.cc +192 -81
  801. data/src/core/ext/xds/xds_certificate_provider.h +92 -45
  802. data/src/core/ext/xds/xds_channel_args.h +5 -2
  803. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  804. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  805. data/src/core/ext/xds/xds_client.cc +1166 -867
  806. data/src/core/ext/xds/xds_client.h +172 -160
  807. data/src/core/ext/xds/xds_client_stats.cc +31 -29
  808. data/src/core/ext/xds/xds_client_stats.h +17 -15
  809. data/src/core/ext/xds/xds_cluster.cc +543 -0
  810. data/src/core/ext/xds/xds_cluster.h +111 -0
  811. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +142 -0
  812. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +79 -0
  813. data/src/core/ext/xds/xds_common_types.cc +388 -0
  814. data/src/core/ext/xds/xds_common_types.h +95 -0
  815. data/src/core/ext/xds/xds_endpoint.cc +371 -0
  816. data/src/core/ext/xds/xds_endpoint.h +135 -0
  817. data/src/core/ext/xds/xds_http_fault_filter.cc +227 -0
  818. data/src/core/ext/xds/xds_http_fault_filter.h +64 -0
  819. data/src/core/ext/xds/xds_http_filters.cc +122 -0
  820. data/src/core/ext/xds/xds_http_filters.h +133 -0
  821. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  822. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  823. data/src/core/ext/xds/xds_listener.cc +1049 -0
  824. data/src/core/ext/xds/xds_listener.h +220 -0
  825. data/src/core/ext/xds/xds_resource_type.cc +33 -0
  826. data/src/core/ext/xds/xds_resource_type.h +98 -0
  827. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  828. data/src/core/ext/xds/xds_route_config.cc +1122 -0
  829. data/src/core/ext/xds/xds_route_config.h +218 -0
  830. data/src/core/ext/xds/xds_routing.cc +250 -0
  831. data/src/core/ext/xds/xds_routing.h +101 -0
  832. data/src/core/ext/xds/xds_server_config_fetcher.cc +1250 -66
  833. data/src/core/lib/address_utils/parse_address.cc +340 -0
  834. data/src/core/lib/address_utils/parse_address.h +82 -0
  835. data/src/core/lib/address_utils/sockaddr_utils.cc +442 -0
  836. data/src/core/lib/address_utils/sockaddr_utils.h +98 -0
  837. data/src/core/lib/avl/avl.h +454 -88
  838. data/src/core/lib/backoff/backoff.cc +9 -38
  839. data/src/core/lib/backoff/backoff.h +11 -11
  840. data/src/core/lib/channel/call_finalization.h +90 -0
  841. data/src/core/lib/channel/call_tracer.h +94 -0
  842. data/src/core/lib/channel/channel_args.cc +212 -36
  843. data/src/core/lib/channel/channel_args.h +246 -3
  844. data/src/core/lib/channel/channel_args_preconditioning.cc +42 -0
  845. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  846. data/src/core/lib/channel/channel_stack.cc +77 -17
  847. data/src/core/lib/channel/channel_stack.h +105 -18
  848. data/src/core/lib/channel/channel_stack_builder.cc +19 -288
  849. data/src/core/lib/channel/channel_stack_builder.h +107 -158
  850. data/src/core/lib/channel/channel_stack_builder_impl.cc +97 -0
  851. data/src/core/lib/channel/channel_stack_builder_impl.h +45 -0
  852. data/src/core/lib/channel/channel_trace.cc +13 -20
  853. data/src/core/lib/channel/channel_trace.h +8 -4
  854. data/src/core/lib/channel/channelz.cc +156 -60
  855. data/src/core/lib/channel/channelz.h +73 -32
  856. data/src/core/lib/channel/channelz_registry.cc +27 -19
  857. data/src/core/lib/channel/channelz_registry.h +11 -10
  858. data/src/core/lib/channel/connected_channel.cc +30 -36
  859. data/src/core/lib/channel/connected_channel.h +3 -2
  860. data/src/core/lib/channel/context.h +14 -0
  861. data/src/core/lib/channel/promise_based_filter.cc +1257 -0
  862. data/src/core/lib/channel/promise_based_filter.h +570 -0
  863. data/src/core/lib/channel/status_util.cc +14 -2
  864. data/src/core/lib/channel/status_util.h +9 -3
  865. data/src/core/lib/compression/compression.cc +22 -114
  866. data/src/core/lib/compression/compression_internal.cc +173 -206
  867. data/src/core/lib/compression/compression_internal.h +64 -69
  868. data/src/core/lib/compression/message_compress.cc +13 -13
  869. data/src/core/lib/compression/message_compress.h +2 -2
  870. data/src/core/lib/config/core_configuration.cc +107 -0
  871. data/src/core/lib/config/core_configuration.h +197 -0
  872. data/src/core/lib/debug/stats.cc +1 -1
  873. data/src/core/lib/debug/stats.h +2 -1
  874. data/src/core/lib/debug/stats_data.cc +17 -20
  875. data/src/core/lib/debug/stats_data.h +19 -21
  876. data/src/core/lib/debug/trace.cc +1 -0
  877. data/src/core/lib/debug/trace.h +4 -3
  878. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +48 -0
  879. data/src/core/lib/event_engine/channel_args_endpoint_config.h +43 -0
  880. data/src/core/lib/event_engine/default_event_engine_factory.cc +33 -0
  881. data/src/core/lib/event_engine/event_engine.cc +62 -0
  882. data/src/core/lib/event_engine/event_engine_factory.h +41 -0
  883. data/src/core/lib/event_engine/handle_containers.h +67 -0
  884. data/src/core/lib/event_engine/iomgr_engine.cc +206 -0
  885. data/src/core/lib/event_engine/iomgr_engine.h +118 -0
  886. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  887. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  888. data/src/core/lib/event_engine/slice.cc +102 -0
  889. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  890. data/src/core/lib/event_engine/trace.cc +18 -0
  891. data/src/core/lib/event_engine/trace.h +30 -0
  892. data/src/core/lib/gpr/alloc.cc +4 -3
  893. data/src/core/lib/gpr/atm.cc +1 -1
  894. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  895. data/src/core/lib/gpr/env_linux.cc +1 -2
  896. data/src/core/lib/gpr/env_posix.cc +2 -3
  897. data/src/core/lib/gpr/log.cc +13 -3
  898. data/src/core/lib/gpr/log_android.cc +3 -2
  899. data/src/core/lib/gpr/log_linux.cc +7 -4
  900. data/src/core/lib/gpr/log_posix.cc +6 -3
  901. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  902. data/src/core/lib/gpr/string.cc +2 -2
  903. data/src/core/lib/gpr/string.h +2 -2
  904. data/src/core/lib/gpr/sync.cc +2 -2
  905. data/src/core/lib/gpr/sync_abseil.cc +10 -12
  906. data/src/core/lib/gpr/sync_posix.cc +4 -3
  907. data/src/core/lib/gpr/sync_windows.cc +2 -2
  908. data/src/core/lib/gpr/time.cc +5 -3
  909. data/src/core/lib/gpr/time_windows.cc +3 -2
  910. data/src/core/lib/gpr/tls.h +124 -40
  911. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  912. data/src/core/lib/gpr/useful.h +97 -32
  913. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  914. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  915. data/src/core/lib/gprpp/bitset.h +211 -0
  916. data/src/core/lib/gprpp/chunked_vector.h +257 -0
  917. data/src/core/lib/gprpp/construct_destruct.h +40 -0
  918. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  919. data/src/core/lib/gprpp/debug_location.h +2 -0
  920. data/src/core/lib/gprpp/dual_ref_counted.h +27 -31
  921. data/src/core/lib/gprpp/examine_stack.h +0 -1
  922. data/src/core/lib/gprpp/fork.cc +17 -18
  923. data/src/core/lib/gprpp/fork.h +4 -4
  924. data/src/core/lib/gprpp/global_config.h +2 -5
  925. data/src/core/lib/gprpp/global_config_env.cc +16 -15
  926. data/src/core/lib/gprpp/global_config_env.h +5 -3
  927. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  928. data/src/core/lib/gprpp/host_port.cc +2 -0
  929. data/src/core/lib/gprpp/manual_constructor.h +11 -10
  930. data/src/core/lib/gprpp/match.h +75 -0
  931. data/src/core/lib/gprpp/memory.h +8 -6
  932. data/src/core/lib/gprpp/mpscq.cc +9 -9
  933. data/src/core/lib/gprpp/mpscq.h +6 -5
  934. data/src/core/lib/gprpp/orphanable.h +5 -8
  935. data/src/core/lib/gprpp/overload.h +59 -0
  936. data/src/core/lib/gprpp/ref_counted.h +49 -35
  937. data/src/core/lib/gprpp/ref_counted_ptr.h +5 -5
  938. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  939. data/src/core/lib/gprpp/stat.h +0 -2
  940. data/src/core/lib/gprpp/stat_posix.cc +7 -2
  941. data/src/core/lib/gprpp/status_helper.cc +439 -0
  942. data/src/core/lib/gprpp/status_helper.h +185 -0
  943. data/src/core/lib/gprpp/sync.h +109 -44
  944. data/src/core/lib/gprpp/table.h +444 -0
  945. data/src/core/lib/gprpp/thd.h +3 -6
  946. data/src/core/lib/gprpp/thd_posix.cc +9 -7
  947. data/src/core/lib/gprpp/thd_windows.cc +6 -11
  948. data/src/core/lib/gprpp/time.cc +206 -0
  949. data/src/core/lib/gprpp/time.h +297 -0
  950. data/src/core/lib/gprpp/time_util.cc +81 -0
  951. data/src/core/lib/gprpp/time_util.h +42 -0
  952. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  953. data/src/core/lib/http/format_request.cc +58 -25
  954. data/src/core/lib/http/format_request.h +10 -6
  955. data/src/core/lib/http/httpcli.cc +306 -209
  956. data/src/core/lib/http/httpcli.h +215 -85
  957. data/src/core/lib/http/httpcli_security_connector.cc +72 -83
  958. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  959. data/src/core/lib/http/parser.cc +98 -27
  960. data/src/core/lib/http/parser.h +20 -6
  961. data/src/core/lib/iomgr/buffer_list.cc +16 -17
  962. data/src/core/lib/iomgr/buffer_list.h +23 -25
  963. data/src/core/lib/iomgr/call_combiner.cc +55 -23
  964. data/src/core/lib/iomgr/call_combiner.h +12 -14
  965. data/src/core/lib/iomgr/cfstream_handle.cc +6 -6
  966. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  967. data/src/core/lib/iomgr/closure.h +33 -12
  968. data/src/core/lib/iomgr/combiner.cc +46 -36
  969. data/src/core/lib/iomgr/combiner.h +3 -2
  970. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  971. data/src/core/lib/iomgr/endpoint.cc +5 -9
  972. data/src/core/lib/iomgr/endpoint.h +9 -10
  973. data/src/core/lib/iomgr/endpoint_cfstream.cc +32 -58
  974. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  975. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  976. data/src/core/lib/iomgr/endpoint_pair_posix.cc +12 -9
  977. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  978. data/src/core/lib/iomgr/error.cc +270 -99
  979. data/src/core/lib/iomgr/error.h +278 -114
  980. data/src/core/lib/iomgr/error_cfstream.cc +10 -4
  981. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  982. data/src/core/lib/iomgr/error_internal.h +6 -1
  983. data/src/core/lib/iomgr/ev_apple.cc +19 -15
  984. data/src/core/lib/iomgr/ev_apple.h +1 -1
  985. data/src/core/lib/iomgr/ev_epoll1_linux.cc +45 -51
  986. data/src/core/lib/iomgr/ev_poll_posix.cc +73 -73
  987. data/src/core/lib/iomgr/ev_posix.cc +22 -26
  988. data/src/core/lib/iomgr/ev_posix.h +9 -9
  989. data/src/core/lib/iomgr/exec_ctx.cc +29 -98
  990. data/src/core/lib/iomgr/exec_ctx.h +32 -58
  991. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  992. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  993. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  994. data/src/core/lib/iomgr/executor/threadpool.h +4 -3
  995. data/src/core/lib/iomgr/executor.cc +37 -46
  996. data/src/core/lib/iomgr/executor.h +3 -3
  997. data/src/core/lib/iomgr/fork_posix.cc +2 -1
  998. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  999. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  1000. data/src/core/lib/iomgr/internal_errqueue.cc +41 -49
  1001. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  1002. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  1003. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1004. data/src/core/lib/iomgr/iomgr.cc +5 -4
  1005. data/src/core/lib/iomgr/iomgr.h +3 -3
  1006. data/src/core/lib/iomgr/iomgr_fwd.h +25 -0
  1007. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  1008. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  1009. data/src/core/lib/iomgr/iomgr_posix.cc +5 -4
  1010. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +44 -15
  1011. data/src/core/lib/iomgr/iomgr_windows.cc +4 -5
  1012. data/src/core/lib/iomgr/load_file.cc +6 -6
  1013. data/src/core/lib/iomgr/load_file.h +2 -2
  1014. data/src/core/lib/iomgr/lockfree_event.cc +23 -5
  1015. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  1016. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  1017. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1018. data/src/core/lib/iomgr/pollset.cc +5 -5
  1019. data/src/core/lib/iomgr/pollset.h +9 -9
  1020. data/src/core/lib/iomgr/pollset_set.h +1 -2
  1021. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  1022. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1023. data/src/core/lib/iomgr/port.h +28 -17
  1024. data/src/core/lib/iomgr/python_util.h +3 -2
  1025. data/src/core/lib/iomgr/resolve_address.cc +17 -23
  1026. data/src/core/lib/iomgr/resolve_address.h +58 -46
  1027. data/src/core/lib/iomgr/resolve_address_impl.h +58 -0
  1028. data/src/core/lib/iomgr/resolve_address_posix.cc +84 -78
  1029. data/src/core/lib/iomgr/resolve_address_posix.h +50 -0
  1030. data/src/core/lib/iomgr/resolve_address_windows.cc +95 -85
  1031. data/src/core/lib/iomgr/resolve_address_windows.h +50 -0
  1032. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1033. data/src/core/lib/iomgr/sockaddr.h +3 -3
  1034. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1035. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +62 -0
  1036. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1037. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  1038. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1039. data/src/core/lib/iomgr/socket_mutator.cc +17 -4
  1040. data/src/core/lib/iomgr/socket_mutator.h +27 -3
  1041. data/src/core/lib/iomgr/socket_utils_common_posix.cc +30 -44
  1042. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1043. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1044. data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
  1045. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1046. data/src/core/lib/iomgr/tcp_client.cc +1 -1
  1047. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1048. data/src/core/lib/iomgr/tcp_client_cfstream.cc +22 -30
  1049. data/src/core/lib/iomgr/tcp_client_posix.cc +50 -50
  1050. data/src/core/lib/iomgr/tcp_client_posix.h +7 -6
  1051. data/src/core/lib/iomgr/tcp_client_windows.cc +26 -19
  1052. data/src/core/lib/iomgr/tcp_posix.cc +211 -204
  1053. data/src/core/lib/iomgr/tcp_posix.h +17 -12
  1054. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  1055. data/src/core/lib/iomgr/tcp_server.h +16 -14
  1056. data/src/core/lib/iomgr/tcp_server_posix.cc +91 -58
  1057. data/src/core/lib/iomgr/tcp_server_utils_posix.h +34 -29
  1058. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +53 -47
  1059. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +18 -15
  1060. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1061. data/src/core/lib/iomgr/tcp_server_windows.cc +37 -32
  1062. data/src/core/lib/iomgr/tcp_windows.cc +42 -56
  1063. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  1064. data/src/core/lib/iomgr/timer.cc +3 -2
  1065. data/src/core/lib/iomgr/timer.h +17 -8
  1066. data/src/core/lib/iomgr/timer_generic.cc +118 -129
  1067. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1068. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1069. data/src/core/lib/iomgr/timer_manager.cc +17 -16
  1070. data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
  1071. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
  1072. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -18
  1073. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  1074. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +2 -1
  1075. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
  1076. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  1077. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  1078. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1079. data/src/core/lib/iomgr/work_serializer.h +33 -5
  1080. data/src/core/lib/json/json.h +2 -3
  1081. data/src/core/lib/json/json_reader.cc +106 -59
  1082. data/src/core/lib/json/json_util.cc +78 -3
  1083. data/src/core/lib/json/json_util.h +77 -118
  1084. data/src/core/lib/json/json_writer.cc +6 -4
  1085. data/src/core/lib/matchers/matchers.cc +327 -0
  1086. data/src/core/lib/matchers/matchers.h +160 -0
  1087. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1088. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1089. data/src/core/lib/promise/activity.cc +121 -0
  1090. data/src/core/lib/promise/activity.h +540 -0
  1091. data/src/core/lib/promise/arena_promise.h +198 -0
  1092. data/src/core/lib/promise/call_push_pull.h +148 -0
  1093. data/src/core/lib/promise/context.h +86 -0
  1094. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1095. data/src/core/lib/promise/detail/promise_factory.h +188 -0
  1096. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1097. data/src/core/lib/promise/detail/status.h +50 -0
  1098. data/src/core/lib/promise/detail/switch.h +1455 -0
  1099. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1100. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1101. data/src/core/lib/promise/latch.h +103 -0
  1102. data/src/core/lib/promise/loop.h +135 -0
  1103. data/src/core/lib/promise/map.h +88 -0
  1104. data/src/core/lib/promise/poll.h +66 -0
  1105. data/src/core/lib/promise/promise.h +95 -0
  1106. data/src/core/lib/promise/race.h +83 -0
  1107. data/src/core/lib/promise/seq.h +87 -0
  1108. data/src/core/lib/promise/sleep.cc +76 -0
  1109. data/src/core/lib/promise/sleep.h +76 -0
  1110. data/src/core/lib/promise/try_seq.h +157 -0
  1111. data/src/core/lib/resolver/resolver.cc +79 -0
  1112. data/src/core/lib/resolver/resolver.h +135 -0
  1113. data/src/core/lib/resolver/resolver_factory.h +75 -0
  1114. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1115. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1116. data/src/core/lib/resolver/server_address.cc +176 -0
  1117. data/src/core/lib/resolver/server_address.h +144 -0
  1118. data/src/core/lib/resource_quota/api.cc +96 -0
  1119. data/src/core/lib/resource_quota/api.h +43 -0
  1120. data/src/core/lib/resource_quota/arena.cc +101 -0
  1121. data/src/core/lib/resource_quota/arena.h +141 -0
  1122. data/src/core/lib/resource_quota/memory_quota.cc +520 -0
  1123. data/src/core/lib/resource_quota/memory_quota.h +476 -0
  1124. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1125. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1126. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1127. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1128. data/src/core/lib/resource_quota/trace.cc +19 -0
  1129. data/src/core/lib/resource_quota/trace.h +24 -0
  1130. data/src/core/lib/security/authorization/authorization_engine.h +13 -53
  1131. data/src/core/lib/security/authorization/authorization_policy_provider.h +40 -0
  1132. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  1133. data/src/core/lib/security/authorization/evaluate_args.cc +143 -79
  1134. data/src/core/lib/security/authorization/evaluate_args.h +50 -17
  1135. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1136. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1137. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
  1138. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +50 -0
  1139. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1140. data/src/core/lib/security/authorization/matchers.h +211 -0
  1141. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1142. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1143. data/src/core/lib/security/context/security_context.cc +15 -10
  1144. data/src/core/lib/security/context/security_context.h +9 -2
  1145. data/src/core/lib/security/credentials/alts/alts_credentials.cc +14 -6
  1146. data/src/core/lib/security/credentials/alts/alts_credentials.h +11 -1
  1147. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1148. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1149. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1150. data/src/core/lib/security/credentials/call_creds_util.cc +89 -0
  1151. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1152. data/src/core/lib/security/credentials/channel_creds_registry.h +98 -0
  1153. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1154. data/src/core/lib/security/credentials/composite/composite_credentials.cc +31 -85
  1155. data/src/core/lib/security/credentials/composite/composite_credentials.h +25 -11
  1156. data/src/core/lib/security/credentials/credentials.cc +11 -10
  1157. data/src/core/lib/security/credentials/credentials.h +90 -83
  1158. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +160 -73
  1159. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +23 -13
  1160. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -4
  1161. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  1162. data/src/core/lib/security/credentials/external/external_account_credentials.cc +132 -82
  1163. data/src/core/lib/security/credentials/external/external_account_credentials.h +15 -17
  1164. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +6 -6
  1165. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  1166. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +46 -27
  1167. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -7
  1168. data/src/core/lib/security/credentials/fake/fake_credentials.cc +33 -27
  1169. data/src/core/lib/security/credentials/fake/fake_credentials.h +22 -21
  1170. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1171. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +117 -47
  1172. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -4
  1173. data/src/core/lib/security/credentials/iam/iam_credentials.cc +25 -28
  1174. data/src/core/lib/security/credentials/iam/iam_credentials.h +15 -9
  1175. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +31 -26
  1176. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +57 -0
  1177. data/src/core/lib/security/credentials/jwt/json_token.cc +7 -12
  1178. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1179. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +58 -52
  1180. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +27 -15
  1181. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +66 -62
  1182. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1183. data/src/core/lib/security/credentials/local/local_credentials.cc +14 -7
  1184. data/src/core/lib/security/credentials/local/local_credentials.h +11 -1
  1185. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +178 -193
  1186. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +62 -34
  1187. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +100 -155
  1188. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +56 -27
  1189. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +19 -19
  1190. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -5
  1191. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +11 -9
  1192. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +19 -15
  1193. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +90 -25
  1194. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +67 -12
  1195. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +234 -0
  1196. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +169 -0
  1197. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +35 -85
  1198. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +75 -151
  1199. data/src/core/lib/security/credentials/tls/tls_credentials.cc +42 -17
  1200. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -1
  1201. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  1202. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  1203. data/src/core/lib/security/credentials/xds/xds_credentials.cc +134 -63
  1204. data/src/core/lib/security/credentials/xds/xds_credentials.h +40 -9
  1205. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -18
  1206. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1207. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +25 -26
  1208. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +1 -3
  1209. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +10 -20
  1210. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -16
  1211. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1212. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -6
  1213. data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -26
  1214. data/src/core/lib/security/security_connector/security_connector.cc +9 -16
  1215. data/src/core/lib/security/security_connector/security_connector.h +34 -25
  1216. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +29 -25
  1217. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  1218. data/src/core/lib/security/security_connector/ssl_utils.cc +76 -43
  1219. data/src/core/lib/security/security_connector/ssl_utils.h +17 -21
  1220. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +440 -283
  1221. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +118 -79
  1222. data/src/core/lib/security/transport/auth_filters.h +39 -5
  1223. data/src/core/lib/security/transport/client_auth_filter.cc +96 -355
  1224. data/src/core/lib/security/transport/secure_endpoint.cc +221 -151
  1225. data/src/core/lib/security/transport/secure_endpoint.h +2 -1
  1226. data/src/core/lib/security/transport/security_handshaker.cc +174 -96
  1227. data/src/core/lib/security/transport/security_handshaker.h +3 -2
  1228. data/src/core/lib/security/transport/server_auth_filter.cc +61 -50
  1229. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1230. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1231. data/src/core/lib/security/util/json_util.cc +8 -10
  1232. data/src/core/lib/security/util/json_util.h +1 -1
  1233. data/src/core/lib/service_config/service_config.h +78 -0
  1234. data/src/core/lib/service_config/service_config_call_data.h +75 -0
  1235. data/src/core/lib/service_config/service_config_impl.cc +237 -0
  1236. data/src/core/lib/service_config/service_config_impl.h +132 -0
  1237. data/src/core/lib/service_config/service_config_parser.cc +101 -0
  1238. data/src/core/lib/service_config/service_config_parser.h +113 -0
  1239. data/src/core/lib/slice/b64.cc +1 -1
  1240. data/src/core/lib/slice/b64.h +2 -0
  1241. data/src/core/lib/slice/percent_encoding.cc +87 -97
  1242. data/src/core/lib/slice/percent_encoding.h +22 -33
  1243. data/src/core/lib/slice/slice.cc +83 -192
  1244. data/src/core/lib/slice/slice.h +389 -0
  1245. data/src/core/lib/slice/slice_api.cc +39 -0
  1246. data/src/core/lib/slice/slice_buffer.cc +59 -29
  1247. data/src/core/lib/slice/slice_buffer.h +106 -0
  1248. data/src/core/lib/slice/slice_buffer_api.cc +35 -0
  1249. data/src/core/lib/slice/slice_internal.h +18 -278
  1250. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1251. data/src/core/lib/slice/slice_refcount.h +45 -0
  1252. data/src/core/lib/slice/slice_refcount_base.h +60 -0
  1253. data/src/core/lib/slice/slice_split.cc +103 -0
  1254. data/src/core/lib/slice/slice_split.h +36 -0
  1255. data/src/core/lib/slice/slice_string_helpers.cc +2 -81
  1256. data/src/core/lib/slice/slice_string_helpers.h +1 -15
  1257. data/src/core/lib/surface/api_trace.cc +2 -1
  1258. data/src/core/lib/surface/api_trace.h +1 -0
  1259. data/src/core/lib/surface/builtins.cc +54 -0
  1260. data/src/core/lib/surface/builtins.h +26 -0
  1261. data/src/core/lib/surface/byte_buffer.cc +7 -1
  1262. data/src/core/lib/surface/byte_buffer_reader.cc +5 -5
  1263. data/src/core/lib/surface/call.cc +1186 -1256
  1264. data/src/core/lib/surface/call.h +29 -24
  1265. data/src/core/lib/surface/call_details.cc +4 -4
  1266. data/src/core/lib/surface/call_log_batch.cc +9 -3
  1267. data/src/core/lib/surface/call_test_only.h +4 -1
  1268. data/src/core/lib/surface/channel.cc +221 -315
  1269. data/src/core/lib/surface/channel.h +102 -72
  1270. data/src/core/lib/surface/channel_init.cc +22 -76
  1271. data/src/core/lib/surface/channel_init.h +45 -39
  1272. data/src/core/lib/surface/channel_ping.cc +10 -5
  1273. data/src/core/lib/surface/channel_stack_type.cc +0 -1
  1274. data/src/core/lib/surface/channel_stack_type.h +0 -2
  1275. data/src/core/lib/surface/completion_queue.cc +150 -151
  1276. data/src/core/lib/surface/completion_queue.h +8 -3
  1277. data/src/core/lib/surface/completion_queue_factory.cc +4 -3
  1278. data/src/core/lib/surface/completion_queue_factory.h +1 -2
  1279. data/src/core/lib/surface/event_string.cc +1 -6
  1280. data/src/core/lib/surface/event_string.h +1 -1
  1281. data/src/core/lib/surface/init.cc +82 -90
  1282. data/src/core/lib/surface/init.h +2 -4
  1283. data/src/core/lib/surface/lame_client.cc +80 -92
  1284. data/src/core/lib/surface/lame_client.h +42 -3
  1285. data/src/core/lib/surface/metadata_array.cc +4 -2
  1286. data/src/core/lib/surface/server.cc +201 -220
  1287. data/src/core/lib/surface/server.h +160 -64
  1288. data/src/core/lib/surface/validate_metadata.cc +57 -29
  1289. data/src/core/lib/surface/validate_metadata.h +6 -2
  1290. data/src/core/lib/surface/version.cc +2 -2
  1291. data/src/core/lib/transport/bdp_estimator.cc +14 -13
  1292. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1293. data/src/core/lib/transport/byte_stream.cc +15 -8
  1294. data/src/core/lib/transport/byte_stream.h +14 -9
  1295. data/src/core/lib/transport/connectivity_state.cc +15 -10
  1296. data/src/core/lib/transport/connectivity_state.h +4 -5
  1297. data/src/core/lib/transport/error_utils.cc +71 -30
  1298. data/src/core/lib/transport/error_utils.h +18 -7
  1299. data/src/core/lib/transport/handshaker.cc +227 -0
  1300. data/src/core/lib/transport/handshaker.h +168 -0
  1301. data/src/core/lib/transport/handshaker_factory.h +49 -0
  1302. data/src/core/lib/transport/handshaker_registry.cc +54 -0
  1303. data/src/core/lib/transport/handshaker_registry.h +72 -0
  1304. data/src/core/lib/transport/http_connect_handshaker.cc +401 -0
  1305. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1306. data/src/core/lib/transport/metadata_batch.cc +213 -318
  1307. data/src/core/lib/transport/metadata_batch.h +1230 -158
  1308. data/src/core/lib/transport/parsed_metadata.cc +39 -0
  1309. data/src/core/lib/transport/parsed_metadata.h +408 -0
  1310. data/src/core/lib/transport/pid_controller.cc +4 -4
  1311. data/src/core/lib/transport/status_conversion.cc +4 -2
  1312. data/src/core/lib/transport/status_conversion.h +3 -3
  1313. data/src/core/lib/transport/tcp_connect_handshaker.cc +253 -0
  1314. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1315. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1316. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1317. data/src/core/lib/transport/transport.cc +33 -52
  1318. data/src/core/lib/transport/transport.h +137 -10
  1319. data/src/core/lib/transport/transport_impl.h +24 -0
  1320. data/src/core/lib/transport/transport_op_string.cc +21 -44
  1321. data/src/core/lib/uri/uri_parser.cc +248 -66
  1322. data/src/core/lib/uri/uri_parser.h +39 -25
  1323. data/src/core/plugin_registry/grpc_plugin_registry.cc +84 -90
  1324. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1325. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1326. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1327. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1328. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  1329. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +54 -55
  1330. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1331. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1332. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +56 -42
  1333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +1 -1
  1334. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1335. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1336. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1337. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +3 -5
  1338. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1339. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1340. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1341. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  1342. data/src/core/tsi/fake_transport_security.cc +26 -9
  1343. data/src/core/tsi/local_transport_security.cc +42 -87
  1344. data/src/core/tsi/local_transport_security.h +1 -4
  1345. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1346. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1347. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -6
  1348. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +2 -0
  1349. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -55
  1350. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +8 -11
  1351. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +4 -2
  1352. data/src/core/tsi/ssl_transport_security.cc +261 -79
  1353. data/src/core/tsi/ssl_transport_security.h +53 -16
  1354. data/src/core/tsi/transport_security.cc +15 -3
  1355. data/src/core/tsi/transport_security.h +16 -1
  1356. data/src/core/tsi/transport_security_grpc.h +1 -0
  1357. data/src/core/tsi/transport_security_interface.h +28 -0
  1358. data/src/ruby/bin/math_services_pb.rb +1 -1
  1359. data/src/ruby/ext/grpc/extconf.rb +31 -11
  1360. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1361. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1362. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1363. data/src/ruby/ext/grpc/rb_channel.c +24 -10
  1364. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1365. data/src/ruby/ext/grpc/rb_channel_credentials.c +15 -5
  1366. data/src/ruby/ext/grpc/rb_channel_credentials.h +5 -0
  1367. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1368. data/src/ruby/ext/grpc/rb_compression_options.c +6 -5
  1369. data/src/ruby/ext/grpc/rb_enable_cpp.cc +1 -1
  1370. data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
  1371. data/src/ruby/ext/grpc/rb_grpc.c +9 -4
  1372. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1373. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +38 -34
  1374. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +59 -53
  1375. data/src/ruby/ext/grpc/rb_server.c +26 -10
  1376. data/src/ruby/ext/grpc/rb_server_credentials.c +22 -6
  1377. data/src/ruby/ext/grpc/rb_server_credentials.h +5 -0
  1378. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +218 -0
  1379. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +37 -0
  1380. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +170 -0
  1381. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +37 -0
  1382. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1383. data/src/ruby/lib/grpc/generic/client_stub.rb +4 -2
  1384. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1385. data/src/ruby/lib/grpc/version.rb +1 -1
  1386. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1387. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  1388. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  1389. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  1391. data/src/ruby/pb/test/client.rb +769 -0
  1392. data/src/ruby/pb/test/server.rb +252 -0
  1393. data/src/ruby/pb/test/xds_client.rb +415 -0
  1394. data/src/ruby/spec/call_spec.rb +1 -1
  1395. data/src/ruby/spec/channel_credentials_spec.rb +32 -0
  1396. data/src/ruby/spec/channel_spec.rb +17 -6
  1397. data/src/ruby/spec/client_auth_spec.rb +27 -1
  1398. data/src/ruby/spec/client_server_spec.rb +1 -1
  1399. data/src/ruby/spec/errors_spec.rb +1 -1
  1400. data/src/ruby/spec/generic/active_call_spec.rb +2 -2
  1401. data/src/ruby/spec/generic/client_stub_spec.rb +4 -4
  1402. data/src/ruby/spec/generic/rpc_server_spec.rb +1 -1
  1403. data/src/ruby/spec/server_credentials_spec.rb +25 -0
  1404. data/src/ruby/spec/server_spec.rb +22 -0
  1405. data/third_party/abseil-cpp/absl/algorithm/container.h +104 -94
  1406. data/third_party/abseil-cpp/absl/base/attributes.h +88 -35
  1407. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  1408. data/third_party/abseil-cpp/absl/base/config.h +102 -44
  1409. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +25 -36
  1410. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  1411. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1412. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1413. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  1414. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  1415. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  1416. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  1417. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +17 -6
  1418. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1419. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  1420. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1421. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
  1422. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1423. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +70 -1
  1424. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1425. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
  1426. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1427. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1428. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +17 -3
  1429. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1430. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1431. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  1432. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  1433. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1434. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1435. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  1436. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1437. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1438. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -7
  1439. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +1 -1
  1440. data/third_party/abseil-cpp/absl/container/inlined_vector.h +110 -100
  1441. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  1442. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1443. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -103
  1444. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +39 -79
  1445. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  1446. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +469 -429
  1447. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  1448. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1449. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +21 -2
  1450. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +374 -243
  1451. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +27 -13
  1452. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1453. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1454. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  1455. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +15 -17
  1456. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1457. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  1458. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1459. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1460. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +11 -7
  1461. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1462. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1463. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1464. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  1465. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +16 -2
  1466. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1467. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1468. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1469. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  1470. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  1471. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +27 -13
  1472. data/third_party/abseil-cpp/absl/hash/internal/hash.h +145 -45
  1473. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1474. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1475. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1476. data/third_party/abseil-cpp/absl/meta/type_traits.h +47 -3
  1477. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1478. data/third_party/abseil-cpp/absl/numeric/int128.cc +6 -13
  1479. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1480. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1481. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1482. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1483. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1484. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1485. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1486. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1487. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1488. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1489. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1490. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1491. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1492. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1493. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1494. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1495. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1496. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1497. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1498. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1499. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1500. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1501. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1502. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1503. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1504. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1505. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1506. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1507. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1508. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1509. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1510. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1511. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1512. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1513. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1514. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1515. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1516. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1517. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1518. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1519. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1520. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1521. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1522. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1523. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1524. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1525. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1526. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1527. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1528. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1529. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1530. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1531. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1532. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1533. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  1534. data/third_party/abseil-cpp/absl/status/status.cc +27 -28
  1535. data/third_party/abseil-cpp/absl/status/status.h +98 -33
  1536. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1537. data/third_party/abseil-cpp/absl/status/statusor.h +34 -24
  1538. data/third_party/abseil-cpp/absl/strings/charconv.cc +8 -8
  1539. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1540. data/third_party/abseil-cpp/absl/strings/cord.cc +619 -570
  1541. data/third_party/abseil-cpp/absl/strings/cord.h +346 -101
  1542. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  1543. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +7 -7
  1544. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
  1545. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +478 -31
  1546. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1547. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1548. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1549. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1550. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1551. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1552. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1553. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1554. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1555. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
  1556. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1557. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1558. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1559. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1560. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1561. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1562. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1563. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1564. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1565. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1566. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1567. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1568. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  1569. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +22 -0
  1570. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +18 -5
  1571. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +20 -5
  1572. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  1573. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1574. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1575. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  1576. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +76 -73
  1578. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +38 -16
  1579. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
  1580. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1581. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1582. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1583. data/third_party/abseil-cpp/absl/strings/numbers.cc +133 -5
  1584. data/third_party/abseil-cpp/absl/strings/numbers.h +44 -10
  1585. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1586. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1587. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1588. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  1589. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1590. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1591. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1592. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1593. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1594. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1595. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1596. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  1597. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  1598. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  1599. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  1600. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +2 -66
  1601. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  1602. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  1603. data/third_party/abseil-cpp/absl/synchronization/mutex.h +82 -65
  1604. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1605. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1606. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1607. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  1608. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  1609. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1610. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1611. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1612. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1613. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  1614. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1615. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -5
  1616. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1617. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1618. data/third_party/abseil-cpp/absl/time/time.h +93 -60
  1619. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1620. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1621. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  1622. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1623. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  1624. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1625. data/third_party/boringssl-with-bazel/err_data.c +760 -724
  1626. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +70 -57
  1627. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1628. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1629. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  1630. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1631. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  1632. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1633. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +67 -54
  1634. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  1635. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1636. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strex.c +650 -0
  1637. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1638. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1639. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +22 -10
  1640. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +3 -42
  1641. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1642. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +75 -63
  1643. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1644. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1645. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1646. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1647. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +224 -0
  1648. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +79 -354
  1649. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +327 -281
  1650. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +15 -26
  1651. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +20 -75
  1652. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -8
  1653. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +3 -2
  1654. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1655. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1656. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1657. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1658. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1659. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1660. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1661. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1662. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  1663. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +156 -0
  1664. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  1665. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +11 -10
  1666. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1667. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +68 -45
  1668. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1669. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1670. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  1671. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1672. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +101 -3
  1673. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  1674. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1675. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  1676. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm-linux.c +11 -2
  1677. data/third_party/boringssl-with-bazel/src/crypto/cpu-arm.c +3 -3
  1678. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1679. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1680. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  1681. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/params.c +272 -0
  1682. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +31 -3
  1683. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1684. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  1685. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1686. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  1687. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1688. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1689. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +4 -1
  1690. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  1691. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +28 -12
  1692. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1693. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +15 -4
  1694. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1695. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1696. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +44 -16
  1697. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
  1698. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1699. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1700. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  1701. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +456 -0
  1702. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1703. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1704. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1705. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +16 -0
  1706. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -2
  1707. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  1708. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
  1709. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1710. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1711. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1712. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1713. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1714. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1715. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1716. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1717. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1718. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1719. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +30 -9
  1720. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +123 -44
  1721. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -20
  1722. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
  1723. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +65 -41
  1724. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1725. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +168 -16
  1726. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1727. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1728. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  1729. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +400 -325
  1730. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1731. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1732. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1733. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1734. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1735. data/third_party/boringssl-with-bazel/src/crypto/mem.c +46 -9
  1736. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1737. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1738. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1739. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1740. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1741. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1742. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1743. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1744. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1745. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1746. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1747. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +96 -49
  1748. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +11 -8
  1749. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  1750. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  1751. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1752. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1753. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1754. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1755. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  1756. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +5 -1
  1757. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1758. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1759. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1760. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  1761. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1762. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1763. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1764. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1765. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1766. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1767. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
  1768. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1769. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +20 -5
  1770. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1771. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1772. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1773. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1774. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1775. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +4 -31
  1776. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +12 -9
  1777. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1778. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1779. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  1780. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +17 -24
  1781. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  1782. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +26 -23
  1783. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
  1784. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1785. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +61 -23
  1786. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1787. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1788. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1789. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
  1790. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +21 -34
  1791. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +15 -13
  1792. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1793. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1794. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  1795. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  1796. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1797. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  1798. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1799. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +50 -14
  1800. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +5 -2
  1801. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +239 -11
  1802. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1803. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
  1804. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1805. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1806. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1807. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1808. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +27 -8
  1809. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +29 -18
  1810. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +6 -3
  1811. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +26 -25
  1812. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +10 -13
  1813. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1814. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +7 -1
  1815. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  1816. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  1817. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +48 -40
  1818. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1819. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1820. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1821. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
  1822. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +7 -6
  1823. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +86 -44
  1824. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  1825. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +69 -4
  1826. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1794 -665
  1827. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -179
  1828. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +63 -14
  1829. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1830. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1831. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  1832. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1833. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +32 -7
  1834. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1835. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +36 -7
  1836. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1837. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +22 -32
  1838. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  1839. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +60 -38
  1840. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +10 -2
  1841. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1842. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +20 -2
  1843. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1844. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
  1845. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1846. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +67 -106
  1847. data/third_party/boringssl-with-bazel/src/include/openssl/evp_errors.h +99 -0
  1848. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1849. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1850. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1851. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1852. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1853. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1854. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1855. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
  1856. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
  1857. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1858. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +5 -2
  1859. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
  1860. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +39 -16
  1861. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +435 -119
  1862. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +48 -36
  1863. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1397 -380
  1864. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  1865. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +192 -52
  1866. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  1867. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1868. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1869. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +4325 -0
  1870. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  1871. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +92 -44
  1872. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +314 -217
  1873. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +177 -35
  1874. data/third_party/boringssl-with-bazel/src/ssl/internal.h +493 -154
  1875. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1876. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -2
  1877. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1878. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  1879. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  1880. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1881. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1882. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +64 -112
  1883. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1884. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +136 -104
  1885. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1886. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +12 -17
  1887. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +11 -3
  1888. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1889. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  1890. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
  1891. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
  1892. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +160 -91
  1893. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +269 -118
  1894. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1895. data/third_party/cares/cares/include/ares.h +742 -0
  1896. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1897. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1898. data/third_party/cares/cares/include/ares_version.h +24 -0
  1899. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1900. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1901. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1902. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1903. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1904. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1905. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1906. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1907. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1908. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1909. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1910. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1911. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1912. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1913. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1914. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1915. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1916. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1917. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1918. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1919. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1920. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  1921. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1922. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  1923. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  1924. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  1925. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1926. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1927. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  1928. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1929. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  1930. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  1931. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  1932. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1933. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1934. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1935. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1936. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1937. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1938. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1939. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1940. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1941. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1942. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  1943. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  1944. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  1945. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  1946. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1947. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  1948. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  1949. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1950. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1951. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  1952. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  1953. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  1954. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  1955. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  1956. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  1957. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1958. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1959. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1960. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1961. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1962. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  1963. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1964. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1965. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1966. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1967. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1968. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1969. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1970. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1971. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1972. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  1973. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  1974. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1975. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1976. data/third_party/re2/re2/compile.cc +91 -109
  1977. data/third_party/re2/re2/dfa.cc +27 -39
  1978. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1979. data/third_party/re2/re2/filtered_re2.h +10 -5
  1980. data/third_party/re2/re2/nfa.cc +1 -1
  1981. data/third_party/re2/re2/parse.cc +42 -23
  1982. data/third_party/re2/re2/perl_groups.cc +34 -34
  1983. data/third_party/re2/re2/prefilter.cc +3 -2
  1984. data/third_party/re2/re2/prog.cc +182 -4
  1985. data/third_party/re2/re2/prog.h +28 -9
  1986. data/third_party/re2/re2/re2.cc +87 -118
  1987. data/third_party/re2/re2/re2.h +156 -141
  1988. data/third_party/re2/re2/regexp.cc +12 -5
  1989. data/third_party/re2/re2/regexp.h +8 -2
  1990. data/third_party/re2/re2/set.cc +31 -9
  1991. data/third_party/re2/re2/set.h +9 -4
  1992. data/third_party/re2/re2/simplify.cc +11 -3
  1993. data/third_party/re2/re2/tostring.cc +1 -1
  1994. data/third_party/re2/re2/walker-inl.h +1 -1
  1995. data/third_party/re2/util/mutex.h +2 -2
  1996. data/third_party/re2/util/pcre.h +3 -3
  1997. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1998. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1999. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  2000. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  2001. data/third_party/upb/upb/decode.c +774 -351
  2002. data/third_party/upb/upb/decode.h +66 -12
  2003. data/third_party/upb/upb/decode_fast.c +596 -581
  2004. data/third_party/upb/upb/decode_fast.h +40 -13
  2005. data/third_party/upb/upb/decode_internal.h +211 -0
  2006. data/third_party/upb/upb/def.c +2151 -1068
  2007. data/third_party/upb/upb/def.h +352 -258
  2008. data/third_party/upb/upb/def.hpp +160 -161
  2009. data/third_party/upb/upb/encode.c +291 -165
  2010. data/third_party/upb/upb/encode.h +38 -13
  2011. data/third_party/upb/upb/json_encode.c +267 -204
  2012. data/third_party/upb/upb/json_encode.h +33 -7
  2013. data/third_party/upb/upb/msg.c +274 -102
  2014. data/third_party/upb/upb/msg.h +83 -582
  2015. data/third_party/upb/upb/msg_internal.h +831 -0
  2016. data/third_party/upb/upb/port_def.inc +93 -24
  2017. data/third_party/upb/upb/port_undef.inc +39 -1
  2018. data/third_party/upb/upb/reflection.c +312 -240
  2019. data/third_party/upb/upb/reflection.h +119 -67
  2020. data/third_party/upb/upb/reflection.hpp +37 -0
  2021. data/third_party/upb/upb/table.c +406 -197
  2022. data/third_party/upb/upb/table_internal.h +385 -0
  2023. data/third_party/upb/upb/text_encode.c +141 -90
  2024. data/third_party/upb/upb/text_encode.h +31 -5
  2025. data/third_party/upb/upb/upb.c +164 -66
  2026. data/third_party/upb/upb/upb.h +182 -146
  2027. data/third_party/upb/upb/upb.hpp +50 -23
  2028. data/third_party/upb/upb/upb_internal.h +68 -0
  2029. data/third_party/xxhash/xxhash.h +5580 -0
  2030. data/third_party/zlib/crc32.c +966 -292
  2031. data/third_party/zlib/crc32.h +9441 -436
  2032. data/third_party/zlib/deflate.c +78 -30
  2033. data/third_party/zlib/deflate.h +12 -15
  2034. data/third_party/zlib/gzguts.h +3 -2
  2035. data/third_party/zlib/gzlib.c +5 -3
  2036. data/third_party/zlib/gzread.c +5 -7
  2037. data/third_party/zlib/gzwrite.c +25 -13
  2038. data/third_party/zlib/infback.c +2 -1
  2039. data/third_party/zlib/inffast.c +14 -14
  2040. data/third_party/zlib/inflate.c +39 -8
  2041. data/third_party/zlib/inflate.h +3 -2
  2042. data/third_party/zlib/inftrees.c +3 -3
  2043. data/third_party/zlib/trees.c +27 -48
  2044. data/third_party/zlib/zlib.h +123 -100
  2045. data/third_party/zlib/zutil.c +2 -2
  2046. data/third_party/zlib/zutil.h +12 -9
  2047. metadata +734 -307
  2048. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -388
  2049. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -34
  2050. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -45
  2051. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -85
  2052. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  2053. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  2054. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  2055. data/src/core/ext/filters/client_channel/resolver.h +0 -147
  2056. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -73
  2057. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  2058. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  2059. data/src/core/ext/filters/client_channel/server_address.cc +0 -161
  2060. data/src/core/ext/filters/client_channel/server_address.h +0 -113
  2061. data/src/core/ext/filters/client_channel/service_config.cc +0 -226
  2062. data/src/core/ext/filters/client_channel/service_config.h +0 -126
  2063. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -86
  2064. data/src/core/ext/filters/client_channel/service_config_parser.cc +0 -89
  2065. data/src/core/ext/filters/client_channel/service_config_parser.h +0 -92
  2066. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -440
  2067. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -557
  2068. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  2069. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  2070. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +0 -27
  2071. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  2072. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  2073. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  2074. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  2075. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -124
  2076. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -90
  2077. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -212
  2078. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -45
  2079. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -76
  2080. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -86
  2081. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  2082. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
  2083. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  2084. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  2085. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  2086. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  2087. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
  2088. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -30
  2089. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
  2090. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -30
  2091. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
  2092. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -29
  2093. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
  2094. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  2095. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
  2096. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +0 -28
  2097. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  2098. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  2099. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  2100. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  2101. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  2102. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +0 -36
  2103. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  2104. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  2105. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  2106. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  2107. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  2108. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  2109. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
  2110. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  2111. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  2112. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -83
  2113. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  2114. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -82
  2115. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  2116. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -86
  2117. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  2118. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  2119. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  2120. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  2121. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  2122. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  2123. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  2124. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  2125. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  2126. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  2127. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  2128. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  2129. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  2130. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  2131. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  2132. data/src/core/lib/avl/avl.cc +0 -306
  2133. data/src/core/lib/channel/handshaker.cc +0 -262
  2134. data/src/core/lib/channel/handshaker.h +0 -179
  2135. data/src/core/lib/channel/handshaker_factory.h +0 -42
  2136. data/src/core/lib/channel/handshaker_registry.cc +0 -105
  2137. data/src/core/lib/channel/handshaker_registry.h +0 -54
  2138. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  2139. data/src/core/lib/compression/compression_args.cc +0 -135
  2140. data/src/core/lib/compression/compression_args.h +0 -56
  2141. data/src/core/lib/compression/stream_compression.cc +0 -80
  2142. data/src/core/lib/compression/stream_compression.h +0 -116
  2143. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  2144. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  2145. data/src/core/lib/compression/stream_compression_identity.cc +0 -90
  2146. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  2147. data/src/core/lib/gpr/arena.h +0 -47
  2148. data/src/core/lib/gpr/tls_gcc.h +0 -52
  2149. data/src/core/lib/gpr/tls_msvc.h +0 -54
  2150. data/src/core/lib/gpr/tls_pthread.cc +0 -30
  2151. data/src/core/lib/gpr/tls_pthread.h +0 -56
  2152. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  2153. data/src/core/lib/gprpp/arena.cc +0 -103
  2154. data/src/core/lib/gprpp/arena.h +0 -121
  2155. data/src/core/lib/gprpp/atomic.h +0 -104
  2156. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  2157. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1658
  2158. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  2159. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  2160. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  2161. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
  2162. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  2163. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  2164. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  2165. data/src/core/lib/iomgr/parse_address.cc +0 -322
  2166. data/src/core/lib/iomgr/parse_address.h +0 -77
  2167. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  2168. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  2169. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  2170. data/src/core/lib/iomgr/pollset_custom.h +0 -35
  2171. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  2172. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  2173. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  2174. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  2175. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -168
  2176. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  2177. data/src/core/lib/iomgr/resource_quota.cc +0 -1016
  2178. data/src/core/lib/iomgr/resource_quota.h +0 -177
  2179. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  2180. data/src/core/lib/iomgr/sockaddr_utils.cc +0 -296
  2181. data/src/core/lib/iomgr/sockaddr_utils.h +0 -80
  2182. data/src/core/lib/iomgr/socket_utils_uv.cc +0 -49
  2183. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  2184. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -161
  2185. data/src/core/lib/iomgr/tcp_custom.cc +0 -391
  2186. data/src/core/lib/iomgr/tcp_custom.h +0 -84
  2187. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -483
  2188. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  2189. data/src/core/lib/iomgr/timer_custom.cc +0 -95
  2190. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2191. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  2192. data/src/core/lib/iomgr/udp_server.cc +0 -747
  2193. data/src/core/lib/iomgr/udp_server.h +0 -103
  2194. data/src/core/lib/security/authorization/authorization_engine.cc +0 -177
  2195. data/src/core/lib/security/authorization/mock_cel/activation.h +0 -57
  2196. data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +0 -44
  2197. data/src/core/lib/security/authorization/mock_cel/cel_expression.h +0 -69
  2198. data/src/core/lib/security/authorization/mock_cel/cel_value.h +0 -97
  2199. data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +0 -67
  2200. data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +0 -57
  2201. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  2202. data/src/core/lib/slice/slice_intern.cc +0 -374
  2203. data/src/core/lib/slice/slice_utils.h +0 -200
  2204. data/src/core/lib/surface/init_secure.cc +0 -81
  2205. data/src/core/lib/transport/authority_override.cc +0 -40
  2206. data/src/core/lib/transport/authority_override.h +0 -37
  2207. data/src/core/lib/transport/metadata.cc +0 -689
  2208. data/src/core/lib/transport/metadata.h +0 -446
  2209. data/src/core/lib/transport/static_metadata.cc +0 -1249
  2210. data/src/core/lib/transport/static_metadata.h +0 -604
  2211. data/src/core/lib/transport/status_metadata.cc +0 -62
  2212. data/src/core/lib/transport/status_metadata.h +0 -48
  2213. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  2214. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2215. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2216. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  2217. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +0 -104
  2218. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2219. data/third_party/boringssl-with-bazel/src/crypto/dh/dh.c +0 -533
  2220. data/third_party/boringssl-with-bazel/src/crypto/dh/params.c +0 -93
  2221. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  2222. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -237
  2223. data/third_party/boringssl-with-bazel/src/crypto/x509/a_strex.c +0 -653
  2224. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  2225. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +0 -116
  2226. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2227. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +0 -4100
  2228. data/third_party/cares/cares/ares.h +0 -670
  2229. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2230. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2231. data/third_party/cares/cares/ares_create_query.c +0 -206
  2232. data/third_party/cares/cares/ares_data.c +0 -222
  2233. data/third_party/cares/cares/ares_data.h +0 -72
  2234. data/third_party/cares/cares/ares_dns.h +0 -103
  2235. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2236. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2237. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2238. data/third_party/cares/cares/ares_getenv.c +0 -30
  2239. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2240. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2241. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2242. data/third_party/cares/cares/ares_getopt.c +0 -122
  2243. data/third_party/cares/cares/ares_getopt.h +0 -53
  2244. data/third_party/cares/cares/ares_init.c +0 -2615
  2245. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2246. data/third_party/cares/cares/ares_library_init.c +0 -195
  2247. data/third_party/cares/cares/ares_library_init.h +0 -43
  2248. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2249. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2250. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2251. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2252. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2253. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2254. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2255. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2256. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2257. data/third_party/cares/cares/ares_private.h +0 -382
  2258. data/third_party/cares/cares/ares_process.c +0 -1473
  2259. data/third_party/cares/cares/ares_query.c +0 -186
  2260. data/third_party/cares/cares/ares_search.c +0 -323
  2261. data/third_party/cares/cares/ares_send.c +0 -137
  2262. data/third_party/cares/cares/ares_setup.h +0 -217
  2263. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2264. data/third_party/cares/cares/ares_version.h +0 -24
  2265. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2266. data/third_party/cares/cares/inet_ntop.c +0 -207
  2267. data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
  2268. data/third_party/upb/upb/decode.int.h +0 -163
  2269. data/third_party/upb/upb/json_decode.c +0 -1443
  2270. data/third_party/upb/upb/json_decode.h +0 -23
  2271. data/third_party/upb/upb/table.int.h +0 -475
  2272. data/third_party/upb/upb/upb.int.h +0 -29
@@ -18,223 +18,397 @@
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
+
22
23
  #include <limits.h>
23
- #include <stdio.h>
24
24
  #include <stdlib.h>
25
- #include <string.h>
26
25
 
26
+ #include <algorithm>
27
+ #include <atomic>
28
+ #include <memory>
29
+ #include <new>
27
30
  #include <string>
31
+ #include <utility>
28
32
 
33
+ #include "absl/base/thread_annotations.h"
34
+ #include "absl/meta/type_traits.h"
35
+ #include "absl/status/status.h"
29
36
  #include "absl/strings/str_cat.h"
30
37
  #include "absl/strings/str_format.h"
38
+ #include "absl/strings/string_view.h"
31
39
 
40
+ #include <grpc/byte_buffer.h>
32
41
  #include <grpc/compression.h>
33
42
  #include <grpc/grpc.h>
43
+ #include <grpc/impl/codegen/gpr_types.h>
44
+ #include <grpc/impl/codegen/propagation_bits.h>
34
45
  #include <grpc/slice.h>
46
+ #include <grpc/slice_buffer.h>
47
+ #include <grpc/status.h>
35
48
  #include <grpc/support/alloc.h>
49
+ #include <grpc/support/atm.h>
36
50
  #include <grpc/support/log.h>
37
51
  #include <grpc/support/string_util.h>
38
52
 
39
53
  #include "src/core/lib/channel/channel_stack.h"
40
- #include "src/core/lib/compression/algorithm_metadata.h"
54
+ #include "src/core/lib/channel/channel_stack_builder.h"
55
+ #include "src/core/lib/channel/channelz.h"
56
+ #include "src/core/lib/channel/context.h"
57
+ #include "src/core/lib/compression/compression_internal.h"
41
58
  #include "src/core/lib/debug/stats.h"
42
59
  #include "src/core/lib/gpr/alloc.h"
43
- #include "src/core/lib/gpr/string.h"
44
60
  #include "src/core/lib/gpr/time_precise.h"
45
- #include "src/core/lib/gpr/useful.h"
46
- #include "src/core/lib/gprpp/arena.h"
61
+ #include "src/core/lib/gprpp/cpp_impl_of.h"
62
+ #include "src/core/lib/gprpp/debug_location.h"
47
63
  #include "src/core/lib/gprpp/manual_constructor.h"
64
+ #include "src/core/lib/gprpp/orphanable.h"
48
65
  #include "src/core/lib/gprpp/ref_counted.h"
49
- #include "src/core/lib/iomgr/timer.h"
66
+ #include "src/core/lib/gprpp/sync.h"
67
+ #include "src/core/lib/iomgr/call_combiner.h"
68
+ #include "src/core/lib/iomgr/exec_ctx.h"
69
+ #include "src/core/lib/iomgr/polling_entity.h"
50
70
  #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"
71
+ #include "src/core/lib/resource_quota/arena.h"
72
+ #include "src/core/lib/slice/slice_internal.h"
73
+ #include "src/core/lib/slice/slice_refcount.h"
53
74
  #include "src/core/lib/surface/api_trace.h"
54
- #include "src/core/lib/surface/call.h"
55
75
  #include "src/core/lib/surface/call_test_only.h"
56
76
  #include "src/core/lib/surface/channel.h"
57
77
  #include "src/core/lib/surface/completion_queue.h"
58
78
  #include "src/core/lib/surface/server.h"
59
79
  #include "src/core/lib/surface/validate_metadata.h"
80
+ #include "src/core/lib/transport/byte_stream.h"
60
81
  #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"
82
+ #include "src/core/lib/transport/metadata_batch.h"
64
83
  #include "src/core/lib/transport/transport.h"
65
84
 
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);
85
+ grpc_core::TraceFlag grpc_call_error_trace(false, "call_error");
86
+ grpc_core::TraceFlag grpc_compression_trace(false, "compression");
87
+
88
+ namespace grpc_core {
89
+
90
+ class Call : public CppImplOf<Call, grpc_call> {
91
+ public:
92
+ Arena* arena() { return arena_; }
93
+ bool is_client() const { return is_client_; }
94
+
95
+ virtual void ContextSet(grpc_context_index elem, void* value,
96
+ void (*destroy)(void* value)) = 0;
97
+ virtual void* ContextGet(grpc_context_index elem) const = 0;
98
+ virtual bool Completed() = 0;
99
+ void CancelWithStatus(grpc_status_code status, const char* description);
100
+ virtual void CancelWithError(grpc_error_handle error) = 0;
101
+ virtual void SetCompletionQueue(grpc_completion_queue* cq) = 0;
102
+ virtual char* GetPeer() = 0;
103
+ virtual grpc_call_error StartBatch(const grpc_op* ops, size_t nops,
104
+ void* notify_tag,
105
+ bool is_notify_tag_closure) = 0;
106
+ virtual bool failed_before_recv_message() const = 0;
107
+ virtual bool is_trailers_only() const = 0;
108
+ virtual void ExternalRef() = 0;
109
+ virtual void ExternalUnref() = 0;
110
+ virtual void InternalRef(const char* reason) = 0;
111
+ virtual void InternalUnref(const char* reason) = 0;
112
+
113
+ virtual grpc_compression_algorithm test_only_compression_algorithm() = 0;
114
+ virtual uint32_t test_only_message_flags() = 0;
115
+ virtual uint32_t test_only_encodings_accepted_by_peer() = 0;
116
+ virtual grpc_compression_algorithm compression_for_level(
117
+ grpc_compression_level level) = 0;
118
+
119
+ // This should return nullptr for the promise stack (and alternative means
120
+ // for that functionality be invented)
121
+ virtual grpc_call_stack* call_stack() = 0;
122
+
123
+ protected:
124
+ Call(Arena* arena, bool is_client, Timestamp send_deadline)
125
+ : arena_(arena), send_deadline_(send_deadline), is_client_(is_client) {
126
+ GPR_DEBUG_ASSERT(arena_ != nullptr);
127
+ }
128
+ ~Call() = default;
129
+
130
+ struct ParentCall {
131
+ Mutex child_list_mu;
132
+ Call* first_child ABSL_GUARDED_BY(child_list_mu) = nullptr;
133
+ };
134
+
135
+ struct ChildCall {
136
+ explicit ChildCall(Call* parent) : parent(parent) {}
137
+ Call* parent;
138
+ /** siblings: children of the same parent form a list, and this list is
139
+ protected under
140
+ parent->mu */
141
+ Call* sibling_next = nullptr;
142
+ Call* sibling_prev = nullptr;
143
+ };
144
+
145
+ ParentCall* GetOrCreateParentCall();
146
+ ParentCall* parent_call();
147
+
148
+ absl::Status InitParent(Call* parent, uint32_t propagation_mask);
149
+ void PublishToParent(Call* parent);
150
+ void MaybeUnpublishFromParent();
151
+ void PropagateCancellationToChildren();
152
+
153
+ Timestamp send_deadline() const { return send_deadline_; }
154
+ void set_send_deadline(Timestamp send_deadline) {
155
+ send_deadline_ = send_deadline;
156
+ }
157
+
158
+ private:
159
+ Arena* const arena_;
160
+ std::atomic<ParentCall*> parent_call_{nullptr};
161
+ ChildCall* child_ = nullptr;
162
+ Timestamp send_deadline_;
163
+ const bool is_client_;
164
+ // flag indicating that cancellation is inherited
165
+ bool cancellation_is_inherited_ = false;
166
+ };
167
+
168
+ class FilterStackCall final : public Call {
169
+ public:
170
+ ~FilterStackCall() {
171
+ for (int i = 0; i < GRPC_CONTEXT_COUNT; ++i) {
172
+ if (context_[i].destroy) {
173
+ context_[i].destroy(context_[i].value);
174
+ }
175
+ }
176
+ gpr_free(static_cast<void*>(const_cast<char*>(final_info_.error_string)));
112
177
  }
113
- bool completed_batch_step() {
114
- return steps_to_complete.FetchSub(1, grpc_core::MemoryOrder::ACQ_REL) == 1;
178
+
179
+ bool Completed() override {
180
+ return gpr_atm_acq_load(&received_final_op_atm_) != 0;
115
181
  }
116
- };
117
182
 
118
- struct parent_call {
119
- parent_call() { gpr_mu_init(&child_list_mu); }
120
- ~parent_call() { gpr_mu_destroy(&child_list_mu); }
183
+ // TODO(ctiller): return absl::StatusOr<SomeSmartPointer<Call>>?
184
+ static grpc_error_handle Create(grpc_call_create_args* args,
185
+ grpc_call** out_call);
121
186
 
122
- gpr_mu child_list_mu;
123
- grpc_call* first_child = nullptr;
124
- };
187
+ static Call* FromTopElem(grpc_call_element* elem) {
188
+ return FromCallStack(grpc_call_stack_from_top_element(elem));
189
+ }
125
190
 
126
- struct child_call {
127
- explicit 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
- };
191
+ grpc_call_stack* call_stack() override {
192
+ return reinterpret_cast<grpc_call_stack*>(
193
+ reinterpret_cast<char*>(this) +
194
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(*this)));
195
+ }
135
196
 
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;
149
- }
150
- }
197
+ grpc_call_element* call_elem(size_t idx) {
198
+ return grpc_call_stack_element(call_stack(), idx);
151
199
  }
152
200
 
153
- ~grpc_call() {
154
- gpr_free(static_cast<void*>(const_cast<char*>(final_info.error_string)));
201
+ CallCombiner* call_combiner() { return &call_combiner_; }
202
+
203
+ void CancelWithError(grpc_error_handle error) override;
204
+ void SetCompletionQueue(grpc_completion_queue* cq) override;
205
+ char* GetPeer() override;
206
+ grpc_call_error StartBatch(const grpc_op* ops, size_t nops, void* notify_tag,
207
+ bool is_notify_tag_closure) override;
208
+ void ExternalRef() override { ext_ref_.Ref(); }
209
+ void ExternalUnref() override;
210
+ void InternalRef(const char* reason) override {
211
+ GRPC_CALL_STACK_REF(call_stack(), reason);
212
+ }
213
+ void InternalUnref(const char* reason) override {
214
+ GRPC_CALL_STACK_UNREF(call_stack(), reason);
215
+ }
216
+
217
+ void ContextSet(grpc_context_index elem, void* value,
218
+ void (*destroy)(void* value)) override;
219
+ void* ContextGet(grpc_context_index elem) const override {
220
+ return context_[elem].value;
221
+ }
222
+
223
+ grpc_compression_algorithm compression_for_level(
224
+ grpc_compression_level level) override {
225
+ return encodings_accepted_by_peer_.CompressionAlgorithmForLevel(level);
226
+ }
227
+
228
+ bool is_trailers_only() const override {
229
+ bool result = is_trailers_only_;
230
+ GPR_DEBUG_ASSERT(!result || recv_initial_metadata_.TransportSize() == 0);
231
+ return result;
232
+ }
233
+
234
+ bool failed_before_recv_message() const override {
235
+ return call_failed_before_recv_message_;
236
+ }
237
+
238
+ grpc_compression_algorithm test_only_compression_algorithm() override {
239
+ return incoming_compression_algorithm_;
240
+ }
241
+
242
+ uint32_t test_only_message_flags() override {
243
+ return test_only_last_message_flags_;
155
244
  }
156
245
 
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;
246
+ uint32_t test_only_encodings_accepted_by_peer() override {
247
+ return encodings_accepted_by_peer_.ToLegacyBitmask();
248
+ }
249
+
250
+ static size_t InitialSizeEstimate() {
251
+ return sizeof(FilterStackCall) +
252
+ sizeof(BatchControl) * kMaxConcurrentBatches;
253
+ }
254
+
255
+ private:
256
+ // The maximum number of concurrent batches possible.
257
+ // Based upon the maximum number of individually queueable ops in the batch
258
+ // api:
259
+ // - initial metadata send
260
+ // - message send
261
+ // - status/close send (depending on client/server)
262
+ // - initial metadata recv
263
+ // - message recv
264
+ // - status/close recv (depending on client/server)
265
+ static constexpr size_t kMaxConcurrentBatches = 6;
266
+
267
+ static constexpr gpr_atm kRecvNone = 0;
268
+ static constexpr gpr_atm kRecvInitialMetadataFirst = 1;
269
+
270
+ struct BatchControl {
271
+ FilterStackCall* call_ = nullptr;
272
+ grpc_transport_stream_op_batch op_;
273
+ /* Share memory for cq_completion and notify_tag as they are never needed
274
+ simultaneously. Each byte used in this data structure count as six bytes
275
+ per call, so any savings we can make are worthwhile,
276
+
277
+ We use notify_tag to determine whether or not to send notification to the
278
+ completion queue. Once we've made that determination, we can reuse the
279
+ memory for cq_completion. */
280
+ union {
281
+ grpc_cq_completion cq_completion;
282
+ struct {
283
+ /* Any given op indicates completion by either (a) calling a closure or
284
+ (b) sending a notification on the call's completion queue. If
285
+ \a is_closure is true, \a tag indicates a closure to be invoked;
286
+ otherwise, \a tag indicates the tag to be used in the notification to
287
+ be sent to the completion queue. */
288
+ void* tag;
289
+ bool is_closure;
290
+ } notify_tag;
291
+ } completion_data_;
292
+ grpc_closure start_batch_;
293
+ grpc_closure finish_batch_;
294
+ std::atomic<intptr_t> steps_to_complete_{0};
295
+ AtomicError batch_error_;
296
+ void set_num_steps_to_complete(uintptr_t steps) {
297
+ steps_to_complete_.store(steps, std::memory_order_release);
298
+ }
299
+ bool completed_batch_step() {
300
+ return steps_to_complete_.fetch_sub(1, std::memory_order_acq_rel) == 1;
301
+ }
302
+
303
+ void PostCompletion();
304
+ void FinishStep();
305
+ void ContinueReceivingSlices();
306
+ void ReceivingSliceReady(grpc_error_handle error);
307
+ void ProcessDataAfterMetadata();
308
+ void ReceivingStreamReady(grpc_error_handle error);
309
+ void ValidateFilteredMetadata();
310
+ void ReceivingInitialMetadataReady(grpc_error_handle error);
311
+ void ReceivingTrailingMetadataReady(grpc_error_handle error);
312
+ void FinishBatch(grpc_error_handle error);
313
+ };
314
+
315
+ FilterStackCall(Arena* arena, const grpc_call_create_args& args)
316
+ : Call(arena, args.server_transport_data == nullptr, args.send_deadline),
317
+ cq_(args.cq),
318
+ channel_(args.channel->Ref()),
319
+ stream_op_payload_(context_) {}
320
+
321
+ static void ReleaseCall(void* call, grpc_error_handle);
322
+ static void DestroyCall(void* call, grpc_error_handle);
323
+
324
+ static FilterStackCall* FromCallStack(grpc_call_stack* call_stack) {
325
+ return reinterpret_cast<FilterStackCall*>(
326
+ reinterpret_cast<char*>(call_stack) -
327
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)));
328
+ }
329
+
330
+ void ExecuteBatch(grpc_transport_stream_op_batch* batch,
331
+ grpc_closure* start_batch_closure);
332
+ void SetFinalStatus(grpc_error_handle error);
333
+ BatchControl* ReuseOrAllocateBatchControl(const grpc_op* ops);
334
+ void HandleCompressionAlgorithmDisabled(
335
+ grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
336
+ void HandleCompressionAlgorithmNotAccepted(
337
+ grpc_compression_algorithm compression_algorithm) GPR_ATTRIBUTE_NOINLINE;
338
+ bool PrepareApplicationMetadata(size_t count, grpc_metadata* metadata,
339
+ bool is_trailing);
340
+ void PublishAppMetadata(grpc_metadata_batch* b, bool is_trailing);
341
+ void RecvInitialFilter(grpc_metadata_batch* b);
342
+ void RecvTrailingFilter(grpc_metadata_batch* b,
343
+ grpc_error_handle batch_error);
344
+
345
+ RefCount ext_ref_;
346
+ CallCombiner call_combiner_;
347
+ grpc_completion_queue* cq_;
348
+ grpc_polling_entity pollent_;
349
+ RefCountedPtr<Channel> channel_;
350
+ gpr_cycle_counter start_time_ = gpr_get_cycle_counter();
166
351
 
167
- /* client or server call */
168
- bool is_client;
169
352
  /** has grpc_call_unref been called */
170
- bool destroy_called = false;
171
- /** flag indicating that cancellation is inherited */
172
- bool cancellation_is_inherited = false;
353
+ bool destroy_called_ = false;
354
+ // Trailers-only response status
355
+ bool is_trailers_only_ = false;
173
356
  /** 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;
357
+ bool sent_initial_metadata_ = false;
358
+ bool sending_message_ = false;
359
+ bool sent_final_op_ = false;
360
+ bool received_initial_metadata_ = false;
361
+ bool receiving_message_ = false;
362
+ bool requested_final_op_ = false;
363
+ gpr_atm any_ops_sent_atm_ = 0;
364
+ gpr_atm received_final_op_atm_ = 0;
365
+
366
+ BatchControl* active_batches_[kMaxConcurrentBatches] = {};
367
+ grpc_transport_stream_op_batch_payload stream_op_payload_;
185
368
 
186
369
  /* first idx: is_receiving, second idx: is_trailing */
187
- grpc_metadata_batch metadata_batch[2][2] = {};
370
+ grpc_metadata_batch send_initial_metadata_{arena()};
371
+ grpc_metadata_batch send_trailing_metadata_{arena()};
372
+ grpc_metadata_batch recv_initial_metadata_{arena()};
373
+ grpc_metadata_batch recv_trailing_metadata_{arena()};
188
374
 
189
375
  /* Buffered read metadata waiting to be returned to the application.
190
376
  Element 0 is initial metadata, element 1 is trailing metadata. */
191
- grpc_metadata_array* buffered_metadata[2] = {};
192
-
193
- grpc_metadata compression_md;
377
+ grpc_metadata_array* buffered_metadata_[2] = {};
194
378
 
195
379
  // A char* indicating the peer name.
196
- gpr_atm peer_string = 0;
380
+ gpr_atm peer_string_ = 0;
197
381
 
198
382
  /* Call data useful used for reporting. Only valid after the call has
199
383
  * completed */
200
- grpc_call_final_info final_info;
384
+ grpc_call_final_info final_info_;
201
385
 
202
386
  /* 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;
387
+ grpc_compression_algorithm incoming_compression_algorithm_ =
388
+ GRPC_COMPRESS_NONE;
208
389
  /* Supported encodings (compression algorithms), a bitset.
209
390
  * 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;
391
+ CompressionAlgorithmSet encodings_accepted_by_peer_{GRPC_COMPRESS_NONE};
213
392
 
214
393
  /* 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;
394
+ grpc_call_context_element context_[GRPC_CONTEXT_COUNT] = {};
395
+
396
+ ManualConstructor<SliceBufferByteStream> sending_stream_;
397
+
398
+ OrphanablePtr<ByteStream> receiving_stream_;
399
+ bool call_failed_before_recv_message_ = false;
400
+ grpc_byte_buffer** receiving_buffer_ = nullptr;
401
+ grpc_slice receiving_slice_ = grpc_empty_slice();
402
+ grpc_closure receiving_slice_ready_;
403
+ grpc_closure receiving_stream_ready_;
404
+ grpc_closure receiving_initial_metadata_ready_;
405
+ grpc_closure receiving_trailing_metadata_ready_;
406
+ uint32_t test_only_last_message_flags_ = 0;
233
407
  // Status about operation of call
234
- bool sent_server_trailing_metadata = false;
235
- gpr_atm cancelled_with_error = 0;
408
+ bool sent_server_trailing_metadata_ = false;
409
+ gpr_atm cancelled_with_error_ = 0;
236
410
 
237
- grpc_closure release_call;
411
+ grpc_closure release_call_;
238
412
 
239
413
  union {
240
414
  struct {
@@ -245,10 +419,10 @@ struct grpc_call {
245
419
  struct {
246
420
  int* cancelled;
247
421
  // backpointer to owning server if this is a server side call.
248
- grpc_core::Server* core_server;
422
+ Server* core_server;
249
423
  } server;
250
- } final_op;
251
- gpr_atm status_error = 0;
424
+ } final_op_;
425
+ AtomicError status_error_;
252
426
 
253
427
  /* recv_state can contain one of the following values:
254
428
  RECV_NONE : : no initial metadata and messages received
@@ -266,225 +440,176 @@ struct grpc_call {
266
440
 
267
441
  For 1, 4: See receiving_initial_metadata_ready() function
268
442
  For 2, 3: See receiving_stream_ready() function */
269
- gpr_atm recv_state = 0;
443
+ gpr_atm recv_state_ = 0;
270
444
  };
271
445
 
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,
288
- grpc_transport_stream_op_batch* batch,
289
- grpc_closure* start_batch_closure);
290
-
291
- static void cancel_with_status(grpc_call* c, grpc_status_code status,
292
- const char* description);
293
- static void cancel_with_error(grpc_call* c, grpc_error* error);
294
- static void destroy_call(void* call_stack, grpc_error* error);
295
- static void receiving_slice_ready(void* bctlp, grpc_error* error);
296
- static void set_final_status(grpc_call* call, grpc_error* error);
297
- static void process_data_after_md(batch_control* bctl);
298
- static void post_batch_completion(batch_control* bctl);
299
-
300
- static void add_init_error(grpc_error** composite, grpc_error* new_err) {
301
- if (new_err == GRPC_ERROR_NONE) return;
302
- if (*composite == GRPC_ERROR_NONE) {
303
- *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
304
- }
305
- *composite = grpc_error_add_child(*composite, new_err);
306
- }
307
-
308
- void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
309
- return call->arena->Alloc(size);
310
- }
311
-
312
- static parent_call* get_or_create_parent_call(grpc_call* call) {
313
- parent_call* p =
314
- reinterpret_cast<parent_call*>(gpr_atm_acq_load(&call->parent_call_atm));
446
+ Call::ParentCall* Call::GetOrCreateParentCall() {
447
+ ParentCall* p = parent_call_.load(std::memory_order_acquire);
315
448
  if (p == nullptr) {
316
- p = call->arena->New<parent_call>();
317
- if (!gpr_atm_rel_cas(&call->parent_call_atm,
318
- reinterpret_cast<gpr_atm>(nullptr),
319
- reinterpret_cast<gpr_atm>(p))) {
320
- p->~parent_call();
321
- p = reinterpret_cast<parent_call*>(
322
- gpr_atm_acq_load(&call->parent_call_atm));
449
+ p = arena_->New<ParentCall>();
450
+ ParentCall* expected = nullptr;
451
+ if (!parent_call_.compare_exchange_strong(expected, p,
452
+ std::memory_order_release,
453
+ std::memory_order_relaxed)) {
454
+ p->~ParentCall();
455
+ p = expected;
323
456
  }
324
457
  }
325
458
  return p;
326
459
  }
327
460
 
328
- static parent_call* get_parent_call(grpc_call* call) {
329
- return reinterpret_cast<parent_call*>(
330
- gpr_atm_acq_load(&call->parent_call_atm));
461
+ Call::ParentCall* Call::parent_call() {
462
+ return parent_call_.load(std::memory_order_acquire);
331
463
  }
332
464
 
333
- size_t grpc_call_get_initial_size_estimate() {
334
- return sizeof(grpc_call) + sizeof(batch_control) * MAX_CONCURRENT_BATCHES +
335
- sizeof(grpc_linked_mdelem) * ESTIMATED_MDELEM_COUNT;
465
+ absl::Status Call::InitParent(Call* parent, uint32_t propagation_mask) {
466
+ child_ = arena()->New<ChildCall>(parent);
467
+
468
+ parent->InternalRef("child");
469
+ GPR_ASSERT(is_client_);
470
+ GPR_ASSERT(!parent->is_client_);
471
+
472
+ if (propagation_mask & GRPC_PROPAGATE_DEADLINE) {
473
+ send_deadline_ = std::min(send_deadline_, parent->send_deadline_);
474
+ }
475
+ /* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
476
+ * GRPC_PROPAGATE_STATS_CONTEXT */
477
+ /* TODO(ctiller): This should change to use the appropriate census start_op
478
+ * call. */
479
+ if (propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
480
+ if (0 == (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
481
+ return absl::UnknownError(
482
+ "Census tracing propagation requested without Census context "
483
+ "propagation");
484
+ }
485
+ ContextSet(GRPC_CONTEXT_TRACING, parent->ContextGet(GRPC_CONTEXT_TRACING),
486
+ nullptr);
487
+ } else if (propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
488
+ return absl::UnknownError(
489
+ "Census context propagation requested without Census tracing "
490
+ "propagation");
491
+ }
492
+ if (propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
493
+ cancellation_is_inherited_ = true;
494
+ }
495
+ return absl::OkStatus();
496
+ }
497
+
498
+ void Call::PublishToParent(Call* parent) {
499
+ ChildCall* cc = child_;
500
+ ParentCall* pc = parent->GetOrCreateParentCall();
501
+ MutexLock lock(&pc->child_list_mu);
502
+ if (pc->first_child == nullptr) {
503
+ pc->first_child = this;
504
+ cc->sibling_next = cc->sibling_prev = this;
505
+ } else {
506
+ cc->sibling_next = pc->first_child;
507
+ cc->sibling_prev = pc->first_child->child_->sibling_prev;
508
+ cc->sibling_next->child_->sibling_prev =
509
+ cc->sibling_prev->child_->sibling_next = this;
510
+ }
511
+ if (parent->Completed()) {
512
+ CancelWithError(GRPC_ERROR_CANCELLED);
513
+ }
336
514
  }
337
515
 
338
- grpc_error* grpc_call_create(const grpc_call_create_args* args,
339
- grpc_call** out_call) {
516
+ grpc_error_handle FilterStackCall::Create(grpc_call_create_args* args,
517
+ grpc_call** out_call) {
340
518
  GPR_TIMER_SCOPE("grpc_call_create", 0);
341
519
 
342
- GRPC_CHANNEL_INTERNAL_REF(args->channel, "call");
520
+ Channel* channel = args->channel.get();
343
521
 
344
- grpc_core::Arena* arena;
345
- grpc_call* call;
346
- grpc_error* error = GRPC_ERROR_NONE;
347
- grpc_channel_stack* channel_stack =
348
- grpc_channel_get_channel_stack(args->channel);
349
- size_t initial_size = grpc_channel_get_call_size_estimate(args->channel);
522
+ auto add_init_error = [](grpc_error_handle* composite,
523
+ grpc_error_handle new_err) {
524
+ if (new_err == GRPC_ERROR_NONE) return;
525
+ if (*composite == GRPC_ERROR_NONE) {
526
+ *composite = GRPC_ERROR_CREATE_FROM_STATIC_STRING("Call creation failed");
527
+ }
528
+ *composite = grpc_error_add_child(*composite, new_err);
529
+ };
530
+
531
+ Arena* arena;
532
+ FilterStackCall* call;
533
+ grpc_error_handle error = GRPC_ERROR_NONE;
534
+ grpc_channel_stack* channel_stack = channel->channel_stack();
535
+ size_t initial_size = channel->CallSizeEstimate();
350
536
  GRPC_STATS_INC_CALL_INITIAL_SIZE(initial_size);
351
- size_t call_and_stack_size =
352
- GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(grpc_call)) +
353
- channel_stack->call_stack_size;
354
537
  size_t call_alloc_size =
355
- call_and_stack_size + (args->parent ? sizeof(child_call) : 0);
538
+ GPR_ROUND_UP_TO_ALIGNMENT_SIZE(sizeof(FilterStackCall)) +
539
+ channel_stack->call_stack_size;
356
540
 
357
- std::pair<grpc_core::Arena*, void*> arena_with_call =
358
- grpc_core::Arena::CreateWithAlloc(initial_size, call_alloc_size);
541
+ std::pair<Arena*, void*> arena_with_call = Arena::CreateWithAlloc(
542
+ initial_size, call_alloc_size, channel->allocator());
359
543
  arena = arena_with_call.first;
360
- call = new (arena_with_call.second) grpc_call(arena, *args);
361
- *out_call = call;
544
+ call = new (arena_with_call.second) FilterStackCall(arena, *args);
545
+ GPR_DEBUG_ASSERT(FromC(call->c_ptr()) == call);
546
+ GPR_DEBUG_ASSERT(FromCallStack(call->call_stack()) == call);
547
+ *out_call = call->c_ptr();
362
548
  grpc_slice path = grpc_empty_slice();
363
- if (call->is_client) {
364
- call->final_op.client.status_details = nullptr;
365
- call->final_op.client.status = nullptr;
366
- call->final_op.client.error_string = nullptr;
549
+ if (call->is_client()) {
550
+ call->final_op_.client.status_details = nullptr;
551
+ call->final_op_.client.status = nullptr;
552
+ call->final_op_.client.error_string = nullptr;
367
553
  GRPC_STATS_INC_CLIENT_CALLS_CREATED();
368
- GPR_ASSERT(args->add_initial_metadata_count <
369
- MAX_SEND_EXTRA_METADATA_COUNT);
370
- for (size_t i = 0; i < args->add_initial_metadata_count; i++) {
371
- call->send_extra_metadata[i].md = args->add_initial_metadata[i];
372
- if (grpc_slice_eq_static_interned(
373
- GRPC_MDKEY(args->add_initial_metadata[i]), GRPC_MDSTR_PATH)) {
374
- path = grpc_slice_ref_internal(
375
- GRPC_MDVALUE(args->add_initial_metadata[i]));
376
- }
554
+ path = grpc_slice_ref_internal(args->path->c_slice());
555
+ call->send_initial_metadata_.Set(HttpPathMetadata(),
556
+ std::move(*args->path));
557
+ if (args->authority.has_value()) {
558
+ call->send_initial_metadata_.Set(HttpAuthorityMetadata(),
559
+ std::move(*args->authority));
377
560
  }
378
- call->send_extra_metadata_count =
379
- static_cast<int>(args->add_initial_metadata_count);
380
561
  } else {
381
562
  GRPC_STATS_INC_SERVER_CALLS_CREATED();
382
- call->final_op.server.cancelled = nullptr;
383
- call->final_op.server.core_server = args->server;
384
- GPR_ASSERT(args->add_initial_metadata_count == 0);
385
- call->send_extra_metadata_count = 0;
563
+ call->final_op_.server.cancelled = nullptr;
564
+ call->final_op_.server.core_server = args->server;
386
565
  }
387
566
 
388
- grpc_millis send_deadline = args->send_deadline;
389
- bool immediately_cancel = false;
390
-
391
- if (args->parent != nullptr) {
392
- call->child = new (reinterpret_cast<char*>(arena_with_call.second) +
393
- call_and_stack_size) child_call(args->parent);
394
-
395
- GRPC_CALL_INTERNAL_REF(args->parent, "child");
396
- GPR_ASSERT(call->is_client);
397
- GPR_ASSERT(!args->parent->is_client);
398
-
399
- if (args->propagation_mask & GRPC_PROPAGATE_DEADLINE) {
400
- send_deadline = GPR_MIN(send_deadline, args->parent->send_deadline);
401
- }
402
- /* for now GRPC_PROPAGATE_TRACING_CONTEXT *MUST* be passed with
403
- * GRPC_PROPAGATE_STATS_CONTEXT */
404
- /* TODO(ctiller): This should change to use the appropriate census start_op
405
- * call. */
406
- if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_TRACING_CONTEXT) {
407
- if (0 == (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT)) {
408
- add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
409
- "Census tracing propagation requested "
410
- "without Census context propagation"));
411
- }
412
- grpc_call_context_set(call, GRPC_CONTEXT_TRACING,
413
- args->parent->context[GRPC_CONTEXT_TRACING].value,
414
- nullptr);
415
- } else if (args->propagation_mask & GRPC_PROPAGATE_CENSUS_STATS_CONTEXT) {
416
- add_init_error(&error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
417
- "Census context propagation requested "
418
- "without Census tracing propagation"));
419
- }
420
- if (args->propagation_mask & GRPC_PROPAGATE_CANCELLATION) {
421
- call->cancellation_is_inherited = true;
422
- if (gpr_atm_acq_load(&args->parent->received_final_op_atm)) {
423
- immediately_cancel = true;
424
- }
425
- }
567
+ Call* parent = Call::FromC(args->parent);
568
+ if (parent != nullptr) {
569
+ add_init_error(&error, absl_status_to_grpc_error(call->InitParent(
570
+ parent, args->propagation_mask)));
426
571
  }
427
- call->send_deadline = send_deadline;
428
572
  /* initial refcount dropped by grpc_call_unref */
429
- grpc_call_element_args call_args = {CALL_STACK_FROM_CALL(call),
430
- args->server_transport_data,
431
- call->context,
432
- path,
433
- call->start_time,
434
- send_deadline,
435
- call->arena,
436
- &call->call_combiner};
437
- add_init_error(&error, grpc_call_stack_init(channel_stack, 1, destroy_call,
573
+ grpc_call_element_args call_args = {
574
+ call->call_stack(), args->server_transport_data,
575
+ call->context_, path,
576
+ call->start_time_, call->send_deadline(),
577
+ call->arena(), &call->call_combiner_};
578
+ add_init_error(&error, grpc_call_stack_init(channel_stack, 1, DestroyCall,
438
579
  call, &call_args));
439
580
  // Publish this call to parent only after the call stack has been initialized.
440
- if (args->parent != nullptr) {
441
- child_call* cc = call->child;
442
- parent_call* pc = get_or_create_parent_call(args->parent);
443
- gpr_mu_lock(&pc->child_list_mu);
444
- if (pc->first_child == nullptr) {
445
- pc->first_child = call;
446
- cc->sibling_next = cc->sibling_prev = call;
447
- } else {
448
- cc->sibling_next = pc->first_child;
449
- cc->sibling_prev = pc->first_child->child->sibling_prev;
450
- cc->sibling_next->child->sibling_prev =
451
- cc->sibling_prev->child->sibling_next = call;
452
- }
453
- gpr_mu_unlock(&pc->child_list_mu);
581
+ if (parent != nullptr) {
582
+ call->PublishToParent(parent);
454
583
  }
455
584
 
456
585
  if (error != GRPC_ERROR_NONE) {
457
- cancel_with_error(call, GRPC_ERROR_REF(error));
458
- }
459
- if (immediately_cancel) {
460
- cancel_with_error(call, GRPC_ERROR_CANCELLED);
586
+ call->CancelWithError(GRPC_ERROR_REF(error));
461
587
  }
462
588
  if (args->cq != nullptr) {
463
589
  GPR_ASSERT(args->pollset_set_alternative == nullptr &&
464
590
  "Only one of 'cq' and 'pollset_set_alternative' should be "
465
591
  "non-nullptr.");
466
592
  GRPC_CQ_INTERNAL_REF(args->cq, "bind");
467
- call->pollent =
593
+ call->pollent_ =
468
594
  grpc_polling_entity_create_from_pollset(grpc_cq_pollset(args->cq));
469
595
  }
470
596
  if (args->pollset_set_alternative != nullptr) {
471
- call->pollent = grpc_polling_entity_create_from_pollset_set(
597
+ call->pollent_ = grpc_polling_entity_create_from_pollset_set(
472
598
  args->pollset_set_alternative);
473
599
  }
474
- if (!grpc_polling_entity_is_empty(&call->pollent)) {
475
- grpc_call_stack_set_pollset_or_pollset_set(CALL_STACK_FROM_CALL(call),
476
- &call->pollent);
600
+ if (!grpc_polling_entity_is_empty(&call->pollent_)) {
601
+ grpc_call_stack_set_pollset_or_pollset_set(call->call_stack(),
602
+ &call->pollent_);
477
603
  }
478
604
 
479
- if (call->is_client) {
480
- grpc_core::channelz::ChannelNode* channelz_channel =
481
- grpc_channel_get_channelz_node(call->channel);
605
+ if (call->is_client()) {
606
+ channelz::ChannelNode* channelz_channel = channel->channelz_node();
482
607
  if (channelz_channel != nullptr) {
483
608
  channelz_channel->RecordCallStarted();
484
609
  }
485
- } else if (call->final_op.server.core_server != nullptr) {
486
- grpc_core::channelz::ServerNode* channelz_node =
487
- call->final_op.server.core_server->channelz_node();
610
+ } else if (call->final_op_.server.core_server != nullptr) {
611
+ channelz::ServerNode* channelz_node =
612
+ call->final_op_.server.core_server->channelz_node();
488
613
  if (channelz_node != nullptr) {
489
614
  channelz_node->RecordCallStarted();
490
615
  }
@@ -495,283 +620,209 @@ grpc_error* grpc_call_create(const grpc_call_create_args* args,
495
620
  return error;
496
621
  }
497
622
 
498
- void grpc_call_set_completion_queue(grpc_call* call,
499
- grpc_completion_queue* cq) {
623
+ void FilterStackCall::SetCompletionQueue(grpc_completion_queue* cq) {
500
624
  GPR_ASSERT(cq);
501
625
 
502
- if (grpc_polling_entity_pollset_set(&call->pollent) != nullptr) {
626
+ if (grpc_polling_entity_pollset_set(&pollent_) != nullptr) {
503
627
  gpr_log(GPR_ERROR, "A pollset_set is already registered for this call.");
504
628
  abort();
505
629
  }
506
- call->cq = cq;
630
+ cq_ = cq;
507
631
  GRPC_CQ_INTERNAL_REF(cq, "bind");
508
- call->pollent = grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
509
- grpc_call_stack_set_pollset_or_pollset_set(CALL_STACK_FROM_CALL(call),
510
- &call->pollent);
511
- }
512
-
513
- #ifndef NDEBUG
514
- #define REF_REASON reason
515
- #define REF_ARG , const char* reason
516
- #else
517
- #define REF_REASON ""
518
- #define REF_ARG
519
- #endif
520
- void grpc_call_internal_ref(grpc_call* c REF_ARG) {
521
- GRPC_CALL_STACK_REF(CALL_STACK_FROM_CALL(c), REF_REASON);
522
- }
523
- void grpc_call_internal_unref(grpc_call* c REF_ARG) {
524
- GRPC_CALL_STACK_UNREF(CALL_STACK_FROM_CALL(c), REF_REASON);
632
+ pollent_ = grpc_polling_entity_create_from_pollset(grpc_cq_pollset(cq));
633
+ grpc_call_stack_set_pollset_or_pollset_set(call_stack(), &pollent_);
525
634
  }
526
635
 
527
- static void release_call(void* call, grpc_error* /*error*/) {
528
- grpc_call* c = static_cast<grpc_call*>(call);
529
- grpc_channel* channel = c->channel;
530
- grpc_core::Arena* arena = c->arena;
531
- c->~grpc_call();
532
- grpc_channel_update_call_size_estimate(channel, arena->Destroy());
533
- GRPC_CHANNEL_INTERNAL_UNREF(channel, "call");
636
+ void FilterStackCall::ReleaseCall(void* call, grpc_error_handle /*error*/) {
637
+ auto* c = static_cast<FilterStackCall*>(call);
638
+ RefCountedPtr<Channel> channel = std::move(c->channel_);
639
+ Arena* arena = c->arena();
640
+ c->~FilterStackCall();
641
+ channel->UpdateCallSizeEstimate(arena->Destroy());
534
642
  }
535
643
 
536
- static void destroy_call(void* call, grpc_error* /*error*/) {
644
+ void FilterStackCall::DestroyCall(void* call, grpc_error_handle /*error*/) {
537
645
  GPR_TIMER_SCOPE("destroy_call", 0);
538
- size_t i;
539
- int ii;
540
- grpc_call* c = static_cast<grpc_call*>(call);
541
- for (i = 0; i < 2; i++) {
542
- grpc_metadata_batch_destroy(
543
- &c->metadata_batch[1 /* is_receiving */][i /* is_initial */]);
544
- }
545
- c->receiving_stream.reset();
546
- parent_call* pc = get_parent_call(c);
646
+ auto* c = static_cast<FilterStackCall*>(call);
647
+ c->recv_initial_metadata_.Clear();
648
+ c->recv_trailing_metadata_.Clear();
649
+ c->receiving_stream_.reset();
650
+ ParentCall* pc = c->parent_call();
547
651
  if (pc != nullptr) {
548
- pc->~parent_call();
549
- }
550
- for (ii = 0; ii < c->send_extra_metadata_count; ii++) {
551
- GRPC_MDELEM_UNREF(c->send_extra_metadata[ii].md);
652
+ pc->~ParentCall();
552
653
  }
553
- for (i = 0; i < GRPC_CONTEXT_COUNT; i++) {
554
- if (c->context[i].destroy) {
555
- c->context[i].destroy(c->context[i].value);
556
- }
557
- }
558
- if (c->cq) {
559
- GRPC_CQ_INTERNAL_UNREF(c->cq, "bind");
654
+ if (c->cq_) {
655
+ GRPC_CQ_INTERNAL_UNREF(c->cq_, "bind");
560
656
  }
561
657
 
562
- grpc_error* status_error =
563
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&c->status_error));
564
- grpc_error_get_status(status_error, c->send_deadline,
565
- &c->final_info.final_status, nullptr, nullptr,
566
- &(c->final_info.error_string));
567
- GRPC_ERROR_UNREF(status_error);
568
- c->final_info.stats.latency =
569
- gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time);
570
- grpc_call_stack_destroy(CALL_STACK_FROM_CALL(c), &c->final_info,
571
- GRPC_CLOSURE_INIT(&c->release_call, release_call, c,
658
+ grpc_error_handle status_error = c->status_error_.get();
659
+ grpc_error_get_status(status_error, c->send_deadline(),
660
+ &c->final_info_.final_status, nullptr, nullptr,
661
+ &(c->final_info_.error_string));
662
+ c->status_error_.set(GRPC_ERROR_NONE);
663
+ c->final_info_.stats.latency =
664
+ gpr_cycle_counter_sub(gpr_get_cycle_counter(), c->start_time_);
665
+ grpc_call_stack_destroy(c->call_stack(), &c->final_info_,
666
+ GRPC_CLOSURE_INIT(&c->release_call_, ReleaseCall, c,
572
667
  grpc_schedule_on_exec_ctx));
573
668
  }
574
669
 
575
- void grpc_call_ref(grpc_call* c) { c->ext_ref.Ref(); }
576
-
577
- void grpc_call_unref(grpc_call* c) {
578
- if (GPR_LIKELY(!c->ext_ref.Unref())) return;
579
-
580
- GPR_TIMER_SCOPE("grpc_call_unref", 0);
581
-
582
- child_call* cc = c->child;
583
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
584
- grpc_core::ExecCtx exec_ctx;
670
+ void Call::MaybeUnpublishFromParent() {
671
+ ChildCall* cc = child_;
672
+ if (cc == nullptr) return;
585
673
 
586
- GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (c));
587
-
588
- if (cc) {
589
- parent_call* pc = get_parent_call(cc->parent);
590
- gpr_mu_lock(&pc->child_list_mu);
591
- if (c == pc->first_child) {
674
+ ParentCall* pc = cc->parent->parent_call();
675
+ {
676
+ MutexLock lock(&pc->child_list_mu);
677
+ if (this == pc->first_child) {
592
678
  pc->first_child = cc->sibling_next;
593
- if (c == pc->first_child) {
679
+ if (this == pc->first_child) {
594
680
  pc->first_child = nullptr;
595
681
  }
596
682
  }
597
- cc->sibling_prev->child->sibling_next = cc->sibling_next;
598
- cc->sibling_next->child->sibling_prev = cc->sibling_prev;
599
- gpr_mu_unlock(&pc->child_list_mu);
600
- GRPC_CALL_INTERNAL_UNREF(cc->parent, "child");
683
+ cc->sibling_prev->child_->sibling_next = cc->sibling_next;
684
+ cc->sibling_next->child_->sibling_prev = cc->sibling_prev;
601
685
  }
686
+ cc->parent->InternalUnref("child");
687
+ }
688
+
689
+ void FilterStackCall::ExternalUnref() {
690
+ if (GPR_LIKELY(!ext_ref_.Unref())) return;
691
+
692
+ GPR_TIMER_SCOPE("grpc_call_unref", 0);
602
693
 
603
- GPR_ASSERT(!c->destroy_called);
604
- c->destroy_called = true;
605
- bool cancel = gpr_atm_acq_load(&c->any_ops_sent_atm) != 0 &&
606
- gpr_atm_acq_load(&c->received_final_op_atm) == 0;
694
+ ApplicationCallbackExecCtx callback_exec_ctx;
695
+ ExecCtx exec_ctx;
696
+
697
+ GRPC_API_TRACE("grpc_call_unref(c=%p)", 1, (this));
698
+
699
+ MaybeUnpublishFromParent();
700
+
701
+ GPR_ASSERT(!destroy_called_);
702
+ destroy_called_ = true;
703
+ bool cancel = gpr_atm_acq_load(&any_ops_sent_atm_) != 0 &&
704
+ gpr_atm_acq_load(&received_final_op_atm_) == 0;
607
705
  if (cancel) {
608
- cancel_with_error(c, GRPC_ERROR_CANCELLED);
706
+ CancelWithError(GRPC_ERROR_CANCELLED);
609
707
  } else {
610
708
  // Unset the call combiner cancellation closure. This has the
611
709
  // effect of scheduling the previously set cancellation closure, if
612
710
  // any, so that it can release any internal references it may be
613
- // holding to the call stack. Also flush the closures on exec_ctx so that
614
- // filters that schedule cancel notification closures on exec_ctx do not
615
- // need to take a ref of the call stack to guarantee closure liveness.
616
- c->call_combiner.SetNotifyOnCancel(nullptr);
617
- grpc_core::ExecCtx::Get()->Flush();
711
+ // holding to the call stack.
712
+ call_combiner_.SetNotifyOnCancel(nullptr);
618
713
  }
619
- GRPC_CALL_INTERNAL_UNREF(c, "destroy");
714
+ InternalUnref("destroy");
620
715
  }
621
716
 
622
- grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
623
- GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
624
- GPR_ASSERT(!reserved);
625
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
626
- grpc_core::ExecCtx exec_ctx;
627
- cancel_with_error(call, GRPC_ERROR_CANCELLED);
628
- return GRPC_CALL_OK;
629
- }
630
-
631
- // This is called via the call combiner to start sending a batch down
632
- // the filter stack.
633
- static void execute_batch_in_call_combiner(void* arg, grpc_error* /*ignored*/) {
634
- GPR_TIMER_SCOPE("execute_batch_in_call_combiner", 0);
635
- grpc_transport_stream_op_batch* batch =
636
- static_cast<grpc_transport_stream_op_batch*>(arg);
637
- grpc_call* call = static_cast<grpc_call*>(batch->handler_private.extra_arg);
638
- grpc_call_element* elem = CALL_ELEM_FROM_CALL(call, 0);
639
- GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
640
- elem->filter->start_transport_stream_op_batch(elem, batch);
717
+ char* FilterStackCall::GetPeer() {
718
+ char* peer_string = reinterpret_cast<char*>(gpr_atm_acq_load(&peer_string_));
719
+ if (peer_string != nullptr) return gpr_strdup(peer_string);
720
+ peer_string = grpc_channel_get_target(channel_->c_ptr());
721
+ if (peer_string != nullptr) return peer_string;
722
+ return gpr_strdup("unknown");
641
723
  }
642
724
 
643
725
  // start_batch_closure points to a caller-allocated closure to be used
644
726
  // for entering the call combiner.
645
- static void execute_batch(grpc_call* call,
646
- grpc_transport_stream_op_batch* batch,
647
- grpc_closure* start_batch_closure) {
648
- batch->handler_private.extra_arg = call;
727
+ void FilterStackCall::ExecuteBatch(grpc_transport_stream_op_batch* batch,
728
+ grpc_closure* start_batch_closure) {
729
+ // This is called via the call combiner to start sending a batch down
730
+ // the filter stack.
731
+ auto execute_batch_in_call_combiner = [](void* arg, grpc_error_handle) {
732
+ GPR_TIMER_SCOPE("execute_batch_in_call_combiner", 0);
733
+ grpc_transport_stream_op_batch* batch =
734
+ static_cast<grpc_transport_stream_op_batch*>(arg);
735
+ auto* call =
736
+ static_cast<FilterStackCall*>(batch->handler_private.extra_arg);
737
+ grpc_call_element* elem = call->call_elem(0);
738
+ GRPC_CALL_LOG_OP(GPR_INFO, elem, batch);
739
+ elem->filter->start_transport_stream_op_batch(elem, batch);
740
+ };
741
+ batch->handler_private.extra_arg = this;
649
742
  GRPC_CLOSURE_INIT(start_batch_closure, execute_batch_in_call_combiner, batch,
650
743
  grpc_schedule_on_exec_ctx);
651
- GRPC_CALL_COMBINER_START(&call->call_combiner, start_batch_closure,
744
+ GRPC_CALL_COMBINER_START(call_combiner(), start_batch_closure,
652
745
  GRPC_ERROR_NONE, "executing batch");
653
746
  }
654
747
 
655
- char* grpc_call_get_peer(grpc_call* call) {
656
- char* peer_string =
657
- reinterpret_cast<char*>(gpr_atm_acq_load(&call->peer_string));
658
- if (peer_string != nullptr) return gpr_strdup(peer_string);
659
- peer_string = grpc_channel_get_target(call->channel);
660
- if (peer_string != nullptr) return peer_string;
661
- return gpr_strdup("unknown");
662
- }
663
-
664
- grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
665
- return CALL_FROM_TOP_ELEM(surface_element);
666
- }
667
-
668
- /*******************************************************************************
669
- * CANCELLATION
670
- */
671
-
672
- grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
673
- grpc_status_code status,
674
- const char* description,
675
- void* reserved) {
676
- grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
677
- grpc_core::ExecCtx exec_ctx;
678
- GRPC_API_TRACE(
679
- "grpc_call_cancel_with_status("
680
- "c=%p, status=%d, description=%s, reserved=%p)",
681
- 4, (c, (int)status, description, reserved));
682
- GPR_ASSERT(reserved == nullptr);
683
- cancel_with_status(c, status, description);
684
- return GRPC_CALL_OK;
685
- }
686
-
687
- struct cancel_state {
688
- grpc_call* call;
748
+ namespace {
749
+ struct CancelState {
750
+ FilterStackCall* call;
689
751
  grpc_closure start_batch;
690
752
  grpc_closure finish_batch;
691
753
  };
754
+ } // namespace
755
+
692
756
  // The on_complete callback used when sending a cancel_stream batch down
693
757
  // the filter stack. Yields the call combiner when the batch is done.
694
- static void done_termination(void* arg, grpc_error* /*error*/) {
695
- cancel_state* state = static_cast<cancel_state*>(arg);
696
- GRPC_CALL_COMBINER_STOP(&state->call->call_combiner,
758
+ static void done_termination(void* arg, grpc_error_handle /*error*/) {
759
+ CancelState* state = static_cast<CancelState*>(arg);
760
+ GRPC_CALL_COMBINER_STOP(state->call->call_combiner(),
697
761
  "on_complete for cancel_stream op");
698
- GRPC_CALL_INTERNAL_UNREF(state->call, "termination");
699
- gpr_free(state);
762
+ state->call->InternalUnref("termination");
763
+ delete state;
700
764
  }
701
765
 
702
- static void cancel_with_error(grpc_call* c, grpc_error* error) {
703
- if (!gpr_atm_rel_cas(&c->cancelled_with_error, 0, 1)) {
766
+ void FilterStackCall::CancelWithError(grpc_error_handle error) {
767
+ if (!gpr_atm_rel_cas(&cancelled_with_error_, 0, 1)) {
704
768
  GRPC_ERROR_UNREF(error);
705
769
  return;
706
770
  }
707
- GRPC_CALL_INTERNAL_REF(c, "termination");
771
+ InternalRef("termination");
708
772
  // Inform the call combiner of the cancellation, so that it can cancel
709
773
  // any in-flight asynchronous actions that may be holding the call
710
774
  // combiner. This ensures that the cancel_stream batch can be sent
711
775
  // down the filter stack in a timely manner.
712
- c->call_combiner.Cancel(GRPC_ERROR_REF(error));
713
- cancel_state* state = static_cast<cancel_state*>(gpr_malloc(sizeof(*state)));
714
- state->call = c;
776
+ call_combiner_.Cancel(GRPC_ERROR_REF(error));
777
+ CancelState* state = new CancelState;
778
+ state->call = this;
715
779
  GRPC_CLOSURE_INIT(&state->finish_batch, done_termination, state,
716
780
  grpc_schedule_on_exec_ctx);
717
781
  grpc_transport_stream_op_batch* op =
718
782
  grpc_make_transport_stream_op(&state->finish_batch);
719
783
  op->cancel_stream = true;
720
784
  op->payload->cancel_stream.cancel_error = error;
721
- execute_batch(c, op, &state->start_batch);
785
+ ExecuteBatch(op, &state->start_batch);
722
786
  }
723
787
 
724
- void grpc_call_cancel_internal(grpc_call* call) {
725
- cancel_with_error(call, GRPC_ERROR_CANCELLED);
726
- }
727
-
728
- static grpc_error* error_from_status(grpc_status_code status,
729
- const char* description) {
788
+ void Call::CancelWithStatus(grpc_status_code status, const char* description) {
730
789
  // copying 'description' is needed to ensure the grpc_call_cancel_with_status
731
790
  // guarantee that can be short-lived.
732
- return grpc_error_set_int(
791
+ CancelWithError(grpc_error_set_int(
733
792
  grpc_error_set_str(GRPC_ERROR_CREATE_FROM_COPIED_STRING(description),
734
- GRPC_ERROR_STR_GRPC_MESSAGE,
735
- grpc_slice_from_copied_string(description)),
736
- GRPC_ERROR_INT_GRPC_STATUS, status);
737
- }
738
-
739
- static void cancel_with_status(grpc_call* c, grpc_status_code status,
740
- const char* description) {
741
- cancel_with_error(c, error_from_status(status, description));
793
+ GRPC_ERROR_STR_GRPC_MESSAGE, description),
794
+ GRPC_ERROR_INT_GRPC_STATUS, status));
742
795
  }
743
796
 
744
- static void set_final_status(grpc_call* call, grpc_error* error) {
797
+ void FilterStackCall::SetFinalStatus(grpc_error_handle error) {
745
798
  if (GRPC_TRACE_FLAG_ENABLED(grpc_call_error_trace)) {
746
- gpr_log(GPR_DEBUG, "set_final_status %s", call->is_client ? "CLI" : "SVR");
747
- gpr_log(GPR_DEBUG, "%s", grpc_error_string(error));
748
- }
749
- if (call->is_client) {
750
- grpc_error_get_status(error, call->send_deadline,
751
- call->final_op.client.status,
752
- call->final_op.client.status_details, nullptr,
753
- call->final_op.client.error_string);
754
- // explicitly take a ref
755
- grpc_slice_ref_internal(*call->final_op.client.status_details);
756
- gpr_atm_rel_store(&call->status_error, reinterpret_cast<gpr_atm>(error));
757
- grpc_core::channelz::ChannelNode* channelz_channel =
758
- grpc_channel_get_channelz_node(call->channel);
799
+ gpr_log(GPR_DEBUG, "set_final_status %s", is_client() ? "CLI" : "SVR");
800
+ gpr_log(GPR_DEBUG, "%s", grpc_error_std_string(error).c_str());
801
+ }
802
+ if (is_client()) {
803
+ std::string status_details;
804
+ grpc_error_get_status(error, send_deadline(), final_op_.client.status,
805
+ &status_details, nullptr,
806
+ final_op_.client.error_string);
807
+ *final_op_.client.status_details =
808
+ grpc_slice_from_cpp_string(std::move(status_details));
809
+ status_error_.set(error);
810
+ GRPC_ERROR_UNREF(error);
811
+ channelz::ChannelNode* channelz_channel = channel_->channelz_node();
759
812
  if (channelz_channel != nullptr) {
760
- if (*call->final_op.client.status != GRPC_STATUS_OK) {
813
+ if (*final_op_.client.status != GRPC_STATUS_OK) {
761
814
  channelz_channel->RecordCallFailed();
762
815
  } else {
763
816
  channelz_channel->RecordCallSucceeded();
764
817
  }
765
818
  }
766
819
  } else {
767
- *call->final_op.server.cancelled =
768
- error != GRPC_ERROR_NONE || !call->sent_server_trailing_metadata;
769
- grpc_core::channelz::ServerNode* channelz_node =
770
- call->final_op.server.core_server->channelz_node();
820
+ *final_op_.server.cancelled =
821
+ error != GRPC_ERROR_NONE || !sent_server_trailing_metadata_;
822
+ channelz::ServerNode* channelz_node =
823
+ final_op_.server.core_server->channelz_node();
771
824
  if (channelz_node != nullptr) {
772
- if (*call->final_op.server.cancelled ||
773
- reinterpret_cast<grpc_error*>(
774
- gpr_atm_acq_load(&call->status_error)) != GRPC_ERROR_NONE) {
825
+ if (*final_op_.server.cancelled || !status_error_.ok()) {
775
826
  channelz_node->RecordCallFailed();
776
827
  } else {
777
828
  channelz_node->RecordCallSucceeded();
@@ -781,330 +832,166 @@ static void set_final_status(grpc_call* call, grpc_error* error) {
781
832
  }
782
833
  }
783
834
 
784
- /*******************************************************************************
785
- * COMPRESSION
786
- */
787
-
788
- static void set_incoming_message_compression_algorithm(
789
- grpc_call* call, grpc_message_compression_algorithm algo) {
790
- GPR_ASSERT(algo < GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT);
791
- call->incoming_message_compression_algorithm = algo;
792
- }
793
-
794
- static void set_incoming_stream_compression_algorithm(
795
- grpc_call* call, grpc_stream_compression_algorithm algo) {
796
- GPR_ASSERT(algo < GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT);
797
- call->incoming_stream_compression_algorithm = algo;
798
- }
799
-
800
- grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
801
- grpc_call* call) {
802
- grpc_compression_algorithm algorithm = GRPC_COMPRESS_NONE;
803
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
804
- &algorithm, call->incoming_message_compression_algorithm,
805
- call->incoming_stream_compression_algorithm);
806
- return algorithm;
807
- }
808
-
809
- static grpc_compression_algorithm compression_algorithm_for_level_locked(
810
- grpc_call* call, grpc_compression_level level) {
811
- return grpc_compression_algorithm_for_level(level,
812
- call->encodings_accepted_by_peer);
813
- }
814
-
815
- uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
816
- uint32_t flags;
817
- flags = call->test_only_last_message_flags;
818
- return flags;
819
- }
820
-
821
- static void destroy_encodings_accepted_by_peer(void* /*p*/) {}
822
-
823
- static void set_encodings_accepted_by_peer(grpc_call* /*call*/,
824
- grpc_mdelem mdel,
825
- uint32_t* encodings_accepted_by_peer,
826
- bool stream_encoding) {
827
- size_t i;
828
- uint32_t algorithm;
829
- grpc_slice_buffer accept_encoding_parts;
830
- grpc_slice accept_encoding_slice;
831
- void* accepted_user_data;
832
-
833
- accepted_user_data =
834
- grpc_mdelem_get_user_data(mdel, destroy_encodings_accepted_by_peer);
835
- if (accepted_user_data != nullptr) {
836
- *encodings_accepted_by_peer = static_cast<uint32_t>(
837
- reinterpret_cast<uintptr_t>(accepted_user_data) - 1);
838
- return;
839
- }
840
-
841
- *encodings_accepted_by_peer = 0;
842
-
843
- accept_encoding_slice = GRPC_MDVALUE(mdel);
844
- grpc_slice_buffer_init(&accept_encoding_parts);
845
- grpc_slice_split_without_space(accept_encoding_slice, ",",
846
- &accept_encoding_parts);
847
-
848
- GPR_BITSET(encodings_accepted_by_peer, GRPC_COMPRESS_NONE);
849
- for (i = 0; i < accept_encoding_parts.count; i++) {
850
- int r;
851
- grpc_slice accept_encoding_entry_slice = accept_encoding_parts.slices[i];
852
- if (!stream_encoding) {
853
- r = grpc_message_compression_algorithm_parse(
854
- accept_encoding_entry_slice,
855
- reinterpret_cast<grpc_message_compression_algorithm*>(&algorithm));
856
- } else {
857
- r = grpc_stream_compression_algorithm_parse(
858
- accept_encoding_entry_slice,
859
- reinterpret_cast<grpc_stream_compression_algorithm*>(&algorithm));
860
- }
861
- if (r) {
862
- GPR_BITSET(encodings_accepted_by_peer, algorithm);
863
- } else {
864
- char* accept_encoding_entry_str =
865
- grpc_slice_to_c_string(accept_encoding_entry_slice);
866
- gpr_log(GPR_DEBUG,
867
- "Unknown entry in accept encoding metadata: '%s'. Ignoring.",
868
- accept_encoding_entry_str);
869
- gpr_free(accept_encoding_entry_str);
870
- }
871
- }
872
-
873
- grpc_slice_buffer_destroy_internal(&accept_encoding_parts);
874
-
875
- grpc_mdelem_set_user_data(
876
- mdel, destroy_encodings_accepted_by_peer,
877
- reinterpret_cast<void*>(
878
- static_cast<uintptr_t>(*encodings_accepted_by_peer) + 1));
879
- }
880
-
881
- uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
882
- uint32_t encodings_accepted_by_peer;
883
- encodings_accepted_by_peer = call->encodings_accepted_by_peer;
884
- return encodings_accepted_by_peer;
885
- }
886
-
887
- grpc_stream_compression_algorithm
888
- grpc_call_test_only_get_incoming_stream_encodings(grpc_call* call) {
889
- return call->incoming_stream_compression_algorithm;
890
- }
891
-
892
- static grpc_linked_mdelem* linked_from_md(grpc_metadata* md) {
893
- return reinterpret_cast<grpc_linked_mdelem*>(&md->internal_data);
894
- }
895
-
896
- static grpc_metadata* get_md_elem(grpc_metadata* metadata,
897
- grpc_metadata* additional_metadata, int i,
898
- int count) {
899
- grpc_metadata* res =
900
- i < count ? &metadata[i] : &additional_metadata[i - count];
901
- GPR_ASSERT(res);
902
- return res;
903
- }
904
-
905
- static int prepare_application_metadata(grpc_call* call, int count,
906
- grpc_metadata* metadata,
907
- int is_trailing,
908
- int prepend_extra_metadata,
909
- grpc_metadata* additional_metadata,
910
- int additional_metadata_count) {
911
- int total_count = count + additional_metadata_count;
912
- int i;
835
+ bool FilterStackCall::PrepareApplicationMetadata(size_t count,
836
+ grpc_metadata* metadata,
837
+ bool is_trailing) {
913
838
  grpc_metadata_batch* batch =
914
- &call->metadata_batch[0 /* is_receiving */][is_trailing];
915
- for (i = 0; i < total_count; i++) {
916
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
917
- grpc_linked_mdelem* l = linked_from_md(md);
918
- GPR_ASSERT(sizeof(grpc_linked_mdelem) == sizeof(md->internal_data));
839
+ is_trailing ? &send_trailing_metadata_ : &send_initial_metadata_;
840
+ for (size_t i = 0; i < count; i++) {
841
+ grpc_metadata* md = &metadata[i];
919
842
  if (!GRPC_LOG_IF_ERROR("validate_metadata",
920
843
  grpc_validate_header_key_is_legal(md->key))) {
921
- break;
844
+ return false;
922
845
  } else if (!grpc_is_binary_header_internal(md->key) &&
923
846
  !GRPC_LOG_IF_ERROR(
924
847
  "validate_metadata",
925
848
  grpc_validate_header_nonbin_value_is_legal(md->value))) {
926
- break;
849
+ return false;
927
850
  } else if (GRPC_SLICE_LENGTH(md->value) >= UINT32_MAX) {
928
851
  // HTTP2 hpack encoding has a maximum limit.
929
- break;
852
+ return false;
853
+ } else if (grpc_slice_str_cmp(md->key, "content-length") == 0) {
854
+ // Filter "content-length metadata"
855
+ continue;
930
856
  }
931
- l->md = grpc_mdelem_from_grpc_metadata(const_cast<grpc_metadata*>(md));
857
+ batch->Append(StringViewFromSlice(md->key),
858
+ Slice(grpc_slice_ref_internal(md->value)),
859
+ [md](absl::string_view error, const Slice& value) {
860
+ gpr_log(GPR_DEBUG, "Append error: %s",
861
+ absl::StrCat("key=", StringViewFromSlice(md->key),
862
+ " error=", error,
863
+ " value=", value.as_string_view())
864
+ .c_str());
865
+ });
932
866
  }
933
- if (i != total_count) {
934
- for (int j = 0; j < i; j++) {
935
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, j, count);
936
- grpc_linked_mdelem* l = linked_from_md(md);
937
- GRPC_MDELEM_UNREF(l->md);
938
- }
939
- return 0;
867
+
868
+ return true;
869
+ }
870
+
871
+ namespace {
872
+ class PublishToAppEncoder {
873
+ public:
874
+ explicit PublishToAppEncoder(grpc_metadata_array* dest) : dest_(dest) {}
875
+
876
+ void Encode(const Slice& key, const Slice& value) {
877
+ Append(key.c_slice(), value.c_slice());
940
878
  }
941
- if (prepend_extra_metadata) {
942
- if (call->send_extra_metadata_count == 0) {
943
- prepend_extra_metadata = 0;
944
- } else {
945
- for (i = 0; i < call->send_extra_metadata_count; i++) {
946
- GRPC_LOG_IF_ERROR("prepare_application_metadata",
947
- grpc_metadata_batch_link_tail(
948
- batch, &call->send_extra_metadata[i]));
949
- }
950
- }
879
+
880
+ // Catch anything that is not explicitly handled, and do not publish it to the
881
+ // application. If new metadata is added to a batch that needs to be
882
+ // published, it should be called out here.
883
+ template <typename Which>
884
+ void Encode(Which, const typename Which::ValueType&) {}
885
+
886
+ void Encode(UserAgentMetadata, const Slice& slice) {
887
+ Append(UserAgentMetadata::key(), slice);
951
888
  }
952
- for (i = 0; i < total_count; i++) {
953
- grpc_metadata* md = get_md_elem(metadata, additional_metadata, i, count);
954
- grpc_linked_mdelem* l = linked_from_md(md);
955
- grpc_error* error = grpc_metadata_batch_link_tail(batch, l);
956
- if (error != GRPC_ERROR_NONE) {
957
- GRPC_MDELEM_UNREF(l->md);
958
- }
959
- GRPC_LOG_IF_ERROR("prepare_application_metadata", error);
889
+
890
+ void Encode(HostMetadata, const Slice& slice) {
891
+ Append(HostMetadata::key(), slice);
960
892
  }
961
- call->send_extra_metadata_count = 0;
962
893
 
963
- return 1;
964
- }
894
+ void Encode(GrpcPreviousRpcAttemptsMetadata, uint32_t count) {
895
+ Append(GrpcPreviousRpcAttemptsMetadata::key(), count);
896
+ }
965
897
 
966
- static grpc_message_compression_algorithm decode_message_compression(
967
- grpc_mdelem md) {
968
- grpc_message_compression_algorithm algorithm =
969
- grpc_message_compression_algorithm_from_slice(GRPC_MDVALUE(md));
970
- if (algorithm == GRPC_MESSAGE_COMPRESS_ALGORITHMS_COUNT) {
971
- char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
972
- gpr_log(GPR_ERROR,
973
- "Invalid incoming message compression algorithm: '%s'. "
974
- "Interpreting incoming data as uncompressed.",
975
- md_c_str);
976
- gpr_free(md_c_str);
977
- return GRPC_MESSAGE_COMPRESS_NONE;
978
- }
979
- return algorithm;
980
- }
898
+ void Encode(GrpcRetryPushbackMsMetadata, Duration count) {
899
+ Append(GrpcRetryPushbackMsMetadata::key(), count.millis());
900
+ }
981
901
 
982
- static grpc_stream_compression_algorithm decode_stream_compression(
983
- grpc_mdelem md) {
984
- grpc_stream_compression_algorithm algorithm =
985
- grpc_stream_compression_algorithm_from_slice(GRPC_MDVALUE(md));
986
- if (algorithm == GRPC_STREAM_COMPRESS_ALGORITHMS_COUNT) {
987
- char* md_c_str = grpc_slice_to_c_string(GRPC_MDVALUE(md));
988
- gpr_log(GPR_ERROR,
989
- "Invalid incoming stream compression algorithm: '%s'. Interpreting "
990
- "incoming data as uncompressed.",
991
- md_c_str);
992
- gpr_free(md_c_str);
993
- return GRPC_STREAM_COMPRESS_NONE;
994
- }
995
- return algorithm;
996
- }
902
+ void Encode(LbTokenMetadata, const Slice& slice) {
903
+ Append(LbTokenMetadata::key(), slice);
904
+ }
905
+
906
+ private:
907
+ void Append(absl::string_view key, int64_t value) {
908
+ Append(StaticSlice::FromStaticString(key).c_slice(),
909
+ Slice::FromInt64(value).c_slice());
910
+ }
997
911
 
998
- static void publish_app_metadata(grpc_call* call, grpc_metadata_batch* b,
999
- int is_trailing) {
1000
- if (b->list.count == 0) return;
1001
- if (!call->is_client && is_trailing) return;
1002
- if (is_trailing && call->buffered_metadata[1] == nullptr) return;
912
+ void Append(absl::string_view key, const Slice& value) {
913
+ Append(StaticSlice::FromStaticString(key).c_slice(), value.c_slice());
914
+ }
915
+
916
+ void Append(grpc_slice key, grpc_slice value) {
917
+ auto* mdusr = &dest_->metadata[dest_->count++];
918
+ mdusr->key = key;
919
+ mdusr->value = value;
920
+ }
921
+
922
+ grpc_metadata_array* const dest_;
923
+ };
924
+ } // namespace
925
+
926
+ void FilterStackCall::PublishAppMetadata(grpc_metadata_batch* b,
927
+ bool is_trailing) {
928
+ if (b->count() == 0) return;
929
+ if (!is_client() && is_trailing) return;
930
+ if (is_trailing && buffered_metadata_[1] == nullptr) return;
1003
931
  GPR_TIMER_SCOPE("publish_app_metadata", 0);
1004
932
  grpc_metadata_array* dest;
1005
- grpc_metadata* mdusr;
1006
- dest = call->buffered_metadata[is_trailing];
1007
- if (dest->count + b->list.count > dest->capacity) {
933
+ dest = buffered_metadata_[is_trailing];
934
+ if (dest->count + b->count() > dest->capacity) {
1008
935
  dest->capacity =
1009
- GPR_MAX(dest->capacity + b->list.count, dest->capacity * 3 / 2);
936
+ std::max(dest->capacity + b->count(), dest->capacity * 3 / 2);
1010
937
  dest->metadata = static_cast<grpc_metadata*>(
1011
938
  gpr_realloc(dest->metadata, sizeof(grpc_metadata) * dest->capacity));
1012
939
  }
1013
- for (grpc_linked_mdelem* l = b->list.head; l != nullptr; l = l->next) {
1014
- mdusr = &dest->metadata[dest->count++];
1015
- /* we pass back borrowed slices that are valid whilst the call is valid */
1016
- mdusr->key = GRPC_MDKEY(l->md);
1017
- mdusr->value = GRPC_MDVALUE(l->md);
1018
- }
940
+ PublishToAppEncoder encoder(dest);
941
+ b->Encode(&encoder);
1019
942
  }
1020
943
 
1021
- static void recv_initial_filter(grpc_call* call, grpc_metadata_batch* b) {
1022
- if (b->idx.named.content_encoding != nullptr) {
1023
- GPR_TIMER_SCOPE("incoming_stream_compression_algorithm", 0);
1024
- set_incoming_stream_compression_algorithm(
1025
- call, decode_stream_compression(b->idx.named.content_encoding->md));
1026
- grpc_metadata_batch_remove(b, GRPC_BATCH_CONTENT_ENCODING);
1027
- }
1028
- if (b->idx.named.grpc_encoding != nullptr) {
1029
- GPR_TIMER_SCOPE("incoming_message_compression_algorithm", 0);
1030
- set_incoming_message_compression_algorithm(
1031
- call, decode_message_compression(b->idx.named.grpc_encoding->md));
1032
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_ENCODING);
1033
- }
1034
- uint32_t message_encodings_accepted_by_peer = 1u;
1035
- uint32_t stream_encodings_accepted_by_peer = 1u;
1036
- if (b->idx.named.grpc_accept_encoding != nullptr) {
1037
- GPR_TIMER_SCOPE("encodings_accepted_by_peer", 0);
1038
- set_encodings_accepted_by_peer(call, b->idx.named.grpc_accept_encoding->md,
1039
- &message_encodings_accepted_by_peer, false);
1040
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_ACCEPT_ENCODING);
1041
- }
1042
- if (b->idx.named.accept_encoding != nullptr) {
1043
- GPR_TIMER_SCOPE("stream_encodings_accepted_by_peer", 0);
1044
- set_encodings_accepted_by_peer(call, b->idx.named.accept_encoding->md,
1045
- &stream_encodings_accepted_by_peer, true);
1046
- grpc_metadata_batch_remove(b, GRPC_BATCH_ACCEPT_ENCODING);
1047
- }
1048
- call->encodings_accepted_by_peer =
1049
- grpc_compression_bitset_from_message_stream_compression_bitset(
1050
- message_encodings_accepted_by_peer,
1051
- stream_encodings_accepted_by_peer);
1052
- publish_app_metadata(call, b, false);
944
+ void FilterStackCall::RecvInitialFilter(grpc_metadata_batch* b) {
945
+ incoming_compression_algorithm_ =
946
+ b->Take(GrpcEncodingMetadata()).value_or(GRPC_COMPRESS_NONE);
947
+ encodings_accepted_by_peer_ =
948
+ b->Take(GrpcAcceptEncodingMetadata())
949
+ .value_or(CompressionAlgorithmSet{GRPC_COMPRESS_NONE});
950
+ PublishAppMetadata(b, false);
1053
951
  }
1054
952
 
1055
- static void recv_trailing_filter(void* args, grpc_metadata_batch* b,
1056
- grpc_error* batch_error) {
1057
- grpc_call* call = static_cast<grpc_call*>(args);
953
+ void FilterStackCall::RecvTrailingFilter(grpc_metadata_batch* b,
954
+ grpc_error_handle batch_error) {
1058
955
  if (batch_error != GRPC_ERROR_NONE) {
1059
- set_final_status(call, batch_error);
1060
- } else if (b->idx.named.grpc_status != nullptr) {
1061
- grpc_status_code status_code =
1062
- grpc_get_status_code_from_metadata(b->idx.named.grpc_status->md);
1063
- grpc_error* error = GRPC_ERROR_NONE;
1064
- if (status_code != GRPC_STATUS_OK) {
1065
- char* peer = grpc_call_get_peer(call);
1066
- error = grpc_error_set_int(
1067
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1068
- absl::StrCat("Error received from peer ", peer).c_str()),
1069
- GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
1070
- gpr_free(peer);
1071
- }
1072
- if (b->idx.named.grpc_message != nullptr) {
1073
- error = grpc_error_set_str(
1074
- error, GRPC_ERROR_STR_GRPC_MESSAGE,
1075
- grpc_slice_ref_internal(GRPC_MDVALUE(b->idx.named.grpc_message->md)));
1076
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_MESSAGE);
1077
- } else if (error != GRPC_ERROR_NONE) {
1078
- error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
1079
- grpc_empty_slice());
1080
- }
1081
- set_final_status(call, GRPC_ERROR_REF(error));
1082
- grpc_metadata_batch_remove(b, GRPC_BATCH_GRPC_STATUS);
1083
- GRPC_ERROR_UNREF(error);
1084
- } else if (!call->is_client) {
1085
- set_final_status(call, GRPC_ERROR_NONE);
956
+ SetFinalStatus(batch_error);
1086
957
  } else {
1087
- gpr_log(GPR_DEBUG,
1088
- "Received trailing metadata with no error and no status");
1089
- set_final_status(
1090
- call, grpc_error_set_int(
1091
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
1092
- GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
1093
- }
1094
- publish_app_metadata(call, b, true);
1095
- }
1096
-
1097
- grpc_core::Arena* grpc_call_get_arena(grpc_call* call) { return call->arena; }
1098
-
1099
- grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
1100
- return CALL_STACK_FROM_CALL(call);
958
+ absl::optional<grpc_status_code> grpc_status =
959
+ b->Take(GrpcStatusMetadata());
960
+ if (grpc_status.has_value()) {
961
+ grpc_status_code status_code = *grpc_status;
962
+ grpc_error_handle error = GRPC_ERROR_NONE;
963
+ if (status_code != GRPC_STATUS_OK) {
964
+ char* peer = GetPeer();
965
+ error = grpc_error_set_int(
966
+ GRPC_ERROR_CREATE_FROM_CPP_STRING(
967
+ absl::StrCat("Error received from peer ", peer)),
968
+ GRPC_ERROR_INT_GRPC_STATUS, static_cast<intptr_t>(status_code));
969
+ gpr_free(peer);
970
+ }
971
+ auto grpc_message = b->Take(GrpcMessageMetadata());
972
+ if (grpc_message.has_value()) {
973
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE,
974
+ grpc_message->as_string_view());
975
+ } else if (error != GRPC_ERROR_NONE) {
976
+ error = grpc_error_set_str(error, GRPC_ERROR_STR_GRPC_MESSAGE, "");
977
+ }
978
+ SetFinalStatus(GRPC_ERROR_REF(error));
979
+ GRPC_ERROR_UNREF(error);
980
+ } else if (!is_client()) {
981
+ SetFinalStatus(GRPC_ERROR_NONE);
982
+ } else {
983
+ gpr_log(GPR_DEBUG,
984
+ "Received trailing metadata with no error and no status");
985
+ SetFinalStatus(grpc_error_set_int(
986
+ GRPC_ERROR_CREATE_FROM_STATIC_STRING("No status received"),
987
+ GRPC_ERROR_INT_GRPC_STATUS, GRPC_STATUS_UNKNOWN));
988
+ }
989
+ }
990
+ PublishAppMetadata(b, true);
1101
991
  }
1102
992
 
1103
- /*******************************************************************************
1104
- * BATCH API IMPLEMENTATION
1105
- */
1106
-
1107
- static bool are_write_flags_valid(uint32_t flags) {
993
+ namespace {
994
+ bool AreWriteFlagsValid(uint32_t flags) {
1108
995
  /* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
1109
996
  const uint32_t allowed_write_positions =
1110
997
  (GRPC_WRITE_USED_MASK | GRPC_WRITE_INTERNAL_USED_MASK);
@@ -1112,16 +999,13 @@ static bool are_write_flags_valid(uint32_t flags) {
1112
999
  return !(flags & invalid_positions);
1113
1000
  }
1114
1001
 
1115
- static bool are_initial_metadata_flags_valid(uint32_t flags, bool is_client) {
1002
+ bool AreInitialMetadataFlagsValid(uint32_t flags) {
1116
1003
  /* check that only bits in GRPC_WRITE_(INTERNAL?)_USED_MASK are set */
1117
1004
  uint32_t invalid_positions = ~GRPC_INITIAL_METADATA_USED_MASK;
1118
- if (!is_client) {
1119
- invalid_positions |= GRPC_INITIAL_METADATA_IDEMPOTENT_REQUEST;
1120
- }
1121
1005
  return !(flags & invalid_positions);
1122
1006
  }
1123
1007
 
1124
- static size_t batch_slot_for_op(grpc_op_type type) {
1008
+ size_t BatchSlotForOp(grpc_op_type type) {
1125
1009
  switch (type) {
1126
1010
  case GRPC_OP_SEND_INITIAL_METADATA:
1127
1011
  return 0;
@@ -1140,142 +1024,135 @@ static size_t batch_slot_for_op(grpc_op_type type) {
1140
1024
  }
1141
1025
  GPR_UNREACHABLE_CODE(return 123456789);
1142
1026
  }
1027
+ } // namespace
1143
1028
 
1144
- static batch_control* reuse_or_allocate_batch_control(grpc_call* call,
1145
- const grpc_op* ops) {
1146
- size_t slot_idx = batch_slot_for_op(ops[0].op);
1147
- batch_control** pslot = &call->active_batches[slot_idx];
1148
- batch_control* bctl;
1029
+ FilterStackCall::BatchControl* FilterStackCall::ReuseOrAllocateBatchControl(
1030
+ const grpc_op* ops) {
1031
+ size_t slot_idx = BatchSlotForOp(ops[0].op);
1032
+ BatchControl** pslot = &active_batches_[slot_idx];
1033
+ BatchControl* bctl;
1149
1034
  if (*pslot != nullptr) {
1150
1035
  bctl = *pslot;
1151
- if (bctl->call != nullptr) {
1036
+ if (bctl->call_ != nullptr) {
1152
1037
  return nullptr;
1153
1038
  }
1154
- bctl->~batch_control();
1155
- bctl->op = {};
1039
+ bctl->~BatchControl();
1040
+ bctl->op_ = {};
1041
+ new (&bctl->batch_error_) AtomicError();
1156
1042
  } else {
1157
- bctl = call->arena->New<batch_control>();
1043
+ bctl = arena()->New<BatchControl>();
1158
1044
  *pslot = bctl;
1159
1045
  }
1160
- bctl->call = call;
1161
- bctl->op.payload = &call->stream_op_payload;
1046
+ bctl->call_ = this;
1047
+ bctl->op_.payload = &stream_op_payload_;
1162
1048
  return bctl;
1163
1049
  }
1164
1050
 
1165
- static void finish_batch_completion(void* user_data,
1166
- grpc_cq_completion* /*storage*/) {
1167
- batch_control* bctl = static_cast<batch_control*>(user_data);
1168
- grpc_call* call = bctl->call;
1169
- bctl->call = nullptr;
1170
- GRPC_CALL_INTERNAL_UNREF(call, "completion");
1171
- }
1172
-
1173
- static void reset_batch_errors(batch_control* bctl) {
1174
- GRPC_ERROR_UNREF(
1175
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)));
1176
- gpr_atm_rel_store(&bctl->batch_error,
1177
- reinterpret_cast<gpr_atm>(GRPC_ERROR_NONE));
1051
+ void Call::PropagateCancellationToChildren() {
1052
+ ParentCall* pc = parent_call();
1053
+ if (pc != nullptr) {
1054
+ Call* child;
1055
+ MutexLock lock(&pc->child_list_mu);
1056
+ child = pc->first_child;
1057
+ if (child != nullptr) {
1058
+ do {
1059
+ Call* next_child_call = child->child_->sibling_next;
1060
+ if (child->cancellation_is_inherited_) {
1061
+ child->InternalRef("propagate_cancel");
1062
+ child->CancelWithError(GRPC_ERROR_CANCELLED);
1063
+ child->InternalUnref("propagate_cancel");
1064
+ }
1065
+ child = next_child_call;
1066
+ } while (child != pc->first_child);
1067
+ }
1068
+ }
1178
1069
  }
1179
1070
 
1180
- static void post_batch_completion(batch_control* bctl) {
1181
- grpc_call* next_child_call;
1182
- grpc_call* call = bctl->call;
1183
- grpc_error* error = GRPC_ERROR_REF(
1184
- reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)));
1071
+ void FilterStackCall::BatchControl::PostCompletion() {
1072
+ FilterStackCall* call = call_;
1073
+ grpc_error_handle error = GRPC_ERROR_REF(batch_error_.get());
1185
1074
 
1186
- if (bctl->op.send_initial_metadata) {
1187
- grpc_metadata_batch_destroy(
1188
- &call->metadata_batch[0 /* is_receiving */][0 /* is_trailing */]);
1075
+ if (op_.send_initial_metadata) {
1076
+ call->send_initial_metadata_.Clear();
1189
1077
  }
1190
- if (bctl->op.send_message) {
1191
- if (bctl->op.payload->send_message.stream_write_closed &&
1078
+ if (op_.send_message) {
1079
+ if (op_.payload->send_message.stream_write_closed &&
1192
1080
  error == GRPC_ERROR_NONE) {
1193
1081
  error = grpc_error_add_child(
1194
1082
  error, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1195
1083
  "Attempt to send message after stream was closed."));
1196
1084
  }
1197
- call->sending_message = false;
1085
+ call->sending_message_ = false;
1198
1086
  }
1199
- if (bctl->op.send_trailing_metadata) {
1200
- grpc_metadata_batch_destroy(
1201
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */]);
1087
+ if (op_.send_trailing_metadata) {
1088
+ call->send_trailing_metadata_.Clear();
1202
1089
  }
1203
- if (bctl->op.recv_trailing_metadata) {
1090
+ if (op_.recv_trailing_metadata) {
1204
1091
  /* propagate cancellation to any interested children */
1205
- gpr_atm_rel_store(&call->received_final_op_atm, 1);
1206
- parent_call* pc = get_parent_call(call);
1207
- if (pc != nullptr) {
1208
- grpc_call* child;
1209
- gpr_mu_lock(&pc->child_list_mu);
1210
- child = pc->first_child;
1211
- if (child != nullptr) {
1212
- do {
1213
- next_child_call = child->child->sibling_next;
1214
- if (child->cancellation_is_inherited) {
1215
- GRPC_CALL_INTERNAL_REF(child, "propagate_cancel");
1216
- cancel_with_error(child, GRPC_ERROR_CANCELLED);
1217
- GRPC_CALL_INTERNAL_UNREF(child, "propagate_cancel");
1218
- }
1219
- child = next_child_call;
1220
- } while (child != pc->first_child);
1221
- }
1222
- gpr_mu_unlock(&pc->child_list_mu);
1223
- }
1092
+ gpr_atm_rel_store(&call->received_final_op_atm_, 1);
1093
+ call->PropagateCancellationToChildren();
1224
1094
  GRPC_ERROR_UNREF(error);
1225
1095
  error = GRPC_ERROR_NONE;
1226
1096
  }
1227
- if (error != GRPC_ERROR_NONE && bctl->op.recv_message &&
1228
- *call->receiving_buffer != nullptr) {
1229
- grpc_byte_buffer_destroy(*call->receiving_buffer);
1230
- *call->receiving_buffer = nullptr;
1097
+ if (error != GRPC_ERROR_NONE && op_.recv_message &&
1098
+ *call->receiving_buffer_ != nullptr) {
1099
+ grpc_byte_buffer_destroy(*call->receiving_buffer_);
1100
+ *call->receiving_buffer_ = nullptr;
1231
1101
  }
1232
- reset_batch_errors(bctl);
1102
+ batch_error_.set(GRPC_ERROR_NONE);
1233
1103
 
1234
- if (bctl->completion_data.notify_tag.is_closure) {
1104
+ if (completion_data_.notify_tag.is_closure) {
1235
1105
  /* unrefs error */
1236
- bctl->call = nullptr;
1237
- grpc_core::Closure::Run(
1238
- DEBUG_LOCATION,
1239
- static_cast<grpc_closure*>(bctl->completion_data.notify_tag.tag),
1240
- error);
1241
- GRPC_CALL_INTERNAL_UNREF(call, "completion");
1106
+ call_ = nullptr;
1107
+ Closure::Run(DEBUG_LOCATION,
1108
+ static_cast<grpc_closure*>(completion_data_.notify_tag.tag),
1109
+ error);
1110
+ call->InternalUnref("completion");
1242
1111
  } else {
1243
1112
  /* unrefs error */
1244
- grpc_cq_end_op(bctl->call->cq, bctl->completion_data.notify_tag.tag, error,
1245
- finish_batch_completion, bctl,
1246
- &bctl->completion_data.cq_completion);
1113
+ grpc_cq_end_op(
1114
+ call->cq_, completion_data_.notify_tag.tag, error,
1115
+ [](void* user_data, grpc_cq_completion* /*storage*/) {
1116
+ BatchControl* bctl = static_cast<BatchControl*>(user_data);
1117
+ Call* call = bctl->call_;
1118
+ bctl->call_ = nullptr;
1119
+ call->InternalUnref("completion");
1120
+ },
1121
+ this, &completion_data_.cq_completion);
1247
1122
  }
1248
1123
  }
1249
1124
 
1250
- static void finish_batch_step(batch_control* bctl) {
1251
- if (GPR_UNLIKELY(bctl->completed_batch_step())) {
1252
- post_batch_completion(bctl);
1125
+ void FilterStackCall::BatchControl::FinishStep() {
1126
+ if (GPR_UNLIKELY(completed_batch_step())) {
1127
+ PostCompletion();
1253
1128
  }
1254
1129
  }
1255
1130
 
1256
- static void continue_receiving_slices(batch_control* bctl) {
1257
- grpc_error* error;
1258
- grpc_call* call = bctl->call;
1131
+ void FilterStackCall::BatchControl::ContinueReceivingSlices() {
1132
+ grpc_error_handle error;
1133
+ FilterStackCall* call = call_;
1259
1134
  for (;;) {
1260
- size_t remaining = call->receiving_stream->length() -
1261
- (*call->receiving_buffer)->data.raw.slice_buffer.length;
1135
+ size_t remaining = call->receiving_stream_->length() -
1136
+ (*call->receiving_buffer_)->data.raw.slice_buffer.length;
1262
1137
  if (remaining == 0) {
1263
- call->receiving_message = false;
1264
- call->receiving_stream.reset();
1265
- finish_batch_step(bctl);
1138
+ call->receiving_message_ = false;
1139
+ call->receiving_stream_.reset();
1140
+ FinishStep();
1266
1141
  return;
1267
1142
  }
1268
- if (call->receiving_stream->Next(remaining, &call->receiving_slice_ready)) {
1269
- error = call->receiving_stream->Pull(&call->receiving_slice);
1143
+ if (call->receiving_stream_->Next(remaining,
1144
+ &call->receiving_slice_ready_)) {
1145
+ error = call->receiving_stream_->Pull(&call->receiving_slice_);
1270
1146
  if (error == GRPC_ERROR_NONE) {
1271
- grpc_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer,
1272
- call->receiving_slice);
1147
+ grpc_slice_buffer_add(
1148
+ &(*call->receiving_buffer_)->data.raw.slice_buffer,
1149
+ call->receiving_slice_);
1273
1150
  } else {
1274
- call->receiving_stream.reset();
1275
- grpc_byte_buffer_destroy(*call->receiving_buffer);
1276
- *call->receiving_buffer = nullptr;
1277
- call->receiving_message = false;
1278
- finish_batch_step(bctl);
1151
+ call->receiving_stream_.reset();
1152
+ grpc_byte_buffer_destroy(*call->receiving_buffer_);
1153
+ *call->receiving_buffer_ = nullptr;
1154
+ call->receiving_message_ = false;
1155
+ FinishStep();
1279
1156
  GRPC_ERROR_UNREF(error);
1280
1157
  return;
1281
1158
  }
@@ -1285,18 +1162,18 @@ static void continue_receiving_slices(batch_control* bctl) {
1285
1162
  }
1286
1163
  }
1287
1164
 
1288
- static void receiving_slice_ready(void* bctlp, grpc_error* error) {
1289
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1290
- grpc_call* call = bctl->call;
1165
+ void FilterStackCall::BatchControl::ReceivingSliceReady(
1166
+ grpc_error_handle error) {
1167
+ FilterStackCall* call = call_;
1291
1168
  bool release_error = false;
1292
1169
 
1293
1170
  if (error == GRPC_ERROR_NONE) {
1294
1171
  grpc_slice slice;
1295
- error = call->receiving_stream->Pull(&slice);
1172
+ error = call->receiving_stream_->Pull(&slice);
1296
1173
  if (error == GRPC_ERROR_NONE) {
1297
- grpc_slice_buffer_add(&(*call->receiving_buffer)->data.raw.slice_buffer,
1174
+ grpc_slice_buffer_add(&(*call->receiving_buffer_)->data.raw.slice_buffer,
1298
1175
  slice);
1299
- continue_receiving_slices(bctl);
1176
+ ContinueReceivingSlices();
1300
1177
  } else {
1301
1178
  /* Error returned by ByteStream::Pull() needs to be released manually */
1302
1179
  release_error = true;
@@ -1307,193 +1184,134 @@ static void receiving_slice_ready(void* bctlp, grpc_error* error) {
1307
1184
  if (GRPC_TRACE_FLAG_ENABLED(grpc_trace_operation_failures)) {
1308
1185
  GRPC_LOG_IF_ERROR("receiving_slice_ready", GRPC_ERROR_REF(error));
1309
1186
  }
1310
- call->receiving_stream.reset();
1311
- grpc_byte_buffer_destroy(*call->receiving_buffer);
1312
- *call->receiving_buffer = nullptr;
1313
- call->receiving_message = false;
1314
- finish_batch_step(bctl);
1187
+ call->receiving_stream_.reset();
1188
+ grpc_byte_buffer_destroy(*call->receiving_buffer_);
1189
+ *call->receiving_buffer_ = nullptr;
1190
+ call->receiving_message_ = false;
1191
+ FinishStep();
1315
1192
  if (release_error) {
1316
1193
  GRPC_ERROR_UNREF(error);
1317
1194
  }
1318
1195
  }
1319
1196
  }
1320
1197
 
1321
- static void process_data_after_md(batch_control* bctl) {
1322
- grpc_call* call = bctl->call;
1323
- if (call->receiving_stream == nullptr) {
1324
- *call->receiving_buffer = nullptr;
1325
- call->receiving_message = false;
1326
- finish_batch_step(bctl);
1198
+ void FilterStackCall::BatchControl::ProcessDataAfterMetadata() {
1199
+ FilterStackCall* call = call_;
1200
+ if (call->receiving_stream_ == nullptr) {
1201
+ *call->receiving_buffer_ = nullptr;
1202
+ call->receiving_message_ = false;
1203
+ FinishStep();
1327
1204
  } else {
1328
- call->test_only_last_message_flags = call->receiving_stream->flags();
1329
- if ((call->receiving_stream->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
1330
- (call->incoming_message_compression_algorithm >
1331
- GRPC_MESSAGE_COMPRESS_NONE)) {
1332
- grpc_compression_algorithm algo;
1333
- GPR_ASSERT(
1334
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
1335
- &algo, call->incoming_message_compression_algorithm,
1336
- (grpc_stream_compression_algorithm)0));
1337
- *call->receiving_buffer =
1338
- grpc_raw_compressed_byte_buffer_create(nullptr, 0, algo);
1205
+ call->test_only_last_message_flags_ = call->receiving_stream_->flags();
1206
+ if ((call->receiving_stream_->flags() & GRPC_WRITE_INTERNAL_COMPRESS) &&
1207
+ (call->incoming_compression_algorithm_ != GRPC_COMPRESS_NONE)) {
1208
+ *call->receiving_buffer_ = grpc_raw_compressed_byte_buffer_create(
1209
+ nullptr, 0, call->incoming_compression_algorithm_);
1339
1210
  } else {
1340
- *call->receiving_buffer = grpc_raw_byte_buffer_create(nullptr, 0);
1211
+ *call->receiving_buffer_ = grpc_raw_byte_buffer_create(nullptr, 0);
1341
1212
  }
1342
- GRPC_CLOSURE_INIT(&call->receiving_slice_ready, receiving_slice_ready, bctl,
1343
- grpc_schedule_on_exec_ctx);
1344
- continue_receiving_slices(bctl);
1213
+ GRPC_CLOSURE_INIT(
1214
+ &call->receiving_slice_ready_,
1215
+ [](void* bctl, grpc_error_handle error) {
1216
+ static_cast<BatchControl*>(bctl)->ReceivingSliceReady(error);
1217
+ },
1218
+ this, grpc_schedule_on_exec_ctx);
1219
+ ContinueReceivingSlices();
1345
1220
  }
1346
1221
  }
1347
1222
 
1348
- static void receiving_stream_ready(void* bctlp, grpc_error* error) {
1349
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1350
- grpc_call* call = bctl->call;
1223
+ void FilterStackCall::BatchControl::ReceivingStreamReady(
1224
+ grpc_error_handle error) {
1225
+ FilterStackCall* call = call_;
1351
1226
  if (error != GRPC_ERROR_NONE) {
1352
- call->receiving_stream.reset();
1353
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1354
- GRPC_ERROR_NONE) {
1355
- gpr_atm_rel_store(&bctl->batch_error,
1356
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1227
+ call->receiving_stream_.reset();
1228
+ if (batch_error_.ok()) {
1229
+ batch_error_.set(error);
1357
1230
  }
1358
- cancel_with_error(call, GRPC_ERROR_REF(error));
1231
+ call->CancelWithError(GRPC_ERROR_REF(error));
1359
1232
  }
1360
- /* If recv_state is RECV_NONE, we will save the batch_control
1233
+ /* If recv_state is kRecvNone, we will save the batch_control
1361
1234
  * object with rel_cas, and will not use it after the cas. Its corresponding
1362
1235
  * acq_load is in receiving_initial_metadata_ready() */
1363
- if (error != GRPC_ERROR_NONE || call->receiving_stream == nullptr ||
1364
- !gpr_atm_rel_cas(&call->recv_state, RECV_NONE,
1365
- reinterpret_cast<gpr_atm>(bctlp))) {
1366
- process_data_after_md(bctl);
1236
+ if (error != GRPC_ERROR_NONE || call->receiving_stream_ == nullptr ||
1237
+ !gpr_atm_rel_cas(&call->recv_state_, kRecvNone,
1238
+ reinterpret_cast<gpr_atm>(this))) {
1239
+ ProcessDataAfterMetadata();
1367
1240
  }
1368
1241
  }
1369
1242
 
1370
- // The recv_message_ready callback used when sending a batch containing
1371
- // a recv_message op down the filter stack. Yields the call combiner
1372
- // before processing the received message.
1373
- static void receiving_stream_ready_in_call_combiner(void* bctlp,
1374
- grpc_error* error) {
1375
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1376
- grpc_call* call = bctl->call;
1377
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_message_ready");
1378
- receiving_stream_ready(bctlp, error);
1379
- }
1380
-
1381
- static void GPR_ATTRIBUTE_NOINLINE
1382
- handle_both_stream_and_msg_compression_set(grpc_call* call) {
1383
- std::string error_msg = absl::StrFormat(
1384
- "Incoming stream has both stream compression (%d) and message "
1385
- "compression (%d).",
1386
- call->incoming_stream_compression_algorithm,
1387
- call->incoming_message_compression_algorithm);
1388
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1389
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1390
- }
1391
-
1392
- static void GPR_ATTRIBUTE_NOINLINE
1393
- handle_error_parsing_compression_algorithm(grpc_call* call) {
1394
- std::string error_msg = absl::StrFormat(
1395
- "Error in incoming message compression (%d) or stream "
1396
- "compression (%d).",
1397
- call->incoming_stream_compression_algorithm,
1398
- call->incoming_message_compression_algorithm);
1399
- cancel_with_status(call, GRPC_STATUS_INTERNAL, error_msg.c_str());
1400
- }
1401
-
1402
- static void GPR_ATTRIBUTE_NOINLINE handle_invalid_compression(
1403
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1404
- std::string error_msg = absl::StrFormat(
1405
- "Invalid compression algorithm value '%d'.", compression_algorithm);
1406
- gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1407
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1408
- }
1409
-
1410
- static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_disabled(
1411
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1243
+ void FilterStackCall::HandleCompressionAlgorithmDisabled(
1244
+ grpc_compression_algorithm compression_algorithm) {
1412
1245
  const char* algo_name = nullptr;
1413
1246
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1414
1247
  std::string error_msg =
1415
1248
  absl::StrFormat("Compression algorithm '%s' is disabled.", algo_name);
1416
1249
  gpr_log(GPR_ERROR, "%s", error_msg.c_str());
1417
- cancel_with_status(call, GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1250
+ CancelWithStatus(GRPC_STATUS_UNIMPLEMENTED, error_msg.c_str());
1418
1251
  }
1419
1252
 
1420
- static void GPR_ATTRIBUTE_NOINLINE handle_compression_algorithm_not_accepted(
1421
- grpc_call* call, grpc_compression_algorithm compression_algorithm) {
1253
+ void FilterStackCall::HandleCompressionAlgorithmNotAccepted(
1254
+ grpc_compression_algorithm compression_algorithm) {
1422
1255
  const char* algo_name = nullptr;
1423
1256
  grpc_compression_algorithm_name(compression_algorithm, &algo_name);
1424
1257
  gpr_log(GPR_ERROR,
1425
- "Compression algorithm ('%s') not present in the bitset of "
1426
- "accepted encodings ('0x%x')",
1427
- algo_name, call->encodings_accepted_by_peer);
1428
- }
1429
-
1430
- static void validate_filtered_metadata(batch_control* bctl) {
1431
- grpc_compression_algorithm compression_algorithm;
1432
- grpc_call* call = bctl->call;
1433
- if (GPR_UNLIKELY(call->incoming_stream_compression_algorithm !=
1434
- GRPC_STREAM_COMPRESS_NONE &&
1435
- call->incoming_message_compression_algorithm !=
1436
- GRPC_MESSAGE_COMPRESS_NONE)) {
1437
- handle_both_stream_and_msg_compression_set(call);
1438
- } else if (
1439
- GPR_UNLIKELY(
1440
- grpc_compression_algorithm_from_message_stream_compression_algorithm(
1441
- &compression_algorithm,
1442
- call->incoming_message_compression_algorithm,
1443
- call->incoming_stream_compression_algorithm) == 0)) {
1444
- handle_error_parsing_compression_algorithm(call);
1445
- } else {
1446
- const grpc_compression_options compression_options =
1447
- grpc_channel_compression_options(call->channel);
1448
- if (GPR_UNLIKELY(compression_algorithm >= GRPC_COMPRESS_ALGORITHMS_COUNT)) {
1449
- handle_invalid_compression(call, compression_algorithm);
1450
- } else if (GPR_UNLIKELY(
1451
- grpc_compression_options_is_algorithm_enabled_internal(
1452
- &compression_options, compression_algorithm) == 0)) {
1453
- /* check if algorithm is supported by current channel config */
1454
- handle_compression_algorithm_disabled(call, compression_algorithm);
1455
- }
1456
- /* GRPC_COMPRESS_NONE is always set. */
1457
- GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer != 0);
1458
- if (GPR_UNLIKELY(!GPR_BITGET(call->encodings_accepted_by_peer,
1459
- compression_algorithm))) {
1460
- if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1461
- handle_compression_algorithm_not_accepted(call, compression_algorithm);
1462
- }
1258
+ "Compression algorithm ('%s') not present in the "
1259
+ "accepted encodings (%s)",
1260
+ algo_name,
1261
+ std::string(encodings_accepted_by_peer_.ToString()).c_str());
1262
+ }
1263
+
1264
+ void FilterStackCall::BatchControl::ValidateFilteredMetadata() {
1265
+ FilterStackCall* call = call_;
1266
+
1267
+ const grpc_compression_options compression_options =
1268
+ call->channel_->compression_options();
1269
+ const grpc_compression_algorithm compression_algorithm =
1270
+ call->incoming_compression_algorithm_;
1271
+ if (GPR_UNLIKELY(!CompressionAlgorithmSet::FromUint32(
1272
+ compression_options.enabled_algorithms_bitset)
1273
+ .IsSet(compression_algorithm))) {
1274
+ /* check if algorithm is supported by current channel config */
1275
+ call->HandleCompressionAlgorithmDisabled(compression_algorithm);
1276
+ }
1277
+ /* GRPC_COMPRESS_NONE is always set. */
1278
+ GPR_DEBUG_ASSERT(call->encodings_accepted_by_peer_.IsSet(GRPC_COMPRESS_NONE));
1279
+ if (GPR_UNLIKELY(
1280
+ !call->encodings_accepted_by_peer_.IsSet(compression_algorithm))) {
1281
+ if (GRPC_TRACE_FLAG_ENABLED(grpc_compression_trace)) {
1282
+ call->HandleCompressionAlgorithmNotAccepted(compression_algorithm);
1463
1283
  }
1464
1284
  }
1465
1285
  }
1466
1286
 
1467
- static void receiving_initial_metadata_ready(void* bctlp, grpc_error* error) {
1468
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1469
- grpc_call* call = bctl->call;
1287
+ void FilterStackCall::BatchControl::ReceivingInitialMetadataReady(
1288
+ grpc_error_handle error) {
1289
+ FilterStackCall* call = call_;
1470
1290
 
1471
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_initial_metadata_ready");
1291
+ GRPC_CALL_COMBINER_STOP(call->call_combiner(), "recv_initial_metadata_ready");
1472
1292
 
1473
1293
  if (error == GRPC_ERROR_NONE) {
1474
- grpc_metadata_batch* md =
1475
- &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1476
- recv_initial_filter(call, md);
1294
+ grpc_metadata_batch* md = &call->recv_initial_metadata_;
1295
+ call->RecvInitialFilter(md);
1477
1296
 
1478
1297
  /* TODO(ctiller): this could be moved into recv_initial_filter now */
1479
1298
  GPR_TIMER_SCOPE("validate_filtered_metadata", 0);
1480
- validate_filtered_metadata(bctl);
1299
+ ValidateFilteredMetadata();
1481
1300
 
1482
- if (md->deadline != GRPC_MILLIS_INF_FUTURE && !call->is_client) {
1483
- call->send_deadline = md->deadline;
1301
+ absl::optional<Timestamp> deadline = md->get(GrpcTimeoutMetadata());
1302
+ if (deadline.has_value() && !call->is_client()) {
1303
+ call_->set_send_deadline(*deadline);
1484
1304
  }
1485
1305
  } else {
1486
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1487
- GRPC_ERROR_NONE) {
1488
- gpr_atm_rel_store(&bctl->batch_error,
1489
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1306
+ if (batch_error_.ok()) {
1307
+ batch_error_.set(error);
1490
1308
  }
1491
- cancel_with_error(call, GRPC_ERROR_REF(error));
1309
+ call->CancelWithError(GRPC_ERROR_REF(error));
1492
1310
  }
1493
1311
 
1494
1312
  grpc_closure* saved_rsr_closure = nullptr;
1495
1313
  while (true) {
1496
- gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state);
1314
+ gpr_atm rsr_bctlp = gpr_atm_acq_load(&call->recv_state_);
1497
1315
  /* Should only receive initial metadata once */
1498
1316
  GPR_ASSERT(rsr_bctlp != 1);
1499
1317
  if (rsr_bctlp == 0) {
@@ -1502,98 +1320,100 @@ static void receiving_initial_metadata_ready(void* bctlp, grpc_error* error) {
1502
1320
  * no_barrier_cas is used, as this function won't access the batch_control
1503
1321
  * object saved by receiving_stream_ready() if the initial metadata is
1504
1322
  * received first. */
1505
- if (gpr_atm_no_barrier_cas(&call->recv_state, RECV_NONE,
1506
- RECV_INITIAL_METADATA_FIRST)) {
1323
+ if (gpr_atm_no_barrier_cas(&call->recv_state_, kRecvNone,
1324
+ kRecvInitialMetadataFirst)) {
1507
1325
  break;
1508
1326
  }
1509
1327
  } else {
1510
1328
  /* Already received messages */
1511
- saved_rsr_closure =
1512
- GRPC_CLOSURE_CREATE(receiving_stream_ready, (batch_control*)rsr_bctlp,
1513
- grpc_schedule_on_exec_ctx);
1329
+ saved_rsr_closure = GRPC_CLOSURE_CREATE(
1330
+ [](void* bctl, grpc_error_handle error) {
1331
+ static_cast<BatchControl*>(bctl)->ReceivingStreamReady(error);
1332
+ },
1333
+ reinterpret_cast<BatchControl*>(rsr_bctlp),
1334
+ grpc_schedule_on_exec_ctx);
1514
1335
  /* No need to modify recv_state */
1515
1336
  break;
1516
1337
  }
1517
1338
  }
1518
1339
  if (saved_rsr_closure != nullptr) {
1519
- grpc_core::Closure::Run(DEBUG_LOCATION, saved_rsr_closure,
1520
- GRPC_ERROR_REF(error));
1340
+ Closure::Run(DEBUG_LOCATION, saved_rsr_closure, GRPC_ERROR_REF(error));
1521
1341
  }
1522
1342
 
1523
- finish_batch_step(bctl);
1343
+ FinishStep();
1524
1344
  }
1525
1345
 
1526
- static void receiving_trailing_metadata_ready(void* bctlp, grpc_error* error) {
1527
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1528
- grpc_call* call = bctl->call;
1529
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "recv_trailing_metadata_ready");
1530
- grpc_metadata_batch* md =
1531
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1532
- recv_trailing_filter(call, md, GRPC_ERROR_REF(error));
1533
- finish_batch_step(bctl);
1346
+ void FilterStackCall::BatchControl::ReceivingTrailingMetadataReady(
1347
+ grpc_error_handle error) {
1348
+ GRPC_CALL_COMBINER_STOP(call_->call_combiner(),
1349
+ "recv_trailing_metadata_ready");
1350
+ grpc_metadata_batch* md = &call_->recv_trailing_metadata_;
1351
+ call_->RecvTrailingFilter(md, GRPC_ERROR_REF(error));
1352
+ FinishStep();
1534
1353
  }
1535
1354
 
1536
- static void finish_batch(void* bctlp, grpc_error* error) {
1537
- batch_control* bctl = static_cast<batch_control*>(bctlp);
1538
- grpc_call* call = bctl->call;
1539
- GRPC_CALL_COMBINER_STOP(&call->call_combiner, "on_complete");
1540
- if (reinterpret_cast<grpc_error*>(gpr_atm_acq_load(&bctl->batch_error)) ==
1541
- GRPC_ERROR_NONE) {
1542
- gpr_atm_rel_store(&bctl->batch_error,
1543
- reinterpret_cast<gpr_atm>(GRPC_ERROR_REF(error)));
1355
+ void FilterStackCall::BatchControl::FinishBatch(grpc_error_handle error) {
1356
+ GRPC_CALL_COMBINER_STOP(call_->call_combiner(), "on_complete");
1357
+ if (batch_error_.ok()) {
1358
+ batch_error_.set(error);
1544
1359
  }
1545
1360
  if (error != GRPC_ERROR_NONE) {
1546
- cancel_with_error(call, GRPC_ERROR_REF(error));
1361
+ call_->CancelWithError(GRPC_ERROR_REF(error));
1547
1362
  }
1548
- finish_batch_step(bctl);
1549
- }
1550
-
1551
- static void free_no_op_completion(void* /*p*/, grpc_cq_completion* completion) {
1552
- gpr_free(completion);
1363
+ FinishStep();
1553
1364
  }
1554
1365
 
1555
- static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1556
- size_t nops, void* notify_tag,
1557
- int is_notify_tag_closure) {
1366
+ grpc_call_error FilterStackCall::StartBatch(const grpc_op* ops, size_t nops,
1367
+ void* notify_tag,
1368
+ bool is_notify_tag_closure) {
1558
1369
  GPR_TIMER_SCOPE("call_start_batch", 0);
1559
1370
 
1560
1371
  size_t i;
1561
1372
  const grpc_op* op;
1562
- batch_control* bctl;
1373
+ BatchControl* bctl;
1563
1374
  bool has_send_ops = false;
1564
1375
  int num_recv_ops = 0;
1565
1376
  grpc_call_error error = GRPC_CALL_OK;
1566
1377
  grpc_transport_stream_op_batch* stream_op;
1567
1378
  grpc_transport_stream_op_batch_payload* stream_op_payload;
1379
+ uint32_t seen_ops = 0;
1380
+
1381
+ for (i = 0; i < nops; i++) {
1382
+ if (seen_ops & (1u << ops[i].op)) {
1383
+ return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1384
+ }
1385
+ seen_ops |= (1u << ops[i].op);
1386
+ }
1568
1387
 
1569
1388
  GRPC_CALL_LOG_BATCH(GPR_INFO, ops, nops);
1570
1389
 
1571
1390
  if (nops == 0) {
1572
1391
  if (!is_notify_tag_closure) {
1573
- GPR_ASSERT(grpc_cq_begin_op(call->cq, notify_tag));
1574
- grpc_cq_end_op(call->cq, notify_tag, GRPC_ERROR_NONE,
1575
- free_no_op_completion, nullptr,
1576
- static_cast<grpc_cq_completion*>(
1577
- gpr_malloc(sizeof(grpc_cq_completion))));
1392
+ GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
1393
+ grpc_cq_end_op(
1394
+ cq_, notify_tag, GRPC_ERROR_NONE,
1395
+ [](void*, grpc_cq_completion* completion) { gpr_free(completion); },
1396
+ nullptr,
1397
+ static_cast<grpc_cq_completion*>(
1398
+ gpr_malloc(sizeof(grpc_cq_completion))));
1578
1399
  } else {
1579
- grpc_core::Closure::Run(DEBUG_LOCATION,
1580
- static_cast<grpc_closure*>(notify_tag),
1581
- GRPC_ERROR_NONE);
1400
+ Closure::Run(DEBUG_LOCATION, static_cast<grpc_closure*>(notify_tag),
1401
+ GRPC_ERROR_NONE);
1582
1402
  }
1583
1403
  error = GRPC_CALL_OK;
1584
1404
  goto done;
1585
1405
  }
1586
1406
 
1587
- bctl = reuse_or_allocate_batch_control(call, ops);
1407
+ bctl = ReuseOrAllocateBatchControl(ops);
1588
1408
  if (bctl == nullptr) {
1589
1409
  return GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1590
1410
  }
1591
- bctl->completion_data.notify_tag.tag = notify_tag;
1592
- bctl->completion_data.notify_tag.is_closure =
1411
+ bctl->completion_data_.notify_tag.tag = notify_tag;
1412
+ bctl->completion_data_.notify_tag.is_closure =
1593
1413
  static_cast<uint8_t>(is_notify_tag_closure != 0);
1594
1414
 
1595
- stream_op = &bctl->op;
1596
- stream_op_payload = &call->stream_op_payload;
1415
+ stream_op = &bctl->op_;
1416
+ stream_op_payload = &stream_op_payload_;
1597
1417
 
1598
1418
  /* rewrite batch ops into a transport op */
1599
1419
  for (i = 0; i < nops; i++) {
@@ -1605,11 +1425,11 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1605
1425
  switch (op->op) {
1606
1426
  case GRPC_OP_SEND_INITIAL_METADATA: {
1607
1427
  /* Flag validation: currently allow no flags */
1608
- if (!are_initial_metadata_flags_valid(op->flags, call->is_client)) {
1428
+ if (!AreInitialMetadataFlagsValid(op->flags)) {
1609
1429
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1610
1430
  goto done_with_error;
1611
1431
  }
1612
- if (call->sent_initial_metadata) {
1432
+ if (sent_initial_metadata_) {
1613
1433
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1614
1434
  goto done_with_error;
1615
1435
  }
@@ -1618,11 +1438,6 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1618
1438
  // GRPC_COMPRESSION_REQUEST_ALGORITHM_MD_KEY, we shouldn't override that
1619
1439
  // with the compression algorithm mapped from compression level.
1620
1440
  /* process compression level */
1621
- grpc_metadata& compression_md = call->compression_md;
1622
- compression_md.key = grpc_empty_slice();
1623
- compression_md.value = grpc_empty_slice();
1624
- compression_md.flags = 0;
1625
- size_t additional_metadata_count = 0;
1626
1441
  grpc_compression_level effective_compression_level =
1627
1442
  GRPC_COMPRESS_LEVEL_NONE;
1628
1443
  bool level_set = false;
@@ -1632,55 +1447,52 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1632
1447
  level_set = true;
1633
1448
  } else {
1634
1449
  const grpc_compression_options copts =
1635
- grpc_channel_compression_options(call->channel);
1450
+ channel_->compression_options();
1636
1451
  if (copts.default_level.is_set) {
1637
1452
  level_set = true;
1638
1453
  effective_compression_level = copts.default_level.level;
1639
1454
  }
1640
1455
  }
1641
1456
  // Currently, only server side supports compression level setting.
1642
- if (level_set && !call->is_client) {
1457
+ if (level_set && !is_client()) {
1643
1458
  const grpc_compression_algorithm calgo =
1644
- compression_algorithm_for_level_locked(
1645
- call, effective_compression_level);
1459
+ encodings_accepted_by_peer_.CompressionAlgorithmForLevel(
1460
+ effective_compression_level);
1646
1461
  // The following metadata will be checked and removed by the message
1647
1462
  // compression filter. It will be used as the call's compression
1648
1463
  // algorithm.
1649
- compression_md.key = GRPC_MDSTR_GRPC_INTERNAL_ENCODING_REQUEST;
1650
- compression_md.value = grpc_compression_algorithm_slice(calgo);
1651
- additional_metadata_count++;
1464
+ send_initial_metadata_.Set(GrpcInternalEncodingRequest(), calgo);
1652
1465
  }
1653
- if (op->data.send_initial_metadata.count + additional_metadata_count >
1654
- INT_MAX) {
1466
+ if (op->data.send_initial_metadata.count > INT_MAX) {
1655
1467
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1656
1468
  goto done_with_error;
1657
1469
  }
1658
1470
  stream_op->send_initial_metadata = true;
1659
- call->sent_initial_metadata = true;
1660
- if (!prepare_application_metadata(
1661
- call, static_cast<int>(op->data.send_initial_metadata.count),
1662
- op->data.send_initial_metadata.metadata, 0, call->is_client,
1663
- &compression_md, static_cast<int>(additional_metadata_count))) {
1471
+ sent_initial_metadata_ = true;
1472
+ if (!PrepareApplicationMetadata(op->data.send_initial_metadata.count,
1473
+ op->data.send_initial_metadata.metadata,
1474
+ false)) {
1664
1475
  error = GRPC_CALL_ERROR_INVALID_METADATA;
1665
1476
  goto done_with_error;
1666
1477
  }
1478
+ // Ignore any te metadata key value pairs specified.
1479
+ send_initial_metadata_.Remove(TeMetadata());
1667
1480
  /* TODO(ctiller): just make these the same variable? */
1668
- if (call->is_client) {
1669
- call->metadata_batch[0][0].deadline = call->send_deadline;
1481
+ if (is_client() && send_deadline() != Timestamp::InfFuture()) {
1482
+ send_initial_metadata_.Set(GrpcTimeoutMetadata(), send_deadline());
1670
1483
  }
1671
1484
  stream_op_payload->send_initial_metadata.send_initial_metadata =
1672
- &call->metadata_batch[0 /* is_receiving */][0 /* is_trailing */];
1485
+ &send_initial_metadata_;
1673
1486
  stream_op_payload->send_initial_metadata.send_initial_metadata_flags =
1674
1487
  op->flags;
1675
- if (call->is_client) {
1676
- stream_op_payload->send_initial_metadata.peer_string =
1677
- &call->peer_string;
1488
+ if (is_client()) {
1489
+ stream_op_payload->send_initial_metadata.peer_string = &peer_string_;
1678
1490
  }
1679
1491
  has_send_ops = true;
1680
1492
  break;
1681
1493
  }
1682
1494
  case GRPC_OP_SEND_MESSAGE: {
1683
- if (!are_write_flags_valid(op->flags)) {
1495
+ if (!AreWriteFlagsValid(op->flags)) {
1684
1496
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1685
1497
  goto done_with_error;
1686
1498
  }
@@ -1688,7 +1500,7 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1688
1500
  error = GRPC_CALL_ERROR_INVALID_MESSAGE;
1689
1501
  goto done_with_error;
1690
1502
  }
1691
- if (call->sending_message) {
1503
+ if (sending_message_) {
1692
1504
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1693
1505
  goto done_with_error;
1694
1506
  }
@@ -1701,11 +1513,11 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1701
1513
  flags |= GRPC_WRITE_INTERNAL_COMPRESS;
1702
1514
  }
1703
1515
  stream_op->send_message = true;
1704
- call->sending_message = true;
1705
- call->sending_stream.Init(
1516
+ sending_message_ = true;
1517
+ sending_stream_.Init(
1706
1518
  &op->data.send_message.send_message->data.raw.slice_buffer, flags);
1707
1519
  stream_op_payload->send_message.send_message.reset(
1708
- call->sending_stream.get());
1520
+ sending_stream_.get());
1709
1521
  has_send_ops = true;
1710
1522
  break;
1711
1523
  }
@@ -1715,18 +1527,18 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1715
1527
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1716
1528
  goto done_with_error;
1717
1529
  }
1718
- if (!call->is_client) {
1530
+ if (!is_client()) {
1719
1531
  error = GRPC_CALL_ERROR_NOT_ON_SERVER;
1720
1532
  goto done_with_error;
1721
1533
  }
1722
- if (call->sent_final_op) {
1534
+ if (sent_final_op_) {
1723
1535
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1724
1536
  goto done_with_error;
1725
1537
  }
1726
1538
  stream_op->send_trailing_metadata = true;
1727
- call->sent_final_op = true;
1539
+ sent_final_op_ = true;
1728
1540
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1729
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1541
+ &send_trailing_metadata_;
1730
1542
  has_send_ops = true;
1731
1543
  break;
1732
1544
  }
@@ -1736,11 +1548,11 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1736
1548
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1737
1549
  goto done_with_error;
1738
1550
  }
1739
- if (call->is_client) {
1551
+ if (is_client()) {
1740
1552
  error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
1741
1553
  goto done_with_error;
1742
1554
  }
1743
- if (call->sent_final_op) {
1555
+ if (sent_final_op_) {
1744
1556
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1745
1557
  goto done_with_error;
1746
1558
  }
@@ -1750,12 +1562,16 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1750
1562
  goto done_with_error;
1751
1563
  }
1752
1564
  stream_op->send_trailing_metadata = true;
1753
- call->sent_final_op = true;
1754
- GPR_ASSERT(call->send_extra_metadata_count == 0);
1755
- call->send_extra_metadata_count = 1;
1756
- call->send_extra_metadata[0].md = grpc_get_reffed_status_elem(
1757
- op->data.send_status_from_server.status);
1758
- grpc_error* status_error =
1565
+ sent_final_op_ = true;
1566
+
1567
+ if (!PrepareApplicationMetadata(
1568
+ op->data.send_status_from_server.trailing_metadata_count,
1569
+ op->data.send_status_from_server.trailing_metadata, true)) {
1570
+ error = GRPC_CALL_ERROR_INVALID_METADATA;
1571
+ goto done_with_error;
1572
+ }
1573
+
1574
+ grpc_error_handle status_error =
1759
1575
  op->data.send_status_from_server.status == GRPC_STATUS_OK
1760
1576
  ? GRPC_ERROR_NONE
1761
1577
  : grpc_error_set_int(
@@ -1765,40 +1581,30 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1765
1581
  static_cast<intptr_t>(
1766
1582
  op->data.send_status_from_server.status));
1767
1583
  if (op->data.send_status_from_server.status_details != nullptr) {
1768
- call->send_extra_metadata[1].md = grpc_mdelem_from_slices(
1769
- GRPC_MDSTR_GRPC_MESSAGE,
1770
- grpc_slice_ref_internal(
1771
- *op->data.send_status_from_server.status_details));
1772
- call->send_extra_metadata_count++;
1584
+ send_trailing_metadata_.Set(
1585
+ GrpcMessageMetadata(),
1586
+ Slice(grpc_slice_copy(
1587
+ *op->data.send_status_from_server.status_details)));
1773
1588
  if (status_error != GRPC_ERROR_NONE) {
1774
- char* msg = grpc_slice_to_c_string(
1775
- GRPC_MDVALUE(call->send_extra_metadata[1].md));
1776
- status_error =
1777
- grpc_error_set_str(status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1778
- grpc_slice_from_copied_string(msg));
1779
- gpr_free(msg);
1589
+ status_error = grpc_error_set_str(
1590
+ status_error, GRPC_ERROR_STR_GRPC_MESSAGE,
1591
+ StringViewFromSlice(
1592
+ *op->data.send_status_from_server.status_details));
1780
1593
  }
1781
1594
  }
1782
1595
 
1783
- gpr_atm_rel_store(&call->status_error,
1784
- reinterpret_cast<gpr_atm>(status_error));
1785
- if (!prepare_application_metadata(
1786
- call,
1787
- static_cast<int>(
1788
- op->data.send_status_from_server.trailing_metadata_count),
1789
- op->data.send_status_from_server.trailing_metadata, 1, 1,
1790
- nullptr, 0)) {
1791
- for (int n = 0; n < call->send_extra_metadata_count; n++) {
1792
- GRPC_MDELEM_UNREF(call->send_extra_metadata[n].md);
1793
- }
1794
- call->send_extra_metadata_count = 0;
1795
- error = GRPC_CALL_ERROR_INVALID_METADATA;
1796
- goto done_with_error;
1797
- }
1596
+ status_error_.set(status_error);
1597
+ GRPC_ERROR_UNREF(status_error);
1598
+
1599
+ send_trailing_metadata_.Set(GrpcStatusMetadata(),
1600
+ op->data.send_status_from_server.status);
1601
+
1602
+ // Ignore any te metadata key value pairs specified.
1603
+ send_trailing_metadata_.Remove(TeMetadata());
1798
1604
  stream_op_payload->send_trailing_metadata.send_trailing_metadata =
1799
- &call->metadata_batch[0 /* is_receiving */][1 /* is_trailing */];
1605
+ &send_trailing_metadata_;
1800
1606
  stream_op_payload->send_trailing_metadata.sent =
1801
- &call->sent_server_trailing_metadata;
1607
+ &sent_server_trailing_metadata_;
1802
1608
  has_send_ops = true;
1803
1609
  break;
1804
1610
  }
@@ -1808,24 +1614,30 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1808
1614
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1809
1615
  goto done_with_error;
1810
1616
  }
1811
- if (call->received_initial_metadata) {
1617
+ if (received_initial_metadata_) {
1812
1618
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1813
1619
  goto done_with_error;
1814
1620
  }
1815
- call->received_initial_metadata = true;
1816
- call->buffered_metadata[0] =
1621
+ received_initial_metadata_ = true;
1622
+ buffered_metadata_[0] =
1817
1623
  op->data.recv_initial_metadata.recv_initial_metadata;
1818
- GRPC_CLOSURE_INIT(&call->receiving_initial_metadata_ready,
1819
- receiving_initial_metadata_ready, bctl,
1820
- grpc_schedule_on_exec_ctx);
1624
+ GRPC_CLOSURE_INIT(
1625
+ &receiving_initial_metadata_ready_,
1626
+ [](void* bctl, grpc_error_handle error) {
1627
+ static_cast<BatchControl*>(bctl)->ReceivingInitialMetadataReady(
1628
+ error);
1629
+ },
1630
+ bctl, grpc_schedule_on_exec_ctx);
1821
1631
  stream_op->recv_initial_metadata = true;
1822
1632
  stream_op_payload->recv_initial_metadata.recv_initial_metadata =
1823
- &call->metadata_batch[1 /* is_receiving */][0 /* is_trailing */];
1633
+ &recv_initial_metadata_;
1824
1634
  stream_op_payload->recv_initial_metadata.recv_initial_metadata_ready =
1825
- &call->receiving_initial_metadata_ready;
1826
- if (!call->is_client) {
1827
- stream_op_payload->recv_initial_metadata.peer_string =
1828
- &call->peer_string;
1635
+ &receiving_initial_metadata_ready_;
1636
+ if (is_client()) {
1637
+ stream_op_payload->recv_initial_metadata.trailing_metadata_available =
1638
+ &is_trailers_only_;
1639
+ } else {
1640
+ stream_op_payload->recv_initial_metadata.peer_string = &peer_string_;
1829
1641
  }
1830
1642
  ++num_recv_ops;
1831
1643
  break;
@@ -1836,19 +1648,30 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1836
1648
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1837
1649
  goto done_with_error;
1838
1650
  }
1839
- if (call->receiving_message) {
1651
+ if (receiving_message_) {
1840
1652
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1841
1653
  goto done_with_error;
1842
1654
  }
1843
- call->receiving_message = true;
1655
+ receiving_message_ = true;
1844
1656
  stream_op->recv_message = true;
1845
- call->receiving_buffer = op->data.recv_message.recv_message;
1846
- stream_op_payload->recv_message.recv_message = &call->receiving_stream;
1847
- GRPC_CLOSURE_INIT(&call->receiving_stream_ready,
1848
- receiving_stream_ready_in_call_combiner, bctl,
1849
- grpc_schedule_on_exec_ctx);
1657
+ receiving_buffer_ = op->data.recv_message.recv_message;
1658
+ stream_op_payload->recv_message.recv_message = &receiving_stream_;
1659
+ stream_op_payload->recv_message.call_failed_before_recv_message =
1660
+ &call_failed_before_recv_message_;
1661
+ GRPC_CLOSURE_INIT(
1662
+ &receiving_stream_ready_,
1663
+ [](void* bctlp, grpc_error_handle error) {
1664
+ auto* bctl = static_cast<BatchControl*>(bctlp);
1665
+ auto* call = bctl->call_;
1666
+ // Yields the call combiner before processing the received
1667
+ // message.
1668
+ GRPC_CALL_COMBINER_STOP(call->call_combiner(),
1669
+ "recv_message_ready");
1670
+ bctl->ReceivingStreamReady(error);
1671
+ },
1672
+ bctl, grpc_schedule_on_exec_ctx);
1850
1673
  stream_op_payload->recv_message.recv_message_ready =
1851
- &call->receiving_stream_ready;
1674
+ &receiving_stream_ready_;
1852
1675
  ++num_recv_ops;
1853
1676
  break;
1854
1677
  }
@@ -1858,32 +1681,36 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1858
1681
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1859
1682
  goto done_with_error;
1860
1683
  }
1861
- if (!call->is_client) {
1684
+ if (!is_client()) {
1862
1685
  error = GRPC_CALL_ERROR_NOT_ON_SERVER;
1863
1686
  goto done_with_error;
1864
1687
  }
1865
- if (call->requested_final_op) {
1688
+ if (requested_final_op_) {
1866
1689
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1867
1690
  goto done_with_error;
1868
1691
  }
1869
- call->requested_final_op = true;
1870
- call->buffered_metadata[1] =
1692
+ requested_final_op_ = true;
1693
+ buffered_metadata_[1] =
1871
1694
  op->data.recv_status_on_client.trailing_metadata;
1872
- call->final_op.client.status = op->data.recv_status_on_client.status;
1873
- call->final_op.client.status_details =
1695
+ final_op_.client.status = op->data.recv_status_on_client.status;
1696
+ final_op_.client.status_details =
1874
1697
  op->data.recv_status_on_client.status_details;
1875
- call->final_op.client.error_string =
1698
+ final_op_.client.error_string =
1876
1699
  op->data.recv_status_on_client.error_string;
1877
1700
  stream_op->recv_trailing_metadata = true;
1878
1701
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1879
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1702
+ &recv_trailing_metadata_;
1880
1703
  stream_op_payload->recv_trailing_metadata.collect_stats =
1881
- &call->final_info.stats.transport_stream_stats;
1882
- GRPC_CLOSURE_INIT(&call->receiving_trailing_metadata_ready,
1883
- receiving_trailing_metadata_ready, bctl,
1884
- grpc_schedule_on_exec_ctx);
1704
+ &final_info_.stats.transport_stream_stats;
1705
+ GRPC_CLOSURE_INIT(
1706
+ &receiving_trailing_metadata_ready_,
1707
+ [](void* bctl, grpc_error_handle error) {
1708
+ static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
1709
+ error);
1710
+ },
1711
+ bctl, grpc_schedule_on_exec_ctx);
1885
1712
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1886
- &call->receiving_trailing_metadata_ready;
1713
+ &receiving_trailing_metadata_ready_;
1887
1714
  ++num_recv_ops;
1888
1715
  break;
1889
1716
  }
@@ -1893,47 +1720,54 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops,
1893
1720
  error = GRPC_CALL_ERROR_INVALID_FLAGS;
1894
1721
  goto done_with_error;
1895
1722
  }
1896
- if (call->is_client) {
1723
+ if (is_client()) {
1897
1724
  error = GRPC_CALL_ERROR_NOT_ON_CLIENT;
1898
1725
  goto done_with_error;
1899
1726
  }
1900
- if (call->requested_final_op) {
1727
+ if (requested_final_op_) {
1901
1728
  error = GRPC_CALL_ERROR_TOO_MANY_OPERATIONS;
1902
1729
  goto done_with_error;
1903
1730
  }
1904
- call->requested_final_op = true;
1905
- call->final_op.server.cancelled =
1906
- op->data.recv_close_on_server.cancelled;
1731
+ requested_final_op_ = true;
1732
+ final_op_.server.cancelled = op->data.recv_close_on_server.cancelled;
1907
1733
  stream_op->recv_trailing_metadata = true;
1908
1734
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata =
1909
- &call->metadata_batch[1 /* is_receiving */][1 /* is_trailing */];
1735
+ &recv_trailing_metadata_;
1910
1736
  stream_op_payload->recv_trailing_metadata.collect_stats =
1911
- &call->final_info.stats.transport_stream_stats;
1912
- GRPC_CLOSURE_INIT(&call->receiving_trailing_metadata_ready,
1913
- receiving_trailing_metadata_ready, bctl,
1914
- grpc_schedule_on_exec_ctx);
1737
+ &final_info_.stats.transport_stream_stats;
1738
+ GRPC_CLOSURE_INIT(
1739
+ &receiving_trailing_metadata_ready_,
1740
+ [](void* bctl, grpc_error_handle error) {
1741
+ static_cast<BatchControl*>(bctl)->ReceivingTrailingMetadataReady(
1742
+ error);
1743
+ },
1744
+ bctl, grpc_schedule_on_exec_ctx);
1915
1745
  stream_op_payload->recv_trailing_metadata.recv_trailing_metadata_ready =
1916
- &call->receiving_trailing_metadata_ready;
1746
+ &receiving_trailing_metadata_ready_;
1917
1747
  ++num_recv_ops;
1918
1748
  break;
1919
1749
  }
1920
1750
  }
1921
1751
  }
1922
1752
 
1923
- GRPC_CALL_INTERNAL_REF(call, "completion");
1753
+ InternalRef("completion");
1924
1754
  if (!is_notify_tag_closure) {
1925
- GPR_ASSERT(grpc_cq_begin_op(call->cq, notify_tag));
1755
+ GPR_ASSERT(grpc_cq_begin_op(cq_, notify_tag));
1926
1756
  }
1927
1757
  bctl->set_num_steps_to_complete((has_send_ops ? 1 : 0) + num_recv_ops);
1928
1758
 
1929
1759
  if (has_send_ops) {
1930
- GRPC_CLOSURE_INIT(&bctl->finish_batch, finish_batch, bctl,
1931
- grpc_schedule_on_exec_ctx);
1932
- stream_op->on_complete = &bctl->finish_batch;
1760
+ GRPC_CLOSURE_INIT(
1761
+ &bctl->finish_batch_,
1762
+ [](void* bctl, grpc_error_handle error) {
1763
+ static_cast<BatchControl*>(bctl)->FinishBatch(error);
1764
+ },
1765
+ bctl, grpc_schedule_on_exec_ctx);
1766
+ stream_op->on_complete = &bctl->finish_batch_;
1933
1767
  }
1934
1768
 
1935
- gpr_atm_rel_store(&call->any_ops_sent_atm, 1);
1936
- execute_batch(call, stream_op, &bctl->start_batch);
1769
+ gpr_atm_rel_store(&any_ops_sent_atm_, 1);
1770
+ ExecuteBatch(stream_op, &bctl->start_batch_);
1937
1771
 
1938
1772
  done:
1939
1773
  return error;
@@ -1941,76 +1775,172 @@ done:
1941
1775
  done_with_error:
1942
1776
  /* reverse any mutations that occurred */
1943
1777
  if (stream_op->send_initial_metadata) {
1944
- call->sent_initial_metadata = false;
1945
- grpc_metadata_batch_clear(&call->metadata_batch[0][0]);
1778
+ sent_initial_metadata_ = false;
1779
+ send_initial_metadata_.Clear();
1946
1780
  }
1947
1781
  if (stream_op->send_message) {
1948
- call->sending_message = false;
1949
- call->sending_stream->Orphan();
1782
+ sending_message_ = false;
1783
+ // No need to invoke call->sending_stream->Orphan() explicitly.
1784
+ // stream_op_payload->send_message.send_message.reset() calls Deletor
1785
+ // of call->sending_stream which in-turn invokes the Orphan() method.
1786
+ stream_op_payload->send_message.send_message.reset();
1950
1787
  }
1951
1788
  if (stream_op->send_trailing_metadata) {
1952
- call->sent_final_op = false;
1953
- grpc_metadata_batch_clear(&call->metadata_batch[0][1]);
1789
+ sent_final_op_ = false;
1790
+ send_trailing_metadata_.Clear();
1954
1791
  }
1955
1792
  if (stream_op->recv_initial_metadata) {
1956
- call->received_initial_metadata = false;
1793
+ received_initial_metadata_ = false;
1957
1794
  }
1958
1795
  if (stream_op->recv_message) {
1959
- call->receiving_message = false;
1796
+ receiving_message_ = false;
1960
1797
  }
1961
1798
  if (stream_op->recv_trailing_metadata) {
1962
- call->requested_final_op = false;
1799
+ requested_final_op_ = false;
1963
1800
  }
1964
1801
  goto done;
1965
1802
  }
1966
1803
 
1804
+ void FilterStackCall::ContextSet(grpc_context_index elem, void* value,
1805
+ void (*destroy)(void*)) {
1806
+ if (context_[elem].destroy) {
1807
+ context_[elem].destroy(context_[elem].value);
1808
+ }
1809
+ context_[elem].value = value;
1810
+ context_[elem].destroy = destroy;
1811
+ }
1812
+
1813
+ } // namespace grpc_core
1814
+
1815
+ void* grpc_call_arena_alloc(grpc_call* call, size_t size) {
1816
+ grpc_core::ExecCtx exec_ctx;
1817
+ return grpc_core::Call::FromC(call)->arena()->Alloc(size);
1818
+ }
1819
+
1820
+ size_t grpc_call_get_initial_size_estimate() {
1821
+ return grpc_core::FilterStackCall::InitialSizeEstimate();
1822
+ }
1823
+
1824
+ grpc_error_handle grpc_call_create(grpc_call_create_args* args,
1825
+ grpc_call** out_call) {
1826
+ return grpc_core::FilterStackCall::Create(args, out_call);
1827
+ }
1828
+
1829
+ void grpc_call_set_completion_queue(grpc_call* call,
1830
+ grpc_completion_queue* cq) {
1831
+ grpc_core::Call::FromC(call)->SetCompletionQueue(cq);
1832
+ }
1833
+
1834
+ void grpc_call_ref(grpc_call* c) { grpc_core::Call::FromC(c)->ExternalRef(); }
1835
+
1836
+ void grpc_call_unref(grpc_call* c) {
1837
+ grpc_core::Call::FromC(c)->ExternalUnref();
1838
+ }
1839
+
1840
+ char* grpc_call_get_peer(grpc_call* call) {
1841
+ return grpc_core::Call::FromC(call)->GetPeer();
1842
+ }
1843
+
1844
+ grpc_call* grpc_call_from_top_element(grpc_call_element* surface_element) {
1845
+ return grpc_core::FilterStackCall::FromTopElem(surface_element)->c_ptr();
1846
+ }
1847
+
1848
+ grpc_call_error grpc_call_cancel(grpc_call* call, void* reserved) {
1849
+ GRPC_API_TRACE("grpc_call_cancel(call=%p, reserved=%p)", 2, (call, reserved));
1850
+ GPR_ASSERT(reserved == nullptr);
1851
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1852
+ grpc_core::ExecCtx exec_ctx;
1853
+ grpc_core::Call::FromC(call)->CancelWithError(GRPC_ERROR_CANCELLED);
1854
+ return GRPC_CALL_OK;
1855
+ }
1856
+
1857
+ grpc_call_error grpc_call_cancel_with_status(grpc_call* c,
1858
+ grpc_status_code status,
1859
+ const char* description,
1860
+ void* reserved) {
1861
+ GRPC_API_TRACE(
1862
+ "grpc_call_cancel_with_status("
1863
+ "c=%p, status=%d, description=%s, reserved=%p)",
1864
+ 4, (c, (int)status, description, reserved));
1865
+ GPR_ASSERT(reserved == nullptr);
1866
+ grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1867
+ grpc_core::ExecCtx exec_ctx;
1868
+ grpc_core::Call::FromC(c)->CancelWithStatus(status, description);
1869
+ return GRPC_CALL_OK;
1870
+ }
1871
+
1872
+ void grpc_call_cancel_internal(grpc_call* call) {
1873
+ grpc_core::Call::FromC(call)->CancelWithError(GRPC_ERROR_CANCELLED);
1874
+ }
1875
+
1876
+ grpc_compression_algorithm grpc_call_test_only_get_compression_algorithm(
1877
+ grpc_call* call) {
1878
+ return grpc_core::Call::FromC(call)->test_only_compression_algorithm();
1879
+ }
1880
+
1881
+ uint32_t grpc_call_test_only_get_message_flags(grpc_call* call) {
1882
+ return grpc_core::Call::FromC(call)->test_only_message_flags();
1883
+ }
1884
+
1885
+ uint32_t grpc_call_test_only_get_encodings_accepted_by_peer(grpc_call* call) {
1886
+ return grpc_core::Call::FromC(call)->test_only_encodings_accepted_by_peer();
1887
+ }
1888
+
1889
+ grpc_core::Arena* grpc_call_get_arena(grpc_call* call) {
1890
+ return grpc_core::Call::FromC(call)->arena();
1891
+ }
1892
+
1893
+ grpc_call_stack* grpc_call_get_call_stack(grpc_call* call) {
1894
+ return grpc_core::Call::FromC(call)->call_stack();
1895
+ }
1896
+
1967
1897
  grpc_call_error grpc_call_start_batch(grpc_call* call, const grpc_op* ops,
1968
1898
  size_t nops, void* tag, void* reserved) {
1969
- grpc_call_error err;
1970
-
1971
1899
  GRPC_API_TRACE(
1972
1900
  "grpc_call_start_batch(call=%p, ops=%p, nops=%lu, tag=%p, "
1973
1901
  "reserved=%p)",
1974
1902
  5, (call, ops, (unsigned long)nops, tag, reserved));
1975
1903
 
1976
1904
  if (reserved != nullptr) {
1977
- err = GRPC_CALL_ERROR;
1905
+ return GRPC_CALL_ERROR;
1978
1906
  } else {
1979
1907
  grpc_core::ApplicationCallbackExecCtx callback_exec_ctx;
1980
1908
  grpc_core::ExecCtx exec_ctx;
1981
- err = call_start_batch(call, ops, nops, tag, 0);
1909
+ return grpc_core::Call::FromC(call)->StartBatch(ops, nops, tag, false);
1982
1910
  }
1983
-
1984
- return err;
1985
1911
  }
1986
1912
 
1987
1913
  grpc_call_error grpc_call_start_batch_and_execute(grpc_call* call,
1988
1914
  const grpc_op* ops,
1989
1915
  size_t nops,
1990
1916
  grpc_closure* closure) {
1991
- return call_start_batch(call, ops, nops, closure, 1);
1917
+ return grpc_core::Call::FromC(call)->StartBatch(ops, nops, closure, true);
1992
1918
  }
1993
1919
 
1994
1920
  void grpc_call_context_set(grpc_call* call, grpc_context_index elem,
1995
1921
  void* value, void (*destroy)(void* value)) {
1996
- if (call->context[elem].destroy) {
1997
- call->context[elem].destroy(call->context[elem].value);
1998
- }
1999
- call->context[elem].value = value;
2000
- call->context[elem].destroy = destroy;
1922
+ return grpc_core::Call::FromC(call)->ContextSet(elem, value, destroy);
2001
1923
  }
2002
1924
 
2003
1925
  void* grpc_call_context_get(grpc_call* call, grpc_context_index elem) {
2004
- return call->context[elem].value;
1926
+ return grpc_core::Call::FromC(call)->ContextGet(elem);
2005
1927
  }
2006
1928
 
2007
- uint8_t grpc_call_is_client(grpc_call* call) { return call->is_client; }
1929
+ uint8_t grpc_call_is_client(grpc_call* call) {
1930
+ return grpc_core::Call::FromC(call)->is_client();
1931
+ }
2008
1932
 
2009
1933
  grpc_compression_algorithm grpc_call_compression_for_level(
2010
1934
  grpc_call* call, grpc_compression_level level) {
2011
- grpc_compression_algorithm algo =
2012
- compression_algorithm_for_level_locked(call, level);
2013
- return algo;
1935
+ return grpc_core::Call::FromC(call)->compression_for_level(level);
1936
+ }
1937
+
1938
+ bool grpc_call_is_trailers_only(const grpc_call* call) {
1939
+ return grpc_core::Call::FromC(call)->is_trailers_only();
1940
+ }
1941
+
1942
+ int grpc_call_failed_before_recv_message(const grpc_call* c) {
1943
+ return grpc_core::Call::FromC(c)->failed_before_recv_message();
2014
1944
  }
2015
1945
 
2016
1946
  const char* grpc_call_error_to_string(grpc_call_error error) {