grpc 1.42.0 → 1.51.0

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

Potentially problematic release.


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

Files changed (2080) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +705 -451
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/endpoint_config.h +11 -5
  5. data/include/grpc/event_engine/event_engine.h +122 -44
  6. data/include/grpc/event_engine/internal/memory_allocator_impl.h +1 -31
  7. data/include/grpc/event_engine/memory_allocator.h +27 -26
  8. data/include/grpc/event_engine/memory_request.h +57 -0
  9. data/include/grpc/event_engine/port.h +1 -1
  10. data/include/grpc/event_engine/slice.h +286 -0
  11. data/include/grpc/event_engine/slice_buffer.h +135 -0
  12. data/include/grpc/grpc.h +43 -27
  13. data/include/grpc/grpc_posix.h +20 -19
  14. data/include/grpc/grpc_security.h +323 -195
  15. data/include/grpc/grpc_security_constants.h +1 -14
  16. data/include/grpc/impl/codegen/atm_gcc_atomic.h +19 -28
  17. data/include/grpc/impl/codegen/atm_gcc_sync.h +0 -2
  18. data/include/grpc/impl/codegen/atm_windows.h +0 -2
  19. data/include/grpc/impl/codegen/compression_types.h +2 -3
  20. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  21. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  22. data/include/grpc/impl/codegen/grpc_types.h +31 -30
  23. data/include/grpc/impl/codegen/port_platform.h +107 -47
  24. data/include/grpc/impl/codegen/slice.h +5 -2
  25. data/include/grpc/slice.h +0 -11
  26. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  27. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +315 -0
  28. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +142 -0
  29. data/src/core/ext/filters/channel_idle/idle_filter_state.cc +96 -0
  30. data/src/core/ext/filters/channel_idle/idle_filter_state.h +68 -0
  31. data/src/core/ext/filters/client_channel/backend_metric.cc +20 -16
  32. data/src/core/ext/filters/client_channel/backend_metric.h +19 -8
  33. data/src/core/ext/filters/client_channel/backup_poller.cc +23 -19
  34. data/src/core/ext/filters/client_channel/backup_poller.h +2 -4
  35. data/src/core/ext/filters/client_channel/channel_connectivity.cc +54 -30
  36. data/src/core/ext/filters/client_channel/client_channel.cc +684 -615
  37. data/src/core/ext/filters/client_channel/client_channel.h +103 -58
  38. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -6
  39. data/src/core/ext/filters/client_channel/client_channel_channelz.h +12 -2
  40. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -26
  41. data/src/core/ext/filters/client_channel/client_channel_factory.h +8 -8
  42. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -41
  43. data/src/core/ext/filters/client_channel/client_channel_service_config.cc +153 -0
  44. data/src/core/ext/filters/client_channel/client_channel_service_config.h +111 -0
  45. data/src/core/ext/filters/client_channel/config_selector.cc +1 -0
  46. data/src/core/ext/filters/client_channel/config_selector.h +21 -11
  47. data/src/core/ext/filters/client_channel/connector.h +13 -8
  48. data/src/core/ext/filters/client_channel/dynamic_filters.cc +36 -51
  49. data/src/core/ext/filters/client_channel/dynamic_filters.h +19 -10
  50. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +4 -22
  51. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +6 -15
  52. data/src/core/ext/filters/client_channel/health/health_check_client.cc +139 -583
  53. data/src/core/ext/filters/client_channel/health/health_check_client.h +26 -160
  54. data/src/core/ext/filters/client_channel/http_proxy.cc +96 -130
  55. data/src/core/ext/filters/client_channel/http_proxy.h +25 -1
  56. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +12 -8
  57. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +7 -5
  58. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +49 -0
  59. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +36 -15
  60. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +15 -9
  61. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +21 -19
  62. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  63. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +380 -313
  64. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
  65. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +15 -3
  66. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +6 -2
  67. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +2 -5
  68. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +8 -2
  69. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +26 -16
  70. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +10 -8
  71. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +415 -0
  72. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +57 -0
  73. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +1152 -0
  74. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +94 -0
  75. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +228 -207
  76. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +491 -452
  77. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +523 -391
  78. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +16 -6
  79. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +636 -626
  80. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +280 -254
  81. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +147 -134
  82. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +275 -223
  83. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +266 -249
  84. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.cc +42 -0
  85. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_attributes.h +64 -0
  86. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +288 -277
  87. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +213 -182
  88. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +589 -737
  89. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +364 -0
  90. data/src/core/ext/filters/client_channel/local_subchannel_pool.cc +4 -0
  91. data/src/core/ext/filters/client_channel/local_subchannel_pool.h +1 -0
  92. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +43 -33
  93. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +676 -334
  94. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +30 -13
  95. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +29 -24
  96. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -71
  97. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +358 -357
  98. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +55 -40
  99. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +3 -2
  100. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.cc +2 -0
  101. data/src/core/ext/filters/client_channel/resolver/dns/dns_resolver_selection.h +2 -1
  102. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +124 -255
  103. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +37 -49
  104. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +18 -3
  105. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +190 -102
  106. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +258 -0
  107. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +123 -0
  108. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +56 -61
  109. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +648 -503
  110. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  111. data/src/core/ext/filters/client_channel/retry_filter.cc +382 -294
  112. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  113. data/src/core/ext/filters/client_channel/retry_service_config.cc +198 -232
  114. data/src/core/ext/filters/client_channel/retry_service_config.h +41 -32
  115. data/src/core/ext/filters/client_channel/retry_throttle.cc +18 -39
  116. data/src/core/ext/filters/client_channel/retry_throttle.h +26 -13
  117. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +37 -19
  118. data/src/core/ext/filters/client_channel/subchannel.cc +272 -319
  119. data/src/core/ext/filters/client_channel/subchannel.h +100 -47
  120. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +38 -0
  121. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +17 -77
  122. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +20 -26
  123. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +470 -0
  124. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +222 -0
  125. data/src/core/ext/filters/deadline/deadline_filter.cc +48 -39
  126. data/src/core/ext/filters/deadline/deadline_filter.h +11 -4
  127. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +179 -403
  128. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +38 -6
  129. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.cc +118 -0
  130. data/src/core/ext/filters/fault_injection/fault_injection_service_config_parser.h +112 -0
  131. data/src/core/ext/filters/http/client/http_client_filter.cc +106 -551
  132. data/src/core/ext/filters/http/client/http_client_filter.h +35 -5
  133. data/src/core/ext/filters/http/client_authority_filter.cc +43 -112
  134. data/src/core/ext/filters/http/client_authority_filter.h +28 -6
  135. data/src/core/ext/filters/http/http_filters_plugin.cc +35 -28
  136. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +112 -333
  137. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  138. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +85 -161
  139. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  140. data/src/core/ext/filters/http/server/http_server_filter.cc +100 -476
  141. data/src/core/ext/filters/http/server/http_server_filter.h +37 -3
  142. data/src/core/ext/filters/message_size/message_size_filter.cc +130 -159
  143. data/src/core/ext/filters/message_size/message_size_filter.h +41 -17
  144. data/src/core/ext/filters/rbac/rbac_filter.cc +174 -0
  145. data/src/core/ext/filters/rbac/rbac_filter.h +84 -0
  146. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +819 -0
  147. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +86 -0
  148. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +62 -0
  149. data/src/core/ext/filters/server_config_selector/server_config_selector.h +85 -0
  150. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +160 -0
  151. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +33 -0
  152. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +268 -110
  153. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +9 -9
  154. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +387 -216
  155. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -5
  156. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
  157. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  158. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +2 -1
  159. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +1 -1
  160. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +791 -1179
  161. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +16 -5
  162. data/src/core/ext/transport/chttp2/transport/context_list.cc +6 -3
  163. data/src/core/ext/transport/chttp2/transport/context_list.h +6 -4
  164. data/src/core/ext/transport/chttp2/transport/decode_huff.cc +287 -0
  165. data/src/core/ext/transport/chttp2/transport/decode_huff.h +1018 -0
  166. data/src/core/ext/transport/chttp2/transport/flow_control.cc +297 -285
  167. data/src/core/ext/transport/chttp2/transport/flow_control.h +191 -293
  168. data/src/core/ext/transport/chttp2/transport/frame.h +0 -4
  169. data/src/core/ext/transport/chttp2/transport/frame_data.cc +66 -218
  170. data/src/core/ext/transport/chttp2/transport/frame_data.h +13 -36
  171. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +16 -13
  172. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +3 -1
  173. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -7
  174. data/src/core/ext/transport/chttp2/transport/frame_ping.h +3 -0
  175. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +21 -9
  176. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +3 -0
  177. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +27 -59
  178. data/src/core/ext/transport/chttp2/transport/frame_settings.h +4 -0
  179. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +15 -16
  180. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +3 -0
  181. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  182. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +381 -260
  183. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +106 -147
  184. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +5 -2
  185. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +12 -1
  186. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +157 -229
  187. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +8 -2
  188. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +143 -42
  189. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +50 -50
  190. data/src/core/ext/transport/chttp2/transport/http2_settings.h +0 -1
  191. data/src/core/ext/transport/chttp2/transport/internal.h +74 -163
  192. data/src/core/ext/transport/chttp2/transport/parsing.cc +170 -91
  193. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +11 -11
  194. data/src/core/ext/transport/chttp2/transport/stream_map.cc +1 -1
  195. data/src/core/ext/transport/chttp2/transport/stream_map.h +1 -0
  196. data/src/core/ext/transport/chttp2/transport/varint.cc +2 -3
  197. data/src/core/ext/transport/chttp2/transport/varint.h +13 -8
  198. data/src/core/ext/transport/chttp2/transport/writing.cc +150 -183
  199. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -5
  200. data/src/core/ext/transport/inproc/inproc_transport.cc +237 -323
  201. data/src/core/ext/transport/inproc/inproc_transport.h +4 -5
  202. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +117 -0
  203. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +502 -0
  204. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +121 -0
  205. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +569 -0
  206. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +60 -341
  207. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +280 -1355
  208. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  209. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  210. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  211. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +159 -0
  212. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +64 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +189 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +128 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  217. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +106 -0
  218. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +101 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +106 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +613 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +107 -0
  224. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +51 -0
  226. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +30 -4
  227. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +54 -17
  228. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +143 -116
  229. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +730 -385
  230. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -199
  231. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +1360 -663
  232. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +49 -28
  233. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +213 -90
  234. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +321 -271
  235. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1776 -826
  236. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +20 -7
  237. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +47 -23
  238. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +60 -27
  239. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +277 -98
  240. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +299 -0
  241. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1437 -0
  242. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +74 -53
  243. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +383 -189
  244. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -7
  245. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +50 -24
  246. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +215 -176
  247. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +1179 -583
  248. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +105 -45
  249. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +554 -166
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +19 -6
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +43 -23
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +16 -22
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +46 -100
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +159 -0
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +145 -117
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +821 -409
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +141 -92
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +773 -348
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +21 -8
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +62 -30
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +204 -125
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +1068 -398
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +17 -4
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -16
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +27 -13
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +92 -48
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +22 -9
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +80 -33
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +26 -13
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +98 -48
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +21 -8
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +51 -25
  274. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +51 -35
  275. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +207 -108
  276. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +74 -55
  277. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +374 -189
  278. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +70 -53
  279. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +378 -187
  280. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +19 -6
  281. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +39 -20
  282. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +122 -71
  283. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +660 -259
  284. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +104 -79
  285. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +589 -300
  286. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +31 -16
  287. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +109 -48
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -10
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +98 -39
  290. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  291. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +140 -0
  292. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -61
  293. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +446 -234
  294. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +86 -65
  295. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +443 -236
  296. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +139 -103
  297. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +649 -293
  298. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +45 -41
  299. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +255 -165
  300. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +706 -570
  301. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +4125 -1898
  302. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +38 -19
  303. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +161 -71
  304. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +241 -0
  305. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +1191 -0
  306. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  307. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +92 -0
  308. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  309. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +107 -0
  310. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +27 -13
  311. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +86 -45
  312. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  313. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +138 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +63 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +254 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +98 -0
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +221 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +33 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +43 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +226 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +150 -0
  328. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +17 -4
  329. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +39 -23
  330. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +45 -28
  331. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +208 -111
  332. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +51 -36
  333. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +273 -131
  334. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +71 -0
  335. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +237 -0
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +26 -13
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +91 -42
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +292 -224
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1679 -733
  340. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  341. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  342. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  343. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  344. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +9 -0
  345. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +6 -3
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +107 -60
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +607 -234
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +41 -26
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +169 -86
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +126 -83
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +651 -262
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +168 -0
  354. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +15 -2
  355. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +26 -14
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +206 -72
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +1095 -255
  358. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +31 -17
  359. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +116 -61
  360. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +74 -57
  361. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +368 -185
  362. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  363. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +116 -0
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +34 -18
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +140 -80
  366. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  367. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +230 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +28 -14
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +108 -56
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +21 -8
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +55 -30
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +20 -7
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +53 -26
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +19 -6
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +43 -23
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +35 -20
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +130 -68
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +31 -17
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +132 -64
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +26 -12
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +94 -52
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +37 -22
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +163 -82
  384. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +50 -31
  385. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +258 -144
  386. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +53 -36
  387. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +256 -130
  388. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  389. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +213 -0
  390. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +9 -0
  391. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +3 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  393. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +143 -0
  394. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +23 -9
  395. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +71 -35
  396. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +30 -15
  397. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +111 -51
  398. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  399. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  400. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  401. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  402. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +19 -6
  403. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +45 -18
  404. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  405. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +131 -0
  406. data/src/core/ext/upb-generated/google/api/annotations.upb.c +22 -0
  407. data/src/core/ext/upb-generated/google/api/annotations.upb.h +23 -0
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +154 -125
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +765 -381
  410. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +158 -126
  411. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +844 -401
  412. data/src/core/ext/upb-generated/google/api/http.upb.c +43 -28
  413. data/src/core/ext/upb-generated/google/api/http.upb.h +229 -114
  414. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  415. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +115 -0
  416. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +18 -5
  417. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +43 -21
  418. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +374 -282
  419. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2199 -1029
  420. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +18 -5
  421. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +41 -19
  422. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +15 -2
  423. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +26 -14
  424. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +47 -31
  425. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +190 -92
  426. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +18 -5
  427. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +41 -19
  428. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +57 -36
  429. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +277 -148
  430. data/src/core/ext/upb-generated/google/rpc/status.upb.c +21 -8
  431. data/src/core/ext/upb-generated/google/rpc/status.upb.h +57 -29
  432. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  433. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +335 -0
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +32 -18
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +108 -47
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +135 -107
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +726 -358
  438. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -12
  439. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +85 -40
  440. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +22 -8
  441. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +65 -34
  442. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +81 -61
  443. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +435 -237
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +34 -19
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +124 -62
  446. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +175 -0
  447. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +792 -0
  448. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +75 -13
  449. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +206 -56
  450. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +31 -5
  451. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +59 -17
  452. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +21 -0
  453. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +16 -0
  454. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +61 -19
  456. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +30 -4
  457. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +54 -17
  458. data/src/core/ext/upb-generated/validate/validate.upb.c +406 -310
  459. data/src/core/ext/upb-generated/validate/validate.upb.h +2822 -1164
  460. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +290 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +112 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +46 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +64 -17
  467. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +191 -67
  468. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  469. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +103 -0
  470. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +17 -4
  471. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -18
  472. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +30 -16
  473. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +107 -54
  474. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +25 -11
  475. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +58 -29
  476. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  477. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +107 -0
  478. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +22 -9
  479. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +60 -29
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +33 -19
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +139 -69
  482. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +22 -9
  483. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +63 -29
  484. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +36 -21
  485. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +106 -45
  486. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +47 -0
  487. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +113 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +207 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +914 -0
  490. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  491. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +151 -0
  492. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  493. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +226 -0
  494. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +20 -7
  495. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +47 -23
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +75 -327
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +16 -101
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +56 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  513. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  514. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  515. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  516. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  517. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  518. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +10 -8
  519. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  520. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  521. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  522. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +120 -150
  523. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  524. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +253 -280
  525. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +55 -55
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +60 -62
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  528. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +387 -424
  529. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +76 -76
  530. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  531. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  532. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +25 -23
  533. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  535. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +203 -246
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +73 -73
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +140 -116
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +26 -16
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +24 -43
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +4 -9
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +179 -187
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +30 -25
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +254 -254
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +53 -43
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +16 -20
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +7 -7
  562. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  563. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  564. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +26 -28
  565. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  566. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +15 -18
  567. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +4 -4
  568. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  569. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  570. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +21 -33
  571. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +19 -19
  572. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  573. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +180 -165
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +24 -19
  578. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +155 -166
  579. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  580. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +21 -23
  581. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +4 -4
  582. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +46 -42
  583. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  584. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  587. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  588. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +19 -37
  589. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +28 -28
  590. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +194 -0
  591. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +75 -0
  592. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +82 -85
  593. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +7 -12
  594. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +874 -917
  595. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +170 -160
  596. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  597. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  598. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +199 -0
  599. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +90 -0
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  615. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  616. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +61 -0
  617. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  618. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  619. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  620. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  621. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +20 -26
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +80 -0
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +19 -20
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +405 -410
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +63 -58
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  636. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +174 -157
  637. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +24 -19
  638. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  639. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  640. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +219 -216
  641. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +24 -19
  642. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  643. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  644. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  645. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  646. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +162 -107
  647. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +57 -22
  648. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  649. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  650. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +125 -135
  651. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +16 -16
  652. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  653. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  654. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +15 -23
  655. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +13 -13
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +17 -21
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  666. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +38 -43
  667. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  668. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  669. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  670. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  671. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  672. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  673. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  674. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  675. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  676. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  677. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  686. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  687. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  688. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  689. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  690. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  691. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  692. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  693. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  694. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  695. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  697. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  698. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  699. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  700. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  701. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  702. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  703. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  704. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  705. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  706. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +96 -151
  709. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  710. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  711. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  713. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  714. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  715. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  716. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  717. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  718. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  719. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  720. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +6 -11
  721. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  722. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  723. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  724. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +99 -0
  725. data/src/core/ext/upbdefs-generated/src/proto/grpc/lookup/v1/rls_config.upbdefs.h +75 -0
  726. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +6 -15
  727. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  728. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +7 -12
  729. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  730. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -6
  731. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  732. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +6 -11
  733. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  734. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +6 -11
  735. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  736. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +8 -57
  737. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  738. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  739. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  740. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  741. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  742. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  743. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  744. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +6 -17
  745. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +13 -13
  746. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  747. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +7 -12
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  750. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +9 -16
  751. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  752. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +6 -13
  753. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  754. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  755. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  756. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +8 -13
  757. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  758. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +8 -15
  759. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  760. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +8 -13
  761. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  762. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  763. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  764. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  765. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  766. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  767. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  768. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +7 -12
  769. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +4 -4
  770. data/src/core/ext/xds/certificate_provider_store.cc +75 -3
  771. data/src/core/ext/xds/certificate_provider_store.h +28 -2
  772. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +20 -14
  773. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +11 -3
  774. data/src/core/ext/xds/upb_utils.h +45 -0
  775. data/src/core/ext/xds/xds_api.cc +329 -3648
  776. data/src/core/ext/xds/xds_api.h +78 -630
  777. data/src/core/ext/xds/xds_bootstrap.cc +10 -443
  778. data/src/core/ext/xds/xds_bootstrap.h +44 -81
  779. data/src/core/ext/xds/xds_bootstrap_grpc.cc +361 -0
  780. data/src/core/ext/xds/xds_bootstrap_grpc.h +184 -0
  781. data/src/core/ext/xds/xds_certificate_provider.cc +36 -25
  782. data/src/core/ext/xds/xds_certificate_provider.h +35 -3
  783. data/src/core/ext/xds/xds_channel_stack_modifier.cc +27 -21
  784. data/src/core/ext/xds/xds_channel_stack_modifier.h +17 -4
  785. data/src/core/ext/xds/xds_client.cc +1278 -2037
  786. data/src/core/ext/xds/xds_client.h +158 -197
  787. data/src/core/ext/xds/xds_client_grpc.cc +210 -0
  788. data/src/core/ext/xds/xds_client_grpc.h +79 -0
  789. data/src/core/ext/xds/xds_client_stats.cc +18 -19
  790. data/src/core/ext/xds/xds_client_stats.h +9 -7
  791. data/src/core/ext/xds/xds_cluster.cc +659 -0
  792. data/src/core/ext/xds/xds_cluster.h +116 -0
  793. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +152 -0
  794. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +92 -0
  795. data/src/core/ext/xds/xds_common_types.cc +501 -0
  796. data/src/core/ext/xds/xds_common_types.h +108 -0
  797. data/src/core/ext/xds/xds_endpoint.cc +468 -0
  798. data/src/core/ext/xds/xds_endpoint.h +139 -0
  799. data/src/core/ext/xds/xds_http_fault_filter.cc +67 -59
  800. data/src/core/ext/xds/xds_http_fault_filter.h +18 -24
  801. data/src/core/ext/xds/xds_http_filters.cc +66 -66
  802. data/src/core/ext/xds/xds_http_filters.h +72 -24
  803. data/src/core/ext/xds/xds_http_rbac_filter.cc +505 -0
  804. data/src/core/ext/xds/xds_http_rbac_filter.h +58 -0
  805. data/src/core/ext/xds/xds_lb_policy_registry.cc +243 -0
  806. data/src/core/ext/xds/xds_lb_policy_registry.h +71 -0
  807. data/src/core/ext/xds/xds_listener.cc +1144 -0
  808. data/src/core/ext/xds/xds_listener.h +224 -0
  809. data/src/core/ext/xds/xds_resource_type.h +104 -0
  810. data/src/core/ext/xds/xds_resource_type_impl.h +86 -0
  811. data/src/core/ext/xds/xds_route_config.cc +1166 -0
  812. data/src/core/ext/xds/xds_route_config.h +241 -0
  813. data/src/core/ext/xds/xds_routing.cc +264 -0
  814. data/src/core/ext/xds/xds_routing.h +106 -0
  815. data/src/core/ext/xds/xds_server_config_fetcher.cc +1155 -324
  816. data/src/core/ext/xds/xds_transport.h +86 -0
  817. data/src/core/ext/xds/xds_transport_grpc.cc +356 -0
  818. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  819. data/src/core/lib/address_utils/parse_address.cc +36 -16
  820. data/src/core/lib/address_utils/parse_address.h +11 -2
  821. data/src/core/lib/address_utils/sockaddr_utils.cc +82 -51
  822. data/src/core/lib/address_utils/sockaddr_utils.h +9 -19
  823. data/src/core/lib/avl/avl.h +476 -88
  824. data/src/core/lib/backoff/backoff.cc +9 -40
  825. data/src/core/lib/backoff/backoff.h +12 -12
  826. data/src/core/lib/channel/call_finalization.h +88 -0
  827. data/src/core/lib/channel/call_tracer.h +16 -7
  828. data/src/core/lib/channel/channel_args.cc +274 -48
  829. data/src/core/lib/channel/channel_args.h +413 -12
  830. data/src/core/lib/channel/channel_args_preconditioning.cc +43 -0
  831. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  832. data/src/core/lib/channel/channel_fwd.h +26 -0
  833. data/src/core/lib/channel/channel_stack.cc +64 -17
  834. data/src/core/lib/channel/channel_stack.h +96 -14
  835. data/src/core/lib/channel/channel_stack_builder.cc +18 -280
  836. data/src/core/lib/channel/channel_stack_builder.h +112 -150
  837. data/src/core/lib/channel/channel_stack_builder_impl.cc +113 -0
  838. data/src/core/lib/channel/channel_stack_builder_impl.h +48 -0
  839. data/src/core/lib/channel/channel_trace.cc +12 -22
  840. data/src/core/lib/channel/channel_trace.h +6 -3
  841. data/src/core/lib/channel/channelz.cc +36 -49
  842. data/src/core/lib/channel/channelz.h +24 -7
  843. data/src/core/lib/channel/channelz_registry.cc +11 -19
  844. data/src/core/lib/channel/channelz_registry.h +10 -9
  845. data/src/core/lib/channel/connected_channel.cc +704 -48
  846. data/src/core/lib/channel/connected_channel.h +3 -4
  847. data/src/core/lib/channel/context.h +11 -0
  848. data/src/core/lib/channel/promise_based_filter.cc +2126 -0
  849. data/src/core/lib/channel/promise_based_filter.h +848 -0
  850. data/src/core/lib/channel/status_util.cc +29 -0
  851. data/src/core/lib/channel/status_util.h +9 -2
  852. data/src/core/lib/compression/compression.cc +26 -113
  853. data/src/core/lib/compression/compression_internal.cc +170 -204
  854. data/src/core/lib/compression/compression_internal.h +68 -72
  855. data/src/core/lib/compression/message_compress.cc +18 -16
  856. data/src/core/lib/compression/message_compress.h +4 -5
  857. data/src/core/lib/config/core_configuration.cc +18 -3
  858. data/src/core/lib/config/core_configuration.h +133 -36
  859. data/src/core/lib/debug/event_log.cc +88 -0
  860. data/src/core/lib/debug/event_log.h +81 -0
  861. data/src/core/lib/debug/histogram_view.cc +69 -0
  862. data/src/core/lib/debug/histogram_view.h +37 -0
  863. data/src/core/lib/debug/stats.cc +31 -135
  864. data/src/core/lib/debug/stats.h +30 -37
  865. data/src/core/lib/debug/stats_data.cc +290 -638
  866. data/src/core/lib/debug/stats_data.h +263 -527
  867. data/src/core/lib/debug/trace.cc +0 -2
  868. data/src/core/lib/debug/trace.h +15 -14
  869. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +40 -0
  870. data/src/core/lib/event_engine/channel_args_endpoint_config.h +49 -0
  871. data/src/core/lib/event_engine/common_closures.h +71 -0
  872. data/src/core/lib/event_engine/default_event_engine.cc +94 -0
  873. data/src/core/lib/event_engine/default_event_engine.h +49 -0
  874. data/src/core/lib/event_engine/default_event_engine_factory.cc +48 -0
  875. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  876. data/src/core/lib/event_engine/executor/executor.h +38 -0
  877. data/src/core/lib/event_engine/forkable.cc +101 -0
  878. data/src/core/lib/event_engine/forkable.h +61 -0
  879. data/src/core/lib/event_engine/handle_containers.h +67 -0
  880. data/src/core/lib/event_engine/memory_allocator.cc +74 -0
  881. data/src/core/lib/event_engine/poller.h +62 -0
  882. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +618 -0
  883. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +129 -0
  884. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +901 -0
  885. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +97 -0
  886. data/src/core/lib/event_engine/posix_engine/event_poller.h +111 -0
  887. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +74 -0
  888. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +33 -0
  889. data/src/core/lib/event_engine/posix_engine/internal_errqueue.cc +77 -0
  890. data/src/core/lib/event_engine/posix_engine/internal_errqueue.h +179 -0
  891. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +267 -0
  892. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +73 -0
  893. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1270 -0
  894. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +682 -0
  895. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +577 -0
  896. data/src/core/lib/event_engine/posix_engine/posix_engine.h +245 -0
  897. data/src/core/lib/event_engine/posix_engine/posix_engine_closure.h +80 -0
  898. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.cc +1081 -0
  899. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +361 -0
  900. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  901. data/src/core/lib/event_engine/posix_engine/timer.h +194 -0
  902. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  903. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  904. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +174 -0
  905. data/src/core/lib/event_engine/posix_engine/timer_manager.h +114 -0
  906. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +301 -0
  907. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +179 -0
  908. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.cc +126 -0
  909. data/src/core/lib/event_engine/posix_engine/wakeup_fd_eventfd.h +45 -0
  910. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.cc +151 -0
  911. data/src/core/lib/event_engine/posix_engine/wakeup_fd_pipe.h +45 -0
  912. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix.h +76 -0
  913. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.cc +67 -0
  914. data/src/core/lib/event_engine/posix_engine/wakeup_fd_posix_default.h +37 -0
  915. data/src/core/lib/event_engine/resolved_address.cc +41 -0
  916. data/src/core/lib/event_engine/slice.cc +103 -0
  917. data/src/core/lib/event_engine/slice_buffer.cc +50 -0
  918. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  919. data/src/core/lib/event_engine/thread_pool.cc +276 -0
  920. data/src/core/lib/event_engine/thread_pool.h +137 -0
  921. data/src/core/lib/event_engine/time_util.cc +30 -0
  922. data/src/core/lib/event_engine/time_util.h +32 -0
  923. data/src/core/lib/event_engine/trace.cc +18 -0
  924. data/src/core/lib/event_engine/trace.h +30 -0
  925. data/src/core/lib/event_engine/utils.cc +44 -0
  926. data/src/core/lib/event_engine/utils.h +36 -0
  927. data/src/core/lib/event_engine/windows/iocp.cc +155 -0
  928. data/src/core/lib/event_engine/windows/iocp.h +69 -0
  929. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  930. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  931. data/src/core/lib/event_engine/windows/windows_engine.cc +165 -0
  932. data/src/core/lib/event_engine/windows/windows_engine.h +124 -0
  933. data/src/core/lib/experiments/config.cc +146 -0
  934. data/src/core/lib/experiments/config.h +43 -0
  935. data/src/core/lib/experiments/experiments.cc +86 -0
  936. data/src/core/lib/experiments/experiments.h +63 -0
  937. data/src/core/lib/gpr/alloc.cc +1 -9
  938. data/src/core/lib/gpr/cpu_linux.cc +6 -2
  939. data/src/core/lib/gpr/log.cc +5 -0
  940. data/src/core/lib/gpr/log_linux.cc +3 -4
  941. data/src/core/lib/gpr/log_windows.cc +0 -1
  942. data/src/core/lib/gpr/string.h +1 -1
  943. data/src/core/lib/gpr/string_util_windows.cc +3 -30
  944. data/src/core/lib/gpr/sync_abseil.cc +0 -14
  945. data/src/core/lib/gpr/sync_posix.cc +1 -14
  946. data/src/core/lib/gpr/time.cc +13 -10
  947. data/src/core/lib/gpr/time_posix.cc +6 -15
  948. data/src/core/lib/gpr/time_precise.h +1 -1
  949. data/src/core/lib/gpr/time_windows.cc +10 -7
  950. data/src/core/lib/gpr/tmpfile_posix.cc +3 -2
  951. data/src/core/lib/gpr/tmpfile_windows.cc +5 -7
  952. data/src/core/lib/gpr/useful.h +58 -0
  953. data/src/core/lib/gprpp/bitset.h +27 -14
  954. data/src/core/lib/gprpp/chunked_vector.h +49 -3
  955. data/src/core/lib/gprpp/construct_destruct.h +1 -0
  956. data/src/core/lib/gprpp/cpp_impl_of.h +49 -0
  957. data/src/core/lib/gprpp/debug_location.h +41 -7
  958. data/src/core/lib/gprpp/dual_ref_counted.h +1 -4
  959. data/src/core/lib/gprpp/env.h +53 -0
  960. data/src/core/lib/gprpp/env_linux.cc +80 -0
  961. data/src/core/lib/gprpp/env_posix.cc +47 -0
  962. data/src/core/lib/gprpp/env_windows.cc +56 -0
  963. data/src/core/lib/gprpp/examine_stack.h +0 -1
  964. data/src/core/lib/gprpp/fork.cc +17 -28
  965. data/src/core/lib/gprpp/fork.h +0 -8
  966. data/src/core/lib/gprpp/global_config.h +2 -4
  967. data/src/core/lib/gprpp/global_config_env.cc +16 -14
  968. data/src/core/lib/gprpp/global_config_env.h +5 -3
  969. data/src/core/lib/gprpp/global_config_generic.h +0 -4
  970. data/src/core/lib/gprpp/host_port.cc +2 -0
  971. data/src/core/lib/gprpp/load_file.cc +75 -0
  972. data/src/core/lib/gprpp/load_file.h +33 -0
  973. data/src/core/lib/gprpp/manual_constructor.h +0 -70
  974. data/src/core/lib/gprpp/match.h +2 -0
  975. data/src/core/lib/gprpp/memory.h +1 -5
  976. data/src/core/lib/gprpp/no_destruct.h +94 -0
  977. data/src/core/lib/gprpp/notification.h +67 -0
  978. data/src/core/lib/gprpp/orphanable.h +2 -5
  979. data/src/core/lib/gprpp/packed_table.h +40 -0
  980. data/src/core/lib/gprpp/per_cpu.h +46 -0
  981. data/src/core/lib/gprpp/ref_counted.h +4 -4
  982. data/src/core/lib/gprpp/ref_counted_ptr.h +23 -39
  983. data/src/core/lib/gprpp/single_set_ptr.h +87 -0
  984. data/src/core/lib/gprpp/sorted_pack.h +98 -0
  985. data/src/core/lib/gprpp/stat.h +0 -2
  986. data/src/core/lib/gprpp/stat_posix.cc +10 -4
  987. data/src/core/lib/gprpp/stat_windows.cc +3 -2
  988. data/src/core/lib/gprpp/status_helper.cc +75 -48
  989. data/src/core/lib/gprpp/status_helper.h +16 -21
  990. data/src/core/lib/gprpp/strerror.cc +41 -0
  991. data/src/core/lib/gprpp/strerror.h +29 -0
  992. data/src/core/lib/gprpp/sync.h +3 -1
  993. data/src/core/lib/gprpp/table.h +42 -2
  994. data/src/core/lib/gprpp/tchar.cc +49 -0
  995. data/src/core/lib/gprpp/tchar.h +33 -0
  996. data/src/core/lib/gprpp/thd.h +2 -5
  997. data/src/core/lib/gprpp/thd_posix.cc +4 -2
  998. data/src/core/lib/gprpp/thd_windows.cc +3 -2
  999. data/src/core/lib/gprpp/time.cc +234 -0
  1000. data/src/core/lib/gprpp/time.h +367 -0
  1001. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  1002. data/src/core/lib/gprpp/time_averaged_stats.h +79 -0
  1003. data/src/core/lib/gprpp/time_util.cc +4 -0
  1004. data/src/core/lib/gprpp/time_util.h +1 -1
  1005. data/src/core/lib/gprpp/unique_type_name.h +104 -0
  1006. data/src/core/lib/gprpp/validation_errors.cc +61 -0
  1007. data/src/core/lib/gprpp/validation_errors.h +127 -0
  1008. data/src/core/lib/gprpp/work_serializer.cc +247 -0
  1009. data/src/core/lib/gprpp/work_serializer.h +86 -0
  1010. data/src/core/lib/handshaker/proxy_mapper.h +53 -0
  1011. data/src/core/lib/handshaker/proxy_mapper_registry.cc +71 -0
  1012. data/src/core/lib/handshaker/proxy_mapper_registry.h +75 -0
  1013. data/src/core/lib/http/format_request.cc +62 -29
  1014. data/src/core/lib/http/format_request.h +10 -7
  1015. data/src/core/lib/http/httpcli.cc +313 -244
  1016. data/src/core/lib/http/httpcli.h +234 -90
  1017. data/src/core/lib/http/httpcli_security_connector.cc +84 -86
  1018. data/src/core/lib/http/httpcli_ssl_credentials.h +39 -0
  1019. data/src/core/lib/http/parser.cc +124 -65
  1020. data/src/core/lib/http/parser.h +18 -2
  1021. data/src/core/lib/iomgr/buffer_list.cc +110 -121
  1022. data/src/core/lib/iomgr/buffer_list.h +68 -52
  1023. data/src/core/lib/iomgr/call_combiner.cc +17 -40
  1024. data/src/core/lib/iomgr/call_combiner.h +3 -4
  1025. data/src/core/lib/iomgr/cfstream_handle.cc +13 -16
  1026. data/src/core/lib/iomgr/closure.h +68 -14
  1027. data/src/core/lib/iomgr/combiner.cc +11 -9
  1028. data/src/core/lib/iomgr/endpoint.cc +4 -4
  1029. data/src/core/lib/iomgr/endpoint.h +7 -6
  1030. data/src/core/lib/iomgr/endpoint_cfstream.cc +40 -53
  1031. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  1032. data/src/core/lib/iomgr/endpoint_pair_posix.cc +15 -11
  1033. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  1034. data/src/core/lib/iomgr/error.cc +30 -813
  1035. data/src/core/lib/iomgr/error.h +22 -295
  1036. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  1037. data/src/core/lib/iomgr/ev_apple.cc +10 -9
  1038. data/src/core/lib/iomgr/ev_epoll1_linux.cc +88 -84
  1039. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  1040. data/src/core/lib/iomgr/ev_poll_posix.cc +123 -109
  1041. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  1042. data/src/core/lib/iomgr/ev_posix.cc +58 -100
  1043. data/src/core/lib/iomgr/ev_posix.h +6 -4
  1044. data/src/core/lib/iomgr/exec_ctx.cc +14 -109
  1045. data/src/core/lib/iomgr/exec_ctx.h +24 -66
  1046. data/src/core/lib/iomgr/executor.cc +16 -21
  1047. data/src/core/lib/iomgr/executor.h +1 -4
  1048. data/src/core/lib/iomgr/fork_posix.cc +1 -0
  1049. data/src/core/lib/iomgr/internal_errqueue.cc +40 -47
  1050. data/src/core/lib/iomgr/internal_errqueue.h +1 -6
  1051. data/src/core/lib/iomgr/iocp_windows.cc +10 -10
  1052. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  1053. data/src/core/lib/iomgr/iomgr.cc +6 -2
  1054. data/src/core/lib/iomgr/iomgr_fwd.h +26 -0
  1055. data/src/core/lib/iomgr/iomgr_posix.cc +4 -3
  1056. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +4 -2
  1057. data/src/core/lib/iomgr/iomgr_windows.cc +3 -2
  1058. data/src/core/lib/iomgr/load_file.cc +5 -9
  1059. data/src/core/lib/iomgr/lockfree_event.cc +10 -27
  1060. data/src/core/lib/iomgr/polling_entity.h +6 -0
  1061. data/src/core/lib/iomgr/pollset.cc +1 -1
  1062. data/src/core/lib/iomgr/pollset.h +5 -5
  1063. data/src/core/lib/iomgr/pollset_set.h +1 -3
  1064. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  1065. data/src/core/lib/iomgr/port.h +29 -12
  1066. data/src/core/lib/iomgr/python_util.h +2 -2
  1067. data/src/core/lib/iomgr/resolve_address.cc +16 -22
  1068. data/src/core/lib/iomgr/resolve_address.h +79 -46
  1069. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  1070. data/src/core/lib/iomgr/resolve_address_posix.cc +112 -78
  1071. data/src/core/lib/iomgr/resolve_address_posix.h +63 -0
  1072. data/src/core/lib/iomgr/resolve_address_windows.cc +125 -81
  1073. data/src/core/lib/iomgr/resolve_address_windows.h +63 -0
  1074. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1075. data/src/core/lib/iomgr/sockaddr.h +2 -3
  1076. data/src/core/lib/iomgr/sockaddr_posix.h +2 -0
  1077. data/src/core/lib/iomgr/sockaddr_utils_posix.cc +63 -0
  1078. data/src/core/lib/iomgr/sockaddr_windows.h +2 -0
  1079. data/src/core/lib/iomgr/socket_utils_common_posix.cc +44 -81
  1080. data/src/core/lib/iomgr/socket_utils_posix.cc +84 -1
  1081. data/src/core/lib/iomgr/socket_utils_posix.h +98 -6
  1082. data/src/core/lib/iomgr/socket_windows.cc +2 -2
  1083. data/src/core/lib/iomgr/socket_windows.h +0 -2
  1084. data/src/core/lib/iomgr/tcp_client.cc +11 -9
  1085. data/src/core/lib/iomgr/tcp_client.h +25 -15
  1086. data/src/core/lib/iomgr/tcp_client_cfstream.cc +28 -26
  1087. data/src/core/lib/iomgr/tcp_client_posix.cc +194 -85
  1088. data/src/core/lib/iomgr/tcp_client_posix.h +14 -12
  1089. data/src/core/lib/iomgr/tcp_client_windows.cc +33 -35
  1090. data/src/core/lib/iomgr/tcp_posix.cc +465 -254
  1091. data/src/core/lib/iomgr/tcp_posix.h +4 -4
  1092. data/src/core/lib/iomgr/tcp_server.cc +3 -4
  1093. data/src/core/lib/iomgr/tcp_server.h +5 -4
  1094. data/src/core/lib/iomgr/tcp_server_posix.cc +109 -101
  1095. data/src/core/lib/iomgr/tcp_server_utils_posix.h +21 -20
  1096. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +50 -49
  1097. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +19 -16
  1098. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +1 -1
  1099. data/src/core/lib/iomgr/tcp_server_windows.cc +45 -48
  1100. data/src/core/lib/iomgr/tcp_windows.cc +43 -46
  1101. data/src/core/lib/iomgr/tcp_windows.h +1 -3
  1102. data/src/core/lib/iomgr/timer.cc +2 -2
  1103. data/src/core/lib/iomgr/timer.h +18 -13
  1104. data/src/core/lib/iomgr/timer_generic.cc +108 -97
  1105. data/src/core/lib/iomgr/timer_manager.cc +14 -14
  1106. data/src/core/lib/iomgr/unix_sockets_posix.cc +20 -34
  1107. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  1108. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  1109. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +4 -5
  1110. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +10 -8
  1111. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  1112. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  1113. data/src/core/lib/json/json.h +20 -24
  1114. data/src/core/lib/json/json_args.h +34 -0
  1115. data/src/core/lib/json/json_channel_args.h +42 -0
  1116. data/src/core/lib/json/json_object_loader.cc +207 -0
  1117. data/src/core/lib/json/json_object_loader.h +620 -0
  1118. data/src/core/lib/json/json_reader.cc +155 -75
  1119. data/src/core/lib/json/json_util.cc +17 -37
  1120. data/src/core/lib/json/json_util.h +18 -9
  1121. data/src/core/lib/json/json_writer.cc +6 -1
  1122. data/src/core/lib/load_balancing/lb_policy.cc +93 -0
  1123. data/src/core/lib/load_balancing/lb_policy.h +439 -0
  1124. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  1125. data/src/core/lib/load_balancing/lb_policy_registry.cc +141 -0
  1126. data/src/core/lib/load_balancing/lb_policy_registry.h +82 -0
  1127. data/src/core/lib/load_balancing/subchannel_interface.h +133 -0
  1128. data/src/core/lib/matchers/matchers.cc +10 -8
  1129. data/src/core/lib/matchers/matchers.h +2 -0
  1130. data/src/core/lib/promise/activity.cc +134 -0
  1131. data/src/core/lib/promise/activity.h +604 -0
  1132. data/src/core/lib/promise/arena_promise.h +230 -0
  1133. data/src/core/lib/promise/context.h +92 -0
  1134. data/src/core/lib/promise/detail/basic_seq.h +497 -0
  1135. data/src/core/lib/promise/detail/promise_factory.h +235 -0
  1136. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1137. data/src/core/lib/promise/detail/status.h +78 -0
  1138. data/src/core/lib/promise/detail/switch.h +1455 -0
  1139. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +50 -0
  1140. data/src/core/lib/promise/for_each.h +129 -0
  1141. data/src/core/lib/promise/intra_activity_waiter.h +49 -0
  1142. data/src/core/lib/promise/latch.h +103 -0
  1143. data/src/core/lib/promise/loop.h +138 -0
  1144. data/src/core/lib/promise/map.h +87 -0
  1145. data/src/core/lib/promise/map_pipe.h +87 -0
  1146. data/src/core/lib/promise/pipe.cc +19 -0
  1147. data/src/core/lib/promise/pipe.h +505 -0
  1148. data/src/core/lib/promise/poll.h +79 -0
  1149. data/src/core/lib/promise/promise.h +96 -0
  1150. data/src/core/lib/promise/race.h +83 -0
  1151. data/src/core/lib/promise/seq.h +106 -0
  1152. data/src/core/lib/promise/sleep.cc +90 -0
  1153. data/src/core/lib/promise/sleep.h +84 -0
  1154. data/src/core/lib/promise/try_concurrently.h +341 -0
  1155. data/src/core/lib/promise/try_seq.h +174 -0
  1156. data/src/core/lib/resolver/resolver.cc +37 -0
  1157. data/src/core/lib/resolver/resolver.h +138 -0
  1158. data/src/core/lib/resolver/resolver_factory.h +77 -0
  1159. data/src/core/lib/resolver/resolver_registry.cc +149 -0
  1160. data/src/core/lib/resolver/resolver_registry.h +123 -0
  1161. data/src/core/lib/resolver/server_address.cc +181 -0
  1162. data/src/core/lib/resolver/server_address.h +145 -0
  1163. data/src/core/lib/resource_quota/api.cc +104 -0
  1164. data/src/core/lib/resource_quota/api.h +49 -0
  1165. data/src/core/lib/resource_quota/arena.cc +138 -0
  1166. data/src/core/lib/resource_quota/arena.h +252 -0
  1167. data/src/core/lib/resource_quota/memory_quota.cc +603 -0
  1168. data/src/core/lib/resource_quota/memory_quota.h +530 -0
  1169. data/src/core/lib/resource_quota/periodic_update.cc +78 -0
  1170. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  1171. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1172. data/src/core/lib/resource_quota/resource_quota.h +74 -0
  1173. data/src/core/lib/resource_quota/thread_quota.cc +45 -0
  1174. data/src/core/lib/resource_quota/thread_quota.h +61 -0
  1175. data/src/core/lib/resource_quota/trace.cc +19 -0
  1176. data/src/core/lib/resource_quota/trace.h +24 -0
  1177. data/src/core/lib/security/authorization/authorization_policy_provider.h +14 -0
  1178. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  1179. data/src/core/lib/security/authorization/evaluate_args.cc +53 -45
  1180. data/src/core/lib/security/authorization/evaluate_args.h +9 -5
  1181. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +64 -0
  1182. data/src/core/lib/security/authorization/grpc_authorization_engine.h +69 -0
  1183. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +122 -0
  1184. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +61 -0
  1185. data/src/core/lib/security/authorization/matchers.cc +241 -0
  1186. data/src/core/lib/security/authorization/matchers.h +218 -0
  1187. data/src/core/lib/security/authorization/rbac_policy.cc +445 -0
  1188. data/src/core/lib/security/authorization/rbac_policy.h +178 -0
  1189. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +66 -0
  1190. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +60 -0
  1191. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +70 -0
  1192. data/src/core/lib/security/context/security_context.cc +9 -4
  1193. data/src/core/lib/security/context/security_context.h +33 -4
  1194. data/src/core/lib/security/credentials/alts/alts_credentials.cc +18 -10
  1195. data/src/core/lib/security/credentials/alts/alts_credentials.h +18 -4
  1196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  1197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  1198. data/src/core/lib/security/credentials/call_creds_util.cc +97 -0
  1199. data/src/core/lib/security/credentials/call_creds_util.h +43 -0
  1200. data/src/core/lib/security/credentials/channel_creds_registry.h +103 -0
  1201. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +80 -0
  1202. data/src/core/lib/security/credentials/composite/composite_credentials.cc +32 -91
  1203. data/src/core/lib/security/credentials/composite/composite_credentials.h +42 -16
  1204. data/src/core/lib/security/credentials/credentials.cc +6 -11
  1205. data/src/core/lib/security/credentials/credentials.h +106 -99
  1206. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +249 -107
  1207. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +19 -0
  1208. data/src/core/lib/security/credentials/external/aws_request_signer.cc +13 -3
  1209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +137 -103
  1210. data/src/core/lib/security/credentials/external/external_account_credentials.h +16 -9
  1211. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +29 -27
  1212. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  1213. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +76 -45
  1214. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +11 -0
  1215. data/src/core/lib/security/credentials/fake/fake_credentials.cc +43 -43
  1216. data/src/core/lib/security/credentials/fake/fake_credentials.h +35 -26
  1217. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +6 -8
  1218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +118 -80
  1219. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +20 -7
  1220. data/src/core/lib/security/credentials/iam/iam_credentials.cc +32 -30
  1221. data/src/core/lib/security/credentials/iam/iam_credentials.h +25 -9
  1222. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +35 -26
  1223. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +61 -0
  1224. data/src/core/lib/security/credentials/jwt/json_token.cc +21 -12
  1225. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  1226. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +46 -55
  1227. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +30 -12
  1228. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +96 -61
  1229. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +6 -4
  1230. data/src/core/lib/security/credentials/local/local_credentials.cc +19 -13
  1231. data/src/core/lib/security/credentials/local/local_credentials.h +19 -3
  1232. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +214 -222
  1233. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +81 -34
  1234. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +104 -156
  1235. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +80 -27
  1236. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +31 -35
  1237. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +29 -6
  1238. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +21 -29
  1239. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +13 -14
  1240. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +75 -58
  1241. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +73 -14
  1242. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +241 -0
  1243. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +168 -0
  1244. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +37 -92
  1245. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +73 -149
  1246. data/src/core/lib/security/credentials/tls/tls_credentials.cc +59 -42
  1247. data/src/core/lib/security/credentials/tls/tls_credentials.h +13 -4
  1248. data/src/core/lib/security/credentials/tls/tls_utils.cc +5 -1
  1249. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  1250. data/src/core/lib/security/credentials/xds/xds_credentials.cc +81 -89
  1251. data/src/core/lib/security/credentials/xds/xds_credentials.h +53 -8
  1252. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +46 -45
  1253. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +9 -6
  1254. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +58 -70
  1255. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -5
  1256. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +23 -24
  1257. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +34 -27
  1258. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  1259. data/src/core/lib/security/security_connector/load_system_roots_supported.cc +175 -0
  1260. data/src/core/lib/security/security_connector/load_system_roots_supported.h +46 -0
  1261. data/src/core/lib/security/security_connector/local/local_security_connector.cc +52 -40
  1262. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  1263. data/src/core/lib/security/security_connector/security_connector.cc +22 -32
  1264. data/src/core/lib/security/security_connector/security_connector.h +49 -31
  1265. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +39 -34
  1266. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  1267. data/src/core/lib/security/security_connector/ssl_utils.cc +54 -40
  1268. data/src/core/lib/security/security_connector/ssl_utils.h +23 -24
  1269. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  1270. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +391 -230
  1271. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +97 -54
  1272. data/src/core/lib/security/transport/auth_filters.h +45 -5
  1273. data/src/core/lib/security/transport/client_auth_filter.cc +122 -368
  1274. data/src/core/lib/security/transport/secure_endpoint.cc +282 -158
  1275. data/src/core/lib/security/transport/secure_endpoint.h +5 -4
  1276. data/src/core/lib/security/transport/security_handshaker.cc +123 -92
  1277. data/src/core/lib/security/transport/security_handshaker.h +7 -2
  1278. data/src/core/lib/security/transport/server_auth_filter.cc +87 -58
  1279. data/src/core/lib/security/transport/tsi_error.cc +6 -3
  1280. data/src/core/lib/security/util/json_util.cc +7 -7
  1281. data/src/core/lib/security/util/json_util.h +0 -2
  1282. data/src/core/lib/service_config/service_config.h +89 -0
  1283. data/src/core/lib/service_config/service_config_call_data.h +76 -0
  1284. data/src/core/lib/service_config/service_config_impl.cc +191 -0
  1285. data/src/core/lib/service_config/service_config_impl.h +125 -0
  1286. data/src/core/lib/service_config/service_config_parser.cc +81 -0
  1287. data/src/core/lib/service_config/service_config_parser.h +105 -0
  1288. data/src/core/lib/slice/b64.cc +2 -2
  1289. data/src/core/lib/slice/b64.h +2 -0
  1290. data/src/core/lib/slice/percent_encoding.cc +35 -97
  1291. data/src/core/lib/slice/percent_encoding.h +4 -16
  1292. data/src/core/lib/slice/slice.cc +94 -184
  1293. data/src/core/lib/slice/slice.h +402 -0
  1294. data/src/core/lib/slice/slice_buffer.cc +92 -33
  1295. data/src/core/lib/slice/slice_buffer.h +137 -0
  1296. data/src/core/lib/slice/slice_internal.h +22 -48
  1297. data/src/core/lib/slice/slice_refcount.h +32 -93
  1298. data/src/core/lib/slice/slice_string_helpers.cc +0 -16
  1299. data/src/core/lib/slice/slice_string_helpers.h +1 -8
  1300. data/src/core/lib/surface/builtins.cc +11 -6
  1301. data/src/core/lib/surface/byte_buffer.cc +9 -4
  1302. data/src/core/lib/surface/byte_buffer_reader.cc +7 -7
  1303. data/src/core/lib/surface/call.cc +2324 -1337
  1304. data/src/core/lib/surface/call.h +69 -21
  1305. data/src/core/lib/surface/call_details.cc +6 -6
  1306. data/src/core/lib/surface/call_log_batch.cc +7 -1
  1307. data/src/core/lib/surface/call_test_only.h +4 -1
  1308. data/src/core/lib/surface/call_trace.cc +113 -0
  1309. data/src/core/lib/surface/call_trace.h +30 -0
  1310. data/src/core/lib/surface/channel.cc +230 -328
  1311. data/src/core/lib/surface/channel.h +110 -74
  1312. data/src/core/lib/surface/channel_init.cc +2 -3
  1313. data/src/core/lib/surface/channel_init.h +4 -6
  1314. data/src/core/lib/surface/channel_ping.cc +9 -3
  1315. data/src/core/lib/surface/channel_stack_type.cc +4 -2
  1316. data/src/core/lib/surface/channel_stack_type.h +2 -2
  1317. data/src/core/lib/surface/completion_queue.cc +76 -94
  1318. data/src/core/lib/surface/completion_queue.h +8 -6
  1319. data/src/core/lib/surface/completion_queue_factory.cc +6 -0
  1320. data/src/core/lib/surface/completion_queue_factory.h +1 -3
  1321. data/src/core/lib/surface/event_string.cc +1 -7
  1322. data/src/core/lib/surface/event_string.h +1 -1
  1323. data/src/core/lib/surface/init.cc +87 -78
  1324. data/src/core/lib/surface/init.h +0 -10
  1325. data/src/core/lib/surface/init_internally.cc +24 -0
  1326. data/src/core/lib/surface/init_internally.h +36 -0
  1327. data/src/core/lib/surface/lame_client.cc +69 -107
  1328. data/src/core/lib/surface/lame_client.h +41 -3
  1329. data/src/core/lib/surface/metadata_array.cc +2 -0
  1330. data/src/core/lib/surface/server.cc +153 -206
  1331. data/src/core/lib/surface/server.h +64 -36
  1332. data/src/core/lib/surface/validate_metadata.cc +17 -31
  1333. data/src/core/lib/surface/validate_metadata.h +3 -0
  1334. data/src/core/lib/surface/version.cc +2 -2
  1335. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1336. data/src/core/lib/transport/bdp_estimator.h +4 -5
  1337. data/src/core/lib/transport/connectivity_state.cc +7 -6
  1338. data/src/core/lib/transport/connectivity_state.h +3 -4
  1339. data/src/core/lib/transport/error_utils.cc +45 -65
  1340. data/src/core/lib/transport/error_utils.h +10 -5
  1341. data/src/core/lib/transport/handshaker.cc +225 -0
  1342. data/src/core/lib/transport/handshaker.h +167 -0
  1343. data/src/core/lib/transport/handshaker_factory.h +74 -0
  1344. data/src/core/lib/transport/handshaker_registry.cc +61 -0
  1345. data/src/core/lib/transport/handshaker_registry.h +69 -0
  1346. data/src/core/lib/transport/http_connect_handshaker.cc +400 -0
  1347. data/src/core/lib/transport/http_connect_handshaker.h +42 -0
  1348. data/src/core/lib/transport/metadata_batch.cc +266 -69
  1349. data/src/core/lib/transport/metadata_batch.h +1108 -837
  1350. data/src/core/lib/transport/parsed_metadata.cc +35 -0
  1351. data/src/core/lib/transport/parsed_metadata.h +239 -93
  1352. data/src/core/lib/transport/pid_controller.cc +4 -4
  1353. data/src/core/lib/transport/status_conversion.cc +3 -3
  1354. data/src/core/lib/transport/status_conversion.h +3 -3
  1355. data/src/core/lib/transport/tcp_connect_handshaker.cc +246 -0
  1356. data/src/core/lib/transport/tcp_connect_handshaker.h +39 -0
  1357. data/src/core/lib/transport/timeout_encoding.cc +203 -70
  1358. data/src/core/lib/transport/timeout_encoding.h +44 -10
  1359. data/src/core/lib/transport/transport.cc +82 -58
  1360. data/src/core/lib/transport/transport.h +154 -35
  1361. data/src/core/lib/transport/transport_fwd.h +20 -0
  1362. data/src/core/lib/transport/transport_impl.h +24 -0
  1363. data/src/core/lib/transport/transport_op_string.cc +24 -66
  1364. data/src/core/lib/uri/uri_parser.cc +248 -66
  1365. data/src/core/lib/uri/uri_parser.h +39 -25
  1366. data/src/core/plugin_registry/grpc_plugin_registry.cc +56 -140
  1367. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +61 -0
  1368. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +76 -52
  1369. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  1370. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1371. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +43 -28
  1372. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  1373. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +4 -3
  1374. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1375. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1376. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1377. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +7 -7
  1378. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_privacy_integrity_record_protocol.cc +7 -6
  1379. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1380. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +14 -6
  1381. data/src/core/tsi/fake_transport_security.cc +69 -34
  1382. data/src/core/tsi/fake_transport_security.h +6 -0
  1383. data/src/core/tsi/local_transport_security.cc +24 -28
  1384. data/src/core/tsi/local_transport_security.h +1 -4
  1385. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +145 -0
  1386. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1387. data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -3
  1388. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +3 -1
  1389. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +13 -6
  1390. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +8 -2
  1391. data/src/core/tsi/ssl_transport_security.cc +249 -68
  1392. data/src/core/tsi/ssl_transport_security.h +47 -8
  1393. data/src/core/tsi/transport_security.cc +18 -6
  1394. data/src/core/tsi/transport_security.h +2 -1
  1395. data/src/core/tsi/transport_security_grpc.cc +3 -2
  1396. data/src/core/tsi/transport_security_grpc.h +5 -2
  1397. data/src/core/tsi/transport_security_interface.h +19 -5
  1398. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  1399. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  1400. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  1401. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  1402. data/src/ruby/ext/grpc/extconf.rb +61 -21
  1403. data/src/ruby/ext/grpc/rb_channel.c +5 -2
  1404. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +26 -36
  1405. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +40 -55
  1406. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  1407. data/src/ruby/ext/grpc/rb_server.c +7 -4
  1408. data/src/ruby/lib/grpc/errors.rb +1 -1
  1409. data/src/ruby/lib/grpc/generic/active_call.rb +7 -1
  1410. data/src/ruby/lib/grpc/grpc.rb +1 -1
  1411. data/src/ruby/lib/grpc/version.rb +1 -1
  1412. data/src/ruby/pb/generate_proto_ruby.sh +1 -0
  1413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  1414. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
  1415. data/src/ruby/pb/test/client.rb +769 -0
  1416. data/src/ruby/pb/test/server.rb +252 -0
  1417. data/src/ruby/pb/test/xds_client.rb +415 -0
  1418. data/src/ruby/spec/channel_spec.rb +5 -43
  1419. data/src/ruby/spec/generic/active_call_spec.rb +12 -3
  1420. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  1421. data/src/ruby/spec/generic/server_interceptors_spec.rb +1 -1
  1422. data/src/ruby/spec/user_agent_spec.rb +1 -1
  1423. data/third_party/abseil-cpp/absl/algorithm/container.h +102 -92
  1424. data/third_party/abseil-cpp/absl/base/attributes.h +112 -52
  1425. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  1426. data/third_party/abseil-cpp/absl/base/config.h +245 -74
  1427. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  1428. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  1429. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  1430. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  1431. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  1432. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +50 -0
  1433. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  1434. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  1435. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  1436. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  1437. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  1438. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +11 -1
  1439. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  1440. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  1441. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  1442. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  1443. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +68 -0
  1444. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  1445. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +4 -4
  1446. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +22 -7
  1447. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +15 -6
  1448. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  1449. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  1450. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  1451. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1452. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  1453. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +140 -0
  1454. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +100 -0
  1455. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -5
  1456. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  1457. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +510 -0
  1458. data/third_party/abseil-cpp/absl/container/inlined_vector.h +118 -99
  1459. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  1460. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  1461. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1462. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +77 -113
  1463. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +62 -85
  1464. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +417 -431
  1465. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1466. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +18 -8
  1467. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +724 -262
  1468. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  1469. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  1470. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +16 -11
  1471. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +7 -2
  1472. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  1473. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  1474. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +13 -5
  1475. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1476. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  1477. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +236 -0
  1478. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +33 -10
  1479. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  1480. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +35 -4
  1481. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1482. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +7 -0
  1483. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +60 -7
  1484. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1485. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  1486. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  1487. data/third_party/abseil-cpp/absl/functional/function_ref.h +6 -2
  1488. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  1489. data/third_party/abseil-cpp/absl/hash/hash.h +104 -8
  1490. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  1491. data/third_party/abseil-cpp/absl/hash/internal/hash.h +297 -51
  1492. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1493. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1494. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1495. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  1496. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  1497. data/third_party/abseil-cpp/absl/numeric/int128.cc +7 -12
  1498. data/third_party/abseil-cpp/absl/numeric/int128.h +148 -75
  1499. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1500. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1501. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.cc +93 -0
  1502. data/third_party/abseil-cpp/absl/profiling/internal/exponential_biased.h +130 -0
  1503. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +245 -0
  1504. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1505. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1506. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1507. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1508. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1509. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1510. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1511. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1512. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +95 -0
  1513. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +269 -0
  1514. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1515. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1516. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1517. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +161 -0
  1518. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1519. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1520. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1521. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1522. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1523. data/third_party/abseil-cpp/absl/random/internal/randen.h +96 -0
  1524. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +225 -0
  1525. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1526. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +264 -0
  1527. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1528. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1529. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1530. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1531. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1532. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1533. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +165 -0
  1534. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1535. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1536. data/third_party/abseil-cpp/absl/random/internal/traits.h +149 -0
  1537. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1538. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +96 -0
  1539. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +256 -0
  1540. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +261 -0
  1541. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1542. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1543. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1544. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1545. data/third_party/abseil-cpp/absl/random/seed_sequences.h +111 -0
  1546. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1547. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1548. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +272 -0
  1549. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +22 -5
  1550. data/third_party/abseil-cpp/absl/status/status.cc +183 -19
  1551. data/third_party/abseil-cpp/absl/status/status.h +41 -27
  1552. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1553. data/third_party/abseil-cpp/absl/status/statusor.h +40 -24
  1554. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  1555. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  1556. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1557. data/third_party/abseil-cpp/absl/strings/cord.cc +469 -1094
  1558. data/third_party/abseil-cpp/absl/strings/cord.h +392 -144
  1559. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  1560. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  1561. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  1562. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  1563. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  1564. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  1565. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +23 -29
  1566. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +208 -96
  1567. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1228 -0
  1568. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +924 -0
  1569. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +187 -0
  1570. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +267 -0
  1571. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +69 -0
  1572. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +212 -0
  1573. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +62 -0
  1574. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1575. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  1576. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  1577. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +60 -19
  1578. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +48 -172
  1579. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  1580. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  1581. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1582. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1583. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1584. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1585. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +418 -0
  1586. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1587. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +88 -0
  1588. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1589. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +123 -0
  1590. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  1591. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  1592. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1593. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  1594. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +9 -1
  1595. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  1596. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +39 -8
  1597. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  1598. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +10 -11
  1599. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +41 -20
  1600. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  1601. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  1602. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +28 -18
  1603. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  1604. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  1605. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  1606. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  1607. data/third_party/abseil-cpp/absl/strings/numbers.cc +9 -9
  1608. data/third_party/abseil-cpp/absl/strings/numbers.h +60 -23
  1609. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1610. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  1611. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1612. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  1613. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  1614. data/third_party/abseil-cpp/absl/strings/string_view.cc +18 -34
  1615. data/third_party/abseil-cpp/absl/strings/string_view.h +123 -41
  1616. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  1617. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1618. data/third_party/abseil-cpp/absl/strings/substitute.h +109 -76
  1619. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1620. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1621. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  1622. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  1623. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  1624. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  1625. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -26
  1626. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  1627. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  1628. data/third_party/abseil-cpp/absl/synchronization/mutex.h +20 -12
  1629. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  1630. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1631. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  1632. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  1633. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1634. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1635. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1636. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1637. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1638. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  1639. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1640. data/third_party/abseil-cpp/absl/time/time.h +82 -47
  1641. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1642. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1643. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  1644. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  1645. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  1646. data/third_party/abseil-cpp/absl/types/span.h +5 -4
  1647. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  1648. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1649. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1650. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1651. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1652. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1653. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1654. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +28 -0
  1655. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1656. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1657. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1658. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1659. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1660. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1661. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1662. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1663. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1664. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1665. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1666. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1667. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1668. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1669. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1670. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1671. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1672. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1673. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1674. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1675. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1676. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1677. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1678. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1679. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1680. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1681. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1682. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1683. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1684. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1685. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +971 -253
  1686. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1687. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +0 -1
  1688. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1689. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1690. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1691. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1692. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1693. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1694. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1695. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1696. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1697. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1698. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1699. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1700. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +29 -11
  1701. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +12 -43
  1702. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1703. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1704. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1705. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1706. data/third_party/cares/cares/include/ares.h +742 -0
  1707. data/third_party/cares/cares/include/ares_dns.h +112 -0
  1708. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1709. data/third_party/cares/cares/include/ares_version.h +24 -0
  1710. data/third_party/cares/cares/src/lib/ares__close_sockets.c +61 -0
  1711. data/third_party/cares/cares/src/lib/ares__get_hostent.c +260 -0
  1712. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1713. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1714. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1715. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1716. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1717. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1718. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1719. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1720. data/third_party/cares/cares/src/lib/ares_create_query.c +197 -0
  1721. data/third_party/cares/cares/src/lib/ares_data.c +240 -0
  1722. data/third_party/cares/cares/src/lib/ares_data.h +74 -0
  1723. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1724. data/third_party/cares/cares/src/lib/ares_expand_name.c +300 -0
  1725. data/third_party/cares/cares/src/lib/ares_expand_string.c +67 -0
  1726. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1727. data/third_party/cares/cares/src/lib/ares_free_hostent.c +43 -0
  1728. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1729. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1730. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1731. data/third_party/cares/cares/src/lib/ares_getenv.c +28 -0
  1732. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1733. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +287 -0
  1734. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +534 -0
  1735. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +447 -0
  1736. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1737. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1738. data/third_party/cares/cares/src/lib/ares_init.c +2654 -0
  1739. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1740. data/third_party/cares/cares/src/lib/ares_ipv6.h +85 -0
  1741. data/third_party/cares/cares/src/lib/ares_library_init.c +200 -0
  1742. data/third_party/cares/cares/src/lib/ares_library_init.h +43 -0
  1743. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1744. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1745. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1746. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1747. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1748. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1749. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1750. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1751. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1752. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1753. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +164 -0
  1754. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +183 -0
  1755. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +177 -0
  1756. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +228 -0
  1757. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1758. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +168 -0
  1759. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +214 -0
  1760. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1761. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1762. data/third_party/cares/cares/src/lib/ares_private.h +423 -0
  1763. data/third_party/cares/cares/src/lib/ares_process.c +1548 -0
  1764. data/third_party/cares/cares/src/lib/ares_query.c +180 -0
  1765. data/third_party/cares/cares/src/lib/ares_search.c +321 -0
  1766. data/third_party/cares/cares/src/lib/ares_send.c +131 -0
  1767. data/third_party/cares/cares/src/lib/ares_setup.h +220 -0
  1768. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1769. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1770. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1771. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1772. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1773. data/third_party/cares/cares/src/lib/ares_strsplit.c +178 -0
  1774. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1775. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1776. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1777. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1778. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1779. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1780. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1781. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1782. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1783. data/third_party/cares/cares/src/lib/inet_net_pton.c +444 -0
  1784. data/third_party/cares/cares/src/lib/inet_ntop.c +201 -0
  1785. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1786. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1787. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1788. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1789. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1790. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1791. data/third_party/upb/upb/arena.c +277 -0
  1792. data/third_party/upb/upb/arena.h +225 -0
  1793. data/third_party/upb/upb/array.c +114 -0
  1794. data/third_party/upb/upb/array.h +83 -0
  1795. data/third_party/upb/upb/collections.h +36 -0
  1796. data/third_party/upb/upb/decode.c +832 -382
  1797. data/third_party/upb/upb/decode.h +44 -17
  1798. data/third_party/upb/upb/decode_fast.c +304 -302
  1799. data/third_party/upb/upb/decode_fast.h +18 -18
  1800. data/third_party/upb/upb/def.c +2083 -982
  1801. data/third_party/upb/upb/def.h +339 -260
  1802. data/third_party/upb/upb/def.hpp +144 -171
  1803. data/third_party/upb/upb/encode.c +287 -185
  1804. data/third_party/upb/upb/encode.h +24 -16
  1805. data/third_party/upb/upb/extension_registry.c +93 -0
  1806. data/third_party/upb/upb/extension_registry.h +84 -0
  1807. data/third_party/upb/upb/internal/decode.h +211 -0
  1808. data/third_party/upb/upb/internal/table.h +385 -0
  1809. data/third_party/upb/upb/internal/upb.h +68 -0
  1810. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1811. data/third_party/upb/upb/json_decode.c +1512 -0
  1812. data/third_party/upb/upb/json_decode.h +47 -0
  1813. data/third_party/upb/upb/json_encode.c +780 -0
  1814. data/third_party/upb/upb/json_encode.h +65 -0
  1815. data/third_party/upb/upb/map.c +108 -0
  1816. data/third_party/upb/upb/map.h +117 -0
  1817. data/third_party/upb/upb/message_value.h +66 -0
  1818. data/third_party/upb/upb/mini_table.c +1147 -0
  1819. data/third_party/upb/upb/mini_table.h +189 -0
  1820. data/third_party/upb/upb/mini_table.hpp +112 -0
  1821. data/third_party/upb/upb/msg.c +132 -161
  1822. data/third_party/upb/upb/msg.h +18 -55
  1823. data/third_party/upb/upb/msg_internal.h +404 -254
  1824. data/third_party/upb/upb/port_def.inc +10 -1
  1825. data/third_party/upb/upb/port_undef.inc +2 -0
  1826. data/third_party/upb/upb/reflection.c +203 -280
  1827. data/third_party/upb/upb/reflection.h +40 -126
  1828. data/third_party/upb/upb/reflection.hpp +6 -6
  1829. data/third_party/upb/upb/status.c +86 -0
  1830. data/third_party/upb/upb/status.h +66 -0
  1831. data/third_party/upb/upb/table.c +233 -149
  1832. data/third_party/upb/upb/table_internal.h +9 -324
  1833. data/third_party/upb/upb/text_encode.c +116 -92
  1834. data/third_party/upb/upb/text_encode.h +10 -10
  1835. data/third_party/upb/upb/upb.c +34 -273
  1836. data/third_party/upb/upb/upb.h +79 -262
  1837. data/third_party/upb/upb/upb.hpp +31 -28
  1838. data/third_party/xxhash/xxhash.h +607 -352
  1839. data/third_party/zlib/compress.c +3 -3
  1840. data/third_party/zlib/crc32.c +975 -292
  1841. data/third_party/zlib/crc32.h +9441 -436
  1842. data/third_party/zlib/deflate.c +183 -129
  1843. data/third_party/zlib/deflate.h +12 -15
  1844. data/third_party/zlib/gzguts.h +3 -2
  1845. data/third_party/zlib/gzlib.c +6 -4
  1846. data/third_party/zlib/gzread.c +8 -12
  1847. data/third_party/zlib/gzwrite.c +26 -14
  1848. data/third_party/zlib/infback.c +12 -8
  1849. data/third_party/zlib/inffast.c +14 -14
  1850. data/third_party/zlib/inflate.c +44 -10
  1851. data/third_party/zlib/inflate.h +3 -2
  1852. data/third_party/zlib/inftrees.c +3 -3
  1853. data/third_party/zlib/inftrees.h +1 -1
  1854. data/third_party/zlib/trees.c +85 -107
  1855. data/third_party/zlib/uncompr.c +2 -2
  1856. data/third_party/zlib/zconf.h +16 -3
  1857. data/third_party/zlib/zlib.h +129 -106
  1858. data/third_party/zlib/zutil.c +11 -9
  1859. data/third_party/zlib/zutil.h +13 -9
  1860. metadata +713 -295
  1861. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +0 -392
  1862. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +0 -42
  1863. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1864. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -83
  1865. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -60
  1866. data/src/core/ext/filters/client_channel/lb_policy.cc +0 -131
  1867. data/src/core/ext/filters/client_channel/lb_policy.h +0 -425
  1868. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -48
  1869. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +0 -185
  1870. data/src/core/ext/filters/client_channel/lb_policy_registry.h +0 -65
  1871. data/src/core/ext/filters/client_channel/proxy_mapper.h +0 -54
  1872. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +0 -89
  1873. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +0 -50
  1874. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +0 -31
  1875. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +0 -28
  1876. data/src/core/ext/filters/client_channel/resolver.cc +0 -87
  1877. data/src/core/ext/filters/client_channel/resolver.h +0 -136
  1878. data/src/core/ext/filters/client_channel/resolver_factory.h +0 -75
  1879. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -195
  1880. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1881. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +0 -189
  1882. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +0 -99
  1883. data/src/core/ext/filters/client_channel/server_address.cc +0 -170
  1884. data/src/core/ext/filters/client_channel/server_address.h +0 -144
  1885. data/src/core/ext/filters/client_channel/subchannel_interface.h +0 -130
  1886. data/src/core/ext/filters/client_idle/client_idle_filter.cc +0 -264
  1887. data/src/core/ext/filters/client_idle/idle_filter_state.cc +0 -96
  1888. data/src/core/ext/filters/client_idle/idle_filter_state.h +0 -66
  1889. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -181
  1890. data/src/core/ext/filters/fault_injection/service_config_parser.h +0 -85
  1891. data/src/core/ext/filters/max_age/max_age_filter.cc +0 -560
  1892. data/src/core/ext/filters/max_age/max_age_filter.h +0 -26
  1893. data/src/core/ext/service_config/service_config.cc +0 -227
  1894. data/src/core/ext/service_config/service_config.h +0 -127
  1895. data/src/core/ext/service_config/service_config_call_data.h +0 -72
  1896. data/src/core/ext/service_config/service_config_parser.cc +0 -89
  1897. data/src/core/ext/service_config/service_config_parser.h +0 -97
  1898. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -119
  1899. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -95
  1900. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -189
  1901. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -53
  1902. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -83
  1903. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -125
  1904. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1905. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1906. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1907. data/src/core/ext/transport/chttp2/transport/hpack_utils.h +0 -30
  1908. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1909. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1910. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -62
  1911. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1912. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -62
  1913. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1914. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -62
  1915. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1916. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -62
  1917. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1918. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -62
  1919. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1920. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1921. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1922. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1923. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1924. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1925. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1926. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1927. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1928. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1929. data/src/core/ext/xds/certificate_provider_factory.h +0 -61
  1930. data/src/core/ext/xds/certificate_provider_registry.cc +0 -103
  1931. data/src/core/ext/xds/certificate_provider_registry.h +0 -57
  1932. data/src/core/lib/avl/avl.cc +0 -306
  1933. data/src/core/lib/channel/handshaker.cc +0 -222
  1934. data/src/core/lib/channel/handshaker.h +0 -161
  1935. data/src/core/lib/channel/handshaker_factory.h +0 -50
  1936. data/src/core/lib/channel/handshaker_registry.cc +0 -50
  1937. data/src/core/lib/channel/handshaker_registry.h +0 -71
  1938. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1939. data/src/core/lib/compression/compression_args.cc +0 -138
  1940. data/src/core/lib/compression/compression_args.h +0 -56
  1941. data/src/core/lib/compression/stream_compression.cc +0 -81
  1942. data/src/core/lib/compression/stream_compression.h +0 -117
  1943. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1944. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1945. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1946. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1947. data/src/core/lib/event_engine/endpoint_config.cc +0 -45
  1948. data/src/core/lib/event_engine/endpoint_config_internal.h +0 -42
  1949. data/src/core/lib/event_engine/event_engine.cc +0 -50
  1950. data/src/core/lib/event_engine/sockaddr.cc +0 -40
  1951. data/src/core/lib/event_engine/sockaddr.h +0 -44
  1952. data/src/core/lib/gpr/env.h +0 -40
  1953. data/src/core/lib/gpr/env_linux.cc +0 -75
  1954. data/src/core/lib/gpr/env_posix.cc +0 -46
  1955. data/src/core/lib/gpr/env_windows.cc +0 -74
  1956. data/src/core/lib/gpr/murmur_hash.cc +0 -82
  1957. data/src/core/lib/gpr/murmur_hash.h +0 -29
  1958. data/src/core/lib/gpr/string_windows.h +0 -32
  1959. data/src/core/lib/gpr/tls.h +0 -151
  1960. data/src/core/lib/gprpp/arena.cc +0 -104
  1961. data/src/core/lib/gprpp/arena.h +0 -131
  1962. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +0 -32
  1963. data/src/core/lib/iomgr/error_internal.h +0 -66
  1964. data/src/core/lib/iomgr/ev_epollex_linux.cc +0 -1654
  1965. data/src/core/lib/iomgr/ev_epollex_linux.h +0 -30
  1966. data/src/core/lib/iomgr/event_engine/closure.cc +0 -77
  1967. data/src/core/lib/iomgr/event_engine/closure.h +0 -42
  1968. data/src/core/lib/iomgr/event_engine/endpoint.cc +0 -173
  1969. data/src/core/lib/iomgr/event_engine/endpoint.h +0 -52
  1970. data/src/core/lib/iomgr/event_engine/iomgr.cc +0 -104
  1971. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1972. data/src/core/lib/iomgr/event_engine/pollset.cc +0 -88
  1973. data/src/core/lib/iomgr/event_engine/pollset.h +0 -25
  1974. data/src/core/lib/iomgr/event_engine/promise.h +0 -51
  1975. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +0 -41
  1976. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +0 -35
  1977. data/src/core/lib/iomgr/event_engine/resolver.cc +0 -114
  1978. data/src/core/lib/iomgr/event_engine/tcp.cc +0 -293
  1979. data/src/core/lib/iomgr/event_engine/timer.cc +0 -62
  1980. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1981. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1982. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1983. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1984. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1985. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1986. data/src/core/lib/iomgr/is_epollexclusive_available.cc +0 -119
  1987. data/src/core/lib/iomgr/is_epollexclusive_available.h +0 -36
  1988. data/src/core/lib/iomgr/pollset_custom.cc +0 -105
  1989. data/src/core/lib/iomgr/pollset_custom.h +0 -37
  1990. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -47
  1991. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1992. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -169
  1993. data/src/core/lib/iomgr/resolve_address_custom.h +0 -44
  1994. data/src/core/lib/iomgr/resource_quota.cc +0 -1106
  1995. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1996. data/src/core/lib/iomgr/sys_epoll_wrapper.h +0 -30
  1997. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -152
  1998. data/src/core/lib/iomgr/tcp_custom.cc +0 -377
  1999. data/src/core/lib/iomgr/tcp_custom.h +0 -86
  2000. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -467
  2001. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  2002. data/src/core/lib/iomgr/time_averaged_stats.h +0 -72
  2003. data/src/core/lib/iomgr/timer_custom.cc +0 -96
  2004. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2005. data/src/core/lib/iomgr/work_serializer.cc +0 -155
  2006. data/src/core/lib/iomgr/work_serializer.h +0 -81
  2007. data/src/core/lib/profiling/basic_timers.cc +0 -295
  2008. data/src/core/lib/profiling/stap_timers.cc +0 -50
  2009. data/src/core/lib/profiling/timers.h +0 -94
  2010. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +0 -171
  2011. data/src/core/lib/security/authorization/sdk_server_authz_filter.h +0 -67
  2012. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  2013. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +0 -171
  2014. data/src/core/lib/security/security_connector/load_system_roots_linux.h +0 -46
  2015. data/src/core/lib/slice/slice_api.cc +0 -39
  2016. data/src/core/lib/slice/slice_intern.cc +0 -367
  2017. data/src/core/lib/slice/slice_refcount.cc +0 -17
  2018. data/src/core/lib/slice/slice_refcount_base.h +0 -173
  2019. data/src/core/lib/slice/slice_split.cc +0 -100
  2020. data/src/core/lib/slice/slice_split.h +0 -40
  2021. data/src/core/lib/slice/slice_utils.h +0 -200
  2022. data/src/core/lib/slice/static_slice.cc +0 -529
  2023. data/src/core/lib/slice/static_slice.h +0 -331
  2024. data/src/core/lib/surface/init_secure.cc +0 -103
  2025. data/src/core/lib/transport/byte_stream.cc +0 -158
  2026. data/src/core/lib/transport/byte_stream.h +0 -166
  2027. data/src/core/lib/transport/metadata.cc +0 -714
  2028. data/src/core/lib/transport/metadata.h +0 -449
  2029. data/src/core/lib/transport/static_metadata.cc +0 -1117
  2030. data/src/core/lib/transport/static_metadata.h +0 -340
  2031. data/src/core/lib/transport/status_metadata.cc +0 -63
  2032. data/src/core/lib/transport/status_metadata.h +0 -48
  2033. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.cc +0 -93
  2034. data/third_party/abseil-cpp/absl/base/internal/exponential_biased.h +0 -130
  2035. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
  2036. data/third_party/abseil-cpp/absl/hash/internal/wyhash.cc +0 -111
  2037. data/third_party/abseil-cpp/absl/hash/internal/wyhash.h +0 -48
  2038. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2039. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2040. data/third_party/cares/cares/ares.h +0 -670
  2041. data/third_party/cares/cares/ares__close_sockets.c +0 -61
  2042. data/third_party/cares/cares/ares__get_hostent.c +0 -261
  2043. data/third_party/cares/cares/ares_create_query.c +0 -206
  2044. data/third_party/cares/cares/ares_data.c +0 -222
  2045. data/third_party/cares/cares/ares_data.h +0 -72
  2046. data/third_party/cares/cares/ares_dns.h +0 -103
  2047. data/third_party/cares/cares/ares_expand_name.c +0 -209
  2048. data/third_party/cares/cares/ares_expand_string.c +0 -70
  2049. data/third_party/cares/cares/ares_free_hostent.c +0 -41
  2050. data/third_party/cares/cares/ares_getenv.c +0 -30
  2051. data/third_party/cares/cares/ares_gethostbyaddr.c +0 -294
  2052. data/third_party/cares/cares/ares_gethostbyname.c +0 -529
  2053. data/third_party/cares/cares/ares_getnameinfo.c +0 -453
  2054. data/third_party/cares/cares/ares_getopt.c +0 -122
  2055. data/third_party/cares/cares/ares_getopt.h +0 -53
  2056. data/third_party/cares/cares/ares_init.c +0 -2615
  2057. data/third_party/cares/cares/ares_ipv6.h +0 -78
  2058. data/third_party/cares/cares/ares_library_init.c +0 -195
  2059. data/third_party/cares/cares/ares_library_init.h +0 -43
  2060. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2061. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2062. data/third_party/cares/cares/ares_parse_mx_reply.c +0 -170
  2063. data/third_party/cares/cares/ares_parse_naptr_reply.c +0 -194
  2064. data/third_party/cares/cares/ares_parse_ns_reply.c +0 -183
  2065. data/third_party/cares/cares/ares_parse_ptr_reply.c +0 -221
  2066. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2067. data/third_party/cares/cares/ares_parse_srv_reply.c +0 -179
  2068. data/third_party/cares/cares/ares_parse_txt_reply.c +0 -220
  2069. data/third_party/cares/cares/ares_private.h +0 -382
  2070. data/third_party/cares/cares/ares_process.c +0 -1473
  2071. data/third_party/cares/cares/ares_query.c +0 -186
  2072. data/third_party/cares/cares/ares_search.c +0 -323
  2073. data/third_party/cares/cares/ares_send.c +0 -137
  2074. data/third_party/cares/cares/ares_setup.h +0 -217
  2075. data/third_party/cares/cares/ares_strsplit.c +0 -174
  2076. data/third_party/cares/cares/ares_version.h +0 -24
  2077. data/third_party/cares/cares/inet_net_pton.c +0 -450
  2078. data/third_party/cares/cares/inet_ntop.c +0 -207
  2079. data/third_party/upb/upb/decode_internal.h +0 -193
  2080. data/third_party/upb/upb/upb_internal.h +0 -58
