grpc 1.43.1 → 1.46.2

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