grpc 1.37.0 → 1.45.0

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

Potentially problematic release.


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

Files changed (2039) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +501 -260
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/byte_buffer.h +1 -1
  5. data/include/grpc/byte_buffer_reader.h +1 -1
  6. data/include/grpc/event_engine/README.md +38 -0
  7. data/include/grpc/event_engine/endpoint_config.h +43 -0
  8. data/include/grpc/event_engine/event_engine.h +399 -0
  9. data/include/grpc/event_engine/internal/memory_allocator_impl.h +68 -0
  10. data/include/grpc/event_engine/memory_allocator.h +226 -0
  11. data/include/grpc/event_engine/memory_request.h +57 -0
  12. data/include/grpc/event_engine/port.h +39 -0
  13. data/include/grpc/fork.h +1 -1
  14. data/include/grpc/grpc.h +65 -22
  15. data/include/grpc/grpc_posix.h +22 -18
  16. data/include/grpc/grpc_security.h +358 -191
  17. data/include/grpc/grpc_security_constants.h +17 -14
  18. data/include/grpc/impl/codegen/atm.h +5 -3
  19. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  20. data/include/grpc/impl/codegen/atm_gcc_sync.h +2 -0
  21. data/include/grpc/impl/codegen/atm_windows.h +2 -0
  22. data/include/grpc/impl/codegen/byte_buffer.h +2 -0
  23. data/include/grpc/impl/codegen/byte_buffer_reader.h +2 -0
  24. data/include/grpc/impl/codegen/compression_types.h +2 -2
  25. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  26. data/include/grpc/impl/codegen/fork.h +2 -0
  27. data/include/grpc/impl/codegen/gpr_slice.h +2 -0
  28. data/include/grpc/impl/codegen/gpr_types.h +2 -0
  29. data/include/grpc/impl/codegen/grpc_types.h +61 -28
  30. data/include/grpc/impl/codegen/log.h +2 -0
  31. data/include/grpc/impl/codegen/port_platform.h +83 -22
  32. data/include/grpc/impl/codegen/propagation_bits.h +2 -0
  33. data/include/grpc/impl/codegen/slice.h +6 -1
  34. data/include/grpc/impl/codegen/status.h +2 -0
  35. data/include/grpc/impl/codegen/sync.h +8 -5
  36. data/include/grpc/impl/codegen/sync_abseil.h +2 -0
  37. data/include/grpc/impl/codegen/sync_custom.h +2 -0
  38. data/include/grpc/impl/codegen/sync_generic.h +3 -0
  39. data/include/grpc/impl/codegen/sync_posix.h +4 -2
  40. data/include/grpc/impl/codegen/sync_windows.h +2 -0
  41. data/include/grpc/module.modulemap +14 -14
  42. data/include/grpc/slice.h +1 -12
  43. data/include/grpc/status.h +1 -1
  44. data/include/grpc/support/atm.h +1 -1
  45. data/include/grpc/support/atm_gcc_atomic.h +1 -1
  46. data/include/grpc/support/atm_gcc_sync.h +1 -1
  47. data/include/grpc/support/atm_windows.h +1 -1
  48. data/include/grpc/support/log.h +1 -1
  49. data/include/grpc/support/port_platform.h +1 -1
  50. data/include/grpc/support/sync.h +1 -1
  51. data/include/grpc/support/sync_abseil.h +1 -1
  52. data/include/grpc/support/sync_custom.h +1 -1
  53. data/include/grpc/support/sync_generic.h +1 -1
  54. data/include/grpc/support/sync_posix.h +1 -1
  55. data/include/grpc/support/sync_windows.h +1 -1
  56. data/include/grpc/support/time.h +2 -2
  57. data/src/core/ext/filters/census/grpc_context.cc +1 -0
  58. data/src/core/ext/filters/client_channel/backend_metric.cc +24 -27
  59. data/src/core/ext/filters/client_channel/backend_metric.h +4 -3
  60. data/src/core/ext/filters/client_channel/backup_poller.cc +17 -12
  61. data/src/core/ext/filters/client_channel/backup_poller.h +1 -0
  62. data/src/core/ext/filters/client_channel/channel_connectivity.cc +158 -202
  63. data/src/core/ext/filters/client_channel/client_channel.cc +1231 -3574
  64. data/src/core/ext/filters/client_channel/client_channel.h +563 -56
  65. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +6 -5
  66. data/src/core/ext/filters/client_channel/client_channel_channelz.h +2 -2
  67. data/src/core/ext/filters/client_channel/client_channel_factory.cc +2 -1
  68. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  69. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +19 -22
  70. data/src/core/ext/filters/client_channel/config_selector.cc +2 -1
  71. data/src/core/ext/filters/client_channel/config_selector.h +22 -10
  72. data/src/core/ext/filters/client_channel/connector.h +20 -20
  73. data/src/core/ext/filters/client_channel/dynamic_filters.cc +15 -17
  74. data/src/core/ext/filters/client_channel/dynamic_filters.h +5 -5
  75. data/src/core/ext/filters/client_channel/global_subchannel_pool.cc +2 -22
  76. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +3 -16
  77. data/src/core/ext/filters/client_channel/health/health_check_client.cc +72 -68
  78. data/src/core/ext/filters/client_channel/health/health_check_client.h +38 -36
  79. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +54 -55
  80. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -2
  81. data/src/core/ext/filters/client_channel/http_proxy.cc +16 -1
  82. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
  83. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
  84. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +6 -2
  85. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +12 -24
  86. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +300 -201
  87. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +3 -6
  88. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  89. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
  90. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -4
  91. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +6 -5
  92. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +17 -18
  93. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -4
  94. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +86 -61
  95. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +73 -68
  96. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +785 -0
  97. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -0
  98. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2551 -0
  99. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +77 -78
  100. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +19 -14
  101. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +37 -34
  102. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +112 -167
  103. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
  104. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  105. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +188 -111
  106. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +46 -65
  107. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +198 -312
  108. data/src/core/ext/filters/client_channel/lb_policy.cc +17 -30
  109. data/src/core/ext/filters/client_channel/lb_policy.h +170 -137
  110. data/src/core/ext/filters/client_channel/lb_policy_factory.h +2 -1
  111. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +8 -11
  112. data/src/core/ext/filters/client_channel/lb_policy_registry.h +1 -1
  113. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +133 -0
  114. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +292 -149
  115. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +23 -12
  116. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_event_engine.cc +31 -0
  117. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +24 -19
  118. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +51 -69
  119. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +168 -281
  120. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +39 -26
  121. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_event_engine.cc +28 -0
  122. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +2 -2
  123. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +138 -120
  124. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +42 -47
  125. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +9 -6
  126. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +102 -79
  127. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +41 -40
  128. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +547 -468
  129. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +42 -253
  130. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +34 -57
  131. data/src/core/ext/filters/client_channel/retry_filter.cc +2640 -0
  132. data/src/core/ext/filters/{workarounds/workaround_cronet_compression_filter.h → client_channel/retry_filter.h} +9 -6
  133. data/src/core/ext/filters/client_channel/retry_service_config.cc +314 -0
  134. data/src/core/ext/filters/client_channel/retry_service_config.h +102 -0
  135. data/src/core/ext/filters/client_channel/retry_throttle.cc +14 -59
  136. data/src/core/ext/filters/client_channel/retry_throttle.h +11 -5
  137. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +56 -41
  138. data/src/core/ext/filters/client_channel/subchannel.cc +143 -207
  139. data/src/core/ext/filters/client_channel/subchannel.h +43 -62
  140. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  141. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  142. data/src/core/ext/filters/client_idle/client_idle_filter.cc +109 -348
  143. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  144. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  145. data/src/core/ext/filters/deadline/deadline_filter.cc +41 -43
  146. data/src/core/ext/filters/deadline/deadline_filter.h +3 -2
  147. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +105 -102
  148. data/src/core/ext/filters/fault_injection/service_config_parser.cc +21 -31
  149. data/src/core/ext/filters/fault_injection/service_config_parser.h +11 -5
  150. data/src/core/ext/filters/http/client/http_client_filter.cc +108 -183
  151. data/src/core/ext/filters/http/client_authority_filter.cc +36 -95
  152. data/src/core/ext/filters/http/client_authority_filter.h +23 -5
  153. data/src/core/ext/filters/http/http_filters_plugin.cc +52 -73
  154. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +67 -157
  155. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +43 -56
  156. data/src/core/ext/filters/http/server/http_server_filter.cc +115 -207
  157. data/src/core/ext/filters/max_age/max_age_filter.cc +75 -69
  158. data/src/core/ext/filters/message_size/message_size_filter.cc +63 -69
  159. data/src/core/ext/filters/message_size/message_size_filter.h +11 -4
  160. data/src/core/ext/filters/rbac/rbac_filter.cc +162 -0
  161. data/src/core/ext/filters/rbac/rbac_filter.h +76 -0
  162. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +606 -0
  163. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +75 -0
  164. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +67 -0
  165. data/src/core/ext/filters/server_config_selector/server_config_selector.h +71 -0
  166. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +271 -0
  167. data/src/core/{lib/transport/authority_override.h → ext/filters/server_config_selector/server_config_selector_filter.h} +8 -13
  168. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  169. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +251 -19
  170. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +7 -7
  171. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +339 -138
  172. data/src/core/ext/transport/chttp2/server/chttp2_server.h +2 -2
  173. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +4 -2
  174. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +2 -1
  175. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +1 -0
  176. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +386 -463
  177. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +12 -4
  178. data/src/core/ext/transport/chttp2/transport/context_list.cc +4 -6
  179. data/src/core/ext/transport/chttp2/transport/context_list.h +4 -6
  180. data/src/core/ext/transport/chttp2/transport/flow_control.cc +66 -47
  181. data/src/core/ext/transport/chttp2/transport/flow_control.h +27 -21
  182. data/src/core/ext/transport/chttp2/transport/frame_data.cc +23 -24
  183. data/src/core/ext/transport/chttp2/transport/frame_data.h +11 -10
  184. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +21 -20
  185. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +7 -6
  186. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +17 -17
  187. data/src/core/ext/transport/chttp2/transport/frame_ping.h +8 -6
  188. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +17 -15
  189. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +7 -6
  190. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +49 -17
  191. data/src/core/ext/transport/chttp2/transport/frame_settings.h +7 -6
  192. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +16 -13
  193. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  194. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +41 -0
  195. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +520 -749
  196. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +183 -71
  197. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +86 -0
  198. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +71 -0
  199. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +811 -1193
  200. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +101 -83
  201. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +239 -0
  202. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +115 -0
  203. data/src/core/ext/transport/chttp2/transport/internal.h +51 -74
  204. data/src/core/ext/transport/chttp2/transport/parsing.cc +157 -293
  205. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +2 -2
  206. data/src/core/ext/transport/chttp2/transport/varint.cc +13 -7
  207. data/src/core/ext/transport/chttp2/transport/varint.h +39 -28
  208. data/src/core/ext/transport/chttp2/transport/writing.cc +113 -164
  209. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
  210. data/src/core/ext/transport/inproc/inproc_transport.cc +186 -215
  211. data/src/core/ext/transport/inproc/inproc_transport.h +1 -4
  212. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +114 -0
  213. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +402 -0
  214. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +119 -0
  215. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +453 -0
  216. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +244 -210
  217. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +932 -575
  218. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +56 -0
  219. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +138 -0
  220. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +62 -0
  221. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +146 -0
  222. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +46 -0
  223. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +106 -0
  224. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +43 -0
  225. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +93 -0
  226. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.c +43 -0
  227. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +88 -0
  228. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.c +103 -0
  229. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +466 -0
  230. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +48 -0
  231. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +95 -0
  232. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.c +44 -1
  233. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +20 -1
  234. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +31 -5
  235. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +40 -19
  236. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +144 -117
  237. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +513 -317
  238. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +241 -188
  239. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +954 -530
  240. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +44 -29
  241. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +137 -81
  242. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +328 -250
  243. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +1266 -657
  244. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +21 -8
  245. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +41 -23
  246. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +41 -28
  247. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +136 -80
  248. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +290 -0
  249. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +1122 -0
  250. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +73 -54
  251. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +265 -159
  252. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +21 -8
  253. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +41 -23
  254. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +238 -153
  255. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +894 -471
  256. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +63 -46
  257. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +210 -130
  258. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +20 -7
  259. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +33 -19
  260. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +32 -18
  261. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +88 -53
  262. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +58 -0
  263. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +138 -0
  264. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +144 -118
  265. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +529 -329
  266. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +112 -91
  267. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +425 -259
  268. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +22 -9
  269. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +44 -26
  270. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +212 -91
  271. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +932 -266
  272. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +18 -5
  273. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +33 -17
  274. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +60 -0
  275. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +152 -0
  276. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +23 -10
  277. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +47 -25
  278. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +28 -14
  279. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +53 -35
  280. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +48 -0
  281. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +108 -0
  282. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +52 -36
  283. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +133 -85
  284. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +91 -39
  285. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +325 -107
  286. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +71 -54
  287. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +244 -144
  288. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +20 -7
  289. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +36 -20
  290. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +97 -69
  291. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +400 -226
  292. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +99 -78
  293. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +340 -213
  294. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +61 -0
  295. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +199 -0
  296. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +27 -11
  297. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +86 -49
  298. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +53 -0
  299. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +120 -0
  300. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +82 -62
  301. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +294 -185
  302. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +93 -60
  303. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +349 -181
  304. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +127 -100
  305. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +307 -185
  306. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +59 -27
  307. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +195 -88
  308. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +648 -559
  309. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +2460 -1505
  310. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +39 -20
  311. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +127 -64
  312. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +216 -0
  313. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +870 -0
  314. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +44 -0
  315. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +82 -0
  316. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +49 -0
  317. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +95 -0
  318. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +28 -14
  319. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +69 -40
  320. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +52 -0
  321. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +119 -0
  322. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +62 -0
  323. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +203 -0
  324. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +47 -0
  325. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +89 -0
  326. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +69 -0
  327. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +184 -0
  328. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +32 -0
  329. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +42 -0
  330. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +71 -0
  331. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +192 -0
  332. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +54 -0
  333. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +126 -0
  334. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +18 -5
  335. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +37 -23
  336. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +46 -29
  337. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +156 -92
  338. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +52 -36
  339. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +175 -107
  340. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +63 -0
  341. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +165 -0
  342. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +27 -13
  343. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +69 -41
  344. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +272 -200
  345. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +1095 -552
  346. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +10 -1
  347. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +7 -4
  348. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +108 -52
  349. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +448 -171
  350. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +42 -27
  351. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +115 -71
  352. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +103 -83
  353. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +341 -213
  354. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +62 -0
  355. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +146 -0
  356. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +16 -3
  357. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +29 -15
  358. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +92 -73
  359. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +335 -218
  360. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +32 -18
  361. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +87 -54
  362. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +85 -40
  363. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +303 -104
  364. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +48 -0
  365. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +101 -0
  366. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +76 -0
  367. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +228 -0
  368. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +74 -0
  369. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +202 -0
  370. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +29 -14
  371. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +81 -46
  372. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +22 -9
  373. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +42 -26
  374. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +21 -8
  375. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +33 -19
  376. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +20 -7
  377. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +33 -19
  378. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +37 -21
  379. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +105 -61
  380. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +32 -18
  381. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +79 -52
  382. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +27 -13
  383. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +70 -43
  384. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +38 -23
  385. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +94 -58
  386. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +51 -32
  387. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +206 -124
  388. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +54 -37
  389. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +191 -115
  390. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +66 -0
  391. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +183 -0
  392. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.c +10 -1
  393. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +4 -1
  394. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +42 -0
  395. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +136 -0
  396. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +24 -10
  397. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +65 -34
  398. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +31 -16
  399. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +100 -52
  400. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.c +26 -0
  401. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_unit.upb.h +41 -0
  402. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +20 -7
  403. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +39 -19
  404. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.c +51 -0
  405. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +114 -0
  406. data/src/core/ext/upb-generated/google/api/annotations.upb.c +23 -1
  407. data/src/core/ext/upb-generated/google/api/annotations.upb.h +9 -1
  408. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +151 -126
  409. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +439 -281
  410. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +153 -127
  411. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +483 -298
  412. data/src/core/ext/upb-generated/google/api/http.upb.c +44 -29
  413. data/src/core/ext/upb-generated/google/api/http.upb.h +137 -89
  414. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +46 -0
  415. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +99 -0
  416. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +19 -6
  417. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +40 -22
  418. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +367 -277
  419. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +1252 -764
  420. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +19 -6
  421. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +36 -18
  422. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +16 -3
  423. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +29 -15
  424. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +48 -32
  425. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +100 -64
  426. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +19 -6
  427. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +36 -18
  428. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +58 -37
  429. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +269 -149
  430. data/src/core/ext/upb-generated/google/rpc/status.upb.c +22 -9
  431. data/src/core/ext/upb-generated/google/rpc/status.upb.h +44 -26
  432. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +84 -0
  433. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +276 -0
  434. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +33 -19
  435. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +68 -42
  436. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +132 -108
  437. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +458 -285
  438. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +27 -13
  439. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +72 -39
  440. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +23 -9
  441. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +64 -35
  442. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +82 -62
  443. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +321 -197
  444. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +70 -0
  445. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +175 -0
  446. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +76 -14
  447. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +132 -63
  448. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +32 -8
  449. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +41 -18
  450. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.c +22 -1
  451. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +9 -1
  452. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +32 -6
  453. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +41 -18
  454. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +31 -5
  455. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +40 -19
  456. data/src/core/ext/upb-generated/validate/validate.upb.c +396 -295
  457. data/src/core/ext/upb-generated/validate/validate.upb.h +1395 -768
  458. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +110 -0
  459. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +191 -0
  460. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +55 -0
  461. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +87 -0
  462. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.c +38 -0
  463. data/src/core/ext/upb-generated/xds/annotations/v3/sensitive.upb.h +38 -0
  464. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +105 -0
  465. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +230 -0
  466. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +53 -0
  467. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +81 -0
  468. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +19 -6
  469. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +35 -19
  470. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +32 -18
  471. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +77 -46
  472. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +27 -13
  473. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +39 -25
  474. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +46 -0
  475. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +95 -0
  476. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +24 -11
  477. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +47 -27
  478. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +35 -21
  479. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +87 -54
  480. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +24 -11
  481. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +51 -29
  482. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +73 -0
  483. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +144 -0
  484. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +203 -0
  485. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +726 -0
  486. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +52 -0
  487. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +132 -0
  488. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +65 -0
  489. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +173 -0
  490. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +46 -0
  491. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +95 -0
  492. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.c +84 -0
  493. data/src/core/ext/upbdefs-generated/envoy/admin/v3/certs.upbdefs.h +55 -0
  494. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.c +127 -0
  495. data/src/core/ext/upbdefs-generated/envoy/admin/v3/clusters.upbdefs.h +50 -0
  496. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +16 -61
  497. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +67 -67
  498. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.c +43 -0
  499. data/src/core/ext/upbdefs-generated/envoy/admin/v3/init_dump.upbdefs.h +40 -0
  500. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +53 -0
  501. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.h +40 -0
  502. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.c +49 -0
  503. data/src/core/ext/upbdefs-generated/envoy/admin/v3/memory.upbdefs.h +35 -0
  504. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.c +46 -0
  505. data/src/core/ext/upbdefs-generated/envoy/admin/v3/metrics.upbdefs.h +35 -0
  506. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.c +46 -0
  507. data/src/core/ext/upbdefs-generated/envoy/admin/v3/mutex_stats.upbdefs.h +35 -0
  508. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.c +142 -0
  509. data/src/core/ext/upbdefs-generated/envoy/admin/v3/server_info.upbdefs.h +40 -0
  510. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.c +51 -0
  511. data/src/core/ext/upbdefs-generated/envoy/admin/v3/tap.upbdefs.h +35 -0
  512. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +22 -12
  513. data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +1 -1
  514. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +10 -13
  515. data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +4 -4
  516. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +69 -98
  517. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +46 -46
  518. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +349 -339
  519. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.h +57 -52
  520. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +18 -24
  521. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +10 -10
  522. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +488 -484
  523. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +80 -70
  524. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +16 -18
  525. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +4 -4
  526. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +18 -20
  527. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +4 -4
  528. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.c +206 -0
  529. data/src/core/ext/upbdefs-generated/envoy/config/common/matcher/v3/matcher.upbdefs.h +105 -0
  530. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +17 -32
  531. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +22 -22
  532. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +17 -19
  533. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +4 -4
  534. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +224 -229
  535. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +79 -64
  536. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +23 -33
  537. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +16 -16
  538. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +16 -19
  539. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +4 -4
  540. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +17 -21
  541. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +7 -7
  542. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.c +53 -0
  543. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_method_list.upbdefs.h +40 -0
  544. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +23 -51
  545. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +43 -43
  546. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +76 -89
  547. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +25 -25
  548. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +16 -19
  549. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +4 -4
  550. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +267 -200
  551. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +59 -34
  552. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +14 -16
  553. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +4 -4
  554. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.c +55 -0
  555. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/resolver.upbdefs.h +40 -0
  556. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +16 -18
  557. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +4 -4
  558. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +40 -38
  559. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +4 -4
  560. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.c +49 -0
  561. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/udp_socket_config.upbdefs.h +35 -0
  562. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +20 -28
  563. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +13 -13
  564. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +98 -83
  565. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +23 -13
  566. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +20 -30
  567. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +16 -16
  568. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +16 -18
  569. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +4 -4
  570. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +157 -155
  571. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +21 -16
  572. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +147 -153
  573. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +22 -22
  574. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.c +88 -0
  575. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/quic_config.upbdefs.h +35 -0
  576. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +40 -36
  577. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +7 -7
  578. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.c +69 -0
  579. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/metrics_service.upbdefs.h +35 -0
  580. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.c +19 -35
  581. data/src/core/ext/upbdefs-generated/envoy/config/metrics/v3/stats.upbdefs.h +25 -25
  582. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.c +40 -47
  583. data/src/core/ext/upbdefs-generated/envoy/config/overload/v3/overload.upbdefs.h +30 -25
  584. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +190 -0
  585. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
  586. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +79 -71
  587. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +12 -7
  588. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +717 -773
  589. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +162 -157
  590. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +54 -48
  591. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +10 -10
  592. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +188 -0
  593. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +85 -0
  594. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.c +54 -0
  595. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/datadog.upbdefs.h +35 -0
  596. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.c +57 -0
  597. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/dynamic_ot.upbdefs.h +35 -0
  598. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +17 -21
  599. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +7 -7
  600. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.c +72 -0
  601. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/lightstep.upbdefs.h +35 -0
  602. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.c +99 -0
  603. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opencensus.upbdefs.h +35 -0
  604. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.c +52 -0
  605. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/service.upbdefs.h +35 -0
  606. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.c +71 -0
  607. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/skywalking.upbdefs.h +40 -0
  608. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +57 -0
  609. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.h +30 -0
  610. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.c +75 -0
  611. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/xray.upbdefs.h +40 -0
  612. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.c +77 -0
  613. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/zipkin.upbdefs.h +35 -0
  614. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +17 -18
  615. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +4 -4
  616. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.c +19 -29
  617. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/common/fault/v3/fault.upbdefs.h +16 -16
  618. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.c +27 -30
  619. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/fault/v3/fault.upbdefs.h +10 -10
  620. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +59 -0
  621. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
  622. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.c +26 -24
  623. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/router/v3/router.upbdefs.h +4 -4
  624. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +455 -429
  625. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +62 -52
  626. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +17 -13
  627. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +1 -1
  628. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +178 -138
  629. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +26 -16
  630. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +21 -27
  631. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +10 -10
  632. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +194 -200
  633. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +19 -19
  634. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.c +58 -0
  635. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upbdefs.h +40 -0
  636. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +16 -18
  637. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +4 -4
  638. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +19 -33
  639. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +22 -22
  640. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +18 -22
  641. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +7 -7
  642. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +120 -97
  643. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.h +18 -13
  644. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.c +46 -0
  645. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/cookie.upbdefs.h +35 -0
  646. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.c +56 -0
  647. data/src/core/ext/upbdefs-generated/envoy/type/http/v3/path_transformation.upbdefs.h +50 -0
  648. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.c +52 -0
  649. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/http_inputs.upbdefs.h +50 -0
  650. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +24 -27
  651. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +7 -7
  652. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.c +17 -19
  653. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/node.upbdefs.h +4 -4
  654. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +17 -19
  655. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +4 -4
  656. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +17 -19
  657. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +4 -4
  658. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +45 -48
  659. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +10 -10
  660. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +17 -21
  661. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +7 -7
  662. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.c +16 -21
  663. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/struct.upbdefs.h +7 -7
  664. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +18 -24
  665. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +10 -10
  666. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +15 -29
  667. data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +22 -22
  668. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +16 -26
  669. data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +16 -16
  670. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.c +53 -0
  671. data/src/core/ext/upbdefs-generated/envoy/type/v3/hash_policy.upbdefs.h +45 -0
  672. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +12 -10
  673. data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +1 -1
  674. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.c +94 -0
  675. data/src/core/ext/upbdefs-generated/envoy/type/v3/http_status.upbdefs.h +35 -0
  676. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +14 -19
  677. data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +7 -7
  678. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +13 -19
  679. data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +10 -10
  680. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.c +38 -0
  681. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_unit.upbdefs.h +30 -0
  682. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +13 -16
  683. data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +4 -4
  684. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.c +57 -0
  685. data/src/core/ext/upbdefs-generated/envoy/type/v3/token_bucket.upbdefs.h +35 -0
  686. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +7 -7
  687. data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +1 -1
  688. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
  689. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
  690. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
  691. data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
  692. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +5 -14
  693. data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +10 -10
  694. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.c +39 -0
  695. data/src/core/ext/upbdefs-generated/google/api/httpbody.upbdefs.h +35 -0
  696. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +5 -10
  697. data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +4 -4
  698. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +107 -164
  699. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +82 -82
  700. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +5 -10
  701. data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +4 -4
  702. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +5 -10
  703. data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +4 -4
  704. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +5 -16
  705. data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +13 -13
  706. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +5 -10
  707. data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +4 -4
  708. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +5 -26
  709. data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +28 -28
  710. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +9 -14
  711. data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +4 -4
  712. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.c +67 -0
  713. data/src/core/ext/upbdefs-generated/opencensus/proto/trace/v1/trace_config.upbdefs.h +50 -0
  714. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +10 -18
  715. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +10 -10
  716. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +24 -33
  717. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +4 -4
  718. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +9 -8
  719. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +1 -1
  720. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +10 -13
  721. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +4 -4
  722. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +10 -14
  723. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +4 -4
  724. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +189 -216
  725. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +70 -70
  726. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.c +63 -0
  727. data/src/core/ext/upbdefs-generated/xds/annotations/v3/migrate.upbdefs.h +45 -0
  728. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.c +47 -0
  729. data/src/core/ext/upbdefs-generated/xds/annotations/v3/security.upbdefs.h +35 -0
  730. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.c +35 -0
  731. data/src/core/ext/upbdefs-generated/xds/annotations/v3/sensitive.upbdefs.h +30 -0
  732. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +64 -0
  733. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  734. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.c +40 -0
  735. data/src/core/ext/upbdefs-generated/xds/annotations/v3/versioning.upbdefs.h +35 -0
  736. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +18 -22
  737. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +4 -4
  738. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +32 -38
  739. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +7 -7
  740. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +20 -26
  741. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +7 -7
  742. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.c +41 -0
  743. data/src/core/ext/upbdefs-generated/xds/core/v3/extension.upbdefs.h +35 -0
  744. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +23 -27
  745. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +4 -4
  746. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +39 -45
  747. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +7 -7
  748. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +25 -29
  749. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +4 -4
  750. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.c +126 -0
  751. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/matcher.upbdefs.h +80 -0
  752. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.c +40 -0
  753. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/regex.upbdefs.h +40 -0
  754. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.c +52 -0
  755. data/src/core/ext/upbdefs-generated/xds/type/matcher/v3/string.upbdefs.h +40 -0
  756. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +40 -0
  757. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  758. data/src/core/ext/xds/certificate_provider_factory.h +1 -1
  759. data/src/core/ext/xds/certificate_provider_registry.cc +3 -3
  760. data/src/core/ext/xds/certificate_provider_store.h +4 -4
  761. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +7 -7
  762. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +4 -4
  763. data/src/core/ext/xds/upb_utils.h +67 -0
  764. data/src/core/ext/xds/xds_api.cc +232 -3313
  765. data/src/core/ext/xds/xds_api.h +70 -550
  766. data/src/core/ext/xds/xds_bootstrap.cc +315 -300
  767. data/src/core/ext/xds/xds_bootstrap.h +54 -33
  768. data/src/core/ext/xds/xds_certificate_provider.cc +7 -7
  769. data/src/core/ext/xds/xds_certificate_provider.h +6 -6
  770. data/src/core/ext/xds/xds_channel_args.h +5 -2
  771. data/src/core/ext/xds/xds_channel_stack_modifier.cc +109 -0
  772. data/src/core/ext/xds/xds_channel_stack_modifier.h +53 -0
  773. data/src/core/ext/xds/xds_client.cc +1093 -957
  774. data/src/core/ext/xds/xds_client.h +143 -168
  775. data/src/core/ext/xds/xds_client_stats.cc +31 -30
  776. data/src/core/ext/xds/xds_client_stats.h +15 -13
  777. data/src/core/ext/xds/xds_cluster.cc +453 -0
  778. data/src/core/ext/xds/xds_cluster.h +108 -0
  779. data/src/core/ext/xds/xds_common_types.cc +388 -0
  780. data/src/core/ext/xds/xds_common_types.h +95 -0
  781. data/src/core/ext/xds/xds_endpoint.cc +364 -0
  782. data/src/core/ext/xds/xds_endpoint.h +135 -0
  783. data/src/core/ext/xds/xds_http_fault_filter.cc +10 -9
  784. data/src/core/ext/xds/xds_http_fault_filter.h +6 -5
  785. data/src/core/ext/xds/xds_http_filters.cc +15 -7
  786. data/src/core/ext/xds/xds_http_filters.h +7 -4
  787. data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
  788. data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
  789. data/src/core/ext/xds/xds_listener.cc +1039 -0
  790. data/src/core/ext/xds/xds_listener.h +220 -0
  791. data/src/core/{lib/transport/authority_override.cc → ext/xds/xds_resource_type.cc} +10 -17
  792. data/src/core/ext/xds/xds_resource_type.h +98 -0
  793. data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
  794. data/src/core/ext/xds/xds_route_config.cc +985 -0
  795. data/src/core/ext/xds/xds_route_config.h +215 -0
  796. data/src/core/ext/xds/xds_routing.cc +250 -0
  797. data/src/core/ext/xds/xds_routing.h +101 -0
  798. data/src/core/ext/xds/xds_server_config_fetcher.cc +1083 -296
  799. data/src/core/lib/{iomgr → address_utils}/parse_address.cc +43 -25
  800. data/src/core/lib/{iomgr → address_utils}/parse_address.h +12 -7
  801. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.cc +34 -41
  802. data/src/core/lib/{iomgr → address_utils}/sockaddr_utils.h +5 -15
  803. data/src/core/lib/avl/avl.h +389 -88
  804. data/src/core/lib/backoff/backoff.cc +9 -38
  805. data/src/core/lib/backoff/backoff.h +11 -11
  806. data/src/core/lib/channel/call_finalization.h +86 -0
  807. data/src/core/lib/channel/call_tracer.h +85 -0
  808. data/src/core/lib/channel/channel_args.cc +87 -9
  809. data/src/core/lib/channel/channel_args.h +13 -1
  810. data/src/core/lib/channel/channel_args_preconditioning.cc +48 -0
  811. data/src/core/lib/channel/channel_args_preconditioning.h +62 -0
  812. data/src/core/lib/channel/channel_stack.cc +25 -15
  813. data/src/core/lib/channel/channel_stack.h +53 -16
  814. data/src/core/lib/channel/channel_stack_builder.cc +68 -262
  815. data/src/core/lib/channel/channel_stack_builder.h +95 -155
  816. data/src/core/lib/channel/channel_trace.cc +8 -10
  817. data/src/core/lib/channel/channel_trace.h +2 -1
  818. data/src/core/lib/channel/channelz.cc +65 -52
  819. data/src/core/lib/channel/channelz.h +32 -29
  820. data/src/core/lib/channel/channelz_registry.cc +8 -7
  821. data/src/core/lib/channel/channelz_registry.h +1 -1
  822. data/src/core/lib/channel/connected_channel.cc +14 -10
  823. data/src/core/lib/channel/connected_channel.h +1 -2
  824. data/src/core/lib/channel/context.h +14 -0
  825. data/src/core/lib/channel/handshaker.cc +10 -8
  826. data/src/core/lib/channel/handshaker.h +7 -8
  827. data/src/core/lib/channel/handshaker_factory.h +10 -2
  828. data/src/core/lib/channel/handshaker_registry.cc +15 -70
  829. data/src/core/lib/channel/handshaker_registry.h +29 -12
  830. data/src/core/lib/channel/promise_based_filter.cc +669 -0
  831. data/src/core/lib/channel/promise_based_filter.h +423 -0
  832. data/src/core/lib/channel/status_util.h +6 -2
  833. data/src/core/lib/compression/compression.cc +22 -114
  834. data/src/core/lib/compression/compression_internal.cc +145 -207
  835. data/src/core/lib/compression/compression_internal.h +64 -69
  836. data/src/core/lib/compression/message_compress.cc +13 -13
  837. data/src/core/lib/compression/message_compress.h +2 -2
  838. data/src/core/lib/config/core_configuration.cc +104 -0
  839. data/src/core/lib/config/core_configuration.h +196 -0
  840. data/src/core/lib/debug/stats.cc +1 -1
  841. data/src/core/lib/debug/stats.h +2 -1
  842. data/src/core/lib/debug/stats_data.cc +15 -14
  843. data/src/core/lib/debug/stats_data.h +1 -0
  844. data/src/core/lib/debug/trace.cc +1 -0
  845. data/src/core/lib/debug/trace.h +4 -3
  846. data/src/core/lib/event_engine/channel_args_endpoint_config.cc +46 -0
  847. data/src/core/lib/event_engine/channel_args_endpoint_config.h +42 -0
  848. data/src/core/lib/event_engine/default_event_engine_factory.cc +27 -0
  849. data/src/core/lib/event_engine/event_engine.cc +52 -0
  850. data/src/core/lib/event_engine/event_engine_factory.h +36 -0
  851. data/src/core/lib/event_engine/memory_allocator.cc +66 -0
  852. data/src/core/lib/event_engine/resolved_address.cc +39 -0
  853. data/src/core/lib/event_engine/sockaddr.cc +40 -0
  854. data/src/core/lib/event_engine/sockaddr.h +44 -0
  855. data/src/core/lib/gpr/alloc.cc +4 -3
  856. data/src/core/lib/gpr/atm.cc +1 -1
  857. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  858. data/src/core/lib/gpr/env_linux.cc +1 -2
  859. data/src/core/lib/gpr/env_posix.cc +2 -3
  860. data/src/core/lib/gpr/log.cc +3 -3
  861. data/src/core/lib/gpr/log_android.cc +3 -2
  862. data/src/core/lib/gpr/log_linux.cc +7 -4
  863. data/src/core/lib/gpr/log_posix.cc +6 -3
  864. data/src/core/lib/gpr/murmur_hash.cc +4 -2
  865. data/src/core/lib/gpr/string.cc +2 -2
  866. data/src/core/lib/gpr/string.h +2 -2
  867. data/src/core/lib/gpr/sync.cc +2 -2
  868. data/src/core/lib/gpr/sync_abseil.cc +7 -6
  869. data/src/core/lib/gpr/sync_posix.cc +4 -3
  870. data/src/core/lib/gpr/time.cc +5 -3
  871. data/src/core/lib/gpr/time_windows.cc +3 -2
  872. data/src/core/lib/gpr/tls.h +125 -40
  873. data/src/core/lib/gpr/tmpfile_posix.cc +1 -2
  874. data/src/core/lib/gpr/useful.h +97 -32
  875. data/src/core/lib/gpr/wrap_memcpy.cc +2 -1
  876. data/src/core/lib/gprpp/atomic_utils.h +47 -0
  877. data/src/core/lib/gprpp/bitset.h +195 -0
  878. data/src/core/lib/gprpp/capture.h +76 -0
  879. data/src/core/lib/gprpp/chunked_vector.h +253 -0
  880. data/src/core/lib/gprpp/construct_destruct.h +39 -0
  881. data/src/core/lib/gprpp/cpp_impl_of.h +45 -0
  882. data/src/core/lib/gprpp/debug_location.h +2 -0
  883. data/src/core/lib/gprpp/dual_ref_counted.h +25 -26
  884. data/src/core/lib/gprpp/fork.cc +14 -12
  885. data/src/core/lib/gprpp/fork.h +4 -4
  886. data/src/core/lib/gprpp/global_config.h +1 -2
  887. data/src/core/lib/gprpp/global_config_env.cc +14 -14
  888. data/src/core/lib/gprpp/global_config_env.h +2 -2
  889. data/src/core/lib/gprpp/global_config_generic.h +2 -2
  890. data/src/core/lib/gprpp/manual_constructor.h +11 -9
  891. data/src/core/lib/gprpp/memory.h +9 -3
  892. data/src/core/lib/gprpp/mpscq.cc +7 -7
  893. data/src/core/lib/gprpp/mpscq.h +6 -5
  894. data/src/core/lib/gprpp/orphanable.h +7 -7
  895. data/src/core/lib/gprpp/ref_counted.h +47 -33
  896. data/src/core/lib/gprpp/ref_counted_ptr.h +2 -4
  897. data/src/core/lib/gprpp/status_helper.cc +419 -0
  898. data/src/core/lib/gprpp/status_helper.h +181 -0
  899. data/src/core/lib/gprpp/sync.h +5 -31
  900. data/src/core/lib/gprpp/table.h +434 -0
  901. data/src/core/lib/gprpp/thd_posix.cc +5 -5
  902. data/src/core/lib/gprpp/thd_windows.cc +4 -11
  903. data/src/core/lib/gprpp/time.cc +186 -0
  904. data/src/core/lib/gprpp/time.h +292 -0
  905. data/src/core/lib/gprpp/time_util.cc +2 -2
  906. data/src/core/lib/gprpp/time_util.h +2 -2
  907. data/src/core/lib/http/format_request.cc +28 -23
  908. data/src/core/lib/http/format_request.h +8 -6
  909. data/src/core/lib/http/httpcli.cc +299 -209
  910. data/src/core/lib/http/httpcli.h +183 -85
  911. data/src/core/lib/http/httpcli_security_connector.cc +71 -81
  912. data/src/core/lib/http/httpcli_ssl_credentials.h +37 -0
  913. data/src/core/lib/http/parser.cc +18 -18
  914. data/src/core/lib/http/parser.h +6 -5
  915. data/src/core/lib/iomgr/buffer_list.cc +16 -17
  916. data/src/core/lib/iomgr/buffer_list.h +22 -24
  917. data/src/core/lib/iomgr/call_combiner.cc +55 -23
  918. data/src/core/lib/iomgr/call_combiner.h +12 -14
  919. data/src/core/lib/iomgr/cfstream_handle.cc +4 -4
  920. data/src/core/lib/iomgr/cfstream_handle.h +1 -1
  921. data/src/core/lib/iomgr/closure.h +33 -12
  922. data/src/core/lib/iomgr/combiner.cc +46 -36
  923. data/src/core/lib/iomgr/combiner.h +3 -2
  924. data/src/core/lib/iomgr/dualstack_socket_posix.cc +1 -0
  925. data/src/core/lib/iomgr/endpoint.cc +1 -5
  926. data/src/core/lib/iomgr/endpoint.h +3 -6
  927. data/src/core/lib/iomgr/endpoint_cfstream.cc +25 -54
  928. data/src/core/lib/iomgr/endpoint_cfstream.h +4 -4
  929. data/src/core/lib/iomgr/endpoint_pair.h +1 -0
  930. data/src/core/lib/iomgr/endpoint_pair_event_engine.cc +32 -0
  931. data/src/core/lib/iomgr/endpoint_pair_posix.cc +11 -9
  932. data/src/core/lib/iomgr/endpoint_pair_windows.cc +5 -6
  933. data/src/core/lib/iomgr/error.cc +270 -99
  934. data/src/core/lib/iomgr/error.h +277 -113
  935. data/src/core/lib/iomgr/error_cfstream.cc +10 -4
  936. data/src/core/lib/iomgr/error_cfstream.h +2 -2
  937. data/src/core/lib/iomgr/error_internal.h +6 -1
  938. data/src/core/lib/iomgr/ev_apple.cc +10 -9
  939. data/src/core/lib/iomgr/ev_apple.h +1 -1
  940. data/src/core/lib/iomgr/ev_epoll1_linux.cc +42 -48
  941. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -81
  942. data/src/core/lib/iomgr/ev_poll_posix.cc +73 -73
  943. data/src/core/lib/iomgr/ev_posix.cc +12 -12
  944. data/src/core/lib/iomgr/ev_posix.h +9 -9
  945. data/src/core/lib/iomgr/event_engine/closure.cc +77 -0
  946. data/src/core/lib/iomgr/event_engine/closure.h +42 -0
  947. data/src/core/lib/iomgr/event_engine/endpoint.cc +172 -0
  948. data/src/core/lib/iomgr/event_engine/endpoint.h +52 -0
  949. data/src/core/lib/iomgr/event_engine/iomgr.cc +85 -0
  950. data/src/core/lib/iomgr/event_engine/pollset.cc +87 -0
  951. data/src/core/lib/iomgr/event_engine/pollset.h +25 -0
  952. data/src/core/lib/iomgr/event_engine/promise.h +51 -0
  953. data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +47 -0
  954. data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +37 -0
  955. data/src/core/lib/iomgr/event_engine/resolver.cc +133 -0
  956. data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
  957. data/src/core/lib/iomgr/event_engine/tcp.cc +296 -0
  958. data/src/core/lib/iomgr/event_engine/timer.cc +62 -0
  959. data/src/core/lib/iomgr/exec_ctx.cc +29 -102
  960. data/src/core/lib/iomgr/exec_ctx.h +32 -57
  961. data/src/core/lib/iomgr/executor/mpmcqueue.cc +15 -16
  962. data/src/core/lib/iomgr/executor/mpmcqueue.h +7 -11
  963. data/src/core/lib/iomgr/executor/threadpool.cc +4 -5
  964. data/src/core/lib/iomgr/executor/threadpool.h +4 -3
  965. data/src/core/lib/iomgr/executor.cc +37 -46
  966. data/src/core/lib/iomgr/executor.h +3 -3
  967. data/src/core/lib/iomgr/fork_posix.cc +3 -2
  968. data/src/core/lib/iomgr/grpc_if_nametoindex_posix.cc +2 -2
  969. data/src/core/lib/iomgr/grpc_if_nametoindex_unsupported.cc +2 -2
  970. data/src/core/lib/iomgr/internal_errqueue.cc +3 -2
  971. data/src/core/lib/iomgr/iocp_windows.cc +10 -9
  972. data/src/core/lib/iomgr/iocp_windows.h +1 -1
  973. data/src/core/lib/iomgr/iomgr.cc +5 -3
  974. data/src/core/lib/iomgr/iomgr.h +3 -3
  975. data/src/core/lib/iomgr/iomgr_internal.cc +8 -12
  976. data/src/core/lib/iomgr/iomgr_internal.h +6 -5
  977. data/src/core/lib/iomgr/iomgr_posix.cc +5 -3
  978. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +44 -14
  979. data/src/core/lib/iomgr/iomgr_windows.cc +4 -5
  980. data/src/core/lib/iomgr/is_epollexclusive_available.cc +4 -4
  981. data/src/core/lib/iomgr/load_file.cc +6 -6
  982. data/src/core/lib/iomgr/load_file.h +2 -2
  983. data/src/core/lib/iomgr/lockfree_event.cc +23 -5
  984. data/src/core/lib/iomgr/lockfree_event.h +1 -1
  985. data/src/core/lib/iomgr/polling_entity.cc +2 -2
  986. data/src/core/lib/iomgr/polling_entity.h +6 -0
  987. data/src/core/lib/iomgr/pollset.cc +5 -5
  988. data/src/core/lib/iomgr/pollset.h +9 -9
  989. data/src/core/lib/iomgr/pollset_set_windows.cc +1 -0
  990. data/src/core/lib/iomgr/pollset_windows.cc +6 -6
  991. data/src/core/lib/iomgr/port.h +8 -14
  992. data/src/core/lib/iomgr/python_util.h +3 -2
  993. data/src/core/lib/iomgr/resolve_address.cc +10 -24
  994. data/src/core/lib/iomgr/resolve_address.h +48 -43
  995. data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
  996. data/src/core/lib/iomgr/resolve_address_posix.cc +91 -79
  997. data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
  998. data/src/core/lib/iomgr/resolve_address_windows.cc +102 -85
  999. data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
  1000. data/src/core/lib/iomgr/resolved_address.h +39 -0
  1001. data/src/core/lib/iomgr/sockaddr.h +2 -1
  1002. data/src/core/lib/iomgr/{socket_utils_uv.cc → sockaddr_utils_posix.cc} +21 -8
  1003. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  1004. data/src/core/lib/iomgr/socket_factory_posix.h +1 -0
  1005. data/src/core/lib/iomgr/socket_mutator.cc +17 -4
  1006. data/src/core/lib/iomgr/socket_mutator.h +27 -3
  1007. data/src/core/lib/iomgr/socket_utils_common_posix.cc +28 -44
  1008. data/src/core/lib/iomgr/socket_utils_linux.cc +4 -4
  1009. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -2
  1010. data/src/core/lib/iomgr/socket_utils_posix.h +22 -22
  1011. data/src/core/lib/iomgr/socket_utils_windows.cc +2 -2
  1012. data/src/core/lib/iomgr/tcp_client.cc +1 -1
  1013. data/src/core/lib/iomgr/tcp_client.h +5 -2
  1014. data/src/core/lib/iomgr/tcp_client_cfstream.cc +12 -28
  1015. data/src/core/lib/iomgr/tcp_client_posix.cc +38 -45
  1016. data/src/core/lib/iomgr/tcp_client_posix.h +7 -6
  1017. data/src/core/lib/iomgr/tcp_client_windows.cc +15 -15
  1018. data/src/core/lib/iomgr/tcp_posix.cc +129 -159
  1019. data/src/core/lib/iomgr/tcp_posix.h +17 -12
  1020. data/src/core/lib/iomgr/tcp_server.cc +6 -6
  1021. data/src/core/lib/iomgr/tcp_server.h +16 -14
  1022. data/src/core/lib/iomgr/tcp_server_posix.cc +44 -34
  1023. data/src/core/lib/iomgr/tcp_server_utils_posix.h +34 -29
  1024. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +23 -20
  1025. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +12 -12
  1026. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.cc +4 -4
  1027. data/src/core/lib/iomgr/tcp_server_windows.cc +32 -35
  1028. data/src/core/lib/iomgr/tcp_windows.cc +35 -52
  1029. data/src/core/lib/iomgr/tcp_windows.h +3 -3
  1030. data/src/core/lib/iomgr/timer.cc +3 -2
  1031. data/src/core/lib/iomgr/timer.h +17 -8
  1032. data/src/core/lib/iomgr/timer_generic.cc +116 -127
  1033. data/src/core/lib/iomgr/timer_generic.h +1 -0
  1034. data/src/core/lib/iomgr/timer_heap.cc +2 -3
  1035. data/src/core/lib/iomgr/timer_manager.cc +16 -15
  1036. data/src/core/lib/iomgr/unix_sockets_posix.cc +25 -39
  1037. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -10
  1038. data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +12 -18
  1039. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +3 -3
  1040. data/src/core/lib/iomgr/wakeup_fd_nospecial.cc +1 -0
  1041. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +6 -7
  1042. data/src/core/lib/iomgr/wakeup_fd_posix.cc +4 -3
  1043. data/src/core/lib/iomgr/wakeup_fd_posix.h +8 -6
  1044. data/src/core/lib/iomgr/work_serializer.cc +120 -44
  1045. data/src/core/lib/iomgr/work_serializer.h +33 -5
  1046. data/src/core/lib/json/json.h +1 -1
  1047. data/src/core/lib/json/json_reader.cc +97 -58
  1048. data/src/core/lib/json/json_util.cc +71 -3
  1049. data/src/core/lib/json/json_util.h +66 -116
  1050. data/src/core/lib/json/json_writer.cc +0 -3
  1051. data/src/core/lib/matchers/matchers.cc +47 -59
  1052. data/src/core/lib/matchers/matchers.h +30 -30
  1053. data/src/core/lib/profiling/basic_timers.cc +8 -6
  1054. data/src/core/lib/profiling/stap_timers.cc +2 -2
  1055. data/src/core/lib/promise/activity.cc +121 -0
  1056. data/src/core/lib/promise/activity.h +540 -0
  1057. data/src/core/lib/promise/arena_promise.h +188 -0
  1058. data/src/core/lib/promise/context.h +86 -0
  1059. data/src/core/lib/promise/detail/basic_seq.h +496 -0
  1060. data/src/core/lib/promise/detail/promise_factory.h +189 -0
  1061. data/src/core/lib/promise/detail/promise_like.h +85 -0
  1062. data/src/core/lib/promise/detail/status.h +49 -0
  1063. data/src/core/lib/promise/detail/switch.h +1455 -0
  1064. data/src/core/lib/promise/exec_ctx_wakeup_scheduler.h +48 -0
  1065. data/src/core/lib/promise/loop.h +134 -0
  1066. data/src/core/lib/promise/map.h +88 -0
  1067. data/src/core/lib/promise/poll.h +66 -0
  1068. data/src/core/lib/promise/promise.h +95 -0
  1069. data/src/core/lib/promise/race.h +84 -0
  1070. data/src/core/lib/promise/seq.h +89 -0
  1071. data/src/core/lib/promise/sleep.cc +74 -0
  1072. data/src/core/lib/promise/sleep.h +66 -0
  1073. data/src/core/lib/promise/try_seq.h +157 -0
  1074. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
  1075. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
  1076. data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +32 -29
  1077. data/src/core/lib/resolver/resolver_registry.cc +156 -0
  1078. data/src/core/lib/resolver/resolver_registry.h +113 -0
  1079. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +2 -2
  1080. data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +5 -5
  1081. data/src/core/lib/resource_quota/api.cc +108 -0
  1082. data/src/core/lib/resource_quota/api.h +40 -0
  1083. data/src/core/lib/{gprpp → resource_quota}/arena.cc +18 -14
  1084. data/src/core/lib/{gprpp → resource_quota}/arena.h +37 -16
  1085. data/src/core/lib/resource_quota/memory_quota.cc +478 -0
  1086. data/src/core/lib/resource_quota/memory_quota.h +457 -0
  1087. data/src/core/lib/resource_quota/resource_quota.cc +33 -0
  1088. data/src/core/lib/resource_quota/resource_quota.h +58 -0
  1089. data/src/core/lib/resource_quota/thread_quota.cc +43 -0
  1090. data/src/core/lib/resource_quota/thread_quota.h +57 -0
  1091. data/src/core/lib/resource_quota/trace.cc +19 -0
  1092. data/src/core/lib/resource_quota/trace.h +24 -0
  1093. data/src/core/lib/security/authorization/authorization_engine.h +44 -0
  1094. data/src/core/lib/security/authorization/authorization_policy_provider.h +33 -0
  1095. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +46 -0
  1096. data/src/core/lib/security/authorization/evaluate_args.cc +212 -0
  1097. data/src/core/lib/security/authorization/evaluate_args.h +92 -0
  1098. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
  1099. data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
  1100. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +109 -0
  1101. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +51 -0
  1102. data/src/core/lib/security/authorization/matchers.cc +227 -0
  1103. data/src/core/lib/security/authorization/matchers.h +211 -0
  1104. data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
  1105. data/src/core/lib/security/authorization/rbac_policy.h +171 -0
  1106. data/src/core/lib/security/context/security_context.cc +15 -10
  1107. data/src/core/lib/security/context/security_context.h +1 -1
  1108. data/src/core/lib/security/credentials/alts/alts_credentials.h +6 -0
  1109. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +2 -2
  1110. data/src/core/lib/security/credentials/alts/check_gcp_environment_no_op.cc +2 -2
  1111. data/src/core/lib/security/credentials/alts/check_gcp_environment_windows.cc +2 -2
  1112. data/src/core/lib/security/credentials/call_creds_util.cc +87 -0
  1113. data/src/core/lib/security/credentials/call_creds_util.h +42 -0
  1114. data/src/core/lib/security/credentials/channel_creds_registry.h +97 -0
  1115. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +70 -0
  1116. data/src/core/lib/security/credentials/composite/composite_credentials.cc +21 -84
  1117. data/src/core/lib/security/credentials/composite/composite_credentials.h +21 -9
  1118. data/src/core/lib/security/credentials/credentials.cc +11 -10
  1119. data/src/core/lib/security/credentials/credentials.h +75 -59
  1120. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +78 -72
  1121. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +15 -13
  1122. data/src/core/lib/security/credentials/external/aws_request_signer.cc +5 -4
  1123. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -1
  1124. data/src/core/lib/security/credentials/external/external_account_credentials.cc +127 -80
  1125. data/src/core/lib/security/credentials/external/external_account_credentials.h +15 -17
  1126. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -5
  1127. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +4 -3
  1128. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +43 -26
  1129. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -7
  1130. data/src/core/lib/security/credentials/fake/fake_credentials.cc +18 -18
  1131. data/src/core/lib/security/credentials/fake/fake_credentials.h +14 -16
  1132. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -2
  1133. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +85 -30
  1134. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +6 -0
  1135. data/src/core/lib/security/credentials/iam/iam_credentials.cc +21 -28
  1136. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -9
  1137. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +13 -7
  1138. data/src/core/lib/security/credentials/jwt/json_token.cc +7 -9
  1139. data/src/core/lib/security/credentials/jwt/json_token.h +2 -1
  1140. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +52 -51
  1141. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +23 -15
  1142. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +66 -59
  1143. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -4
  1144. data/src/core/lib/security/credentials/local/local_credentials.h +6 -0
  1145. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +166 -193
  1146. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +54 -34
  1147. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +97 -157
  1148. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +54 -27
  1149. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -14
  1150. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +6 -4
  1151. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +11 -9
  1152. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +19 -15
  1153. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +80 -25
  1154. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +20 -12
  1155. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +201 -0
  1156. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +106 -0
  1157. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +35 -85
  1158. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +38 -85
  1159. data/src/core/lib/security/credentials/tls/tls_credentials.cc +21 -10
  1160. data/src/core/lib/security/credentials/tls/tls_credentials.h +6 -0
  1161. data/src/core/lib/security/credentials/tls/tls_utils.cc +32 -0
  1162. data/src/core/lib/security/credentials/tls/tls_utils.h +13 -0
  1163. data/src/core/lib/security/credentials/xds/xds_credentials.cc +31 -36
  1164. data/src/core/lib/security/credentials/xds/xds_credentials.h +6 -1
  1165. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +22 -18
  1166. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +3 -3
  1167. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +24 -25
  1168. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +0 -2
  1169. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +8 -18
  1170. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -16
  1171. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +1 -0
  1172. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +5 -6
  1173. data/src/core/lib/security/security_connector/local/local_security_connector.cc +32 -24
  1174. data/src/core/lib/security/security_connector/security_connector.cc +8 -15
  1175. data/src/core/lib/security/security_connector/security_connector.h +24 -24
  1176. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +24 -22
  1177. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +1 -2
  1178. data/src/core/lib/security/security_connector/ssl_utils.cc +67 -39
  1179. data/src/core/lib/security/security_connector/ssl_utils.h +17 -21
  1180. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +409 -272
  1181. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +118 -79
  1182. data/src/core/lib/security/transport/auth_filters.h +38 -4
  1183. data/src/core/lib/security/transport/client_auth_filter.cc +88 -353
  1184. data/src/core/lib/security/transport/secure_endpoint.cc +8 -18
  1185. data/src/core/lib/security/transport/secure_endpoint.h +1 -0
  1186. data/src/core/lib/security/transport/security_handshaker.cc +138 -90
  1187. data/src/core/lib/security/transport/security_handshaker.h +2 -1
  1188. data/src/core/lib/security/transport/server_auth_filter.cc +58 -48
  1189. data/src/core/lib/security/transport/tsi_error.cc +5 -6
  1190. data/src/core/lib/security/transport/tsi_error.h +2 -1
  1191. data/src/core/lib/security/util/json_util.cc +8 -10
  1192. data/src/core/lib/security/util/json_util.h +1 -1
  1193. data/src/core/lib/service_config/service_config.h +82 -0
  1194. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_call_data.h +17 -31
  1195. data/src/core/{ext/filters/client_channel/service_config.cc → lib/service_config/service_config_impl.cc} +31 -27
  1196. data/src/core/{ext/filters/client_channel/service_config.h → lib/service_config/service_config_impl.h} +22 -23
  1197. data/src/core/{ext/filters/client_channel → lib/service_config}/service_config_parser.cc +35 -31
  1198. data/src/core/lib/service_config/service_config_parser.h +106 -0
  1199. data/src/core/lib/slice/percent_encoding.cc +84 -97
  1200. data/src/core/lib/slice/percent_encoding.h +23 -28
  1201. data/src/core/lib/slice/slice.cc +81 -191
  1202. data/src/core/lib/slice/slice.h +384 -0
  1203. data/src/core/lib/{gpr/tls_pthread.cc → slice/slice_api.cc} +15 -6
  1204. data/src/core/lib/slice/slice_buffer.cc +10 -7
  1205. data/src/core/lib/slice/slice_internal.h +15 -276
  1206. data/src/core/lib/slice/slice_refcount.cc +35 -0
  1207. data/src/core/lib/slice/slice_refcount.h +46 -0
  1208. data/src/core/lib/slice/slice_refcount_base.h +61 -0
  1209. data/src/core/lib/slice/slice_split.cc +100 -0
  1210. data/src/core/lib/slice/slice_split.h +40 -0
  1211. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  1212. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  1213. data/src/core/lib/surface/api_trace.cc +2 -1
  1214. data/src/core/lib/surface/api_trace.h +1 -0
  1215. data/src/core/lib/surface/builtins.cc +49 -0
  1216. data/src/core/lib/surface/builtins.h +26 -0
  1217. data/src/core/lib/surface/byte_buffer_reader.cc +1 -1
  1218. data/src/core/lib/surface/call.cc +316 -521
  1219. data/src/core/lib/surface/call.h +14 -9
  1220. data/src/core/lib/surface/call_details.cc +2 -2
  1221. data/src/core/lib/surface/call_log_batch.cc +2 -2
  1222. data/src/core/lib/surface/channel.cc +75 -107
  1223. data/src/core/lib/surface/channel.h +17 -24
  1224. data/src/core/lib/surface/channel_init.cc +23 -76
  1225. data/src/core/lib/surface/channel_init.h +52 -44
  1226. data/src/core/lib/surface/channel_ping.cc +2 -3
  1227. data/src/core/lib/surface/channel_stack_type.cc +2 -1
  1228. data/src/core/lib/surface/completion_queue.cc +136 -145
  1229. data/src/core/lib/surface/completion_queue.h +3 -2
  1230. data/src/core/lib/surface/completion_queue_factory.cc +3 -3
  1231. data/src/core/lib/surface/completion_queue_factory.h +1 -0
  1232. data/src/core/lib/surface/event_string.cc +1 -0
  1233. data/src/core/lib/surface/init.cc +82 -60
  1234. data/src/core/lib/surface/init.h +10 -4
  1235. data/src/core/lib/surface/lame_client.cc +50 -35
  1236. data/src/core/lib/surface/lame_client.h +1 -1
  1237. data/src/core/lib/surface/metadata_array.cc +2 -2
  1238. data/src/core/lib/surface/server.cc +100 -128
  1239. data/src/core/lib/surface/server.h +58 -53
  1240. data/src/core/lib/surface/validate_metadata.cc +55 -24
  1241. data/src/core/lib/surface/validate_metadata.h +3 -2
  1242. data/src/core/lib/surface/version.cc +2 -2
  1243. data/src/core/lib/transport/bdp_estimator.cc +11 -12
  1244. data/src/core/lib/transport/bdp_estimator.h +2 -2
  1245. data/src/core/lib/transport/byte_stream.cc +9 -5
  1246. data/src/core/lib/transport/byte_stream.h +9 -8
  1247. data/src/core/lib/transport/connectivity_state.cc +9 -6
  1248. data/src/core/lib/transport/connectivity_state.h +2 -2
  1249. data/src/core/lib/transport/error_utils.cc +68 -29
  1250. data/src/core/lib/transport/error_utils.h +13 -6
  1251. data/src/core/lib/transport/metadata_batch.h +1348 -163
  1252. data/src/core/lib/transport/parsed_metadata.cc +37 -0
  1253. data/src/core/lib/transport/parsed_metadata.h +401 -0
  1254. data/src/core/lib/transport/pid_controller.cc +4 -4
  1255. data/src/core/lib/transport/status_conversion.cc +2 -2
  1256. data/src/core/lib/transport/status_conversion.h +1 -1
  1257. data/src/core/lib/transport/timeout_encoding.cc +204 -67
  1258. data/src/core/lib/transport/timeout_encoding.h +40 -10
  1259. data/src/core/lib/transport/transport.cc +15 -35
  1260. data/src/core/lib/transport/transport.h +94 -8
  1261. data/src/core/lib/transport/transport_impl.h +13 -0
  1262. data/src/core/lib/transport/transport_op_string.cc +13 -35
  1263. data/src/core/lib/uri/uri_parser.cc +237 -63
  1264. data/src/core/lib/uri/uri_parser.h +39 -23
  1265. data/src/core/plugin_registry/grpc_plugin_registry.cc +75 -102
  1266. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +85 -0
  1267. data/src/core/tsi/alts/crypt/aes_gcm.cc +6 -3
  1268. data/src/core/tsi/alts/crypt/gsec.h +5 -0
  1269. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  1270. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  1271. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +36 -31
  1272. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +2 -3
  1273. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +9 -1
  1274. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -19
  1275. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +2 -1
  1276. data/src/core/tsi/alts/handshaker/alts_tsi_utils.cc +2 -2
  1277. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  1278. data/src/core/tsi/alts/handshaker/transport_security_common_api.cc +2 -2
  1279. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  1280. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +2 -2
  1281. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  1282. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  1283. data/src/core/tsi/fake_transport_security.cc +15 -7
  1284. data/src/core/tsi/local_transport_security.cc +42 -87
  1285. data/src/core/tsi/local_transport_security.h +1 -4
  1286. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +141 -0
  1287. data/src/core/tsi/ssl/key_logging/ssl_key_logging.h +81 -0
  1288. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
  1289. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +20 -53
  1290. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -7
  1291. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +2 -2
  1292. data/src/core/tsi/ssl_transport_security.cc +186 -38
  1293. data/src/core/tsi/ssl_transport_security.h +45 -11
  1294. data/src/core/tsi/transport_security.cc +15 -3
  1295. data/src/core/tsi/transport_security.h +16 -1
  1296. data/src/core/tsi/transport_security_grpc.h +1 -0
  1297. data/src/core/tsi/transport_security_interface.h +26 -0
  1298. data/src/ruby/bin/math_services_pb.rb +1 -1
  1299. data/src/ruby/ext/grpc/extconf.rb +22 -10
  1300. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -1
  1301. data/src/ruby/ext/grpc/rb_call.c +5 -5
  1302. data/src/ruby/ext/grpc/rb_call_credentials.c +5 -5
  1303. data/src/ruby/ext/grpc/rb_channel.c +15 -10
  1304. data/src/ruby/ext/grpc/rb_channel_args.c +2 -2
  1305. data/src/ruby/ext/grpc/rb_channel_credentials.c +4 -4
  1306. data/src/ruby/ext/grpc/rb_channel_credentials.h +1 -0
  1307. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -2
  1308. data/src/ruby/ext/grpc/rb_compression_options.c +5 -4
  1309. data/src/ruby/ext/grpc/rb_event_thread.c +4 -4
  1310. data/src/ruby/ext/grpc/rb_grpc.c +5 -4
  1311. data/src/ruby/ext/grpc/rb_grpc.h +1 -0
  1312. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +36 -34
  1313. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +56 -53
  1314. data/src/ruby/ext/grpc/rb_server.c +13 -9
  1315. data/src/ruby/ext/grpc/rb_server_credentials.c +3 -3
  1316. data/src/ruby/ext/grpc/rb_server_credentials.h +1 -0
  1317. data/src/ruby/ext/grpc/rb_xds_channel_credentials.c +8 -5
  1318. data/src/ruby/ext/grpc/rb_xds_channel_credentials.h +3 -1
  1319. data/src/ruby/ext/grpc/rb_xds_server_credentials.c +6 -5
  1320. data/src/ruby/ext/grpc/rb_xds_server_credentials.h +3 -1
  1321. data/src/ruby/lib/grpc/version.rb +1 -1
  1322. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +1 -1
  1323. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +1 -0
  1324. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +6 -6
  1325. data/src/ruby/spec/client_server_spec.rb +1 -1
  1326. data/third_party/abseil-cpp/absl/algorithm/container.h +104 -94
  1327. data/third_party/abseil-cpp/absl/base/attributes.h +88 -35
  1328. data/third_party/abseil-cpp/absl/base/call_once.h +2 -9
  1329. data/third_party/abseil-cpp/absl/base/config.h +102 -44
  1330. data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +25 -36
  1331. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +4 -1
  1332. data/third_party/abseil-cpp/absl/base/internal/endian.h +61 -0
  1333. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
  1334. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +2 -3
  1335. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +34 -32
  1336. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +16 -6
  1337. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +11 -2
  1338. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +17 -6
  1339. data/third_party/abseil-cpp/absl/base/internal/spinlock_akaros.inc +2 -2
  1340. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +3 -3
  1341. data/third_party/abseil-cpp/absl/base/internal/spinlock_posix.inc +2 -2
  1342. data/third_party/abseil-cpp/absl/base/internal/spinlock_wait.h +13 -11
  1343. data/third_party/abseil-cpp/absl/base/internal/spinlock_win32.inc +5 -5
  1344. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +70 -1
  1345. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +9 -6
  1346. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +58 -52
  1347. data/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +111 -7
  1348. data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +0 -76
  1349. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +17 -3
  1350. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +4 -4
  1351. data/third_party/abseil-cpp/absl/base/log_severity.h +4 -4
  1352. data/third_party/abseil-cpp/absl/base/macros.h +11 -0
  1353. data/third_party/abseil-cpp/absl/base/optimization.h +10 -7
  1354. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  1355. data/third_party/abseil-cpp/absl/base/port.h +0 -1
  1356. data/third_party/abseil-cpp/absl/base/thread_annotations.h +1 -1
  1357. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -7
  1358. data/third_party/abseil-cpp/absl/container/inlined_vector.h +110 -100
  1359. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +1 -1
  1360. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +17 -15
  1361. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -103
  1362. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +39 -79
  1363. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler_force_weak_definition.cc +2 -1
  1364. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +469 -429
  1365. data/third_party/abseil-cpp/absl/container/internal/layout.h +4 -4
  1366. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +3 -2
  1367. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +21 -2
  1368. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +374 -243
  1369. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +27 -13
  1370. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +12 -11
  1371. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +6 -2
  1372. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +5 -2
  1373. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +15 -17
  1374. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +110 -0
  1375. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +6 -1
  1376. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +234 -0
  1377. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -7
  1378. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +11 -7
  1379. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +21 -3
  1380. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +2 -0
  1381. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +2 -0
  1382. data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +2 -2
  1383. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +16 -2
  1384. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +72 -0
  1385. data/third_party/abseil-cpp/absl/functional/function_ref.h +4 -1
  1386. data/third_party/abseil-cpp/absl/hash/hash.h +22 -0
  1387. data/third_party/abseil-cpp/absl/hash/internal/city.cc +15 -12
  1388. data/third_party/abseil-cpp/absl/hash/internal/city.h +1 -19
  1389. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +27 -13
  1390. data/third_party/abseil-cpp/absl/hash/internal/hash.h +145 -45
  1391. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +123 -0
  1392. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +50 -0
  1393. data/third_party/abseil-cpp/absl/memory/memory.h +1 -1
  1394. data/third_party/abseil-cpp/absl/meta/type_traits.h +47 -3
  1395. data/third_party/abseil-cpp/absl/numeric/bits.h +177 -0
  1396. data/third_party/abseil-cpp/absl/numeric/int128.cc +6 -13
  1397. data/third_party/abseil-cpp/absl/numeric/int128.h +146 -73
  1398. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +19 -25
  1399. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +73 -70
  1400. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +358 -0
  1401. data/third_party/abseil-cpp/absl/numeric/internal/representation.h +55 -0
  1402. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.cc +4 -4
  1403. data/third_party/abseil-cpp/absl/{base → profiling}/internal/exponential_biased.h +6 -6
  1404. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +230 -0
  1405. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
  1406. data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
  1407. data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
  1408. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
  1409. data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
  1410. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
  1411. data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
  1412. data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
  1413. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
  1414. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
  1415. data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
  1416. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
  1417. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
  1418. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
  1419. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
  1420. data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
  1421. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
  1422. data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
  1423. data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
  1424. data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
  1425. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
  1426. data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
  1427. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
  1428. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
  1429. data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
  1430. data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
  1431. data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
  1432. data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
  1433. data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
  1434. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
  1435. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
  1436. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
  1437. data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
  1438. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
  1439. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
  1440. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
  1441. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
  1442. data/third_party/abseil-cpp/absl/random/random.h +189 -0
  1443. data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
  1444. data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
  1445. data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
  1446. data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
  1447. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
  1448. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
  1449. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
  1450. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +18 -0
  1451. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +4 -7
  1452. data/third_party/abseil-cpp/absl/status/status.cc +27 -28
  1453. data/third_party/abseil-cpp/absl/status/status.h +98 -33
  1454. data/third_party/abseil-cpp/absl/status/statusor.cc +34 -2
  1455. data/third_party/abseil-cpp/absl/status/statusor.h +34 -24
  1456. data/third_party/abseil-cpp/absl/strings/charconv.cc +8 -8
  1457. data/third_party/abseil-cpp/absl/strings/charconv.h +3 -2
  1458. data/third_party/abseil-cpp/absl/strings/cord.cc +619 -570
  1459. data/third_party/abseil-cpp/absl/strings/cord.h +346 -101
  1460. data/third_party/abseil-cpp/absl/strings/escaping.cc +4 -4
  1461. data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +7 -7
  1462. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +89 -0
  1463. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +478 -31
  1464. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +1128 -0
  1465. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +939 -0
  1466. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +185 -0
  1467. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +265 -0
  1468. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +68 -0
  1469. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +211 -0
  1470. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +129 -0
  1471. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.h +50 -0
  1472. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +146 -0
  1473. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +771 -0
  1474. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.h +607 -0
  1475. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring_reader.h +118 -0
  1476. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.cc +96 -0
  1477. data/third_party/abseil-cpp/absl/strings/internal/cordz_functions.h +85 -0
  1478. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +139 -0
  1479. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.h +131 -0
  1480. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +445 -0
  1481. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +298 -0
  1482. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +87 -0
  1483. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_scope.h +71 -0
  1484. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +121 -0
  1485. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +48 -2
  1486. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +14 -0
  1487. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +22 -0
  1488. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +18 -5
  1489. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +20 -5
  1490. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +14 -0
  1491. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +6 -6
  1492. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +36 -18
  1493. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +36 -18
  1494. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +14 -0
  1495. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +76 -73
  1496. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +38 -16
  1497. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +49 -74
  1498. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +64 -0
  1499. data/third_party/abseil-cpp/absl/strings/match.cc +6 -3
  1500. data/third_party/abseil-cpp/absl/strings/match.h +16 -6
  1501. data/third_party/abseil-cpp/absl/strings/numbers.cc +133 -5
  1502. data/third_party/abseil-cpp/absl/strings/numbers.h +44 -10
  1503. data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
  1504. data/third_party/abseil-cpp/absl/strings/str_format.h +1 -2
  1505. data/third_party/abseil-cpp/absl/strings/str_join.h +1 -1
  1506. data/third_party/abseil-cpp/absl/strings/str_split.h +38 -4
  1507. data/third_party/abseil-cpp/absl/strings/string_view.cc +16 -21
  1508. data/third_party/abseil-cpp/absl/strings/string_view.h +120 -39
  1509. data/third_party/abseil-cpp/absl/strings/substitute.cc +2 -1
  1510. data/third_party/abseil-cpp/absl/strings/substitute.h +99 -74
  1511. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +25 -15
  1512. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.h +5 -3
  1513. data/third_party/abseil-cpp/absl/synchronization/internal/futex.h +154 -0
  1514. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -1
  1515. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +2 -2
  1516. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +4 -4
  1517. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +2 -66
  1518. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -6
  1519. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +71 -59
  1520. data/third_party/abseil-cpp/absl/synchronization/mutex.h +82 -65
  1521. data/third_party/abseil-cpp/absl/time/civil_time.cc +1 -3
  1522. data/third_party/abseil-cpp/absl/time/clock.cc +146 -130
  1523. data/third_party/abseil-cpp/absl/time/clock.h +2 -2
  1524. data/third_party/abseil-cpp/absl/time/duration.cc +3 -2
  1525. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +7 -11
  1526. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +93 -20
  1527. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_fixed.cc +1 -1
  1528. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_if.h +2 -1
  1529. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +83 -21
  1530. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +7 -1
  1531. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +49 -0
  1532. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +5 -5
  1533. data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -3
  1534. data/third_party/abseil-cpp/absl/time/time.cc +4 -3
  1535. data/third_party/abseil-cpp/absl/time/time.h +93 -60
  1536. data/third_party/abseil-cpp/absl/types/bad_optional_access.h +1 -1
  1537. data/third_party/abseil-cpp/absl/types/bad_variant_access.h +2 -2
  1538. data/third_party/abseil-cpp/absl/types/internal/variant.h +1 -1
  1539. data/third_party/abseil-cpp/absl/types/span.h +3 -3
  1540. data/third_party/abseil-cpp/absl/types/variant.h +9 -4
  1541. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  1542. data/third_party/boringssl-with-bazel/err_data.c +696 -662
  1543. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +67 -54
  1544. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +22 -23
  1545. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  1546. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +6 -1
  1547. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +16 -23
  1548. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +64 -44
  1549. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  1550. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +269 -272
  1551. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  1552. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +4 -4
  1553. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +19 -9
  1554. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +1 -40
  1555. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utf8.c +1 -1
  1556. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +60 -49
  1557. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  1558. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn_pack.c +24 -28
  1559. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  1560. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_int.c +5 -0
  1561. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_locl.h → internal.h} +91 -1
  1562. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +57 -281
  1563. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +292 -200
  1564. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +10 -10
  1565. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -14
  1566. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +8 -6
  1567. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -1
  1568. data/third_party/boringssl-with-bazel/src/crypto/asn1/time_support.c +1 -1
  1569. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +24 -8
  1570. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  1571. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  1572. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  1573. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  1574. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  1575. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  1576. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  1577. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +3 -1
  1578. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  1579. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  1580. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  1581. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +49 -65
  1582. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +1 -88
  1583. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +14 -3
  1584. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +119 -273
  1585. data/third_party/boringssl-with-bazel/src/crypto/conf/conf.c +14 -3
  1586. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +1 -1
  1587. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  1588. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +6 -3
  1589. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
  1590. data/third_party/boringssl-with-bazel/src/crypto/err/err.c +87 -80
  1591. data/third_party/boringssl-with-bazel/src/crypto/evp/evp.c +9 -0
  1592. data/third_party/boringssl-with-bazel/src/crypto/evp/evp_asn1.c +2 -2
  1593. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  1594. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  1595. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +26 -9
  1596. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  1597. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +6 -3
  1598. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/prime.c +0 -4
  1599. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  1600. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +23 -3
  1601. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +35 -2
  1602. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  1603. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  1604. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digest.c +9 -0
  1605. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/digests.c +10 -2
  1606. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/md32_common.h +87 -160
  1607. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +4 -0
  1608. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +0 -1
  1609. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +0 -4
  1610. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +105 -95
  1611. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +39 -0
  1612. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +56 -72
  1613. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +56 -73
  1614. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +33 -22
  1615. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cfb.c +9 -8
  1616. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +9 -8
  1617. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +17 -13
  1618. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  1619. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +1 -22
  1620. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +2 -1
  1621. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +6 -13
  1622. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +2 -15
  1623. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +30 -13
  1624. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +50 -33
  1625. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +14 -9
  1626. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/fips.c +79 -0
  1627. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +21 -16
  1628. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +93 -107
  1629. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +91 -113
  1630. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +50 -86
  1631. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +397 -311
  1632. data/third_party/boringssl-with-bazel/src/crypto/hrss/hrss.c +219 -121
  1633. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +9 -2
  1634. data/third_party/boringssl-with-bazel/src/crypto/internal.h +125 -0
  1635. data/third_party/boringssl-with-bazel/src/crypto/lhash/internal.h +253 -0
  1636. data/third_party/boringssl-with-bazel/src/crypto/lhash/lhash.c +28 -23
  1637. data/third_party/boringssl-with-bazel/src/crypto/mem.c +46 -9
  1638. data/third_party/boringssl-with-bazel/src/crypto/obj/obj.c +10 -6
  1639. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  1640. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  1641. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  1642. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  1643. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  1644. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  1645. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +38 -4
  1646. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +156 -15
  1647. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
  1648. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
  1649. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +96 -49
  1650. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +1 -1
  1651. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +5 -1
  1652. data/third_party/boringssl-with-bazel/src/crypto/pool/pool.c +59 -22
  1653. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/deterministic.c +4 -0
  1654. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/fuchsia.c +4 -0
  1655. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +2 -2
  1656. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +1 -1
  1657. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/windows.c +4 -0
  1658. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_asn1.c +1 -2
  1659. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  1660. data/third_party/boringssl-with-bazel/src/crypto/thread_pthread.c +0 -28
  1661. data/third_party/boringssl-with-bazel/src/crypto/x509/a_verify.c +15 -11
  1662. data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +1 -1
  1663. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +2 -18
  1664. data/third_party/boringssl-with-bazel/src/crypto/x509/by_dir.c +1 -0
  1665. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  1666. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +351 -13
  1667. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  1668. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +15 -4
  1669. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +10 -5
  1670. data/third_party/boringssl-with-bazel/src/crypto/x509/t_req.c +2 -0
  1671. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  1672. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +7 -2
  1673. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +24 -47
  1674. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +3 -2
  1675. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +2 -2
  1676. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +1 -5
  1677. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  1678. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +42 -89
  1679. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +9 -16
  1680. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_trs.c +2 -0
  1681. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +25 -22
  1682. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +25 -69
  1683. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +54 -74
  1684. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +32 -0
  1685. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  1686. data/third_party/boringssl-with-bazel/src/crypto/x509/x509rset.c +3 -0
  1687. data/third_party/boringssl-with-bazel/src/crypto/x509/x_algor.c +21 -19
  1688. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +3 -16
  1689. data/third_party/boringssl-with-bazel/src/crypto/x509/x_attrib.c +7 -25
  1690. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +14 -11
  1691. data/third_party/boringssl-with-bazel/src/crypto/x509/x_exten.c +2 -0
  1692. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +23 -21
  1693. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pubkey.c +25 -22
  1694. data/third_party/boringssl-with-bazel/src/crypto/x509/x_req.c +5 -8
  1695. data/third_party/boringssl-with-bazel/src/crypto/x509/x_sig.c +5 -0
  1696. data/third_party/boringssl-with-bazel/src/crypto/x509/x_val.c +2 -0
  1697. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +12 -11
  1698. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +3 -0
  1699. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +239 -11
  1700. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +2 -1
  1701. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +2 -2
  1702. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_lib.c +1 -1
  1703. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +2 -1
  1704. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_node.c +1 -1
  1705. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +5 -4
  1706. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  1707. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +18 -8
  1708. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  1709. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +1 -0
  1710. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +8 -11
  1711. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -2
  1712. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  1713. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +23 -4
  1714. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  1715. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  1716. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -13
  1717. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +2 -2
  1718. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +1 -0
  1719. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +80 -38
  1720. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -4
  1721. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +66 -1
  1722. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +1517 -495
  1723. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +5 -12
  1724. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +57 -13
  1725. data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
  1726. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  1727. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  1728. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +10 -0
  1729. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  1730. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +21 -11
  1731. data/third_party/boringssl-with-bazel/src/include/openssl/conf.h +8 -5
  1732. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +24 -4
  1733. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -12
  1734. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +9 -2
  1735. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +27 -41
  1736. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +5 -2
  1737. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +12 -27
  1738. data/third_party/boringssl-with-bazel/src/include/openssl/ecdsa.h +41 -10
  1739. data/third_party/boringssl-with-bazel/src/include/openssl/err.h +3 -2
  1740. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +55 -104
  1741. data/third_party/boringssl-with-bazel/src/{crypto/x509/x509_r2x.c → include/openssl/evp_errors.h} +41 -58
  1742. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  1743. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +350 -0
  1744. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +14 -12
  1745. data/third_party/boringssl-with-bazel/src/include/openssl/lhash.h +4 -205
  1746. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +12 -3
  1747. data/third_party/boringssl-with-bazel/src/include/openssl/obj.h +26 -6
  1748. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  1749. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +42 -18
  1750. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +15 -2
  1751. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +7 -1
  1752. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +2 -2
  1753. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +128 -91
  1754. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  1755. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +386 -104
  1756. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +41 -48
  1757. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +1160 -331
  1758. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -679
  1759. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +54 -17
  1760. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +16 -18
  1761. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +1 -1
  1762. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +1084 -0
  1763. data/third_party/boringssl-with-bazel/src/ssl/{t1_lib.cc → extensions.cc} +660 -747
  1764. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +298 -22
  1765. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +90 -43
  1766. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +307 -201
  1767. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +173 -36
  1768. data/third_party/boringssl-with-bazel/src/ssl/internal.h +474 -156
  1769. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +9 -3
  1770. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  1771. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +14 -19
  1772. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +4 -6
  1773. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  1774. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +34 -31
  1775. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +56 -110
  1776. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +2 -0
  1777. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +129 -96
  1778. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -0
  1779. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +10 -15
  1780. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +11 -3
  1781. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +28 -23
  1782. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +79 -34
  1783. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +235 -178
  1784. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +146 -110
  1785. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +241 -132
  1786. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +4 -2
  1787. data/third_party/cares/cares/{ares.h → include/ares.h} +73 -1
  1788. data/third_party/cares/cares/{ares_dns.h → include/ares_dns.h} +9 -0
  1789. data/third_party/cares/cares/{ares_rules.h → include/ares_rules.h} +0 -0
  1790. data/third_party/cares/cares/{ares_version.h → include/ares_version.h} +3 -3
  1791. data/third_party/cares/cares/{ares__close_sockets.c → src/lib/ares__close_sockets.c} +2 -2
  1792. data/third_party/cares/cares/{ares__get_hostent.c → src/lib/ares__get_hostent.c} +1 -2
  1793. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +260 -0
  1794. data/third_party/cares/cares/{ares__read_line.c → src/lib/ares__read_line.c} +0 -0
  1795. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +264 -0
  1796. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +499 -0
  1797. data/third_party/cares/cares/{ares__timeval.c → src/lib/ares__timeval.c} +0 -0
  1798. data/third_party/cares/cares/src/lib/ares_android.c +444 -0
  1799. data/third_party/cares/cares/src/lib/ares_android.h +27 -0
  1800. data/third_party/cares/cares/{ares_cancel.c → src/lib/ares_cancel.c} +0 -0
  1801. data/third_party/cares/cares/{ares_create_query.c → src/lib/ares_create_query.c} +8 -17
  1802. data/third_party/cares/cares/{ares_data.c → src/lib/ares_data.c} +18 -0
  1803. data/third_party/cares/cares/{ares_data.h → src/lib/ares_data.h} +2 -0
  1804. data/third_party/cares/cares/{ares_destroy.c → src/lib/ares_destroy.c} +0 -0
  1805. data/third_party/cares/cares/{ares_expand_name.c → src/lib/ares_expand_name.c} +114 -23
  1806. data/third_party/cares/cares/{ares_expand_string.c → src/lib/ares_expand_string.c} +2 -5
  1807. data/third_party/cares/cares/{ares_fds.c → src/lib/ares_fds.c} +0 -0
  1808. data/third_party/cares/cares/{ares_free_hostent.c → src/lib/ares_free_hostent.c} +6 -4
  1809. data/third_party/cares/cares/{ares_free_string.c → src/lib/ares_free_string.c} +0 -0
  1810. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +59 -0
  1811. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +772 -0
  1812. data/third_party/cares/cares/{ares_getenv.c → src/lib/ares_getenv.c} +0 -2
  1813. data/third_party/cares/cares/{ares_getenv.h → src/lib/ares_getenv.h} +0 -0
  1814. data/third_party/cares/cares/{ares_gethostbyaddr.c → src/lib/ares_gethostbyaddr.c} +2 -9
  1815. data/third_party/cares/cares/{ares_gethostbyname.c → src/lib/ares_gethostbyname.c} +25 -20
  1816. data/third_party/cares/cares/{ares_getnameinfo.c → src/lib/ares_getnameinfo.c} +4 -10
  1817. data/third_party/cares/cares/{ares_getsock.c → src/lib/ares_getsock.c} +0 -0
  1818. data/third_party/cares/cares/{ares_inet_net_pton.h → src/lib/ares_inet_net_pton.h} +0 -0
  1819. data/third_party/cares/cares/{ares_init.c → src/lib/ares_init.c} +79 -40
  1820. data/third_party/cares/cares/{ares_iphlpapi.h → src/lib/ares_iphlpapi.h} +0 -0
  1821. data/third_party/cares/cares/{ares_ipv6.h → src/lib/ares_ipv6.h} +7 -0
  1822. data/third_party/cares/cares/{ares_library_init.c → src/lib/ares_library_init.c} +7 -2
  1823. data/third_party/cares/cares/{ares_library_init.h → src/lib/ares_library_init.h} +1 -1
  1824. data/third_party/cares/cares/{ares_llist.c → src/lib/ares_llist.c} +0 -0
  1825. data/third_party/cares/cares/{ares_llist.h → src/lib/ares_llist.h} +0 -0
  1826. data/third_party/cares/cares/{ares_mkquery.c → src/lib/ares_mkquery.c} +0 -0
  1827. data/third_party/cares/cares/src/lib/ares_nameser.h +482 -0
  1828. data/third_party/cares/cares/{ares_nowarn.c → src/lib/ares_nowarn.c} +0 -0
  1829. data/third_party/cares/cares/{ares_nowarn.h → src/lib/ares_nowarn.h} +0 -0
  1830. data/third_party/cares/cares/{ares_options.c → src/lib/ares_options.c} +0 -0
  1831. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +209 -0
  1832. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +212 -0
  1833. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +199 -0
  1834. data/third_party/cares/cares/{ares_parse_mx_reply.c → src/lib/ares_parse_mx_reply.c} +2 -8
  1835. data/third_party/cares/cares/{ares_parse_naptr_reply.c → src/lib/ares_parse_naptr_reply.c} +2 -13
  1836. data/third_party/cares/cares/{ares_parse_ns_reply.c → src/lib/ares_parse_ns_reply.c} +5 -11
  1837. data/third_party/cares/cares/{ares_parse_ptr_reply.c → src/lib/ares_parse_ptr_reply.c} +53 -46
  1838. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +179 -0
  1839. data/third_party/cares/cares/{ares_parse_srv_reply.c → src/lib/ares_parse_srv_reply.c} +2 -13
  1840. data/third_party/cares/cares/{ares_parse_txt_reply.c → src/lib/ares_parse_txt_reply.c} +3 -9
  1841. data/third_party/cares/cares/{ares_platform.c → src/lib/ares_platform.c} +0 -0
  1842. data/third_party/cares/cares/{ares_platform.h → src/lib/ares_platform.h} +0 -0
  1843. data/third_party/cares/cares/{ares_private.h → src/lib/ares_private.h} +52 -11
  1844. data/third_party/cares/cares/{ares_process.c → src/lib/ares_process.c} +127 -52
  1845. data/third_party/cares/cares/{ares_query.c → src/lib/ares_query.c} +3 -9
  1846. data/third_party/cares/cares/{ares_search.c → src/lib/ares_search.c} +5 -7
  1847. data/third_party/cares/cares/{ares_send.c → src/lib/ares_send.c} +2 -8
  1848. data/third_party/cares/cares/{ares_setup.h → src/lib/ares_setup.h} +4 -1
  1849. data/third_party/cares/cares/{ares_strcasecmp.c → src/lib/ares_strcasecmp.c} +0 -0
  1850. data/third_party/cares/cares/{ares_strcasecmp.h → src/lib/ares_strcasecmp.h} +0 -0
  1851. data/third_party/cares/cares/{ares_strdup.c → src/lib/ares_strdup.c} +0 -0
  1852. data/third_party/cares/cares/{ares_strdup.h → src/lib/ares_strdup.h} +0 -0
  1853. data/third_party/cares/cares/{ares_strerror.c → src/lib/ares_strerror.c} +0 -0
  1854. data/third_party/cares/cares/{ares_strsplit.c → src/lib/ares_strsplit.c} +4 -0
  1855. data/third_party/cares/cares/{ares_strsplit.h → src/lib/ares_strsplit.h} +0 -0
  1856. data/third_party/cares/cares/{ares_timeout.c → src/lib/ares_timeout.c} +0 -0
  1857. data/third_party/cares/cares/{ares_version.c → src/lib/ares_version.c} +0 -0
  1858. data/third_party/cares/cares/{ares_writev.c → src/lib/ares_writev.c} +0 -0
  1859. data/third_party/cares/cares/src/lib/ares_writev.h +36 -0
  1860. data/third_party/cares/cares/{bitncmp.c → src/lib/bitncmp.c} +0 -0
  1861. data/third_party/cares/cares/{bitncmp.h → src/lib/bitncmp.h} +0 -0
  1862. data/third_party/cares/cares/src/lib/config-dos.h +115 -0
  1863. data/third_party/cares/cares/{config-win32.h → src/lib/config-win32.h} +0 -0
  1864. data/third_party/cares/cares/{inet_net_pton.c → src/lib/inet_net_pton.c} +2 -8
  1865. data/third_party/cares/cares/{inet_ntop.c → src/lib/inet_ntop.c} +2 -8
  1866. data/third_party/cares/cares/{setup_once.h → src/lib/setup_once.h} +0 -0
  1867. data/third_party/cares/cares/{windows_port.c → src/lib/windows_port.c} +0 -0
  1868. data/third_party/re2/re2/compile.cc +91 -109
  1869. data/third_party/re2/re2/dfa.cc +27 -39
  1870. data/third_party/re2/re2/filtered_re2.cc +18 -2
  1871. data/third_party/re2/re2/filtered_re2.h +10 -5
  1872. data/third_party/re2/re2/nfa.cc +1 -1
  1873. data/third_party/re2/re2/parse.cc +42 -23
  1874. data/third_party/re2/re2/perl_groups.cc +34 -34
  1875. data/third_party/re2/re2/prefilter.cc +3 -2
  1876. data/third_party/re2/re2/prog.cc +182 -4
  1877. data/third_party/re2/re2/prog.h +28 -9
  1878. data/third_party/re2/re2/re2.cc +87 -118
  1879. data/third_party/re2/re2/re2.h +156 -141
  1880. data/third_party/re2/re2/regexp.cc +12 -5
  1881. data/third_party/re2/re2/regexp.h +8 -2
  1882. data/third_party/re2/re2/set.cc +31 -9
  1883. data/third_party/re2/re2/set.h +9 -4
  1884. data/third_party/re2/re2/simplify.cc +11 -3
  1885. data/third_party/re2/re2/tostring.cc +1 -1
  1886. data/third_party/re2/re2/walker-inl.h +1 -1
  1887. data/third_party/re2/util/mutex.h +2 -2
  1888. data/third_party/re2/util/pcre.h +3 -3
  1889. data/third_party/upb/third_party/utf8_range/naive.c +92 -0
  1890. data/third_party/upb/third_party/utf8_range/range2-neon.c +157 -0
  1891. data/third_party/upb/third_party/utf8_range/range2-sse.c +170 -0
  1892. data/third_party/upb/third_party/utf8_range/utf8_range.h +9 -0
  1893. data/third_party/upb/upb/decode.c +758 -351
  1894. data/third_party/upb/upb/decode.h +66 -12
  1895. data/third_party/upb/upb/decode_fast.c +596 -581
  1896. data/third_party/upb/upb/decode_fast.h +40 -13
  1897. data/third_party/upb/upb/decode_internal.h +211 -0
  1898. data/third_party/upb/upb/def.c +2089 -1069
  1899. data/third_party/upb/upb/def.h +341 -256
  1900. data/third_party/upb/upb/def.hpp +160 -161
  1901. data/third_party/upb/upb/encode.c +285 -165
  1902. data/third_party/upb/upb/encode.h +38 -13
  1903. data/third_party/upb/upb/msg.c +276 -102
  1904. data/third_party/upb/upb/msg.h +84 -582
  1905. data/third_party/upb/upb/msg_internal.h +818 -0
  1906. data/third_party/upb/upb/port_def.inc +85 -24
  1907. data/third_party/upb/upb/port_undef.inc +38 -1
  1908. data/third_party/upb/upb/reflection.c +312 -240
  1909. data/third_party/upb/upb/reflection.h +119 -67
  1910. data/third_party/upb/upb/reflection.hpp +37 -0
  1911. data/third_party/upb/upb/table.c +398 -193
  1912. data/third_party/upb/upb/table_internal.h +383 -0
  1913. data/third_party/upb/upb/text_encode.c +141 -90
  1914. data/third_party/upb/upb/text_encode.h +31 -5
  1915. data/third_party/upb/upb/upb.c +164 -66
  1916. data/third_party/upb/upb/upb.h +145 -139
  1917. data/third_party/upb/upb/upb.hpp +50 -23
  1918. data/third_party/upb/upb/upb_internal.h +68 -0
  1919. data/third_party/xxhash/xxhash.h +679 -542
  1920. metadata +597 -254
  1921. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +0 -44
  1922. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +0 -84
  1923. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +0 -179
  1924. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_libuv.cc +0 -38
  1925. data/src/core/ext/filters/client_channel/resolver_registry.cc +0 -197
  1926. data/src/core/ext/filters/client_channel/resolver_registry.h +0 -89
  1927. data/src/core/ext/filters/client_channel/service_config_parser.h +0 -92
  1928. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -210
  1929. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  1930. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  1931. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  1932. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  1933. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +0 -125
  1934. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +0 -90
  1935. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +0 -213
  1936. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +0 -55
  1937. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +0 -76
  1938. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +0 -130
  1939. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -37
  1940. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +0 -242
  1941. data/src/core/ext/transport/chttp2/transport/hpack_table.h +0 -148
  1942. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  1943. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  1944. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +0 -27
  1945. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +0 -56
  1946. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -27
  1947. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +0 -56
  1948. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -27
  1949. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +0 -56
  1950. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -27
  1951. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +0 -56
  1952. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +0 -27
  1953. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +0 -56
  1954. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  1955. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -124
  1956. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.c +0 -33
  1957. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -77
  1958. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +0 -72
  1959. data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +0 -35
  1960. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +0 -73
  1961. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +0 -35
  1962. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +0 -72
  1963. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +0 -35
  1964. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +0 -80
  1965. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +0 -35
  1966. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +0 -74
  1967. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +0 -35
  1968. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  1969. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  1970. data/src/core/lib/avl/avl.cc +0 -306
  1971. data/src/core/lib/compression/algorithm_metadata.h +0 -61
  1972. data/src/core/lib/compression/compression_args.cc +0 -135
  1973. data/src/core/lib/compression/compression_args.h +0 -56
  1974. data/src/core/lib/compression/stream_compression.cc +0 -80
  1975. data/src/core/lib/compression/stream_compression.h +0 -116
  1976. data/src/core/lib/compression/stream_compression_gzip.cc +0 -230
  1977. data/src/core/lib/compression/stream_compression_gzip.h +0 -28
  1978. data/src/core/lib/compression/stream_compression_identity.cc +0 -90
  1979. data/src/core/lib/compression/stream_compression_identity.h +0 -29
  1980. data/src/core/lib/gpr/arena.h +0 -47
  1981. data/src/core/lib/gpr/tls_gcc.h +0 -52
  1982. data/src/core/lib/gpr/tls_msvc.h +0 -54
  1983. data/src/core/lib/gpr/tls_pthread.h +0 -56
  1984. data/src/core/lib/gpr/tls_stdcpp.h +0 -48
  1985. data/src/core/lib/gprpp/atomic.h +0 -104
  1986. data/src/core/lib/iomgr/endpoint_pair_uv.cc +0 -40
  1987. data/src/core/lib/iomgr/iomgr_custom.cc +0 -79
  1988. data/src/core/lib/iomgr/iomgr_custom.h +0 -49
  1989. data/src/core/lib/iomgr/iomgr_uv.cc +0 -43
  1990. data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +0 -88
  1991. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +0 -88
  1992. data/src/core/lib/iomgr/pollset_custom.cc +0 -106
  1993. data/src/core/lib/iomgr/pollset_custom.h +0 -35
  1994. data/src/core/lib/iomgr/pollset_set_custom.cc +0 -48
  1995. data/src/core/lib/iomgr/pollset_set_custom.h +0 -26
  1996. data/src/core/lib/iomgr/pollset_uv.cc +0 -93
  1997. data/src/core/lib/iomgr/pollset_uv.h +0 -32
  1998. data/src/core/lib/iomgr/resolve_address_custom.cc +0 -168
  1999. data/src/core/lib/iomgr/resolve_address_custom.h +0 -45
  2000. data/src/core/lib/iomgr/resource_quota.cc +0 -1016
  2001. data/src/core/lib/iomgr/resource_quota.h +0 -177
  2002. data/src/core/lib/iomgr/sockaddr_custom.h +0 -54
  2003. data/src/core/lib/iomgr/tcp_client_custom.cc +0 -161
  2004. data/src/core/lib/iomgr/tcp_custom.cc +0 -391
  2005. data/src/core/lib/iomgr/tcp_custom.h +0 -84
  2006. data/src/core/lib/iomgr/tcp_server_custom.cc +0 -483
  2007. data/src/core/lib/iomgr/tcp_uv.cc +0 -419
  2008. data/src/core/lib/iomgr/timer_custom.cc +0 -95
  2009. data/src/core/lib/iomgr/timer_custom.h +0 -43
  2010. data/src/core/lib/iomgr/timer_uv.cc +0 -66
  2011. data/src/core/lib/iomgr/udp_server.cc +0 -747
  2012. data/src/core/lib/iomgr/udp_server.h +0 -103
  2013. data/src/core/lib/security/credentials/credentials_metadata.cc +0 -62
  2014. data/src/core/lib/slice/slice_intern.cc +0 -373
  2015. data/src/core/lib/slice/slice_utils.h +0 -200
  2016. data/src/core/lib/surface/init_secure.cc +0 -81
  2017. data/src/core/lib/transport/metadata.cc +0 -693
  2018. data/src/core/lib/transport/metadata.h +0 -446
  2019. data/src/core/lib/transport/metadata_batch.cc +0 -419
  2020. data/src/core/lib/transport/static_metadata.cc +0 -1249
  2021. data/src/core/lib/transport/static_metadata.h +0 -604
  2022. data/src/core/lib/transport/status_metadata.cc +0 -62
  2023. data/src/core/lib/transport/status_metadata.h +0 -48
  2024. data/third_party/abseil-cpp/absl/base/internal/bits.h +0 -219
  2025. data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +0 -249
  2026. data/third_party/boringssl-with-bazel/src/crypto/asn1/f_enum.c +0 -93
  2027. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/is_fips.c +0 -29
  2028. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +0 -246
  2029. data/third_party/boringssl-with-bazel/src/crypto/x509/vpm_int.h +0 -71
  2030. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +0 -217
  2031. data/third_party/cares/cares/ares_getopt.c +0 -122
  2032. data/third_party/cares/cares/ares_getopt.h +0 -53
  2033. data/third_party/cares/cares/ares_parse_a_reply.c +0 -264
  2034. data/third_party/cares/cares/ares_parse_aaaa_reply.c +0 -264
  2035. data/third_party/cares/cares/ares_parse_soa_reply.c +0 -133
  2036. data/third_party/upb/third_party/wyhash/wyhash.h +0 -145
  2037. data/third_party/upb/upb/decode.int.h +0 -163
  2038. data/third_party/upb/upb/table.int.h +0 -475
  2039. data/third_party/upb/upb/upb.int.h +0 -29