@@ -21,92 +21,54 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
- #include <stdbool.h>
24
+ #include <stdlib.h>
25
25
 
26
- #include "absl/strings/match.h"
27
- #include "absl/strings/str_join.h"
26
+ #include <cstdint>
27
+ #include <string>
28
+ #include <utility>
29
+
30
+ #include "absl/container/inlined_vector.h"
31
+ #include "absl/functional/function_ref.h"
32
+ #include "absl/meta/type_traits.h"
33
+ #include "absl/strings/numbers.h"
34
+ #include "absl/strings/string_view.h"
28
35
  #include "absl/types/optional.h"
29
36
 
30
- #include <grpc/grpc.h>
31
- #include <grpc/slice.h>
32
- #include <grpc/support/time.h>
37
+ #include <grpc/impl/codegen/compression_types.h>
38
+ #include <grpc/status.h>
39
+ #include <grpc/support/log.h>
33
40
 
41
+ #include "src/core/lib/compression/compression_internal.h"
34
42
  #include "src/core/lib/gprpp/chunked_vector.h"
35
- #include "src/core/lib/gprpp/table.h"
36
- #include "src/core/lib/iomgr/exec_ctx.h"
37
- #include "src/core/lib/surface/validate_metadata.h"
38
- #include "src/core/lib/transport/metadata.h"
43
+ #include "src/core/lib/gprpp/packed_table.h"
44
+ #include "src/core/lib/gprpp/time.h"
45
+ #include "src/core/lib/resource_quota/arena.h"
46
+ #include "src/core/lib/slice/slice.h"
39
47
  #include "src/core/lib/transport/parsed_metadata.h"
