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