@@ -1,86 +1,42 @@
1
- /*
2
- *
3
- * Copyright 2018 gRPC authors.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- *
17
- */
1
+ //
2
+ // Copyright 2018 gRPC authors.
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ //
18
16
 
19
17
  #include <grpc/support/port_platform.h>
20
18
 
21
- #include <algorithm>
22
- #include <cctype>
23
- #include <cstdint>
24
- #include <cstdlib>
19
+ #include "src/core/ext/xds/xds_api.h"
20
+
21
+ #include <set>
25
22
  #include <string>
23
+ #include <vector>
26
24
 
27
25
  #include "absl/strings/str_cat.h"
28
- #include "absl/strings/str_format.h"
29
- #include "absl/strings/str_join.h"
30
- #include "absl/strings/str_split.h"
31
26
  #include "envoy/admin/v3/config_dump.upb.h"
32
- #include "envoy/config/cluster/v3/circuit_breaker.upb.h"
33
- #include "envoy/config/cluster/v3/cluster.upb.h"
34
- #include "envoy/config/cluster/v3/cluster.upbdefs.h"
35
- #include "envoy/config/core/v3/address.upb.h"
36
27
  #include "envoy/config/core/v3/base.upb.h"
37
- #include "envoy/config/core/v3/base.upbdefs.h"
38
- #include "envoy/config/core/v3/config_source.upb.h"
39
- #include "envoy/config/core/v3/health_check.upb.h"
40
- #include "envoy/config/core/v3/protocol.upb.h"
41
- #include "envoy/config/endpoint/v3/endpoint.upb.h"
42
- #include "envoy/config/endpoint/v3/endpoint.upbdefs.h"
43
- #include "envoy/config/endpoint/v3/endpoint_components.upb.h"
44
28
  #include "envoy/config/endpoint/v3/load_report.upb.h"
45
- #include "envoy/config/listener/v3/api_listener.upb.h"
46
- #include "envoy/config/listener/v3/listener.upb.h"
47
- #include "envoy/config/listener/v3/listener.upbdefs.h"
48
- #include "envoy/config/listener/v3/listener_components.upb.h"
49
- #include "envoy/config/route/v3/route.upb.h"
50
- #include "envoy/config/route/v3/route.upbdefs.h"
51
- #include "envoy/config/route/v3/route_components.upb.h"
52
- #include "envoy/config/route/v3/route_components.upbdefs.h"
53
- #include "envoy/extensions/clusters/aggregate/v3/cluster.upb.h"
54
- #include "envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h"
55
- #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
56
- #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
57
- #include "envoy/extensions/transport_sockets/tls/v3/common.upb.h"
58
- #include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
59
- #include "envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h"
60
- #include "envoy/service/cluster/v3/cds.upb.h"
61
- #include "envoy/service/cluster/v3/cds.upbdefs.h"
62
29
  #include "envoy/service/discovery/v3/discovery.upb.h"
63
30
  #include "envoy/service/discovery/v3/discovery.upbdefs.h"
64
- #include "envoy/service/endpoint/v3/eds.upb.h"
65
- #include "envoy/service/endpoint/v3/eds.upbdefs.h"
66
- #include "envoy/service/listener/v3/lds.upb.h"
67
31
  #include "envoy/service/load_stats/v3/lrs.upb.h"
68
32
  #include "envoy/service/load_stats/v3/lrs.upbdefs.h"
69
- #include "envoy/service/route/v3/rds.upb.h"
70
- #include "envoy/service/route/v3/rds.upbdefs.h"
71
33
  #include "envoy/service/status/v3/csds.upb.h"
72
34
  #include "envoy/service/status/v3/csds.upbdefs.h"
73
- #include "envoy/type/matcher/v3/regex.upb.h"
74
- #include "envoy/type/matcher/v3/string.upb.h"
75
- #include "envoy/type/v3/percent.upb.h"
76
- #include "envoy/type/v3/range.upb.h"
77
35
  #include "google/protobuf/any.upb.h"
78
- #include "google/protobuf/duration.upb.h"
79
36
  #include "google/protobuf/struct.upb.h"
80
37
  #include "google/protobuf/timestamp.upb.h"
81
38
  #include "google/protobuf/wrappers.upb.h"
82
39
  #include "google/rpc/status.upb.h"
83
- #include "udpa/type/v1/typed_struct.upb.h"
84
40
  #include "upb/text_encode.h"
85
41
  #include "upb/upb.h"
86
42
  #include "upb/upb.hpp"
@@ -89,793 +45,68 @@
89
45
  #include <grpc/support/alloc.h>
90
46
  #include <grpc/support/string_util.h>
91
47
 
92
- #include "src/core/ext/xds/xds_api.h"
48
+ #include "src/core/ext/xds/upb_utils.h"
49
+ #include "src/core/ext/xds/xds_common_types.h"
50
+ #include "src/core/ext/xds/xds_resource_type.h"
51
+ #include "src/core/ext/xds/xds_routing.h"
52
+ #include "src/core/lib/address_utils/parse_address.h"
53
+ #include "src/core/lib/address_utils/sockaddr_utils.h"
93
54
  #include "src/core/lib/gpr/env.h"
94
55
  #include "src/core/lib/gpr/string.h"
95
- #include "src/core/lib/gpr/useful.h"
96
56
  #include "src/core/lib/gprpp/host_port.h"
97
57
  #include "src/core/lib/iomgr/error.h"
98
58
  #include "src/core/lib/iomgr/sockaddr.h"
99
- #include "src/core/lib/iomgr/sockaddr_utils.h"
100
59
  #include "src/core/lib/iomgr/socket_utils.h"
101
- #include "src/core/lib/slice/slice_utils.h"
60
+ #include "src/core/lib/slice/slice_internal.h"
61
+ #include "src/core/lib/uri/uri_parser.h"
102
62
 
103
63
  namespace grpc_core {
104
64
 
105
- // TODO(donnadionne): Check to see if cluster types aggregate_cluster and
106
- // logical_dns are enabled, this will be
107
- // removed once the cluster types are fully integration-tested and enabled by
108
- // default.
109
- bool XdsAggregateAndLogicalDnsClusterEnabled() {
110
- char* value = gpr_getenv(
111
- "GRPC_XDS_EXPERIMENTAL_ENABLE_AGGREGATE_AND_LOGICAL_DNS_CLUSTER");
112
- bool parsed_value;
113
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
114
- gpr_free(value);
115
- return parse_succeeded && parsed_value;
116
- }
117
-
118
- // TODO(donnadionne): Check to see if ring hash policy is enabled, this will be
119
- // removed once ring hash policy is fully integration-tested and enabled by
120
- // default.
121
- bool XdsRingHashEnabled() {
122
- char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_ENABLE_RING_HASH");
123
- bool parsed_value;
124
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
125
- gpr_free(value);
126
- return parse_succeeded && parsed_value;
127
- }
128
-
129
- // TODO(yashykt): Check to see if xDS security is enabled. This will be
130
- // removed once this feature is fully integration-tested and enabled by
131
- // default.
132
- bool XdsSecurityEnabled() {
133
- char* value = gpr_getenv("GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT");
134
- bool parsed_value;
135
- bool parse_succeeded = gpr_parse_bool_value(value, &parsed_value);
136
- gpr_free(value);
137
- return parse_succeeded && parsed_value;
138
- }
139
-
140
- //
141
- // XdsApi::Route::HashPolicy
142
- //
143
-
144
- XdsApi::Route::HashPolicy::HashPolicy(const HashPolicy& other)
145
- : type(other.type),
146
- header_name(other.header_name),
147
- regex_substitution(other.regex_substitution) {
148
- if (other.regex != nullptr) {
149
- regex =
150
- absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
151
- }
152
- }
153
-
154
- XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
155
- const HashPolicy& other) {
156
- type = other.type;
157
- header_name = other.header_name;
158
- if (other.regex != nullptr) {
159
- regex =
160
- absl::make_unique<RE2>(other.regex->pattern(), other.regex->options());
161
- }
162
- regex_substitution = other.regex_substitution;
163
- return *this;
164
- }
165
-
166
- XdsApi::Route::HashPolicy::HashPolicy(HashPolicy&& other) noexcept
167
- : type(other.type),
168
- header_name(std::move(other.header_name)),
169
- regex(std::move(other.regex)),
170
- regex_substitution(std::move(other.regex_substitution)) {}
171
-
172
- XdsApi::Route::HashPolicy& XdsApi::Route::HashPolicy::operator=(
173
- HashPolicy&& other) noexcept {
174
- type = other.type;
175
- header_name = std::move(other.header_name);
176
- regex = std::move(other.regex);
177
- regex_substitution = std::move(other.regex_substitution);
178
- return *this;
179
- }
180
-
181
- bool XdsApi::Route::HashPolicy::HashPolicy::operator==(
182
- const HashPolicy& other) const {
183
- if (type != other.type) return false;
184
- if (type == Type::HEADER) {
185
- if (regex == nullptr) {
186
- if (other.regex != nullptr) return false;
187
- } else {
188
- if (other.regex == nullptr) return false;
189
- return header_name == other.header_name &&
190
- regex->pattern() == other.regex->pattern() &&
191
- regex_substitution == other.regex_substitution;
192
- }
193
- }
194
- return true;
195
- }
196
-
197
- std::string XdsApi::Route::HashPolicy::ToString() const {
198
- std::vector<std::string> contents;
199
- switch (type) {
200
- case Type::HEADER:
201
- contents.push_back("type=HEADER");
202
- break;
203
- case Type::CHANNEL_ID:
204
- contents.push_back("type=CHANNEL_ID");
205
- break;
206
- }
207
- contents.push_back(
208
- absl::StrFormat("terminal=%s", terminal ? "true" : "false"));
209
- if (type == Type::HEADER) {
210
- contents.push_back(absl::StrFormat(
211
- "Header %s:/%s/%s", header_name,
212
- (regex == nullptr) ? "" : regex->pattern(), regex_substitution));
213
- }
214
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
215
- }
216
-
217
- //
218
- // XdsApi::Route
219
- //
220
-
221
- std::string XdsApi::Route::Matchers::ToString() const {
222
- std::vector<std::string> contents;
223
- contents.push_back(
224
- absl::StrFormat("PathMatcher{%s}", path_matcher.ToString()));
225
- for (const HeaderMatcher& header_matcher : header_matchers) {
226
- contents.push_back(header_matcher.ToString());
227
- }
228
- if (fraction_per_million.has_value()) {
229
- contents.push_back(absl::StrFormat("Fraction Per Million %d",
230
- fraction_per_million.value()));
231
- }
232
- return absl::StrJoin(contents, "\n");
233
- }
234
-
235
- std::string XdsApi::Route::ClusterWeight::ToString() const {
236
- std::vector<std::string> contents;
237
- contents.push_back(absl::StrCat("cluster=", name));
238
- contents.push_back(absl::StrCat("weight=", weight));
239
- if (!typed_per_filter_config.empty()) {
240
- std::vector<std::string> parts;
241
- for (const auto& p : typed_per_filter_config) {
242
- const std::string& key = p.first;
243
- const auto& config = p.second;
244
- parts.push_back(absl::StrCat(key, "=", config.ToString()));
245
- }
246
- contents.push_back(absl::StrCat("typed_per_filter_config={",
247
- absl::StrJoin(parts, ", "), "}"));
248
- }
249
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
250
- }
251
-
252
- std::string XdsApi::Route::ToString() const {
253
- std::vector<std::string> contents;
254
- contents.push_back(matchers.ToString());
255
- for (const HashPolicy& hash_policy : hash_policies) {
256
- contents.push_back(absl::StrCat("hash_policy=", hash_policy.ToString()));
257
- }
258
- if (!cluster_name.empty()) {
259
- contents.push_back(absl::StrFormat("Cluster name: %s", cluster_name));
260
- }
261
- for (const ClusterWeight& cluster_weight : weighted_clusters) {
262
- contents.push_back(cluster_weight.ToString());
263
- }
264
- if (max_stream_duration.has_value()) {
265
- contents.push_back(max_stream_duration->ToString());
266
- }
267
- if (!typed_per_filter_config.empty()) {
268
- contents.push_back("typed_per_filter_config={");
269
- for (const auto& p : typed_per_filter_config) {
270
- const std::string& name = p.first;
271
- const auto& config = p.second;
272
- contents.push_back(absl::StrCat(" ", name, "=", config.ToString()));
273
- }
274
- contents.push_back("}");
275
- }
276
- return absl::StrJoin(contents, "\n");
277
- }
278
-
279
- //
280
- // XdsApi::RdsUpdate
281
- //
282
-
283
- std::string XdsApi::RdsUpdate::ToString() const {
284
- std::vector<std::string> vhosts;
285
- for (const VirtualHost& vhost : virtual_hosts) {
286
- vhosts.push_back(
287
- absl::StrCat("vhost={\n"
288
- " domains=[",
289
- absl::StrJoin(vhost.domains, ", "),
290
- "]\n"
291
- " routes=[\n"));
292
- for (const XdsApi::Route& route : vhost.routes) {
293
- vhosts.push_back(" {\n");
294
- vhosts.push_back(route.ToString());
295
- vhosts.push_back("\n }\n");
296
- }
297
- vhosts.push_back(" ]\n");
298
- vhosts.push_back(" typed_per_filter_config={\n");
299
- for (const auto& p : vhost.typed_per_filter_config) {
300
- const std::string& name = p.first;
301
- const auto& config = p.second;
302
- vhosts.push_back(
303
- absl::StrCat(" ", name, "=", config.ToString(), "\n"));
304
- }
305
- vhosts.push_back(" }\n");
306
- vhosts.push_back("]\n");
307
- }
308
- return absl::StrJoin(vhosts, "");
309
- }
310
-
311
- namespace {
312
-
313
- // Better match type has smaller value.
314
- enum MatchType {
315
- EXACT_MATCH,
316
- SUFFIX_MATCH,
317
- PREFIX_MATCH,
318
- UNIVERSE_MATCH,
319
- INVALID_MATCH,
320
- };
321
-
322
- // Returns true if match succeeds.
323
- bool DomainMatch(MatchType match_type, const std::string& domain_pattern_in,
324
- const std::string& expected_host_name_in) {
325
- // Normalize the args to lower-case. Domain matching is case-insensitive.
326
- std::string domain_pattern = domain_pattern_in;
327
- std::string expected_host_name = expected_host_name_in;
328
- std::transform(domain_pattern.begin(), domain_pattern.end(),
329
- domain_pattern.begin(),
330
- [](unsigned char c) { return std::tolower(c); });
331
- std::transform(expected_host_name.begin(), expected_host_name.end(),
332
- expected_host_name.begin(),
333
- [](unsigned char c) { return std::tolower(c); });
334
- if (match_type == EXACT_MATCH) {
335
- return domain_pattern == expected_host_name;
336
- } else if (match_type == SUFFIX_MATCH) {
337
- // Asterisk must match at least one char.
338
- if (expected_host_name.size() < domain_pattern.size()) return false;
339
- absl::string_view pattern_suffix(domain_pattern.c_str() + 1);
340
- absl::string_view host_suffix(expected_host_name.c_str() +
341
- expected_host_name.size() -
342
- pattern_suffix.size());
343
- return pattern_suffix == host_suffix;
344
- } else if (match_type == PREFIX_MATCH) {
345
- // Asterisk must match at least one char.
346
- if (expected_host_name.size() < domain_pattern.size()) return false;
347
- absl::string_view pattern_prefix(domain_pattern.c_str(),
348
- domain_pattern.size() - 1);
349
- absl::string_view host_prefix(expected_host_name.c_str(),
350
- pattern_prefix.size());
351
- return pattern_prefix == host_prefix;
352
- } else {
353
- return match_type == UNIVERSE_MATCH;
354
- }
355
- }
356
-
357
- MatchType DomainPatternMatchType(const std::string& domain_pattern) {
358
- if (domain_pattern.empty()) return INVALID_MATCH;
359
- if (domain_pattern.find('*') == std::string::npos) return EXACT_MATCH;
360
- if (domain_pattern == "*") return UNIVERSE_MATCH;
361
- if (domain_pattern[0] == '*') return SUFFIX_MATCH;
362
- if (domain_pattern[domain_pattern.size() - 1] == '*') return PREFIX_MATCH;
363
- return INVALID_MATCH;
364
- }
365
-
366
- } // namespace
367
-
368
- XdsApi::RdsUpdate::VirtualHost* XdsApi::RdsUpdate::FindVirtualHostForDomain(
369
- const std::string& domain) {
370
- // Find the best matched virtual host.
371
- // The search order for 4 groups of domain patterns:
372
- // 1. Exact match.
373
- // 2. Suffix match (e.g., "*ABC").
374
- // 3. Prefix match (e.g., "ABC*").
375
- // 4. Universe match (i.e., "*").
376
- // Within each group, longest match wins.
377
- // If the same best matched domain pattern appears in multiple virtual hosts,
378
- // the first matched virtual host wins.
379
- VirtualHost* target_vhost = nullptr;
380
- MatchType best_match_type = INVALID_MATCH;
381
- size_t longest_match = 0;
382
- // Check each domain pattern in each virtual host to determine the best
383
- // matched virtual host.
384
- for (VirtualHost& vhost : virtual_hosts) {
385
- for (const std::string& domain_pattern : vhost.domains) {
386
- // Check the match type first. Skip the pattern if it's not better than
387
- // current match.
388
- const MatchType match_type = DomainPatternMatchType(domain_pattern);
389
- // This should be caught by RouteConfigParse().
390
- GPR_ASSERT(match_type != INVALID_MATCH);
391
- if (match_type > best_match_type) continue;
392
- if (match_type == best_match_type &&
393
- domain_pattern.size() <= longest_match) {
394
- continue;
395
- }
396
- // Skip if match fails.
397
- if (!DomainMatch(match_type, domain_pattern, domain)) continue;
398
- // Choose this match.
399
- target_vhost = &vhost;
400
- best_match_type = match_type;
401
- longest_match = domain_pattern.size();
402
- if (best_match_type == EXACT_MATCH) break;
403
- }
404
- if (best_match_type == EXACT_MATCH) break;
405
- }
406
- return target_vhost;
407
- }
408
-
409
- //
410
- // XdsApi::CommonTlsContext::CertificateValidationContext
411
- //
412
-
413
- std::string XdsApi::CommonTlsContext::CertificateValidationContext::ToString()
414
- const {
415
- std::vector<std::string> contents;
416
- for (const auto& match : match_subject_alt_names) {
417
- contents.push_back(match.ToString());
418
- }
419
- return absl::StrFormat("{match_subject_alt_names=[%s]}",
420
- absl::StrJoin(contents, ", "));
421
- }
422
-
423
- bool XdsApi::CommonTlsContext::CertificateValidationContext::Empty() const {
424
- return match_subject_alt_names.empty();
425
- }
426
-
427
- //
428
- // XdsApi::CommonTlsContext::CertificateValidationContext
429
- //
430
-
431
- std::string XdsApi::CommonTlsContext::CertificateProviderInstance::ToString()
432
- const {
433
- absl::InlinedVector<std::string, 2> contents;
434
- if (!instance_name.empty()) {
435
- contents.push_back(absl::StrFormat("instance_name=%s", instance_name));
436
- }
437
- if (!certificate_name.empty()) {
438
- contents.push_back(
439
- absl::StrFormat("certificate_name=%s", certificate_name));
440
- }
441
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
442
- }
443
-
444
- bool XdsApi::CommonTlsContext::CertificateProviderInstance::Empty() const {
445
- return instance_name.empty() && certificate_name.empty();
446
- }
447
-
448
- //
449
- // XdsApi::CommonTlsContext::CombinedCertificateValidationContext
450
- //
451
-
452
- std::string
453
- XdsApi::CommonTlsContext::CombinedCertificateValidationContext::ToString()
454
- const {
455
- absl::InlinedVector<std::string, 2> contents;
456
- if (!default_validation_context.Empty()) {
457
- contents.push_back(absl::StrFormat("default_validation_context=%s",
458
- default_validation_context.ToString()));
459
- }
460
- if (!validation_context_certificate_provider_instance.Empty()) {
461
- contents.push_back(absl::StrFormat(
462
- "validation_context_certificate_provider_instance=%s",
463
- validation_context_certificate_provider_instance.ToString()));
464
- }
465
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
466
- }
467
-
468
- bool XdsApi::CommonTlsContext::CombinedCertificateValidationContext::Empty()
469
- const {
470
- return default_validation_context.Empty() &&
471
- validation_context_certificate_provider_instance.Empty();
472
- }
473
-
474
- //
475
- // XdsApi::CommonTlsContext
476
- //
477
-
478
- std::string XdsApi::CommonTlsContext::ToString() const {
479
- absl::InlinedVector<std::string, 2> contents;
480
- if (!tls_certificate_certificate_provider_instance.Empty()) {
481
- contents.push_back(absl::StrFormat(
482
- "tls_certificate_certificate_provider_instance=%s",
483
- tls_certificate_certificate_provider_instance.ToString()));
484
- }
485
- if (!combined_validation_context.Empty()) {
486
- contents.push_back(absl::StrFormat("combined_validation_context=%s",
487
- combined_validation_context.ToString()));
488
- }
489
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
490
- }
491
-
492
- bool XdsApi::CommonTlsContext::Empty() const {
493
- return tls_certificate_certificate_provider_instance.Empty() &&
494
- combined_validation_context.Empty();
495
- }
496
-
497
- //
498
- // XdsApi::DownstreamTlsContext
499
- //
500
-
501
- std::string XdsApi::DownstreamTlsContext::ToString() const {
502
- return absl::StrFormat("common_tls_context=%s, require_client_certificate=%s",
503
- common_tls_context.ToString(),
504
- require_client_certificate ? "true" : "false");
505
- }
506
-
507
- bool XdsApi::DownstreamTlsContext::Empty() const {
508
- return common_tls_context.Empty();
509
- }
510
-
511
- //
512
- // XdsApi::LdsUpdate::HttpConnectionManager
513
- //
514
-
515
- std::string XdsApi::LdsUpdate::HttpConnectionManager::ToString() const {
516
- absl::InlinedVector<std::string, 4> contents;
517
- contents.push_back(absl::StrFormat(
518
- "route_config_name=%s",
519
- !route_config_name.empty() ? route_config_name.c_str() : "<inlined>"));
520
- contents.push_back(absl::StrFormat("http_max_stream_duration=%s",
521
- http_max_stream_duration.ToString()));
522
- if (rds_update.has_value()) {
523
- contents.push_back(
524
- absl::StrFormat("rds_update=%s", rds_update->ToString()));
525
- }
526
- if (!http_filters.empty()) {
527
- std::vector<std::string> filter_strings;
528
- for (const auto& http_filter : http_filters) {
529
- filter_strings.push_back(http_filter.ToString());
530
- }
531
- contents.push_back(absl::StrCat("http_filters=[",
532
- absl::StrJoin(filter_strings, ", "), "]"));
533
- }
534
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
535
- }
536
-
537
- //
538
- // XdsApi::LdsUpdate::HttpFilter
539
- //
540
-
541
- std::string XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter::ToString()
542
- const {
543
- return absl::StrCat("{name=", name, ", config=", config.ToString(), "}");
544
- }
545
-
546
- //
547
- // XdsApi::LdsUpdate::FilterChainData
548
- //
549
-
550
- std::string XdsApi::LdsUpdate::FilterChainData::ToString() const {
551
- return absl::StrCat(
552
- "{downstream_tls_context=", downstream_tls_context.ToString(),
553
- " http_connection_manager=", http_connection_manager.ToString(), "}");
554
- }
555
-
556
- //
557
- // XdsApi::LdsUpdate::FilterChainMap::CidrRange
558
- //
559
-
560
- std::string XdsApi::LdsUpdate::FilterChainMap::CidrRange::ToString() const {
561
- return absl::StrCat(
562
- "{address_prefix=", grpc_sockaddr_to_string(&address, false),
563
- ", prefix_len=", prefix_len, "}");
564
- }
565
-
566
- //
567
- // FilterChain
568
- //
569
-
570
- struct FilterChain {
571
- struct FilterChainMatch {
572
- uint32_t destination_port = 0;
573
- std::vector<XdsApi::LdsUpdate::FilterChainMap::CidrRange> prefix_ranges;
574
- XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType source_type =
575
- XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::kAny;
576
- std::vector<XdsApi::LdsUpdate::FilterChainMap::CidrRange>
577
- source_prefix_ranges;
578
- std::vector<uint32_t> source_ports;
579
- std::vector<std::string> server_names;
580
- std::string transport_protocol;
581
- std::vector<std::string> application_protocols;
582
-
583
- std::string ToString() const;
584
- } filter_chain_match;
585
-
586
- std::shared_ptr<XdsApi::LdsUpdate::FilterChainData> filter_chain_data;
587
- };
588
-
589
- std::string FilterChain::FilterChainMatch::ToString() const {
590
- absl::InlinedVector<std::string, 8> contents;
591
- if (destination_port != 0) {
592
- contents.push_back(absl::StrCat("destination_port=", destination_port));
593
- }
594
- if (!prefix_ranges.empty()) {
595
- std::vector<std::string> prefix_ranges_content;
596
- for (const auto& range : prefix_ranges) {
597
- prefix_ranges_content.push_back(range.ToString());
598
- }
599
- contents.push_back(absl::StrCat(
600
- "prefix_ranges={", absl::StrJoin(prefix_ranges_content, ", "), "}"));
601
- }
602
- if (source_type == XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType::
603
- kSameIpOrLoopback) {
604
- contents.push_back("source_type=SAME_IP_OR_LOOPBACK");
605
- } else if (source_type == XdsApi::LdsUpdate::FilterChainMap::
606
- ConnectionSourceType::kExternal) {
607
- contents.push_back("source_type=EXTERNAL");
608
- }
609
- if (!source_prefix_ranges.empty()) {
610
- std::vector<std::string> source_prefix_ranges_content;
611
- for (const auto& range : source_prefix_ranges) {
612
- source_prefix_ranges_content.push_back(range.ToString());
613
- }
614
- contents.push_back(
615
- absl::StrCat("source_prefix_ranges={",
616
- absl::StrJoin(source_prefix_ranges_content, ", "), "}"));
617
- }
618
- if (!source_ports.empty()) {
619
- contents.push_back(
620
- absl::StrCat("source_ports={", absl::StrJoin(source_ports, ", "), "}"));
621
- }
622
- if (!server_names.empty()) {
623
- contents.push_back(
624
- absl::StrCat("server_names={", absl::StrJoin(server_names, ", "), "}"));
625
- }
626
- if (!transport_protocol.empty()) {
627
- contents.push_back(absl::StrCat("transport_protocol=", transport_protocol));
628
- }
629
- if (!application_protocols.empty()) {
630
- contents.push_back(absl::StrCat("application_protocols={",
631
- absl::StrJoin(application_protocols, ", "),
632
- "}"));
633
- }
634
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
635
- }
636
-
637
- //
638
- // XdsApi::LdsUpdate::FilterChainMap
639
- //
640
-
641
- std::string XdsApi::LdsUpdate::FilterChainMap::ToString() const {
642
- std::vector<std::string> contents;
643
- for (const auto& destination_ip : destination_ip_vector) {
644
- for (int source_type = 0; source_type < 3; ++source_type) {
645
- for (const auto& source_ip :
646
- destination_ip.source_types_array[source_type]) {
647
- for (const auto& source_port_pair : source_ip.ports_map) {
648
- FilterChain::FilterChainMatch filter_chain_match;
649
- if (destination_ip.prefix_range.has_value()) {
650
- filter_chain_match.prefix_ranges.push_back(
651
- *destination_ip.prefix_range);
652
- }
653
- filter_chain_match.source_type = static_cast<
654
- XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType>(
655
- source_type);
656
- if (source_ip.prefix_range.has_value()) {
657
- filter_chain_match.source_prefix_ranges.push_back(
658
- *source_ip.prefix_range);
659
- }
660
- if (source_port_pair.first != 0) {
661
- filter_chain_match.source_ports.push_back(source_port_pair.first);
662
- }
663
- contents.push_back(absl::StrCat(
664
- "{filter_chain_match=", filter_chain_match.ToString(),
665
- ", filter_chain=", source_port_pair.second.data->ToString(),
666
- "}"));
667
- }
668
- }
669
- }
670
- }
671
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
672
- }
673
-
674
- //
675
- // XdsApi::LdsUpdate
676
- //
677
-
678
- std::string XdsApi::LdsUpdate::ToString() const {
679
- absl::InlinedVector<std::string, 4> contents;
680
- if (type == ListenerType::kTcpListener) {
681
- contents.push_back(absl::StrCat("address=", address));
682
- contents.push_back(
683
- absl::StrCat("filter_chain_map=", filter_chain_map.ToString()));
684
- if (default_filter_chain.has_value()) {
685
- contents.push_back(absl::StrCat("default_filter_chain=",
686
- default_filter_chain->ToString()));
687
- }
688
- } else if (type == ListenerType::kHttpApiListener) {
689
- contents.push_back(absl::StrFormat("http_connection_manager=%s",
690
- http_connection_manager.ToString()));
691
- }
692
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
693
- }
694
-
695
- //
696
- // XdsApi::CdsUpdate
697
- //
698
-
699
- std::string XdsApi::CdsUpdate::ToString() const {
700
- absl::InlinedVector<std::string, 4> contents;
701
- if (!eds_service_name.empty()) {
702
- contents.push_back(
703
- absl::StrFormat("eds_service_name=%s", eds_service_name));
704
- }
705
- if (!common_tls_context.Empty()) {
706
- contents.push_back(absl::StrFormat("common_tls_context=%s",
707
- common_tls_context.ToString()));
708
- }
709
- if (lrs_load_reporting_server_name.has_value()) {
710
- contents.push_back(absl::StrFormat("lrs_load_reporting_server_name=%s",
711
- lrs_load_reporting_server_name.value()));
712
- }
713
- contents.push_back(
714
- absl::StrFormat("max_concurrent_requests=%d", max_concurrent_requests));
715
- return absl::StrCat("{", absl::StrJoin(contents, ", "), "}");
716
- }
717
-
718
- //
719
- // XdsApi::EdsUpdate
720
- //
721
-
722
- std::string XdsApi::EdsUpdate::Priority::Locality::ToString() const {
723
- std::vector<std::string> endpoint_strings;
724
- for (const ServerAddress& endpoint : endpoints) {
725
- endpoint_strings.emplace_back(endpoint.ToString());
726
- }
727
- return absl::StrCat("{name=", name->AsHumanReadableString(),
728
- ", lb_weight=", lb_weight, ", endpoints=[",
729
- absl::StrJoin(endpoint_strings, ", "), "]}");
730
- }
731
-
732
- bool XdsApi::EdsUpdate::Priority::operator==(const Priority& other) const {
733
- if (localities.size() != other.localities.size()) return false;
734
- auto it1 = localities.begin();
735
- auto it2 = other.localities.begin();
736
- while (it1 != localities.end()) {
737
- if (*it1->first != *it2->first) return false;
738
- if (it1->second != it2->second) return false;
739
- ++it1;
740
- ++it2;
741
- }
742
- return true;
743
- }
744
-
745
- std::string XdsApi::EdsUpdate::Priority::ToString() const {
746
- std::vector<std::string> locality_strings;
747
- for (const auto& p : localities) {
748
- locality_strings.emplace_back(p.second.ToString());
749
- }
750
- return absl::StrCat("[", absl::StrJoin(locality_strings, ", "), "]");
751
- }
752
-
753
- bool XdsApi::EdsUpdate::DropConfig::ShouldDrop(
754
- const std::string** category_name) const {
755
- for (size_t i = 0; i < drop_category_list_.size(); ++i) {
756
- const auto& drop_category = drop_category_list_[i];
757
- // Generate a random number in [0, 1000000).
758
- const uint32_t random = static_cast<uint32_t>(rand()) % 1000000;
759
- if (random < drop_category.parts_per_million) {
760
- *category_name = &drop_category.name;
761
- return true;
762
- }
763
- }
764
- return false;
765
- }
766
-
767
- std::string XdsApi::EdsUpdate::DropConfig::ToString() const {
768
- std::vector<std::string> category_strings;
769
- for (const DropCategory& category : drop_category_list_) {
770
- category_strings.emplace_back(
771
- absl::StrCat(category.name, "=", category.parts_per_million));
772
- }
773
- return absl::StrCat("{[", absl::StrJoin(category_strings, ", "),
774
- "], drop_all=", drop_all_, "}");
775
- }
776
-
777
- std::string XdsApi::EdsUpdate::ToString() const {
778
- std::vector<std::string> priority_strings;
779
- for (size_t i = 0; i < priorities.size(); ++i) {
780
- const Priority& priority = priorities[i];
781
- priority_strings.emplace_back(
782
- absl::StrCat("priority ", i, ": ", priority.ToString()));
783
- }
784
- return absl::StrCat("priorities=[", absl::StrJoin(priority_strings, ", "),
785
- "], drop_config=", drop_config->ToString());
786
- }
787
-
788
- //
789
- // XdsApi
790
- //
791
-
792
- const char* XdsApi::kLdsTypeUrl =
793
- "type.googleapis.com/envoy.config.listener.v3.Listener";
794
- const char* XdsApi::kRdsTypeUrl =
795
- "type.googleapis.com/envoy.config.route.v3.RouteConfiguration";
796
- const char* XdsApi::kCdsTypeUrl =
797
- "type.googleapis.com/envoy.config.cluster.v3.Cluster";
798
- const char* XdsApi::kEdsTypeUrl =
799
- "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment";
800
-
801
- namespace {
802
-
803
- const char* kLdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Listener";
804
- const char* kRdsV2TypeUrl =
805
- "type.googleapis.com/envoy.api.v2.RouteConfiguration";
806
- const char* kCdsV2TypeUrl = "type.googleapis.com/envoy.api.v2.Cluster";
807
- const char* kEdsV2TypeUrl =
808
- "type.googleapis.com/envoy.api.v2.ClusterLoadAssignment";
809
-
810
- bool IsLds(absl::string_view type_url, bool* is_v2 = nullptr) {
811
- if (type_url == XdsApi::kLdsTypeUrl) return true;
812
- if (type_url == kLdsV2TypeUrl) {
813
- if (is_v2 != nullptr) *is_v2 = true;
814
- return true;
815
- }
816
- return false;
817
- }
818
-
819
- bool IsRds(absl::string_view type_url) {
820
- return type_url == XdsApi::kRdsTypeUrl || type_url == kRdsV2TypeUrl;
821
- }
822
-
823
- bool IsCds(absl::string_view type_url) {
824
- return type_url == XdsApi::kCdsTypeUrl || type_url == kCdsV2TypeUrl;
825
- }
826
-
827
- bool IsEds(absl::string_view type_url) {
828
- return type_url == XdsApi::kEdsTypeUrl || type_url == kEdsV2TypeUrl;
829
- }
830
-
831
- } // namespace
65
+ // If gRPC is built with -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="...", that string
66
+ // will be appended to the user agent name reported to the xDS server.
67
+ #ifdef GRPC_XDS_USER_AGENT_NAME_SUFFIX
68
+ #define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING \
69
+ " " GRPC_XDS_USER_AGENT_NAME_SUFFIX
70
+ #else
71
+ #define GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING ""
72
+ #endif
73
+
74
+ // If gRPC is built with -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="...", that string
75
+ // will be appended to the user agent version reported to the xDS server.
76
+ #ifdef GRPC_XDS_USER_AGENT_VERSION_SUFFIX
77
+ #define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING \
78
+ " " GRPC_XDS_USER_AGENT_VERSION_SUFFIX
79
+ #else
80
+ #define GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING ""
81
+ #endif
832
82
 
833
83
  XdsApi::XdsApi(XdsClient* client, TraceFlag* tracer,
834
- const XdsBootstrap::Node* node)
84
+ const XdsBootstrap::Node* node,
85
+ const CertificateProviderStore::PluginDefinitionMap*
86
+ certificate_provider_definition_map,
87
+ upb::SymbolTable* symtab)
835
88
  : client_(client),
836
89
  tracer_(tracer),
837
90
  node_(node),
91
+ certificate_provider_definition_map_(certificate_provider_definition_map),
92
+ symtab_(symtab),
838
93
  build_version_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING, " ",
839
- grpc_version_string())),
840
- user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING)) {
841
- // Populate upb symtab with xDS proto messages that we want to print
842
- // properly in logs.
843
- // Note: This won't actually work properly until upb adds support for
844
- // Any fields in textproto printing (internal b/178821188).
845
- envoy_config_listener_v3_Listener_getmsgdef(symtab_.ptr());
846
- envoy_config_route_v3_RouteConfiguration_getmsgdef(symtab_.ptr());
847
- envoy_config_cluster_v3_Cluster_getmsgdef(symtab_.ptr());
848
- envoy_extensions_clusters_aggregate_v3_ClusterConfig_getmsgdef(symtab_.ptr());
849
- envoy_config_cluster_v3_Cluster_getmsgdef(symtab_.ptr());
850
- envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(symtab_.ptr());
851
- envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_getmsgdef(
852
- symtab_.ptr());
853
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
854
- symtab_.ptr());
855
- // Load HTTP filter proto messages into the upb symtab.
856
- XdsHttpFilterRegistry::PopulateSymtab(symtab_.ptr());
857
- }
94
+ grpc_version_string(),
95
+ GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
96
+ GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)),
97
+ user_agent_name_(absl::StrCat("gRPC C-core ", GPR_PLATFORM_STRING,
98
+ GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING)),
99
+ user_agent_version_(
100
+ absl::StrCat("C-core ", grpc_version_string(),
101
+ GRPC_XDS_USER_AGENT_NAME_SUFFIX_STRING,
102
+ GRPC_XDS_USER_AGENT_VERSION_SUFFIX_STRING)) {}
858
103
 
859
104
  namespace {
860
105
 
861
- struct EncodingContext {
862
- XdsClient* client;
863
- TraceFlag* tracer;
864
- upb_symtab* symtab;
865
- upb_arena* arena;
866
- bool use_v3;
867
- };
868
-
869
- // Works for both std::string and absl::string_view.
870
- template <typename T>
871
- inline upb_strview StdStringToUpbString(const T& str) {
872
- return upb_strview_make(str.data(), str.size());
873
- }
874
-
875
- void PopulateMetadataValue(const EncodingContext& context,
106
+ void PopulateMetadataValue(const XdsEncodingContext& context,
876
107
  google_protobuf_Value* value_pb, const Json& value);
877
108
 
878
- void PopulateListValue(const EncodingContext& context,
109
+ void PopulateListValue(const XdsEncodingContext& context,
879
110
  google_protobuf_ListValue* list_value,
880
111
  const Json::Array& values) {
881
112
  for (const auto& value : values) {
@@ -885,7 +116,7 @@ void PopulateListValue(const EncodingContext& context,
885
116
  }
886
117
  }
887
118
 
888
- void PopulateMetadata(const EncodingContext& context,
119
+ void PopulateMetadata(const XdsEncodingContext& context,
889
120
  google_protobuf_Struct* metadata_pb,
890
121
  const Json::Object& metadata) {
891
122
  for (const auto& p : metadata) {
@@ -896,7 +127,7 @@ void PopulateMetadata(const EncodingContext& context,
896
127
  }
897
128
  }
898
129
 
899
- void PopulateMetadataValue(const EncodingContext& context,
130
+ void PopulateMetadataValue(const XdsEncodingContext& context,
900
131
  google_protobuf_Value* value_pb, const Json& value) {
901
132
  switch (value.type()) {
902
133
  case Json::Type::JSON_NULL:
@@ -952,22 +183,23 @@ std::string EncodeStringField(uint32_t field_number, const std::string& str) {
952
183
  EncodeVarint(str.size()) + str;
953
184
  }
954
185
 
955
- void PopulateBuildVersion(const EncodingContext& context,
186
+ void PopulateBuildVersion(const XdsEncodingContext& context,
956
187
  envoy_config_core_v3_Node* node_msg,
957
188
  const std::string& build_version) {
958
189
  std::string encoded_build_version = EncodeStringField(5, build_version);
959
- // TODO(roth): This should use upb_msg_addunknown(), but that API is
190
+ // TODO(roth): This should use upb_Message_AddUnknown(), but that API is
960
191
  // broken in the current version of upb, so we're using the internal
961
192
  // API for now. Change this once we upgrade to a version of upb that
962
193
  // fixes this bug.
963
- _upb_msg_addunknown(node_msg, encoded_build_version.data(),
964
- encoded_build_version.size(), context.arena);
194
+ _upb_Message_AddUnknown(node_msg, encoded_build_version.data(),
195
+ encoded_build_version.size(), context.arena);
965
196
  }
966
197
 
967
- void PopulateNode(const EncodingContext& context,
198
+ void PopulateNode(const XdsEncodingContext& context,
968
199
  const XdsBootstrap::Node* node,
969
200
  const std::string& build_version,
970
201
  const std::string& user_agent_name,
202
+ const std::string& user_agent_version,
971
203
  envoy_config_core_v3_Node* node_msg) {
972
204
  if (node != nullptr) {
973
205
  if (!node->id.empty()) {
@@ -1007,36 +239,29 @@ void PopulateNode(const EncodingContext& context,
1007
239
  envoy_config_core_v3_Node_set_user_agent_name(
1008
240
  node_msg, StdStringToUpbString(user_agent_name));
1009
241
  envoy_config_core_v3_Node_set_user_agent_version(
1010
- node_msg, upb_strview_makez(grpc_version_string()));
242
+ node_msg, StdStringToUpbString(user_agent_version));
1011
243
  envoy_config_core_v3_Node_add_client_features(
1012
- node_msg, upb_strview_makez("envoy.lb.does_not_support_overprovisioning"),
244
+ node_msg,
245
+ upb_StringView_FromString("envoy.lb.does_not_support_overprovisioning"),
1013
246
  context.arena);
1014
247
  }
1015
248
 
1016
- inline absl::string_view UpbStringToAbsl(const upb_strview& str) {
1017
- return absl::string_view(str.data, str.size);
1018
- }
1019
-
1020
- inline std::string UpbStringToStdString(const upb_strview& str) {
1021
- return std::string(str.data, str.size);
1022
- }
1023
-
1024
249
  void MaybeLogDiscoveryRequest(
1025
- const EncodingContext& context,
250
+ const XdsEncodingContext& context,
1026
251
  const envoy_service_discovery_v3_DiscoveryRequest* request) {
1027
252
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1028
253
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1029
- const upb_msgdef* msg_type =
254
+ const upb_MessageDef* msg_type =
1030
255
  envoy_service_discovery_v3_DiscoveryRequest_getmsgdef(context.symtab);
1031
256
  char buf[10240];
1032
- upb_text_encode(request, msg_type, nullptr, 0, buf, sizeof(buf));
257
+ upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf));
1033
258
  gpr_log(GPR_DEBUG, "[xds_client %p] constructed ADS request: %s",
1034
259
  context.client, buf);
1035
260
  }
1036
261
  }
1037
262
 
1038
263
  grpc_slice SerializeDiscoveryRequest(
1039
- const EncodingContext& context,
264
+ const XdsEncodingContext& context,
1040
265
  envoy_service_discovery_v3_DiscoveryRequest* request) {
1041
266
  size_t output_length;
1042
267
  char* output = envoy_service_discovery_v3_DiscoveryRequest_serialize(
@@ -1044,43 +269,28 @@ grpc_slice SerializeDiscoveryRequest(
1044
269
  return grpc_slice_from_copied_buffer(output, output_length);
1045
270
  }
1046
271
 
1047
- absl::string_view TypeUrlExternalToInternal(bool use_v3,
1048
- const std::string& type_url) {
1049
- if (!use_v3) {
1050
- if (type_url == XdsApi::kLdsTypeUrl) {
1051
- return kLdsV2TypeUrl;
1052
- }
1053
- if (type_url == XdsApi::kRdsTypeUrl) {
1054
- return kRdsV2TypeUrl;
1055
- }
1056
- if (type_url == XdsApi::kCdsTypeUrl) {
1057
- return kCdsV2TypeUrl;
1058
- }
1059
- if (type_url == XdsApi::kEdsTypeUrl) {
1060
- return kEdsV2TypeUrl;
1061
- }
1062
- }
1063
- return type_url;
1064
- }
1065
-
1066
272
  } // namespace
1067
273
 
1068
274
  grpc_slice XdsApi::CreateAdsRequest(
1069
- const XdsBootstrap::XdsServer& server, const std::string& type_url,
1070
- const std::set<absl::string_view>& resource_names,
1071
- const std::string& version, const std::string& nonce, grpc_error* error,
275
+ const XdsBootstrap::XdsServer& server, absl::string_view type_url,
276
+ absl::string_view version, absl::string_view nonce,
277
+ const std::vector<std::string>& resource_names, grpc_error_handle error,
1072
278
  bool populate_node) {
1073
279
  upb::Arena arena;
1074
- const EncodingContext context = {client_, tracer_, symtab_.ptr(), arena.ptr(),
1075
- server.ShouldUseV3()};
280
+ const XdsEncodingContext context = {client_,
281
+ server,
282
+ tracer_,
283
+ symtab_->ptr(),
284
+ arena.ptr(),
285
+ server.ShouldUseV3(),
286
+ certificate_provider_definition_map_};
1076
287
  // Create a request.
1077
288
  envoy_service_discovery_v3_DiscoveryRequest* request =
1078
289
  envoy_service_discovery_v3_DiscoveryRequest_new(arena.ptr());
1079
290
  // Set type_url.
1080
- absl::string_view real_type_url =
1081
- TypeUrlExternalToInternal(server.ShouldUseV3(), type_url);
291
+ std::string type_url_str = absl::StrCat("type.googleapis.com/", type_url);
1082
292
  envoy_service_discovery_v3_DiscoveryRequest_set_type_url(
1083
- request, StdStringToUpbString(real_type_url));
293
+ request, StdStringToUpbString(type_url_str));
1084
294
  // Set version_info.
1085
295
  if (!version.empty()) {
1086
296
  envoy_service_discovery_v3_DiscoveryRequest_set_version_info(
@@ -1092,6 +302,7 @@ grpc_slice XdsApi::CreateAdsRequest(
1092
302
  request, StdStringToUpbString(nonce));
1093
303
  }
1094
304
  // Set error_detail if it's a NACK.
305
+ std::string error_string_storage;
1095
306
  if (error != GRPC_ERROR_NONE) {
1096
307
  google_rpc_Status* error_detail =
1097
308
  envoy_service_discovery_v3_DiscoveryRequest_mutable_error_detail(
@@ -1102,8 +313,9 @@ grpc_slice XdsApi::CreateAdsRequest(
1102
313
  // generate them in the parsing code, and then use that here.
1103
314
  google_rpc_Status_set_code(error_detail, GRPC_STATUS_INVALID_ARGUMENT);
1104
315
  // Error description comes from the error that was passed in.
1105
- upb_strview error_description =
1106
- StdStringToUpbString(absl::string_view(grpc_error_string(error)));
316
+ error_string_storage = grpc_error_std_string(error);
317
+ upb_StringView error_description =
318
+ StdStringToUpbString(error_string_storage);
1107
319
  google_rpc_Status_set_message(error_detail, error_description);
1108
320
  GRPC_ERROR_UNREF(error);
1109
321
  }
@@ -1112,10 +324,11 @@ grpc_slice XdsApi::CreateAdsRequest(
1112
324
  envoy_config_core_v3_Node* node_msg =
1113
325
  envoy_service_discovery_v3_DiscoveryRequest_mutable_node(request,
1114
326
  arena.ptr());
1115
- PopulateNode(context, node_, build_version_, user_agent_name_, node_msg);
327
+ PopulateNode(context, node_, build_version_, user_agent_name_,
328
+ user_agent_version_, node_msg);
1116
329
  }
1117
330
  // Add resource_names.
1118
- for (const auto& resource_name : resource_names) {
331
+ for (const std::string& resource_name : resource_names) {
1119
332
  envoy_service_discovery_v3_DiscoveryRequest_add_resource_names(
1120
333
  request, StdStringToUpbString(resource_name), arena.ptr());
1121
334
  }
@@ -1126,2213 +339,89 @@ grpc_slice XdsApi::CreateAdsRequest(
1126
339
  namespace {
1127
340
 
1128
341
  void MaybeLogDiscoveryResponse(
1129
- const EncodingContext& context,
342
+ const XdsEncodingContext& context,
1130
343
  const envoy_service_discovery_v3_DiscoveryResponse* response) {
1131
344
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1132
345
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1133
- const upb_msgdef* msg_type =
346
+ const upb_MessageDef* msg_type =
1134
347
  envoy_service_discovery_v3_DiscoveryResponse_getmsgdef(context.symtab);
1135
348
  char buf[10240];
1136
- upb_text_encode(response, msg_type, nullptr, 0, buf, sizeof(buf));
349
+ upb_TextEncode(response, msg_type, nullptr, 0, buf, sizeof(buf));
1137
350
  gpr_log(GPR_DEBUG, "[xds_client %p] received response: %s", context.client,
1138
351
  buf);
1139
352
  }
1140
353
  }
1141
354
 
1142
- void MaybeLogHttpConnectionManager(
1143
- const EncodingContext& context,
1144
- const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
1145
- http_connection_manager_config) {
1146
- if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1147
- gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1148
- const upb_msgdef* msg_type =
1149
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_getmsgdef(
1150
- context.symtab);
1151
- char buf[10240];
1152
- upb_text_encode(http_connection_manager_config, msg_type, nullptr, 0, buf,
1153
- sizeof(buf));
1154
- gpr_log(GPR_DEBUG, "[xds_client %p] HttpConnectionManager: %s",
1155
- context.client, buf);
1156
- }
1157
- }
1158
-
1159
- void MaybeLogRouteConfiguration(
1160
- const EncodingContext& context,
1161
- const envoy_config_route_v3_RouteConfiguration* route_config) {
1162
- if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1163
- gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1164
- const upb_msgdef* msg_type =
1165
- envoy_config_route_v3_RouteConfiguration_getmsgdef(context.symtab);
1166
- char buf[10240];
1167
- upb_text_encode(route_config, msg_type, nullptr, 0, buf, sizeof(buf));
1168
- gpr_log(GPR_DEBUG, "[xds_client %p] RouteConfiguration: %s", context.client,
1169
- buf);
1170
- }
1171
- }
355
+ } // namespace
1172
356
 
1173
- void MaybeLogCluster(const EncodingContext& context,
1174
- const envoy_config_cluster_v3_Cluster* cluster) {
1175
- if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1176
- gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1177
- const upb_msgdef* msg_type =
1178
- envoy_config_cluster_v3_Cluster_getmsgdef(context.symtab);
1179
- char buf[10240];
1180
- upb_text_encode(cluster, msg_type, nullptr, 0, buf, sizeof(buf));
1181
- gpr_log(GPR_DEBUG, "[xds_client %p] Cluster: %s", context.client, buf);
1182
- }
1183
- }
1184
-
1185
- void MaybeLogClusterLoadAssignment(
1186
- const EncodingContext& context,
1187
- const envoy_config_endpoint_v3_ClusterLoadAssignment* cla) {
1188
- if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1189
- gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
1190
- const upb_msgdef* msg_type =
1191
- envoy_config_endpoint_v3_ClusterLoadAssignment_getmsgdef(
1192
- context.symtab);
1193
- char buf[10240];
1194
- upb_text_encode(cla, msg_type, nullptr, 0, buf, sizeof(buf));
1195
- gpr_log(GPR_DEBUG, "[xds_client %p] ClusterLoadAssignment: %s",
1196
- context.client, buf);
1197
- }
1198
- }
1199
-
1200
- grpc_error* RoutePathMatchParse(const envoy_config_route_v3_RouteMatch* match,
1201
- XdsApi::Route* route, bool* ignore_route) {
1202
- auto* case_sensitive_ptr =
1203
- envoy_config_route_v3_RouteMatch_case_sensitive(match);
1204
- bool case_sensitive = true;
1205
- if (case_sensitive_ptr != nullptr) {
1206
- case_sensitive = google_protobuf_BoolValue_value(case_sensitive_ptr);
1207
- }
1208
- StringMatcher::Type type;
1209
- std::string match_string;
1210
- if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
1211
- absl::string_view prefix =
1212
- UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
1213
- // Empty prefix "" is accepted.
1214
- if (!prefix.empty()) {
1215
- // Prefix "/" is accepted.
1216
- if (prefix[0] != '/') {
1217
- // Prefix which does not start with a / will never match anything, so
1218
- // ignore this route.
1219
- *ignore_route = true;
1220
- return GRPC_ERROR_NONE;
1221
- }
1222
- std::vector<absl::string_view> prefix_elements =
1223
- absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
1224
- if (prefix_elements.size() > 2) {
1225
- // Prefix cannot have more than 2 slashes.
1226
- *ignore_route = true;
1227
- return GRPC_ERROR_NONE;
1228
- } else if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
1229
- // Prefix contains empty string between the 2 slashes
1230
- *ignore_route = true;
1231
- return GRPC_ERROR_NONE;
1232
- }
1233
- }
1234
- type = StringMatcher::Type::PREFIX;
1235
- match_string = std::string(prefix);
1236
- } else if (envoy_config_route_v3_RouteMatch_has_path(match)) {
1237
- absl::string_view path =
1238
- UpbStringToAbsl(envoy_config_route_v3_RouteMatch_path(match));
1239
- if (path.empty()) {
1240
- // Path that is empty will never match anything, so ignore this route.
1241
- *ignore_route = true;
1242
- return GRPC_ERROR_NONE;
1243
- }
1244
- if (path[0] != '/') {
1245
- // Path which does not start with a / will never match anything, so
1246
- // ignore this route.
1247
- *ignore_route = true;
1248
- return GRPC_ERROR_NONE;
1249
- }
1250
- std::vector<absl::string_view> path_elements =
1251
- absl::StrSplit(path.substr(1), absl::MaxSplits('/', 2));
1252
- if (path_elements.size() != 2) {
1253
- // Path not in the required format of /service/method will never match
1254
- // anything, so ignore this route.
1255
- *ignore_route = true;
1256
- return GRPC_ERROR_NONE;
1257
- } else if (path_elements[0].empty()) {
1258
- // Path contains empty service name will never match anything, so ignore
1259
- // this route.
1260
- *ignore_route = true;
1261
- return GRPC_ERROR_NONE;
1262
- } else if (path_elements[1].empty()) {
1263
- // Path contains empty method name will never match anything, so ignore
1264
- // this route.
1265
- *ignore_route = true;
1266
- return GRPC_ERROR_NONE;
1267
- }
1268
- type = StringMatcher::Type::EXACT;
1269
- match_string = std::string(path);
1270
- } else if (envoy_config_route_v3_RouteMatch_has_safe_regex(match)) {
1271
- const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
1272
- envoy_config_route_v3_RouteMatch_safe_regex(match);
1273
- GPR_ASSERT(regex_matcher != nullptr);
1274
- type = StringMatcher::Type::SAFE_REGEX;
1275
- match_string = UpbStringToStdString(
1276
- envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
1277
- } else {
1278
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1279
- "Invalid route path specifier specified.");
1280
- }
1281
- absl::StatusOr<StringMatcher> string_matcher =
1282
- StringMatcher::Create(type, match_string, case_sensitive);
1283
- if (!string_matcher.ok()) {
1284
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1285
- absl::StrCat("path matcher: ", string_matcher.status().message())
1286
- .c_str());
1287
- ;
1288
- }
1289
- route->matchers.path_matcher = std::move(string_matcher.value());
1290
- return GRPC_ERROR_NONE;
1291
- }
1292
-
1293
- grpc_error* RouteHeaderMatchersParse(
1294
- const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
1295
- size_t size;
1296
- const envoy_config_route_v3_HeaderMatcher* const* headers =
1297
- envoy_config_route_v3_RouteMatch_headers(match, &size);
1298
- for (size_t i = 0; i < size; ++i) {
1299
- const envoy_config_route_v3_HeaderMatcher* header = headers[i];
1300
- const std::string name =
1301
- UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
1302
- HeaderMatcher::Type type;
1303
- std::string match_string;
1304
- int64_t range_start = 0;
1305
- int64_t range_end = 0;
1306
- bool present_match = false;
1307
- if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
1308
- type = HeaderMatcher::Type::EXACT;
1309
- match_string = UpbStringToStdString(
1310
- envoy_config_route_v3_HeaderMatcher_exact_match(header));
1311
- } else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(
1312
- header)) {
1313
- const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
1314
- envoy_config_route_v3_HeaderMatcher_safe_regex_match(header);
1315
- GPR_ASSERT(regex_matcher != nullptr);
1316
- type = HeaderMatcher::Type::SAFE_REGEX;
1317
- match_string = UpbStringToStdString(
1318
- envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
1319
- } else if (envoy_config_route_v3_HeaderMatcher_has_range_match(header)) {
1320
- type = HeaderMatcher::Type::RANGE;
1321
- const envoy_type_v3_Int64Range* range_matcher =
1322
- envoy_config_route_v3_HeaderMatcher_range_match(header);
1323
- range_start = envoy_type_v3_Int64Range_start(range_matcher);
1324
- range_end = envoy_type_v3_Int64Range_end(range_matcher);
1325
- } else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
1326
- type = HeaderMatcher::Type::PRESENT;
1327
- present_match = envoy_config_route_v3_HeaderMatcher_present_match(header);
1328
- } else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
1329
- type = HeaderMatcher::Type::PREFIX;
1330
- match_string = UpbStringToStdString(
1331
- envoy_config_route_v3_HeaderMatcher_prefix_match(header));
1332
- } else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
1333
- type = HeaderMatcher::Type::SUFFIX;
1334
- match_string = UpbStringToStdString(
1335
- envoy_config_route_v3_HeaderMatcher_suffix_match(header));
1336
- } else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
1337
- type = HeaderMatcher::Type::CONTAINS;
1338
- match_string = UpbStringToStdString(
1339
- envoy_config_route_v3_HeaderMatcher_contains_match(header));
1340
- } else {
1341
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1342
- "Invalid route header matcher specified.");
1343
- }
1344
- bool invert_match =
1345
- envoy_config_route_v3_HeaderMatcher_invert_match(header);
1346
- absl::StatusOr<HeaderMatcher> header_matcher =
1347
- HeaderMatcher::Create(name, type, match_string, range_start, range_end,
1348
- present_match, invert_match);
1349
- if (!header_matcher.ok()) {
1350
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1351
- absl::StrCat("header matcher: ", header_matcher.status().message())
1352
- .c_str());
1353
- }
1354
- route->matchers.header_matchers.emplace_back(
1355
- std::move(header_matcher.value()));
1356
- }
1357
- return GRPC_ERROR_NONE;
1358
- }
1359
-
1360
- grpc_error* RouteRuntimeFractionParse(
1361
- const envoy_config_route_v3_RouteMatch* match, XdsApi::Route* route) {
1362
- const envoy_config_core_v3_RuntimeFractionalPercent* runtime_fraction =
1363
- envoy_config_route_v3_RouteMatch_runtime_fraction(match);
1364
- if (runtime_fraction != nullptr) {
1365
- const envoy_type_v3_FractionalPercent* fraction =
1366
- envoy_config_core_v3_RuntimeFractionalPercent_default_value(
1367
- runtime_fraction);
1368
- if (fraction != nullptr) {
1369
- uint32_t numerator = envoy_type_v3_FractionalPercent_numerator(fraction);
1370
- const auto denominator =
1371
- static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
1372
- envoy_type_v3_FractionalPercent_denominator(fraction));
1373
- // Normalize to million.
1374
- switch (denominator) {
1375
- case envoy_type_v3_FractionalPercent_HUNDRED:
1376
- numerator *= 10000;
1377
- break;
1378
- case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
1379
- numerator *= 100;
1380
- break;
1381
- case envoy_type_v3_FractionalPercent_MILLION:
1382
- break;
1383
- default:
1384
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1385
- "Unknown denominator type");
1386
- }
1387
- route->matchers.fraction_per_million = numerator;
1388
- }
1389
- }
1390
- return GRPC_ERROR_NONE;
1391
- }
1392
-
1393
- grpc_error* ExtractHttpFilterTypeName(const EncodingContext& context,
1394
- const google_protobuf_Any* any,
1395
- absl::string_view* filter_type) {
1396
- *filter_type = UpbStringToAbsl(google_protobuf_Any_type_url(any));
1397
- if (*filter_type == "type.googleapis.com/udpa.type.v1.TypedStruct") {
1398
- upb_strview any_value = google_protobuf_Any_value(any);
1399
- const auto* typed_struct = udpa_type_v1_TypedStruct_parse(
1400
- any_value.data, any_value.size, context.arena);
1401
- if (typed_struct == nullptr) {
1402
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1403
- "could not parse TypedStruct from filter config");
1404
- }
1405
- *filter_type =
1406
- UpbStringToAbsl(udpa_type_v1_TypedStruct_type_url(typed_struct));
1407
- }
1408
- *filter_type = absl::StripPrefix(*filter_type, "type.googleapis.com/");
1409
- return GRPC_ERROR_NONE;
1410
- }
1411
-
1412
- template <typename ParentType, typename EntryType>
1413
- grpc_error* ParseTypedPerFilterConfig(
1414
- const EncodingContext& context, const ParentType* parent,
1415
- const EntryType* (*entry_func)(const ParentType*, size_t*),
1416
- upb_strview (*key_func)(const EntryType*),
1417
- const google_protobuf_Any* (*value_func)(const EntryType*),
1418
- XdsApi::TypedPerFilterConfig* typed_per_filter_config) {
1419
- size_t filter_it = UPB_MAP_BEGIN;
1420
- while (true) {
1421
- const auto* filter_entry = entry_func(parent, &filter_it);
1422
- if (filter_entry == nullptr) break;
1423
- absl::string_view key = UpbStringToAbsl(key_func(filter_entry));
1424
- if (key.empty()) {
1425
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("empty filter name in map");
1426
- }
1427
- const google_protobuf_Any* any = value_func(filter_entry);
1428
- GPR_ASSERT(any != nullptr);
1429
- absl::string_view filter_type =
1430
- UpbStringToAbsl(google_protobuf_Any_type_url(any));
1431
- if (filter_type.empty()) {
1432
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1433
- absl::StrCat("no filter config specified for filter name ", key)
1434
- .c_str());
1435
- }
1436
- bool is_optional = false;
1437
- if (filter_type ==
1438
- "type.googleapis.com/envoy.config.route.v3.FilterConfig") {
1439
- upb_strview any_value = google_protobuf_Any_value(any);
1440
- const auto* filter_config = envoy_config_route_v3_FilterConfig_parse(
1441
- any_value.data, any_value.size, context.arena);
1442
- if (filter_config == nullptr) {
1443
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1444
- absl::StrCat("could not parse FilterConfig wrapper for ", key)
1445
- .c_str());
1446
- }
1447
- is_optional =
1448
- envoy_config_route_v3_FilterConfig_is_optional(filter_config);
1449
- any = envoy_config_route_v3_FilterConfig_config(filter_config);
1450
- if (any == nullptr) {
1451
- if (is_optional) continue;
1452
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1453
- absl::StrCat("no filter config specified for filter name ", key)
1454
- .c_str());
1455
- }
1456
- }
1457
- grpc_error* error = ExtractHttpFilterTypeName(context, any, &filter_type);
1458
- if (error != GRPC_ERROR_NONE) return error;
1459
- const XdsHttpFilterImpl* filter_impl =
1460
- XdsHttpFilterRegistry::GetFilterForType(filter_type);
1461
- if (filter_impl == nullptr) {
1462
- if (is_optional) continue;
1463
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1464
- absl::StrCat("no filter registered for config type ", filter_type)
1465
- .c_str());
1466
- }
1467
- absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
1468
- filter_impl->GenerateFilterConfigOverride(
1469
- google_protobuf_Any_value(any), context.arena);
1470
- if (!filter_config.ok()) {
1471
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1472
- absl::StrCat("filter config for type ", filter_type,
1473
- " failed to parse: ", filter_config.status().ToString())
1474
- .c_str());
1475
- }
1476
- (*typed_per_filter_config)[std::string(key)] = std::move(*filter_config);
1477
- }
1478
- return GRPC_ERROR_NONE;
1479
- }
1480
-
1481
- grpc_error* RouteActionParse(const EncodingContext& context,
1482
- const envoy_config_route_v3_Route* route_msg,
1483
- XdsApi::Route* route, bool* ignore_route) {
1484
- if (!envoy_config_route_v3_Route_has_route(route_msg)) {
1485
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1486
- "No RouteAction found in route.");
1487
- }
1488
- const envoy_config_route_v3_RouteAction* route_action =
1489
- envoy_config_route_v3_Route_route(route_msg);
1490
- // Get the cluster or weighted_clusters in the RouteAction.
1491
- if (envoy_config_route_v3_RouteAction_has_cluster(route_action)) {
1492
- route->cluster_name = UpbStringToStdString(
1493
- envoy_config_route_v3_RouteAction_cluster(route_action));
1494
- if (route->cluster_name.empty()) {
1495
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1496
- "RouteAction cluster contains empty cluster name.");
1497
- }
1498
- } else if (envoy_config_route_v3_RouteAction_has_weighted_clusters(
1499
- route_action)) {
1500
- const envoy_config_route_v3_WeightedCluster* weighted_cluster =
1501
- envoy_config_route_v3_RouteAction_weighted_clusters(route_action);
1502
- uint32_t total_weight = 100;
1503
- const google_protobuf_UInt32Value* weight =
1504
- envoy_config_route_v3_WeightedCluster_total_weight(weighted_cluster);
1505
- if (weight != nullptr) {
1506
- total_weight = google_protobuf_UInt32Value_value(weight);
1507
- }
1508
- size_t clusters_size;
1509
- const envoy_config_route_v3_WeightedCluster_ClusterWeight* const* clusters =
1510
- envoy_config_route_v3_WeightedCluster_clusters(weighted_cluster,
1511
- &clusters_size);
1512
- uint32_t sum_of_weights = 0;
1513
- for (size_t j = 0; j < clusters_size; ++j) {
1514
- const envoy_config_route_v3_WeightedCluster_ClusterWeight*
1515
- cluster_weight = clusters[j];
1516
- XdsApi::Route::ClusterWeight cluster;
1517
- cluster.name = UpbStringToStdString(
1518
- envoy_config_route_v3_WeightedCluster_ClusterWeight_name(
1519
- cluster_weight));
1520
- if (cluster.name.empty()) {
1521
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1522
- "RouteAction weighted_cluster cluster contains empty cluster "
1523
- "name.");
1524
- }
1525
- const google_protobuf_UInt32Value* weight =
1526
- envoy_config_route_v3_WeightedCluster_ClusterWeight_weight(
1527
- cluster_weight);
1528
- if (weight == nullptr) {
1529
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1530
- "RouteAction weighted_cluster cluster missing weight");
1531
- }
1532
- cluster.weight = google_protobuf_UInt32Value_value(weight);
1533
- if (cluster.weight == 0) continue;
1534
- sum_of_weights += cluster.weight;
1535
- if (context.use_v3) {
1536
- grpc_error* error = ParseTypedPerFilterConfig<
1537
- envoy_config_route_v3_WeightedCluster_ClusterWeight,
1538
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry>(
1539
- context, cluster_weight,
1540
- envoy_config_route_v3_WeightedCluster_ClusterWeight_typed_per_filter_config_next,
1541
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_key,
1542
- envoy_config_route_v3_WeightedCluster_ClusterWeight_TypedPerFilterConfigEntry_value,
1543
- &cluster.typed_per_filter_config);
1544
- if (error != GRPC_ERROR_NONE) return error;
1545
- }
1546
- route->weighted_clusters.emplace_back(std::move(cluster));
1547
- }
1548
- if (total_weight != sum_of_weights) {
1549
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1550
- "RouteAction weighted_cluster has incorrect total weight");
1551
- }
1552
- if (route->weighted_clusters.empty()) {
1553
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1554
- "RouteAction weighted_cluster has no valid clusters specified.");
1555
- }
1556
- } else {
1557
- // No cluster or weighted_clusters found in RouteAction, ignore this route.
1558
- *ignore_route = true;
1559
- }
1560
- if (!*ignore_route) {
1561
- const envoy_config_route_v3_RouteAction_MaxStreamDuration*
1562
- max_stream_duration =
1563
- envoy_config_route_v3_RouteAction_max_stream_duration(route_action);
1564
- if (max_stream_duration != nullptr) {
1565
- const google_protobuf_Duration* duration =
1566
- envoy_config_route_v3_RouteAction_MaxStreamDuration_grpc_timeout_header_max(
1567
- max_stream_duration);
1568
- if (duration == nullptr) {
1569
- duration =
1570
- envoy_config_route_v3_RouteAction_MaxStreamDuration_max_stream_duration(
1571
- max_stream_duration);
1572
- }
1573
- if (duration != nullptr) {
1574
- XdsApi::Duration duration_in_route;
1575
- duration_in_route.seconds = google_protobuf_Duration_seconds(duration);
1576
- duration_in_route.nanos = google_protobuf_Duration_nanos(duration);
1577
- route->max_stream_duration = duration_in_route;
1578
- }
1579
- }
1580
- }
1581
- // Get HashPolicy from RouteAction
1582
- if (XdsRingHashEnabled()) {
1583
- size_t size = 0;
1584
- const envoy_config_route_v3_RouteAction_HashPolicy* const* hash_policies =
1585
- envoy_config_route_v3_RouteAction_hash_policy(route_action, &size);
1586
- for (size_t i = 0; i < size; ++i) {
1587
- const envoy_config_route_v3_RouteAction_HashPolicy* hash_policy =
1588
- hash_policies[i];
1589
- XdsApi::Route::HashPolicy policy;
1590
- policy.terminal =
1591
- envoy_config_route_v3_RouteAction_HashPolicy_terminal(hash_policy);
1592
- const envoy_config_route_v3_RouteAction_HashPolicy_Header* header;
1593
- const envoy_config_route_v3_RouteAction_HashPolicy_FilterState*
1594
- filter_state;
1595
- if ((header = envoy_config_route_v3_RouteAction_HashPolicy_header(
1596
- hash_policy)) != nullptr) {
1597
- policy.type = XdsApi::Route::HashPolicy::Type::HEADER;
1598
- policy.header_name = UpbStringToStdString(
1599
- envoy_config_route_v3_RouteAction_HashPolicy_Header_header_name(
1600
- header));
1601
- const struct envoy_type_matcher_v3_RegexMatchAndSubstitute*
1602
- regex_rewrite =
1603
- envoy_config_route_v3_RouteAction_HashPolicy_Header_regex_rewrite(
1604
- header);
1605
- if (regex_rewrite == nullptr) {
1606
- gpr_log(
1607
- GPR_DEBUG,
1608
- "RouteAction HashPolicy contains policy specifier Header with "
1609
- "RegexMatchAndSubstitution but Regex is missing");
1610
- continue;
1611
- }
1612
- const envoy_type_matcher_v3_RegexMatcher* regex_matcher =
1613
- envoy_type_matcher_v3_RegexMatchAndSubstitute_pattern(
1614
- regex_rewrite);
1615
- if (regex_matcher == nullptr) {
1616
- gpr_log(
1617
- GPR_DEBUG,
1618
- "RouteAction HashPolicy contains policy specifier Header with "
1619
- "RegexMatchAndSubstitution but RegexMatcher pattern is "
1620
- "missing");
1621
- continue;
1622
- }
1623
- RE2::Options options;
1624
- policy.regex = absl::make_unique<RE2>(
1625
- UpbStringToStdString(
1626
- envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher)),
1627
- options);
1628
- if (!policy.regex->ok()) {
1629
- gpr_log(
1630
- GPR_DEBUG,
1631
- "RouteAction HashPolicy contains policy specifier Header with "
1632
- "RegexMatchAndSubstitution but RegexMatcher pattern does not "
1633
- "compile");
1634
- continue;
1635
- }
1636
- policy.regex_substitution = UpbStringToStdString(
1637
- envoy_type_matcher_v3_RegexMatchAndSubstitute_substitution(
1638
- regex_rewrite));
1639
- } else if ((filter_state =
1640
- envoy_config_route_v3_RouteAction_HashPolicy_filter_state(
1641
- hash_policy)) != nullptr) {
1642
- std::string key = UpbStringToStdString(
1643
- envoy_config_route_v3_RouteAction_HashPolicy_FilterState_key(
1644
- filter_state));
1645
- if (key == "io.grpc.channel_id") {
1646
- policy.type = XdsApi::Route::HashPolicy::Type::CHANNEL_ID;
1647
- } else {
1648
- gpr_log(GPR_DEBUG,
1649
- "RouteAction HashPolicy contains policy specifier "
1650
- "FilterState but "
1651
- "key is not io.grpc.channel_id.");
1652
- continue;
1653
- }
1654
- } else {
1655
- gpr_log(
1656
- GPR_DEBUG,
1657
- "RouteAction HashPolicy contains unsupported policy specifier.");
1658
- continue;
1659
- }
1660
- route->hash_policies.emplace_back(std::move(policy));
1661
- }
1662
- }
1663
- return GRPC_ERROR_NONE;
1664
- }
1665
-
1666
- grpc_error* RouteConfigParse(
1667
- const EncodingContext& context,
1668
- const envoy_config_route_v3_RouteConfiguration* route_config,
1669
- XdsApi::RdsUpdate* rds_update) {
1670
- MaybeLogRouteConfiguration(context, route_config);
1671
- // Get the virtual hosts.
1672
- size_t num_virtual_hosts;
1673
- const envoy_config_route_v3_VirtualHost* const* virtual_hosts =
1674
- envoy_config_route_v3_RouteConfiguration_virtual_hosts(
1675
- route_config, &num_virtual_hosts);
1676
- for (size_t i = 0; i < num_virtual_hosts; ++i) {
1677
- rds_update->virtual_hosts.emplace_back();
1678
- XdsApi::RdsUpdate::VirtualHost& vhost = rds_update->virtual_hosts.back();
1679
- // Parse domains.
1680
- size_t domain_size;
1681
- upb_strview const* domains = envoy_config_route_v3_VirtualHost_domains(
1682
- virtual_hosts[i], &domain_size);
1683
- for (size_t j = 0; j < domain_size; ++j) {
1684
- std::string domain_pattern = UpbStringToStdString(domains[j]);
1685
- const MatchType match_type = DomainPatternMatchType(domain_pattern);
1686
- if (match_type == INVALID_MATCH) {
1687
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1688
- absl::StrCat("Invalid domain pattern \"", domain_pattern, "\".")
1689
- .c_str());
1690
- }
1691
- vhost.domains.emplace_back(std::move(domain_pattern));
1692
- }
1693
- if (vhost.domains.empty()) {
1694
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("VirtualHost has no domains");
1695
- }
1696
- // Parse typed_per_filter_config.
1697
- if (context.use_v3) {
1698
- grpc_error* error = ParseTypedPerFilterConfig<
1699
- envoy_config_route_v3_VirtualHost,
1700
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry>(
1701
- context, virtual_hosts[i],
1702
- envoy_config_route_v3_VirtualHost_typed_per_filter_config_next,
1703
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_key,
1704
- envoy_config_route_v3_VirtualHost_TypedPerFilterConfigEntry_value,
1705
- &vhost.typed_per_filter_config);
1706
- if (error != GRPC_ERROR_NONE) return error;
1707
- }
1708
- // Parse routes.
1709
- size_t num_routes;
1710
- const envoy_config_route_v3_Route* const* routes =
1711
- envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
1712
- if (num_routes < 1) {
1713
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1714
- "No route found in the virtual host.");
1715
- }
1716
- // Loop over the whole list of routes
1717
- for (size_t j = 0; j < num_routes; ++j) {
1718
- const envoy_config_route_v3_RouteMatch* match =
1719
- envoy_config_route_v3_Route_match(routes[j]);
1720
- if (match == nullptr) {
1721
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Match can't be null.");
1722
- }
1723
- size_t query_parameters_size;
1724
- static_cast<void>(envoy_config_route_v3_RouteMatch_query_parameters(
1725
- match, &query_parameters_size));
1726
- if (query_parameters_size > 0) {
1727
- continue;
1728
- }
1729
- XdsApi::Route route;
1730
- bool ignore_route = false;
1731
- grpc_error* error = RoutePathMatchParse(match, &route, &ignore_route);
1732
- if (error != GRPC_ERROR_NONE) return error;
1733
- if (ignore_route) continue;
1734
- error = RouteHeaderMatchersParse(match, &route);
1735
- if (error != GRPC_ERROR_NONE) return error;
1736
- error = RouteRuntimeFractionParse(match, &route);
1737
- if (error != GRPC_ERROR_NONE) return error;
1738
- error = RouteActionParse(context, routes[j], &route, &ignore_route);
1739
- if (error != GRPC_ERROR_NONE) return error;
1740
- if (ignore_route) continue;
1741
- if (context.use_v3) {
1742
- grpc_error* error = ParseTypedPerFilterConfig<
1743
- envoy_config_route_v3_Route,
1744
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry>(
1745
- context, routes[j],
1746
- envoy_config_route_v3_Route_typed_per_filter_config_next,
1747
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_key,
1748
- envoy_config_route_v3_Route_TypedPerFilterConfigEntry_value,
1749
- &route.typed_per_filter_config);
1750
- if (error != GRPC_ERROR_NONE) return error;
1751
- }
1752
- vhost.routes.emplace_back(std::move(route));
1753
- }
1754
- if (vhost.routes.empty()) {
1755
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No valid routes specified.");
1756
- }
1757
- }
1758
- return GRPC_ERROR_NONE;
1759
- }
1760
-
1761
- XdsApi::CommonTlsContext::CertificateProviderInstance
1762
- CertificateProviderInstanceParse(
1763
- const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance*
1764
- certificate_provider_instance_proto) {
1765
- return {
1766
- UpbStringToStdString(
1767
- envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_instance_name(
1768
- certificate_provider_instance_proto)),
1769
- UpbStringToStdString(
1770
- envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CertificateProviderInstance_certificate_name(
1771
- certificate_provider_instance_proto))};
1772
- }
1773
-
1774
- grpc_error* CommonTlsContextParse(
1775
- const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
1776
- common_tls_context_proto,
1777
- XdsApi::CommonTlsContext* common_tls_context) GRPC_MUST_USE_RESULT;
1778
- grpc_error* CommonTlsContextParse(
1779
- const envoy_extensions_transport_sockets_tls_v3_CommonTlsContext*
1780
- common_tls_context_proto,
1781
- XdsApi::CommonTlsContext* common_tls_context) {
1782
- auto* combined_validation_context =
1783
- envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_combined_validation_context(
1784
- common_tls_context_proto);
1785
- if (combined_validation_context != nullptr) {
1786
- auto* default_validation_context =
1787
- envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_default_validation_context(
1788
- combined_validation_context);
1789
- if (default_validation_context != nullptr) {
1790
- size_t len = 0;
1791
- auto* subject_alt_names_matchers =
1792
- envoy_extensions_transport_sockets_tls_v3_CertificateValidationContext_match_subject_alt_names(
1793
- default_validation_context, &len);
1794
- for (size_t i = 0; i < len; ++i) {
1795
- StringMatcher::Type type;
1796
- std::string matcher;
1797
- if (envoy_type_matcher_v3_StringMatcher_has_exact(
1798
- subject_alt_names_matchers[i])) {
1799
- type = StringMatcher::Type::EXACT;
1800
- matcher =
1801
- UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_exact(
1802
- subject_alt_names_matchers[i]));
1803
- } else if (envoy_type_matcher_v3_StringMatcher_has_prefix(
1804
- subject_alt_names_matchers[i])) {
1805
- type = StringMatcher::Type::PREFIX;
1806
- matcher =
1807
- UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_prefix(
1808
- subject_alt_names_matchers[i]));
1809
- } else if (envoy_type_matcher_v3_StringMatcher_has_suffix(
1810
- subject_alt_names_matchers[i])) {
1811
- type = StringMatcher::Type::SUFFIX;
1812
- matcher =
1813
- UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_suffix(
1814
- subject_alt_names_matchers[i]));
1815
- } else if (envoy_type_matcher_v3_StringMatcher_has_contains(
1816
- subject_alt_names_matchers[i])) {
1817
- type = StringMatcher::Type::CONTAINS;
1818
- matcher =
1819
- UpbStringToStdString(envoy_type_matcher_v3_StringMatcher_contains(
1820
- subject_alt_names_matchers[i]));
1821
- } else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(
1822
- subject_alt_names_matchers[i])) {
1823
- type = StringMatcher::Type::SAFE_REGEX;
1824
- auto* regex_matcher = envoy_type_matcher_v3_StringMatcher_safe_regex(
1825
- subject_alt_names_matchers[i]);
1826
- matcher = UpbStringToStdString(
1827
- envoy_type_matcher_v3_RegexMatcher_regex(regex_matcher));
1828
- } else {
1829
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1830
- "Invalid StringMatcher specified");
1831
- }
1832
- bool ignore_case = envoy_type_matcher_v3_StringMatcher_ignore_case(
1833
- subject_alt_names_matchers[i]);
1834
- absl::StatusOr<StringMatcher> string_matcher =
1835
- StringMatcher::Create(type, matcher,
1836
- /*case_sensitive=*/!ignore_case);
1837
- if (!string_matcher.ok()) {
1838
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1839
- absl::StrCat("string matcher: ",
1840
- string_matcher.status().message())
1841
- .c_str());
1842
- }
1843
- if (type == StringMatcher::Type::SAFE_REGEX && ignore_case) {
1844
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1845
- "StringMatcher: ignore_case has no effect for SAFE_REGEX.");
1846
- }
1847
- common_tls_context->combined_validation_context
1848
- .default_validation_context.match_subject_alt_names.push_back(
1849
- std::move(string_matcher.value()));
1850
- }
1851
- }
1852
- auto* validation_context_certificate_provider_instance =
1853
- envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_CombinedCertificateValidationContext_validation_context_certificate_provider_instance(
1854
- combined_validation_context);
1855
- if (validation_context_certificate_provider_instance != nullptr) {
1856
- common_tls_context->combined_validation_context
1857
- .validation_context_certificate_provider_instance =
1858
- CertificateProviderInstanceParse(
1859
- validation_context_certificate_provider_instance);
1860
- }
1861
- }
1862
- auto* tls_certificate_certificate_provider_instance =
1863
- envoy_extensions_transport_sockets_tls_v3_CommonTlsContext_tls_certificate_certificate_provider_instance(
1864
- common_tls_context_proto);
1865
- if (tls_certificate_certificate_provider_instance != nullptr) {
1866
- common_tls_context->tls_certificate_certificate_provider_instance =
1867
- CertificateProviderInstanceParse(
1868
- tls_certificate_certificate_provider_instance);
1869
- }
1870
- return GRPC_ERROR_NONE;
1871
- }
1872
-
1873
- grpc_error* HttpConnectionManagerParse(
1874
- bool is_client, const EncodingContext& context,
1875
- const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
1876
- http_connection_manager_proto,
1877
- bool is_v2,
1878
- XdsApi::LdsUpdate::HttpConnectionManager* http_connection_manager) {
1879
- MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
1880
- // Obtain max_stream_duration from Http Protocol Options.
1881
- const envoy_config_core_v3_HttpProtocolOptions* options =
1882
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_common_http_protocol_options(
1883
- http_connection_manager_proto);
1884
- if (options != nullptr) {
1885
- const google_protobuf_Duration* duration =
1886
- envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
1887
- if (duration != nullptr) {
1888
- http_connection_manager->http_max_stream_duration.seconds =
1889
- google_protobuf_Duration_seconds(duration);
1890
- http_connection_manager->http_max_stream_duration.nanos =
1891
- google_protobuf_Duration_nanos(duration);
1892
- }
1893
- }
1894
- // Parse filters.
1895
- if (!is_v2) {
1896
- size_t num_filters = 0;
1897
- const auto* http_filters =
1898
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_http_filters(
1899
- http_connection_manager_proto, &num_filters);
1900
- std::set<absl::string_view> names_seen;
1901
- for (size_t i = 0; i < num_filters; ++i) {
1902
- const auto* http_filter = http_filters[i];
1903
- absl::string_view name = UpbStringToAbsl(
1904
- envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
1905
- http_filter));
1906
- if (name.empty()) {
1907
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1908
- absl::StrCat("empty filter name at index ", i).c_str());
1909
- }
1910
- if (names_seen.find(name) != names_seen.end()) {
1911
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1912
- absl::StrCat("duplicate HTTP filter name: ", name).c_str());
1913
- }
1914
- names_seen.insert(name);
1915
- const bool is_optional =
1916
- envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_is_optional(
1917
- http_filter);
1918
- const google_protobuf_Any* any =
1919
- envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
1920
- http_filter);
1921
- if (any == nullptr) {
1922
- if (is_optional) continue;
1923
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1924
- absl::StrCat("no filter config specified for filter name ", name)
1925
- .c_str());
1926
- }
1927
- absl::string_view filter_type;
1928
- grpc_error* error = ExtractHttpFilterTypeName(context, any, &filter_type);
1929
- if (error != GRPC_ERROR_NONE) return error;
1930
- const XdsHttpFilterImpl* filter_impl =
1931
- XdsHttpFilterRegistry::GetFilterForType(filter_type);
1932
- if (filter_impl == nullptr) {
1933
- if (is_optional) continue;
1934
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1935
- absl::StrCat("no filter registered for config type ", filter_type)
1936
- .c_str());
1937
- }
1938
- if ((is_client && !filter_impl->IsSupportedOnClients()) ||
1939
- (!is_client && !filter_impl->IsSupportedOnServers())) {
1940
- if (is_optional) continue;
1941
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1942
- absl::StrFormat("Filter %s is not supported on %s", filter_type,
1943
- is_client ? "clients" : "servers")
1944
- .c_str());
1945
- }
1946
- absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
1947
- filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
1948
- context.arena);
1949
- if (!filter_config.ok()) {
1950
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
1951
- absl::StrCat(
1952
- "filter config for type ", filter_type,
1953
- " failed to parse: ", filter_config.status().ToString())
1954
- .c_str());
1955
- }
1956
- http_connection_manager->http_filters.emplace_back(
1957
- XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
1958
- std::string(name), std::move(*filter_config)});
1959
- }
1960
- } else {
1961
- // If using a v2 config, we just hard-code a list containing only the
1962
- // router filter without actually looking at the config. This ensures
1963
- // that the right thing happens in the xds resolver without having
1964
- // to expose whether the resource we received was v2 or v3.
1965
- http_connection_manager->http_filters.emplace_back(
1966
- XdsApi::LdsUpdate::HttpConnectionManager::HttpFilter{
1967
- "router", {kXdsHttpRouterFilterConfigName, Json()}});
1968
- }
1969
- if (is_client) {
1970
- // Found inlined route_config. Parse it to find the cluster_name.
1971
- if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_route_config(
1972
- http_connection_manager_proto)) {
1973
- const envoy_config_route_v3_RouteConfiguration* route_config =
1974
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
1975
- http_connection_manager_proto);
1976
- XdsApi::RdsUpdate rds_update;
1977
- grpc_error* error = RouteConfigParse(context, route_config, &rds_update);
1978
- if (error != GRPC_ERROR_NONE) return error;
1979
- http_connection_manager->rds_update = std::move(rds_update);
1980
- return GRPC_ERROR_NONE;
1981
- }
1982
- // Validate that RDS must be used to get the route_config dynamically.
1983
- const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
1984
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
1985
- http_connection_manager_proto);
1986
- if (rds == nullptr) {
1987
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1988
- "HttpConnectionManager neither has inlined route_config nor RDS.");
1989
- }
1990
- // Check that the ConfigSource specifies ADS.
1991
- const envoy_config_core_v3_ConfigSource* config_source =
1992
- envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
1993
- rds);
1994
- if (config_source == nullptr) {
1995
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1996
- "HttpConnectionManager missing config_source for RDS.");
1997
- }
1998
- if (!envoy_config_core_v3_ConfigSource_has_ads(config_source)) {
1999
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2000
- "HttpConnectionManager ConfigSource for RDS does not specify ADS.");
2001
- }
2002
- // Get the route_config_name.
2003
- http_connection_manager->route_config_name = UpbStringToStdString(
2004
- envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
2005
- rds));
2006
- }
2007
- return GRPC_ERROR_NONE;
2008
- }
2009
-
2010
- grpc_error* LdsResponseParseClient(
2011
- const EncodingContext& context,
2012
- const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2,
2013
- XdsApi::LdsUpdate* lds_update) {
2014
- lds_update->type = XdsApi::LdsUpdate::ListenerType::kHttpApiListener;
2015
- const upb_strview encoded_api_listener = google_protobuf_Any_value(
2016
- envoy_config_listener_v3_ApiListener_api_listener(api_listener));
2017
- const auto* http_connection_manager =
2018
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
2019
- encoded_api_listener.data, encoded_api_listener.size, context.arena);
2020
- if (http_connection_manager == nullptr) {
2021
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2022
- "Could not parse HttpConnectionManager config from ApiListener");
2023
- }
2024
- return HttpConnectionManagerParse(true /* is_client */, context,
2025
- http_connection_manager, is_v2,
2026
- &lds_update->http_connection_manager);
2027
- }
2028
-
2029
- grpc_error* DownstreamTlsContextParse(
2030
- const EncodingContext& context,
2031
- const envoy_config_core_v3_TransportSocket* transport_socket,
2032
- XdsApi::DownstreamTlsContext* downstream_tls_context) {
2033
- absl::string_view name = UpbStringToAbsl(
2034
- envoy_config_core_v3_TransportSocket_name(transport_socket));
2035
- if (name == "envoy.transport_sockets.tls") {
2036
- auto* typed_config =
2037
- envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
2038
- if (typed_config != nullptr) {
2039
- const upb_strview encoded_downstream_tls_context =
2040
- google_protobuf_Any_value(typed_config);
2041
- auto* downstream_tls_context_proto =
2042
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
2043
- encoded_downstream_tls_context.data,
2044
- encoded_downstream_tls_context.size, context.arena);
2045
- if (downstream_tls_context_proto == nullptr) {
2046
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2047
- "Can't decode downstream tls context.");
2048
- }
2049
- auto* common_tls_context =
2050
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
2051
- downstream_tls_context_proto);
2052
- if (common_tls_context != nullptr) {
2053
- grpc_error* error = CommonTlsContextParse(
2054
- common_tls_context, &downstream_tls_context->common_tls_context);
2055
- if (error != GRPC_ERROR_NONE) return error;
2056
- }
2057
- auto* require_client_certificate =
2058
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
2059
- downstream_tls_context_proto);
2060
- if (require_client_certificate != nullptr) {
2061
- downstream_tls_context->require_client_certificate =
2062
- google_protobuf_BoolValue_value(require_client_certificate);
2063
- }
2064
- }
2065
- if (downstream_tls_context->common_tls_context
2066
- .tls_certificate_certificate_provider_instance.instance_name
2067
- .empty()) {
2068
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2069
- "TLS configuration provided but no "
2070
- "tls_certificate_certificate_provider_instance found.");
2071
- }
2072
- }
2073
- return GRPC_ERROR_NONE;
2074
- }
2075
-
2076
- grpc_error* CidrRangeParse(
2077
- const envoy_config_core_v3_CidrRange* cidr_range_proto,
2078
- XdsApi::LdsUpdate::FilterChainMap::CidrRange* cidr_range) {
2079
- std::string address_prefix = UpbStringToStdString(
2080
- envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
2081
- grpc_error* error = grpc_string_to_sockaddr_new(&cidr_range->address,
2082
- address_prefix.c_str(), 0);
2083
- if (error != GRPC_ERROR_NONE) return error;
2084
- cidr_range->prefix_len = 0;
2085
- auto* prefix_len_proto =
2086
- envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
2087
- if (prefix_len_proto != nullptr) {
2088
- cidr_range->prefix_len = std::min(
2089
- google_protobuf_UInt32Value_value(prefix_len_proto),
2090
- (reinterpret_cast<const grpc_sockaddr*>(cidr_range->address.addr))
2091
- ->sa_family == GRPC_AF_INET
2092
- ? uint32_t(32)
2093
- : uint32_t(128));
2094
- }
2095
- // Normalize the network address by masking it with prefix_len
2096
- grpc_sockaddr_mask_bits(&cidr_range->address, cidr_range->prefix_len);
2097
- return GRPC_ERROR_NONE;
2098
- }
2099
-
2100
- grpc_error* FilterChainMatchParse(
2101
- const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
2102
- FilterChain::FilterChainMatch* filter_chain_match) {
2103
- auto* destination_port =
2104
- envoy_config_listener_v3_FilterChainMatch_destination_port(
2105
- filter_chain_match_proto);
2106
- if (destination_port != nullptr) {
2107
- filter_chain_match->destination_port =
2108
- google_protobuf_UInt32Value_value(destination_port);
2109
- }
2110
- size_t size = 0;
2111
- auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
2112
- filter_chain_match_proto, &size);
2113
- filter_chain_match->prefix_ranges.reserve(size);
2114
- for (size_t i = 0; i < size; i++) {
2115
- XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
2116
- grpc_error* error = CidrRangeParse(prefix_ranges[i], &cidr_range);
2117
- if (error != GRPC_ERROR_NONE) return error;
2118
- filter_chain_match->prefix_ranges.push_back(cidr_range);
2119
- }
2120
- filter_chain_match->source_type =
2121
- static_cast<XdsApi::LdsUpdate::FilterChainMap::ConnectionSourceType>(
2122
- envoy_config_listener_v3_FilterChainMatch_source_type(
2123
- filter_chain_match_proto));
2124
- auto* source_prefix_ranges =
2125
- envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
2126
- filter_chain_match_proto, &size);
2127
- filter_chain_match->source_prefix_ranges.reserve(size);
2128
- for (size_t i = 0; i < size; i++) {
2129
- XdsApi::LdsUpdate::FilterChainMap::CidrRange cidr_range;
2130
- grpc_error* error = CidrRangeParse(source_prefix_ranges[i], &cidr_range);
2131
- if (error != GRPC_ERROR_NONE) return error;
2132
- filter_chain_match->source_prefix_ranges.push_back(cidr_range);
2133
- }
2134
- auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
2135
- filter_chain_match_proto, &size);
2136
- filter_chain_match->source_ports.reserve(size);
2137
- for (size_t i = 0; i < size; i++) {
2138
- filter_chain_match->source_ports.push_back(source_ports[i]);
2139
- }
2140
- auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
2141
- filter_chain_match_proto, &size);
2142
- for (size_t i = 0; i < size; i++) {
2143
- filter_chain_match->server_names.push_back(
2144
- UpbStringToStdString(server_names[i]));
2145
- }
2146
- filter_chain_match->transport_protocol = UpbStringToStdString(
2147
- envoy_config_listener_v3_FilterChainMatch_transport_protocol(
2148
- filter_chain_match_proto));
2149
- auto* application_protocols =
2150
- envoy_config_listener_v3_FilterChainMatch_application_protocols(
2151
- filter_chain_match_proto, &size);
2152
- for (size_t i = 0; i < size; i++) {
2153
- filter_chain_match->application_protocols.push_back(
2154
- UpbStringToStdString(application_protocols[i]));
2155
- }
2156
- return GRPC_ERROR_NONE;
2157
- }
2158
-
2159
- grpc_error* FilterChainParse(
2160
- const EncodingContext& context,
2161
- const envoy_config_listener_v3_FilterChain* filter_chain_proto, bool is_v2,
2162
- FilterChain* filter_chain) {
2163
- grpc_error* error = GRPC_ERROR_NONE;
2164
- auto* filter_chain_match =
2165
- envoy_config_listener_v3_FilterChain_filter_chain_match(
2166
- filter_chain_proto);
2167
- if (filter_chain_match != nullptr) {
2168
- error = FilterChainMatchParse(filter_chain_match,
2169
- &filter_chain->filter_chain_match);
2170
- if (error != GRPC_ERROR_NONE) return error;
2171
- }
2172
- // Parse the filters list. Currently we only support HttpConnectionManager.
2173
- size_t size = 0;
2174
- auto* filters =
2175
- envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
2176
- if (size != 1) {
2177
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2178
- "FilterChain should have exactly one filter: HttpConnectionManager; no "
2179
- "other filter is supported at the moment");
2180
- }
2181
- auto* typed_config = envoy_config_listener_v3_Filter_typed_config(filters[0]);
2182
- if (typed_config == nullptr) {
2183
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2184
- "No typed_config found in filter.");
2185
- }
2186
- absl::string_view type_url =
2187
- UpbStringToAbsl(google_protobuf_Any_type_url(typed_config));
2188
- if (type_url !=
2189
- "type.googleapis.com/"
2190
- "envoy.extensions.filters.network.http_connection_manager.v3."
2191
- "HttpConnectionManager") {
2192
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2193
- absl::StrCat("Unsupported filter type ", type_url).c_str());
2194
- }
2195
- const upb_strview encoded_http_connection_manager =
2196
- google_protobuf_Any_value(typed_config);
2197
- const auto* http_connection_manager =
2198
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
2199
- encoded_http_connection_manager.data,
2200
- encoded_http_connection_manager.size, context.arena);
2201
- if (http_connection_manager == nullptr) {
2202
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2203
- "Could not parse HttpConnectionManager config from filter "
2204
- "typed_config");
2205
- }
2206
- filter_chain->filter_chain_data =
2207
- std::make_shared<XdsApi::LdsUpdate::FilterChainData>();
2208
- error = HttpConnectionManagerParse(
2209
- false /* is_client */, context, http_connection_manager, is_v2,
2210
- &filter_chain->filter_chain_data->http_connection_manager);
2211
- if (error != GRPC_ERROR_NONE) return error;
2212
- // Get the DownstreamTlsContext for the filter chain
2213
- if (XdsSecurityEnabled()) {
2214
- auto* transport_socket =
2215
- envoy_config_listener_v3_FilterChain_transport_socket(
2216
- filter_chain_proto);
2217
- if (transport_socket != nullptr) {
2218
- error = DownstreamTlsContextParse(
2219
- context, transport_socket,
2220
- &filter_chain->filter_chain_data->downstream_tls_context);
2221
- }
2222
- }
2223
- return error;
2224
- }
2225
-
2226
- grpc_error* AddressParse(const envoy_config_core_v3_Address* address_proto,
2227
- std::string* address) {
2228
- const auto* socket_address =
2229
- envoy_config_core_v3_Address_socket_address(address_proto);
2230
- if (socket_address == nullptr) {
2231
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2232
- "Address does not have socket_address");
2233
- }
2234
- if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
2235
- envoy_config_core_v3_SocketAddress_TCP) {
2236
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2237
- "SocketAddress protocol is not TCP");
2238
- }
2239
- uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
2240
- if (port > 65535) {
2241
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port");
2242
- }
2243
- *address = JoinHostPort(
2244
- UpbStringToAbsl(
2245
- envoy_config_core_v3_SocketAddress_address(socket_address)),
2246
- port);
2247
- return GRPC_ERROR_NONE;
2248
- }
2249
-
2250
- // An intermediate map for filter chains that we create to validate the list of
2251
- // filter chains received from the control plane and to finally create
2252
- // XdsApi::LdsUpdate::FilterChainMap
2253
- struct InternalFilterChainMap {
2254
- using SourceIpMap =
2255
- std::map<std::string, XdsApi::LdsUpdate::FilterChainMap::SourceIp>;
2256
- using ConnectionSourceTypesArray = std::array<SourceIpMap, 3>;
2257
- struct DestinationIp {
2258
- absl::optional<XdsApi::LdsUpdate::FilterChainMap::CidrRange> prefix_range;
2259
- bool transport_protocol_raw_buffer_provided = false;
2260
- ConnectionSourceTypesArray source_types_array;
2261
- };
2262
- using DestinationIpMap = std::map<std::string, DestinationIp>;
2263
- DestinationIpMap destination_ip_map;
2264
- };
2265
-
2266
- grpc_error* AddFilterChainDataForSourcePort(
2267
- const FilterChain& filter_chain,
2268
- XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map,
2269
- uint32_t port) {
2270
- auto insert_result = ports_map->emplace(
2271
- port, XdsApi::LdsUpdate::FilterChainMap::FilterChainDataSharedPtr{
2272
- filter_chain.filter_chain_data});
2273
- if (!insert_result.second) {
2274
- return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2275
- absl::StrCat(
2276
- "Duplicate matching rules detected when adding filter chain: ",
2277
- filter_chain.filter_chain_match.ToString())
2278
- .c_str());
2279
- }
2280
- return GRPC_ERROR_NONE;
2281
- }
2282
-
2283
- grpc_error* AddFilterChainDataForSourcePorts(
2284
- const FilterChain& filter_chain,
2285
- XdsApi::LdsUpdate::FilterChainMap::SourcePortsMap* ports_map) {
2286
- if (filter_chain.filter_chain_match.source_ports.empty()) {
2287
- return AddFilterChainDataForSourcePort(filter_chain, ports_map, 0);
2288
- } else {
2289
- for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
2290
- grpc_error* error =
2291
- AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
2292
- if (error != GRPC_ERROR_NONE) return error;
2293
- }
2294
- }
2295
- return GRPC_ERROR_NONE;
2296
- }
2297
-
2298
- grpc_error* AddFilterChainDataForSourceIpRange(
2299
- const FilterChain& filter_chain,
2300
- InternalFilterChainMap::SourceIpMap* source_ip_map) {
2301
- if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
2302
- auto insert_result = source_ip_map->emplace(
2303
- "", XdsApi::LdsUpdate::FilterChainMap::SourceIp());
2304
- return AddFilterChainDataForSourcePorts(
2305
- filter_chain, &insert_result.first->second.ports_map);
2306
- } else {
2307
- for (const auto& prefix_range :
2308
- filter_chain.filter_chain_match.source_prefix_ranges) {
2309
- auto insert_result = source_ip_map->emplace(
2310
- absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
2311
- "/", prefix_range.prefix_len),
2312
- XdsApi::LdsUpdate::FilterChainMap::SourceIp());
2313
- if (insert_result.second) {
2314
- insert_result.first->second.prefix_range.emplace(prefix_range);
2315
- }
2316
- grpc_error* error = AddFilterChainDataForSourcePorts(
2317
- filter_chain, &insert_result.first->second.ports_map);
2318
- if (error != GRPC_ERROR_NONE) return error;
2319
- }
2320
- }
2321
- return GRPC_ERROR_NONE;
2322
- }
2323
-
2324
- grpc_error* AddFilterChainDataForSourceType(
2325
- const FilterChain& filter_chain,
2326
- InternalFilterChainMap::DestinationIp* destination_ip) {
2327
- GPR_ASSERT(static_cast<unsigned int>(
2328
- filter_chain.filter_chain_match.source_type) < 3);
2329
- return AddFilterChainDataForSourceIpRange(
2330
- filter_chain, &destination_ip->source_types_array[static_cast<int>(
2331
- filter_chain.filter_chain_match.source_type)]);
2332
- }
2333
-
2334
- grpc_error* AddFilterChainDataForApplicationProtocols(
2335
- const FilterChain& filter_chain,
2336
- InternalFilterChainMap::DestinationIp* destination_ip) {
2337
- // Only allow filter chains that do not mention application protocols
2338
- if (!filter_chain.filter_chain_match.application_protocols.empty()) {
2339
- return GRPC_ERROR_NONE;
2340
- }
2341
- return AddFilterChainDataForSourceType(filter_chain, destination_ip);
2342
- }
2343
-
2344
- grpc_error* AddFilterChainDataForTransportProtocol(
2345
- const FilterChain& filter_chain,
2346
- InternalFilterChainMap::DestinationIp* destination_ip) {
2347
- const std::string& transport_protocol =
2348
- filter_chain.filter_chain_match.transport_protocol;
2349
- // Only allow filter chains with no transport protocol or "raw_buffer"
2350
- if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
2351
- return GRPC_ERROR_NONE;
2352
- }
2353
- // If for this configuration, we've already seen filter chains that mention
2354
- // the transport protocol as "raw_buffer", we will never match filter chains
2355
- // that do not mention it.
2356
- if (destination_ip->transport_protocol_raw_buffer_provided &&
2357
- transport_protocol.empty()) {
2358
- return GRPC_ERROR_NONE;
2359
- }
2360
- if (!transport_protocol.empty() &&
2361
- !destination_ip->transport_protocol_raw_buffer_provided) {
2362
- destination_ip->transport_protocol_raw_buffer_provided = true;
2363
- // Clear out the previous entries if any since those entries did not mention
2364
- // "raw_buffer"
2365
- destination_ip->source_types_array =
2366
- InternalFilterChainMap::ConnectionSourceTypesArray();
2367
- }
2368
- return AddFilterChainDataForApplicationProtocols(filter_chain,
2369
- destination_ip);
2370
- }
2371
-
2372
- grpc_error* AddFilterChainDataForServerNames(
2373
- const FilterChain& filter_chain,
2374
- InternalFilterChainMap::DestinationIp* destination_ip) {
2375
- // Don't continue adding filter chains with server names mentioned
2376
- if (!filter_chain.filter_chain_match.server_names.empty()) {
2377
- return GRPC_ERROR_NONE;
2378
- }
2379
- return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
2380
- }
2381
-
2382
- grpc_error* AddFilterChainDataForDestinationIpRange(
2383
- const FilterChain& filter_chain,
2384
- InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
2385
- if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
2386
- auto insert_result = destination_ip_map->emplace(
2387
- "", InternalFilterChainMap::DestinationIp());
2388
- return AddFilterChainDataForServerNames(filter_chain,
2389
- &insert_result.first->second);
2390
- } else {
2391
- for (const auto& prefix_range :
2392
- filter_chain.filter_chain_match.prefix_ranges) {
2393
- auto insert_result = destination_ip_map->emplace(
2394
- absl::StrCat(grpc_sockaddr_to_string(&prefix_range.address, false),
2395
- "/", prefix_range.prefix_len),
2396
- InternalFilterChainMap::DestinationIp());
2397
- if (insert_result.second) {
2398
- insert_result.first->second.prefix_range.emplace(prefix_range);
2399
- }
2400
- grpc_error* error = AddFilterChainDataForServerNames(
2401
- filter_chain, &insert_result.first->second);
2402
- if (error != GRPC_ERROR_NONE) return error;
2403
- }
2404
- }
2405
- return GRPC_ERROR_NONE;
2406
- }
2407
-
2408
- XdsApi::LdsUpdate::FilterChainMap BuildFromInternalFilterChainMap(
2409
- InternalFilterChainMap* internal_filter_chain_map) {
2410
- XdsApi::LdsUpdate::FilterChainMap filter_chain_map;
2411
- for (auto& destination_ip_pair :
2412
- internal_filter_chain_map->destination_ip_map) {
2413
- XdsApi::LdsUpdate::FilterChainMap::DestinationIp destination_ip;
2414
- destination_ip.prefix_range = destination_ip_pair.second.prefix_range;
2415
- for (int i = 0; i < 3; i++) {
2416
- auto& source_ip_map = destination_ip_pair.second.source_types_array[i];
2417
- for (auto& source_ip_pair : source_ip_map) {
2418
- destination_ip.source_types_array[i].push_back(
2419
- std::move(source_ip_pair.second));
2420
- }
2421
- }
2422
- filter_chain_map.destination_ip_vector.push_back(std::move(destination_ip));
2423
- }
2424
- return filter_chain_map;
2425
- }
2426
-
2427
- grpc_error* BuildFilterChainMap(
2428
- const std::vector<FilterChain>& filter_chains,
2429
- XdsApi::LdsUpdate::FilterChainMap* filter_chain_map) {
2430
- InternalFilterChainMap internal_filter_chain_map;
2431
- for (const auto& filter_chain : filter_chains) {
2432
- // Discard filter chain entries that specify destination port
2433
- if (filter_chain.filter_chain_match.destination_port != 0) continue;
2434
- grpc_error* error = AddFilterChainDataForDestinationIpRange(
2435
- filter_chain, &internal_filter_chain_map.destination_ip_map);
2436
- if (error != GRPC_ERROR_NONE) return error;
2437
- }
2438
- *filter_chain_map =
2439
- BuildFromInternalFilterChainMap(&internal_filter_chain_map);
2440
- return GRPC_ERROR_NONE;
2441
- }
2442
-
2443
- grpc_error* LdsResponseParseServer(
2444
- const EncodingContext& context,
2445
- const envoy_config_listener_v3_Listener* listener, bool is_v2,
2446
- XdsApi::LdsUpdate* lds_update) {
2447
- lds_update->type = XdsApi::LdsUpdate::ListenerType::kTcpListener;
2448
- grpc_error* error =
2449
- AddressParse(envoy_config_listener_v3_Listener_address(listener),
2450
- &lds_update->address);
2451
- if (error != GRPC_ERROR_NONE) return error;
2452
- const auto* use_original_dst =
2453
- envoy_config_listener_v3_Listener_use_original_dst(listener);
2454
- if (use_original_dst != nullptr) {
2455
- if (google_protobuf_BoolValue_value(use_original_dst)) {
2456
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
2457
- "Field \'use_original_dst\' is not supported.");
2458
- }
2459
- }
2460
- size_t size = 0;
2461
- auto* filter_chains =
2462
- envoy_config_listener_v3_Listener_filter_chains(listener, &size);
2463
- std::vector<FilterChain> parsed_filter_chains;
2464
- parsed_filter_chains.reserve(size);
2465
- for (size_t i = 0; i < size; i++) {
2466
- FilterChain filter_chain;
2467
- error = FilterChainParse(context, filter_chains[i], is_v2, &filter_chain);
2468
- if (error != GRPC_ERROR_NONE) return error;
2469
- parsed_filter_chains.push_back(std::move(filter_chain));
2470
- }
2471
- error =
2472
- BuildFilterChainMap(parsed_filter_chains, &lds_update->filter_chain_map);
2473
- if (error != GRPC_ERROR_NONE) return error;
2474
- auto* default_filter_chain =
2475
- envoy_config_listener_v3_Listener_default_filter_chain(listener);
2476
- if (default_filter_chain != nullptr) {
2477
- FilterChain filter_chain;
2478
- error =
2479
- FilterChainParse(context, default_filter_chain, is_v2, &filter_chain);
2480
- if (error != GRPC_ERROR_NONE) return error;
2481
- if (filter_chain.filter_chain_data != nullptr) {
2482
- lds_update->default_filter_chain =
2483
- std::move(*filter_chain.filter_chain_data);
2484
- }
2485
- }
2486
- if (size == 0 && default_filter_chain == nullptr) {
2487
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No filter chain provided.");
2488
- }
2489
- return GRPC_ERROR_NONE;
2490
- }
2491
-
2492
- grpc_error* LdsResponseParse(
2493
- const EncodingContext& context,
2494
- const envoy_service_discovery_v3_DiscoveryResponse* response,
2495
- const std::set<absl::string_view>& expected_listener_names,
2496
- XdsApi::LdsUpdateMap* lds_update_map,
2497
- std::set<std::string>* resource_names_failed) {
2498
- std::vector<grpc_error*> errors;
2499
- // Get the resources from the response.
2500
- size_t size;
2501
- const google_protobuf_Any* const* resources =
2502
- envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
2503
- for (size_t i = 0; i < size; ++i) {
2504
- // Check the type_url of the resource.
2505
- absl::string_view type_url =
2506
- UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
2507
- bool is_v2 = false;
2508
- if (!IsLds(type_url, &is_v2)) {
2509
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2510
- absl::StrCat("resource index ", i, ": Resource is not LDS.")
2511
- .c_str()));
2512
- continue;
2513
- }
2514
- // Decode the listener.
2515
- const upb_strview encoded_listener =
2516
- google_protobuf_Any_value(resources[i]);
2517
- const envoy_config_listener_v3_Listener* listener =
2518
- envoy_config_listener_v3_Listener_parse(
2519
- encoded_listener.data, encoded_listener.size, context.arena);
2520
- if (listener == nullptr) {
2521
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2522
- absl::StrCat("resource index ", i, ": Can't decode listener.")
2523
- .c_str()));
2524
- continue;
2525
- }
2526
- // Check listener name. Ignore unexpected listeners.
2527
- std::string listener_name =
2528
- UpbStringToStdString(envoy_config_listener_v3_Listener_name(listener));
2529
- if (expected_listener_names.find(listener_name) ==
2530
- expected_listener_names.end()) {
2531
- continue;
2532
- }
2533
- // Fail if listener name is duplicated.
2534
- if (lds_update_map->find(listener_name) != lds_update_map->end()) {
2535
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2536
- absl::StrCat("duplicate listener name \"", listener_name, "\"")
2537
- .c_str()));
2538
- resource_names_failed->insert(listener_name);
2539
- continue;
2540
- }
2541
- // Serialize into JSON and store it in the LdsUpdateMap
2542
- XdsApi::LdsResourceData& lds_resource_data =
2543
- (*lds_update_map)[listener_name];
2544
- XdsApi::LdsUpdate& lds_update = lds_resource_data.resource;
2545
- lds_resource_data.serialized_proto = UpbStringToStdString(encoded_listener);
2546
- // Check whether it's a client or server listener.
2547
- const envoy_config_listener_v3_ApiListener* api_listener =
2548
- envoy_config_listener_v3_Listener_api_listener(listener);
2549
- const envoy_config_core_v3_Address* address =
2550
- envoy_config_listener_v3_Listener_address(listener);
2551
- if (api_listener != nullptr && address != nullptr) {
2552
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2553
- absl::StrCat(listener_name,
2554
- ": Listener has both address and ApiListener")
2555
- .c_str()));
2556
- resource_names_failed->insert(listener_name);
2557
- continue;
2558
- }
2559
- if (api_listener == nullptr && address == nullptr) {
2560
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2561
- absl::StrCat(listener_name,
2562
- ": Listener has neither address nor ApiListener")
2563
- .c_str()));
2564
- resource_names_failed->insert(listener_name);
2565
- continue;
2566
- }
2567
- grpc_error* error = GRPC_ERROR_NONE;
2568
- if (api_listener != nullptr) {
2569
- error = LdsResponseParseClient(context, api_listener, is_v2, &lds_update);
2570
- } else {
2571
- error = LdsResponseParseServer(context, listener, is_v2, &lds_update);
2572
- }
2573
- if (error != GRPC_ERROR_NONE) {
2574
- errors.push_back(grpc_error_add_child(
2575
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2576
- absl::StrCat(listener_name, ": validation error").c_str()),
2577
- error));
2578
- resource_names_failed->insert(listener_name);
2579
- }
2580
- }
2581
- return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing LDS response", &errors);
2582
- }
2583
-
2584
- grpc_error* RdsResponseParse(
2585
- const EncodingContext& context,
2586
- const envoy_service_discovery_v3_DiscoveryResponse* response,
2587
- const std::set<absl::string_view>& expected_route_configuration_names,
2588
- XdsApi::RdsUpdateMap* rds_update_map,
2589
- std::set<std::string>* resource_names_failed) {
2590
- std::vector<grpc_error*> errors;
2591
- // Get the resources from the response.
2592
- size_t size;
2593
- const google_protobuf_Any* const* resources =
2594
- envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
2595
- for (size_t i = 0; i < size; ++i) {
2596
- // Check the type_url of the resource.
2597
- absl::string_view type_url =
2598
- UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
2599
- if (!IsRds(type_url)) {
2600
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2601
- absl::StrCat("resource index ", i, ": Resource is not RDS.")
2602
- .c_str()));
2603
- continue;
2604
- }
2605
- // Decode the route_config.
2606
- const upb_strview encoded_route_config =
2607
- google_protobuf_Any_value(resources[i]);
2608
- const envoy_config_route_v3_RouteConfiguration* route_config =
2609
- envoy_config_route_v3_RouteConfiguration_parse(
2610
- encoded_route_config.data, encoded_route_config.size,
2611
- context.arena);
2612
- if (route_config == nullptr) {
2613
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2614
- absl::StrCat("resource index ", i, ": Can't decode route_config.")
2615
- .c_str()));
2616
- continue;
2617
- }
2618
- // Check route_config_name. Ignore unexpected route_config.
2619
- std::string route_config_name = UpbStringToStdString(
2620
- envoy_config_route_v3_RouteConfiguration_name(route_config));
2621
- if (expected_route_configuration_names.find(route_config_name) ==
2622
- expected_route_configuration_names.end()) {
2623
- continue;
2624
- }
2625
- // Fail if route config name is duplicated.
2626
- if (rds_update_map->find(route_config_name) != rds_update_map->end()) {
2627
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2628
- absl::StrCat("duplicate route config name \"", route_config_name,
2629
- "\"")
2630
- .c_str()));
2631
- resource_names_failed->insert(route_config_name);
2632
- continue;
2633
- }
2634
- // Serialize into JSON and store it in the RdsUpdateMap
2635
- XdsApi::RdsResourceData& rds_resource_data =
2636
- (*rds_update_map)[route_config_name];
2637
- XdsApi::RdsUpdate& rds_update = rds_resource_data.resource;
2638
- rds_resource_data.serialized_proto =
2639
- UpbStringToStdString(encoded_route_config);
2640
- // Parse the route_config.
2641
- grpc_error* error = RouteConfigParse(context, route_config, &rds_update);
2642
- if (error != GRPC_ERROR_NONE) {
2643
- errors.push_back(grpc_error_add_child(
2644
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2645
- absl::StrCat(route_config_name, ": validation error").c_str()),
2646
- error));
2647
- resource_names_failed->insert(route_config_name);
2648
- }
2649
- }
2650
- return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing RDS response", &errors);
2651
- }
2652
-
2653
- grpc_error* CdsResponseParse(
2654
- const EncodingContext& context,
2655
- const envoy_service_discovery_v3_DiscoveryResponse* response,
2656
- const std::set<absl::string_view>& expected_cluster_names,
2657
- XdsApi::CdsUpdateMap* cds_update_map,
2658
- std::set<std::string>* resource_names_failed) {
2659
- std::vector<grpc_error*> errors;
2660
- // Get the resources from the response.
2661
- size_t size;
2662
- const google_protobuf_Any* const* resources =
2663
- envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
2664
- // Parse all the resources in the CDS response.
2665
- for (size_t i = 0; i < size; ++i) {
2666
- // Check the type_url of the resource.
2667
- absl::string_view type_url =
2668
- UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
2669
- if (!IsCds(type_url)) {
2670
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2671
- absl::StrCat("resource index ", i, ": Resource is not CDS.")
2672
- .c_str()));
2673
- continue;
2674
- }
2675
- // Decode the cluster.
2676
- const upb_strview encoded_cluster = google_protobuf_Any_value(resources[i]);
2677
- const envoy_config_cluster_v3_Cluster* cluster =
2678
- envoy_config_cluster_v3_Cluster_parse(
2679
- encoded_cluster.data, encoded_cluster.size, context.arena);
2680
- if (cluster == nullptr) {
2681
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2682
- absl::StrCat("resource index ", i, ": Can't decode cluster.")
2683
- .c_str()));
2684
- continue;
2685
- }
2686
- MaybeLogCluster(context, cluster);
2687
- // Ignore unexpected cluster names.
2688
- std::string cluster_name =
2689
- UpbStringToStdString(envoy_config_cluster_v3_Cluster_name(cluster));
2690
- if (expected_cluster_names.find(cluster_name) ==
2691
- expected_cluster_names.end()) {
2692
- continue;
2693
- }
2694
- // Fail on duplicate resources.
2695
- if (cds_update_map->find(cluster_name) != cds_update_map->end()) {
2696
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2697
- absl::StrCat("duplicate resource name \"", cluster_name, "\"")
2698
- .c_str()));
2699
- resource_names_failed->insert(cluster_name);
2700
- continue;
2701
- }
2702
- // Serialize into JSON and store it in the CdsUpdateMap
2703
- XdsApi::CdsResourceData& cds_resource_data =
2704
- (*cds_update_map)[cluster_name];
2705
- XdsApi::CdsUpdate& cds_update = cds_resource_data.resource;
2706
- cds_resource_data.serialized_proto = UpbStringToStdString(encoded_cluster);
2707
- // Check the cluster_discovery_type.
2708
- if (!envoy_config_cluster_v3_Cluster_has_type(cluster) &&
2709
- !envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
2710
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2711
- absl::StrCat(cluster_name, ": DiscoveryType not found.").c_str()));
2712
- resource_names_failed->insert(cluster_name);
2713
- continue;
2714
- }
2715
- if (envoy_config_cluster_v3_Cluster_type(cluster) ==
2716
- envoy_config_cluster_v3_Cluster_EDS) {
2717
- cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::EDS;
2718
- // Check the EDS config source.
2719
- const envoy_config_cluster_v3_Cluster_EdsClusterConfig*
2720
- eds_cluster_config =
2721
- envoy_config_cluster_v3_Cluster_eds_cluster_config(cluster);
2722
- const envoy_config_core_v3_ConfigSource* eds_config =
2723
- envoy_config_cluster_v3_Cluster_EdsClusterConfig_eds_config(
2724
- eds_cluster_config);
2725
- if (!envoy_config_core_v3_ConfigSource_has_ads(eds_config)) {
2726
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2727
- absl::StrCat(cluster_name, ": EDS ConfigSource is not ADS.")
2728
- .c_str()));
2729
- resource_names_failed->insert(cluster_name);
2730
- continue;
2731
- }
2732
- // Record EDS service_name (if any).
2733
- upb_strview service_name =
2734
- envoy_config_cluster_v3_Cluster_EdsClusterConfig_service_name(
2735
- eds_cluster_config);
2736
- if (service_name.size != 0) {
2737
- cds_update.eds_service_name = UpbStringToStdString(service_name);
2738
- }
2739
- } else if (!XdsAggregateAndLogicalDnsClusterEnabled()) {
2740
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2741
- absl::StrCat(cluster_name, ": DiscoveryType is not valid.").c_str()));
2742
- resource_names_failed->insert(cluster_name);
2743
- continue;
2744
- } else if (envoy_config_cluster_v3_Cluster_type(cluster) ==
2745
- envoy_config_cluster_v3_Cluster_LOGICAL_DNS) {
2746
- cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::LOGICAL_DNS;
2747
- } else {
2748
- if (envoy_config_cluster_v3_Cluster_has_cluster_type(cluster)) {
2749
- const envoy_config_cluster_v3_Cluster_CustomClusterType*
2750
- custom_cluster_type =
2751
- envoy_config_cluster_v3_Cluster_cluster_type(cluster);
2752
- upb_strview type_name =
2753
- envoy_config_cluster_v3_Cluster_CustomClusterType_name(
2754
- custom_cluster_type);
2755
- if (UpbStringToAbsl(type_name) == "envoy.clusters.aggregate") {
2756
- cds_update.cluster_type = XdsApi::CdsUpdate::ClusterType::AGGREGATE;
2757
- // Retrieve aggregate clusters.
2758
- const google_protobuf_Any* typed_config =
2759
- envoy_config_cluster_v3_Cluster_CustomClusterType_typed_config(
2760
- custom_cluster_type);
2761
- const upb_strview aggregate_cluster_config_upb_strview =
2762
- google_protobuf_Any_value(typed_config);
2763
- const envoy_extensions_clusters_aggregate_v3_ClusterConfig*
2764
- aggregate_cluster_config =
2765
- envoy_extensions_clusters_aggregate_v3_ClusterConfig_parse(
2766
- aggregate_cluster_config_upb_strview.data,
2767
- aggregate_cluster_config_upb_strview.size, context.arena);
2768
- if (aggregate_cluster_config == nullptr) {
2769
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2770
- absl::StrCat(cluster_name, ": Can't parse aggregate cluster.")
2771
- .c_str()));
2772
- resource_names_failed->insert(cluster_name);
2773
- continue;
2774
- }
2775
- size_t size;
2776
- const upb_strview* clusters =
2777
- envoy_extensions_clusters_aggregate_v3_ClusterConfig_clusters(
2778
- aggregate_cluster_config, &size);
2779
- for (size_t i = 0; i < size; ++i) {
2780
- const upb_strview cluster = clusters[i];
2781
- cds_update.prioritized_cluster_names.emplace_back(
2782
- UpbStringToStdString(cluster));
2783
- }
2784
- } else {
2785
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2786
- absl::StrCat(cluster_name, ": DiscoveryType is not valid.")
2787
- .c_str()));
2788
- resource_names_failed->insert(cluster_name);
2789
- continue;
2790
- }
2791
- } else {
2792
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2793
- absl::StrCat(cluster_name, ": DiscoveryType is not valid.")
2794
- .c_str()));
2795
- resource_names_failed->insert(cluster_name);
2796
- continue;
2797
- }
2798
- }
2799
- // Check the LB policy.
2800
- if (envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
2801
- envoy_config_cluster_v3_Cluster_ROUND_ROBIN) {
2802
- cds_update.lb_policy = "ROUND_ROBIN";
2803
- } else if (XdsRingHashEnabled() &&
2804
- envoy_config_cluster_v3_Cluster_lb_policy(cluster) ==
2805
- envoy_config_cluster_v3_Cluster_RING_HASH) {
2806
- cds_update.lb_policy = "RING_HASH";
2807
- // Record ring hash lb config
2808
- auto* ring_hash_config =
2809
- envoy_config_cluster_v3_Cluster_ring_hash_lb_config(cluster);
2810
- if (ring_hash_config == nullptr) {
2811
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2812
- absl::StrCat(cluster_name,
2813
- ": ring hash lb config required but not present.")
2814
- .c_str()));
2815
- resource_names_failed->insert(cluster_name);
2816
- continue;
2817
- }
2818
- const google_protobuf_UInt64Value* max_ring_size =
2819
- envoy_config_cluster_v3_Cluster_RingHashLbConfig_maximum_ring_size(
2820
- ring_hash_config);
2821
- if (max_ring_size != nullptr) {
2822
- cds_update.max_ring_size =
2823
- google_protobuf_UInt64Value_value(max_ring_size);
2824
- if (cds_update.max_ring_size > 8388608 ||
2825
- cds_update.max_ring_size == 0) {
2826
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2827
- absl::StrCat(
2828
- cluster_name,
2829
- ": max_ring_size is not in the range of 1 to 8388608.")
2830
- .c_str()));
2831
- resource_names_failed->insert(cluster_name);
2832
- continue;
2833
- }
2834
- }
2835
- const google_protobuf_UInt64Value* min_ring_size =
2836
- envoy_config_cluster_v3_Cluster_RingHashLbConfig_minimum_ring_size(
2837
- ring_hash_config);
2838
- if (min_ring_size != nullptr) {
2839
- cds_update.min_ring_size =
2840
- google_protobuf_UInt64Value_value(min_ring_size);
2841
- if (cds_update.min_ring_size > 8388608 ||
2842
- cds_update.min_ring_size == 0) {
2843
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2844
- absl::StrCat(
2845
- cluster_name,
2846
- ": min_ring_size is not in the range of 1 to 8388608.")
2847
- .c_str()));
2848
- resource_names_failed->insert(cluster_name);
2849
- continue;
2850
- }
2851
- if (cds_update.min_ring_size > cds_update.max_ring_size) {
2852
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2853
- absl::StrCat(
2854
- cluster_name,
2855
- ": min_ring_size cannot be greater than max_ring_size.")
2856
- .c_str()));
2857
- resource_names_failed->insert(cluster_name);
2858
- continue;
2859
- }
2860
- }
2861
- if (envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
2862
- ring_hash_config) ==
2863
- envoy_config_cluster_v3_Cluster_RingHashLbConfig_XX_HASH) {
2864
- cds_update.hash_function = XdsApi::CdsUpdate::HashFunction::XX_HASH;
2865
- } else if (
2866
- envoy_config_cluster_v3_Cluster_RingHashLbConfig_hash_function(
2867
- ring_hash_config) ==
2868
- envoy_config_cluster_v3_Cluster_RingHashLbConfig_MURMUR_HASH_2) {
2869
- cds_update.hash_function =
2870
- XdsApi::CdsUpdate::HashFunction::MURMUR_HASH_2;
2871
- } else {
2872
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2873
- absl::StrCat(cluster_name,
2874
- ": ring hash lb config has invalid hash function.")
2875
- .c_str()));
2876
- resource_names_failed->insert(cluster_name);
2877
- continue;
2878
- }
2879
- } else {
2880
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2881
- absl::StrCat(cluster_name, ": LB policy is not supported.").c_str()));
2882
- resource_names_failed->insert(cluster_name);
2883
- continue;
2884
- }
2885
- if (XdsSecurityEnabled()) {
2886
- // Record Upstream tls context
2887
- auto* transport_socket =
2888
- envoy_config_cluster_v3_Cluster_transport_socket(cluster);
2889
- if (transport_socket != nullptr) {
2890
- absl::string_view name = UpbStringToAbsl(
2891
- envoy_config_core_v3_TransportSocket_name(transport_socket));
2892
- if (name == "envoy.transport_sockets.tls") {
2893
- auto* typed_config =
2894
- envoy_config_core_v3_TransportSocket_typed_config(
2895
- transport_socket);
2896
- if (typed_config != nullptr) {
2897
- const upb_strview encoded_upstream_tls_context =
2898
- google_protobuf_Any_value(typed_config);
2899
- auto* upstream_tls_context =
2900
- envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_parse(
2901
- encoded_upstream_tls_context.data,
2902
- encoded_upstream_tls_context.size, context.arena);
2903
- if (upstream_tls_context == nullptr) {
2904
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2905
- absl::StrCat(cluster_name,
2906
- ": Can't decode upstream tls context.")
2907
- .c_str()));
2908
- resource_names_failed->insert(cluster_name);
2909
- continue;
2910
- }
2911
- auto* common_tls_context =
2912
- envoy_extensions_transport_sockets_tls_v3_UpstreamTlsContext_common_tls_context(
2913
- upstream_tls_context);
2914
- if (common_tls_context != nullptr) {
2915
- grpc_error* error = CommonTlsContextParse(
2916
- common_tls_context, &cds_update.common_tls_context);
2917
- if (error != GRPC_ERROR_NONE) {
2918
- errors.push_back(grpc_error_add_child(
2919
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2920
- absl::StrCat(cluster_name, ": error in TLS context")
2921
- .c_str()),
2922
- error));
2923
- resource_names_failed->insert(cluster_name);
2924
- continue;
2925
- }
2926
- }
2927
- }
2928
- if (cds_update.common_tls_context.combined_validation_context
2929
- .validation_context_certificate_provider_instance
2930
- .instance_name.empty()) {
2931
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2932
- absl::StrCat(cluster_name,
2933
- "TLS configuration provided but no "
2934
- "validation_context_certificate_provider_instance "
2935
- "found.")
2936
- .c_str()));
2937
- resource_names_failed->insert(cluster_name);
2938
- continue;
2939
- }
2940
- }
2941
- }
2942
- }
2943
- // Record LRS server name (if any).
2944
- const envoy_config_core_v3_ConfigSource* lrs_server =
2945
- envoy_config_cluster_v3_Cluster_lrs_server(cluster);
2946
- if (lrs_server != nullptr) {
2947
- if (!envoy_config_core_v3_ConfigSource_has_self(lrs_server)) {
2948
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
2949
- absl::StrCat(cluster_name, ": LRS ConfigSource is not self.")
2950
- .c_str()));
2951
- resource_names_failed->insert(cluster_name);
2952
- continue;
2953
- }
2954
- cds_update.lrs_load_reporting_server_name.emplace("");
2955
- }
2956
- // The Cluster resource encodes the circuit breaking parameters in a list of
2957
- // Thresholds messages, where each message specifies the parameters for a
2958
- // particular RoutingPriority. we will look only at the first entry in the
2959
- // list for priority DEFAULT and default to 1024 if not found.
2960
- if (envoy_config_cluster_v3_Cluster_has_circuit_breakers(cluster)) {
2961
- const envoy_config_cluster_v3_CircuitBreakers* circuit_breakers =
2962
- envoy_config_cluster_v3_Cluster_circuit_breakers(cluster);
2963
- size_t num_thresholds;
2964
- const envoy_config_cluster_v3_CircuitBreakers_Thresholds* const*
2965
- thresholds = envoy_config_cluster_v3_CircuitBreakers_thresholds(
2966
- circuit_breakers, &num_thresholds);
2967
- for (size_t i = 0; i < num_thresholds; ++i) {
2968
- const auto* threshold = thresholds[i];
2969
- if (envoy_config_cluster_v3_CircuitBreakers_Thresholds_priority(
2970
- threshold) == envoy_config_core_v3_DEFAULT) {
2971
- const google_protobuf_UInt32Value* max_requests =
2972
- envoy_config_cluster_v3_CircuitBreakers_Thresholds_max_requests(
2973
- threshold);
2974
- if (max_requests != nullptr) {
2975
- cds_update.max_concurrent_requests =
2976
- google_protobuf_UInt32Value_value(max_requests);
2977
- }
2978
- break;
2979
- }
2980
- }
2981
- }
2982
- }
2983
- return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing CDS response", &errors);
2984
- }
2985
-
2986
- grpc_error* ServerAddressParseAndAppend(
2987
- const envoy_config_endpoint_v3_LbEndpoint* lb_endpoint,
2988
- ServerAddressList* list) {
2989
- // If health_status is not HEALTHY or UNKNOWN, skip this endpoint.
2990
- const int32_t health_status =
2991
- envoy_config_endpoint_v3_LbEndpoint_health_status(lb_endpoint);
2992
- if (health_status != envoy_config_core_v3_UNKNOWN &&
2993
- health_status != envoy_config_core_v3_HEALTHY) {
2994
- return GRPC_ERROR_NONE;
2995
- }
2996
- // Find the ip:port.
2997
- const envoy_config_endpoint_v3_Endpoint* endpoint =
2998
- envoy_config_endpoint_v3_LbEndpoint_endpoint(lb_endpoint);
2999
- const envoy_config_core_v3_Address* address =
3000
- envoy_config_endpoint_v3_Endpoint_address(endpoint);
3001
- const envoy_config_core_v3_SocketAddress* socket_address =
3002
- envoy_config_core_v3_Address_socket_address(address);
3003
- std::string address_str = UpbStringToStdString(
3004
- envoy_config_core_v3_SocketAddress_address(socket_address));
3005
- uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
3006
- if (GPR_UNLIKELY(port >> 16) != 0) {
3007
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port.");
3008
- }
3009
- // Populate grpc_resolved_address.
3010
- grpc_resolved_address addr;
3011
- grpc_error* error =
3012
- grpc_string_to_sockaddr_new(&addr, address_str.c_str(), port);
3013
- if (error != GRPC_ERROR_NONE) return error;
3014
- // Append the address to the list.
3015
- list->emplace_back(addr, nullptr);
3016
- return GRPC_ERROR_NONE;
3017
- }
3018
-
3019
- grpc_error* LocalityParse(
3020
- const envoy_config_endpoint_v3_LocalityLbEndpoints* locality_lb_endpoints,
3021
- XdsApi::EdsUpdate::Priority::Locality* output_locality, size_t* priority) {
3022
- // Parse LB weight.
3023
- const google_protobuf_UInt32Value* lb_weight =
3024
- envoy_config_endpoint_v3_LocalityLbEndpoints_load_balancing_weight(
3025
- locality_lb_endpoints);
3026
- // If LB weight is not specified, it means this locality is assigned no load.
3027
- // TODO(juanlishen): When we support CDS to configure the inter-locality
3028
- // policy, we should change the LB weight handling.
3029
- output_locality->lb_weight =
3030
- lb_weight != nullptr ? google_protobuf_UInt32Value_value(lb_weight) : 0;
3031
- if (output_locality->lb_weight == 0) return GRPC_ERROR_NONE;
3032
- // Parse locality name.
3033
- const envoy_config_core_v3_Locality* locality =
3034
- envoy_config_endpoint_v3_LocalityLbEndpoints_locality(
3035
- locality_lb_endpoints);
3036
- if (locality == nullptr) {
3037
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty locality.");
3038
- }
3039
- std::string region =
3040
- UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
3041
- std::string zone =
3042
- UpbStringToStdString(envoy_config_core_v3_Locality_region(locality));
3043
- std::string sub_zone =
3044
- UpbStringToStdString(envoy_config_core_v3_Locality_sub_zone(locality));
3045
- output_locality->name = MakeRefCounted<XdsLocalityName>(
3046
- std::move(region), std::move(zone), std::move(sub_zone));
3047
- // Parse the addresses.
3048
- size_t size;
3049
- const envoy_config_endpoint_v3_LbEndpoint* const* lb_endpoints =
3050
- envoy_config_endpoint_v3_LocalityLbEndpoints_lb_endpoints(
3051
- locality_lb_endpoints, &size);
3052
- for (size_t i = 0; i < size; ++i) {
3053
- grpc_error* error = ServerAddressParseAndAppend(
3054
- lb_endpoints[i], &output_locality->endpoints);
3055
- if (error != GRPC_ERROR_NONE) return error;
3056
- }
3057
- // Parse the priority.
3058
- *priority = envoy_config_endpoint_v3_LocalityLbEndpoints_priority(
3059
- locality_lb_endpoints);
3060
- return GRPC_ERROR_NONE;
3061
- }
3062
-
3063
- grpc_error* DropParseAndAppend(
3064
- const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload*
3065
- drop_overload,
3066
- XdsApi::EdsUpdate::DropConfig* drop_config) {
3067
- // Get the category.
3068
- std::string category = UpbStringToStdString(
3069
- envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_category(
3070
- drop_overload));
3071
- if (category.empty()) {
3072
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Empty drop category name");
3073
- }
3074
- // Get the drop rate (per million).
3075
- const envoy_type_v3_FractionalPercent* drop_percentage =
3076
- envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload_drop_percentage(
3077
- drop_overload);
3078
- uint32_t numerator =
3079
- envoy_type_v3_FractionalPercent_numerator(drop_percentage);
3080
- const auto denominator =
3081
- static_cast<envoy_type_v3_FractionalPercent_DenominatorType>(
3082
- envoy_type_v3_FractionalPercent_denominator(drop_percentage));
3083
- // Normalize to million.
3084
- switch (denominator) {
3085
- case envoy_type_v3_FractionalPercent_HUNDRED:
3086
- numerator *= 10000;
3087
- break;
3088
- case envoy_type_v3_FractionalPercent_TEN_THOUSAND:
3089
- numerator *= 100;
3090
- break;
3091
- case envoy_type_v3_FractionalPercent_MILLION:
3092
- break;
3093
- default:
3094
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Unknown denominator type");
3095
- }
3096
- // Cap numerator to 1000000.
3097
- numerator = GPR_MIN(numerator, 1000000);
3098
- drop_config->AddCategory(std::move(category), numerator);
3099
- return GRPC_ERROR_NONE;
3100
- }
3101
-
3102
- grpc_error* EdsResponseParse(
3103
- const EncodingContext& context,
3104
- const envoy_service_discovery_v3_DiscoveryResponse* response,
3105
- const std::set<absl::string_view>& expected_eds_service_names,
3106
- XdsApi::EdsUpdateMap* eds_update_map,
3107
- std::set<std::string>* resource_names_failed) {
3108
- std::vector<grpc_error*> errors;
3109
- // Get the resources from the response.
3110
- size_t size;
3111
- const google_protobuf_Any* const* resources =
3112
- envoy_service_discovery_v3_DiscoveryResponse_resources(response, &size);
3113
- for (size_t i = 0; i < size; ++i) {
3114
- // Check the type_url of the resource.
3115
- absl::string_view type_url =
3116
- UpbStringToAbsl(google_protobuf_Any_type_url(resources[i]));
3117
- if (!IsEds(type_url)) {
3118
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
3119
- absl::StrCat("resource index ", i, ": Resource is not EDS.")
3120
- .c_str()));
3121
- continue;
3122
- }
3123
- // Get the cluster_load_assignment.
3124
- upb_strview encoded_cluster_load_assignment =
3125
- google_protobuf_Any_value(resources[i]);
3126
- envoy_config_endpoint_v3_ClusterLoadAssignment* cluster_load_assignment =
3127
- envoy_config_endpoint_v3_ClusterLoadAssignment_parse(
3128
- encoded_cluster_load_assignment.data,
3129
- encoded_cluster_load_assignment.size, context.arena);
3130
- if (cluster_load_assignment == nullptr) {
3131
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
3132
- absl::StrCat("resource index ", i,
3133
- ": Can't parse cluster_load_assignment.")
3134
- .c_str()));
3135
- continue;
3136
- }
3137
- MaybeLogClusterLoadAssignment(context, cluster_load_assignment);
3138
- // Check the EDS service name. Ignore unexpected names.
3139
- std::string eds_service_name = UpbStringToStdString(
3140
- envoy_config_endpoint_v3_ClusterLoadAssignment_cluster_name(
3141
- cluster_load_assignment));
3142
- if (expected_eds_service_names.find(eds_service_name) ==
3143
- expected_eds_service_names.end()) {
3144
- continue;
3145
- }
3146
- // Fail on duplicate resources.
3147
- if (eds_update_map->find(eds_service_name) != eds_update_map->end()) {
3148
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
3149
- absl::StrCat("duplicate resource name \"", eds_service_name, "\"")
3150
- .c_str()));
3151
- resource_names_failed->insert(eds_service_name);
3152
- continue;
3153
- }
3154
- // Serialize into JSON and store it in the EdsUpdateMap
3155
- XdsApi::EdsResourceData& eds_resource_data =
3156
- (*eds_update_map)[eds_service_name];
3157
- XdsApi::EdsUpdate& eds_update = eds_resource_data.resource;
3158
- eds_resource_data.serialized_proto =
3159
- UpbStringToStdString(encoded_cluster_load_assignment);
3160
- // Get the endpoints.
3161
- size_t locality_size;
3162
- const envoy_config_endpoint_v3_LocalityLbEndpoints* const* endpoints =
3163
- envoy_config_endpoint_v3_ClusterLoadAssignment_endpoints(
3164
- cluster_load_assignment, &locality_size);
3165
- grpc_error* error = GRPC_ERROR_NONE;
3166
- for (size_t j = 0; j < locality_size; ++j) {
3167
- size_t priority;
3168
- XdsApi::EdsUpdate::Priority::Locality locality;
3169
- error = LocalityParse(endpoints[j], &locality, &priority);
3170
- if (error != GRPC_ERROR_NONE) break;
3171
- // Filter out locality with weight 0.
3172
- if (locality.lb_weight == 0) continue;
3173
- // Make sure prorities is big enough. Note that they might not
3174
- // arrive in priority order.
3175
- while (eds_update.priorities.size() < priority + 1) {
3176
- eds_update.priorities.emplace_back();
3177
- }
3178
- eds_update.priorities[priority].localities.emplace(locality.name.get(),
3179
- std::move(locality));
3180
- }
3181
- if (error != GRPC_ERROR_NONE) {
3182
- errors.push_back(grpc_error_add_child(
3183
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
3184
- absl::StrCat(eds_service_name, ": locality validation error")
3185
- .c_str()),
3186
- error));
3187
- resource_names_failed->insert(eds_service_name);
3188
- continue;
3189
- }
3190
- for (const auto& priority : eds_update.priorities) {
3191
- if (priority.localities.empty()) {
3192
- errors.push_back(GRPC_ERROR_CREATE_FROM_COPIED_STRING(
3193
- absl::StrCat(eds_service_name, ": sparse priority list").c_str()));
3194
- resource_names_failed->insert(eds_service_name);
3195
- continue;
3196
- }
3197
- }
3198
- // Get the drop config.
3199
- eds_update.drop_config = MakeRefCounted<XdsApi::EdsUpdate::DropConfig>();
3200
- const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy* policy =
3201
- envoy_config_endpoint_v3_ClusterLoadAssignment_policy(
3202
- cluster_load_assignment);
3203
- if (policy != nullptr) {
3204
- size_t drop_size;
3205
- const envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_DropOverload* const*
3206
- drop_overload =
3207
- envoy_config_endpoint_v3_ClusterLoadAssignment_Policy_drop_overloads(
3208
- policy, &drop_size);
3209
- for (size_t j = 0; j < drop_size; ++j) {
3210
- error =
3211
- DropParseAndAppend(drop_overload[j], eds_update.drop_config.get());
3212
- if (error != GRPC_ERROR_NONE) break;
3213
- }
3214
- if (error != GRPC_ERROR_NONE) {
3215
- errors.push_back(grpc_error_add_child(
3216
- GRPC_ERROR_CREATE_FROM_COPIED_STRING(
3217
- absl::StrCat(eds_service_name, ": drop config validation error")
3218
- .c_str()),
3219
- error));
3220
- resource_names_failed->insert(eds_service_name);
3221
- continue;
3222
- }
3223
- }
3224
- }
3225
- return GRPC_ERROR_CREATE_FROM_VECTOR("errors parsing EDS response", &errors);
3226
- }
3227
-
3228
- std::string TypeUrlInternalToExternal(absl::string_view type_url) {
3229
- if (type_url == kLdsV2TypeUrl) {
3230
- return XdsApi::kLdsTypeUrl;
3231
- } else if (type_url == kRdsV2TypeUrl) {
3232
- return XdsApi::kRdsTypeUrl;
3233
- } else if (type_url == kCdsV2TypeUrl) {
3234
- return XdsApi::kCdsTypeUrl;
3235
- } else if (type_url == kEdsV2TypeUrl) {
3236
- return XdsApi::kEdsTypeUrl;
3237
- }
3238
- return std::string(type_url);
3239
- }
3240
-
3241
- template <typename UpdateMap>
3242
- void MoveUpdatesToFailedSet(UpdateMap* update_map,
3243
- std::set<std::string>* resource_names_failed) {
3244
- for (const auto& p : *update_map) {
3245
- resource_names_failed->insert(p.first);
3246
- }
3247
- update_map->clear();
3248
- }
3249
-
3250
- } // namespace
3251
-
3252
- XdsApi::AdsParseResult XdsApi::ParseAdsResponse(
3253
- const XdsBootstrap::XdsServer& server, const grpc_slice& encoded_response,
3254
- const std::set<absl::string_view>& expected_listener_names,
3255
- const std::set<absl::string_view>& expected_route_configuration_names,
3256
- const std::set<absl::string_view>& expected_cluster_names,
3257
- const std::set<absl::string_view>& expected_eds_service_names) {
3258
- AdsParseResult result;
357
+ absl::Status XdsApi::ParseAdsResponse(const XdsBootstrap::XdsServer& server,
358
+ const grpc_slice& encoded_response,
359
+ AdsResponseParserInterface* parser) {
3259
360
  upb::Arena arena;
3260
- const EncodingContext context = {client_, tracer_, symtab_.ptr(), arena.ptr(),
3261
- server.ShouldUseV3()};
361
+ const XdsEncodingContext context = {client_,
362
+ server,
363
+ tracer_,
364
+ symtab_->ptr(),
365
+ arena.ptr(),
366
+ server.ShouldUseV3(),
367
+ certificate_provider_definition_map_};
3262
368
  // Decode the response.
3263
369
  const envoy_service_discovery_v3_DiscoveryResponse* response =
3264
370
  envoy_service_discovery_v3_DiscoveryResponse_parse(
3265
371
  reinterpret_cast<const char*>(GRPC_SLICE_START_PTR(encoded_response)),
3266
372
  GRPC_SLICE_LENGTH(encoded_response), arena.ptr());
3267
- // If decoding fails, output an empty type_url and return.
373
+ // If decoding fails, report a fatal error and return.
3268
374
  if (response == nullptr) {
3269
- result.parse_error =
3270
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("Can't decode DiscoveryResponse.");
3271
- return result;
375
+ return absl::InvalidArgumentError("Can't decode DiscoveryResponse.");
3272
376
  }
3273
377
  MaybeLogDiscoveryResponse(context, response);
3274
- // Record the type_url, the version_info, and the nonce of the response.
3275
- result.type_url = TypeUrlInternalToExternal(UpbStringToAbsl(
3276
- envoy_service_discovery_v3_DiscoveryResponse_type_url(response)));
3277
- result.version = UpbStringToStdString(
378
+ // Report the type_url, version, nonce, and number of resources to the parser.
379
+ AdsResponseParserInterface::AdsResponseFields fields;
380
+ fields.type_url = std::string(absl::StripPrefix(
381
+ UpbStringToAbsl(
382
+ envoy_service_discovery_v3_DiscoveryResponse_type_url(response)),
383
+ "type.googleapis.com/"));
384
+ fields.version = UpbStringToStdString(
3278
385
  envoy_service_discovery_v3_DiscoveryResponse_version_info(response));
3279
- result.nonce = UpbStringToStdString(
386
+ fields.nonce = UpbStringToStdString(
3280
387
  envoy_service_discovery_v3_DiscoveryResponse_nonce(response));
3281
- // Parse the response according to the resource type.
3282
- if (IsLds(result.type_url)) {
3283
- result.parse_error =
3284
- LdsResponseParse(context, response, expected_listener_names,
3285
- &result.lds_update_map, &result.resource_names_failed);
3286
- if (result.parse_error != GRPC_ERROR_NONE) {
3287
- MoveUpdatesToFailedSet(&result.lds_update_map,
3288
- &result.resource_names_failed);
3289
- }
3290
- } else if (IsRds(result.type_url)) {
3291
- result.parse_error =
3292
- RdsResponseParse(context, response, expected_route_configuration_names,
3293
- &result.rds_update_map, &result.resource_names_failed);
3294
- if (result.parse_error != GRPC_ERROR_NONE) {
3295
- MoveUpdatesToFailedSet(&result.rds_update_map,
3296
- &result.resource_names_failed);
3297
- }
3298
- } else if (IsCds(result.type_url)) {
3299
- result.parse_error =
3300
- CdsResponseParse(context, response, expected_cluster_names,
3301
- &result.cds_update_map, &result.resource_names_failed);
3302
- if (result.parse_error != GRPC_ERROR_NONE) {
3303
- MoveUpdatesToFailedSet(&result.cds_update_map,
3304
- &result.resource_names_failed);
3305
- }
3306
- } else if (IsEds(result.type_url)) {
3307
- result.parse_error =
3308
- EdsResponseParse(context, response, expected_eds_service_names,
3309
- &result.eds_update_map, &result.resource_names_failed);
3310
- if (result.parse_error != GRPC_ERROR_NONE) {
3311
- MoveUpdatesToFailedSet(&result.eds_update_map,
3312
- &result.resource_names_failed);
3313
- }
3314
- }
3315
- return result;
388
+ size_t num_resources;
389
+ const google_protobuf_Any* const* resources =
390
+ envoy_service_discovery_v3_DiscoveryResponse_resources(response,
391
+ &num_resources);
392
+ fields.num_resources = num_resources;
393
+ absl::Status status = parser->ProcessAdsResponseFields(std::move(fields));
394
+ if (!status.ok()) return status;
395
+ // Process each resource.
396
+ for (size_t i = 0; i < num_resources; ++i) {
397
+ absl::string_view type_url = absl::StripPrefix(
398
+ UpbStringToAbsl(google_protobuf_Any_type_url(resources[i])),
399
+ "type.googleapis.com/");
400
+ absl::string_view serialized_resource =
401
+ UpbStringToAbsl(google_protobuf_Any_value(resources[i]));
402
+ parser->ParseResource(context, i, type_url, serialized_resource);
403
+ }
404
+ return absl::OkStatus();
3316
405
  }
3317
406
 
3318
407
  namespace {
3319
408
 
3320
409
  void MaybeLogLrsRequest(
3321
- const EncodingContext& context,
410
+ const XdsEncodingContext& context,
3322
411
  const envoy_service_load_stats_v3_LoadStatsRequest* request) {
3323
412
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
3324
413
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
3325
- const upb_msgdef* msg_type =
414
+ const upb_MessageDef* msg_type =
3326
415
  envoy_service_load_stats_v3_LoadStatsRequest_getmsgdef(context.symtab);
3327
416
  char buf[10240];
3328
- upb_text_encode(request, msg_type, nullptr, 0, buf, sizeof(buf));
417
+ upb_TextEncode(request, msg_type, nullptr, 0, buf, sizeof(buf));
3329
418
  gpr_log(GPR_DEBUG, "[xds_client %p] constructed LRS request: %s",
3330
419
  context.client, buf);
3331
420
  }
3332
421
  }
3333
422
 
3334
423
  grpc_slice SerializeLrsRequest(
3335
- const EncodingContext& context,
424
+ const XdsEncodingContext& context,
3336
425
  const envoy_service_load_stats_v3_LoadStatsRequest* request) {
3337
426
  size_t output_length;
3338
427
  char* output = envoy_service_load_stats_v3_LoadStatsRequest_serialize(
@@ -3345,8 +434,13 @@ grpc_slice SerializeLrsRequest(
3345
434
  grpc_slice XdsApi::CreateLrsInitialRequest(
3346
435
  const XdsBootstrap::XdsServer& server) {
3347
436
  upb::Arena arena;
3348
- const EncodingContext context = {client_, tracer_, symtab_.ptr(), arena.ptr(),
3349
- server.ShouldUseV3()};
437
+ const XdsEncodingContext context = {client_,
438
+ server,
439
+ tracer_,
440
+ symtab_->ptr(),
441
+ arena.ptr(),
442
+ server.ShouldUseV3(),
443
+ certificate_provider_definition_map_};
3350
444
  // Create a request.
3351
445
  envoy_service_load_stats_v3_LoadStatsRequest* request =
3352
446
  envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
@@ -3354,9 +448,11 @@ grpc_slice XdsApi::CreateLrsInitialRequest(
3354
448
  envoy_config_core_v3_Node* node_msg =
3355
449
  envoy_service_load_stats_v3_LoadStatsRequest_mutable_node(request,
3356
450
  arena.ptr());
3357
- PopulateNode(context, node_, build_version_, user_agent_name_, node_msg);
451
+ PopulateNode(context, node_, build_version_, user_agent_name_,
452
+ user_agent_version_, node_msg);
3358
453
  envoy_config_core_v3_Node_add_client_features(
3359
- node_msg, upb_strview_makez("envoy.lrs.supports_send_all_clusters"),
454
+ node_msg,
455
+ upb_StringView_FromString("envoy.lrs.supports_send_all_clusters"),
3360
456
  arena.ptr());
3361
457
  MaybeLogLrsRequest(context, request);
3362
458
  return SerializeLrsRequest(context, request);
@@ -3365,7 +461,7 @@ grpc_slice XdsApi::CreateLrsInitialRequest(
3365
461
  namespace {
3366
462
 
3367
463
  void LocalityStatsPopulate(
3368
- const EncodingContext& context,
464
+ const XdsEncodingContext& context,
3369
465
  envoy_config_endpoint_v3_UpstreamLocalityStats* output,
3370
466
  const XdsLocalityName& locality_name,
3371
467
  const XdsClusterLocalityStats::Snapshot& snapshot) {
@@ -3415,8 +511,16 @@ void LocalityStatsPopulate(
3415
511
  grpc_slice XdsApi::CreateLrsRequest(
3416
512
  ClusterLoadReportMap cluster_load_report_map) {
3417
513
  upb::Arena arena;
3418
- const EncodingContext context = {client_, tracer_, symtab_.ptr(), arena.ptr(),
3419
- false};
514
+ // The xDS server info is not actually needed here, so we seed it with an
515
+ // empty value.
516
+ XdsBootstrap::XdsServer empty_server;
517
+ const XdsEncodingContext context = {client_,
518
+ empty_server,
519
+ tracer_,
520
+ symtab_->ptr(),
521
+ arena.ptr(),
522
+ false,
523
+ certificate_provider_definition_map_};
3420
524
  // Create a request.
3421
525
  envoy_service_load_stats_v3_LoadStatsRequest* request =
3422
526
  envoy_service_load_stats_v3_LoadStatsRequest_new(arena.ptr());
@@ -3464,8 +568,7 @@ grpc_slice XdsApi::CreateLrsRequest(
3464
568
  envoy_config_endpoint_v3_ClusterStats_set_total_dropped_requests(
3465
569
  cluster_stats, total_dropped_requests);
3466
570
  // Set real load report interval.
3467
- gpr_timespec timespec =
3468
- grpc_millis_to_timespec(load_report.load_report_interval, GPR_TIMESPAN);
571
+ gpr_timespec timespec = load_report.load_report_interval.as_timespec();
3469
572
  google_protobuf_Duration* load_report_interval =
3470
573
  envoy_config_endpoint_v3_ClusterStats_mutable_load_report_interval(
3471
574
  cluster_stats, arena.ptr());
@@ -3476,10 +579,10 @@ grpc_slice XdsApi::CreateLrsRequest(
3476
579
  return SerializeLrsRequest(context, request);
3477
580
  }
3478
581
 
3479
- grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
3480
- bool* send_all_clusters,
3481
- std::set<std::string>* cluster_names,
3482
- grpc_millis* load_reporting_interval) {
582
+ grpc_error_handle XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
583
+ bool* send_all_clusters,
584
+ std::set<std::string>* cluster_names,
585
+ Duration* load_reporting_interval) {
3483
586
  upb::Arena arena;
3484
587
  // Decode the response.
3485
588
  const envoy_service_load_stats_v3_LoadStatsResponse* decoded_response =
@@ -3497,7 +600,7 @@ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
3497
600
  } else {
3498
601
  // Store the cluster names.
3499
602
  size_t size;
3500
- const upb_strview* clusters =
603
+ const upb_StringView* clusters =
3501
604
  envoy_service_load_stats_v3_LoadStatsResponse_clusters(decoded_response,
3502
605
  &size);
3503
606
  for (size_t i = 0; i < size; ++i) {
@@ -3508,237 +611,24 @@ grpc_error* XdsApi::ParseLrsResponse(const grpc_slice& encoded_response,
3508
611
  const google_protobuf_Duration* load_reporting_interval_duration =
3509
612
  envoy_service_load_stats_v3_LoadStatsResponse_load_reporting_interval(
3510
613
  decoded_response);
3511
- gpr_timespec timespec{
614
+ *load_reporting_interval = Duration::FromSecondsAndNanoseconds(
3512
615
  google_protobuf_Duration_seconds(load_reporting_interval_duration),
3513
- google_protobuf_Duration_nanos(load_reporting_interval_duration),
3514
- GPR_TIMESPAN};
3515
- *load_reporting_interval = gpr_time_to_millis(timespec);
616
+ google_protobuf_Duration_nanos(load_reporting_interval_duration));
3516
617
  return GRPC_ERROR_NONE;
3517
618
  }
3518
619
 
3519
620
  namespace {
3520
- google_protobuf_Timestamp* GrpcMillisToTimestamp(const EncodingContext& context,
3521
- grpc_millis value) {
621
+
622
+ google_protobuf_Timestamp* EncodeTimestamp(const XdsEncodingContext& context,
623
+ Timestamp value) {
3522
624
  google_protobuf_Timestamp* timestamp =
3523
625
  google_protobuf_Timestamp_new(context.arena);
3524
- gpr_timespec timespec = grpc_millis_to_timespec(value, GPR_CLOCK_REALTIME);
626
+ gpr_timespec timespec = value.as_timespec(GPR_CLOCK_REALTIME);
3525
627
  google_protobuf_Timestamp_set_seconds(timestamp, timespec.tv_sec);
3526
628
  google_protobuf_Timestamp_set_nanos(timestamp, timespec.tv_nsec);
3527
629
  return timestamp;
3528
630
  }
3529
631
 
3530
- envoy_admin_v3_UpdateFailureState* CreateUpdateFailureStateUpb(
3531
- const EncodingContext& context,
3532
- const XdsApi::ResourceMetadata* resource_metadata) {
3533
- auto* update_failure_state =
3534
- envoy_admin_v3_UpdateFailureState_new(context.arena);
3535
- envoy_admin_v3_UpdateFailureState_set_details(
3536
- update_failure_state,
3537
- StdStringToUpbString(resource_metadata->failed_details));
3538
- envoy_admin_v3_UpdateFailureState_set_version_info(
3539
- update_failure_state,
3540
- StdStringToUpbString(resource_metadata->failed_version));
3541
- envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
3542
- update_failure_state,
3543
- GrpcMillisToTimestamp(context, resource_metadata->failed_update_time));
3544
- return update_failure_state;
3545
- }
3546
-
3547
- void DumpLdsConfig(const EncodingContext& context,
3548
- const XdsApi::ResourceTypeMetadata& resource_type_metadata,
3549
- envoy_service_status_v3_PerXdsConfig* per_xds_config) {
3550
- upb_strview kLdsTypeUrlUpb = upb_strview_makez(XdsApi::kLdsTypeUrl);
3551
- auto* listener_config_dump =
3552
- envoy_service_status_v3_PerXdsConfig_mutable_listener_config(
3553
- per_xds_config, context.arena);
3554
- envoy_admin_v3_ListenersConfigDump_set_version_info(
3555
- listener_config_dump,
3556
- StdStringToUpbString(resource_type_metadata.version));
3557
- for (auto& p : resource_type_metadata.resource_metadata_map) {
3558
- absl::string_view name = p.first;
3559
- const XdsApi::ResourceMetadata* meta = p.second;
3560
- const upb_strview name_upb = StdStringToUpbString(name);
3561
- auto* dynamic_listener =
3562
- envoy_admin_v3_ListenersConfigDump_add_dynamic_listeners(
3563
- listener_config_dump, context.arena);
3564
- envoy_admin_v3_ListenersConfigDump_DynamicListener_set_name(
3565
- dynamic_listener, name_upb);
3566
- envoy_admin_v3_ListenersConfigDump_DynamicListener_set_client_status(
3567
- dynamic_listener, meta->client_status);
3568
- if (!meta->serialized_proto.empty()) {
3569
- // Set in-effective listeners
3570
- auto* dynamic_listener_state =
3571
- envoy_admin_v3_ListenersConfigDump_DynamicListener_mutable_active_state(
3572
- dynamic_listener, context.arena);
3573
- envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_version_info(
3574
- dynamic_listener_state, StdStringToUpbString(meta->version));
3575
- envoy_admin_v3_ListenersConfigDump_DynamicListenerState_set_last_updated(
3576
- dynamic_listener_state,
3577
- GrpcMillisToTimestamp(context, meta->update_time));
3578
- auto* listener_any =
3579
- envoy_admin_v3_ListenersConfigDump_DynamicListenerState_mutable_listener(
3580
- dynamic_listener_state, context.arena);
3581
- google_protobuf_Any_set_type_url(listener_any, kLdsTypeUrlUpb);
3582
- google_protobuf_Any_set_value(
3583
- listener_any, StdStringToUpbString(meta->serialized_proto));
3584
- }
3585
- if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
3586
- // Set error_state if NACKED
3587
- envoy_admin_v3_ListenersConfigDump_DynamicListener_set_error_state(
3588
- dynamic_listener, CreateUpdateFailureStateUpb(context, meta));
3589
- }
3590
- }
3591
- }
3592
-
3593
- void DumpRdsConfig(const EncodingContext& context,
3594
- const XdsApi::ResourceTypeMetadata& resource_type_metadata,
3595
- envoy_service_status_v3_PerXdsConfig* per_xds_config) {
3596
- upb_strview kRdsTypeUrlUpb = upb_strview_makez(XdsApi::kRdsTypeUrl);
3597
- auto* route_config_dump =
3598
- envoy_service_status_v3_PerXdsConfig_mutable_route_config(per_xds_config,
3599
- context.arena);
3600
- for (auto& p : resource_type_metadata.resource_metadata_map) {
3601
- absl::string_view name = p.first;
3602
- const XdsApi::ResourceMetadata* meta = p.second;
3603
- const upb_strview name_upb = StdStringToUpbString(name);
3604
- auto* dynamic_route_config =
3605
- envoy_admin_v3_RoutesConfigDump_add_dynamic_route_configs(
3606
- route_config_dump, context.arena);
3607
- envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_client_status(
3608
- dynamic_route_config, meta->client_status);
3609
- auto* route_config_any =
3610
- envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_mutable_route_config(
3611
- dynamic_route_config, context.arena);
3612
- if (!meta->serialized_proto.empty()) {
3613
- // Set in-effective route configs
3614
- envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_version_info(
3615
- dynamic_route_config, StdStringToUpbString(meta->version));
3616
- envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_last_updated(
3617
- dynamic_route_config,
3618
- GrpcMillisToTimestamp(context, meta->update_time));
3619
- google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
3620
- google_protobuf_Any_set_value(
3621
- route_config_any, StdStringToUpbString(meta->serialized_proto));
3622
- } else {
3623
- // If there isn't a working route config, we still need to print the
3624
- // name.
3625
- auto* route_config =
3626
- envoy_config_route_v3_RouteConfiguration_new(context.arena);
3627
- envoy_config_route_v3_RouteConfiguration_set_name(route_config, name_upb);
3628
- size_t length;
3629
- char* bytes = envoy_config_route_v3_RouteConfiguration_serialize(
3630
- route_config, context.arena, &length);
3631
- google_protobuf_Any_set_type_url(route_config_any, kRdsTypeUrlUpb);
3632
- google_protobuf_Any_set_value(route_config_any,
3633
- upb_strview_make(bytes, length));
3634
- }
3635
- if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
3636
- // Set error_state if NACKED
3637
- envoy_admin_v3_RoutesConfigDump_DynamicRouteConfig_set_error_state(
3638
- dynamic_route_config, CreateUpdateFailureStateUpb(context, meta));
3639
- }
3640
- }
3641
- }
3642
-
3643
- void DumpCdsConfig(const EncodingContext& context,
3644
- const XdsApi::ResourceTypeMetadata& resource_type_metadata,
3645
- envoy_service_status_v3_PerXdsConfig* per_xds_config) {
3646
- upb_strview kCdsTypeUrlUpb = upb_strview_makez(XdsApi::kCdsTypeUrl);
3647
- auto* cluster_config_dump =
3648
- envoy_service_status_v3_PerXdsConfig_mutable_cluster_config(
3649
- per_xds_config, context.arena);
3650
- envoy_admin_v3_ClustersConfigDump_set_version_info(
3651
- cluster_config_dump,
3652
- StdStringToUpbString(resource_type_metadata.version));
3653
- for (auto& p : resource_type_metadata.resource_metadata_map) {
3654
- absl::string_view name = p.first;
3655
- const XdsApi::ResourceMetadata* meta = p.second;
3656
- const upb_strview name_upb = StdStringToUpbString(name);
3657
- auto* dynamic_cluster =
3658
- envoy_admin_v3_ClustersConfigDump_add_dynamic_active_clusters(
3659
- cluster_config_dump, context.arena);
3660
- envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_client_status(
3661
- dynamic_cluster, meta->client_status);
3662
- auto* cluster_any =
3663
- envoy_admin_v3_ClustersConfigDump_DynamicCluster_mutable_cluster(
3664
- dynamic_cluster, context.arena);
3665
- if (!meta->serialized_proto.empty()) {
3666
- // Set in-effective clusters
3667
- envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_version_info(
3668
- dynamic_cluster, StdStringToUpbString(meta->version));
3669
- envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_last_updated(
3670
- dynamic_cluster, GrpcMillisToTimestamp(context, meta->update_time));
3671
- google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
3672
- google_protobuf_Any_set_value(
3673
- cluster_any, StdStringToUpbString(meta->serialized_proto));
3674
- } else {
3675
- // If there isn't a working cluster, we still need to print the name.
3676
- auto* cluster = envoy_config_cluster_v3_Cluster_new(context.arena);
3677
- envoy_config_cluster_v3_Cluster_set_name(cluster, name_upb);
3678
- size_t length;
3679
- char* bytes = envoy_config_cluster_v3_Cluster_serialize(
3680
- cluster, context.arena, &length);
3681
- google_protobuf_Any_set_type_url(cluster_any, kCdsTypeUrlUpb);
3682
- google_protobuf_Any_set_value(cluster_any,
3683
- upb_strview_make(bytes, length));
3684
- }
3685
- if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
3686
- // Set error_state if NACKED
3687
- envoy_admin_v3_ClustersConfigDump_DynamicCluster_set_error_state(
3688
- dynamic_cluster, CreateUpdateFailureStateUpb(context, meta));
3689
- }
3690
- }
3691
- }
3692
-
3693
- void DumpEdsConfig(const EncodingContext& context,
3694
- const XdsApi::ResourceTypeMetadata& resource_type_metadata,
3695
- envoy_service_status_v3_PerXdsConfig* per_xds_config) {
3696
- upb_strview kEdsTypeUrlUpb = upb_strview_makez(XdsApi::kEdsTypeUrl);
3697
- auto* endpoint_config_dump =
3698
- envoy_service_status_v3_PerXdsConfig_mutable_endpoint_config(
3699
- per_xds_config, context.arena);
3700
- for (auto& p : resource_type_metadata.resource_metadata_map) {
3701
- absl::string_view name = p.first;
3702
- const XdsApi::ResourceMetadata* meta = p.second;
3703
- const upb_strview name_upb = StdStringToUpbString(name);
3704
- auto* dynamic_endpoint =
3705
- envoy_admin_v3_EndpointsConfigDump_add_dynamic_endpoint_configs(
3706
- endpoint_config_dump, context.arena);
3707
- envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_client_status(
3708
- dynamic_endpoint, meta->client_status);
3709
- auto* endpoint_any =
3710
- envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_mutable_endpoint_config(
3711
- dynamic_endpoint, context.arena);
3712
- if (!meta->serialized_proto.empty()) {
3713
- // Set in-effective endpoints
3714
- envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_version_info(
3715
- dynamic_endpoint, StdStringToUpbString(meta->version));
3716
- envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_last_updated(
3717
- dynamic_endpoint, GrpcMillisToTimestamp(context, meta->update_time));
3718
- google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
3719
- google_protobuf_Any_set_value(
3720
- endpoint_any, StdStringToUpbString(meta->serialized_proto));
3721
- } else {
3722
- // If there isn't a working endpoint, we still need to print the name.
3723
- auto* cluster_load_assignment =
3724
- envoy_config_endpoint_v3_ClusterLoadAssignment_new(context.arena);
3725
- envoy_config_endpoint_v3_ClusterLoadAssignment_set_cluster_name(
3726
- cluster_load_assignment, name_upb);
3727
- size_t length;
3728
- char* bytes = envoy_config_endpoint_v3_ClusterLoadAssignment_serialize(
3729
- cluster_load_assignment, context.arena, &length);
3730
- google_protobuf_Any_set_type_url(endpoint_any, kEdsTypeUrlUpb);
3731
- google_protobuf_Any_set_value(endpoint_any,
3732
- upb_strview_make(bytes, length));
3733
- }
3734
- if (meta->client_status == XdsApi::ResourceMetadata::NACKED) {
3735
- // Set error_state if NACKED
3736
- envoy_admin_v3_EndpointsConfigDump_DynamicEndpointConfig_set_error_state(
3737
- dynamic_endpoint, CreateUpdateFailureStateUpb(context, meta));
3738
- }
3739
- }
3740
- }
3741
-
3742
632
  } // namespace
3743
633
 
3744
634
  std::string XdsApi::AssembleClientConfig(
@@ -3749,36 +639,65 @@ std::string XdsApi::AssembleClientConfig(
3749
639
  // Fill-in the node information
3750
640
  auto* node = envoy_service_status_v3_ClientConfig_mutable_node(client_config,
3751
641
  arena.ptr());
3752
- const EncodingContext context = {client_, tracer_, symtab_.ptr(), arena.ptr(),
3753
- true};
3754
- PopulateNode(context, node_, build_version_, user_agent_name_, node);
3755
- // Dump each xDS-type config into PerXdsConfig
3756
- for (auto& p : resource_type_metadata_map) {
642
+ // The xDS server info is not actually needed here, so we seed it with an
643
+ // empty value.
644
+ XdsBootstrap::XdsServer empty_server;
645
+ const XdsEncodingContext context = {client_,
646
+ empty_server,
647
+ tracer_,
648
+ symtab_->ptr(),
649
+ arena.ptr(),
650
+ true,
651
+ certificate_provider_definition_map_};
652
+ PopulateNode(context, node_, build_version_, user_agent_name_,
653
+ user_agent_version_, node);
654
+ // Dump each resource.
655
+ std::vector<std::string> type_url_storage;
656
+ for (const auto& p : resource_type_metadata_map) {
3757
657
  absl::string_view type_url = p.first;
3758
- const ResourceTypeMetadata& resource_type_metadata = p.second;
3759
- if (type_url == kLdsTypeUrl) {
3760
- auto* per_xds_config =
3761
- envoy_service_status_v3_ClientConfig_add_xds_config(client_config,
3762
- context.arena);
3763
- DumpLdsConfig(context, resource_type_metadata, per_xds_config);
3764
- } else if (type_url == kRdsTypeUrl) {
3765
- auto* per_xds_config =
3766
- envoy_service_status_v3_ClientConfig_add_xds_config(client_config,
3767
- context.arena);
3768
- DumpRdsConfig(context, resource_type_metadata, per_xds_config);
3769
- } else if (type_url == kCdsTypeUrl) {
3770
- auto* per_xds_config =
3771
- envoy_service_status_v3_ClientConfig_add_xds_config(client_config,
3772
- context.arena);
3773
- DumpCdsConfig(context, resource_type_metadata, per_xds_config);
3774
- } else if (type_url == kEdsTypeUrl) {
3775
- auto* per_xds_config =
3776
- envoy_service_status_v3_ClientConfig_add_xds_config(client_config,
3777
- context.arena);
3778
- DumpEdsConfig(context, resource_type_metadata, per_xds_config);
3779
- } else {
3780
- gpr_log(GPR_ERROR, "invalid type_url %s", std::string(type_url).c_str());
3781
- return "";
658
+ const ResourceMetadataMap& resource_metadata_map = p.second;
659
+ type_url_storage.emplace_back(
660
+ absl::StrCat("type.googleapis.com/", type_url));
661
+ for (const auto& q : resource_metadata_map) {
662
+ absl::string_view resource_name = q.first;
663
+ const ResourceMetadata& metadata = *q.second;
664
+ auto* entry =
665
+ envoy_service_status_v3_ClientConfig_add_generic_xds_configs(
666
+ client_config, context.arena);
667
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_type_url(
668
+ entry, StdStringToUpbString(type_url_storage.back()));
669
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_name(
670
+ entry, StdStringToUpbString(resource_name));
671
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_client_status(
672
+ entry, metadata.client_status);
673
+ if (!metadata.serialized_proto.empty()) {
674
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_version_info(
675
+ entry, StdStringToUpbString(metadata.version));
676
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_last_updated(
677
+ entry, EncodeTimestamp(context, metadata.update_time));
678
+ auto* any_field =
679
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_mutable_xds_config(
680
+ entry, context.arena);
681
+ google_protobuf_Any_set_type_url(
682
+ any_field, StdStringToUpbString(type_url_storage.back()));
683
+ google_protobuf_Any_set_value(
684
+ any_field, StdStringToUpbString(metadata.serialized_proto));
685
+ }
686
+ if (metadata.client_status == XdsApi::ResourceMetadata::NACKED) {
687
+ auto* update_failure_state =
688
+ envoy_admin_v3_UpdateFailureState_new(context.arena);
689
+ envoy_admin_v3_UpdateFailureState_set_details(
690
+ update_failure_state,
691
+ StdStringToUpbString(metadata.failed_details));
692
+ envoy_admin_v3_UpdateFailureState_set_version_info(
693
+ update_failure_state,
694
+ StdStringToUpbString(metadata.failed_version));
695
+ envoy_admin_v3_UpdateFailureState_set_last_update_attempt(
696
+ update_failure_state,
697
+ EncodeTimestamp(context, metadata.failed_update_time));
698
+ envoy_service_status_v3_ClientConfig_GenericXdsConfig_set_error_state(
699
+ entry, update_failure_state);
700
+ }
3782
701
  }
3783
702
  }
3784
703
  // Serialize the upb message to bytes