40
- #include "src/core/lib/transport/static_metadata.h"
41
- #include "src/core/lib/transport/timeout_encoding.h"
42
-
43
- typedef struct grpc_linked_mdelem {
44
- grpc_linked_mdelem() {}
45
-
46
- grpc_mdelem md;
47
- struct grpc_linked_mdelem* next = nullptr;
48
- struct grpc_linked_mdelem* prev = nullptr;
49
- void* reserved;
50
- } grpc_linked_mdelem;
51
-
52
- typedef struct grpc_mdelem_list {
53
- size_t count;
54
- size_t default_count; // Number of default keys.
55
- grpc_linked_mdelem* head;
56
- grpc_linked_mdelem* tail;
57
- } grpc_mdelem_list;
58
-
59
- struct grpc_filtered_mdelem {
60
- grpc_error_handle error;
61
- grpc_mdelem md;
62
- };
63
- #define GRPC_FILTERED_ERROR(error) \
64
- { (error), GRPC_MDNULL }
65
- #define GRPC_FILTERED_MDELEM(md) \
66
- { GRPC_ERROR_NONE, (md) }
67
- #define GRPC_FILTERED_REMOVE() \
68
- { GRPC_ERROR_NONE, GRPC_MDNULL }
69
-
70
- grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
71
- grpc_mdelem md);
72
48
 
