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
@@ -23,90 +23,67 @@
23
23
 
24
24
  #include <stdbool.h>
25
25
 
26
+ #include <cstdint>
27
+ #include <limits>
28
+
29
+ #include "absl/strings/escaping.h"
26
30
  #include "absl/strings/match.h"
27
31
  #include "absl/strings/str_join.h"
28
32
  #include "absl/types/optional.h"
29
33
 
30
34
  #include <grpc/grpc.h>
31
35
  #include <grpc/slice.h>
36
+ #include <grpc/status.h>
32
37
  #include <grpc/support/time.h>
33
38
 
39
+ #include "src/core/lib/compression/compression_internal.h"
34
40
  #include "src/core/lib/gprpp/chunked_vector.h"
35
41
  #include "src/core/lib/gprpp/table.h"
36
42
  #include "src/core/lib/iomgr/exec_ctx.h"
37
43
  #include "src/core/lib/slice/slice.h"
38
44
  #include "src/core/lib/surface/validate_metadata.h"
39
- #include "src/core/lib/transport/metadata.h"
40
45
  #include "src/core/lib/transport/parsed_metadata.h"
41
- #include "src/core/lib/transport/static_metadata.h"
42
46
  #include "src/core/lib/transport/timeout_encoding.h"
43
47
 
44
- typedef struct grpc_linked_mdelem {
45
- grpc_linked_mdelem() {}
46
-
47
- grpc_mdelem md;
48
- struct grpc_linked_mdelem* next = nullptr;
49
- struct grpc_linked_mdelem* prev = nullptr;
50
- void* reserved;
51
- } grpc_linked_mdelem;
52
-
53
- typedef struct grpc_mdelem_list {
54
- size_t count;
55
- size_t default_count; // Number of default keys.
56
- grpc_linked_mdelem* head;
57
- grpc_linked_mdelem* tail;
58
- } grpc_mdelem_list;
59
-
60
- struct grpc_filtered_mdelem {
61
- grpc_error_handle error;
62
- grpc_mdelem md;
63
- };
64
- #define GRPC_FILTERED_ERROR(error) \
65
- { (error), GRPC_MDNULL }
66
- #define GRPC_FILTERED_MDELEM(md) \
67
- { GRPC_ERROR_NONE, (md) }
68
- #define GRPC_FILTERED_REMOVE() \
69
- { GRPC_ERROR_NONE, GRPC_MDNULL }
70
-
71
- grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
72
- grpc_mdelem md);
48
+ struct grpc_call_final_info;
73
49
 
74
50
  namespace grpc_core {
75
51
 
76
52
  // grpc-timeout metadata trait.
77
- // ValueType is defined as grpc_millis - an absolute timestamp (i.e. a
53
+ // ValueType is defined as Timestamp - an absolute timestamp (i.e. a
78
54
  // deadline!), that is converted to a duration by transports before being
79
55
  // sent.
80
56
  // TODO(ctiller): Move this elsewhere. During the transition we need to be able
81
57
  // to name this in MetadataMap, but ultimately once the transition is done we
82
58
  // should not need to.
83
59
  struct GrpcTimeoutMetadata {
84
- using ValueType = grpc_millis;
85
- using MementoType = grpc_millis;
60
+ static constexpr bool kRepeatable = false;
61
+ using ValueType = Timestamp;
62
+ using MementoType = Duration;
86
63
  static absl::string_view key() { return "grpc-timeout"; }
87
- static MementoType ParseMemento(Slice value) {
88
- grpc_millis timeout;
89
- if (GPR_UNLIKELY(!grpc_http2_decode_timeout(value.c_slice(), &timeout))) {
90
- timeout = GRPC_MILLIS_INF_FUTURE;
64
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
65
+ auto timeout = ParseTimeout(value);
66
+ if (!timeout.has_value()) {
67
+ on_error("invalid value", value);
68
+ return Duration::Infinity();
91
69
  }
92
- return timeout;
70
+ return *timeout;
93
71
  }
94
72
  static ValueType MementoToValue(MementoType timeout) {
95
- if (timeout == GRPC_MILLIS_INF_FUTURE) {
96
- return GRPC_MILLIS_INF_FUTURE;
73
+ if (timeout == Duration::Infinity()) {
74
+ return Timestamp::InfFuture();
97
75
  }
98
76
  return ExecCtx::Get()->Now() + timeout;
99
77
  }
100
78
  static Slice Encode(ValueType x) {
101
- char timeout[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
102
- grpc_http2_encode_timeout(x, timeout);
103
- return Slice::FromCopiedString(timeout);
79
+ return Timeout::FromDuration(x - ExecCtx::Get()->Now()).Encode();
104
80
  }
105
- static MementoType DisplayValue(MementoType x) { return x; }
81
+ static std::string DisplayValue(MementoType x) { return x.ToString(); }
106
82
  };
107
83
 
108
84
  // TE metadata trait.
109
85
  struct TeMetadata {
86
+ static constexpr bool kRepeatable = false;
110
87
  // HTTP2 says that TE can either be empty or "trailers".
111
88
  // Empty means this trait is not included, "trailers" means kTrailers, and
112
89
  // kInvalid is used to remember an invalid value.
@@ -116,17 +93,19 @@ struct TeMetadata {
116
93
  };
117
94
  using MementoType = ValueType;
118
95
  static absl::string_view key() { return "te"; }
119
- static MementoType ParseMemento(Slice value) {
96
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
120
97
  auto out = kInvalid;
121
98
  if (value == "trailers") {
122
99
  out = kTrailers;
100
+ } else {
101
+ on_error("invalid value", value);
123
102
  }
124
103
  return out;
125
104
  }
126
105
  static ValueType MementoToValue(MementoType te) { return te; }
127
106
  static StaticSlice Encode(ValueType x) {
128
107
  GPR_ASSERT(x == kTrailers);
129
- return StaticSlice(GRPC_MDSTR_TRAILERS);
108
+ return StaticSlice::FromStaticString("trailers");
130
109
  }
131
110
  static const char* DisplayValue(MementoType te) {
132
111
  switch (te) {
@@ -138,10 +117,216 @@ struct TeMetadata {
138
117
  }
139
118
  };
140
119
 
120
+ // content-type metadata trait.
121
+ struct ContentTypeMetadata {
122
+ static constexpr bool kRepeatable = false;
123
+ // gRPC says that content-type can be application/grpc[;something]
124
+ // Core has only ever verified the prefix.
125
+ // IF we want to start verifying more, we can expand this type.
126
+ enum ValueType {
127
+ kApplicationGrpc,
128
+ kEmpty,
129
+ kInvalid,
130
+ };
131
+ using MementoType = ValueType;
132
+ static absl::string_view key() { return "content-type"; }
133
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
134
+ auto out = kInvalid;
135
+ auto value_string = value.as_string_view();
136
+ if (value_string == "application/grpc") {
137
+ out = kApplicationGrpc;
138
+ } else if (absl::StartsWith(value_string, "application/grpc;")) {
139
+ out = kApplicationGrpc;
140
+ } else if (absl::StartsWith(value_string, "application/grpc+")) {
141
+ out = kApplicationGrpc;
142
+ } else if (value_string.empty()) {
143
+ out = kEmpty;
144
+ } else {
145
+ on_error("invalid value", value);
146
+ }
147
+ return out;
148
+ }
149
+ static ValueType MementoToValue(MementoType content_type) {
150
+ return content_type;
151
+ }
152
+ static StaticSlice Encode(ValueType x) {
153
+ switch (x) {
154
+ case kEmpty:
155
+ return StaticSlice::FromStaticString("");
156
+ case kApplicationGrpc:
157
+ return StaticSlice::FromStaticString("application/grpc");
158
+ case kInvalid:
159
+ return StaticSlice::FromStaticString("application/grpc+unknown");
160
+ }
161
+ GPR_UNREACHABLE_CODE(
162
+ return StaticSlice::FromStaticString("unrepresentable value"));
163
+ }
164
+ static const char* DisplayValue(MementoType content_type) {
165
+ switch (content_type) {
166
+ case ValueType::kApplicationGrpc:
167
+ return "application/grpc";
168
+ case ValueType::kEmpty:
169
+ return "";
170
+ default:
171
+ return "<discarded-invalid-value>";
172
+ }
173
+ }
174
+ };
175
+
176
+ // scheme metadata trait.
177
+ struct HttpSchemeMetadata {
178
+ static constexpr bool kRepeatable = false;
179
+ enum ValueType {
180
+ kHttp,
181
+ kHttps,
182
+ kInvalid,
183
+ };
184
+ using MementoType = ValueType;
185
+ static absl::string_view key() { return ":scheme"; }
186
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
187
+ return Parse(value.as_string_view(), on_error);
188
+ }
189
+ static ValueType Parse(absl::string_view value,
190
+ MetadataParseErrorFn on_error) {
191
+ if (value == "http") {
192
+ return kHttp;
193
+ } else if (value == "https") {
194
+ return kHttps;
195
+ }
196
+ on_error("invalid value", Slice::FromCopiedBuffer(value));
197
+ return kInvalid;
198
+ }
199
+ static ValueType MementoToValue(MementoType content_type) {
200
+ return content_type;
201
+ }
202
+ static StaticSlice Encode(ValueType x) {
203
+ switch (x) {
204
+ case kHttp:
205
+ return StaticSlice::FromStaticString("http");
206
+ case kHttps:
207
+ return StaticSlice::FromStaticString("https");
208
+ default:
209
+ abort();
210
+ }
211
+ }
212
+ static const char* DisplayValue(MementoType content_type) {
213
+ switch (content_type) {
214
+ case kHttp:
215
+ return "http";
216
+ case kHttps:
217
+ return "https";
218
+ default:
219
+ return "<discarded-invalid-value>";
220
+ }
221
+ }
222
+ };
223
+
224
+ // method metadata trait.
225
+ struct HttpMethodMetadata {
226
+ static constexpr bool kRepeatable = false;
227
+ enum ValueType {
228
+ kPost,
229
+ kGet,
230
+ kInvalid,
231
+ };
232
+ using MementoType = ValueType;
233
+ static absl::string_view key() { return ":method"; }
234
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
235
+ auto out = kInvalid;
236
+ auto value_string = value.as_string_view();
237
+ if (value_string == "POST") {
238
+ out = kPost;
239
+ } else if (value_string == "GET") {
240
+ out = kGet;
241
+ } else {
242
+ on_error("invalid value", value);
243
+ }
244
+ return out;
245
+ }
246
+ static ValueType MementoToValue(MementoType content_type) {
247
+ return content_type;
248
+ }
249
+ static StaticSlice Encode(ValueType x) {
250
+ switch (x) {
251
+ case kPost:
252
+ return StaticSlice::FromStaticString("POST");
253
+ case kGet:
254
+ return StaticSlice::FromStaticString("GET");
255
+ default:
256
+ abort();
257
+ }
258
+ }
259
+ static const char* DisplayValue(MementoType content_type) {
260
+ switch (content_type) {
261
+ case kPost:
262
+ return "POST";
263
+ case kGet:
264
+ return "GET";
265
+ default:
266
+ return "<discarded-invalid-value>";
267
+ }
268
+ }
269
+ };
270
+
271
+ // Base type for metadata pertaining to a single compression algorithm
272
+ // (e.g., "grpc-encoding").
273
+ struct CompressionAlgorithmBasedMetadata {
274
+ using ValueType = grpc_compression_algorithm;
275
+ using MementoType = ValueType;
276
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
277
+ auto algorithm = ParseCompressionAlgorithm(value.as_string_view());
278
+ if (!algorithm.has_value()) {
279
+ on_error("invalid value", value);
280
+ return GRPC_COMPRESS_NONE;
281
+ }
282
+ return *algorithm;
283
+ }
284
+ static ValueType MementoToValue(MementoType x) { return x; }
285
+ static Slice Encode(ValueType x) {
286
+ GPR_ASSERT(x != GRPC_COMPRESS_ALGORITHMS_COUNT);
287
+ return Slice::FromStaticString(CompressionAlgorithmAsString(x));
288
+ }
289
+ static const char* DisplayValue(MementoType x) {
290
+ if (const char* p = CompressionAlgorithmAsString(x)) {
291
+ return p;
292
+ } else {
293
+ return "<discarded-invalid-value>";
294
+ }
295
+ }
296
+ };
297
+
298
+ // grpc-encoding metadata trait.
299
+ struct GrpcEncodingMetadata : public CompressionAlgorithmBasedMetadata {
300
+ static constexpr bool kRepeatable = false;
301
+ static absl::string_view key() { return "grpc-encoding"; }
302
+ };
303
+
304
+ // grpc-internal-encoding-request metadata trait.
305
+ struct GrpcInternalEncodingRequest : public CompressionAlgorithmBasedMetadata {
306
+ static constexpr bool kRepeatable = false;
307
+ static absl::string_view key() { return "grpc-internal-encoding-request"; }
308
+ };
309
+
310
+ // grpc-accept-encoding metadata trait.
311
+ struct GrpcAcceptEncodingMetadata {
312
+ static constexpr bool kRepeatable = false;
313
+ static absl::string_view key() { return "grpc-accept-encoding"; }
314
+ using ValueType = CompressionAlgorithmSet;
315
+ using MementoType = ValueType;
316
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
317
+ return CompressionAlgorithmSet::FromString(value.as_string_view());
318
+ }
319
+ static ValueType MementoToValue(MementoType x) { return x; }
320
+ static Slice Encode(ValueType x) { return x.ToSlice(); }
321
+ static std::string DisplayValue(MementoType x) { return x.ToString(); }
322
+ };
323
+
141
324
  struct SimpleSliceBasedMetadata {
142
325
  using ValueType = Slice;
143
326
  using MementoType = Slice;
144
- static MementoType ParseMemento(Slice value) { return value.TakeOwned(); }
327
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
328
+ return value.TakeOwned();
329
+ }
145
330
  static ValueType MementoToValue(MementoType value) { return value; }
146
331
  static Slice Encode(const ValueType& x) { return x.Ref(); }
147
332
  static absl::string_view DisplayValue(const MementoType& value) {
@@ -151,61 +336,262 @@ struct SimpleSliceBasedMetadata {
151
336
 
152
337
  // user-agent metadata trait.
153
338
  struct UserAgentMetadata : public SimpleSliceBasedMetadata {
339
+ static constexpr bool kRepeatable = false;
154
340
  static absl::string_view key() { return "user-agent"; }
155
341
  };
156
342
 
157
343
  // grpc-message metadata trait.
158
344
  struct GrpcMessageMetadata : public SimpleSliceBasedMetadata {
345
+ static constexpr bool kRepeatable = false;
159
346
  static absl::string_view key() { return "grpc-message"; }
160
347
  };
161
348
 
162
349
  // host metadata trait.
163
350
  struct HostMetadata : public SimpleSliceBasedMetadata {
351
+ static constexpr bool kRepeatable = false;
164
352
  static absl::string_view key() { return "host"; }
165
353
  };
166
354
 
167
355
  // x-endpoint-load-metrics-bin metadata trait.
168
356
  struct XEndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
357
+ static constexpr bool kRepeatable = false;
169
358
  static absl::string_view key() { return "x-endpoint-load-metrics-bin"; }
170
359
  };
171
360
 
172
361
  // grpc-server-stats-bin metadata trait.
173
362
  struct GrpcServerStatsBinMetadata : public SimpleSliceBasedMetadata {
363
+ static constexpr bool kRepeatable = false;
174
364
  static absl::string_view key() { return "grpc-server-stats-bin"; }
175
365
  };
176
366
 
177
367
  // grpc-trace-bin metadata trait.
178
368
  struct GrpcTraceBinMetadata : public SimpleSliceBasedMetadata {
369
+ static constexpr bool kRepeatable = false;
179
370
  static absl::string_view key() { return "grpc-trace-bin"; }
180
371
  };
181
372
 
182
373
  // grpc-tags-bin metadata trait.
183
374
  struct GrpcTagsBinMetadata : public SimpleSliceBasedMetadata {
375
+ static constexpr bool kRepeatable = false;
184
376
  static absl::string_view key() { return "grpc-tags-bin"; }
185
377
  };
186
378
 
379
+ // :authority metadata trait.
380
+ struct HttpAuthorityMetadata : public SimpleSliceBasedMetadata {
381
+ static constexpr bool kRepeatable = false;
382
+ static absl::string_view key() { return ":authority"; }
383
+ };
384
+
385
+ // :path metadata trait.
386
+ struct HttpPathMetadata : public SimpleSliceBasedMetadata {
387
+ static constexpr bool kRepeatable = false;
388
+ static absl::string_view key() { return ":path"; }
389
+ };
390
+
391
+ // We separate SimpleIntBasedMetadata into two pieces: one that does not depend
392
+ // on the invalid value, and one that does. This allows the compiler to easily
393
+ // see the functions that are shared, and helps reduce code bloat here.
394
+ template <typename Int>
395
+ struct SimpleIntBasedMetadataBase {
396
+ using ValueType = Int;
397
+ using MementoType = Int;
398
+ static ValueType MementoToValue(MementoType value) { return value; }
399
+ static Slice Encode(ValueType x) { return Slice::FromInt64(x); }
400
+ static Int DisplayValue(MementoType x) { return x; }
401
+ };
402
+
403
+ template <typename Int, Int kInvalidValue>
404
+ struct SimpleIntBasedMetadata : public SimpleIntBasedMetadataBase<Int> {
405
+ static constexpr Int invalid_value() { return kInvalidValue; }
406
+ static Int ParseMemento(Slice value, MetadataParseErrorFn on_error) {
407
+ Int out;
408
+ if (!absl::SimpleAtoi(value.as_string_view(), &out)) {
409
+ on_error("not an integer", value);
410
+ out = kInvalidValue;
411
+ }
412
+ return out;
413
+ }
414
+ };
415
+
416
+ // grpc-status metadata trait.
417
+ struct GrpcStatusMetadata
418
+ : public SimpleIntBasedMetadata<grpc_status_code, GRPC_STATUS_UNKNOWN> {
419
+ static constexpr bool kRepeatable = false;
420
+ static absl::string_view key() { return "grpc-status"; }
421
+ };
422
+
423
+ // grpc-previous-rpc-attempts metadata trait.
424
+ struct GrpcPreviousRpcAttemptsMetadata
425
+ : public SimpleIntBasedMetadata<uint32_t, 0> {
426
+ static constexpr bool kRepeatable = false;
427
+ static absl::string_view key() { return "grpc-previous-rpc-attempts"; }
428
+ };
429
+
430
+ // grpc-retry-pushback-ms metadata trait.
431
+ struct GrpcRetryPushbackMsMetadata {
432
+ static constexpr bool kRepeatable = false;
433
+ static absl::string_view key() { return "grpc-retry-pushback-ms"; }
434
+ using ValueType = Duration;
435
+ using MementoType = Duration;
436
+ static ValueType MementoToValue(MementoType x) { return x; }
437
+ static Slice Encode(Duration x) { return Slice::FromInt64(x.millis()); }
438
+ static int64_t DisplayValue(Duration x) { return x.millis(); }
439
+ static Duration ParseMemento(Slice value, MetadataParseErrorFn on_error) {
440
+ int64_t out;
441
+ if (!absl::SimpleAtoi(value.as_string_view(), &out)) {
442
+ on_error("not an integer", value);
443
+ return Duration::NegativeInfinity();
444
+ }
445
+ return Duration::Milliseconds(out);
446
+ }
447
+ };
448
+
449
+ // :status metadata trait.
450
+ // TODO(ctiller): consider moving to uint16_t
451
+ struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
452
+ static constexpr bool kRepeatable = false;
453
+ static absl::string_view key() { return ":status"; }
454
+ };
455
+
456
+ // "secret" metadata trait used to pass load balancing token between filters.
457
+ // This should not be exposed outside of gRPC core.
458
+ class GrpcLbClientStats;
459
+ struct GrpcLbClientStatsMetadata {
460
+ static constexpr bool kRepeatable = false;
461
+ static absl::string_view key() { return "grpclb_client_stats"; }
462
+ using ValueType = GrpcLbClientStats*;
463
+ using MementoType = ValueType;
464
+ static ValueType MementoToValue(MementoType value) { return value; }
465
+ static Slice Encode(ValueType) { abort(); }
466
+ static const char* DisplayValue(MementoType) { return "<internal-lb-stats>"; }
467
+ static MementoType ParseMemento(Slice, MetadataParseErrorFn) {
468
+ return nullptr;
469
+ }
470
+ };
471
+
472
+ // lb-token metadata
473
+ struct LbTokenMetadata : public SimpleSliceBasedMetadata {
474
+ static constexpr bool kRepeatable = false;
475
+ static absl::string_view key() { return "lb-token"; }
476
+ };
477
+
478
+ // lb-cost-bin metadata
479
+ struct LbCostBinMetadata {
480
+ static constexpr bool kRepeatable = true;
481
+ static absl::string_view key() { return "lb-cost-bin"; }
482
+ struct ValueType {
483
+ double cost;
484
+ std::string name;
485
+ };
486
+ using MementoType = ValueType;
487
+ static ValueType MementoToValue(MementoType value) { return value; }
488
+ static Slice Encode(const ValueType& x) {
489
+ auto slice =
490
+ MutableSlice::CreateUninitialized(sizeof(double) + x.name.length());
491
+ memcpy(slice.data(), &x.cost, sizeof(double));
492
+ memcpy(slice.data() + sizeof(double), x.name.data(), x.name.length());
493
+ return Slice(std::move(slice));
494
+ }
495
+ static std::string DisplayValue(MementoType x) {
496
+ return absl::StrCat(x.name, ":", x.cost);
497
+ }
498
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
499
+ if (value.length() < sizeof(double)) {
500
+ on_error("too short", value);
501
+ return {0, ""};
502
+ }
503
+ MementoType out;
504
+ memcpy(&out.cost, value.data(), sizeof(double));
505
+ out.name = std::string(
506
+ reinterpret_cast<const char*>(value.data()) + sizeof(double),
507
+ value.length() - sizeof(double));
508
+ return out;
509
+ }
510
+ };
511
+
512
+ // Annotation added by a transport to note whether a failed request was never
513
+ // placed on the wire, or never seen by a server.
514
+ struct GrpcStreamNetworkState {
515
+ static absl::string_view DebugKey() { return "GrpcStreamNetworkState"; }
516
+ static constexpr bool kRepeatable = false;
517
+ enum ValueType : uint8_t {
518
+ kNotSentOnWire,
519
+ kNotSeenByServer,
520
+ };
521
+ static std::string DisplayValue(ValueType x) {
522
+ switch (x) {
523
+ case kNotSentOnWire:
524
+ return "not sent on wire";
525
+ case kNotSeenByServer:
526
+ return "not seen by server";
527
+ }
528
+ }
529
+ };
530
+
531
+ // Annotation added by a server transport to note the peer making a request.
532
+ struct PeerString {
533
+ static absl::string_view DebugKey() { return "PeerString"; }
534
+ static constexpr bool kRepeatable = false;
535
+ using ValueType = absl::string_view;
536
+ static std::string DisplayValue(ValueType x) { return std::string(x); }
537
+ };
538
+
539
+ // Annotation added by various systems to describe the reason for a failure.
540
+ struct GrpcStatusContext {
541
+ static absl::string_view DebugKey() { return "GrpcStatusContext"; }
542
+ static constexpr bool kRepeatable = true;
543
+ using ValueType = std::string;
544
+ static const std::string& DisplayValue(const std::string& x) { return x; }
545
+ };
546
+
187
547
  namespace metadata_detail {
188
548
 
549
+ // IsEncodable: Given a trait, determine if that trait is encodable, or is just
550
+ // a value attached to a MetadataMap.
551
+ // We use the presence of the key() static method to determine if a trait is
552
+ // encodable or not - encodable traits have string names, and non-encodable
553
+ // traits do not.
554
+ template <typename Trait, typename Ignored = void>
555
+ struct IsEncodableTrait {
556
+ static const bool value = false;
557
+ };
558
+
559
+ template <typename Trait>
560
+ struct IsEncodableTrait<Trait, absl::void_t<decltype(Trait::key())>> {
561
+ static const bool value = true;
562
+ };
563
+
189
564
  // Helper type - maps a string name to a trait.
190
- template <typename... Traits>
565
+ template <typename MustBeVoid, typename... Traits>
191
566
  struct NameLookup;
192
567
 
193
568
  template <typename Trait, typename... Traits>
194
- struct NameLookup<Trait, Traits...> {
569
+ struct NameLookup<absl::enable_if_t<IsEncodableTrait<Trait>::value, void>,
570
+ Trait, Traits...> {
195
571
  // Call op->Found(Trait()) if op->name == Trait::key() for some Trait in
196
- // Traits. If not found, call op->NotFount().
572
+ // Traits. If not found, call op->NotFound().
197
573
  template <typename Op>
198
574
  static auto Lookup(absl::string_view key, Op* op)
199
575
  -> decltype(op->Found(Trait())) {
200
576
  if (key == Trait::key()) {
201
577
  return op->Found(Trait());
202
578
  }
203
- return NameLookup<Traits...>::Lookup(key, op);
579
+ return NameLookup<void, Traits...>::Lookup(key, op);
580
+ }
581
+ };
582
+
583
+ template <typename Trait, typename... Traits>
584
+ struct NameLookup<absl::enable_if_t<!IsEncodableTrait<Trait>::value, void>,
585
+ Trait, Traits...> {
586
+ template <typename Op>
587
+ static auto Lookup(absl::string_view key, Op* op)
588
+ -> decltype(NameLookup<void, Traits...>::Lookup(key, op)) {
589
+ return NameLookup<void, Traits...>::Lookup(key, op);
204
590
  }
205
591
  };
206
592
 
207
593
  template <>
208
- struct NameLookup<> {
594
+ struct NameLookup<void> {
209
595
  template <typename Op>
210
596
  static auto Lookup(absl::string_view key, Op* op)
211
597
  -> decltype(op->NotFound(key)) {
@@ -219,9 +605,11 @@ struct NameLookup<> {
219
605
  template <typename ParseMementoFn, typename MementoToValueFn>
220
606
  struct ParseValue {
221
607
  template <ParseMementoFn parse_memento, MementoToValueFn memento_to_value>
222
- static GPR_ATTRIBUTE_NOINLINE auto Parse(Slice* value)
223
- -> decltype(memento_to_value(parse_memento(std::move(*value)))) {
224
- return memento_to_value(parse_memento(std::move(*value)));
608
+ static GPR_ATTRIBUTE_NOINLINE auto Parse(Slice* value,
609
+ MetadataParseErrorFn on_error)
610
+ -> decltype(memento_to_value(parse_memento(std::move(*value),
611
+ on_error))) {
612
+ return memento_to_value(parse_memento(std::move(*value), on_error));
225
613
  }
226
614
  };
227
615
 
@@ -231,36 +619,44 @@ struct ParseValue {
231
619
  template <typename Container>
232
620
  class ParseHelper {
233
621
  public:
234
- ParseHelper(Slice value, size_t transport_size)
235
- : value_(std::move(value)), transport_size_(transport_size) {}
622
+ ParseHelper(Slice value, MetadataParseErrorFn on_error, size_t transport_size)
623
+ : value_(std::move(value)),
624
+ on_error_(on_error),
625
+ transport_size_(transport_size) {}
236
626
 
237
627
  template <typename Trait>
238
- ParsedMetadata<Container> Found(Trait trait) {
628
+ GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> Found(Trait trait) {
239
629
  return ParsedMetadata<Container>(
240
- trait, Trait::ParseMemento(std::move(value_)), transport_size_);
630
+ trait,
631
+ ParseValueToMemento<typename Trait::MementoType, Trait::ParseMemento>(),
632
+ transport_size_);
241
633
  }
242
634
 
243
635
  GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> NotFound(
244
636
  absl::string_view key) {
245
- return ParsedMetadata<Container>(
246
- grpc_mdelem_from_slices(grpc_slice_intern(grpc_slice_from_static_buffer(
247
- key.data(), key.size())),
248
- value_.TakeCSlice()));
637
+ return ParsedMetadata<Container>(Slice::FromCopiedString(key),
638
+ std::move(value_));
249
639
  }
250
640
 
251
641
  private:
642
+ template <typename T, T (*parse_memento)(Slice, MetadataParseErrorFn)>
643
+ GPR_ATTRIBUTE_NOINLINE T ParseValueToMemento() {
644
+ return parse_memento(std::move(value_), on_error_);
645
+ }
646
+
252
647
  Slice value_;
648
+ MetadataParseErrorFn on_error_;
253
649
  const size_t transport_size_;
254
650
  };
255
651
 
256
652
  // This is an "Op" type for NameLookup.
257
- // Used for MetadataMap::Parse, its Found/NotFound methods turn a slice into a
653
+ // Used for MetadataMap::Append, its Found/NotFound methods turn a slice into a
258
654
  // value and add it to a container.
259
655
  template <typename Container>
260
656
  class AppendHelper {
261
657
  public:
262
- AppendHelper(Container* container, Slice value)
263
- : container_(container), value_(std::move(value)) {}
658
+ AppendHelper(Container* container, Slice value, MetadataParseErrorFn on_error)
659
+ : container_(container), value_(std::move(value)), on_error_(on_error) {}
264
660
 
265
661
  template <typename Trait>
266
662
  GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
@@ -268,41 +664,368 @@ class AppendHelper {
268
664
  trait, ParseValue<decltype(Trait::ParseMemento),
269
665
  decltype(Trait::MementoToValue)>::
270
666
  template Parse<Trait::ParseMemento, Trait::MementoToValue>(
271
- &value_));
667
+ &value_, on_error_));
272
668
  }
273
669
 
274
- void NotFound(absl::string_view key) {
275
- GPR_ASSERT(GRPC_ERROR_NONE ==
276
- container_->Append(grpc_mdelem_from_slices(
277
- grpc_slice_intern(
278
- grpc_slice_from_static_buffer(key.data(), key.length())),
279
- value_.TakeCSlice())));
670
+ GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
671
+ container_->AppendUnknown(key, std::move(value_));
280
672
  }
281
673
 
282
674
  private:
283
675
  Container* const container_;
284
676
  Slice value_;
677
+ MetadataParseErrorFn on_error_;
678
+ };
679
+
680
+ // This is an "Op" type for NameLookup.
681
+ // Used for MetadataMap::Remove, its Found/NotFound methods remove a key from
682
+ // the container.
683
+ template <typename Container>
684
+ class RemoveHelper {
685
+ public:
686
+ explicit RemoveHelper(Container* container) : container_(container) {}
687
+
688
+ template <typename Trait>
689
+ GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
690
+ container_->Remove(trait);
691
+ }
692
+
693
+ GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
694
+ container_->RemoveUnknown(key);
695
+ }
696
+
697
+ private:
698
+ Container* const container_;
699
+ };
700
+
701
+ // This is an "Op" type for NameLookup.
702
+ // Used for MetadataMap::GetStringValue, its Found/NotFound methods generated a
703
+ // string value from the container.
704
+ template <typename Container>
705
+ class GetStringValueHelper {
706
+ public:
707
+ explicit GetStringValueHelper(const Container* container,
708
+ std::string* backing)
709
+ : container_(container), backing_(backing) {}
710
+
711
+ template <typename Trait>
712
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
713
+ Trait::kRepeatable == false &&
714
+ std::is_same<Slice, typename Trait::ValueType>::value,
715
+ absl::optional<absl::string_view>>
716
+ Found(Trait) {
717
+ const auto* value = container_->get_pointer(Trait());
718
+ if (value == nullptr) return absl::nullopt;
719
+ return value->as_string_view();
720
+ }
721
+
722
+ template <typename Trait>
723
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
724
+ Trait::kRepeatable == true &&
725
+ !std::is_same<Slice, typename Trait::ValueType>::value,
726
+ absl::optional<absl::string_view>>
727
+ Found(Trait) {
728
+ const auto* value = container_->get_pointer(Trait());
729
+ if (value == nullptr) return absl::nullopt;
730
+ backing_->clear();
731
+ for (const auto& v : *value) {
732
+ if (!backing_->empty()) backing_->push_back(',');
733
+ auto new_segment = Trait::Encode(v);
734
+ backing_->append(new_segment.begin(), new_segment.end());
735
+ }
736
+ return *backing_;
737
+ }
738
+
739
+ template <typename Trait>
740
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
741
+ Trait::kRepeatable == false &&
742
+ !std::is_same<Slice, typename Trait::ValueType>::value,
743
+ absl::optional<absl::string_view>>
744
+ Found(Trait) {
745
+ const auto* value = container_->get_pointer(Trait());
746
+ if (value == nullptr) return absl::nullopt;
747
+ *backing_ = std::string(Trait::Encode(*value).as_string_view());
748
+ return *backing_;
749
+ }
750
+
751
+ GPR_ATTRIBUTE_NOINLINE absl::optional<absl::string_view> NotFound(
752
+ absl::string_view key) {
753
+ return container_->GetStringValueUnknown(key, backing_);
754
+ }
755
+
756
+ private:
757
+ const Container* const container_;
758
+ std::string* backing_;
759
+ };
760
+
761
+ // Sink for key value logs
762
+ using LogFn = absl::FunctionRef<void(absl::string_view, absl::string_view)>;
763
+
764
+ template <typename T>
765
+ struct AdaptDisplayValueToLog {
766
+ static std::string ToString(const T& value) { return absl::StrCat(value); }
767
+ };
768
+
769
+ template <>
770
+ struct AdaptDisplayValueToLog<Slice> {
771
+ static std::string ToString(Slice value) {
772
+ return std::string(value.as_string_view());
773
+ }
774
+ };
775
+
776
+ template <>
777
+ struct AdaptDisplayValueToLog<StaticSlice> {
778
+ static absl::string_view ToString(StaticSlice value) {
779
+ return value.as_string_view();
780
+ }
781
+ };
782
+
783
+ template <typename T, typename U, typename V>
784
+ GPR_ATTRIBUTE_NOINLINE void LogKeyValueTo(absl::string_view key, const T& value,
785
+ V (*display_value)(U), LogFn log_fn) {
786
+ log_fn(key, AdaptDisplayValueToLog<V>::ToString(display_value(value)));
787
+ }
788
+
789
+ // Generate a strong type for metadata values per trait.
790
+ template <typename Which, typename Ignored = void>
791
+ struct Value;
792
+
793
+ template <typename Which>
794
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == false &&
795
+ IsEncodableTrait<Which>::value,
796
+ void>> {
797
+ Value() = default;
798
+ explicit Value(const typename Which::ValueType& value) : value(value) {}
799
+ explicit Value(typename Which::ValueType&& value)
800
+ : value(std::forward<typename Which::ValueType>(value)) {}
801
+ Value(const Value&) = delete;
802
+ Value& operator=(const Value&) = delete;
803
+ Value(Value&&) noexcept = default;
804
+ Value& operator=(Value&& other) noexcept {
805
+ value = std::move(other.value);
806
+ return *this;
807
+ }
808
+ template <typename Encoder>
809
+ void EncodeTo(Encoder* encoder) const {
810
+ encoder->Encode(Which(), value);
811
+ }
812
+ void LogTo(LogFn log_fn) const {
813
+ LogKeyValueTo(Which::key(), value, Which::Encode, log_fn);
814
+ }
815
+ using StorageType = typename Which::ValueType;
816
+ GPR_NO_UNIQUE_ADDRESS StorageType value;
817
+ };
818
+
819
+ template <typename Which>
820
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == false &&
821
+ !IsEncodableTrait<Which>::value,
822
+ void>> {
823
+ Value() = default;
824
+ explicit Value(const typename Which::ValueType& value) : value(value) {}
825
+ explicit Value(typename Which::ValueType&& value)
826
+ : value(std::forward<typename Which::ValueType>(value)) {}
827
+ Value(const Value&) = delete;
828
+ Value& operator=(const Value&) = delete;
829
+ Value(Value&&) noexcept = default;
830
+ Value& operator=(Value&& other) noexcept {
831
+ value = std::move(other.value);
832
+ return *this;
833
+ }
834
+ template <typename Encoder>
835
+ void EncodeTo(Encoder*) const {}
836
+ void LogTo(LogFn log_fn) const {
837
+ LogKeyValueTo(Which::DebugKey(), value, Which::DisplayValue, log_fn);
838
+ }
839
+ using StorageType = typename Which::ValueType;
840
+ GPR_NO_UNIQUE_ADDRESS StorageType value;
841
+ };
842
+
843
+ template <typename Which>
844
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == true &&
845
+ IsEncodableTrait<Which>::value,
846
+ void>> {
847
+ Value() = default;
848
+ explicit Value(const typename Which::ValueType& value) {
849
+ this->value.push_back(value);
850
+ }
851
+ explicit Value(typename Which::ValueType&& value) {
852
+ this->value.emplace_back(std::forward<typename Which::ValueType>(value));
853
+ }
854
+ Value(const Value&) = delete;
855
+ Value& operator=(const Value&) = delete;
856
+ Value(Value&& other) noexcept : value(std::move(other.value)) {}
857
+ Value& operator=(Value&& other) noexcept {
858
+ value = std::move(other.value);
859
+ return *this;
860
+ }
861
+ template <typename Encoder>
862
+ void EncodeTo(Encoder* encoder) const {
863
+ for (const auto& v : value) {
864
+ encoder->Encode(Which(), v);
865
+ }
866
+ }
867
+ void LogTo(LogFn log_fn) const {
868
+ for (const auto& v : value) {
869
+ LogKeyValueTo(Which::key(), v, Which::Encode, log_fn);
870
+ }
871
+ }
872
+ using StorageType = absl::InlinedVector<typename Which::ValueType, 1>;
873
+ StorageType value;
874
+ };
875
+
876
+ template <typename Which>
877
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == true &&
878
+ !IsEncodableTrait<Which>::value,
879
+ void>> {
880
+ Value() = default;
881
+ explicit Value(const typename Which::ValueType& value) {
882
+ this->value.push_back(value);
883
+ }
884
+ explicit Value(typename Which::ValueType&& value) {
885
+ this->value.emplace_back(std::forward<typename Which::ValueType>(value));
886
+ }
887
+ Value(const Value&) = delete;
888
+ Value& operator=(const Value&) = delete;
889
+ Value(Value&& other) noexcept : value(std::move(other.value)) {}
890
+ Value& operator=(Value&& other) noexcept {
891
+ value = std::move(other.value);
892
+ return *this;
893
+ }
894
+ template <typename Encoder>
895
+ void EncodeTo(Encoder*) const {}
896
+ void LogTo(LogFn log_fn) const {
897
+ for (const auto& v : value) {
898
+ LogKeyValueTo(Which::DebugKey(), v, Which::DisplayValue, log_fn);
899
+ }
900
+ }
901
+ using StorageType = absl::InlinedVector<typename Which::ValueType, 1>;
902
+ StorageType value;
903
+ };
904
+
905
+ // Encoder to copy some metadata
906
+ template <typename Output>
907
+ class CopySink {
908
+ public:
909
+ explicit CopySink(Output* dst) : dst_(dst) {}
910
+
911
+ template <class T, class V>
912
+ void Encode(T trait, V value) {
913
+ dst_->Set(trait, value);
914
+ }
915
+
916
+ template <class T>
917
+ void Encode(T trait, const Slice& value) {
918
+ dst_->Set(trait, std::move(value.AsOwned()));
919
+ }
920
+
921
+ void Encode(const Slice& key, const Slice& value) {
922
+ dst_->AppendUnknown(key.as_string_view(), value.Ref());
923
+ }
924
+
925
+ private:
926
+ Output* dst_;
927
+ };
928
+
929
+ // Callable for the ForEach in Encode() -- for each value, call the
930
+ // appropriate encoder method.
931
+ template <typename Encoder>
932
+ struct EncodeWrapper {
933
+ Encoder* encoder;
934
+ template <typename Which>
935
+ void operator()(const Value<Which>& which) {
936
+ which.EncodeTo(encoder);
937
+ }
938
+ };
939
+
940
+ // Callable for the ForEach in Log()
941
+ struct LogWrapper {
942
+ LogFn log_fn;
943
+ template <typename Which>
944
+ void operator()(const Value<Which>& which) {
945
+ which.LogTo(log_fn);
946
+ }
947
+ };
948
+
949
+ // Encoder to compute TransportSize
950
+ class TransportSizeEncoder {
951
+ public:
952
+ void Encode(const Slice& key, const Slice& value) {
953
+ size_ += key.length() + value.length() + 32;
954
+ }
955
+
956
+ template <typename Which>
957
+ void Encode(Which, const typename Which::ValueType& value) {
958
+ Add(Which(), value);
959
+ }
960
+
961
+ void Encode(ContentTypeMetadata,
962
+ const typename ContentTypeMetadata::ValueType& value) {
963
+ if (value == ContentTypeMetadata::kInvalid) return;
964
+ Add(ContentTypeMetadata(), value);
965
+ }
966
+
967
+ size_t size() const { return size_; }
968
+
969
+ private:
970
+ template <typename Which>
971
+ void Add(Which, const typename Which::ValueType& value) {
972
+ size_ += Which::key().length() + Which::Encode(value).length() + 32;
973
+ }
974
+
975
+ uint32_t size_ = 0;
285
976
  };
286
977
 
287
978
  } // namespace metadata_detail
288
979
 
980
+ // Helper function for encoders
981
+ // Given a metadata trait, convert the value to a slice.
982
+ template <typename Which>
983
+ absl::enable_if_t<std::is_same<typename Which::ValueType, Slice>::value,
984
+ const Slice&>
985
+ MetadataValueAsSlice(const Slice& slice) {
986
+ return slice;
987
+ }
988
+
989
+ template <typename Which>
990
+ absl::enable_if_t<!std::is_same<typename Which::ValueType, Slice>::value, Slice>
991
+ MetadataValueAsSlice(typename Which::ValueType value) {
992
+ return Slice(Which::Encode(value));
993
+ }
994
+
289
995
  // MetadataMap encodes the mapping of metadata keys to metadata values.
290
- // Right now the API presented is the minimal one that will allow us to
291
- // substitute this type for grpc_metadata_batch in a relatively easy fashion. At
292
- // that point we'll start iterating this API into something that's ergonomic
293
- // again, whilst minimally holding the performance bar already set (and
294
- // hopefully improving some things).
295
- // In the meantime, we're not going to invest much time in ephemeral API
296
- // documentation, so if you must use one of these APIs and it's not obvious
297
- // how, reach out to ctiller.
298
996
  //
299
- // MetadataMap takes a list of traits. Each of these trait objects defines
300
- // one metadata field that is used by core, and so should have more specialized
301
- // handling than just using the generic APIs.
997
+ // MetadataMap takes a derived class and list of traits. Each of these trait
998
+ // objects defines one metadata field that is used by core, and so should have
999
+ // more specialized handling than just using the generic APIs.
1000
+ //
1001
+ // MetadataMap is the backing type for some derived type via the curiously
1002
+ // recursive template pattern. This is because many types consumed by
1003
+ // MetadataMap require the container type to operate on, and many of those
1004
+ // types are instantiated one per trait. A naive implementation without the
1005
+ // Derived type would, for traits A,B,C, then instantiate for some
1006
+ // T<Container, Trait>:
1007
+ // - T<MetadataMap<A,B,C>, A>,
1008
+ // - T<MetadataMap<A,B,C>, B>,
1009
+ // - T<MetadataMap<A,B,C>, C>.
1010
+ // Since these types ultimately need to be recorded in the .dynstr segment
1011
+ // for dynamic linkers (if gRPC is linked as a static library) this would
1012
+ // create O(N^2) bytes of symbols even in stripped libraries. To avoid this
1013
+ // we use the derived type (e.g. grpc_metadata_batch right now) to capture
1014
+ // the container type, and we would write T<grpc_metadata_batch, A>, etc...
1015
+ // Note that now the container type uses a number of bytes that is independent
1016
+ // of the number of traits, and so we return to a linear symbol table growth
1017
+ // function.
1018
+ //
1019
+ // Each trait object has one of two possible signatures, depending on whether
1020
+ // that traits field is encodable or not.
1021
+ // Non-encodable traits are carried in a MetadataMap, but are never passed to
1022
+ // the application nor serialized to wire.
302
1023
  //
303
- // Each trait object has the following signature:
304
- // // Traits for the grpc-xyz metadata field:
1024
+ // Encodable traits have the following signature:
1025
+ // // Traits for the "grpc-xyz" metadata field:
305
1026
  // struct GrpcXyzMetadata {
1027
+ // // Can this metadata field be repeated?
1028
+ // static constexpr bool kRepeatable = ...;
306
1029
  // // The type that's stored on MetadataBatch
307
1030
  // using ValueType = ...;
308
1031
  // // The type that's stored in compression/decompression tables
@@ -311,7 +1034,9 @@ class AppendHelper {
311
1034
  // static absl::string_view key() { return "grpc-xyz"; }
312
1035
  // // Parse a memento from a slice
313
1036
  // // Takes ownership of value
314
- // static MementoType ParseMemento(Slice value) { ... }
1037
+ // // Calls fn in the case of an error that should be reported to the user
1038
+ // static MementoType ParseMemento(Slice value, MementoParseErrorFn fn) { ...
1039
+ // }
315
1040
  // // Convert a memento to a value
316
1041
  // static ValueType MementoToValue(MementoType memento) { ... }
317
1042
  // // Convert a value to its canonical text wire format (the format that
@@ -322,6 +1047,23 @@ class AppendHelper {
322
1047
  // static SomeStrCatableType DisplayValue(MementoType value) { ... }
323
1048
  // };
324
1049
  //
1050
+ // Non-encodable traits are determined by missing the key() method, and have the
1051
+ // following signature (and by convention omit the Metadata part of the type
1052
+ // name):
1053
+ // // Traits for the GrpcXyz field:
1054
+ // struct GrpcXyz {
1055
+ // // The string key that should be used for debug dumps - should not be a
1056
+ // // valid http2 key (ie all lower case)
1057
+ // static absl::string_view DebugKey() { return "GRPC_XYZ"; }
1058
+ // // Can this metadata field be repeated?
1059
+ // static constexpr bool kRepeatable = ...;
1060
+ // // The type that's stored on MetadataBatch
1061
+ // using ValueType = ...;
1062
+ // // Convert a value to something that can be passed to StrCat and displayed
1063
+ // // for debugging
1064
+ // static SomeStrCatableType DisplayValue(ValueType value) { ... }
1065
+ // };
1066
+ //
325
1067
  // About parsing and mementos:
326
1068
  //
327
1069
  // Many gRPC transports exchange metadata as key/value strings, but also allow
@@ -341,7 +1083,7 @@ class AppendHelper {
341
1083
  // for grpc-timeout we make the memento the timeout expressed on the wire, but
342
1084
  // we make the value the timestamp of when the timeout will expire (i.e. the
343
1085
  // deadline).
344
- template <typename... Traits>
1086
+ template <class Derived, typename... Traits>
345
1087
  class MetadataMap {
346
1088
  public:
347
1089
  explicit MetadataMap(Arena* arena);
@@ -350,7 +1092,10 @@ class MetadataMap {
350
1092
  MetadataMap(const MetadataMap&) = delete;
351
1093
  MetadataMap& operator=(const MetadataMap&) = delete;
352
1094
  MetadataMap(MetadataMap&&) noexcept;
353
- MetadataMap& operator=(MetadataMap&&) noexcept;
1095
+ // We never create MetadataMap directly, instead we create Derived, but we
1096
+ // want to be able to move it without redeclaring this.
1097
+ // NOLINTNEXTLINE(misc-unconventional-assign-operator)
1098
+ Derived& operator=(MetadataMap&&) noexcept;
354
1099
 
355
1100
  // Encode this metadata map into some encoder.
356
1101
  // For each field that is set in the MetadataMap, call
@@ -367,17 +1112,36 @@ class MetadataMap {
367
1112
  // transitions.
368
1113
  template <typename Encoder>
369
1114
  void Encode(Encoder* encoder) const {
370
- for (auto* l = list_.head; l; l = l->next) {
371
- encoder->Encode(l->md);
1115
+ table_.ForEach(metadata_detail::EncodeWrapper<Encoder>{encoder});
1116
+ for (const auto& unk : unknown_) {
1117
+ encoder->Encode(unk.first, unk.second);
372
1118
  }
373
- table_.ForEach(EncodeWrapper<Encoder>{encoder});
1119
+ }
1120
+
1121
+ // Similar to Encode, but targeted at logging: for each metadatum,
1122
+ // call f(key, value) as absl::string_views.
1123
+ void Log(metadata_detail::LogFn log_fn) const {
1124
+ table_.ForEach(metadata_detail::LogWrapper{log_fn});
1125
+ for (const auto& unk : unknown_) {
1126
+ log_fn(unk.first.as_string_view(), unk.second.as_string_view());
1127
+ }
1128
+ }
1129
+
1130
+ std::string DebugString() const {
1131
+ std::string out;
1132
+ Log([&out](absl::string_view key, absl::string_view value) {
1133
+ if (!out.empty()) out.append(", ");
1134
+ absl::StrAppend(&out, absl::CEscape(key), ": ", absl::CEscape(value));
1135
+ });
1136
+ return out;
374
1137
  }
375
1138
 
376
1139
  // Get the pointer to the value of some known metadata.
377
1140
  // Returns nullptr if the metadata is not present.
378
1141
  // Causes a compilation error if Which is not an element of Traits.
379
1142
  template <typename Which>
380
- const typename Which::ValueType* get_pointer(Which) const {
1143
+ const typename metadata_detail::Value<Which>::StorageType* get_pointer(
1144
+ Which) const {
381
1145
  if (auto* p = table_.template get<Value<Which>>()) return &p->value;
382
1146
  return nullptr;
383
1147
  }
@@ -386,11 +1150,20 @@ class MetadataMap {
386
1150
  // Returns nullptr if the metadata is not present.
387
1151
  // Causes a compilation error if Which is not an element of Traits.
388
1152
  template <typename Which>
389
- typename Which::ValueType* get_pointer(Which) {
1153
+ typename metadata_detail::Value<Which>::StorageType* get_pointer(Which) {
390
1154
  if (auto* p = table_.template get<Value<Which>>()) return &p->value;
391
1155
  return nullptr;
392
1156
  }
393
1157
 
1158
+ // Get the pointer to the value of some known metadata.
1159
+ // Adds the default value for the metadata is not present.
1160
+ // Causes a compilation error if Which is not an element of Traits.
1161
+ template <typename Which>
1162
+ typename metadata_detail::Value<Which>::StorageType* GetOrCreatePointer(
1163
+ Which) {
1164
+ return &table_.template get_or_create<Value<Which>>()->value;
1165
+ }
1166
+
394
1167
  // Get the value of some known metadata.
395
1168
  // Returns nullopt if the metadata is not present.
396
1169
  // Causes a compilation error if Which is not an element of Traits.
@@ -403,9 +1176,14 @@ class MetadataMap {
403
1176
  // Set the value of some known metadata.
404
1177
  // Returns a pointer to the new value.
405
1178
  template <typename Which, typename... Args>
406
- typename Which::ValueType* Set(Which, Args&&... args) {
407
- return &table_.template set<Value<Which>>(std::forward<Args>(args)...)
408
- ->value;
1179
+ absl::enable_if_t<Which::kRepeatable == false, void> Set(Which,
1180
+ Args&&... args) {
1181
+ table_.template set<Value<Which>>(std::forward<Args>(args)...);
1182
+ }
1183
+ template <typename Which, typename... Args>
1184
+ absl::enable_if_t<Which::kRepeatable == true, void> Set(Which,
1185
+ Args&&... args) {
1186
+ GetOrCreatePointer(Which())->emplace_back(std::forward<Args>(args)...);
409
1187
  }
410
1188
 
411
1189
  // Remove a specific piece of known metadata.
@@ -414,13 +1192,31 @@ class MetadataMap {
414
1192
  table_.template clear<Value<Which>>();
415
1193
  }
416
1194
 
1195
+ // Remove some metadata by name
1196
+ void Remove(absl::string_view key) {
1197
+ metadata_detail::RemoveHelper<Derived> helper(static_cast<Derived*>(this));
1198
+ metadata_detail::NameLookup<void, Traits...>::Lookup(key, &helper);
1199
+ }
1200
+
1201
+ void Remove(const char* key) { Remove(absl::string_view(key)); }
1202
+
1203
+ // Retrieve some metadata by name
1204
+ absl::optional<absl::string_view> GetStringValue(absl::string_view name,
1205
+ std::string* buffer) const {
1206
+ metadata_detail::GetStringValueHelper<Derived> helper(
1207
+ static_cast<const Derived*>(this), buffer);
1208
+ return metadata_detail::NameLookup<void, Traits...>::Lookup(name, &helper);
1209
+ }
1210
+
417
1211
  // Extract a piece of known metadata.
418
1212
  // Returns nullopt if the metadata was not present, or the value if it was.
419
1213
  // The same as:
420
1214
  // auto value = m.get(T());
421
1215
  // m.Remove(T());
422
1216
  template <typename Which>
423
- absl::optional<typename Which::ValueType> Take(Which which) {
1217
+ absl::enable_if_t<Which::kRepeatable == false,
1218
+ absl::optional<typename Which::ValueType>>
1219
+ Take(Which which) {
424
1220
  if (auto* p = get_pointer(which)) {
425
1221
  absl::optional<typename Which::ValueType> value(std::move(*p));
426
1222
  Remove(which);
@@ -429,702 +1225,170 @@ class MetadataMap {
429
1225
  return {};
430
1226
  }
431
1227
 
1228
+ // Extract repeated known metadata.
1229
+ // Returns an empty vector if the metadata was not present.
1230
+ template <typename Which>
1231
+ absl::enable_if_t<Which::kRepeatable == true,
1232
+ typename metadata_detail::Value<Which>::StorageType>
1233
+ Take(Which which) {
1234
+ if (auto* p = get_pointer(which)) {
1235
+ typename Value<Which>::StorageType value = std::move(*p);
1236
+ Remove(which);
1237
+ return value;
1238
+ }
1239
+ return {};
1240
+ }
1241
+
432
1242
  // Parse metadata from a key/value pair, and return an object representing
433
1243
  // that result.
434
1244
  // TODO(ctiller): key should probably be an absl::string_view.
435
1245
  // Once we don't care about interning anymore, make that change!
436
- static ParsedMetadata<MetadataMap> Parse(absl::string_view key, Slice value,
437
- uint32_t transport_size) {
438
- metadata_detail::ParseHelper<MetadataMap> helper(value.TakeOwned(),
439
- transport_size);
440
- return metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
1246
+ static ParsedMetadata<Derived> Parse(absl::string_view key, Slice value,
1247
+ uint32_t transport_size,
1248
+ MetadataParseErrorFn on_error) {
1249
+ metadata_detail::ParseHelper<Derived> helper(value.TakeOwned(), on_error,
1250
+ transport_size);
1251
+ return metadata_detail::NameLookup<void, Traits...>::Lookup(key, &helper);
441
1252
  }
442
1253
 
443
1254
  // Set a value from a parsed metadata object.
444
- GRPC_MUST_USE_RESULT grpc_error_handle
445
- Set(const ParsedMetadata<MetadataMap>& m) {
446
- return m.SetOnContainer(this);
1255
+ void Set(const ParsedMetadata<Derived>& m) {
1256
+ m.SetOnContainer(static_cast<Derived*>(this));
447
1257
  }
448
1258
 
449
1259
  // Append a key/value pair - takes ownership of value
450
- void Append(absl::string_view key, Slice value) {
451
- metadata_detail::AppendHelper<MetadataMap> helper(this, value.TakeOwned());
452
- metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
1260
+ void Append(absl::string_view key, Slice value,
1261
+ MetadataParseErrorFn on_error) {
1262
+ metadata_detail::AppendHelper<Derived> helper(static_cast<Derived*>(this),
1263
+ value.TakeOwned(), on_error);
1264
+ metadata_detail::NameLookup<void, Traits...>::Lookup(key, &helper);
453
1265
  }
454
1266
 
455
- //
456
- // All APIs below this point are subject to change.
457
- //
458
-
459
- template <typename F>
460
- void ForEach(F f) const {
461
- for (auto* l = list_.head; l; l = l->next) {
462
- f(l->md);
463
- }
464
- }
465
-
466
- template <typename F>
467
- grpc_error_handle Filter(F f, const char* composite_error_string) {
468
- grpc_linked_mdelem* l = list_.head;
469
- grpc_error_handle error = GRPC_ERROR_NONE;
470
- auto add_error = [&](grpc_error_handle new_error) {
471
- if (new_error == GRPC_ERROR_NONE) return;
472
- if (error == GRPC_ERROR_NONE) {
473
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(composite_error_string);
474
- }
475
- error = grpc_error_add_child(error, new_error);
476
- };
477
- while (l) {
478
- grpc_linked_mdelem* next = l->next;
479
- grpc_filtered_mdelem new_mdelem = f(l->md);
480
- add_error(new_mdelem.error);
481
- if (GRPC_MDISNULL(new_mdelem.md)) {
482
- Remove(l);
483
- } else if (new_mdelem.md.payload != l->md.payload) {
484
- add_error(Substitute(l, new_mdelem.md));
485
- }
486
- l = next;
487
- }
488
- return error;
489
- }
490
-
491
- GRPC_MUST_USE_RESULT grpc_error_handle Append(grpc_mdelem md) {
492
- return AddTail(elem_storage_.EmplaceBack(), md);
493
- }
494
-
495
- GRPC_MUST_USE_RESULT grpc_error_handle ReplaceOrAppend(grpc_slice key,
496
- grpc_slice value) {
497
- if (ReplaceIfExists(key, value)) return GRPC_ERROR_NONE;
498
- return Append(grpc_mdelem_from_slices(key, value));
499
- }
500
-
501
- // Set key to value if it exists and return true, otherwise return false.
502
- // If this function returns true, it takes ownership of key and value.
503
- // If this function returns false, it does not take ownership of key nor
504
- // value.
505
- bool ReplaceIfExists(grpc_slice key, grpc_slice value);
506
-
507
1267
  void Clear();
508
- bool empty() const { return count() == 0; }
509
-
510
- size_t count() const { return list_.count + table_.count(); }
511
- size_t non_deadline_count() const { return list_.count; }
512
- size_t default_count() const { return list_.default_count; }
513
-
514
1268
  size_t TransportSize() const;
515
-
516
- void Remove(grpc_linked_mdelem* storage);
517
- void Remove(grpc_metadata_batch_callouts_index idx);
518
-
519
- absl::optional<grpc_slice> Remove(grpc_slice key);
520
-
521
- grpc_error_handle Substitute(grpc_linked_mdelem* storage,
522
- grpc_mdelem new_mdelem);
523
-
524
- absl::optional<absl::string_view> GetValue(
525
- absl::string_view target_key, std::string* concatenated_value) const;
526
-
527
- grpc_error_handle LinkHead(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
528
- grpc_error_handle LinkHead(grpc_linked_mdelem* storage,
529
- grpc_metadata_batch_callouts_index idx)
530
- GRPC_MUST_USE_RESULT;
531
- grpc_error_handle LinkTail(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
532
- grpc_error_handle LinkTail(grpc_linked_mdelem* storage,
533
- grpc_metadata_batch_callouts_index idx)
534
- GRPC_MUST_USE_RESULT;
535
-
536
- grpc_error_handle AddHead(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
537
- grpc_error_handle AddHead(grpc_linked_mdelem* storage,
538
- grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
539
- grpc_error_handle AddTail(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
540
- grpc_error_handle AddTail(grpc_linked_mdelem* storage,
541
- grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
542
-
543
- void CopyFrom(MetadataMap* src, grpc_linked_mdelem* storage);
544
-
545
- #ifndef NDEBUG
546
- void AssertOk();
547
- #else
548
- void AssertOk() {}
549
- #endif
550
-
551
- // TODO(ctiller): the following explicit deadline handling methods are
552
- // deprecated in terms of the traits based APIs.
553
- grpc_millis deadline() const {
554
- return get(GrpcTimeoutMetadata()).value_or(GRPC_MILLIS_INF_FUTURE);
555
- };
556
-
557
- const grpc_metadata_batch_callouts* legacy_index() const { return &idx_; }
1269
+ Derived Copy() const;
1270
+ bool empty() const { return table_.empty() && unknown_.empty(); }
1271
+ size_t count() const { return table_.count() + unknown_.size(); }
558
1272
 
559
1273
  private:
560
- // Generate a strong type for metadata values per trait.
1274
+ friend class metadata_detail::AppendHelper<Derived>;
1275
+ friend class metadata_detail::GetStringValueHelper<Derived>;
1276
+ friend class metadata_detail::RemoveHelper<Derived>;
1277
+ friend class metadata_detail::CopySink<Derived>;
1278
+ friend class ParsedMetadata<Derived>;
1279
+
561
1280
  template <typename Which>
562
- struct Value {
563
- Value() = default;
564
- explicit Value(const typename Which::ValueType& value) : value(value) {}
565
- explicit Value(typename Which::ValueType&& value)
566
- : value(std::forward<typename Which::ValueType>(value)) {}
567
- Value(const Value&) = delete;
568
- Value& operator=(const Value&) = delete;
569
- Value(Value&&) noexcept = default;
570
- Value& operator=(Value&& other) noexcept {
571
- value = std::move(other.value);
572
- return *this;
573
- }
574
- GPR_NO_UNIQUE_ADDRESS typename Which::ValueType value;
575
- };
576
- // Callable for the ForEach in Encode() -- for each value, call the
577
- // appropriate encoder method.
578
- template <typename Encoder>
579
- struct EncodeWrapper {
580
- Encoder* encoder;
581
- template <typename Which>
582
- void operator()(const Value<Which>& which) {
583
- encoder->Encode(Which(), which.value);
584
- }
585
- };
1281
+ using Value = metadata_detail::Value<Which>;
586
1282
 
587
- void AssertValidCallouts();
588
- grpc_error_handle LinkCallout(grpc_linked_mdelem* storage,
589
- grpc_metadata_batch_callouts_index idx)
590
- GRPC_MUST_USE_RESULT;
591
- grpc_error_handle MaybeLinkCallout(grpc_linked_mdelem* storage)
592
- GRPC_MUST_USE_RESULT;
593
- void MaybeUnlinkCallout(grpc_linked_mdelem* storage);
594
-
595
- static void assert_valid_list(grpc_mdelem_list* list) {
596
- #ifndef NDEBUG
597
- grpc_linked_mdelem* l;
598
-
599
- GPR_ASSERT((list->head == nullptr) == (list->tail == nullptr));
600
- if (!list->head) return;
601
- GPR_ASSERT(list->head->prev == nullptr);
602
- GPR_ASSERT(list->tail->next == nullptr);
603
- GPR_ASSERT((list->head == list->tail) == (list->head->next == nullptr));
604
-
605
- size_t verified_count = 0;
606
- for (l = list->head; l; l = l->next) {
607
- GPR_ASSERT(!GRPC_MDISNULL(l->md));
608
- GPR_ASSERT((l->prev == nullptr) == (l == list->head));
609
- GPR_ASSERT((l->next == nullptr) == (l == list->tail));
610
- if (l->next) GPR_ASSERT(l->next->prev == l);
611
- if (l->prev) GPR_ASSERT(l->prev->next == l);
612
- verified_count++;
613
- }
614
- GPR_ASSERT(list->count == verified_count);
615
- #else
616
- // Avoid unused-parameter warning for debug-only parameter
617
- (void)list;
618
- #endif /* NDEBUG */
619
- }
620
-
621
- static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
622
- error_with_md(grpc_mdelem md) {
623
- return grpc_attach_md_to_error(
624
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unallowed duplicate metadata"),
625
- md);
626
- }
627
-
628
- static void link_head(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
629
- assert_valid_list(list);
630
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
631
- storage->prev = nullptr;
632
- storage->next = list->head;
633
- storage->reserved = nullptr;
634
- if (list->head != nullptr) {
635
- list->head->prev = storage;
636
- } else {
637
- list->tail = storage;
638
- }
639
- list->head = storage;
640
- list->count++;
641
- assert_valid_list(list);
642
- }
643
-
644
- static void link_tail(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
645
- assert_valid_list(list);
646
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
647
- storage->prev = list->tail;
648
- storage->next = nullptr;
649
- storage->reserved = nullptr;
650
- if (list->tail != nullptr) {
651
- list->tail->next = storage;
652
- } else {
653
- list->head = storage;
654
- }
655
- list->tail = storage;
656
- list->count++;
657
- assert_valid_list(list);
1283
+ void AppendUnknown(absl::string_view key, Slice value) {
1284
+ unknown_.EmplaceBack(Slice::FromCopiedString(key), value.Ref());
658
1285
  }
659
1286
 
660
- static void unlink_storage(grpc_mdelem_list* list,
661
- grpc_linked_mdelem* storage) {
662
- assert_valid_list(list);
663
- if (storage->prev != nullptr) {
664
- storage->prev->next = storage->next;
665
- } else {
666
- list->head = storage->next;
667
- }
668
- if (storage->next != nullptr) {
669
- storage->next->prev = storage->prev;
670
- } else {
671
- list->tail = storage->prev;
1287
+ void RemoveUnknown(absl::string_view key) {
1288
+ unknown_.SetEnd(std::remove_if(unknown_.begin(), unknown_.end(),
1289
+ [key](const std::pair<Slice, Slice>& p) {
1290
+ return p.first.as_string_view() == key;
1291
+ }));
1292
+ }
1293
+
1294
+ absl::optional<absl::string_view> GetStringValueUnknown(
1295
+ absl::string_view key, std::string* backing) const {
1296
+ absl::optional<absl::string_view> out;
1297
+ for (const auto& p : unknown_) {
1298
+ if (p.first.as_string_view() == key) {
1299
+ if (!out.has_value()) {
1300
+ out = p.second.as_string_view();
1301
+ } else {
1302
+ out = *backing = absl::StrCat(*out, ",", p.second.as_string_view());
1303
+ }
1304
+ }
672
1305
  }
673
- list->count--;
674
- assert_valid_list(list);
1306
+ return out;
675
1307
  }
676
1308
 
677
1309
  // Table of known metadata types.
678
1310
  Table<Value<Traits>...> table_;
679
- /** Metadata elements in this batch */
680
- grpc_mdelem_list list_;
681
- grpc_metadata_batch_callouts idx_;
682
1311
  // Backing store for added metadata.
683
- ChunkedVector<grpc_linked_mdelem, 10> elem_storage_;
1312
+ ChunkedVector<std::pair<Slice, Slice>, 10> unknown_;
684
1313
  };
685
1314
 
686
- template <typename... Traits>
687
- void MetadataMap<Traits...>::AssertValidCallouts() {
688
- #ifndef NDEBUG
689
- for (grpc_linked_mdelem* l = list_.head; l != nullptr; l = l->next) {
690
- grpc_slice key_interned = grpc_slice_intern(GRPC_MDKEY(l->md));
691
- grpc_metadata_batch_callouts_index callout_idx =
692
- GRPC_BATCH_INDEX_OF(key_interned);
693
- if (callout_idx != GRPC_BATCH_CALLOUTS_COUNT) {
694
- GPR_ASSERT(idx_.array[callout_idx] == l);
695
- }
696
- grpc_slice_unref_internal(key_interned);
697
- }
698
- #endif
699
- }
700
-
701
- #ifndef NDEBUG
702
- template <typename... Traits>
703
- void MetadataMap<Traits...>::AssertOk() {
704
- assert_valid_list(&list_);
1315
+ // Ok/not-ok check for metadata maps that contain GrpcStatusMetadata, so that
1316
+ // they can be used as result types for TrySeq.
1317
+ template <typename Derived, typename... Args>
1318
+ inline bool IsStatusOk(const MetadataMap<Derived, Args...>& m) {
1319
+ return m.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN) ==
1320
+ GRPC_STATUS_OK;
705
1321
  }
706
- #endif /* NDEBUG */
707
1322
 
708
- template <typename... Traits>
709
- MetadataMap<Traits...>::MetadataMap(Arena* arena) : elem_storage_(arena) {
710
- memset(&list_, 0, sizeof(list_));
711
- memset(&idx_, 0, sizeof(idx_));
712
- }
1323
+ template <typename Derived, typename... Traits>
1324
+ MetadataMap<Derived, Traits...>::MetadataMap(Arena* arena) : unknown_(arena) {}
713
1325
 
714
- template <typename... Traits>
715
- MetadataMap<Traits...>::MetadataMap(MetadataMap&& other) noexcept
716
- : table_(std::move(other.table_)) {
717
- list_ = other.list_;
718
- idx_ = other.idx_;
719
- memset(&other.list_, 0, sizeof(list_));
720
- memset(&other.idx_, 0, sizeof(idx_));
721
- }
1326
+ template <typename Derived, typename... Traits>
1327
+ MetadataMap<Derived, Traits...>::MetadataMap(MetadataMap&& other) noexcept
1328
+ : table_(std::move(other.table_)), unknown_(std::move(other.unknown_)) {}
722
1329
 
723
- template <typename... Traits>
724
- MetadataMap<Traits...>& MetadataMap<Traits...>::operator=(
1330
+ // We never create MetadataMap directly, instead we create Derived, but we want
1331
+ // to be able to move it without redeclaring this.
1332
+ // NOLINTNEXTLINE(misc-unconventional-assign-operator)
1333
+ template <typename Derived, typename... Traits>
1334
+ Derived& MetadataMap<Derived, Traits...>::operator=(
725
1335
  MetadataMap&& other) noexcept {
726
- Clear();
727
1336
  table_ = std::move(other.table_);
728
- list_ = other.list_;
729
- idx_ = other.idx_;
730
- memset(&other.list_, 0, sizeof(list_));
731
- memset(&other.idx_, 0, sizeof(idx_));
732
- return *this;
1337
+ unknown_ = std::move(other.unknown_);
1338
+ return static_cast<Derived&>(*this);
733
1339
  }
734
1340
 
735
- template <typename... Traits>
736
- MetadataMap<Traits...>::~MetadataMap() {
737
- AssertValidCallouts();
738
- for (auto* l = list_.head; l; l = l->next) {
739
- GRPC_MDELEM_UNREF(l->md);
740
- }
741
- }
742
-
743
- template <typename... Traits>
744
- absl::optional<grpc_slice> MetadataMap<Traits...>::Remove(grpc_slice key) {
745
- for (auto* l = list_.head; l; l = l->next) {
746
- if (grpc_slice_eq(GRPC_MDKEY(l->md), key)) {
747
- auto out = grpc_slice_ref_internal(GRPC_MDVALUE(l->md));
748
- Remove(l);
749
- return out;
750
- }
751
- }
752
- return {};
753
- }
754
-
755
- template <typename... Traits>
756
- grpc_error_handle MetadataMap<Traits...>::LinkCallout(
757
- grpc_linked_mdelem* storage, grpc_metadata_batch_callouts_index idx) {
758
- AssertValidCallouts();
759
- GPR_DEBUG_ASSERT(idx >= 0 && idx < GRPC_BATCH_CALLOUTS_COUNT);
760
- if (GPR_LIKELY(idx_.array[idx] == nullptr)) {
761
- ++list_.default_count;
762
- idx_.array[idx] = storage;
763
- AssertValidCallouts();
764
- return GRPC_ERROR_NONE;
765
- }
766
- AssertValidCallouts();
767
- return error_with_md(storage->md);
768
- }
769
-
770
- template <typename... Traits>
771
- grpc_error_handle MetadataMap<Traits...>::MaybeLinkCallout(
772
- grpc_linked_mdelem* storage) {
773
- grpc_metadata_batch_callouts_index idx =
774
- GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
775
- if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
776
- return GRPC_ERROR_NONE;
777
- }
778
- return LinkCallout(storage, idx);
779
- }
780
-
781
- template <typename... Traits>
782
- void MetadataMap<Traits...>::MaybeUnlinkCallout(grpc_linked_mdelem* storage) {
783
- grpc_metadata_batch_callouts_index idx =
784
- GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
785
- if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
786
- return;
787
- }
788
- --list_.default_count;
789
- GPR_DEBUG_ASSERT(idx_.array[idx] != nullptr);
790
- idx_.array[idx] = nullptr;
791
- }
792
-
793
- template <typename... Traits>
794
- grpc_error_handle MetadataMap<Traits...>::AddHead(grpc_linked_mdelem* storage,
795
- grpc_mdelem elem_to_add) {
796
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
797
- storage->md = elem_to_add;
798
- return LinkHead(storage);
799
- }
800
-
801
- template <typename... Traits>
802
- grpc_error_handle MetadataMap<Traits...>::LinkHead(
803
- grpc_linked_mdelem* storage) {
804
- AssertValidCallouts();
805
- grpc_error_handle err = MaybeLinkCallout(storage);
806
- if (err != GRPC_ERROR_NONE) {
807
- AssertValidCallouts();
808
- return err;
809
- }
810
- link_head(&list_, storage);
811
- AssertValidCallouts();
812
- return GRPC_ERROR_NONE;
813
- }
814
-
815
- // TODO(arjunroy): Need to revisit this and see what guarantees exist between
816
- // C-core and the internal-metadata subsystem. E.g. can we ensure a particular
817
- // metadata is never added twice, even in the presence of user supplied data?
818
- template <typename... Traits>
819
- grpc_error_handle MetadataMap<Traits...>::LinkHead(
820
- grpc_linked_mdelem* storage, grpc_metadata_batch_callouts_index idx) {
821
- GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
822
- AssertValidCallouts();
823
- grpc_error_handle err = LinkCallout(storage, idx);
824
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
825
- AssertValidCallouts();
826
- return err;
827
- }
828
- link_head(&list_, storage);
829
- AssertValidCallouts();
830
- return GRPC_ERROR_NONE;
831
- }
832
-
833
- template <typename... Traits>
834
- grpc_error_handle MetadataMap<Traits...>::AddTail(grpc_linked_mdelem* storage,
835
- grpc_mdelem elem_to_add) {
836
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
837
- storage->md = elem_to_add;
838
- return LinkTail(storage);
839
- }
840
-
841
- template <typename... Traits>
842
- grpc_error_handle MetadataMap<Traits...>::LinkTail(
843
- grpc_linked_mdelem* storage) {
844
- AssertValidCallouts();
845
- grpc_error_handle err = MaybeLinkCallout(storage);
846
- if (err != GRPC_ERROR_NONE) {
847
- AssertValidCallouts();
848
- return err;
849
- }
850
- link_tail(&list_, storage);
851
- AssertValidCallouts();
852
- return GRPC_ERROR_NONE;
853
- }
854
-
855
- template <typename... Traits>
856
- grpc_error_handle MetadataMap<Traits...>::LinkTail(
857
- grpc_linked_mdelem* storage, grpc_metadata_batch_callouts_index idx) {
858
- GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
859
- AssertValidCallouts();
860
- grpc_error_handle err = LinkCallout(storage, idx);
861
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
862
- AssertValidCallouts();
863
- return err;
864
- }
865
- link_tail(&list_, storage);
866
- AssertValidCallouts();
867
- return GRPC_ERROR_NONE;
868
- }
1341
+ template <typename Derived, typename... Traits>
1342
+ MetadataMap<Derived, Traits...>::~MetadataMap() = default;
869
1343
 
870
- template <typename... Traits>
871
- void MetadataMap<Traits...>::Remove(grpc_linked_mdelem* storage) {
872
- AssertValidCallouts();
873
- MaybeUnlinkCallout(storage);
874
- unlink_storage(&list_, storage);
875
- GRPC_MDELEM_UNREF(storage->md);
876
- AssertValidCallouts();
1344
+ template <typename Derived, typename... Traits>
1345
+ void MetadataMap<Derived, Traits...>::Clear() {
1346
+ table_.ClearAll();
1347
+ unknown_.Clear();
877
1348
  }
878
1349
 
879
- template <typename... Traits>
880
- void MetadataMap<Traits...>::Remove(grpc_metadata_batch_callouts_index idx) {
881
- AssertValidCallouts();
882
- if (idx_.array[idx] == nullptr) return;
883
- --list_.default_count;
884
- unlink_storage(&list_, idx_.array[idx]);
885
- GRPC_MDELEM_UNREF(idx_.array[idx]->md);
886
- idx_.array[idx] = nullptr;
887
- AssertValidCallouts();
1350
+ template <typename Derived, typename... Traits>
1351
+ size_t MetadataMap<Derived, Traits...>::TransportSize() const {
1352
+ metadata_detail::TransportSizeEncoder enc;
1353
+ Encode(&enc);
1354
+ return enc.size();
888
1355
  }
889
1356
 
890
- template <typename... Traits>
891
- absl::optional<absl::string_view> MetadataMap<Traits...>::GetValue(
892
- absl::string_view target_key, std::string* concatenated_value) const {
893
- // Find all values for the specified key.
894
- absl::InlinedVector<absl::string_view, 1> values;
895
- for (grpc_linked_mdelem* md = list_.head; md != nullptr; md = md->next) {
896
- absl::string_view key = StringViewFromSlice(GRPC_MDKEY(md->md));
897
- absl::string_view value = StringViewFromSlice(GRPC_MDVALUE(md->md));
898
- if (target_key == key) values.push_back(value);
899
- }
900
- // If none found, no match.
901
- if (values.empty()) return absl::nullopt;
902
- // If exactly one found, return it as-is.
903
- if (values.size() == 1) return values.front();
904
- // If more than one found, concatenate the values, using
905
- // *concatenated_values as a temporary holding place for the
906
- // concatenated string.
907
- *concatenated_value = absl::StrJoin(values, ",");
908
- return *concatenated_value;
909
- }
910
-
911
- template <typename... Traits>
912
- grpc_error_handle MetadataMap<Traits...>::Substitute(
913
- grpc_linked_mdelem* storage, grpc_mdelem new_mdelem) {
914
- AssertValidCallouts();
915
- grpc_error_handle error = GRPC_ERROR_NONE;
916
- grpc_mdelem old_mdelem = storage->md;
917
- if (!grpc_slice_eq(GRPC_MDKEY(new_mdelem), GRPC_MDKEY(old_mdelem))) {
918
- MaybeUnlinkCallout(storage);
919
- storage->md = new_mdelem;
920
- error = MaybeLinkCallout(storage);
921
- if (error != GRPC_ERROR_NONE) {
922
- unlink_storage(&list_, storage);
923
- GRPC_MDELEM_UNREF(storage->md);
924
- }
925
- } else {
926
- storage->md = new_mdelem;
927
- }
928
- GRPC_MDELEM_UNREF(old_mdelem);
929
- AssertValidCallouts();
930
- return error;
931
- }
932
-
933
- template <typename... Traits>
934
- void MetadataMap<Traits...>::Clear() {
935
- // TODO(ctiller): implement this without deconstructing/reconstructing once
936
- // linked_mdelem is no longer a thing.
937
- auto* arena = elem_storage_.arena();
938
- this->~MetadataMap();
939
- new (this) MetadataMap(arena);
940
- }
941
-
942
- template <typename... Traits>
943
- size_t MetadataMap<Traits...>::TransportSize() const {
944
- size_t size = 0;
945
- for (grpc_linked_mdelem* elem = list_.head; elem != nullptr;
946
- elem = elem->next) {
947
- size += GRPC_MDELEM_LENGTH(elem->md);
948
- }
949
- return size;
950
- }
951
-
952
- template <typename... Traits>
953
- bool MetadataMap<Traits...>::ReplaceIfExists(grpc_slice key, grpc_slice value) {
954
- AssertValidCallouts();
955
- for (grpc_linked_mdelem* l = list_.head; l != nullptr; l = l->next) {
956
- if (grpc_slice_eq(GRPC_MDKEY(l->md), key)) {
957
- auto new_mdelem = grpc_mdelem_from_slices(key, value);
958
- GRPC_MDELEM_UNREF(l->md);
959
- l->md = new_mdelem;
960
- AssertValidCallouts();
961
- return true;
962
- }
963
- }
964
- AssertValidCallouts();
965
- return false;
1357
+ template <typename Derived, typename... Traits>
1358
+ Derived MetadataMap<Derived, Traits...>::Copy() const {
1359
+ Derived out(unknown_.arena());
1360
+ metadata_detail::CopySink<Derived> sink(&out);
1361
+ Encode(&sink);
1362
+ return out;
966
1363
  }
967
1364
 
968
1365
  } // namespace grpc_core
969
1366
 
970
- using grpc_metadata_batch = grpc_core::MetadataMap<
971
- grpc_core::GrpcTimeoutMetadata, grpc_core::TeMetadata,
972
- grpc_core::UserAgentMetadata, grpc_core::GrpcMessageMetadata,
973
- grpc_core::HostMetadata, grpc_core::XEndpointLoadMetricsBinMetadata,
1367
+ struct grpc_metadata_batch;
1368
+
1369
+ using grpc_metadata_batch_base = grpc_core::MetadataMap<
1370
+ grpc_metadata_batch,
1371
+ // Colon prefixed headers first
1372
+ grpc_core::HttpPathMetadata, grpc_core::HttpAuthorityMetadata,
1373
+ grpc_core::HttpMethodMetadata, grpc_core::HttpStatusMetadata,
1374
+ grpc_core::HttpSchemeMetadata,
1375
+ // Non-colon prefixed headers begin here
1376
+ grpc_core::ContentTypeMetadata, grpc_core::TeMetadata,
1377
+ grpc_core::GrpcEncodingMetadata, grpc_core::GrpcInternalEncodingRequest,
1378
+ grpc_core::GrpcAcceptEncodingMetadata, grpc_core::GrpcStatusMetadata,
1379
+ grpc_core::GrpcTimeoutMetadata, grpc_core::GrpcPreviousRpcAttemptsMetadata,
1380
+ grpc_core::GrpcRetryPushbackMsMetadata, grpc_core::UserAgentMetadata,
1381
+ grpc_core::GrpcMessageMetadata, grpc_core::HostMetadata,
1382
+ grpc_core::XEndpointLoadMetricsBinMetadata,
974
1383
  grpc_core::GrpcServerStatsBinMetadata, grpc_core::GrpcTraceBinMetadata,
975
- grpc_core::GrpcTagsBinMetadata>;
976
-
977
- inline void grpc_metadata_batch_clear(grpc_metadata_batch* batch) {
978
- batch->Clear();
979
- }
980
- inline bool grpc_metadata_batch_is_empty(grpc_metadata_batch* batch) {
981
- return batch->empty();
982
- }
983
-
984
- /* Returns the transport size of the batch. */
985
- inline size_t grpc_metadata_batch_size(grpc_metadata_batch* batch) {
986
- return batch->TransportSize();
987
- }
988
-
989
- /** Remove \a storage from the batch, unreffing the mdelem contained */
990
- inline void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
991
- grpc_linked_mdelem* storage) {
992
- batch->Remove(storage);
993
- }
994
- inline void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
995
- grpc_metadata_batch_callouts_index idx) {
996
- batch->Remove(idx);
997
- }
998
-
999
- /** Substitute a new mdelem for an old value */
1000
- inline grpc_error_handle grpc_metadata_batch_substitute(
1001
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1002
- grpc_mdelem new_mdelem) {
1003
- return batch->Substitute(storage, new_mdelem);
1004
- }
1005
-
1006
- void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
1007
- const grpc_slice& value);
1008
-
1009
- /** Returns metadata value(s) for the specified key.
1010
- If the key is not present in the batch, returns absl::nullopt.
1011
- If the key is present exactly once in the batch, returns a string_view of
1012
- that value.
1013
- If the key is present more than once in the batch, constructs a
1014
- comma-concatenated string of all values in concatenated_value and returns a
1015
- string_view of that string. */
1016
- inline absl::optional<absl::string_view> grpc_metadata_batch_get_value(
1017
- grpc_metadata_batch* batch, absl::string_view target_key,
1018
- std::string* concatenated_value) {
1019
- return batch->GetValue(target_key, concatenated_value);
1020
- }
1021
-
1022
- /** Add \a storage to the beginning of \a batch. storage->md is
1023
- assumed to be valid.
1024
- \a storage is owned by the caller and must survive for the
1025
- lifetime of batch. This usually means it should be around
1026
- for the lifetime of the call. */
1027
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_head(
1028
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage) {
1029
- return batch->LinkHead(storage);
1030
- }
1031
-
1032
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_head(
1033
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1034
- grpc_metadata_batch_callouts_index idx) {
1035
- return batch->LinkHead(storage, idx);
1036
- }
1037
-
1038
- /** Add \a storage to the end of \a batch. storage->md is
1039
- assumed to be valid.
1040
- \a storage is owned by the caller and must survive for the
1041
- lifetime of batch. This usually means it should be around
1042
- for the lifetime of the call. */
1043
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_tail(
1044
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage) {
1045
- return batch->LinkTail(storage);
1046
- }
1047
-
1048
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_tail(
1049
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1050
- grpc_metadata_batch_callouts_index idx) {
1051
- return batch->LinkTail(storage, idx);
1052
- }
1053
-
1054
- /** Add \a elem_to_add as the first element in \a batch, using
1055
- \a storage as backing storage for the linked list element.
1056
- \a storage is owned by the caller and must survive for the
1057
- lifetime of batch. This usually means it should be around
1058
- for the lifetime of the call.
1059
- Takes ownership of \a elem_to_add */
1060
- inline grpc_error_handle grpc_metadata_batch_add_head(
1061
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1062
- grpc_mdelem elem_to_add) {
1063
- return batch->AddHead(storage, elem_to_add);
1064
- }
1065
-
1066
- // TODO(arjunroy, roth): Remove redundant methods.
1067
- // add/link_head/tail are almost identical.
1068
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_head(
1069
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1070
- grpc_metadata_batch_callouts_index idx) {
1071
- return grpc_metadata_batch_link_head(batch, storage, idx);
1072
- }
1073
-
1074
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_head(
1075
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1076
- grpc_mdelem elem_to_add, grpc_metadata_batch_callouts_index idx) {
1077
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
1078
- storage->md = elem_to_add;
1079
- return grpc_metadata_batch_add_head(batch, storage, idx);
1080
- }
1081
-
1082
- /** Add \a elem_to_add as the last element in \a batch, using
1083
- \a storage as backing storage for the linked list element.
1084
- \a storage is owned by the caller and must survive for the
1085
- lifetime of batch. This usually means it should be around
1086
- for the lifetime of the call.
1087
- Takes ownership of \a elem_to_add */
1088
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_add_tail(
1089
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1090
- grpc_mdelem elem_to_add) {
1091
- return batch->AddTail(storage, elem_to_add);
1092
- }
1093
-
1094
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
1095
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1096
- grpc_metadata_batch_callouts_index idx) {
1097
- return grpc_metadata_batch_link_tail(batch, storage, idx);
1098
- }
1099
-
1100
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
1101
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1102
- grpc_mdelem elem_to_add, grpc_metadata_batch_callouts_index idx) {
1103
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
1104
- storage->md = elem_to_add;
1105
- return grpc_metadata_batch_add_tail(batch, storage, idx);
1106
- }
1107
-
1108
- typedef grpc_filtered_mdelem (*grpc_metadata_batch_filter_func)(
1109
- void* user_data, grpc_mdelem elem);
1110
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_filter(
1111
- grpc_metadata_batch* batch, grpc_metadata_batch_filter_func func,
1112
- void* user_data, const char* composite_error_string) {
1113
- return batch->Filter([=](grpc_mdelem elem) { return func(user_data, elem); },
1114
- composite_error_string);
1115
- }
1116
-
1117
- inline void grpc_metadata_batch_assert_ok(grpc_metadata_batch* batch) {
1118
- batch->AssertOk();
1119
- }
1120
-
1121
- /// Copies \a src to \a dst.
1122
- ///
1123
- /// For each mdelem in \a src, if the mdelem is of storage types
1124
- /// GRPC_MDELEM_STORAGE_INTERNED or GRPC_MDELEM_STORAGE_ALLOCATED,
1125
- /// refs the original mdelem for the copy. Otherwise, makes a new
1126
- /// mdelem that will hold its own refs to the key and value slices.
1127
- void grpc_metadata_batch_copy(const grpc_metadata_batch* src,
1128
- grpc_metadata_batch* dst);
1384
+ grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
1385
+ grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
1386
+ // Non-encodable things
1387
+ grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
1388
+ grpc_core::GrpcStatusContext>;
1389
+
1390
+ struct grpc_metadata_batch : public grpc_metadata_batch_base {
1391
+ using grpc_metadata_batch_base::grpc_metadata_batch_base;
1392
+ };
1129
1393
 
1130
1394
  #endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */