grpc 1.41.1 → 1.44.0.pre2

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 (1156) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +185 -102
  3. data/include/grpc/event_engine/event_engine.h +118 -54
  4. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  5. data/include/grpc/event_engine/memory_allocator.h +226 -0
  6. data/include/grpc/event_engine/memory_request.h +57 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +304 -145
  9. data/include/grpc/grpc_security_constants.h +2 -14
  10. data/include/grpc/impl/codegen/compression_types.h +0 -2
  11. data/include/grpc/impl/codegen/grpc_types.h +6 -0
  12. data/include/grpc/impl/codegen/port_platform.h +14 -3
  13. data/src/core/ext/filters/client_channel/backend_metric.cc +21 -23
  14. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  17. data/src/core/ext/filters/client_channel/client_channel.cc +305 -335
  18. data/src/core/ext/filters/client_channel/client_channel.h +84 -36
  19. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  20. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  21. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -15
  22. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +5 -6
  24. data/src/core/ext/filters/client_channel/connector.h +18 -18
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +5 -5
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  28. data/src/core/ext/filters/client_channel/health/health_check_client.cc +25 -22
  29. data/src/core/ext/filters/client_channel/health/health_check_client.h +4 -4
  30. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +13 -15
  31. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  32. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  33. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  34. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +5 -18
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +198 -116
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +1 -2
  43. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +2 -2
  44. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  45. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +66 -36
  46. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +21 -12
  47. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +124 -74
  48. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2514 -0
  49. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +68 -62
  50. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
  51. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +18 -6
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +51 -96
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  55. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +101 -46
  56. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +11 -3
  57. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +101 -209
  58. data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
  59. data/src/core/ext/filters/client_channel/lb_policy.h +105 -63
  60. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  61. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +220 -88
  63. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
  64. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
  65. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +31 -50
  66. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +124 -240
  67. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +38 -25
  68. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
  69. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +90 -77
  70. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +13 -11
  71. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
  72. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +7 -16
  73. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
  74. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +423 -396
  75. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +2 -2
  76. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
  77. data/src/core/ext/filters/client_channel/retry_filter.cc +66 -131
  78. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
  79. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  80. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  81. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  82. data/src/core/ext/filters/client_channel/subchannel.cc +99 -161
  83. data/src/core/ext/filters/client_channel/subchannel.h +31 -52
  84. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  85. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  86. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  87. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  88. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  89. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  90. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +42 -53
  91. data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -9
  92. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  93. data/src/core/ext/filters/http/client/http_client_filter.cc +70 -160
  94. data/src/core/ext/filters/http/client_authority_filter.cc +19 -36
  95. data/src/core/ext/filters/http/http_filters_plugin.cc +51 -71
  96. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +46 -139
  97. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
  98. data/src/core/ext/filters/http/server/http_server_filter.cc +84 -183
  99. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  100. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  101. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  102. data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
  103. data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
  104. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
  105. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
  106. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  107. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  108. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +270 -0
  109. data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → filters/server_config_selector/server_config_selector_filter.h} +9 -7
  110. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +4 -23
  111. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +0 -2
  112. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +26 -28
  113. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +11 -14
  114. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +33 -53
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +146 -113
  116. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +2 -3
  117. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +9 -13
  118. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +6 -6
  119. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
  120. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +129 -278
  121. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +1 -2
  122. data/src/core/ext/transport/chttp2/transport/context_list.cc +2 -3
  123. data/src/core/ext/transport/chttp2/transport/context_list.h +2 -3
  124. data/src/core/ext/transport/chttp2/transport/flow_control.cc +26 -23
  125. data/src/core/ext/transport/chttp2/transport/flow_control.h +6 -6
  126. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -5
  127. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  128. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  129. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  130. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  131. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  132. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +384 -218
  133. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +89 -143
  134. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
  135. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
  136. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +201 -202
  137. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -9
  138. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +106 -26
  139. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +29 -44
  140. data/src/core/ext/transport/chttp2/transport/internal.h +10 -38
  141. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -179
  142. data/src/core/ext/transport/chttp2/transport/writing.cc +65 -127
  143. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  144. data/src/core/ext/transport/inproc/inproc_transport.cc +114 -161
  145. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  146. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +197 -165
  147. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +2 -0
  148. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +41 -0
  149. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +18 -0
  150. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +26 -2
  151. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  152. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +107 -82
  153. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +2 -0
  154. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +188 -160
  155. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +2 -0
  156. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +35 -22
  157. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +2 -0
  158. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +277 -208
  159. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +141 -1
  160. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +16 -5
  161. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +2 -0
  162. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +36 -25
  163. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +2 -0
  164. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +56 -39
  165. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +2 -0
  166. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +16 -5
  167. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +2 -0
  168. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +171 -125
  169. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +55 -4
  170. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +51 -36
  171. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +2 -0
  172. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +15 -4
  173. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +2 -0
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +25 -13
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +2 -0
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +114 -90
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +2 -0
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +90 -71
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +17 -0
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +17 -6
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +2 -0
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +121 -92
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +25 -0
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +13 -2
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +2 -0
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +21 -9
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +2 -0
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +18 -7
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +2 -0
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +22 -11
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +2 -0
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +17 -6
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +2 -0
  194. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +41 -27
  195. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +2 -0
  196. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +59 -44
  197. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +2 -0
  198. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +58 -43
  199. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +2 -0
  200. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +15 -4
  201. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +2 -0
  202. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +73 -57
  203. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +2 -0
  204. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +81 -64
  205. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +2 -0
  206. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +25 -14
  207. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +2 -0
  208. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +19 -7
  209. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +2 -0
  210. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +63 -45
  211. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +2 -0
  212. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +66 -47
  213. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +2 -0
  214. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +99 -78
  215. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +19 -0
  216. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +41 -28
  217. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +2 -0
  218. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +508 -442
  219. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +51 -19
  220. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +26 -13
  221. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +2 -0
  222. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +21 -9
  223. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +2 -0
  224. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +13 -2
  225. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +2 -0
  226. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +35 -20
  227. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +2 -0
  228. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +44 -31
  229. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +2 -0
  230. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
  231. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
  232. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +22 -11
  233. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +2 -0
  234. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +210 -181
  235. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +2 -0
  236. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +7 -0
  237. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +5 -3
  238. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +64 -48
  239. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +2 -0
  240. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +33 -20
  241. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +2 -0
  242. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +81 -65
  243. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +2 -0
  244. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +12 -1
  245. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +2 -0
  246. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +12 -1
  247. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +2 -0
  248. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +75 -58
  249. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +2 -0
  250. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +12 -1
  251. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +2 -0
  252. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +12 -1
  253. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +2 -0
  254. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +25 -13
  255. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +2 -0
  256. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +12 -1
  257. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +2 -0
  258. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +12 -1
  259. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +2 -0
  260. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +61 -46
  261. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +2 -0
  262. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +26 -12
  263. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +2 -0
  264. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +22 -10
  265. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +2 -0
  266. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +17 -6
  267. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +2 -0
  268. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +16 -5
  269. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +2 -0
  270. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +15 -4
  271. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +2 -0
  272. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +27 -14
  273. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +2 -0
  274. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +25 -13
  275. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +2 -0
  276. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +20 -8
  277. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +2 -0
  278. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +30 -17
  279. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +2 -0
  280. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +38 -21
  281. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +2 -0
  282. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +41 -26
  283. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +2 -0
  284. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +7 -0
  285. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +2 -0
  286. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +17 -5
  287. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +2 -0
  288. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +22 -9
  289. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +2 -0
  290. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +15 -4
  291. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +2 -0
  292. data/src/core/ext/upb-generated/google/api/annotations.upb.c +20 -0
  293. data/src/core/ext/upb-generated/google/api/annotations.upb.h +7 -0
  294. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +116 -93
  295. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +2 -0
  296. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.c +102 -0
  297. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/eval.upb.h +306 -0
  298. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.c +56 -0
  299. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/explain.upb.h +135 -0
  300. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +122 -98
  301. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +2 -0
  302. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.c +115 -0
  303. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/value.upb.h +371 -0
  304. data/src/core/ext/upb-generated/google/api/http.upb.c +35 -22
  305. data/src/core/ext/upb-generated/google/api/http.upb.h +2 -0
  306. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +14 -3
  307. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +2 -0
  308. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +247 -210
  309. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +2 -0
  310. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +14 -3
  311. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +2 -0
  312. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +12 -1
  313. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +2 -0
  314. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +37 -23
  315. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +2 -0
  316. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +14 -3
  317. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +2 -0
  318. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +37 -18
  319. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +2 -0
  320. data/src/core/ext/upb-generated/google/rpc/status.upb.c +17 -6
  321. data/src/core/ext/upb-generated/google/rpc/status.upb.h +2 -0
  322. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +26 -14
  323. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +2 -0
  324. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +105 -83
  325. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +2 -0
  326. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +20 -8
  327. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +2 -0
  328. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +16 -4
  329. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +2 -0
  330. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +65 -47
  331. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +34 -36
  332. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +68 -0
  333. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +156 -0
  334. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +67 -7
  335. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +27 -0
  336. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +27 -5
  337. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  338. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +19 -0
  339. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +7 -0
  340. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +27 -3
  341. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -0
  342. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +26 -2
  343. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  344. data/src/core/ext/upb-generated/validate/validate.upb.c +320 -251
  345. data/src/core/ext/upb-generated/validate/validate.upb.h +20 -0
  346. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +103 -0
  347. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +199 -0
  348. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +14 -3
  349. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +2 -0
  350. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +25 -13
  351. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +2 -0
  352. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +20 -8
  353. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +2 -0
  354. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +19 -8
  355. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +2 -0
  356. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +28 -16
  357. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +2 -0
  358. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +19 -8
  359. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +2 -0
  360. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +71 -0
  361. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +132 -0
  362. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +44 -0
  363. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +85 -0
  364. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +2 -49
  365. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +2 -2
  366. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +2 -7
  367. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +2 -35
  368. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +2 -41
  369. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +2 -11
  370. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +307 -336
  371. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  372. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +2 -7
  373. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +2 -7
  374. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +2 -19
  375. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +2 -7
  376. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +100 -138
  377. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  378. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +2 -15
  379. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +2 -7
  380. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +2 -9
  381. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +2 -33
  382. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +61 -77
  383. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +2 -7
  384. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +61 -79
  385. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +2 -7
  386. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +2 -9
  387. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +2 -7
  388. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +2 -7
  389. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +2 -7
  390. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +2 -13
  391. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +80 -99
  392. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +2 -15
  393. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +2 -7
  394. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +2 -17
  395. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +2 -19
  396. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +2 -7
  397. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +2 -9
  398. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +2 -21
  399. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +2 -23
  400. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
  401. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  402. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +2 -11
  403. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +325 -427
  404. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +2 -11
  405. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +2 -9
  406. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +2 -7
  407. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +2 -15
  408. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +2 -11
  409. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
  410. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  411. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +2 -7
  412. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +2 -43
  413. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +2 -2
  414. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +2 -17
  415. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +2 -11
  416. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +2 -17
  417. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +2 -7
  418. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +2 -7
  419. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +2 -19
  420. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +2 -7
  421. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +2 -7
  422. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +2 -9
  423. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +2 -7
  424. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +2 -7
  425. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +2 -15
  426. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +2 -13
  427. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +2 -9
  428. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +2 -7
  429. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +2 -7
  430. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +2 -7
  431. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +2 -11
  432. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +2 -9
  433. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +2 -9
  434. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +2 -11
  435. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +2 -19
  436. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +2 -15
  437. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +2 -2
  438. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +2 -9
  439. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +2 -11
  440. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +2 -7
  441. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +2 -2
  442. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  443. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  444. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
  445. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
  446. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
  447. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
  448. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  449. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  450. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
  451. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
  452. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +2 -11
  453. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +2 -7
  454. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +2 -59
  455. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +2 -7
  456. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +2 -7
  457. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +2 -13
  458. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +2 -7
  459. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +2 -23
  460. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +2 -7
  461. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +7 -15
  462. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +21 -30
  463. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +6 -5
  464. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +7 -10
  465. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +7 -11
  466. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +2 -51
  467. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  468. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  469. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +15 -19
  470. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +27 -33
  471. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +18 -24
  472. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +19 -23
  473. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +35 -41
  474. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +21 -25
  475. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  476. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  477. data/src/core/ext/xds/certificate_provider_registry.cc +1 -1
  478. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  479. data/src/core/ext/xds/upb_utils.h +65 -0
  480. data/src/core/ext/xds/xds_api.cc +159 -3468
  481. data/src/core/ext/xds/xds_api.h +57 -558
  482. data/src/core/ext/xds/xds_bootstrap.cc +189 -122
  483. data/src/core/ext/xds/xds_bootstrap.h +30 -15
  484. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  485. data/src/core/ext/xds/xds_certificate_provider.h +2 -2
  486. data/src/core/ext/xds/xds_channel_creds.cc +108 -0
  487. data/src/core/ext/xds/xds_channel_creds.h +50 -0
  488. data/src/core/ext/xds/xds_channel_stack_modifier.cc +112 -0
  489. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  490. data/src/core/ext/xds/xds_client.cc +751 -844
  491. data/src/core/ext/xds/xds_client.h +100 -143
  492. data/src/core/ext/xds/xds_client_stats.h +1 -1
  493. data/src/core/ext/xds/xds_cluster.cc +451 -0
  494. data/src/core/ext/xds/xds_cluster.h +111 -0
  495. data/src/core/ext/xds/xds_common_types.cc +388 -0
  496. data/src/core/ext/xds/xds_common_types.h +110 -0
  497. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  498. data/src/core/ext/xds/xds_endpoint.h +135 -0
  499. data/src/core/ext/xds/xds_http_filters.cc +5 -0
  500. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  501. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  502. data/src/core/ext/xds/xds_listener.cc +1036 -0
  503. data/src/core/ext/xds/xds_listener.h +220 -0
  504. data/src/core/ext/{filters/workarounds/workaround_cronet_compression_filter.h → xds/xds_resource_type.cc} +14 -8
  505. data/src/core/ext/xds/xds_resource_type.h +98 -0
  506. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  507. data/src/core/ext/xds/xds_route_config.cc +993 -0
  508. data/src/core/ext/xds/xds_route_config.h +215 -0
  509. data/src/core/ext/xds/xds_routing.cc +250 -0
  510. data/src/core/ext/xds/xds_routing.h +101 -0
  511. data/src/core/ext/xds/xds_server_config_fetcher.cc +1061 -289
  512. data/src/core/lib/address_utils/parse_address.cc +22 -0
  513. data/src/core/lib/address_utils/parse_address.h +5 -0
  514. data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
  515. data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
  516. data/src/core/lib/avl/avl.h +389 -88
  517. data/src/core/lib/backoff/backoff.cc +6 -32
  518. data/src/core/lib/backoff/backoff.h +3 -3
  519. data/src/core/lib/channel/channel_args.cc +25 -8
  520. data/src/core/lib/channel/channel_args.h +11 -1
  521. data/src/core/lib/channel/channel_args_preconditioning.cc +47 -0
  522. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  523. data/src/core/lib/channel/channel_stack.cc +8 -0
  524. data/src/core/lib/channel/channel_stack.h +1 -1
  525. data/src/core/lib/channel/channel_stack_builder.cc +8 -14
  526. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  527. data/src/core/lib/channel/channel_trace.cc +7 -7
  528. data/src/core/lib/channel/channel_trace.h +1 -1
  529. data/src/core/lib/channel/channelz.cc +4 -3
  530. data/src/core/lib/channel/channelz.h +2 -2
  531. data/src/core/lib/channel/channelz_registry.cc +1 -1
  532. data/src/core/lib/channel/channelz_registry.h +1 -1
  533. data/src/core/lib/channel/connected_channel.cc +1 -3
  534. data/src/core/lib/channel/connected_channel.h +1 -2
  535. data/src/core/lib/compression/compression.cc +21 -113
  536. data/src/core/lib/compression/compression_internal.cc +142 -202
  537. data/src/core/lib/compression/compression_internal.h +64 -69
  538. data/src/core/lib/compression/message_compress.cc +11 -11
  539. data/src/core/lib/compression/message_compress.h +2 -2
  540. data/src/core/lib/config/core_configuration.cc +46 -2
  541. data/src/core/lib/config/core_configuration.h +50 -1
  542. data/src/core/lib/debug/stats.cc +1 -1
  543. data/src/core/lib/debug/stats_data.cc +13 -13
  544. data/src/core/lib/debug/trace.h +2 -2
  545. data/src/core/lib/event_engine/{endpoint_config.cc → channel_args_endpoint_config.cc} +2 -1
  546. data/src/core/lib/event_engine/{endpoint_config_internal.h → channel_args_endpoint_config.h} +3 -3
  547. data/src/core/lib/event_engine/event_engine.cc +0 -13
  548. data/src/core/lib/event_engine/event_engine_factory.cc +49 -0
  549. data/src/core/lib/event_engine/event_engine_factory.h +33 -0
  550. data/src/core/lib/event_engine/memory_allocator.cc +70 -0
  551. data/src/core/lib/gpr/atm.cc +1 -1
  552. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  553. data/src/core/lib/gpr/string.cc +2 -2
  554. data/src/core/lib/gpr/tls.h +7 -1
  555. data/src/core/lib/gpr/useful.h +83 -32
  556. data/src/core/lib/gprpp/bitset.h +45 -16
  557. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  558. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  559. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  560. data/src/core/lib/gprpp/global_config_env.cc +7 -7
  561. data/src/core/lib/gprpp/global_config_env.h +2 -2
  562. data/src/core/lib/gprpp/manual_constructor.h +2 -3
  563. data/src/core/lib/gprpp/memory.h +6 -0
  564. data/src/core/lib/gprpp/orphanable.h +1 -1
  565. data/src/core/lib/gprpp/ref_counted.h +1 -1
  566. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  567. data/src/core/lib/gprpp/status_helper.cc +35 -23
  568. data/src/core/lib/gprpp/status_helper.h +14 -16
  569. data/src/core/lib/gprpp/table.h +434 -0
  570. data/src/core/lib/http/httpcli.cc +215 -202
  571. data/src/core/lib/http/httpcli.h +17 -27
  572. data/src/core/lib/http/parser.cc +2 -2
  573. data/src/core/lib/iomgr/buffer_list.cc +9 -9
  574. data/src/core/lib/iomgr/buffer_list.h +13 -13
  575. data/src/core/lib/iomgr/call_combiner.cc +44 -16
  576. data/src/core/lib/iomgr/closure.h +29 -9
  577. data/src/core/lib/iomgr/combiner.cc +31 -24
  578. data/src/core/lib/iomgr/endpoint.h +0 -1
  579. data/src/core/lib/iomgr/endpoint_cfstream.cc +14 -30
  580. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  581. data/src/core/lib/iomgr/endpoint_pair_posix.cc +9 -11
  582. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -14
  583. data/src/core/lib/iomgr/error.cc +115 -52
  584. data/src/core/lib/iomgr/error.h +53 -9
  585. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  586. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  587. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  588. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  589. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  590. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  591. data/src/core/lib/iomgr/event_engine/endpoint.cc +5 -6
  592. data/src/core/lib/iomgr/event_engine/iomgr.cc +9 -28
  593. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  594. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
  595. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
  596. data/src/core/lib/iomgr/event_engine/resolver.cc +68 -46
  597. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  598. data/src/core/lib/iomgr/event_engine/tcp.cc +16 -13
  599. data/src/core/lib/iomgr/event_engine/timer.cc +10 -4
  600. data/src/core/lib/iomgr/exec_ctx.cc +23 -18
  601. data/src/core/lib/iomgr/exec_ctx.h +11 -11
  602. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  603. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  604. data/src/core/lib/iomgr/executor.cc +26 -34
  605. data/src/core/lib/iomgr/executor.h +1 -1
  606. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  607. data/src/core/lib/iomgr/iomgr.cc +3 -1
  608. data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
  609. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  610. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  611. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  612. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
  613. data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
  614. data/src/core/lib/iomgr/load_file.cc +2 -2
  615. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  616. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  617. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  618. data/src/core/lib/iomgr/port.h +2 -2
  619. data/src/core/lib/iomgr/resolve_address.cc +5 -24
  620. data/src/core/lib/iomgr/resolve_address.h +47 -44
  621. data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
  622. data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
  623. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  624. data/src/core/lib/iomgr/resolve_address_posix.cc +87 -73
  625. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  626. data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
  627. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  628. data/src/core/lib/iomgr/resolved_address.h +39 -0
  629. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  630. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  631. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  632. data/src/core/lib/iomgr/tcp_client.cc +2 -4
  633. data/src/core/lib/iomgr/tcp_client.h +1 -3
  634. data/src/core/lib/iomgr/tcp_client_cfstream.cc +6 -12
  635. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -11
  636. data/src/core/lib/iomgr/tcp_client_posix.cc +16 -41
  637. data/src/core/lib/iomgr/tcp_client_posix.h +3 -4
  638. data/src/core/lib/iomgr/tcp_client_windows.cc +3 -13
  639. data/src/core/lib/iomgr/tcp_custom.cc +9 -36
  640. data/src/core/lib/iomgr/tcp_custom.h +0 -1
  641. data/src/core/lib/iomgr/tcp_posix.cc +32 -38
  642. data/src/core/lib/iomgr/tcp_posix.h +1 -3
  643. data/src/core/lib/iomgr/tcp_server.cc +4 -6
  644. data/src/core/lib/iomgr/tcp_server.h +6 -8
  645. data/src/core/lib/iomgr/tcp_server_custom.cc +7 -16
  646. data/src/core/lib/iomgr/tcp_server_posix.cc +20 -25
  647. data/src/core/lib/iomgr/tcp_server_utils_posix.h +19 -18
  648. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
  649. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
  650. data/src/core/lib/iomgr/tcp_server_windows.cc +9 -17
  651. data/src/core/lib/iomgr/tcp_windows.cc +4 -9
  652. data/src/core/lib/iomgr/tcp_windows.h +1 -2
  653. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  654. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  655. data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
  656. data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
  657. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
  658. data/src/core/lib/iomgr/work_serializer.cc +115 -44
  659. data/src/core/lib/iomgr/work_serializer.h +16 -4
  660. data/src/core/lib/json/json_reader.cc +83 -35
  661. data/src/core/lib/json/json_util.cc +69 -1
  662. data/src/core/lib/json/json_util.h +57 -99
  663. data/src/core/lib/json/json_writer.cc +0 -3
  664. data/src/core/lib/matchers/matchers.cc +1 -1
  665. data/src/core/lib/promise/activity.cc +115 -0
  666. data/src/core/lib/promise/activity.h +528 -0
  667. data/src/core/lib/promise/context.h +86 -0
  668. data/src/core/lib/promise/detail/basic_seq.h +407 -0
  669. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  670. data/src/core/lib/promise/detail/promise_like.h +85 -0
  671. data/src/core/lib/promise/detail/status.h +49 -0
  672. data/src/core/lib/promise/detail/switch.h +1455 -0
  673. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  674. data/src/core/lib/promise/loop.h +108 -0
  675. data/src/core/lib/promise/map.h +88 -0
  676. data/src/core/lib/promise/poll.h +60 -0
  677. data/src/core/lib/promise/race.h +84 -0
  678. data/src/core/lib/promise/seq.h +71 -0
  679. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  680. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  681. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +12 -5
  682. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +15 -17
  683. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +5 -7
  684. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
  685. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  686. data/src/core/lib/resource_quota/api.cc +108 -0
  687. data/src/core/lib/resource_quota/api.h +40 -0
  688. data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
  689. data/src/core/lib/{gprpp → resource_quota}/arena.h +32 -11
  690. data/src/core/lib/resource_quota/memory_quota.cc +454 -0
  691. data/src/core/lib/resource_quota/memory_quota.h +421 -0
  692. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  693. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  694. data/src/core/lib/{transport/authority_override.h → resource_quota/thread_quota.cc} +22 -16
  695. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  696. data/src/core/lib/resource_quota/trace.cc +19 -0
  697. data/src/core/lib/resource_quota/trace.h +24 -0
  698. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  699. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  700. data/src/core/lib/security/authorization/evaluate_args.cc +41 -30
  701. data/src/core/lib/security/authorization/evaluate_args.h +3 -1
  702. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  703. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  704. data/src/core/lib/security/authorization/matchers.cc +227 -0
  705. data/src/core/lib/security/authorization/matchers.h +211 -0
  706. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  707. data/src/core/lib/security/authorization/rbac_policy.h +170 -0
  708. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +15 -1
  709. data/src/core/lib/security/context/security_context.cc +8 -4
  710. data/src/core/lib/security/context/security_context.h +1 -1
  711. data/src/core/lib/security/credentials/composite/composite_credentials.cc +6 -6
  712. data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
  713. data/src/core/lib/security/credentials/credentials.cc +4 -2
  714. data/src/core/lib/security/credentials/credentials.h +16 -21
  715. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +8 -12
  716. data/src/core/lib/security/credentials/external/external_account_credentials.cc +57 -24
  717. data/src/core/lib/security/credentials/external/external_account_credentials.h +3 -7
  718. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -4
  719. data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
  720. data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
  721. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +4 -9
  722. data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
  723. data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
  724. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
  725. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +17 -29
  726. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
  727. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +11 -24
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +53 -70
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +8 -9
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
  733. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +11 -12
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +7 -8
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  737. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +15 -88
  738. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +26 -82
  739. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  740. data/src/core/lib/security/credentials/xds/xds_credentials.cc +28 -33
  741. data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
  742. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +3 -3
  743. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +2 -2
  744. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +5 -6
  745. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +2 -2
  746. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +7 -7
  747. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +1 -2
  748. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -1
  749. data/src/core/lib/security/security_connector/security_connector.cc +9 -8
  750. data/src/core/lib/security/security_connector/security_connector.h +6 -2
  751. data/src/core/lib/security/security_connector/ssl_utils.cc +25 -27
  752. data/src/core/lib/security/security_connector/ssl_utils.h +6 -15
  753. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +347 -198
  754. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +64 -43
  755. data/src/core/lib/security/transport/auth_filters.h +7 -0
  756. data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
  757. data/src/core/lib/security/transport/security_handshaker.cc +75 -45
  758. data/src/core/lib/security/transport/server_auth_filter.cc +40 -37
  759. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  760. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.cc +2 -2
  761. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config.h +4 -4
  762. data/src/core/lib/service_config/service_config_call_data.h +72 -0
  763. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +3 -3
  764. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.h +8 -6
  765. data/src/core/lib/slice/percent_encoding.cc +30 -86
  766. data/src/core/lib/slice/percent_encoding.h +5 -11
  767. data/src/core/lib/slice/slice.cc +10 -24
  768. data/src/core/lib/slice/slice.h +371 -0
  769. data/src/core/lib/{compression/stream_compression_gzip.h → slice/slice_api.cc} +18 -7
  770. data/src/core/lib/slice/slice_buffer.cc +9 -5
  771. data/src/core/lib/slice/slice_intern.cc +4 -107
  772. data/src/core/lib/slice/slice_internal.h +2 -246
  773. data/src/core/lib/slice/slice_refcount.cc +17 -0
  774. data/src/core/lib/slice/slice_refcount.h +116 -0
  775. data/src/core/lib/slice/slice_refcount_base.h +165 -0
  776. data/src/core/lib/slice/slice_split.cc +100 -0
  777. data/src/core/lib/slice/slice_split.h +40 -0
  778. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  779. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  780. data/src/core/lib/surface/builtins.cc +49 -0
  781. data/src/core/lib/surface/builtins.h +26 -0
  782. data/src/core/lib/surface/call.cc +249 -482
  783. data/src/core/lib/surface/call.h +4 -10
  784. data/src/core/lib/surface/channel.cc +53 -93
  785. data/src/core/lib/surface/channel.h +6 -25
  786. data/src/core/lib/surface/channel_init.cc +23 -76
  787. data/src/core/lib/surface/channel_init.h +52 -44
  788. data/src/core/lib/surface/completion_queue.cc +8 -7
  789. data/src/core/lib/surface/init.cc +0 -42
  790. data/src/core/lib/surface/init_secure.cc +17 -14
  791. data/src/core/lib/surface/lame_client.cc +41 -28
  792. data/src/core/lib/surface/lame_client.h +1 -1
  793. data/src/core/lib/surface/server.cc +46 -55
  794. data/src/core/lib/surface/server.h +27 -21
  795. data/src/core/lib/surface/validate_metadata.cc +7 -4
  796. data/src/core/lib/surface/version.cc +2 -2
  797. data/src/core/lib/transport/bdp_estimator.cc +2 -2
  798. data/src/core/lib/transport/byte_stream.cc +4 -0
  799. data/src/core/lib/transport/error_utils.cc +42 -17
  800. data/src/core/lib/transport/error_utils.h +15 -1
  801. data/src/core/lib/transport/metadata_batch.h +1167 -176
  802. data/src/core/lib/transport/{authority_override.cc → parsed_metadata.cc} +14 -17
  803. data/src/core/lib/transport/parsed_metadata.h +385 -0
  804. data/src/core/lib/transport/pid_controller.cc +4 -4
  805. data/src/core/lib/transport/timeout_encoding.cc +200 -66
  806. data/src/core/lib/transport/timeout_encoding.h +40 -10
  807. data/src/core/lib/transport/transport.cc +8 -31
  808. data/src/core/lib/transport/transport.h +1 -2
  809. data/src/core/lib/transport/transport_op_string.cc +7 -20
  810. data/src/core/lib/uri/uri_parser.cc +233 -63
  811. data/src/core/lib/uri/uri_parser.h +38 -23
  812. data/src/core/plugin_registry/grpc_plugin_registry.cc +69 -45
  813. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  814. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  815. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  816. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -4
  817. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  818. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  819. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  820. data/src/core/tsi/fake_transport_security.cc +15 -7
  821. data/src/core/tsi/local_transport_security.cc +43 -80
  822. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  823. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  824. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  825. data/src/core/tsi/ssl_transport_security.cc +93 -16
  826. data/src/core/tsi/ssl_transport_security.h +19 -6
  827. data/src/core/tsi/transport_security.cc +12 -0
  828. data/src/core/tsi/transport_security.h +16 -1
  829. data/src/core/tsi/transport_security_interface.h +26 -0
  830. data/src/ruby/ext/grpc/extconf.rb +21 -11
  831. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -10
  832. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +18 -15
  833. data/src/ruby/lib/grpc/version.rb +1 -1
  834. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  835. data/src/ruby/spec/client_server_spec.rb +1 -1
  836. data/third_party/abseil-cpp/absl/algorithm/container.h +101 -91
  837. data/third_party/abseil-cpp/absl/base/attributes.h +64 -31
  838. data/third_party/abseil-cpp/absl/base/config.h +67 -37
  839. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +1 -26
  840. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  841. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +3 -1
  842. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +2 -0
  843. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +69 -0
  844. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  845. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +15 -10
  846. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +16 -0
  847. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  848. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  849. data/third_party/abseil-cpp/absl/container/fixed_array.h +0 -5
  850. data/third_party/abseil-cpp/absl/container/inlined_vector.h +105 -97
  851. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  852. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +18 -102
  853. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +37 -78
  854. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +388 -423
  855. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  856. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +14 -8
  857. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +251 -120
  858. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +11 -1
  859. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  860. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  861. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +12 -5
  862. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  863. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  864. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  865. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +8 -2
  866. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  867. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  868. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  869. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +14 -0
  870. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  871. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  872. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  873. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +15 -16
  874. data/third_party/abseil-cpp/absl/hash/internal/hash.h +88 -37
  875. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.cc → low_level_hash.cc} +23 -11
  876. data/third_party/abseil-cpp/absl/hash/internal/{wyhash.h → low_level_hash.h} +14 -12
  877. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  878. data/third_party/abseil-cpp/absl/meta/type_traits.h +32 -2
  879. data/third_party/abseil-cpp/absl/numeric/int128.cc +3 -10
  880. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  881. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  882. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  883. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  884. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  885. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  886. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  887. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  888. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  889. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  890. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  891. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  892. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  893. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  894. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  895. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  896. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  897. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  898. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  899. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  900. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  901. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  902. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  903. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  904. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  905. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  906. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  907. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  908. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  909. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  910. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  911. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  912. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  913. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  914. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  915. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  916. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  917. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  918. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  919. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  920. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  921. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  922. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  923. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  924. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  925. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  926. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  927. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  928. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  929. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  930. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  931. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +5 -5
  932. data/third_party/abseil-cpp/absl/status/status.cc +9 -17
  933. data/third_party/abseil-cpp/absl/status/status.h +19 -15
  934. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  935. data/third_party/abseil-cpp/absl/status/statusor.h +31 -21
  936. data/third_party/abseil-cpp/absl/strings/charconv.cc +3 -3
  937. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  938. data/third_party/abseil-cpp/absl/strings/cord.cc +453 -359
  939. data/third_party/abseil-cpp/absl/strings/cord.h +197 -70
  940. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +1 -1
  941. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +6 -0
  942. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +140 -63
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  951. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +7 -7
  952. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +55 -181
  953. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +42 -24
  954. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +4 -0
  955. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  956. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  957. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  958. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  959. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  960. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  961. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  962. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  963. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  964. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  965. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +8 -0
  966. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +3 -4
  967. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +1 -1
  968. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  969. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  970. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +62 -73
  971. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +24 -16
  972. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +35 -35
  973. data/third_party/abseil-cpp/absl/strings/numbers.cc +1 -1
  974. data/third_party/abseil-cpp/absl/strings/numbers.h +34 -0
  975. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  976. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  977. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  978. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  979. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  980. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  981. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  982. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  983. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +1 -1
  984. data/third_party/abseil-cpp/absl/synchronization/mutex.h +3 -3
  985. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  986. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  987. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  988. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  989. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  990. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  991. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +1 -1
  992. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  993. data/third_party/abseil-cpp/absl/time/time.h +67 -36
  994. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  995. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  996. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  997. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  998. data/third_party/boringssl-with-bazel/err_data.c +681 -677
  999. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +19 -11
  1000. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +20 -21
  1001. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +41 -30
  1002. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +104 -114
  1003. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +1 -1
  1004. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +59 -47
  1005. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1006. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1007. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +41 -0
  1008. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +48 -272
  1009. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
  1010. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1011. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
  1012. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1013. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1014. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1015. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1016. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1017. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1018. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1019. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
  1020. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1021. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1022. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
  1023. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +3 -6
  1024. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  1025. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +7 -7
  1026. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  1027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  1028. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  1029. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
  1030. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  1031. data/third_party/boringssl-with-bazel/src/crypto/mem.c +18 -0
  1032. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
  1033. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1034. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1035. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  1036. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1037. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -23
  1038. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1039. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1040. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +8 -2
  1041. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +216 -11
  1042. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -1
  1043. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  1044. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1045. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -1
  1046. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1047. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +1 -1
  1048. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +1 -0
  1049. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +0 -1
  1050. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +21 -4
  1051. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +0 -1
  1052. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1019 -274
  1053. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +3 -3
  1054. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
  1055. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1056. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
  1057. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1058. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1059. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1060. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +8 -10
  1061. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +29 -55
  1062. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  1063. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -13
  1064. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
  1065. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1066. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +24 -28
  1067. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +31 -13
  1068. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +491 -58
  1069. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -564
  1070. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +4 -3
  1071. data/third_party/boringssl-with-bazel/src/ssl/internal.h +3 -3
  1072. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
  1073. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +4 -0
  1074. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +0 -1
  1075. data/third_party/re2/re2/compile.cc +91 -109
  1076. data/third_party/re2/re2/dfa.cc +27 -39
  1077. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1078. data/third_party/re2/re2/filtered_re2.h +10 -5
  1079. data/third_party/re2/re2/nfa.cc +1 -1
  1080. data/third_party/re2/re2/parse.cc +42 -23
  1081. data/third_party/re2/re2/perl_groups.cc +34 -34
  1082. data/third_party/re2/re2/prefilter.cc +3 -2
  1083. data/third_party/re2/re2/prog.cc +182 -4
  1084. data/third_party/re2/re2/prog.h +28 -9
  1085. data/third_party/re2/re2/re2.cc +87 -118
  1086. data/third_party/re2/re2/re2.h +156 -141
  1087. data/third_party/re2/re2/regexp.cc +12 -5
  1088. data/third_party/re2/re2/regexp.h +8 -2
  1089. data/third_party/re2/re2/set.cc +31 -9
  1090. data/third_party/re2/re2/set.h +9 -4
  1091. data/third_party/re2/re2/simplify.cc +11 -3
  1092. data/third_party/re2/re2/tostring.cc +1 -1
  1093. data/third_party/re2/re2/walker-inl.h +1 -1
  1094. data/third_party/re2/util/mutex.h +2 -2
  1095. data/third_party/re2/util/pcre.h +3 -3
  1096. data/third_party/upb/upb/decode.c +309 -178
  1097. data/third_party/upb/upb/decode_fast.c +1 -1
  1098. data/third_party/upb/upb/decode_internal.h +1 -0
  1099. data/third_party/upb/upb/def.c +330 -85
  1100. data/third_party/upb/upb/def.h +45 -14
  1101. data/third_party/upb/upb/def.hpp +17 -4
  1102. data/third_party/upb/upb/encode.c +100 -40
  1103. data/third_party/upb/upb/msg.c +22 -9
  1104. data/third_party/upb/upb/msg_internal.h +90 -8
  1105. data/third_party/upb/upb/reflection.c +98 -58
  1106. data/third_party/upb/upb/reflection.h +6 -2
  1107. data/third_party/upb/upb/text_encode.c +3 -3
  1108. data/third_party/upb/upb/upb.c +8 -0
  1109. data/third_party/xxhash/xxhash.h +607 -352
  1110. metadata +259 -115
  1111. data/include/grpc/event_engine/slice_allocator.h +0 -71
  1112. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  1113. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  1114. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1115. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1116. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1117. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1118. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  1119. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  1120. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
  1121. data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
  1122. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1123. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1124. data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
  1125. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1126. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  1127. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1128. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  1129. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1130. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1131. data/src/core/lib/avl/avl.cc +0 -306
  1132. data/src/core/lib/compression/algorithm_metadata.h +0 -62
  1133. data/src/core/lib/compression/compression_args.cc +0 -136
  1134. data/src/core/lib/compression/compression_args.h +0 -56
  1135. data/src/core/lib/compression/stream_compression.cc +0 -81
  1136. data/src/core/lib/compression/stream_compression.h +0 -117
  1137. data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
  1138. data/src/core/lib/compression/stream_compression_identity.cc +0 -91
  1139. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1140. data/src/core/lib/gprpp/match.h +0 -73
  1141. data/src/core/lib/gprpp/overload.h +0 -59
  1142. data/src/core/lib/iomgr/event_engine/iomgr.h +0 -42
  1143. data/src/core/lib/iomgr/resource_quota.cc +0 -1104
  1144. data/src/core/lib/iomgr/resource_quota.h +0 -226
  1145. data/src/core/lib/iomgr/udp_server.cc +0 -747
  1146. data/src/core/lib/iomgr/udp_server.h +0 -103
  1147. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
  1148. data/src/core/lib/transport/metadata.cc +0 -693
  1149. data/src/core/lib/transport/metadata.h +0 -448
  1150. data/src/core/lib/transport/metadata_batch.cc +0 -430
  1151. data/src/core/lib/transport/static_metadata.cc +0 -1249
  1152. data/src/core/lib/transport/static_metadata.h +0 -604
  1153. data/src/core/lib/transport/status_metadata.cc +0 -62
  1154. data/src/core/lib/transport/status_metadata.h +0 -48
  1155. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  1156. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
@@ -23,199 +23,1190 @@
23
23
 
24
24
  #include <stdbool.h>
25
25
 
26
+ #include <limits>
27
+
28
+ #include "absl/strings/match.h"
29
+ #include "absl/strings/str_join.h"
26
30
  #include "absl/types/optional.h"
27
31
 
28
32
  #include <grpc/grpc.h>
29
33
  #include <grpc/slice.h>
34
+ #include <grpc/status.h>
30
35
  #include <grpc/support/time.h>
31
36
 
37
+ #include "src/core/lib/compression/compression_internal.h"
38
+ #include "src/core/lib/gprpp/chunked_vector.h"
39
+ #include "src/core/lib/gprpp/table.h"
32
40
  #include "src/core/lib/iomgr/exec_ctx.h"
33
- #include "src/core/lib/transport/metadata.h"
34
- #include "src/core/lib/transport/static_metadata.h"
35
-
36
- typedef struct grpc_linked_mdelem {
37
- grpc_linked_mdelem() {}
38
-
39
- grpc_mdelem md;
40
- struct grpc_linked_mdelem* next = nullptr;
41
- struct grpc_linked_mdelem* prev = nullptr;
42
- void* reserved;
43
- } grpc_linked_mdelem;
44
-
45
- typedef struct grpc_mdelem_list {
46
- size_t count;
47
- size_t default_count; // Number of default keys.
48
- grpc_linked_mdelem* head;
49
- grpc_linked_mdelem* tail;
50
- } grpc_mdelem_list;
51
-
52
- typedef struct grpc_metadata_batch {
53
- /** Metadata elements in this batch */
54
- grpc_mdelem_list list;
55
- grpc_metadata_batch_callouts idx;
56
- /** Used to calculate grpc-timeout at the point of sending,
57
- or GRPC_MILLIS_INF_FUTURE if this batch does not need to send a
58
- grpc-timeout */
59
- grpc_millis deadline;
41
+ #include "src/core/lib/slice/slice.h"
42
+ #include "src/core/lib/surface/validate_metadata.h"
43
+ #include "src/core/lib/transport/parsed_metadata.h"
44
+ #include "src/core/lib/transport/timeout_encoding.h"
45
+
46
+ namespace grpc_core {
47
+
48
+ // grpc-timeout metadata trait.
49
+ // ValueType is defined as grpc_millis - an absolute timestamp (i.e. a
50
+ // deadline!), that is converted to a duration by transports before being
51
+ // sent.
52
+ // TODO(ctiller): Move this elsewhere. During the transition we need to be able
53
+ // to name this in MetadataMap, but ultimately once the transition is done we
54
+ // should not need to.
55
+ struct GrpcTimeoutMetadata {
56
+ static constexpr bool kRepeatable = false;
57
+ using ValueType = grpc_millis;
58
+ using MementoType = grpc_millis;
59
+ static absl::string_view key() { return "grpc-timeout"; }
60
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
61
+ auto timeout = ParseTimeout(value);
62
+ if (!timeout.has_value()) {
63
+ on_error("invalid value", value);
64
+ return GRPC_MILLIS_INF_FUTURE;
65
+ }
66
+ return *timeout;
67
+ }
68
+ static ValueType MementoToValue(MementoType timeout) {
69
+ if (timeout == GRPC_MILLIS_INF_FUTURE) {
70
+ return GRPC_MILLIS_INF_FUTURE;
71
+ }
72
+ return ExecCtx::Get()->Now() + timeout;
73
+ }
74
+ static Slice Encode(ValueType x) {
75
+ return Timeout::FromDuration(x - ExecCtx::Get()->Now()).Encode();
76
+ }
77
+ static MementoType DisplayValue(MementoType x) { return x; }
78
+ };
79
+
80
+ // TE metadata trait.
81
+ struct TeMetadata {
82
+ static constexpr bool kRepeatable = false;
83
+ // HTTP2 says that TE can either be empty or "trailers".
84
+ // Empty means this trait is not included, "trailers" means kTrailers, and
85
+ // kInvalid is used to remember an invalid value.
86
+ enum ValueType : uint8_t {
87
+ kTrailers,
88
+ kInvalid,
89
+ };
90
+ using MementoType = ValueType;
91
+ static absl::string_view key() { return "te"; }
92
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
93
+ auto out = kInvalid;
94
+ if (value == "trailers") {
95
+ out = kTrailers;
96
+ } else {
97
+ on_error("invalid value", value);
98
+ }
99
+ return out;
100
+ }
101
+ static ValueType MementoToValue(MementoType te) { return te; }
102
+ static StaticSlice Encode(ValueType x) {
103
+ GPR_ASSERT(x == kTrailers);
104
+ return StaticSlice::FromStaticString("trailers");
105
+ }
106
+ static const char* DisplayValue(MementoType te) {
107
+ switch (te) {
108
+ case ValueType::kTrailers:
109
+ return "trailers";
110
+ default:
111
+ return "<discarded-invalid-value>";
112
+ }
113
+ }
114
+ };
115
+
116
+ // content-type metadata trait.
117
+ struct ContentTypeMetadata {
118
+ static constexpr bool kRepeatable = false;
119
+ // gRPC says that content-type can be application/grpc[;something]
120
+ // Core has only ever verified the prefix.
121
+ // IF we want to start verifying more, we can expand this type.
122
+ enum ValueType {
123
+ kApplicationGrpc,
124
+ kEmpty,
125
+ kInvalid,
126
+ };
127
+ using MementoType = ValueType;
128
+ static absl::string_view key() { return "content-type"; }
129
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
130
+ auto out = kInvalid;
131
+ auto value_string = value.as_string_view();
132
+ if (value_string == "application/grpc") {
133
+ out = kApplicationGrpc;
134
+ } else if (absl::StartsWith(value_string, "application/grpc;")) {
135
+ out = kApplicationGrpc;
136
+ } else if (absl::StartsWith(value_string, "application/grpc+")) {
137
+ out = kApplicationGrpc;
138
+ } else if (value_string.empty()) {
139
+ out = kEmpty;
140
+ } else {
141
+ on_error("invalid value", value);
142
+ }
143
+ return out;
144
+ }
145
+ static ValueType MementoToValue(MementoType content_type) {
146
+ return content_type;
147
+ }
148
+ static StaticSlice Encode(ValueType x) {
149
+ switch (x) {
150
+ case kEmpty:
151
+ return StaticSlice::FromStaticString("");
152
+ case kApplicationGrpc:
153
+ return StaticSlice::FromStaticString("application/grpc");
154
+ case kInvalid:
155
+ abort();
156
+ }
157
+ GPR_UNREACHABLE_CODE(
158
+ return StaticSlice::FromStaticString("unrepresentable value"));
159
+ }
160
+ static const char* DisplayValue(MementoType content_type) {
161
+ switch (content_type) {
162
+ case ValueType::kApplicationGrpc:
163
+ return "application/grpc";
164
+ case ValueType::kEmpty:
165
+ return "";
166
+ default:
167
+ return "<discarded-invalid-value>";
168
+ }
169
+ }
170
+ };
171
+
172
+ // scheme metadata trait.
173
+ struct HttpSchemeMetadata {
174
+ static constexpr bool kRepeatable = false;
175
+ enum ValueType {
176
+ kHttp,
177
+ kHttps,
178
+ kInvalid,
179
+ };
180
+ using MementoType = ValueType;
181
+ static absl::string_view key() { return ":scheme"; }
182
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
183
+ return Parse(value.as_string_view(), on_error);
184
+ }
185
+ static ValueType Parse(absl::string_view value,
186
+ MetadataParseErrorFn on_error) {
187
+ if (value == "http") {
188
+ return kHttp;
189
+ } else if (value == "https") {
190
+ return kHttps;
191
+ }
192
+ on_error("invalid value", Slice::FromCopiedBuffer(value));
193
+ return kInvalid;
194
+ }
195
+ static ValueType MementoToValue(MementoType content_type) {
196
+ return content_type;
197
+ }
198
+ static StaticSlice Encode(ValueType x) {
199
+ switch (x) {
200
+ case kHttp:
201
+ return StaticSlice::FromStaticString("http");
202
+ case kHttps:
203
+ return StaticSlice::FromStaticString("https");
204
+ default:
205
+ abort();
206
+ }
207
+ }
208
+ static const char* DisplayValue(MementoType content_type) {
209
+ switch (content_type) {
210
+ case kHttp:
211
+ return "http";
212
+ case kHttps:
213
+ return "https";
214
+ default:
215
+ return "<discarded-invalid-value>";
216
+ }
217
+ }
218
+ };
219
+
220
+ // method metadata trait.
221
+ struct HttpMethodMetadata {
222
+ static constexpr bool kRepeatable = false;
223
+ enum ValueType {
224
+ kPost,
225
+ kPut,
226
+ kGet,
227
+ kInvalid,
228
+ };
229
+ using MementoType = ValueType;
230
+ static absl::string_view key() { return ":method"; }
231
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
232
+ auto out = kInvalid;
233
+ auto value_string = value.as_string_view();
234
+ if (value_string == "POST") {
235
+ out = kPost;
236
+ } else if (value_string == "PUT") {
237
+ out = kPut;
238
+ } else if (value_string == "GET") {
239
+ out = kGet;
240
+ } else {
241
+ on_error("invalid value", value);
242
+ }
243
+ return out;
244
+ }
245
+ static ValueType MementoToValue(MementoType content_type) {
246
+ return content_type;
247
+ }
248
+ static StaticSlice Encode(ValueType x) {
249
+ switch (x) {
250
+ case kPost:
251
+ return StaticSlice::FromStaticString("POST");
252
+ case kPut:
253
+ return StaticSlice::FromStaticString("PUT");
254
+ case kGet:
255
+ return StaticSlice::FromStaticString("GET");
256
+ default:
257
+ abort();
258
+ }
259
+ }
260
+ static const char* DisplayValue(MementoType content_type) {
261
+ switch (content_type) {
262
+ case kPost:
263
+ return "POST";
264
+ case kPut:
265
+ return "PUT";
266
+ case kGet:
267
+ return "GET";
268
+ default:
269
+ return "<discarded-invalid-value>";
270
+ }
271
+ }
272
+ };
273
+
274
+ // Base type for metadata pertaining to a single compression algorithm
275
+ // (e.g., "grpc-encoding").
276
+ struct CompressionAlgorithmBasedMetadata {
277
+ using ValueType = grpc_compression_algorithm;
278
+ using MementoType = ValueType;
279
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
280
+ auto algorithm = ParseCompressionAlgorithm(value.as_string_view());
281
+ if (!algorithm.has_value()) {
282
+ on_error("invalid value", value);
283
+ return GRPC_COMPRESS_NONE;
284
+ }
285
+ return *algorithm;
286
+ }
287
+ static ValueType MementoToValue(MementoType x) { return x; }
288
+ static Slice Encode(ValueType x) {
289
+ GPR_ASSERT(x != GRPC_COMPRESS_ALGORITHMS_COUNT);
290
+ return Slice::FromStaticString(CompressionAlgorithmAsString(x));
291
+ }
292
+ static const char* DisplayValue(MementoType x) {
293
+ if (const char* p = CompressionAlgorithmAsString(x)) {
294
+ return p;
295
+ } else {
296
+ return "<discarded-invalid-value>";
297
+ }
298
+ }
299
+ };
300
+
301
+ // grpc-encoding metadata trait.
302
+ struct GrpcEncodingMetadata : public CompressionAlgorithmBasedMetadata {
303
+ static constexpr bool kRepeatable = false;
304
+ static absl::string_view key() { return "grpc-encoding"; }
305
+ };
306
+
307
+ // grpc-internal-encoding-request metadata trait.
308
+ struct GrpcInternalEncodingRequest : public CompressionAlgorithmBasedMetadata {
309
+ static constexpr bool kRepeatable = false;
310
+ static absl::string_view key() { return "grpc-internal-encoding-request"; }
311
+ };
312
+
313
+ // grpc-accept-encoding metadata trait.
314
+ struct GrpcAcceptEncodingMetadata {
315
+ static constexpr bool kRepeatable = false;
316
+ static absl::string_view key() { return "grpc-accept-encoding"; }
317
+ using ValueType = CompressionAlgorithmSet;
318
+ using MementoType = ValueType;
319
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
320
+ return CompressionAlgorithmSet::FromString(value.as_string_view());
321
+ }
322
+ static ValueType MementoToValue(MementoType x) { return x; }
323
+ static Slice Encode(ValueType x) { return x.ToSlice(); }
324
+ static std::string DisplayValue(MementoType x) { return x.ToString(); }
325
+ };
326
+
327
+ struct SimpleSliceBasedMetadata {
328
+ using ValueType = Slice;
329
+ using MementoType = Slice;
330
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn) {
331
+ return value.TakeOwned();
332
+ }
333
+ static ValueType MementoToValue(MementoType value) { return value; }
334
+ static Slice Encode(const ValueType& x) { return x.Ref(); }
335
+ static absl::string_view DisplayValue(const MementoType& value) {
336
+ return value.as_string_view();
337
+ }
338
+ };
339
+
340
+ // user-agent metadata trait.
341
+ struct UserAgentMetadata : public SimpleSliceBasedMetadata {
342
+ static constexpr bool kRepeatable = false;
343
+ static absl::string_view key() { return "user-agent"; }
344
+ };
345
+
346
+ // grpc-message metadata trait.
347
+ struct GrpcMessageMetadata : public SimpleSliceBasedMetadata {
348
+ static constexpr bool kRepeatable = false;
349
+ static absl::string_view key() { return "grpc-message"; }
350
+ };
351
+
352
+ // host metadata trait.
353
+ struct HostMetadata : public SimpleSliceBasedMetadata {
354
+ static constexpr bool kRepeatable = false;
355
+ static absl::string_view key() { return "host"; }
356
+ };
357
+
358
+ // x-endpoint-load-metrics-bin metadata trait.
359
+ struct XEndpointLoadMetricsBinMetadata : public SimpleSliceBasedMetadata {
360
+ static constexpr bool kRepeatable = false;
361
+ static absl::string_view key() { return "x-endpoint-load-metrics-bin"; }
362
+ };
363
+
364
+ // grpc-server-stats-bin metadata trait.
365
+ struct GrpcServerStatsBinMetadata : public SimpleSliceBasedMetadata {
366
+ static constexpr bool kRepeatable = false;
367
+ static absl::string_view key() { return "grpc-server-stats-bin"; }
368
+ };
369
+
370
+ // grpc-trace-bin metadata trait.
371
+ struct GrpcTraceBinMetadata : public SimpleSliceBasedMetadata {
372
+ static constexpr bool kRepeatable = false;
373
+ static absl::string_view key() { return "grpc-trace-bin"; }
374
+ };
375
+
376
+ // grpc-tags-bin metadata trait.
377
+ struct GrpcTagsBinMetadata : public SimpleSliceBasedMetadata {
378
+ static constexpr bool kRepeatable = false;
379
+ static absl::string_view key() { return "grpc-tags-bin"; }
380
+ };
381
+
382
+ // :authority metadata trait.
383
+ struct HttpAuthorityMetadata : public SimpleSliceBasedMetadata {
384
+ static constexpr bool kRepeatable = false;
385
+ static absl::string_view key() { return ":authority"; }
386
+ };
387
+
388
+ // :path metadata trait.
389
+ struct HttpPathMetadata : public SimpleSliceBasedMetadata {
390
+ static constexpr bool kRepeatable = false;
391
+ static absl::string_view key() { return ":path"; }
392
+ };
393
+
394
+ // We separate SimpleIntBasedMetadata into two pieces: one that does not depend
395
+ // on the invalid value, and one that does. This allows the compiler to easily
396
+ // see the functions that are shared, and helps reduce code bloat here.
397
+ template <typename Int>
398
+ struct SimpleIntBasedMetadataBase {
399
+ using ValueType = Int;
400
+ using MementoType = Int;
401
+ static ValueType MementoToValue(MementoType value) { return value; }
402
+ static Slice Encode(ValueType x) { return Slice::FromInt64(x); }
403
+ static Int DisplayValue(MementoType x) { return x; }
404
+ };
405
+
406
+ template <typename Int, Int kInvalidValue>
407
+ struct SimpleIntBasedMetadata : public SimpleIntBasedMetadataBase<Int> {
408
+ static constexpr Int invalid_value() { return kInvalidValue; }
409
+ static Int ParseMemento(Slice value, MetadataParseErrorFn on_error) {
410
+ Int out;
411
+ if (!absl::SimpleAtoi(value.as_string_view(), &out)) {
412
+ on_error("not an integer", value);
413
+ out = kInvalidValue;
414
+ }
415
+ return out;
416
+ }
417
+ };
418
+
419
+ // grpc-status metadata trait.
420
+ struct GrpcStatusMetadata
421
+ : public SimpleIntBasedMetadata<grpc_status_code, GRPC_STATUS_UNKNOWN> {
422
+ static constexpr bool kRepeatable = false;
423
+ static absl::string_view key() { return "grpc-status"; }
424
+ };
425
+
426
+ // grpc-previous-rpc-attempts metadata trait.
427
+ struct GrpcPreviousRpcAttemptsMetadata
428
+ : public SimpleIntBasedMetadata<uint32_t, 0> {
429
+ static constexpr bool kRepeatable = false;
430
+ static absl::string_view key() { return "grpc-previous-rpc-attempts"; }
431
+ };
432
+
433
+ // grpc-retry-pushback-ms metadata trait.
434
+ struct GrpcRetryPushbackMsMetadata
435
+ : public SimpleIntBasedMetadata<grpc_millis, GRPC_MILLIS_INF_PAST> {
436
+ static constexpr bool kRepeatable = false;
437
+ static absl::string_view key() { return "grpc-retry-pushback-ms"; }
438
+ };
439
+
440
+ // :status metadata trait.
441
+ // TODO(ctiller): consider moving to uint16_t
442
+ struct HttpStatusMetadata : public SimpleIntBasedMetadata<uint32_t, 0> {
443
+ static constexpr bool kRepeatable = false;
444
+ static absl::string_view key() { return ":status"; }
445
+ };
446
+
447
+ // "secret" metadata trait used to pass load balancing token between filters.
448
+ // This should not be exposed outside of gRPC core.
449
+ class GrpcLbClientStats;
450
+ struct GrpcLbClientStatsMetadata {
451
+ static constexpr bool kRepeatable = false;
452
+ static absl::string_view key() { return "grpclb_client_stats"; }
453
+ using ValueType = GrpcLbClientStats*;
454
+ using MementoType = ValueType;
455
+ static ValueType MementoToValue(MementoType value) { return value; }
456
+ static Slice Encode(ValueType) { abort(); }
457
+ static const char* DisplayValue(MementoType) { return "<internal-lb-stats>"; }
458
+ static MementoType ParseMemento(Slice, MetadataParseErrorFn) {
459
+ return nullptr;
460
+ }
461
+ };
462
+
463
+ // lb-token metadata
464
+ struct LbTokenMetadata : public SimpleSliceBasedMetadata {
465
+ static constexpr bool kRepeatable = false;
466
+ static absl::string_view key() { return "lb-token"; }
467
+ };
468
+
469
+ // lb-cost-bin metadata
470
+ struct LbCostBinMetadata {
471
+ static constexpr bool kRepeatable = true;
472
+ static absl::string_view key() { return "lb-cost-bin"; }
473
+ struct ValueType {
474
+ double cost;
475
+ std::string name;
476
+ };
477
+ using MementoType = ValueType;
478
+ static ValueType MementoToValue(MementoType value) { return value; }
479
+ static Slice Encode(const ValueType& x) {
480
+ auto slice =
481
+ MutableSlice::CreateUninitialized(sizeof(double) + x.name.length());
482
+ memcpy(slice.data(), &x.cost, sizeof(double));
483
+ memcpy(slice.data() + sizeof(double), x.name.data(), x.name.length());
484
+ return Slice(std::move(slice));
485
+ }
486
+ static std::string DisplayValue(MementoType x) {
487
+ return absl::StrCat(x.name, ":", x.cost);
488
+ }
489
+ static MementoType ParseMemento(Slice value, MetadataParseErrorFn on_error) {
490
+ if (value.length() < sizeof(double)) {
491
+ on_error("too short", value);
492
+ return {0, ""};
493
+ }
494
+ MementoType out;
495
+ memcpy(&out.cost, value.data(), sizeof(double));
496
+ out.name = std::string(
497
+ reinterpret_cast<const char*>(value.data()) + sizeof(double),
498
+ value.length() - sizeof(double));
499
+ return out;
500
+ }
501
+ };
502
+
503
+ namespace metadata_detail {
504
+
505
+ // Helper type - maps a string name to a trait.
506
+ template <typename... Traits>
507
+ struct NameLookup;
508
+
509
+ template <typename Trait, typename... Traits>
510
+ struct NameLookup<Trait, Traits...> {
511
+ // Call op->Found(Trait()) if op->name == Trait::key() for some Trait in
512
+ // Traits. If not found, call op->NotFound().
513
+ template <typename Op>
514
+ static auto Lookup(absl::string_view key, Op* op)
515
+ -> decltype(op->Found(Trait())) {
516
+ if (key == Trait::key()) {
517
+ return op->Found(Trait());
518
+ }
519
+ return NameLookup<Traits...>::Lookup(key, op);
520
+ }
521
+ };
522
+
523
+ template <>
524
+ struct NameLookup<> {
525
+ template <typename Op>
526
+ static auto Lookup(absl::string_view key, Op* op)
527
+ -> decltype(op->NotFound(key)) {
528
+ return op->NotFound(key);
529
+ }
530
+ };
531
+
532
+ // Helper to take a slice to a memento to a value.
533
+ // By splitting this part out we can scale code size as the number of (memento,
534
+ // value) types, rather than as the number of traits.
535
+ template <typename ParseMementoFn, typename MementoToValueFn>
536
+ struct ParseValue {
537
+ template <ParseMementoFn parse_memento, MementoToValueFn memento_to_value>
538
+ static GPR_ATTRIBUTE_NOINLINE auto Parse(Slice* value,
539
+ MetadataParseErrorFn on_error)
540
+ -> decltype(memento_to_value(parse_memento(std::move(*value),
541
+ on_error))) {
542
+ return memento_to_value(parse_memento(std::move(*value), on_error));
543
+ }
544
+ };
545
+
546
+ // This is an "Op" type for NameLookup.
547
+ // Used for MetadataMap::Parse, its Found/NotFound methods turn a slice into a
548
+ // ParsedMetadata object.
549
+ template <typename Container>
550
+ class ParseHelper {
551
+ public:
552
+ ParseHelper(Slice value, MetadataParseErrorFn on_error, size_t transport_size)
553
+ : value_(std::move(value)),
554
+ on_error_(on_error),
555
+ transport_size_(transport_size) {}
556
+
557
+ template <typename Trait>
558
+ GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> Found(Trait trait) {
559
+ return ParsedMetadata<Container>(
560
+ trait,
561
+ ParseValueToMemento<typename Trait::MementoType, Trait::ParseMemento>(),
562
+ transport_size_);
563
+ }
564
+
565
+ GPR_ATTRIBUTE_NOINLINE ParsedMetadata<Container> NotFound(
566
+ absl::string_view key) {
567
+ return ParsedMetadata<Container>(Slice::FromCopiedString(key),
568
+ std::move(value_));
569
+ }
570
+
571
+ private:
572
+ template <typename T, T (*parse_memento)(Slice, MetadataParseErrorFn)>
573
+ GPR_ATTRIBUTE_NOINLINE T ParseValueToMemento() {
574
+ return parse_memento(std::move(value_), on_error_);
575
+ }
576
+
577
+ Slice value_;
578
+ MetadataParseErrorFn on_error_;
579
+ const size_t transport_size_;
580
+ };
581
+
582
+ // This is an "Op" type for NameLookup.
583
+ // Used for MetadataMap::Append, its Found/NotFound methods turn a slice into a
584
+ // value and add it to a container.
585
+ template <typename Container>
586
+ class AppendHelper {
587
+ public:
588
+ AppendHelper(Container* container, Slice value, MetadataParseErrorFn on_error)
589
+ : container_(container), value_(std::move(value)), on_error_(on_error) {}
590
+
591
+ template <typename Trait>
592
+ GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
593
+ container_->Set(
594
+ trait, ParseValue<decltype(Trait::ParseMemento),
595
+ decltype(Trait::MementoToValue)>::
596
+ template Parse<Trait::ParseMemento, Trait::MementoToValue>(
597
+ &value_, on_error_));
598
+ }
60
599
 
600
+ GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
601
+ container_->AppendUnknown(key, std::move(value_));
602
+ }
603
+
604
+ private:
605
+ Container* const container_;
606
+ Slice value_;
607
+ MetadataParseErrorFn on_error_;
608
+ };
609
+
610
+ // This is an "Op" type for NameLookup.
611
+ // Used for MetadataMap::Remove, its Found/NotFound methods remove a key from
612
+ // the container.
613
+ template <typename Container>
614
+ class RemoveHelper {
615
+ public:
616
+ explicit RemoveHelper(Container* container) : container_(container) {}
617
+
618
+ template <typename Trait>
619
+ GPR_ATTRIBUTE_NOINLINE void Found(Trait trait) {
620
+ container_->Remove(trait);
621
+ }
622
+
623
+ GPR_ATTRIBUTE_NOINLINE void NotFound(absl::string_view key) {
624
+ container_->RemoveUnknown(key);
625
+ }
626
+
627
+ private:
628
+ Container* const container_;
629
+ };
630
+
631
+ // This is an "Op" type for NameLookup.
632
+ // Used for MetadataMap::GetStringValue, its Found/NotFound methods generated a
633
+ // string value from the container.
634
+ template <typename Container>
635
+ class GetStringValueHelper {
636
+ public:
637
+ explicit GetStringValueHelper(const Container* container,
638
+ std::string* backing)
639
+ : container_(container), backing_(backing) {}
640
+
641
+ template <typename Trait>
642
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
643
+ Trait::kRepeatable == false &&
644
+ std::is_same<Slice, typename Trait::ValueType>::value,
645
+ absl::optional<absl::string_view>>
646
+ Found(Trait) {
647
+ const auto* value = container_->get_pointer(Trait());
648
+ if (value == nullptr) return absl::nullopt;
649
+ return value->as_string_view();
650
+ }
651
+
652
+ template <typename Trait>
653
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
654
+ Trait::kRepeatable == true &&
655
+ !std::is_same<Slice, typename Trait::ValueType>::value,
656
+ absl::optional<absl::string_view>>
657
+ Found(Trait) {
658
+ const auto* value = container_->get_pointer(Trait());
659
+ if (value == nullptr) return absl::nullopt;
660
+ backing_->clear();
661
+ for (const auto& v : *value) {
662
+ if (!backing_->empty()) backing_->push_back(',');
663
+ auto new_segment = Trait::Encode(v);
664
+ backing_->append(new_segment.begin(), new_segment.end());
665
+ }
666
+ return *backing_;
667
+ }
668
+
669
+ template <typename Trait>
670
+ GPR_ATTRIBUTE_NOINLINE absl::enable_if_t<
671
+ Trait::kRepeatable == false &&
672
+ !std::is_same<Slice, typename Trait::ValueType>::value,
673
+ absl::optional<absl::string_view>>
674
+ Found(Trait) {
675
+ const auto* value = container_->get_pointer(Trait());
676
+ if (value == nullptr) return absl::nullopt;
677
+ *backing_ = std::string(Trait::Encode(*value).as_string_view());
678
+ return *backing_;
679
+ }
680
+
681
+ GPR_ATTRIBUTE_NOINLINE absl::optional<absl::string_view> NotFound(
682
+ absl::string_view key) {
683
+ return container_->GetStringValueUnknown(key, backing_);
684
+ }
685
+
686
+ private:
687
+ const Container* const container_;
688
+ std::string* backing_;
689
+ };
690
+
691
+ // Generate a strong type for metadata values per trait.
692
+ template <typename Which, typename Ignored = void>
693
+ struct Value;
694
+
695
+ template <typename Which>
696
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == false, void>> {
697
+ Value() = default;
698
+ explicit Value(const typename Which::ValueType& value) : value(value) {}
699
+ explicit Value(typename Which::ValueType&& value)
700
+ : value(std::forward<typename Which::ValueType>(value)) {}
701
+ Value(const Value&) = delete;
702
+ Value& operator=(const Value&) = delete;
703
+ Value(Value&&) noexcept = default;
704
+ Value& operator=(Value&& other) noexcept {
705
+ value = std::move(other.value);
706
+ return *this;
707
+ }
708
+ template <typename Encoder>
709
+ void EncodeTo(Encoder* encoder) const {
710
+ encoder->Encode(Which(), value);
711
+ }
712
+ using StorageType = typename Which::ValueType;
713
+ GPR_NO_UNIQUE_ADDRESS StorageType value;
714
+ };
715
+
716
+ template <typename Which>
717
+ struct Value<Which, absl::enable_if_t<Which::kRepeatable == true, void>> {
718
+ Value() = default;
719
+ explicit Value(const typename Which::ValueType& value) {
720
+ this->value.push_back(value);
721
+ }
722
+ explicit Value(typename Which::ValueType&& value) {
723
+ this->value.emplace_back(std::forward<typename Which::ValueType>(value));
724
+ }
725
+ Value(const Value&) = delete;
726
+ Value& operator=(const Value&) = delete;
727
+ Value(Value&& other) noexcept : value(std::move(other.value)) {}
728
+ Value& operator=(Value&& other) noexcept {
729
+ value = std::move(other.value);
730
+ return *this;
731
+ }
732
+ template <typename Encoder>
733
+ void EncodeTo(Encoder* encoder) const {
734
+ for (const auto& v : value) {
735
+ encoder->Encode(Which(), v);
736
+ }
737
+ }
738
+ using StorageType = absl::InlinedVector<typename Which::ValueType, 1>;
739
+ StorageType value;
740
+ };
741
+
742
+ // Encoder to copy some metadata
743
+ template <typename Output>
744
+ class CopySink {
745
+ public:
746
+ explicit CopySink(Output* dst) : dst_(dst) {}
747
+
748
+ template <class T, class V>
749
+ void Encode(T trait, V value) {
750
+ dst_->Set(trait, value);
751
+ }
752
+
753
+ template <class T>
754
+ void Encode(T trait, const Slice& value) {
755
+ dst_->Set(trait, std::move(value.AsOwned()));
756
+ }
757
+
758
+ void Encode(const Slice& key, const Slice& value) {
759
+ dst_->AppendUnknown(key.as_string_view(), value.Ref());
760
+ }
761
+
762
+ private:
763
+ Output* dst_;
764
+ };
765
+
766
+ } // namespace metadata_detail
767
+
768
+ // Helper function for encoders
769
+ // Given a metadata trait, convert the value to a slice.
770
+ template <typename Which>
771
+ absl::enable_if_t<std::is_same<typename Which::ValueType, Slice>::value,
772
+ const Slice&>
773
+ MetadataValueAsSlice(const Slice& slice) {
774
+ return slice;
775
+ }
776
+
777
+ template <typename Which>
778
+ absl::enable_if_t<!std::is_same<typename Which::ValueType, Slice>::value, Slice>
779
+ MetadataValueAsSlice(typename Which::ValueType value) {
780
+ return Slice(Which::Encode(value));
781
+ }
782
+
783
+ // MetadataMap encodes the mapping of metadata keys to metadata values.
784
+ //
785
+ // MetadataMap takes a derived class and list of traits. Each of these trait
786
+ // objects defines one metadata field that is used by core, and so should have
787
+ // more specialized handling than just using the generic APIs.
788
+ //
789
+ // MetadataMap is the backing type for some derived type via the curiously
790
+ // recursive template pattern. This is because many types consumed by
791
+ // MetadataMap require the container type to operate on, and many of those
792
+ // types are instantiated one per trait. A naive implementation without the
793
+ // Derived type would, for traits A,B,C, then instantiate for some
794
+ // T<Container, Trait>:
795
+ // - T<MetadataMap<A,B,C>, A>,
796
+ // - T<MetadataMap<A,B,C>, B>,
797
+ // - T<MetadataMap<A,B,C>, C>.
798
+ // Since these types ultimately need to be recorded in the .dynstr segment
799
+ // for dynamic linkers (if gRPC is linked as a static library) this would
800
+ // create O(N^2) bytes of symbols even in stripped libraries. To avoid this
801
+ // we use the derived type (e.g. grpc_metadata_batch right now) to capture
802
+ // the container type, and we would write T<grpc_metadata_batch, A>, etc...
803
+ // Note that now the container type uses a number of bytes that is independent
804
+ // of the number of traits, and so we return to a linear symbol table growth
805
+ // function.
806
+ //
807
+ // Each trait object has the following signature:
808
+ // // Traits for the grpc-xyz metadata field:
809
+ // struct GrpcXyzMetadata {
810
+ // // The type that's stored on MetadataBatch
811
+ // using ValueType = ...;
812
+ // // Can this metadata field be repeated?
813
+ // static constexpr bool kRepeatable = ...;
814
+ // // The type that's stored in compression/decompression tables
815
+ // using MementoType = ...;
816
+ // // The string key for this metadata type (for transports that require it)
817
+ // static absl::string_view key() { return "grpc-xyz"; }
818
+ // // Parse a memento from a slice
819
+ // // Takes ownership of value
820
+ // // Calls fn in the case of an error that should be reported to the user
821
+ // static MementoType ParseMemento(Slice value, MementoParseErrorFn fn) { ...
822
+ // }
823
+ // // Convert a memento to a value
824
+ // static ValueType MementoToValue(MementoType memento) { ... }
825
+ // // Convert a value to its canonical text wire format (the format that
826
+ // // ParseMemento will accept!)
827
+ // static Slice Encode(const ValueType& value);
828
+ // // Convert a value to something that can be passed to StrCat and displayed
829
+ // // for debugging
830
+ // static SomeStrCatableType DisplayValue(MementoType value) { ... }
831
+ // };
832
+ //
833
+ // About parsing and mementos:
834
+ //
835
+ // Many gRPC transports exchange metadata as key/value strings, but also allow
836
+ // for a more efficient representation as a single integer. We can use this
837
+ // integer representation to avoid reparsing too, by storing the parsed value
838
+ // in the compression table. This is what mementos are used for.
839
+ //
840
+ // A trait offers the capability to turn a slice into a memento via
841
+ // ParseMemento. This is exposed to users of MetadataMap via the Parse() method,
842
+ // that returns a ParsedMetadata object. That ParsedMetadata object can in turn
843
+ // be used to set the same value on many different MetadataMaps without having
844
+ // to reparse.
845
+ //
846
+ // Implementation wise, ParsedMetadata is a type erased wrapper around
847
+ // MementoType. When we set a value on MetadataMap, we first turn that memento
848
+ // into a value. For most types, this is going to be a no-op, but for example
849
+ // for grpc-timeout we make the memento the timeout expressed on the wire, but
850
+ // we make the value the timestamp of when the timeout will expire (i.e. the
851
+ // deadline).
852
+ template <class Derived, typename... Traits>
853
+ class MetadataMap {
854
+ public:
855
+ explicit MetadataMap(Arena* arena);
856
+ ~MetadataMap();
857
+
858
+ MetadataMap(const MetadataMap&) = delete;
859
+ MetadataMap& operator=(const MetadataMap&) = delete;
860
+ MetadataMap(MetadataMap&&) noexcept;
861
+ // We never create MetadataMap directly, instead we create Derived, but we
862
+ // want to be able to move it without redeclaring this.
863
+ // NOLINTNEXTLINE(misc-unconventional-assign-operator)
864
+ Derived& operator=(MetadataMap&&) noexcept;
865
+
866
+ // Encode this metadata map into some encoder.
867
+ // For each field that is set in the MetadataMap, call
868
+ // encoder->Encode.
869
+ //
870
+ // For fields for which we have traits, this will be a method with
871
+ // the signature:
872
+ // void Encode(TraitsType, typename TraitsType::ValueType value);
873
+ // For fields for which we do not have traits, this will be a method
874
+ // with the signature:
875
+ // void Encode(grpc_mdelem md);
876
+ // TODO(ctiller): It's expected that the latter Encode method will
877
+ // become Encode(Slice, Slice) by the end of the current metadata API
878
+ // transitions.
61
879
  template <typename Encoder>
62
880
  void Encode(Encoder* encoder) const {
63
- for (auto* l = list.head; l; l = l->next) {
64
- encoder->Encode(l->md);
65
- }
66
- if (deadline != GRPC_MILLIS_INF_FUTURE) encoder->EncodeDeadline(deadline);
67
- }
68
- } grpc_metadata_batch;
69
-
70
- void grpc_metadata_batch_init(grpc_metadata_batch* batch);
71
- void grpc_metadata_batch_destroy(grpc_metadata_batch* batch);
72
- void grpc_metadata_batch_clear(grpc_metadata_batch* batch);
73
- bool grpc_metadata_batch_is_empty(grpc_metadata_batch* batch);
74
-
75
- /* Returns the transport size of the batch. */
76
- size_t grpc_metadata_batch_size(grpc_metadata_batch* batch);
77
-
78
- /** Remove \a storage from the batch, unreffing the mdelem contained */
79
- void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
80
- grpc_linked_mdelem* storage);
81
- void grpc_metadata_batch_remove(grpc_metadata_batch* batch,
82
- grpc_metadata_batch_callouts_index idx);
83
-
84
- /** Substitute a new mdelem for an old value */
85
- grpc_error_handle grpc_metadata_batch_substitute(grpc_metadata_batch* batch,
86
- grpc_linked_mdelem* storage,
87
- grpc_mdelem new_mdelem);
88
-
89
- void grpc_metadata_batch_set_value(grpc_linked_mdelem* storage,
90
- const grpc_slice& value);
91
-
92
- /** Returns metadata value(s) for the specified key.
93
- If the key is not present in the batch, returns absl::nullopt.
94
- If the key is present exactly once in the batch, returns a string_view of
95
- that value.
96
- If the key is present more than once in the batch, constructs a
97
- comma-concatenated string of all values in concatenated_value and returns a
98
- string_view of that string. */
99
- absl::optional<absl::string_view> grpc_metadata_batch_get_value(
100
- grpc_metadata_batch* batch, absl::string_view target_key,
101
- std::string* concatenated_value);
102
-
103
- /** Add \a storage to the beginning of \a batch. storage->md is
104
- assumed to be valid.
105
- \a storage is owned by the caller and must survive for the
106
- lifetime of batch. This usually means it should be around
107
- for the lifetime of the call. */
108
- grpc_error_handle grpc_metadata_batch_link_head(grpc_metadata_batch* batch,
109
- grpc_linked_mdelem* storage)
110
- GRPC_MUST_USE_RESULT;
111
- grpc_error_handle grpc_metadata_batch_link_head(
112
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
113
- grpc_metadata_batch_callouts_index idx) GRPC_MUST_USE_RESULT;
114
-
115
- /** Add \a storage to the end of \a batch. storage->md is
116
- assumed to be valid.
117
- \a storage is owned by the caller and must survive for the
118
- lifetime of batch. This usually means it should be around
119
- for the lifetime of the call. */
120
- grpc_error_handle grpc_metadata_batch_link_tail(grpc_metadata_batch* batch,
121
- grpc_linked_mdelem* storage)
122
- GRPC_MUST_USE_RESULT;
123
- grpc_error_handle grpc_metadata_batch_link_tail(
124
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
125
- grpc_metadata_batch_callouts_index idx) GRPC_MUST_USE_RESULT;
126
-
127
- /** Add \a elem_to_add as the first element in \a batch, using
128
- \a storage as backing storage for the linked list element.
129
- \a storage is owned by the caller and must survive for the
130
- lifetime of batch. This usually means it should be around
131
- for the lifetime of the call.
132
- Takes ownership of \a elem_to_add */
133
- grpc_error_handle grpc_metadata_batch_add_head(
134
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
135
- grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
136
-
137
- // TODO(arjunroy, roth): Remove redundant methods.
138
- // add/link_head/tail are almost identical.
139
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_head(
140
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
141
- grpc_metadata_batch_callouts_index idx) {
142
- return grpc_metadata_batch_link_head(batch, storage, idx);
881
+ table_.ForEach(EncodeWrapper<Encoder>{encoder});
882
+ for (const auto& unk : unknown_) {
883
+ encoder->Encode(unk.first, unk.second);
884
+ }
885
+ }
886
+
887
+ // Similar to Encode, but targeted at logging: for each metadatum,
888
+ // call f(key, value) as absl::string_views.
889
+ void Log(absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn)
890
+ const;
891
+
892
+ // Get the pointer to the value of some known metadata.
893
+ // Returns nullptr if the metadata is not present.
894
+ // Causes a compilation error if Which is not an element of Traits.
895
+ template <typename Which>
896
+ const typename metadata_detail::Value<Which>::StorageType* get_pointer(
897
+ Which) const {
898
+ if (auto* p = table_.template get<Value<Which>>()) return &p->value;
899
+ return nullptr;
900
+ }
901
+
902
+ // Get the pointer to the value of some known metadata.
903
+ // Returns nullptr if the metadata is not present.
904
+ // Causes a compilation error if Which is not an element of Traits.
905
+ template <typename Which>
906
+ typename metadata_detail::Value<Which>::StorageType* get_pointer(Which) {
907
+ if (auto* p = table_.template get<Value<Which>>()) return &p->value;
908
+ return nullptr;
909
+ }
910
+
911
+ // Get the pointer to the value of some known metadata.
912
+ // Adds the default value for the metadata is not present.
913
+ // Causes a compilation error if Which is not an element of Traits.
914
+ template <typename Which>
915
+ typename metadata_detail::Value<Which>::StorageType* GetOrCreatePointer(
916
+ Which) {
917
+ return &table_.template get_or_create<Value<Which>>()->value;
918
+ }
919
+
920
+ // Get the value of some known metadata.
921
+ // Returns nullopt if the metadata is not present.
922
+ // Causes a compilation error if Which is not an element of Traits.
923
+ template <typename Which>
924
+ absl::optional<typename Which::ValueType> get(Which) const {
925
+ if (auto* p = table_.template get<Value<Which>>()) return p->value;
926
+ return absl::nullopt;
927
+ }
928
+
929
+ // Set the value of some known metadata.
930
+ // Returns a pointer to the new value.
931
+ template <typename Which, typename... Args>
932
+ absl::enable_if_t<Which::kRepeatable == false, void> Set(Which,
933
+ Args&&... args) {
934
+ table_.template set<Value<Which>>(std::forward<Args>(args)...);
935
+ }
936
+ template <typename Which, typename... Args>
937
+ absl::enable_if_t<Which::kRepeatable == true, void> Set(Which,
938
+ Args&&... args) {
939
+ GetOrCreatePointer(Which())->emplace_back(std::forward<Args>(args)...);
940
+ }
941
+
942
+ // Remove a specific piece of known metadata.
943
+ template <typename Which>
944
+ void Remove(Which) {
945
+ table_.template clear<Value<Which>>();
946
+ }
947
+
948
+ // Remove some metadata by name
949
+ void Remove(absl::string_view key) {
950
+ metadata_detail::RemoveHelper<Derived> helper(static_cast<Derived*>(this));
951
+ metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
952
+ }
953
+
954
+ void Remove(const char* key) { Remove(absl::string_view(key)); }
955
+
956
+ // Retrieve some metadata by name
957
+ absl::optional<absl::string_view> GetStringValue(absl::string_view name,
958
+ std::string* buffer) const {
959
+ metadata_detail::GetStringValueHelper<Derived> helper(
960
+ static_cast<const Derived*>(this), buffer);
961
+ return metadata_detail::NameLookup<Traits...>::Lookup(name, &helper);
962
+ }
963
+
964
+ // Extract a piece of known metadata.
965
+ // Returns nullopt if the metadata was not present, or the value if it was.
966
+ // The same as:
967
+ // auto value = m.get(T());
968
+ // m.Remove(T());
969
+ template <typename Which>
970
+ absl::enable_if_t<Which::kRepeatable == false,
971
+ absl::optional<typename Which::ValueType>>
972
+ Take(Which which) {
973
+ if (auto* p = get_pointer(which)) {
974
+ absl::optional<typename Which::ValueType> value(std::move(*p));
975
+ Remove(which);
976
+ return value;
977
+ }
978
+ return {};
979
+ }
980
+
981
+ // Extract repeated known metadata.
982
+ // Returns an empty vector if the metadata was not present.
983
+ template <typename Which>
984
+ absl::enable_if_t<Which::kRepeatable == true,
985
+ typename metadata_detail::Value<Which>::StorageType>
986
+ Take(Which which) {
987
+ if (auto* p = get_pointer(which)) {
988
+ typename Value<Which>::StorageType value = std::move(*p);
989
+ Remove(which);
990
+ return value;
991
+ }
992
+ return {};
993
+ }
994
+
995
+ // Parse metadata from a key/value pair, and return an object representing
996
+ // that result.
997
+ // TODO(ctiller): key should probably be an absl::string_view.
998
+ // Once we don't care about interning anymore, make that change!
999
+ static ParsedMetadata<Derived> Parse(absl::string_view key, Slice value,
1000
+ uint32_t transport_size,
1001
+ MetadataParseErrorFn on_error) {
1002
+ metadata_detail::ParseHelper<Derived> helper(value.TakeOwned(), on_error,
1003
+ transport_size);
1004
+ return metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
1005
+ }
1006
+
1007
+ // Set a value from a parsed metadata object.
1008
+ void Set(const ParsedMetadata<Derived>& m) {
1009
+ m.SetOnContainer(static_cast<Derived*>(this));
1010
+ }
1011
+
1012
+ // Append a key/value pair - takes ownership of value
1013
+ void Append(absl::string_view key, Slice value,
1014
+ MetadataParseErrorFn on_error) {
1015
+ metadata_detail::AppendHelper<Derived> helper(static_cast<Derived*>(this),
1016
+ value.TakeOwned(), on_error);
1017
+ metadata_detail::NameLookup<Traits...>::Lookup(key, &helper);
1018
+ }
1019
+
1020
+ void Clear();
1021
+ size_t TransportSize() const;
1022
+ Derived Copy() const;
1023
+ bool empty() const { return table_.empty() && unknown_.empty(); }
1024
+ size_t count() const { return table_.count() + unknown_.size(); }
1025
+
1026
+ private:
1027
+ friend class metadata_detail::AppendHelper<Derived>;
1028
+ friend class metadata_detail::GetStringValueHelper<Derived>;
1029
+ friend class metadata_detail::RemoveHelper<Derived>;
1030
+ friend class metadata_detail::CopySink<Derived>;
1031
+ friend class ParsedMetadata<Derived>;
1032
+
1033
+ template <typename Which>
1034
+ using Value = metadata_detail::Value<Which>;
1035
+
1036
+ // Callable for the ForEach in Encode() -- for each value, call the
1037
+ // appropriate encoder method.
1038
+ template <typename Encoder>
1039
+ struct EncodeWrapper {
1040
+ Encoder* encoder;
1041
+ template <typename Which>
1042
+ void operator()(const Value<Which>& which) {
1043
+ which.EncodeTo(encoder);
1044
+ }
1045
+ };
1046
+
1047
+ // Encoder to compute TransportSize
1048
+ class TransportSizeEncoder {
1049
+ public:
1050
+ void Encode(const Slice& key, const Slice& value) {
1051
+ size_ += key.length() + value.length() + 32;
1052
+ }
1053
+
1054
+ template <typename Which>
1055
+ void Encode(Which, const typename Which::ValueType& value) {
1056
+ Add(Which(), value);
1057
+ }
1058
+
1059
+ void Encode(ContentTypeMetadata,
1060
+ const typename ContentTypeMetadata::ValueType& value) {
1061
+ if (value == ContentTypeMetadata::kInvalid) return;
1062
+ Add(ContentTypeMetadata(), value);
1063
+ }
1064
+
1065
+ size_t size() const { return size_; }
1066
+
1067
+ private:
1068
+ template <typename Which>
1069
+ void Add(Which, const typename Which::ValueType& value) {
1070
+ size_ += Which::key().length() + Which::Encode(value).length() + 32;
1071
+ }
1072
+
1073
+ uint32_t size_ = 0;
1074
+ };
1075
+
1076
+ // Encoder to log some metadata
1077
+ class LogEncoder {
1078
+ public:
1079
+ explicit LogEncoder(
1080
+ absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn)
1081
+ : log_fn_(log_fn) {}
1082
+
1083
+ template <typename Which>
1084
+ void Encode(Which, const typename Which::ValueType& value) {
1085
+ log_fn_(Which::key(), absl::StrCat(Which::DisplayValue(value)));
1086
+ }
1087
+
1088
+ void Encode(const Slice& key, const Slice& value) {
1089
+ log_fn_(key.as_string_view(), value.as_string_view());
1090
+ }
1091
+
1092
+ private:
1093
+ absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn_;
1094
+ };
1095
+
1096
+ void AppendUnknown(absl::string_view key, Slice value) {
1097
+ unknown_.EmplaceBack(Slice::FromCopiedString(key), value.Ref());
1098
+ }
1099
+
1100
+ void RemoveUnknown(absl::string_view key) {
1101
+ unknown_.SetEnd(std::remove_if(unknown_.begin(), unknown_.end(),
1102
+ [key](const std::pair<Slice, Slice>& p) {
1103
+ return p.first.as_string_view() == key;
1104
+ }));
1105
+ }
1106
+
1107
+ absl::optional<absl::string_view> GetStringValueUnknown(
1108
+ absl::string_view key, std::string* backing) const {
1109
+ absl::optional<absl::string_view> out;
1110
+ for (const auto& p : unknown_) {
1111
+ if (p.first.as_string_view() == key) {
1112
+ if (!out.has_value()) {
1113
+ out = p.second.as_string_view();
1114
+ } else {
1115
+ out = *backing = absl::StrCat(*out, ",", p.second.as_string_view());
1116
+ }
1117
+ }
1118
+ }
1119
+ return out;
1120
+ }
1121
+
1122
+ // Table of known metadata types.
1123
+ Table<Value<Traits>...> table_;
1124
+ // Backing store for added metadata.
1125
+ ChunkedVector<std::pair<Slice, Slice>, 10> unknown_;
1126
+ };
1127
+
1128
+ // Ok/not-ok check for metadata maps that contain GrpcStatusMetadata, so that
1129
+ // they can be used as result types for TrySeq.
1130
+ template <typename Derived, typename... Args>
1131
+ inline bool IsStatusOk(const MetadataMap<Derived, Args...>& m) {
1132
+ return m.get(GrpcStatusMetadata()).value_or(GRPC_STATUS_UNKNOWN) ==
1133
+ GRPC_STATUS_OK;
1134
+ }
1135
+
1136
+ template <typename Derived, typename... Traits>
1137
+ MetadataMap<Derived, Traits...>::MetadataMap(Arena* arena) : unknown_(arena) {}
1138
+
1139
+ template <typename Derived, typename... Traits>
1140
+ MetadataMap<Derived, Traits...>::MetadataMap(MetadataMap&& other) noexcept
1141
+ : table_(std::move(other.table_)), unknown_(std::move(other.unknown_)) {}
1142
+
1143
+ // We never create MetadataMap directly, instead we create Derived, but we want
1144
+ // to be able to move it without redeclaring this.
1145
+ // NOLINTNEXTLINE(misc-unconventional-assign-operator)
1146
+ template <typename Derived, typename... Traits>
1147
+ Derived& MetadataMap<Derived, Traits...>::operator=(
1148
+ MetadataMap&& other) noexcept {
1149
+ table_ = std::move(other.table_);
1150
+ unknown_ = std::move(other.unknown_);
1151
+ return static_cast<Derived&>(*this);
1152
+ }
1153
+
1154
+ template <typename Derived, typename... Traits>
1155
+ MetadataMap<Derived, Traits...>::~MetadataMap() = default;
1156
+
1157
+ template <typename Derived, typename... Traits>
1158
+ void MetadataMap<Derived, Traits...>::Clear() {
1159
+ table_.ClearAll();
1160
+ unknown_.Clear();
143
1161
  }
144
1162
 
145
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_head(
146
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
147
- grpc_mdelem elem_to_add, grpc_metadata_batch_callouts_index idx) {
148
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
149
- storage->md = elem_to_add;
150
- return grpc_metadata_batch_add_head(batch, storage, idx);
1163
+ template <typename Derived, typename... Traits>
1164
+ size_t MetadataMap<Derived, Traits...>::TransportSize() const {
1165
+ TransportSizeEncoder enc;
1166
+ Encode(&enc);
1167
+ return enc.size();
151
1168
  }
152
1169
 
153
- /** Add \a elem_to_add as the last element in \a batch, using
154
- \a storage as backing storage for the linked list element.
155
- \a storage is owned by the caller and must survive for the
156
- lifetime of batch. This usually means it should be around
157
- for the lifetime of the call.
158
- Takes ownership of \a elem_to_add */
159
- grpc_error_handle grpc_metadata_batch_add_tail(
160
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
161
- grpc_mdelem elem_to_add) GRPC_MUST_USE_RESULT;
162
-
163
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
164
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
165
- grpc_metadata_batch_callouts_index idx) {
166
- return grpc_metadata_batch_link_tail(batch, storage, idx);
1170
+ template <typename Derived, typename... Traits>
1171
+ Derived MetadataMap<Derived, Traits...>::Copy() const {
1172
+ Derived out(unknown_.arena());
1173
+ metadata_detail::CopySink<Derived> sink(&out);
1174
+ Encode(&sink);
1175
+ return out;
167
1176
  }
168
1177
 
169
- inline grpc_error_handle GRPC_MUST_USE_RESULT grpc_metadata_batch_add_tail(
170
- grpc_metadata_batch* batch, grpc_linked_mdelem* storage,
171
- grpc_mdelem elem_to_add, grpc_metadata_batch_callouts_index idx) {
172
- GPR_DEBUG_ASSERT(!GRPC_MDISNULL(elem_to_add));
173
- storage->md = elem_to_add;
174
- return grpc_metadata_batch_add_tail(batch, storage, idx);
1178
+ template <typename Derived, typename... Traits>
1179
+ void MetadataMap<Derived, Traits...>::Log(
1180
+ absl::FunctionRef<void(absl::string_view, absl::string_view)> log_fn)
1181
+ const {
1182
+ LogEncoder enc(log_fn);
1183
+ Encode(&enc);
175
1184
  }
176
1185
 
177
- grpc_error_handle grpc_attach_md_to_error(grpc_error_handle src,
178
- grpc_mdelem md);
179
-
180
- struct grpc_filtered_mdelem {
181
- grpc_error_handle error;
182
- grpc_mdelem md;
183
- };
184
- #define GRPC_FILTERED_ERROR(error) \
185
- { (error), GRPC_MDNULL }
186
- #define GRPC_FILTERED_MDELEM(md) \
187
- { GRPC_ERROR_NONE, (md) }
188
- #define GRPC_FILTERED_REMOVE() \
189
- { GRPC_ERROR_NONE, GRPC_MDNULL }
190
-
191
- typedef grpc_filtered_mdelem (*grpc_metadata_batch_filter_func)(
192
- void* user_data, grpc_mdelem elem);
193
- grpc_error_handle grpc_metadata_batch_filter(
194
- grpc_metadata_batch* batch, grpc_metadata_batch_filter_func func,
195
- void* user_data, const char* composite_error_string) GRPC_MUST_USE_RESULT;
196
-
197
- #ifndef NDEBUG
198
- void grpc_metadata_batch_assert_ok(grpc_metadata_batch* batch);
199
- #else
200
- #define grpc_metadata_batch_assert_ok(batch) \
201
- do { \
202
- } while (0)
203
- #endif
204
-
205
- /// Copies \a src to \a dst. \a storage must point to an array of
206
- /// \a grpc_linked_mdelem structs of at least the same size as \a src.
207
- ///
208
- /// For each mdelem in \a src, if the mdelem is of storage types
209
- /// GRPC_MDELEM_STORAGE_INTERNED or GRPC_MDELEM_STORAGE_ALLOCATED,
210
- /// refs the original mdelem for the copy. Otherwise, makes a new
211
- /// mdelem that will hold its own refs to the key and value slices.
212
- ///
213
- /// Currently used only in the retry code.
214
- void grpc_metadata_batch_copy(grpc_metadata_batch* src,
215
- grpc_metadata_batch* dst,
216
- grpc_linked_mdelem* storage);
217
-
218
- void grpc_metadata_batch_move(grpc_metadata_batch* src,
219
- grpc_metadata_batch* dst);
1186
+ } // namespace grpc_core
1187
+
1188
+ struct grpc_metadata_batch;
1189
+
1190
+ using grpc_metadata_batch_base = grpc_core::MetadataMap<
1191
+ grpc_metadata_batch,
1192
+ // Colon prefixed headers first
1193
+ grpc_core::HttpPathMetadata, grpc_core::HttpAuthorityMetadata,
1194
+ grpc_core::HttpMethodMetadata, grpc_core::HttpStatusMetadata,
1195
+ grpc_core::HttpSchemeMetadata,
1196
+ // Non-colon prefixed headers begin here
1197
+ grpc_core::ContentTypeMetadata, grpc_core::TeMetadata,
1198
+ grpc_core::GrpcEncodingMetadata, grpc_core::GrpcInternalEncodingRequest,
1199
+ grpc_core::GrpcAcceptEncodingMetadata, grpc_core::GrpcStatusMetadata,
1200
+ grpc_core::GrpcTimeoutMetadata, grpc_core::GrpcPreviousRpcAttemptsMetadata,
1201
+ grpc_core::GrpcRetryPushbackMsMetadata, grpc_core::UserAgentMetadata,
1202
+ grpc_core::GrpcMessageMetadata, grpc_core::HostMetadata,
1203
+ grpc_core::XEndpointLoadMetricsBinMetadata,
1204
+ grpc_core::GrpcServerStatsBinMetadata, grpc_core::GrpcTraceBinMetadata,
1205
+ grpc_core::GrpcTagsBinMetadata, grpc_core::GrpcLbClientStatsMetadata,
1206
+ grpc_core::LbCostBinMetadata, grpc_core::LbTokenMetadata>;
1207
+
1208
+ struct grpc_metadata_batch : public grpc_metadata_batch_base {
1209
+ using grpc_metadata_batch_base::grpc_metadata_batch_base;
1210
+ };
220
1211
 
221
1212
  #endif /* GRPC_CORE_LIB_TRANSPORT_METADATA_BATCH_H */