73
49
  namespace grpc_core {
74
50
 
75
51
  // grpc-timeout metadata trait.
76
- // ValueType is defined as grpc_millis - an absolute timestamp (i.e. a
52
+ // ValueType is defined as Timestamp - an absolute timestamp (i.e. a
77
53
  // deadline!), that is converted to a duration by transports before being
78
54
  // sent.
79
55
  // TODO(ctiller): Move this elsewhere. During the transition we need to be able
80
56
  // to name this in MetadataMap, but ultimately once the transition is done we
81
57
  // should not need to.
82
58
  struct GrpcTimeoutMetadata {
83
- using ValueType = grpc_millis;
84
- using MementoType = grpc_millis;
85
- static const char* key() { return "grpc-timeout"; }
86
- static MementoType ParseMemento(const grpc_slice& value) {
87
- grpc_millis timeout;
88
- if (GPR_UNLIKELY(!grpc_http2_decode_timeout(value, &timeout))) {
89
- timeout = GRPC_MILLIS_INF_FUTURE;
90
- }
91
- grpc_slice_unref_internal(value);
92
- return timeout;
93
- }
94
- static ValueType MementoToValue(MementoType timeout) {
95
- if (timeout == GRPC_MILLIS_INF_FUTURE) {
96
- return GRPC_MILLIS_INF_FUTURE;
97
- }
98
- return grpc_core::ExecCtx::Get()->Now() + timeout;
99
- }
100
- static grpc_slice Encode(ValueType x) {
101
- char timeout[GRPC_HTTP2_TIMEOUT_ENCODE_MIN_BUFSIZE];
102
- grpc_http2_encode_timeout(x, timeout);
103
- return grpc_slice_from_copied_string(timeout);
104
- }
105
- static MementoType DisplayValue(MementoType x) { return x; }
59
+ static constexpr bool kRepeatable = false;
60
+ using ValueType = Timestamp;
61
+ using MementoType = Duration;
62
+ static absl::string_view key() { return "grpc-timeout"; }
63
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
64
+ static ValueType MementoToValue(MementoType timeout);
65
+ static Slice Encode(ValueType x);
66
+ static std::string DisplayValue(MementoType x) { return x.ToString(); }
106
67
  };
107
68
 
108
69
  // TE metadata trait.
109
70
  struct TeMetadata {
71
+ static constexpr bool kRepeatable = false;
110
72
  // HTTP2 says that TE can either be empty or "trailers".
111
73
  // Empty means this trait is not included, "trailers" means kTrailers, and
112
74
  // kInvalid is used to remember an invalid value.
@@ -115,133 +77,944 @@ struct TeMetadata {
115
77
  kInvalid,
116
78
  };
117
79
  using MementoType = ValueType;
118
- static const char* key() { return "te"; }
119
- static MementoType ParseMemento(const grpc_slice& value) {
120
- auto out = kInvalid;
121
- if (grpc_slice_eq(value, GRPC_MDSTR_TRAILERS)) {
122
- out = kTrailers;
123
- }
124
- grpc_slice_unref_internal(value);
125
- return out;
126
- }
80
+ static absl::string_view key() { return "te"; }
81
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
127
82
  static ValueType MementoToValue(MementoType te) { return te; }
128
- static grpc_slice Encode(ValueType x) {
83
+ static StaticSlice Encode(ValueType x) {
129
84
  GPR_ASSERT(x == kTrailers);
130
- return GRPC_MDSTR_TRAILERS;
131
- }
132
- static const char* DisplayValue(MementoType te) {
133
- switch (te) {
134
- case ValueType::kTrailers:
135
- return "trailers";
136
- default:
137
- return "<discarded-invalid-value>";
85
+ return StaticSlice::FromStaticString("trailers");
86
+ }
87
+ static const char* DisplayValue(MementoType te);
88
+ };
89
+
90
+ // content-type metadata trait.
91
+ struct ContentTypeMetadata {
92
+ static constexpr bool kRepeatable = false;
93
+ // gRPC says that content-type can be application/grpc[;something]
94
+ // Core has only ever verified the prefix.
95
+ // IF we want to start verifying more, we can expand this type.
96
+ enum ValueType : uint8_t {
97
+ kApplicationGrpc,
98
+ kEmpty,
99
+ kInvalid,
100
+ };
101
+ using MementoType = ValueType;
102
+ static absl::string_view key() { return "content-type"; }
103
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
104
+ static ValueType MementoToValue(MementoType content_type) {
105
+ return content_type;
106
+ }
107
+
108
+ static StaticSlice Encode(ValueType x);
109
+ static const char* DisplayValue(MementoType content_type);
110
+ };
111
+
112
+ // scheme metadata trait.
113
+ struct HttpSchemeMetadata {
114
+ static constexpr bool kRepeatable = false;
115
+ enum ValueType : uint8_t {
116
+ kHttp,
117
+ kHttps,
118
+ kInvalid,
119
+ };
120
+ using MementoType = ValueType;
121
+ static absl::string_view key() { return ":scheme"; }
122
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
123
+ return Parse(value.as_string_view(), on_error);
124
+ }
125
+ static ValueType Parse(absl::string_view value,
126
+ MetadataParseErrorFn on_error);
127
+ static ValueType MementoToValue(MementoType content_type) {
128
+ return content_type;
129
+ }
130
+ static StaticSlice Encode(ValueType x);
131
+ static const char* DisplayValue(MementoType content_type);
132
+ };
133
+
134
+ // method metadata trait.
135
+ struct HttpMethodMetadata {
136
+ static constexpr bool kRepeatable = false;
137
+ enum ValueType : uint8_t {
138
+ kPost,
139
+ kGet,
140
+ kPut,
141
+ kInvalid,
142
+ };
143
+ using MementoType = ValueType;
144
+ static absl::string_view key() { return ":method"; }
145
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
146
+ static ValueType MementoToValue(MementoType content_type) {
147
+ return content_type;
148
+ }
149
+ static StaticSlice Encode(ValueType x);
150
+ static const char* DisplayValue(MementoType content_type);
151
+ };
152
+
153
+ // Base type for metadata pertaining to a single compression algorithm
154
+ // (e.g., "grpc-encoding").
155
+ struct CompressionAlgorithmBasedMetadata {
156
+ using ValueType = grpc_compression_algorithm;
157
+ using MementoType = ValueType;
158
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
159
+ static ValueType MementoToValue(MementoType x) { return x; }
160
+ static Slice Encode(ValueType x) {
161
+ GPR_ASSERT(x != GRPC_COMPRESS_ALGORITHMS_COUNT);
162
+ return Slice::FromStaticString(CompressionAlgorithmAsString(x));
163
+ }
164
+ static const char* DisplayValue(MementoType x) {
165
+ if (const char* p = CompressionAlgorithmAsString(x)) {
166
+ return p;
167
+ } else {
168
+ return "<discarded-invalid-value>";
138
169
  }
139
170
  }
140
171
  };
141
172
 
173
+ // grpc-encoding metadata trait.
174
+ struct GrpcEncodingMetadata : public CompressionAlgorithmBasedMetadata {
175
+ static constexpr bool kRepeatable = false;
176
+ static absl::string_view key() { return "grpc-encoding"; }
177
+ };
178
+
179
+ // grpc-internal-encoding-request metadata trait.
180
+ struct GrpcInternalEncodingRequest : public CompressionAlgorithmBasedMetadata {
181
+ static constexpr bool kRepeatable = false;
182
+ static absl::string_view key() { return "grpc-internal-encoding-request"; }
183
+ };
184
+
185
+ // grpc-accept-encoding metadata trait.
186
+ struct GrpcAcceptEncodingMetadata {
187
+ static constexpr bool kRepeatable = false;
188
+ static absl::string_view key() { return "grpc-accept-encoding"; }
189
+ using ValueType = CompressionAlgorithmSet;
190
+ using MementoType = ValueType;
191
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
192
+ return CompressionAlgorithmSet::FromString(value.as_string_view());
193
+ }
194
+ static ValueType MementoToValue(MementoType x) { return x; }
195
+ static Slice Encode(ValueType x) { return x.ToSlice(); }
196
+ static absl::string_view DisplayValue(MementoType x) { return x.ToString(); }
197
+ };
198
+
199
+ struct SimpleSliceBasedMetadata {
200
+ using ValueType = Slice;
201
+ using MementoType = Slice;
202
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
203
+ return value.TakeOwned();
204
+ }
205
+ static ValueType MementoToValue(MementoType value) { return value; }
206
+ static Slice Encode(const ValueType& x) { return x.Ref(); }
207
+ static absl::string_view DisplayValue(const MementoType& value) {
208
+ return value.as_string_view();
209
+ }
210
+ };
211
+
212
+ // user-agent metadata trait.
213
+ struct UserAgentMetadata : public SimpleSliceBasedMetadata {
214
+ static constexpr bool kRepeatable = false;
215
+ static absl::string_view key() { return "user-agent"; }
216
+ };
217
+
218
+ // grpc-message metadata trait.
219
+ struct GrpcMessageMetadata : public SimpleSliceBasedMetadata {
220
+ static constexpr bool kRepeatable = false;
221
+ static absl::string_view key() { return "grpc-message"; }
222
+ };
223
+
224
+ // host metadata trait.
225
+ struct HostMetadata : public SimpleSliceBasedMetadata {
226
+ static constexpr bool kRepeatable = false;
227
+ static absl::string_view key() { return "host"; }
228
+ };
229
+
230
+ // endpoint-load-metrics-bin metadata trait.
231
+ struct EndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
232
+ static constexpr bool kRepeatable = false;
233
+ static absl::string_view key() { return "endpoint-load-metrics-bin"; }
234
+ };
235
+
236
+ // grpc-server-stats-bin metadata trait.
237
+ struct GrpcServerStatsBinMetadata : public SimpleSliceBasedMetadata {
238
+ static constexpr bool kRepeatable = false;
239
+ static absl::string_view key() { return "grpc-server-stats-bin"; }
240
+ };
241
+
242
+ // grpc-trace-bin metadata trait.
243
+ struct GrpcTraceBinMetadata : public SimpleSliceBasedMetadata {
244
+ static constexpr bool kRepeatable = false;
245
+ static absl::string_view key() { return "grpc-trace-bin"; }
246
+ };
247
+
248
+ // grpc-tags-bin metadata trait.
249
+ struct GrpcTagsBinMetadata : public SimpleSliceBasedMetadata {
250
+ static constexpr bool kRepeatable = false;
251
+ static absl::string_view key() { return "grpc-tags-bin"; }
252
+ };
253
+
254
+ // :authority metadata trait.
255
+ struct HttpAuthorityMetadata : public SimpleSliceBasedMetadata {
256
+ static constexpr bool kRepeatable = false;
257
+ static absl::string_view key() { return ":authority"; }
258
+ };
259
+
260
+ // :path metadata trait.
261
+ struct HttpPathMetadata : public SimpleSliceBasedMetadata {
262
+ static constexpr bool kRepeatable = false;
263
+ static absl::string_view key() { return ":path"; }
264
+ };
265
+
266
+ // We separate SimpleIntBasedMetadata into two pieces: one that does not
267
+ // depend on the invalid value, and one that does. This allows the compiler to
268
+ // easily see the functions that are shared, and helps reduce code bloat here.
269
+ template <typename Int>
270
+ struct SimpleIntBasedMetadataBase {
271
+ using ValueType = Int;
272
+ using MementoType = Int;
273
+ static ValueType MementoToValue(MementoType value) { return value; }
274
+ static Slice Encode(ValueType x) { return Slice::FromInt64(x); }
275
+ static Int DisplayValue(MementoType x) { return x; }
276
+ };
277
+
278
+ template <typename Int, Int kInvalidValue>
279
+ struct SimpleIntBasedMetadata : public SimpleIntBasedMetadataBase<Int> {
280
+ static constexpr Int invalid_value() { return kInvalidValue; }
281
+ static Int ParseMemento(Slice value, MetadataParseErrorFn on_error) {
282
+ Int out;
283
+ if (!absl::SimpleAtoi(value.as_string_view(), &out)) {
284
+ on_error("not an integer", value);
285
+ out = kInvalidValue;
286
+ }
287
+ return out;
288
+ }
289
+ };
290
+
291
+ // grpc-status metadata trait.
292
+ struct GrpcStatusMetadata
293
+ : public SimpleIntBasedMetadata<grpc_status_code, GRPC_STATUS_UNKNOWN> {
294
+ static constexpr bool kRepeatable = false;
295
+ static absl::string_view key() { return "grpc-status"; }
296
+ };
297
+
298
+ // grpc-previous-rpc-attempts metadata trait.
299
+ struct GrpcPreviousRpcAttemptsMetadata
300
+ : public SimpleIntBasedMetadata<uint32_t, 0> {
301
+ static constexpr bool kRepeatable = false;
302
+ static absl::string_view key() { return "grpc-previous-rpc-attempts"; }
303
+ };
304
+
305
+ // grpc-retry-pushback-ms metadata trait.
306
+ struct GrpcRetryPushbackMsMetadata {
307
+ static constexpr bool kRepeatable = false;
308
+ static absl::string_view key() { return "grpc-retry-pushback-ms"; }
309
+ using ValueType = Duration;
310
+ using MementoType = Duration;
311
+ static ValueType MementoToValue(MementoType x) { return x; }
312
+ static Slice Encode(Duration x) { return Slice::FromInt64(x.millis()); }
313
+ static int64_t DisplayValue(Duration x) { return x.millis(); }
314
+ static Duration ParseMemento(Slice value, MetadataParseErrorFn on_error);
315
+ };
316
+
317
+ // :status metadata trait.
318
+ // TODO(ctiller): consider moving to uint16_t
319
+ struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
320
+ static constexpr bool kRepeatable = false;
321
+ static absl::string_view key() { return ":status"; }
322
+ };
323
+
324
+ // "secret" metadata trait used to pass load balancing token between filters.
325
+ // This should not be exposed outside of gRPC core.
326
+ class GrpcLbClientStats;
327
+
328
+ struct GrpcLbClientStatsMetadata {
329
+ static constexpr bool kRepeatable = false;
330
+ static absl::string_view key() { return "grpclb_client_stats"; }
331
+ using ValueType = GrpcLbClientStats*;
332
+ using MementoType = ValueType;
333
+ static ValueType MementoToValue(MementoType value) { return value; }
334
+ static Slice Encode(ValueType) { abort(); }
335
+ static const char* DisplayValue(MementoType) { return "<internal-lb-stats>"; }
336
+ static MementoType ParseMemento(Slice, MetadataParseErrorFn) {
337
+ return nullptr;
338
+ }
339
+ };
340
+
341
+ // lb-token metadata
342
+ struct LbTokenMetadata : public SimpleSliceBasedMetadata {
343
+ static constexpr bool kRepeatable = false;
344
+ static absl::string_view key() { return "lb-token"; }
345
+ };
346
+
347
+ // lb-cost-bin metadata
348
+ struct LbCostBinMetadata {
349
+ static constexpr bool kRepeatable = true;
350
+ static absl::string_view key() { return "lb-cost-bin"; }
351
+ struct ValueType {
352
+ double cost;
353
+ std::string name;
354
+ };
355
+ using MementoType = ValueType;
356
+ static ValueType MementoToValue(MementoType value) { return value; }
357
+ static Slice Encode(const ValueType& x);
358
+ static std::string DisplayValue(MementoType x);
359
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error);
360
+ };
361
+
362
+ // Annotation added by a transport to note whether a failed request was never
363
+ // placed on the wire, or never seen by a server.
364
+ struct GrpcStreamNetworkState {
365
+ static absl::string_view DebugKey() { return "GrpcStreamNetworkState"; }
366
+ static constexpr bool kRepeatable = false;
367
+ enum ValueType : uint8_t {
368
+ kNotSentOnWire,
369
+ kNotSeenByServer,
370
+ };
371
+ static std::string DisplayValue(ValueType x);
372
+ };
373
+
374
+ // Annotation added by a server transport to note the peer making a request.
375
+ struct PeerString {
376
+ static absl::string_view DebugKey() { return "PeerString"; }
377
+ static constexpr bool kRepeatable = false;
378
+ using ValueType = absl::string_view;
379
+ static std::string DisplayValue(ValueType x);
380
+ };
381
+
382
+ // Annotation added by various systems to describe the reason for a failure.
383
+ struct GrpcStatusContext {
384
+ static absl::string_view DebugKey() { return "GrpcStatusContext"; }
385
+ static constexpr bool kRepeatable = true;
386
+ using ValueType = std::string;
387
+ static const std::string& DisplayValue(const std::string& x);
388
+ };
389
+
390
+ // Annotation added by a transport to note that the status came from the wire.
391
+ struct GrpcStatusFromWire {
392
+ static absl::string_view DebugKey() { return "GrpcStatusFromWire"; }
393
+ static constexpr bool kRepeatable = false;
394
+ using ValueType = bool;
395
+ static absl::string_view DisplayValue(bool x) { return x ? "true" : "false"; }
396
+ };
397
+
398
+ // Annotation added by client surface code to denote wait-for-ready state
399
+ struct WaitForReady {
400
+ struct ValueType {
401
+ bool value = false;
402
+ bool explicitly_set = false;
403
+ };
404
+ static absl::string_view DebugKey() { return "WaitForReady"; }
405
+ static constexpr bool kRepeatable = false;
406
+ static std::string DisplayValue(ValueType x);
407
+ };
408
+
142
409
  namespace metadata_detail {
143
410
 
144
- // Inner implementation of MetadataMap<Container>::Parse()
145
- // Recursive in terms of metadata trait, tries each known type in order by doing
146
- // a string comparison on key, and if that key is found parses it. If not found,
147
- // calls not_found to generate the result value.
148
- template <typename Container, typename... Traits>
149
- struct ParseHelper;
150
-
151
- template <typename Container, typename Trait, typename... Traits>
152
- struct ParseHelper<Container, Trait, Traits...> {
153
- template <typename NotFound>
154
- static ParsedMetadata<Container> Parse(absl::string_view key,
155
- const grpc_slice& value,
156
- NotFound not_found) {
411
+ // Build a key/value formatted debug string.
412
+ // Output looks like 'key1: value1, key2: value2'
413
+ // The string is expected to be readable, but not necessarily parsable.
414
+ class DebugStringBuilder {
415
+ public:
416
+ // Add one key/value pair to the output.
417
+ void Add(absl::string_view key, absl::string_view value);
418
+
419
+ // Finalize the output and return the string.
420
+ // Subsequent Add calls are UB.
421
+ std::string TakeOutput() { return std::move(out_); }
422
+
423
+ private:
424
+ std::string out_;
425
+ };
426
+
427
+ // IsEncodable: Given a trait, determine if that trait is encodable, or is
428
+ // just a value attached to a MetadataMap. We use the presence of the key()
429
+ // static method to determine if a trait is encodable or not - encodable
430
+ // traits have string names, and non-encodable traits do not.
431
+ template <typename Trait, typename Ignored = void>
432
+ struct IsEncodableTrait {
433
+ static const bool value = false;
434
+ };
435
+
436
+ template <typename Trait>
437
+ struct IsEncodableTrait<Trait, absl::void_t<decltype(Trait::key())>> {
438
+ static const bool value = true;
439
+ };
440
+
441
+ // Helper type - maps a string name to a trait.
442
+ template <typename MustBeVoid, typename... Traits>
443
+ struct NameLookup;
444
+
445
+ template <typename Trait, typename... Traits>
446
+ struct NameLookup<absl::enable_if_t<IsEncodableTrait<Trait>::value, void>,
447
+ Trait, Traits...> {
448
+ // Call op->Found(Trait()) if op->name == Trait::key() for some Trait in
449
+ // Traits. If not found, call op->NotFound().
450
+ template <typename Op>
451
+ static auto Lookup(absl::string_view key, Op* op)
452
+ -> decltype(op->Found(Trait())) {
157
453
  if (key == Trait::key()) {
158
- return ParsedMetadata<Container>(
159
- Trait(), Trait::ParseMemento(value),
160
- ParsedMetadata<Container>::TransportSize(key.size(),
161
- GRPC_SLICE_LENGTH(value)));
454
+ return op->Found(Trait());
162
455
  }
163
- return ParseHelper<Container, Traits...>::Parse(key, value, not_found);
456
+ return NameLookup<void, Traits...>::Lookup(key, op);
457
+ }
458
+ };
459
+
460
+ template <typename Trait, typename... Traits>
461
+ struct NameLookup<absl::enable_if_t<!IsEncodableTrait<Trait>::value, void>,
462
+ Trait, Traits...> {
463
+ template <typename Op>
464
+ static auto Lookup(absl::string_view key, Op* op)
465
+ -> decltype(NameLookup<void, Traits...>::Lookup(key, op)) {
466
+ return NameLookup<void, Traits...>::Lookup(key, op);
467
+ }
468
+ };
469
+
470
+ template <>
471
+ struct NameLookup<void> {
472
+ template <typename Op>
473
+ static auto Lookup(absl::string_view key, Op* op)
474
+ -> decltype(op->NotFound(key)) {
475
+ return op->NotFound(key);
476
+ }
477
+ };
478
+
479
+ // Helper to take a slice to a memento to a value.
480
+ // By splitting this part out we can scale code size as the number of
481
+ // (memento, value) types, rather than as the number of traits.
482
+ template <typename ParseMementoFn, typename MementoToValueFn>
483
+ struct ParseValue {
484
+ template <ParseMementoFn parse_memento, MementoToValueFn memento_to_value>
485
+ static GPR_ATTRIBUTE_NOINLINE auto Parse(Slice* value,
486
+ MetadataParseErrorFn on_error)
487
+ -> decltype(memento_to_value(parse_memento(std::move(*value),
488
+ on_error))) {
489
+ return memento_to_value(parse_memento(std::move(*value), on_error));
490
+ }
491
+ };
492
+
493
+ // This is an "Op" type for NameLookup.
494
+ // Used for MetadataMap::Parse, its Found/NotFound methods turn a slice into a
495
+ // ParsedMetadata object.
496
+ template <typename Container>
497
+ class ParseHelper {
498
+ public:
499
+ ParseHelper(Slice value, MetadataParseErrorFn on_error, size_t transport_size)
500
+ : value_(std::move(value)),
501
+ on_error_(on_error),
502
+ transport_size_(transport_size) {}
503
+
504
+ template <typename Trait>
505
+ GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> Found(Trait trait) {
506
+ return ParsedMetadata<Container>(
507
+ trait,
508
+ ParseValueToMemento<typename Trait::MementoType, Trait::ParseMemento>(),
509
+ static_cast<uint32_t>(transport_size_));
164
510
  }
511
+
512
+ GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> NotFound(
513
+ absl::string_view key) {
514
+ return ParsedMetadata<Container>(Slice::FromCopiedString(key),
515
+ std::move(value_));
516
+ }
517
+
518
+ private:
519
+ template <typename T, T (*parse_memento)(Slice, MetadataParseErrorFn)>
520
+ GPR_ATTRIBUTE_NOINLINE T ParseValueToMemento() {
521
+ return parse_memento(std::move(value_), on_error_);
522
+ }
523
+
524
+ Slice value_;
525
+ MetadataParseErrorFn on_error_;
526
+ const size_t transport_size_;
165
527
  };
166
528
 
529
+ // This is an "Op" type for NameLookup.
530
+ // Used for MetadataMap::Append, its Found/NotFound methods turn a slice into
531
+ // a value and add it to a container.
167
532
  template <typename Container>
168
- struct ParseHelper<Container> {
169
- template <typename NotFound>
170
- static ParsedMetadata<Container> Parse(absl::string_view, const grpc_slice&,
171
- NotFound not_found) {
172
- return not_found();
533
+ class AppendHelper {
534
+ public:
535
+ AppendHelper(Container* container, Slice value, MetadataParseErrorFn on_error)
536
+ : container_(container), value_(std::move(value)), on_error_(on_error) {}
537
+
538
+ template <typename Trait>
539
+ GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
540
+ container_->Set(
541
+ trait, ParseValue<decltype(Trait::ParseMemento),
542
+ decltype(Trait::MementoToValue)>::
543
+ template Parse<Trait::ParseMemento, Trait::MementoToValue>(
544
+ &value_, on_error_));
173
545
  }
546
+
547
+ GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
548
+ container_->unknown_.Append(key, std::move(value_));
549
+ }
550
+
551
+ private:
552
+ Container* const container_;
553
+ Slice value_;
554
+ MetadataParseErrorFn on_error_;
174
555
  };
175
556
 
176
- // Inner implementation of MetadataMap<Container>::Append()
177
- // Recursive in terms of metadata trait, tries each known type in order by doing
178
- // a string comparison on key, and if that key is found sets it. If not found,
179
- // calls not_found to append generically.
180
- template <typename Container, typename... Traits>
181
- struct AppendHelper;
182
-
183
- template <typename Container, typename Trait, typename... Traits>
184
- struct AppendHelper<Container, Trait, Traits...> {
185
- template <typename NotFound>
186
- static void Append(Container* container, absl::string_view key,
187
- const grpc_slice& value, NotFound not_found) {
188
- if (key == Trait::key()) {
189
- container->Set(Trait(),
190
- Trait::MementoToValue(Trait::ParseMemento(value)));
191
- return;
192
- }
193
- AppendHelper<Container, Traits...>::Append(container, key, value,
194
- not_found);
557
+ // This is an "Op" type for NameLookup.
558
+ // Used for MetadataMap::Remove, its Found/NotFound methods remove a key from
559
+ // the container.
560
+ template <typename Container>
561
+ class RemoveHelper {
562
+ public:
563
+ explicit RemoveHelper(Container* container) : container_(container) {}
564
+
565
+ template <typename Trait>
566
+ GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
567
+ container_->Remove(trait);
568
+ }
569
+
570
+ GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
571
+ container_->unknown_.Remove(key);
195
572
  }
573
+
574
+ private:
575
+ Container* const container_;
196
576
  };
197
577
 
578
+ // This is an "Op" type for NameLookup.
579
+ // Used for MetadataMap::GetStringValue, its Found/NotFound methods generated
580
+ // a string value from the container.
198
581
  template <typename Container>
199
- struct AppendHelper<Container> {
200
- template <typename NotFound>
201
- static void Append(Container*, absl::string_view, const grpc_slice&,
202
- NotFound not_found) {
203
- not_found();
582
+ class GetStringValueHelper {
583
+ public:
584
+ explicit GetStringValueHelper(const Container* container,
585
+ std::string* backing)
586
+ : container_(container), backing_(backing) {}
587
+
588
+ template <typename Trait>
589
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
590
+ Trait::kRepeatable == false &&
591
+ std::is_same<Slice, typename Trait::ValueType>::value,
592
+ absl::optional<absl::string_view>>
593
+ Found(Trait) {
594
+ const auto* value = container_->get_pointer(Trait());
595
+ if (value == nullptr) return absl::nullopt;
596
+ return value->as_string_view();
597
+ }
598
+
599
+ template <typename Trait>
600
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
601
+ Trait::kRepeatable == true &&
602
+ !std::is_same<Slice, typename Trait::ValueType>::value,
603
+ absl::optional<absl::string_view>>
604
+ Found(Trait) {
605
+ const auto* value = container_->get_pointer(Trait());
606
+ if (value == nullptr) return absl::nullopt;
607
+ backing_->clear();
608
+ for (const auto& v : *value) {
609
+ if (!backing_->empty()) backing_->push_back(',');
610
+ auto new_segment = Trait::Encode(v);
611
+ backing_->append(new_segment.begin(), new_segment.end());
612
+ }
613
+ return *backing_;
614
+ }
615
+
616
+ template <typename Trait>
617
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
618
+ Trait::kRepeatable == false &&
619
+ !std::is_same<Slice, typename Trait::ValueType>::value,
620
+ absl::optional<absl::string_view>>
621
+ Found(Trait) {
622
+ const auto* value = container_->get_pointer(Trait());
623
+ if (value == nullptr) return absl::nullopt;
624
+ *backing_ = std::string(Trait::Encode(*value).as_string_view());
625
+ return *backing_;
626
+ }
627
+
628
+ GPR_ATTRIBUTE_NOINLINE absl::optional<absl::string_view> NotFound(
629
+ absl::string_view key) {
630
+ return container_->unknown_.GetStringValue(key, backing_);
631
+ }
632
+
633
+ private:
634
+ const Container* const container_;
635
+ std::string* backing_;
636
+ };
637
+
638
+ // Sink for key value logs
639
+ using LogFn = absl::FunctionRef<void(absl::string_view, absl::string_view)>;
640
+
641
+ template <typename T>
642
+ struct AdaptDisplayValueToLog {
643
+ static std::string ToString(const T& value) { return std::to_string(value); }
644
+ };
645
+
646
+ template <>
647
+ struct AdaptDisplayValueToLog<std::string> {
648
+ static std::string ToString(const std::string& value) { return value; }
649
+ };
650
+
651
+ template <>
652
+ struct AdaptDisplayValueToLog<const std::string&> {
653
+ static std::string ToString(const std::string& value) { return value; }
654
+ };
655
+
656
+ template <>
657
+ struct AdaptDisplayValueToLog<absl::string_view> {
658
+ static std::string ToString(absl::string_view value) {
659
+ return std::string(value);
660
+ }
661
+ };
662
+
663
+ template <>
664
+ struct AdaptDisplayValueToLog<Slice> {
665
+ static std::string ToString(Slice value) {
666
+ return std::string(value.as_string_view());
667
+ }
668
+ };
669
+
670
+ template <>
671
+ struct AdaptDisplayValueToLog<StaticSlice> {
672
+ static absl::string_view ToString(StaticSlice value) {
673
+ return value.as_string_view();
674
+ }
675
+ };
676
+
677
+ template <typename T, typename U, typename V>
678
+ GPR_ATTRIBUTE_NOINLINE void LogKeyValueTo(absl::string_view key, const T& value,
679
+ V (*display_value)(U), LogFn log_fn) {
680
+ log_fn(key, AdaptDisplayValueToLog<V>::ToString(display_value(value)));
681
+ }
682
+
683
+ // Generate a strong type for metadata values per trait.
684
+ template <typename Which, typename Ignored = void>
685
+ struct Value;
686
+
687
+ template <typename Which>
688
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == false &&
689
+ IsEncodableTrait<Which>::value,
690
+ void>> {
691
+ Value() = default;
692
+ explicit Value(const typename Which::ValueType& value) : value(value) {}
693
+ explicit Value(typename Which::ValueType&& value)
694
+ : value(std::forward<typename Which::ValueType>(value)) {}
695
+ Value(const Value&) = delete;
696
+ Value& operator=(const Value&) = delete;
697
+ Value(Value&&) noexcept = default;
698
+ Value& operator=(Value&& other) noexcept {
699
+ value = std::move(other.value);
700
+ return *this;
701
+ }
702
+ template <typename Encoder>
703
+ void EncodeTo(Encoder* encoder) const {
704
+ encoder->Encode(Which(), value);
705
+ }
706
+ template <typename Encoder>
707
+ void VisitWith(Encoder* encoder) const {
708
+ return EncodeTo(encoder);
709
+ }
710
+ void LogTo(LogFn log_fn) const {
711
+ LogKeyValueTo(Which::key(), value, Which::Encode, log_fn);
712
+ }
713
+ using StorageType = typename Which::ValueType;
714
+ GPR_NO_UNIQUE_ADDRESS StorageType value;
715
+ };
716
+
717
+ template <typename Which>
718
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == false &&
719
+ !IsEncodableTrait<Which>::value,
720
+ void>> {
721
+ Value() = default;
722
+ explicit Value(const typename Which::ValueType& value) : value(value) {}
723
+ explicit Value(typename Which::ValueType&& value)
724
+ : value(std::forward<typename Which::ValueType>(value)) {}
725
+ Value(const Value&) = delete;
726
+ Value& operator=(const Value&) = delete;
727
+ Value(Value&&) noexcept = default;
728
+ Value& operator=(Value&& other) noexcept {
729
+ value = std::move(other.value);
730
+ return *this;
731
+ }
732
+ template <typename Encoder>
733
+ void EncodeTo(Encoder*) const {}
734
+ template <typename Encoder>
735
+ void VisitWith(Encoder* encoder) const {
736
+ encoder->Encode(Which(), value);
737
+ }
738
+ void LogTo(LogFn log_fn) const {
739
+ LogKeyValueTo(Which::DebugKey(), value, Which::DisplayValue, log_fn);
740
+ }
741
+ using StorageType = typename Which::ValueType;
742
+ GPR_NO_UNIQUE_ADDRESS StorageType value;
743
+ };
744
+
745
+ template <typename Which>
746
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == true &&
747
+ IsEncodableTrait<Which>::value,
748
+ void>> {
749
+ Value() = default;
750
+ explicit Value(const typename Which::ValueType& value) {
751
+ this->value.push_back(value);
752
+ }
753
+ explicit Value(typename Which::ValueType&& value) {
754
+ this->value.emplace_back(std::forward<typename Which::ValueType>(value));
755
+ }
756
+ Value(const Value&) = delete;
757
+ Value& operator=(const Value&) = delete;
758
+ Value(Value&& other) noexcept : value(std::move(other.value)) {}
759
+ Value& operator=(Value&& other) noexcept {
760
+ value = std::move(other.value);
761
+ return *this;
762
+ }
763
+ template <typename Encoder>
764
+ void EncodeTo(Encoder* encoder) const {
765
+ for (const auto& v : value) {
766
+ encoder->Encode(Which(), v);
767
+ }
768
+ }
769
+ template <typename Encoder>
770
+ void VisitWith(Encoder* encoder) const {
771
+ return EncodeTo(encoder);
772
+ }
773
+ void LogTo(LogFn log_fn) const {
774
+ for (const auto& v : value) {
775
+ LogKeyValueTo(Which::key(), v, Which::Encode, log_fn);
776
+ }
777
+ }
778
+ using StorageType = absl::InlinedVector<typename Which::ValueType, 1>;
779
+ StorageType value;
780
+ };
781
+
782
+ template <typename Which>
783
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == true &&
784
+ !IsEncodableTrait<Which>::value,
785
+ void>> {
786
+ Value() = default;
787
+ explicit Value(const typename Which::ValueType& value) {
788
+ this->value.push_back(value);
789
+ }
790
+ explicit Value(typename Which::ValueType&& value) {
791
+ this->value.emplace_back(std::forward<typename Which::ValueType>(value));
792
+ }
793
+ Value(const Value&) = delete;
794
+ Value& operator=(const Value&) = delete;
795
+ Value(Value&& other) noexcept : value(std::move(other.value)) {}
796
+ Value& operator=(Value&& other) noexcept {
797
+ value = std::move(other.value);
798
+ return *this;
204
799
  }
800
+ template <typename Encoder>
801
+ void EncodeTo(Encoder*) const {}
802
+ template <typename Encoder>
803
+ void VisitWith(Encoder* encoder) const {
804
+ for (const auto& v : value) {
805
+ encoder->Encode(Which(), v);
806
+ }
807
+ }
808
+ void LogTo(LogFn log_fn) const {
809
+ for (const auto& v : value) {
810
+ LogKeyValueTo(Which::DebugKey(), v, Which::DisplayValue, log_fn);
811
+ }
812
+ }
813
+ using StorageType = absl::InlinedVector<typename Which::ValueType, 1>;
814
+ StorageType value;
815
+ };
816
+
817
+ // Encoder to copy some metadata
818
+ template <typename Output>
819
+ class CopySink {
820
+ public:
821
+ explicit CopySink(Output* dst) : dst_(dst) {}
822
+
823
+ template <class T, class V>
824
+ void Encode(T trait, V value) {
825
+ dst_->Set(trait, value);
826
+ }
827
+
828
+ template <class T>
829
+ void Encode(T trait, const Slice& value) {
830
+ dst_->Set(trait, std::move(value.AsOwned()));
831
+ }
832
+
833
+ void Encode(const Slice& key, const Slice& value) {
834
+ dst_->unknown_.Append(key.as_string_view(), value.Ref());
835
+ }
836
+
837
+ private:
838
+ Output* dst_;
839
+ };
840
+
841
+ // Callable for the ForEach in Encode() -- for each value, call the
842
+ // appropriate encoder method.
843
+ template <typename Encoder>
844
+ struct EncodeWrapper {
845
+ Encoder* encoder;
846
+ template <typename Which>
847
+ void operator()(const Value<Which>& which) {
848
+ which.EncodeTo(encoder);
849
+ }
850
+ };
851
+
852
+ // Callable for the table ForEach in ForEach() -- for each value, call the
853
+ // appropriate visitor method.
854
+ template <typename Encoder>
855
+ struct ForEachWrapper {
856
+ Encoder* encoder;
857
+ template <typename Which>
858
+ void operator()(const Value<Which>& which) {
859
+ which.VisitWith(encoder);
860
+ }
861
+ };
862
+
863
+ // Callable for the ForEach in Log()
864
+ struct LogWrapper {
865
+ LogFn log_fn;
866
+ template <typename Which>
867
+ void operator()(const Value<Which>& which) {
868
+ which.LogTo(log_fn);
869
+ }
870
+ };
871
+
872
+ // Encoder to compute TransportSize
873
+ class TransportSizeEncoder {
874
+ public:
875
+ void Encode(const Slice& key, const Slice& value) {
876
+ size_ += key.length() + value.length() + 32;
877
+ }
878
+
879
+ template <typename Which>
880
+ void Encode(Which, const typename Which::ValueType& value) {
881
+ Add(Which(), value);
882
+ }
883
+
884
+ void Encode(ContentTypeMetadata,
885
+ const typename ContentTypeMetadata::ValueType& value) {
886
+ if (value == ContentTypeMetadata::kInvalid) return;
887
+ Add(ContentTypeMetadata(), value);
888
+ }
889
+
890
+ size_t size() const { return size_; }
891
+
892
+ private:
893
+ template <typename Which>
894
+ void Add(Which, const typename Which::ValueType& value) {
895
+ size_ += Which::key().length() + Which::Encode(value).length() + 32;
896
+ }
897
+
898
+ uint32_t size_ = 0;
899
+ };
900
+
901
+ // Handle unknown (non-trait-based) fields in the metadata map.
902
+ class UnknownMap {
903
+ public:
904
+ explicit UnknownMap(Arena* arena) : unknown_(arena) {}
905
+
906
+ using BackingType = ChunkedVector<std::pair<Slice, Slice>, 10>;
907
+
908
+ void Append(absl::string_view key, Slice value);
909
+ void Remove(absl::string_view key);
910
+ absl::optional<absl::string_view> GetStringValue(absl::string_view key,
911
+ std::string* backing) const;
912
+
913
+ BackingType::ConstForwardIterator begin() const { return unknown_.cbegin(); }
914
+ BackingType::ConstForwardIterator end() const { return unknown_.cend(); }
915
+
916
+ bool empty() const { return unknown_.empty(); }
917
+ size_t size() const { return unknown_.size(); }
918
+ void Clear() { unknown_.Clear(); }
919
+ Arena* arena() const { return unknown_.arena(); }
920
+
921
+ private:
922
+ // Backing store for added metadata.
923
+ ChunkedVector<std::pair<Slice, Slice>, 10> unknown_;
205
924
  };
206
925
 
207
926
  } // namespace metadata_detail
208
927
 
928
+ // Helper function for encoders
929
+ // Given a metadata trait, convert the value to a slice.
930
+ template <typename Which>
931
+ absl::enable_if_t<std::is_same<typename Which::ValueType, Slice>::value,
932
+ const Slice&>
933
+ MetadataValueAsSlice(const Slice& slice) {
934
+ return slice;
935
+ }
936
+
937
+ template <typename Which>
938
+ absl::enable_if_t<!std::is_same<typename Which::ValueType, Slice>::value, Slice>
939
+ MetadataValueAsSlice(typename Which::ValueType value) {
940
+ return Slice(Which::Encode(value));
941
+ }
942
+
209
943
  // MetadataMap encodes the mapping of metadata keys to metadata values.
210
- // Right now the API presented is the minimal one that will allow us to
211
- // substitute this type for grpc_metadata_batch in a relatively easy fashion. At
212
- // that point we'll start iterating this API into something that's ergonomic
213
- // again, whilst minimally holding the performance bar already set (and
214
- // hopefully improving some things).
215
- // In the meantime, we're not going to invest much time in ephemeral API
216
- // documentation, so if you must use one of these APIs and it's not obvious
217
- // how, reach out to ctiller.
218
944
  //
219
- // MetadataMap takes a list of traits. Each of these trait objects defines
220
- // one metadata field that is used by core, and so should have more specialized
221
- // handling than just using the generic APIs.
945
+ // MetadataMap takes a derived class and list of traits. Each of these trait
946
+ // objects defines one metadata field that is used by core, and so should have
947
+ // more specialized handling than just using the generic APIs.
222
948
  //
223
- // Each trait object has the following signature:
224
- // // Traits for the grpc-xyz metadata field:
949
+ // MetadataMap is the backing type for some derived type via the curiously
950
+ // recursive template pattern. This is because many types consumed by
951
+ // MetadataMap require the container type to operate on, and many of those
952
+ // types are instantiated one per trait. A naive implementation without the
953
+ // Derived type would, for traits A,B,C, then instantiate for some
954
+ // T<Container, Trait>:
955
+ // - T<MetadataMap<A,B,C>, A>,
956
+ // - T<MetadataMap<A,B,C>, B>,
957
+ // - T<MetadataMap<A,B,C>, C>.
958
+ // Since these types ultimately need to be recorded in the .dynstr segment
959
+ // for dynamic linkers (if gRPC is linked as a static library) this would
960
+ // create O(N^2) bytes of symbols even in stripped libraries. To avoid this
961
+ // we use the derived type (e.g. grpc_metadata_batch right now) to capture
962
+ // the container type, and we would write T<grpc_metadata_batch, A>, etc...
963
+ // Note that now the container type uses a number of bytes that is independent
964
+ // of the number of traits, and so we return to a linear symbol table growth
965
+ // function.
966
+ //
967
+ // Each trait object has one of two possible signatures, depending on whether
968
+ // that traits field is encodable or not.
969
+ // Non-encodable traits are carried in a MetadataMap, but are never passed to
970
+ // the application nor serialized to wire.
971
+ //
972
+ // Encodable traits have the following signature:
973
+ // // Traits for the "grpc-xyz" metadata field:
225
974
  // struct GrpcXyzMetadata {
975
+ // // Can this metadata field be repeated?
976
+ // static constexpr bool kRepeatable = ...;
226
977
  // // The type that's stored on MetadataBatch
227
978
  // using ValueType = ...;
228
979
  // // The type that's stored in compression/decompression tables
229
980
  // using MementoType = ...;
230
981
  // // The string key for this metadata type (for transports that require it)
231
- // static constexpr char* key() { return "grpc-xyz"; }
982
+ // static absl::string_view key() { return "grpc-xyz"; }
232
983
  // // Parse a memento from a slice
233
984
  // // Takes ownership of value
234
- // static MementoType ParseMemento(const grpc_slice& value) { ... }
985
+ // // Calls fn in the case of an error that should be reported to the user
986
+ // static MementoType ParseMemento(Slice value, MementoParseErrorFn fn) {
987
+ // ...
988
+ // }
235
989
  // // Convert a memento to a value
236
990
  // static ValueType MementoToValue(MementoType memento) { ... }
237
991
  // // Convert a value to its canonical text wire format (the format that
238
992
  // // ParseMemento will accept!)
239
- // static grpc_slice Encode(ValueType value);
240
- // // Convert a value to something that can be passed to StrCat and displayed
993
+ // static Slice Encode(const ValueType& value);
994
+ // // Convert a value to something that can be passed to StrCat and
995
+ // displayed
241
996
  // // for debugging
242
997
  // static SomeStrCatableType DisplayValue(MementoType value) { ... }
243
998
  // };
244
999
  //
1000
+ // Non-encodable traits are determined by missing the key() method, and have
1001
+ // the following signature (and by convention omit the Metadata part of the
1002
+ // type name):
1003
+ // // Traits for the GrpcXyz field:
1004
+ // struct GrpcXyz {
1005
+ // // The string key that should be used for debug dumps - should not be a
1006
+ // // valid http2 key (ie all lower case)
1007
+ // static absl::string_view DebugKey() { return "GRPC_XYZ"; }
1008
+ // // Can this metadata field be repeated?
1009
+ // static constexpr bool kRepeatable = ...;
1010
+ // // The type that's stored on MetadataBatch
1011
+ // using ValueType = ...;
1012
+ // // Convert a value to something that can be passed to StrCat and
1013
+ // displayed
1014
+ // // for debugging
1015
+ // static SomeStrCatableType DisplayValue(ValueType value) { ... }
1016
+ // };
1017
+ //
245
1018
  // About parsing and mementos:
246
1019
  //
247
1020
  // Many gRPC transports exchange metadata as key/value strings, but also allow
@@ -250,10 +1023,10 @@ struct AppendHelper<Container> {
250
1023
  // in the compression table. This is what mementos are used for.
251
1024
  //
252
1025
  // A trait offers the capability to turn a slice into a memento via
253
- // ParseMemento. This is exposed to users of MetadataMap via the Parse() method,
254
- // that returns a ParsedMetadata object. That ParsedMetadata object can in turn
255
- // be used to set the same value on many different MetadataMaps without having
256
- // to reparse.
1026
+ // ParseMemento. This is exposed to users of MetadataMap via the Parse()
1027
+ // method, that returns a ParsedMetadata object. That ParsedMetadata object
1028
+ // can in turn be used to set the same value on many different MetadataMaps
1029
+ // without having to reparse.
257
1030
  //
258
1031
  // Implementation wise, ParsedMetadata is a type erased wrapper around
259
1032
  // MementoType. When we set a value on MetadataMap, we first turn that memento
@@ -261,7 +1034,7 @@ struct AppendHelper<Container> {
261
1034
  // for grpc-timeout we make the memento the timeout expressed on the wire, but
262
1035
  // we make the value the timestamp of when the timeout will expire (i.e. the
263
1036
  // deadline).
264
- template <typename... Traits>
1037
+ template <class Derived, typename... Traits>
265
1038
  class MetadataMap {
266
1039
  public:
267
1040
  explicit MetadataMap(Arena* arena);
@@ -270,7 +1043,10 @@ class MetadataMap {
270
1043
  MetadataMap(const MetadataMap&) = delete;
271
1044
  MetadataMap& operator=(const MetadataMap&) = delete;
272
1045
  MetadataMap(MetadataMap&&) noexcept;
273
- MetadataMap& operator=(MetadataMap&&) noexcept;
1046
+ // We never create MetadataMap directly, instead we create Derived, but we
1047
+ // want to be able to move it without redeclaring this.
1048
+ // NOLINTNEXTLINE(misc-unconventional-assign-operator)
1049
+ Derived& operator=(MetadataMap&&) noexcept;
274
1050
 
275
1051
  // Encode this metadata map into some encoder.
276
1052
  // For each field that is set in the MetadataMap, call
@@ -281,23 +1057,49 @@ class MetadataMap {
281
1057
  // void Encode(TraitsType, typename TraitsType::ValueType value);
282
1058
  // For fields for which we do not have traits, this will be a method
283
1059
  // with the signature:
284
- // void Encode(grpc_mdelem md);
285
- // TODO(ctiller): It's expected that the latter Encode method will
286
- // become Encode(Slice, Slice) by the end of the current metadata API
287
- // transitions.
1060
+ // void Encode(string_view key, Slice value);
288
1061
  template <typename Encoder>
289
1062
  void Encode(Encoder* encoder) const {
290
- for (auto* l = list_.head; l; l = l->next) {
291
- encoder->Encode(l->md);
1063
+ table_.template ForEachIn<metadata_detail::EncodeWrapper<Encoder>,
1064
+ Value<Traits>...>(
1065
+ metadata_detail::EncodeWrapper<Encoder>{encoder});
1066
+ for (const auto& unk : unknown_) {
1067
+ encoder->Encode(unk.first, unk.second);
292
1068
  }
293
- table_.ForEach(EncodeWrapper<Encoder>{encoder});
1069
+ }
1070
+
1071
+ // Like Encode, but also visit the non-encodable fields.
1072
+ template <typename Encoder>
1073
+ void ForEach(Encoder* encoder) const {
1074
+ table_.ForEach(metadata_detail::ForEachWrapper<Encoder>{encoder});
1075
+ for (const auto& unk : unknown_) {
1076
+ encoder->Encode(unk.first, unk.second);
1077
+ }
1078
+ }
1079
+
1080
+ // Similar to Encode, but targeted at logging: for each metadatum,
1081
+ // call f(key, value) as absl::string_views.
1082
+ void Log(metadata_detail::LogFn log_fn) const {
1083
+ table_.ForEach(metadata_detail::LogWrapper{log_fn});
1084
+ for (const auto& unk : unknown_) {
1085
+ log_fn(unk.first.as_string_view(), unk.second.as_string_view());
1086
+ }
1087
+ }
1088
+
1089
+ std::string DebugString() const {
1090
+ metadata_detail::DebugStringBuilder builder;
1091
+ Log([&builder](absl::string_view key, absl::string_view value) {
1092
+ builder.Add(key, value);
1093
+ });
1094
+ return builder.TakeOutput();
294
1095
  }
295
1096
 
296
1097
  // Get the pointer to the value of some known metadata.
297
1098
  // Returns nullptr if the metadata is not present.
298
1099
  // Causes a compilation error if Which is not an element of Traits.
299
1100
  template <typename Which>
300
- const typename Which::ValueType* get_pointer(Which) const {
1101
+ const typename metadata_detail::Value<Which>::StorageType* get_pointer(
1102
+ Which) const {
301
1103
  if (auto* p = table_.template get<Value<Which>>()) return &p->value;
302
1104
  return nullptr;
303
1105
  }
@@ -306,11 +1108,20 @@ class MetadataMap {
306
1108
  // Returns nullptr if the metadata is not present.
307
1109
  // Causes a compilation error if Which is not an element of Traits.
308
1110
  template <typename Which>
309
- typename Which::ValueType* get_pointer(Which) {
1111
+ typename metadata_detail::Value<Which>::StorageType* get_pointer(Which) {
310
1112
  if (auto* p = table_.template get<Value<Which>>()) return &p->value;
311
1113
  return nullptr;
312
1114
  }
313
1115
 
1116
+ // Get the pointer to the value of some known metadata.
1117
+ // Adds the default value for the metadata is not present.
1118
+ // Causes a compilation error if Which is not an element of Traits.
1119
+ template <typename Which>
1120
+ typename metadata_detail::Value<Which>::StorageType* GetOrCreatePointer(
1121
+ Which) {
1122
+ return &table_.template get_or_create<Value<Which>>()->value;
1123
+ }
1124
+
314
1125
  // Get the value of some known metadata.
315
1126
  // Returns nullopt if the metadata is not present.
316
1127
  // Causes a compilation error if Which is not an element of Traits.
@@ -323,9 +1134,14 @@ class MetadataMap {
323
1134
  // Set the value of some known metadata.
324
1135
  // Returns a pointer to the new value.
325
1136
  template <typename Which, typename... Args>
326
- typename Which::ValueType* Set(Which, Args&&... args) {
327
- return &table_.template set<Value<Which>>(std::forward<Args>(args)...)
328
- ->value;
1137
+ absl::enable_if_t<Which::kRepeatable == false, void> Set(Which,
1138
+ Args&&... args) {
1139
+ table_.template set<Value<Which>>(std::forward<Args>(args)...);
1140
+ }
1141
+ template <typename Which, typename... Args>
1142
+ absl::enable_if_t<Which::kRepeatable == true, void> Set(Which,
1143
+ Args&&... args) {
1144
+ GetOrCreatePointer(Which())->emplace_back(std::forward<Args>(args)...);
329
1145
  }
330
1146
 
331
1147
  // Remove a specific piece of known metadata.
@@ -334,722 +1150,177 @@ class MetadataMap {
334
1150
  table_.template clear<Value<Which>>();
335
1151
  }
336
1152
 
1153
+ // Remove some metadata by name
1154
+ void Remove(absl::string_view key) {
1155
+ metadata_detail::RemoveHelper<Derived> helper(static_cast<Derived*>(this));
1156
+ metadata_detail::NameLookup<void, Traits...>::Lookup(key, &helper);
1157
+ }
1158
+
1159
+ void Remove(const char* key) { Remove(absl::string_view(key)); }
1160
+
1161
+ // Retrieve some metadata by name
1162
+ absl::optional<absl::string_view> GetStringValue(absl::string_view name,
1163
+ std::string* buffer) const {
1164
+ metadata_detail::GetStringValueHelper<Derived> helper(
1165
+ static_cast<const Derived*>(this), buffer);
1166
+ return metadata_detail::NameLookup<void, Traits...>::Lookup(name, &helper);
1167
+ }
1168
+
337
1169
  // Extract a piece of known metadata.
338
1170
  // Returns nullopt if the metadata was not present, or the value if it was.
339
1171
  // The same as:
340
1172
  // auto value = m.get(T());
341
1173
  // m.Remove(T());
342
1174
  template <typename Which>
343
- absl::optional<typename Which::ValueType> Take(Which which) {
344
- auto value = get(which);
345
- Remove(which);
346
- return value;
1175
+ absl::enable_if_t<Which::kRepeatable == false,
1176
+ absl::optional<typename Which::ValueType>>
1177
+ Take(Which which) {
1178
+ if (auto* p = get_pointer(which)) {
1179
+ absl::optional<typename Which::ValueType> value(std::move(*p));
1180
+ Remove(which);
1181
+ return value;
1182
+ }
1183
+ return {};
1184
+ }
1185
+
1186
+ // Extract repeated known metadata.
1187
+ // Returns an empty vector if the metadata was not present.
1188
+ template <typename Which>
1189
+ absl::enable_if_t<Which::kRepeatable == true,
1190
+ typename metadata_detail::Value<Which>::StorageType>
1191
+ Take(Which which) {
1192
+ if (auto* p = get_pointer(which)) {
1193
+ typename Value<Which>::StorageType value = std::move(*p);
1194
+ Remove(which);
1195
+ return value;
1196
+ }
1197
+ return {};
347
1198
  }
348
1199
 
349
1200
  // Parse metadata from a key/value pair, and return an object representing
350
1201
  // that result.
351
1202
  // TODO(ctiller): key should probably be an absl::string_view.
352
1203
  // Once we don't care about interning anymore, make that change!
353
- template <class KeySlice, class ValueSlice>
354
- static ParsedMetadata<MetadataMap> Parse(const KeySlice& key,
355
- const ValueSlice& value) {
356
- bool parsed = true;
357
- auto out = metadata_detail::ParseHelper<MetadataMap, Traits...>::Parse(
358
- StringViewFromSlice(key), value, [&] {
359
- parsed = false;
360
- return ParsedMetadata<MetadataMap>(
361
- grpc_mdelem_from_slices(key, value));
362
- });
363
- if (parsed) {
364
- grpc_slice_unref_internal(key);
365
- }
366
- return out;
1204
+ static ParsedMetadata<Derived> Parse(absl::string_view key, Slice value,
1205
+ uint32_t transport_size,
1206
+ MetadataParseErrorFn on_error) {
1207
+ metadata_detail::ParseHelper<Derived> helper(value.TakeOwned(), on_error,
1208
+ transport_size);
1209
+ return metadata_detail::NameLookup<void, Traits...>::Lookup(key, &helper);
367
1210
  }
368
1211
 
369
1212
  // Set a value from a parsed metadata object.
370
- GRPC_MUST_USE_RESULT grpc_error_handle
371
- Set(const ParsedMetadata<MetadataMap>& m) {
372
- return m.SetOnContainer(this);
1213
+ void Set(const ParsedMetadata<Derived>& m) {
1214
+ m.SetOnContainer(static_cast<Derived*>(this));
373
1215
  }
374
1216
 
375
1217
  // Append a key/value pair - takes ownership of value
376
- void Append(absl::string_view key, const grpc_slice& value) {
377
- metadata_detail::AppendHelper<MetadataMap, Traits...>::Append(
378
- this, key, value, [&] {
379
- GPR_ASSERT(GRPC_ERROR_NONE ==
380
- Append(grpc_mdelem_from_slices(
381
- grpc_slice_intern(grpc_slice_from_static_buffer(
382
- key.data(), key.length())),
383
- value)));
384
- });
385
- }
386
-
387
- //
388
- // All APIs below this point are subject to change.
389
- //
390
-
391
- template <typename F>
392
- void ForEach(F f) const {
393
- for (auto* l = list_.head; l; l = l->next) {
394
- f(l->md);
395
- }
1218
+ void Append(absl::string_view key, Slice value,
1219
+ MetadataParseErrorFn on_error) {
1220
+ metadata_detail::AppendHelper<Derived> helper(static_cast<Derived*>(this),
1221
+ value.TakeOwned(), on_error);
1222
+ metadata_detail::NameLookup<void, Traits...>::Lookup(key, &helper);
396
1223
  }
397
1224
 
398
- template <typename F>
399
- grpc_error_handle Filter(F f, const char* composite_error_string) {
400
- grpc_linked_mdelem* l = list_.head;
401
- grpc_error_handle error = GRPC_ERROR_NONE;
402
- auto add_error = [&](grpc_error_handle new_error) {
403
- if (new_error == GRPC_ERROR_NONE) return;
404
- if (error == GRPC_ERROR_NONE) {
405
- error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(composite_error_string);
406
- }
407
- error = grpc_error_add_child(error, new_error);
408
- };
409
- while (l) {
410
- grpc_linked_mdelem* next = l->next;
411
- grpc_filtered_mdelem new_mdelem = f(l->md);
412
- add_error(new_mdelem.error);
413
- if (GRPC_MDISNULL(new_mdelem.md)) {
414
- Remove(l);
415
- } else if (new_mdelem.md.payload != l->md.payload) {
416
- add_error(Substitute(l, new_mdelem.md));
417
- }
418
- l = next;
419
- }
420
- return error;
421
- }
422
-
423
- GRPC_MUST_USE_RESULT grpc_error_handle Append(grpc_mdelem md) {
424
- return AddTail(elem_storage_.EmplaceBack(), md);
425
- }
426
-
427
- GRPC_MUST_USE_RESULT grpc_error_handle ReplaceOrAppend(grpc_slice key,
428
- grpc_slice value) {
429
- if (ReplaceIfExists(key, value)) return GRPC_ERROR_NONE;
430
- return Append(grpc_mdelem_from_slices(key, value));
431
- }
432
-
433
- // Set key to value if it exists and return true, otherwise return false.
434
- // If this function returns true, it takes ownership of key and value.
435
- // If this function returns false, it does not take ownership of key nor
436
- // value.
437
- bool ReplaceIfExists(grpc_slice key, grpc_slice value);
438
-
439
1225
  void Clear();
440
- bool empty() const { return count() == 0; }
441
-
442
- size_t count() const { return list_.count + table_.count(); }
443
- size_t non_deadline_count() const { return list_.count; }
444
- size_t default_count() const { return list_.default_count; }
445
-
446
1226
  size_t TransportSize() const;
447
-
448
- void Remove(grpc_linked_mdelem* storage);
449
- void Remove(grpc_metadata_batch_callouts_index idx);
450
-
451
- absl::optional<grpc_slice> Remove(grpc_slice key);
452
-
453
- grpc_error_handle Substitute(grpc_linked_mdelem* storage,
454
- grpc_mdelem new_mdelem);
455
-
456
- absl::optional<absl::string_view> GetValue(
457
- absl::string_view target_key, std::string* concatenated_value) const;
458
-
459
- grpc_error_handle LinkHead(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
460
- grpc_error_handle LinkHead(grpc_linked_mdelem* storage,
461
- grpc_metadata_batch_callouts_index idx)
462
- GRPC_MUST_USE_RESULT;
463
- grpc_error_handle LinkTail(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
464
- grpc_error_handle LinkTail(grpc_linked_mdelem* storage,
465
- grpc_metadata_batch_callouts_index idx)
466
- GRPC_MUST_USE_RESULT;
467
-
468
- grpc_error_handle AddHead(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
469
- grpc_error_handle AddHead(grpc_linked_mdelem* storage,
470
- grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
471
- grpc_error_handle AddTail(grpc_linked_mdelem* storage) GRPC_MUST_USE_RESULT;
472
- grpc_error_handle AddTail(grpc_linked_mdelem* storage,
473
- grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
474
-
475
- void CopyFrom(MetadataMap* src, grpc_linked_mdelem* storage);
476
-
477
- #ifndef NDEBUG
478
- void AssertOk();
479
- #else
480
- void AssertOk() {}
481
- #endif
482
-
483
- // TODO(ctiller): the following explicit deadline handling methods are
484
- // deprecated in terms of the traits based APIs.
485
- grpc_millis deadline() const {
486
- return get(GrpcTimeoutMetadata()).value_or(GRPC_MILLIS_INF_FUTURE);
487
- };
488
-
489
- const grpc_metadata_batch_callouts* legacy_index() const { return &idx_; }
1227
+ Derived Copy() const;
1228
+ bool empty() const { return table_.empty() && unknown_.empty(); }
1229
+ size_t count() const { return table_.count() + unknown_.size(); }
490
1230
 
491
1231
  private:
492
- // Generate a strong type for metadata values per trait.
493
- template <typename Which>
494
- struct Value {
495
- Value() = default;
496
- explicit Value(const typename Which::ValueType& value) : value(value) {}
497
- Value(const Value&) = default;
498
- Value& operator=(const Value&) = default;
499
- Value(Value&&) noexcept = default;
500
- Value& operator=(Value&&) noexcept = default;
501
- GPR_NO_UNIQUE_ADDRESS typename Which::ValueType value;
502
- };
503
- // Callable for the ForEach in Encode() -- for each value, call the
504
- // appropriate encoder method.
505
- template <typename Encoder>
506
- struct EncodeWrapper {
507
- Encoder* encoder;
508
- template <typename Which>
509
- void operator()(const Value<Which>& which) {
510
- encoder->Encode(Which(), which.value);
511
- }
512
- };
1232
+ friend class metadata_detail::AppendHelper<Derived>;
1233
+ friend class metadata_detail::GetStringValueHelper<Derived>;
1234
+ friend class metadata_detail::RemoveHelper<Derived>;
1235
+ friend class metadata_detail::CopySink<Derived>;
1236
+ friend class ParsedMetadata<Derived>;
513
1237
 
514
- void AssertValidCallouts();
515
- grpc_error_handle LinkCallout(grpc_linked_mdelem* storage,
516
- grpc_metadata_batch_callouts_index idx)
517
- GRPC_MUST_USE_RESULT;
518
- grpc_error_handle MaybeLinkCallout(grpc_linked_mdelem* storage)
519
- GRPC_MUST_USE_RESULT;
520
- void MaybeUnlinkCallout(grpc_linked_mdelem* storage);
521
-
522
- static void assert_valid_list(grpc_mdelem_list* list) {
523
- #ifndef NDEBUG
524
- grpc_linked_mdelem* l;
525
-
526
- GPR_ASSERT((list->head == nullptr) == (list->tail == nullptr));
527
- if (!list->head) return;
528
- GPR_ASSERT(list->head->prev == nullptr);
529
- GPR_ASSERT(list->tail->next == nullptr);
530
- GPR_ASSERT((list->head == list->tail) == (list->head->next == nullptr));
531
-
532
- size_t verified_count = 0;
533
- for (l = list->head; l; l = l->next) {
534
- GPR_ASSERT(!GRPC_MDISNULL(l->md));
535
- GPR_ASSERT((l->prev == nullptr) == (l == list->head));
536
- GPR_ASSERT((l->next == nullptr) == (l == list->tail));
537
- if (l->next) GPR_ASSERT(l->next->prev == l);
538
- if (l->prev) GPR_ASSERT(l->prev->next == l);
539
- verified_count++;
540
- }
541
- GPR_ASSERT(list->count == verified_count);
542
- #else
543
- // Avoid unused-parameter warning for debug-only parameter
544
- (void)list;
545
- #endif /* NDEBUG */
546
- }
547
-
548
- static grpc_error_handle GPR_ATTRIBUTE_NOINLINE
549
- error_with_md(grpc_mdelem md) {
550
- return grpc_attach_md_to_error(
551
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unallowed duplicate metadata"),
552
- md);
553
- }
554
-
555
- static void link_head(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
556
- assert_valid_list(list);
557
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
558
- storage->prev = nullptr;
559
- storage->next = list->head;
560
- storage->reserved = nullptr;
561
- if (list->head != nullptr) {
562
- list->head->prev = storage;
563
- } else {
564
- list->tail = storage;
565
- }
566
- list->head = storage;
567
- list->count++;
568
- assert_valid_list(list);
569
- }
570
-
571
- static void link_tail(grpc_mdelem_list* list, grpc_linked_mdelem* storage) {
572
- assert_valid_list(list);
573
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(storage->md));
574
- storage->prev = list->tail;
575
- storage->next = nullptr;
576
- storage->reserved = nullptr;
577
- if (list->tail != nullptr) {
578
- list->tail->next = storage;
579
- } else {
580
- list->head = storage;
581
- }
582
- list->tail = storage;
583
- list->count++;
584
- assert_valid_list(list);
585
- }
586
-
587
- static void unlink_storage(grpc_mdelem_list* list,
588
- grpc_linked_mdelem* storage) {
589
- assert_valid_list(list);
590
- if (storage->prev != nullptr) {
591
- storage->prev->next = storage->next;
592
- } else {
593
- list->head = storage->next;
594
- }
595
- if (storage->next != nullptr) {
596
- storage->next->prev = storage->prev;
597
- } else {
598
- list->tail = storage->prev;
599
- }
600
- list->count--;
601
- assert_valid_list(list);
602
- }
1238
+ template <typename Which>
1239
+ using Value = metadata_detail::Value<Which>;
603
1240
 
604
1241
  // Table of known metadata types.
605
- Table<Value<Traits>...> table_;
606
- /** Metadata elements in this batch */
607
- grpc_mdelem_list list_;
608
- grpc_metadata_batch_callouts idx_;
609
- // Backing store for added metadata.
610
- ChunkedVector<grpc_linked_mdelem, 10> elem_storage_;
1242
+ PackedTable<Value<Traits>...> table_;
1243
+ metadata_detail::UnknownMap unknown_;
611
1244
  };
612
1245
 
613
- template <typename... Traits>
614
- void MetadataMap<Traits...>::AssertValidCallouts() {
615
- #ifndef NDEBUG
616
- for (grpc_linked_mdelem* l = list_.head; l != nullptr; l = l->next) {
617
- grpc_slice key_interned = grpc_slice_intern(GRPC_MDKEY(l->md));
618
- grpc_metadata_batch_callouts_index callout_idx =
619
- GRPC_BATCH_INDEX_OF(key_interned);
620
- if (callout_idx != GRPC_BATCH_CALLOUTS_COUNT) {
621
- GPR_ASSERT(idx_.array[callout_idx] == l);
622
- }
623
- grpc_slice_unref_internal(key_interned);
624
- }
625
- #endif
626
- }
627
-
628
- #ifndef NDEBUG
629
- template <typename... Traits>
630
- void MetadataMap<Traits...>::AssertOk() {
631
- assert_valid_list(&list_);
1246
+ // Ok/not-ok check for metadata maps that contain GrpcStatusMetadata, so that
1247
+ // they can be used as result types for TrySeq.
1248
+ template <typename Derived, typename... Args>
1249
+ inline bool IsStatusOk(const MetadataMap<Derived, Args...>& m) {
1250
+ return m.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN) ==
1251
+ GRPC_STATUS_OK;
632
1252
  }
633
- #endif /* NDEBUG */
634
1253
 
635
- template <typename... Traits>
636
- MetadataMap<Traits...>::MetadataMap(Arena* arena) : elem_storage_(arena) {
637
- memset(&list_, 0, sizeof(list_));
638
- memset(&idx_, 0, sizeof(idx_));
639
- }
1254
+ template <typename Derived, typename... Traits>
1255
+ MetadataMap<Derived, Traits...>::MetadataMap(Arena* arena) : unknown_(arena) {}
640
1256
 
641
- template <typename... Traits>
642
- MetadataMap<Traits...>::MetadataMap(MetadataMap&& other) noexcept
643
- : table_(std::move(other.table_)) {
644
- list_ = other.list_;
645
- idx_ = other.idx_;
646
- memset(&other.list_, 0, sizeof(list_));
647
- memset(&other.idx_, 0, sizeof(idx_));
648
- }
1257
+ template <typename Derived, typename... Traits>
1258
+ MetadataMap<Derived, Traits...>::MetadataMap(MetadataMap&& other) noexcept
1259
+ : table_(std::move(other.table_)), unknown_(std::move(other.unknown_)) {}
649
1260
 
650
- template <typename... Traits>
651
- MetadataMap<Traits...>& MetadataMap<Traits...>::operator=(
1261
+ // We never create MetadataMap directly, instead we create Derived, but we
1262
+ // want to be able to move it without redeclaring this.
1263
+ // NOLINTNEXTLINE(misc-unconventional-assign-operator)
1264
+ template <typename Derived, typename... Traits>
1265
+ Derived& MetadataMap<Derived, Traits...>::operator=(
652
1266
  MetadataMap&& other) noexcept {
653
- Clear();
654
1267
  table_ = std::move(other.table_);
655
- list_ = other.list_;
656
- idx_ = other.idx_;
657
- memset(&other.list_, 0, sizeof(list_));
658
- memset(&other.idx_, 0, sizeof(idx_));
659
- return *this;
660
- }
661
-
662
- template <typename... Traits>
663
- MetadataMap<Traits...>::~MetadataMap() {
664
- AssertValidCallouts();
665
- for (auto* l = list_.head; l; l = l->next) {
666
- GRPC_MDELEM_UNREF(l->md);
667
- }
668
- }
669
-
670
- template <typename... Traits>
671
- absl::optional<grpc_slice> MetadataMap<Traits...>::Remove(grpc_slice key) {
672
- for (auto* l = list_.head; l; l = l->next) {
673
- if (grpc_slice_eq(GRPC_MDKEY(l->md), key)) {
674
- auto out = grpc_slice_ref_internal(GRPC_MDVALUE(l->md));
675
- Remove(l);
676
- return out;
677
- }
678
- }
679
- return {};
1268
+ unknown_ = std::move(other.unknown_);
1269
+ return static_cast<Derived&>(*this);
680
1270
  }
681
1271
 
682
- template <typename... Traits>
683
- grpc_error_handle MetadataMap<Traits...>::LinkCallout(
684
- grpc_linked_mdelem* storage, grpc_metadata_batch_callouts_index idx) {
685
- AssertValidCallouts();
686
- GPR_DEBUG_ASSERT(idx >= 0 && idx < GRPC_BATCH_CALLOUTS_COUNT);
687
- if (GPR_LIKELY(idx_.array[idx] == nullptr)) {
688
- ++list_.default_count;
689
- idx_.array[idx] = storage;
690
- AssertValidCallouts();
691
- return GRPC_ERROR_NONE;
692
- }
693
- AssertValidCallouts();
694
- return error_with_md(storage->md);
695
- }
696
-
697
- template <typename... Traits>
698
- grpc_error_handle MetadataMap<Traits...>::MaybeLinkCallout(
699
- grpc_linked_mdelem* storage) {
700
- grpc_metadata_batch_callouts_index idx =
701
- GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
702
- if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
703
- return GRPC_ERROR_NONE;
704
- }
705
- return LinkCallout(storage, idx);
706
- }
707
-
708
- template <typename... Traits>
709
- void MetadataMap<Traits...>::MaybeUnlinkCallout(grpc_linked_mdelem* storage) {
710
- grpc_metadata_batch_callouts_index idx =
711
- GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md));
712
- if (idx == GRPC_BATCH_CALLOUTS_COUNT) {
713
- return;
714
- }
715
- --list_.default_count;
716
- GPR_DEBUG_ASSERT(idx_.array[idx] != nullptr);
717
- idx_.array[idx] = nullptr;
718
- }
719
-
720
- template <typename... Traits>
721
- grpc_error_handle MetadataMap<Traits...>::AddHead(grpc_linked_mdelem* storage,
722
- grpc_mdelem elem_to_add) {
723
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
724
- storage->md = elem_to_add;
725
- return LinkHead(storage);
726
- }
727
-
728
- template <typename... Traits>
729
- grpc_error_handle MetadataMap<Traits...>::LinkHead(
730
- grpc_linked_mdelem* storage) {
731
- AssertValidCallouts();
732
- grpc_error_handle err = MaybeLinkCallout(storage);
733
- if (err != GRPC_ERROR_NONE) {
734
- AssertValidCallouts();
735
- return err;
736
- }
737
- link_head(&list_, storage);
738
- AssertValidCallouts();
739
- return GRPC_ERROR_NONE;
740
- }
741
-
742
- // TODO(arjunroy): Need to revisit this and see what guarantees exist between
743
- // C-core and the internal-metadata subsystem. E.g. can we ensure a particular
744
- // metadata is never added twice, even in the presence of user supplied data?
745
- template <typename... Traits>
746
- grpc_error_handle MetadataMap<Traits...>::LinkHead(
747
- grpc_linked_mdelem* storage, grpc_metadata_batch_callouts_index idx) {
748
- GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
749
- AssertValidCallouts();
750
- grpc_error_handle err = LinkCallout(storage, idx);
751
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
752
- AssertValidCallouts();
753
- return err;
754
- }
755
- link_head(&list_, storage);
756
- AssertValidCallouts();
757
- return GRPC_ERROR_NONE;
758
- }
759
-
760
- template <typename... Traits>
761
- grpc_error_handle MetadataMap<Traits...>::AddTail(grpc_linked_mdelem* storage,
762
- grpc_mdelem elem_to_add) {
763
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
764
- storage->md = elem_to_add;
765
- return LinkTail(storage);
766
- }
767
-
768
- template <typename... Traits>
769
- grpc_error_handle MetadataMap<Traits...>::LinkTail(
770
- grpc_linked_mdelem* storage) {
771
- AssertValidCallouts();
772
- grpc_error_handle err = MaybeLinkCallout(storage);
773
- if (err != GRPC_ERROR_NONE) {
774
- AssertValidCallouts();
775
- return err;
776
- }
777
- link_tail(&list_, storage);
778
- AssertValidCallouts();
779
- return GRPC_ERROR_NONE;
780
- }
1272
+ template <typename Derived, typename... Traits>
1273
+ MetadataMap<Derived, Traits...>::~MetadataMap() = default;
781
1274
 
782
- template <typename... Traits>
783
- grpc_error_handle MetadataMap<Traits...>::LinkTail(
784
- grpc_linked_mdelem* storage, grpc_metadata_batch_callouts_index idx) {
785
- GPR_DEBUG_ASSERT(GRPC_BATCH_INDEX_OF(GRPC_MDKEY(storage->md)) == idx);
786
- AssertValidCallouts();
787
- grpc_error_handle err = LinkCallout(storage, idx);
788
- if (GPR_UNLIKELY(err != GRPC_ERROR_NONE)) {
789
- AssertValidCallouts();
790
- return err;
791
- }
792
- link_tail(&list_, storage);
793
- AssertValidCallouts();
794
- return GRPC_ERROR_NONE;
1275
+ template <typename Derived, typename... Traits>
1276
+ void MetadataMap<Derived, Traits...>::Clear() {
1277
+ table_.ClearAll();
1278
+ unknown_.Clear();
795
1279
  }
796
1280
 
797
- template <typename... Traits>
798
- void MetadataMap<Traits...>::Remove(grpc_linked_mdelem* storage) {
799
- AssertValidCallouts();
800
- MaybeUnlinkCallout(storage);
801
- unlink_storage(&list_, storage);
802
- GRPC_MDELEM_UNREF(storage->md);
803
- AssertValidCallouts();
1281
+ template <typename Derived, typename... Traits>
1282
+ size_t MetadataMap<Derived, Traits...>::TransportSize() const {
1283
+ metadata_detail::TransportSizeEncoder enc;
1284
+ Encode(&enc);
1285
+ return enc.size();
804
1286
  }
805
1287
 
806
- template <typename... Traits>
807
- void MetadataMap<Traits...>::Remove(grpc_metadata_batch_callouts_index idx) {
808
- AssertValidCallouts();
809
- if (idx_.array[idx] == nullptr) return;
810
- --list_.default_count;
811
- unlink_storage(&list_, idx_.array[idx]);
812
- GRPC_MDELEM_UNREF(idx_.array[idx]->md);
813
- idx_.array[idx] = nullptr;
814
- AssertValidCallouts();
815
- }
816
-
817
- template <typename... Traits>
818
- absl::optional<absl::string_view> MetadataMap<Traits...>::GetValue(
819
- absl::string_view target_key, std::string* concatenated_value) const {
820
- // Find all values for the specified key.
821
- absl::InlinedVector<absl::string_view, 1> values;
822
- for (grpc_linked_mdelem* md = list_.head; md != nullptr; md = md->next) {
823
- absl::string_view key = grpc_core::StringViewFromSlice(GRPC_MDKEY(md->md));
824
- absl::string_view value =
825
- grpc_core::StringViewFromSlice(GRPC_MDVALUE(md->md));
826
- if (target_key == key) values.push_back(value);
827
- }
828
- // If none found, no match.
829
- if (values.empty()) return absl::nullopt;
830
- // If exactly one found, return it as-is.
831
- if (values.size() == 1) return values.front();
832
- // If more than one found, concatenate the values, using
833
- // *concatenated_values as a temporary holding place for the
834
- // concatenated string.
835
- *concatenated_value = absl::StrJoin(values, ",");
836
- return *concatenated_value;
837
- }
838
-
839
- template <typename... Traits>
840
- grpc_error_handle MetadataMap<Traits...>::Substitute(
841
- grpc_linked_mdelem* storage, grpc_mdelem new_mdelem) {
842
- AssertValidCallouts();
843
- grpc_error_handle error = GRPC_ERROR_NONE;
844
- grpc_mdelem old_mdelem = storage->md;
845
- if (!grpc_slice_eq(GRPC_MDKEY(new_mdelem), GRPC_MDKEY(old_mdelem))) {
846
- MaybeUnlinkCallout(storage);
847
- storage->md = new_mdelem;
848
- error = MaybeLinkCallout(storage);
849
- if (error != GRPC_ERROR_NONE) {
850
- unlink_storage(&list_, storage);
851
- GRPC_MDELEM_UNREF(storage->md);
852
- }
853
- } else {
854
- storage->md = new_mdelem;
855
- }
856
- GRPC_MDELEM_UNREF(old_mdelem);
857
- AssertValidCallouts();
858
- return error;
859
- }
860
-
861
- template <typename... Traits>
862
- void MetadataMap<Traits...>::Clear() {
863
- // TODO(ctiller): implement this without deconstructing/reconstructing once
864
- // linked_mdelem is no longer a thing.
865
- auto* arena = elem_storage_.arena();
866
- this->~MetadataMap();
867
- new (this) MetadataMap(arena);
868
- }
869
-
870
- template <typename... Traits>
871
- size_t MetadataMap<Traits...>::TransportSize() const {
872
- size_t size = 0;
873
- for (grpc_linked_mdelem* elem = list_.head; elem != nullptr;
874
- elem = elem->next) {
875
- size += GRPC_MDELEM_LENGTH(elem->md);
876
- }
877
- return size;
878
- }
879
-
880
- template <typename... Traits>
881
- bool MetadataMap<Traits...>::ReplaceIfExists(grpc_slice key, grpc_slice value) {
882
- AssertValidCallouts();
883
- for (grpc_linked_mdelem* l = list_.head; l != nullptr; l = l->next) {
884
- if (grpc_slice_eq(GRPC_MDKEY(l->md), key)) {
885
- auto new_mdelem = grpc_mdelem_from_slices(key, value);
886
- GRPC_MDELEM_UNREF(l->md);
887
- l->md = new_mdelem;
888
- AssertValidCallouts();
889
- return true;
890
- }
891
- }
892
- AssertValidCallouts();
893
- return false;
1288
+ template <typename Derived, typename... Traits>
1289
+ Derived MetadataMap<Derived, Traits...>::Copy() const {
1290
+ Derived out(unknown_.arena());
1291
+ metadata_detail::CopySink<Derived> sink(&out);
1292
+ ForEach(&sink);
1293
+ return out;
894
1294
  }
895
1295
 
896
1296
  } // namespace grpc_core
897
1297
 
898
- using grpc_metadata_batch =
899
- grpc_core::MetadataMap<grpc_core::GrpcTimeoutMetadata,
900
- grpc_core::TeMetadata>;
901
-
902
- inline void grpc_metadata_batch_clear(grpc_metadata_batch* batch) {
903
- batch->Clear();
904
- }
905
- inline bool grpc_metadata_batch_is_empty(grpc_metadata_batch* batch) {
906
- return batch->empty();
907
- }
908
-
909
- /* Returns the transport size of the batch. */
910
- inline size_t grpc_metadata_batch_size(grpc_metadata_batch* batch) {
911
- return batch->TransportSize();
912
- }
913
-
914
- /** Remove \a storage from the batch, unreffing the mdelem contained */
915
- inline void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
916
- grpc_linked_mdelem* storage) {
917
- batch->Remove(storage);
918
- }
919
- inline void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
920
- grpc_metadata_batch_callouts_index idx) {
921
- batch->Remove(idx);
922
- }
923
-
924
- /** Substitute a new mdelem for an old value */
925
- inline grpc_error_handle grpc_metadata_batch_substitute(
926
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
927
- grpc_mdelem new_mdelem) {
928
- return batch->Substitute(storage, new_mdelem);
929
- }
930
-
931
- void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
932
- const grpc_slice& value);
933
-
934
- /** Returns metadata value(s) for the specified key.
935
- If the key is not present in the batch, returns absl::nullopt.
936
- If the key is present exactly once in the batch, returns a string_view of
937
- that value.
938
- If the key is present more than once in the batch, constructs a
939
- comma-concatenated string of all values in concatenated_value and returns a
940
- string_view of that string. */
941
- inline absl::optional<absl::string_view> grpc_metadata_batch_get_value(
942
- grpc_metadata_batch* batch, absl::string_view target_key,
943
- std::string* concatenated_value) {
944
- return batch->GetValue(target_key, concatenated_value);
945
- }
946
-
947
- /** Add \a storage to the beginning of \a batch. storage->md is
948
- assumed to be valid.
949
- \a storage is owned by the caller and must survive for the
950
- lifetime of batch. This usually means it should be around
951
- for the lifetime of the call. */
952
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_head(
953
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage) {
954
- return batch->LinkHead(storage);
955
- }
956
-
957
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_head(
958
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
959
- grpc_metadata_batch_callouts_index idx) {
960
- return batch->LinkHead(storage, idx);
961
- }
962
-
963
- /** Add \a storage to the end of \a batch. storage->md is
964
- assumed to be valid.
965
- \a storage is owned by the caller and must survive for the
966
- lifetime of batch. This usually means it should be around
967
- for the lifetime of the call. */
968
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_tail(
969
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage) {
970
- return batch->LinkTail(storage);
971
- }
972
-
973
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_link_tail(
974
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
975
- grpc_metadata_batch_callouts_index idx) {
976
- return batch->LinkTail(storage, idx);
977
- }
978
-
979
- /** Add \a elem_to_add as the first element in \a batch, using
980
- \a storage as backing storage for the linked list element.
981
- \a storage is owned by the caller and must survive for the
982
- lifetime of batch. This usually means it should be around
983
- for the lifetime of the call.
984
- Takes ownership of \a elem_to_add */
985
- inline grpc_error_handle grpc_metadata_batch_add_head(
986
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
987
- grpc_mdelem elem_to_add) {
988
- return batch->AddHead(storage, elem_to_add);
989
- }
990
-
991
- // TODO(arjunroy, roth): Remove redundant methods.
992
- // add/link_head/tail are almost identical.
993
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_head(
994
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
995
- grpc_metadata_batch_callouts_index idx) {
996
- return grpc_metadata_batch_link_head(batch, storage, idx);
997
- }
998
-
999
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_head(
1000
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1001
- grpc_mdelem elem_to_add, grpc_metadata_batch_callouts_index idx) {
1002
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
1003
- storage->md = elem_to_add;
1004
- return grpc_metadata_batch_add_head(batch, storage, idx);
1005
- }
1006
-
1007
- /** Add \a elem_to_add as the last element in \a batch, using
1008
- \a storage as backing storage for the linked list element.
1009
- \a storage is owned by the caller and must survive for the
1010
- lifetime of batch. This usually means it should be around
1011
- for the lifetime of the call.
1012
- Takes ownership of \a elem_to_add */
1013
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_add_tail(
1014
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1015
- grpc_mdelem elem_to_add) {
1016
- return batch->AddTail(storage, elem_to_add);
1017
- }
1018
-
1019
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
1020
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1021
- grpc_metadata_batch_callouts_index idx) {
1022
- return grpc_metadata_batch_link_tail(batch, storage, idx);
1023
- }
1024
-
1025
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
1026
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
1027
- grpc_mdelem elem_to_add, grpc_metadata_batch_callouts_index idx) {
1028
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
1029
- storage->md = elem_to_add;
1030
- return grpc_metadata_batch_add_tail(batch, storage, idx);
1031
- }
1032
-
1033
- typedef grpc_filtered_mdelem (*grpc_metadata_batch_filter_func)(
1034
- void* user_data, grpc_mdelem elem);
1035
- inline GRPC_MUST_USE_RESULT grpc_error_handle grpc_metadata_batch_filter(
1036
- grpc_metadata_batch* batch, grpc_metadata_batch_filter_func func,
1037
- void* user_data, const char* composite_error_string) {
1038
- return batch->Filter([=](grpc_mdelem elem) { return func(user_data, elem); },
1039
- composite_error_string);
1040
- }
1041
-
1042
- inline void grpc_metadata_batch_assert_ok(grpc_metadata_batch* batch) {
1043
- batch->AssertOk();
1044
- }
1045
-
1046
- /// Copies \a src to \a dst.
1047
- ///
1048
- /// For each mdelem in \a src, if the mdelem is of storage types
1049
- /// GRPC_MDELEM_STORAGE_INTERNED or GRPC_MDELEM_STORAGE_ALLOCATED,
1050
- /// refs the original mdelem for the copy. Otherwise, makes a new
1051
- /// mdelem that will hold its own refs to the key and value slices.
1052
- void grpc_metadata_batch_copy(const grpc_metadata_batch* src,
1053
- grpc_metadata_batch* dst);
1298
+ struct grpc_metadata_batch;
1299
+
1300
+ using grpc_metadata_batch_base = grpc_core::MetadataMap<
1301
+ grpc_metadata_batch,
1302
+ // Colon prefixed headers first
1303
+ grpc_core::HttpPathMetadata, grpc_core::HttpAuthorityMetadata,
1304
+ grpc_core::HttpMethodMetadata, grpc_core::HttpStatusMetadata,
1305
+ grpc_core::HttpSchemeMetadata,
1306
+ // Non-colon prefixed headers begin here
1307
+ grpc_core::ContentTypeMetadata, grpc_core::TeMetadata,
1308
+ grpc_core::GrpcEncodingMetadata, grpc_core::GrpcInternalEncodingRequest,
1309
+ grpc_core::GrpcAcceptEncodingMetadata, grpc_core::GrpcStatusMetadata,
1310
+ grpc_core::GrpcTimeoutMetadata, grpc_core::GrpcPreviousRpcAttemptsMetadata,
1311
+ grpc_core::GrpcRetryPushbackMsMetadata, grpc_core::UserAgentMetadata,
1312
+ grpc_core::GrpcMessageMetadata, grpc_core::HostMetadata,
1313
+ grpc_core::EndpointLoadMetricsBinMetadata,
1314
+ grpc_core::GrpcServerStatsBinMetadata, grpc_core::GrpcTraceBinMetadata,
1315
+ grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
1316
+ grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata,
1317
+ // Non-encodable things
1318
+ grpc_core::GrpcStreamNetworkState, grpc_core::PeerString,
1319
+ grpc_core::GrpcStatusContext, grpc_core::GrpcStatusFromWire,
1320
+ grpc_core::WaitForReady>;
1321
+
1322
+ struct grpc_metadata_batch : public grpc_metadata_batch_base {
1323
+ using grpc_metadata_batch_base::grpc_metadata_batch_base;
1324
+ };
1054
1325
 
1055
1326
  #endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */