grpc 1.47.0-x86_64-linux → 1.49.0.pre1-x86_64-linux

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 (1059) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +183 -62
  3. data/include/grpc/compression.h +1 -1
  4. data/include/grpc/event_engine/event_engine.h +37 -25
  5. data/include/grpc/event_engine/slice_buffer.h +8 -2
  6. data/include/grpc/grpc.h +3 -3
  7. data/include/grpc/impl/codegen/compression_types.h +2 -1
  8. data/include/grpc/impl/codegen/connectivity_state.h +2 -1
  9. data/include/grpc/impl/codegen/gpr_types.h +2 -1
  10. data/include/grpc/impl/codegen/grpc_types.h +5 -9
  11. data/include/grpc/impl/codegen/port_platform.h +2 -7
  12. data/src/core/ext/filters/census/grpc_context.cc +3 -0
  13. data/src/core/ext/filters/channel_idle/channel_idle_filter.cc +20 -8
  14. data/src/core/ext/filters/channel_idle/channel_idle_filter.h +18 -2
  15. data/src/core/ext/filters/channel_idle/idle_filter_state.h +2 -0
  16. data/src/core/ext/filters/client_channel/backup_poller.cc +3 -1
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +2 -2
  18. data/src/core/ext/filters/client_channel/client_channel.cc +164 -261
  19. data/src/core/ext/filters/client_channel/client_channel.h +34 -12
  20. data/src/core/ext/filters/client_channel/client_channel_factory.cc +0 -29
  21. data/src/core/ext/filters/client_channel/client_channel_factory.h +2 -10
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  23. data/src/core/ext/filters/client_channel/config_selector.h +13 -5
  24. data/src/core/ext/filters/client_channel/connector.h +5 -6
  25. data/src/core/ext/filters/client_channel/dynamic_filters.cc +6 -4
  26. data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
  27. data/src/core/ext/filters/client_channel/http_proxy.cc +53 -65
  28. data/src/core/ext/filters/client_channel/http_proxy.h +12 -9
  29. data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +1 -1
  30. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +14 -12
  31. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +6 -6
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +2 -2
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +1 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +170 -164
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +13 -4
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +5 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +1 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +0 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.h +1 -1
  41. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +200 -96
  42. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +25 -1
  43. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +121 -131
  44. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +153 -116
  45. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +220 -181
  46. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +10 -6
  47. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +110 -119
  48. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +133 -117
  49. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +97 -87
  50. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +114 -131
  51. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +40 -49
  52. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +84 -102
  53. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +64 -76
  54. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +172 -103
  55. data/src/core/ext/filters/client_channel/proxy_mapper.h +13 -14
  56. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +18 -16
  57. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +8 -7
  58. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +7 -9
  59. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +434 -148
  60. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +5 -5
  61. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +179 -103
  62. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +20 -7
  63. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -18
  64. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +8 -18
  65. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +11 -0
  66. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +16 -18
  67. data/src/core/ext/filters/client_channel/resolver/polling_resolver.cc +4 -5
  68. data/src/core/ext/filters/client_channel/resolver/polling_resolver.h +5 -6
  69. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -13
  70. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +181 -175
  71. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +3 -1
  72. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +39 -32
  73. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +7 -10
  74. data/src/core/ext/filters/client_channel/retry_filter.cc +35 -43
  75. data/src/core/ext/filters/client_channel/retry_filter.h +1 -0
  76. data/src/core/ext/filters/client_channel/retry_service_config.cc +30 -19
  77. data/src/core/ext/filters/client_channel/retry_service_config.h +6 -9
  78. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +7 -7
  79. data/src/core/ext/filters/client_channel/subchannel.cc +101 -138
  80. data/src/core/ext/filters/client_channel/subchannel.h +14 -30
  81. data/src/core/ext/filters/client_channel/subchannel_interface_internal.h +1 -1
  82. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +6 -76
  83. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +16 -25
  84. data/src/core/ext/filters/client_channel/subchannel_stream_client.cc +15 -101
  85. data/src/core/ext/filters/client_channel/subchannel_stream_client.h +5 -9
  86. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -13
  87. data/src/core/ext/filters/deadline/deadline_filter.h +8 -2
  88. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +20 -3
  89. data/src/core/ext/filters/fault_injection/fault_injection_filter.h +9 -4
  90. data/src/core/ext/filters/fault_injection/service_config_parser.cc +19 -11
  91. data/src/core/ext/filters/fault_injection/service_config_parser.h +19 -6
  92. data/src/core/ext/filters/http/client/http_client_filter.cc +17 -7
  93. data/src/core/ext/filters/http/client/http_client_filter.h +9 -2
  94. data/src/core/ext/filters/http/client_authority_filter.cc +11 -11
  95. data/src/core/ext/filters/http/client_authority_filter.h +6 -3
  96. data/src/core/ext/filters/http/http_filters_plugin.cc +9 -1
  97. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +64 -187
  98. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +1 -2
  99. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +42 -106
  100. data/src/core/ext/filters/http/message_compress/message_decompress_filter.h +1 -0
  101. data/src/core/ext/filters/http/server/http_server_filter.cc +17 -11
  102. data/src/core/ext/filters/http/server/http_server_filter.h +7 -2
  103. data/src/core/ext/filters/message_size/message_size_filter.cc +37 -21
  104. data/src/core/ext/filters/message_size/message_size_filter.h +13 -3
  105. data/src/core/ext/filters/rbac/rbac_filter.cc +14 -3
  106. data/src/core/ext/filters/rbac/rbac_filter.h +8 -0
  107. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +25 -10
  108. data/src/core/ext/filters/rbac/rbac_service_config_parser.h +15 -5
  109. data/src/core/ext/filters/server_config_selector/server_config_selector.cc +1 -0
  110. data/src/core/ext/filters/server_config_selector/server_config_selector.h +14 -0
  111. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +23 -5
  112. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.h +1 -0
  113. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +39 -66
  114. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +77 -104
  115. data/src/core/ext/transport/chttp2/server/chttp2_server.h +4 -6
  116. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +320 -635
  117. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +4 -3
  118. data/src/core/ext/transport/chttp2/transport/flow_control.cc +207 -262
  119. data/src/core/ext/transport/chttp2/transport/flow_control.h +177 -289
  120. data/src/core/ext/transport/chttp2/transport/frame_data.cc +57 -215
  121. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -36
  122. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +0 -41
  123. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +7 -12
  124. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +7 -1
  125. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +25 -8
  126. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -0
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +0 -1
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +8 -2
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +9 -16
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +0 -2
  131. data/src/core/ext/transport/chttp2/transport/internal.h +11 -112
  132. data/src/core/ext/transport/chttp2/transport/parsing.cc +51 -38
  133. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +0 -4
  134. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -21
  135. data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -1
  136. data/src/core/ext/transport/inproc/inproc_transport.cc +124 -154
  137. data/src/core/ext/transport/inproc/inproc_transport.h +3 -1
  138. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.c +5 -5
  139. data/src/core/ext/upb-generated/envoy/admin/v3/certs.upb.h +30 -10
  140. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.c +4 -4
  141. data/src/core/ext/upb-generated/envoy/admin/v3/clusters.upb.h +24 -8
  142. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.c +8 -327
  143. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump.upb.h +83 -1723
  144. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.c +352 -0
  145. data/src/core/ext/upb-generated/envoy/admin/v3/config_dump_shared.upb.h +1768 -0
  146. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.c +2 -2
  147. data/src/core/ext/upb-generated/envoy/admin/v3/init_dump.upb.h +12 -4
  148. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.c +6 -4
  149. data/src/core/ext/upb-generated/envoy/admin/v3/listeners.upb.h +33 -4
  150. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.c +1 -1
  151. data/src/core/ext/upb-generated/envoy/admin/v3/memory.upb.h +6 -2
  152. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.c +1 -1
  153. data/src/core/ext/upb-generated/envoy/admin/v3/metrics.upb.h +6 -2
  154. data/src/core/ext/upb-generated/envoy/admin/v3/mutex_stats.upb.h +6 -2
  155. data/src/core/ext/upb-generated/envoy/admin/v3/server_info.upb.h +12 -4
  156. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.c +1 -1
  157. data/src/core/ext/upb-generated/envoy/admin/v3/tap.upb.h +6 -2
  158. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  159. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -3
  160. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +14 -14
  161. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +90 -30
  162. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.c +21 -19
  163. data/src/core/ext/upb-generated/envoy/config/bootstrap/v3/bootstrap.upb.h +124 -34
  164. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +3 -3
  165. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +18 -6
  166. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +23 -22
  167. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +153 -48
  168. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +1 -1
  169. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +6 -2
  170. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +1 -1
  171. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +6 -2
  172. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.c +11 -11
  173. data/src/core/ext/upb-generated/envoy/config/common/matcher/v3/matcher.upb.h +84 -28
  174. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +7 -7
  175. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +42 -14
  176. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +1 -1
  177. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +6 -2
  178. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -23
  179. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +156 -48
  180. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +7 -7
  181. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +42 -14
  182. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +6 -2
  184. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +1 -1
  185. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +6 -2
  186. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.c +2 -2
  187. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_method_list.upb.h +12 -4
  188. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +12 -12
  189. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +78 -26
  190. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +9 -9
  191. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +54 -18
  192. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +1 -1
  193. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +6 -2
  194. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +21 -20
  195. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +117 -44
  196. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  197. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +6 -2
  198. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.c +2 -2
  199. data/src/core/ext/upb-generated/envoy/config/core/v3/resolver.upb.h +12 -4
  200. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +6 -2
  201. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  202. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +6 -2
  203. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.c +1 -1
  204. data/src/core/ext/upb-generated/envoy/config/core/v3/udp_socket_config.upb.h +6 -2
  205. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +3 -3
  206. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +18 -6
  207. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +5 -5
  208. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +36 -12
  209. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +3 -3
  210. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +30 -10
  211. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +1 -1
  212. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +6 -2
  213. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +37 -13
  214. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +170 -15
  215. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +5 -5
  216. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +42 -14
  217. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.c +1 -1
  218. data/src/core/ext/upb-generated/envoy/config/listener/v3/quic_config.upb.h +6 -2
  219. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +7 -4
  220. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +36 -4
  221. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.c +1 -1
  222. data/src/core/ext/upb-generated/envoy/config/metrics/v3/metrics_service.upb.h +6 -2
  223. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.c +6 -6
  224. data/src/core/ext/upb-generated/envoy/config/metrics/v3/stats.upb.h +48 -16
  225. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.c +8 -8
  226. data/src/core/ext/upb-generated/envoy/config/overload/v3/overload.upb.h +54 -18
  227. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +21 -9
  228. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +100 -14
  229. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -22
  230. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +36 -77
  231. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +121 -76
  232. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +647 -163
  233. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +3 -3
  234. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +18 -6
  235. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.c +34 -15
  236. data/src/core/ext/upb-generated/envoy/config/tap/v3/common.upb.h +161 -22
  237. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.c +1 -1
  238. data/src/core/ext/upb-generated/envoy/config/trace/v3/datadog.upb.h +6 -2
  239. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.c +1 -1
  240. data/src/core/ext/upb-generated/envoy/config/trace/v3/dynamic_ot.upb.h +6 -2
  241. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +2 -2
  242. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +12 -4
  243. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.c +1 -1
  244. data/src/core/ext/upb-generated/envoy/config/trace/v3/lightstep.upb.h +6 -2
  245. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.c +1 -1
  246. data/src/core/ext/upb-generated/envoy/config/trace/v3/opencensus.upb.h +6 -2
  247. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.c +46 -0
  248. data/src/core/ext/upb-generated/envoy/config/trace/v3/opentelemetry.upb.h +98 -0
  249. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.c +1 -1
  250. data/src/core/ext/upb-generated/envoy/config/trace/v3/service.upb.h +6 -2
  251. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.c +2 -2
  252. data/src/core/ext/upb-generated/envoy/config/trace/v3/skywalking.upb.h +12 -4
  253. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.c +1 -0
  254. data/src/core/ext/upb-generated/envoy/config/trace/v3/trace.upb.h +1 -0
  255. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.c +2 -2
  256. data/src/core/ext/upb-generated/envoy/config/trace/v3/xray.upb.h +12 -4
  257. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.c +1 -1
  258. data/src/core/ext/upb-generated/envoy/config/trace/v3/zipkin.upb.h +6 -2
  259. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +1 -1
  260. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +6 -2
  261. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.c +2 -2
  262. data/src/core/ext/upb-generated/envoy/extensions/filters/common/fault/v3/fault.upb.h +30 -10
  263. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.c +2 -2
  264. data/src/core/ext/upb-generated/envoy/extensions/filters/http/fault/v3/fault.upb.h +18 -6
  265. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +11 -4
  266. data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +58 -4
  267. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.c +1 -1
  268. data/src/core/ext/upb-generated/envoy/extensions/filters/http/router/v3/router.upb.h +6 -2
  269. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +35 -27
  270. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +177 -52
  271. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.c +52 -0
  272. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/ring_hash/v3/ring_hash.upb.h +168 -0
  273. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.c +46 -0
  274. data/src/core/ext/upb-generated/envoy/extensions/load_balancing_policies/wrr_locality/v3/wrr_locality.upb.h +98 -0
  275. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +10 -8
  276. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +66 -14
  277. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +3 -3
  278. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +18 -6
  279. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +5 -5
  280. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +42 -14
  281. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.c +2 -2
  282. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls_spiffe_validator_config.upb.h +12 -4
  283. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  284. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +6 -2
  285. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +131 -16
  286. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +632 -12
  287. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +2 -2
  288. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +12 -4
  289. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.c +5 -5
  290. data/src/core/ext/upb-generated/envoy/service/status/v3/csds.upb.h +30 -10
  291. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.c +1 -1
  292. data/src/core/ext/upb-generated/envoy/type/http/v3/cookie.upb.h +6 -2
  293. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.c +4 -4
  294. data/src/core/ext/upb-generated/envoy/type/http/v3/path_transformation.upb.h +24 -8
  295. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.c +4 -4
  296. data/src/core/ext/upb-generated/envoy/type/matcher/v3/http_inputs.upb.h +24 -8
  297. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +2 -2
  298. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +12 -4
  299. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.c +1 -1
  300. data/src/core/ext/upb-generated/envoy/type/matcher/v3/node.upb.h +6 -2
  301. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  302. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +6 -2
  303. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  304. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +6 -2
  305. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +3 -3
  306. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +18 -6
  307. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +1 -1
  308. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +12 -4
  309. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.c +2 -2
  310. data/src/core/ext/upb-generated/envoy/type/matcher/v3/struct.upb.h +12 -4
  311. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  312. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +18 -6
  313. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  314. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +42 -14
  315. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +5 -5
  316. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +30 -10
  317. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.c +3 -3
  318. data/src/core/ext/upb-generated/envoy/type/v3/hash_policy.upb.h +18 -6
  319. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.c +1 -1
  320. data/src/core/ext/upb-generated/envoy/type/v3/http_status.upb.h +6 -2
  321. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +12 -4
  322. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +2 -2
  323. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +18 -6
  324. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.c +63 -0
  325. data/src/core/ext/upb-generated/envoy/type/v3/ratelimit_strategy.upb.h +202 -0
  326. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  327. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +6 -2
  328. data/src/core/ext/upb-generated/envoy/type/v3/token_bucket.upb.h +6 -2
  329. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -1
  330. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +11 -11
  331. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +66 -22
  332. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +9 -9
  333. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +72 -24
  334. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  335. data/src/core/ext/upb-generated/google/api/http.upb.h +18 -6
  336. data/src/core/ext/upb-generated/google/api/httpbody.upb.c +1 -1
  337. data/src/core/ext/upb-generated/google/api/httpbody.upb.h +6 -2
  338. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  339. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +6 -2
  340. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +44 -43
  341. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +177 -55
  342. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  343. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +6 -2
  344. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  345. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +6 -2
  346. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +2 -2
  347. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +18 -6
  348. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  349. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +6 -2
  350. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +6 -6
  351. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +54 -18
  352. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  353. data/src/core/ext/upb-generated/google/rpc/status.upb.h +6 -2
  354. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.c +2 -2
  355. data/src/core/ext/upb-generated/opencensus/proto/trace/v1/trace_config.upb.h +24 -8
  356. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +6 -2
  357. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +7 -7
  358. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +60 -20
  359. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +1 -1
  360. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +12 -4
  361. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  362. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +12 -4
  363. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +6 -6
  364. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +54 -18
  365. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +2 -2
  366. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +12 -4
  367. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.c +7 -7
  368. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls_config.upb.h +42 -14
  369. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  370. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +23 -11
  371. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  372. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -3
  373. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +7 -3
  374. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  375. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -3
  376. data/src/core/ext/upb-generated/validate/validate.upb.c +22 -22
  377. data/src/core/ext/upb-generated/validate/validate.upb.h +139 -47
  378. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.c +3 -3
  379. data/src/core/ext/upb-generated/xds/annotations/v3/migrate.upb.h +23 -11
  380. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.c +1 -1
  381. data/src/core/ext/upb-generated/xds/annotations/v3/security.upb.h +7 -3
  382. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +3 -3
  383. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +27 -11
  384. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.c +1 -1
  385. data/src/core/ext/upb-generated/xds/annotations/v3/versioning.upb.h +7 -3
  386. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  387. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +6 -2
  388. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +2 -2
  389. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +12 -4
  390. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  391. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +6 -2
  392. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.c +1 -1
  393. data/src/core/ext/upb-generated/xds/core/v3/extension.upb.h +6 -2
  394. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  395. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +6 -2
  396. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  397. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +12 -4
  398. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  399. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +6 -2
  400. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +6 -2
  401. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.c +1 -1
  402. data/src/core/ext/upb-generated/xds/service/orca/v3/orca.upb.h +6 -2
  403. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.c +6 -6
  404. data/src/core/ext/upb-generated/xds/type/matcher/v3/matcher.upb.h +54 -18
  405. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.c +2 -2
  406. data/src/core/ext/upb-generated/xds/type/matcher/v3/regex.upb.h +12 -4
  407. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.c +1 -1
  408. data/src/core/ext/upb-generated/xds/type/matcher/v3/string.upb.h +12 -4
  409. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.c +1 -1
  410. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +6 -2
  411. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.c +67 -274
  412. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump.upbdefs.h +0 -85
  413. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.c +256 -0
  414. data/src/core/ext/upbdefs-generated/envoy/admin/v3/config_dump_shared.upbdefs.h +115 -0
  415. data/src/core/ext/upbdefs-generated/envoy/admin/v3/listeners.upbdefs.c +14 -11
  416. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +107 -107
  417. data/src/core/ext/upbdefs-generated/envoy/config/bootstrap/v3/bootstrap.upbdefs.c +191 -187
  418. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +156 -154
  419. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +186 -183
  420. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +136 -134
  421. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +16 -16
  422. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +162 -139
  423. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +5 -0
  424. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +39 -31
  425. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +12 -8
  426. data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  427. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +72 -75
  428. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +0 -5
  429. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +713 -670
  430. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +10 -0
  431. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.c +150 -139
  432. data/src/core/ext/upbdefs-generated/envoy/config/tap/v3/common.upbdefs.h +5 -0
  433. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.c +47 -0
  434. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/opentelemetry.upbdefs.h +35 -0
  435. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/trace.upbdefs.c +16 -12
  436. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +46 -25
  437. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +477 -466
  438. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +21 -18
  439. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +153 -84
  440. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +35 -0
  441. data/src/core/ext/upbdefs-generated/envoy/service/status/v3/csds.upbdefs.c +113 -113
  442. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +29 -28
  443. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.c +69 -0
  444. data/src/core/ext/upbdefs-generated/envoy/type/v3/ratelimit_strategy.upbdefs.h +40 -0
  445. data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +92 -90
  446. data/src/core/ext/xds/certificate_provider_factory.h +6 -1
  447. data/src/core/ext/xds/certificate_provider_registry.cc +8 -8
  448. data/src/core/ext/xds/certificate_provider_registry.h +3 -1
  449. data/src/core/ext/xds/certificate_provider_store.cc +2 -0
  450. data/src/core/ext/xds/certificate_provider_store.h +9 -0
  451. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +9 -0
  452. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +8 -0
  453. data/src/core/ext/xds/upb_utils.h +0 -22
  454. data/src/core/ext/xds/xds_api.cc +68 -103
  455. data/src/core/ext/xds/xds_api.h +30 -32
  456. data/src/core/ext/xds/xds_bootstrap.cc +69 -69
  457. data/src/core/ext/xds/xds_bootstrap.h +37 -19
  458. data/src/core/ext/xds/xds_certificate_provider.cc +12 -3
  459. data/src/core/ext/xds/xds_certificate_provider.h +25 -1
  460. data/src/core/ext/xds/xds_channel_stack_modifier.cc +15 -4
  461. data/src/core/ext/xds/xds_channel_stack_modifier.h +13 -1
  462. data/src/core/ext/xds/xds_client.cc +583 -1193
  463. data/src/core/ext/xds/xds_client.h +28 -42
  464. data/src/core/ext/xds/xds_client_grpc.cc +291 -0
  465. data/src/core/ext/xds/xds_client_grpc.h +102 -0
  466. data/src/core/ext/xds/xds_client_stats.cc +3 -4
  467. data/src/core/ext/xds/xds_client_stats.h +4 -3
  468. data/src/core/ext/xds/xds_cluster.cc +107 -107
  469. data/src/core/ext/xds/xds_cluster.h +14 -5
  470. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +23 -18
  471. data/src/core/ext/xds/xds_cluster_specifier_plugin.h +2 -8
  472. data/src/core/ext/xds/xds_common_types.cc +161 -123
  473. data/src/core/ext/xds/xds_common_types.h +16 -9
  474. data/src/core/ext/xds/xds_endpoint.cc +95 -85
  475. data/src/core/ext/xds/xds_endpoint.h +16 -8
  476. data/src/core/ext/xds/xds_http_fault_filter.cc +11 -16
  477. data/src/core/ext/xds/xds_http_fault_filter.h +5 -3
  478. data/src/core/ext/xds/xds_http_filters.cc +7 -0
  479. data/src/core/ext/xds/xds_http_filters.h +5 -5
  480. data/src/core/ext/xds/xds_http_rbac_filter.cc +52 -55
  481. data/src/core/ext/xds/xds_http_rbac_filter.h +8 -1
  482. data/src/core/ext/xds/xds_lb_policy_registry.cc +288 -0
  483. data/src/core/ext/xds/xds_lb_policy_registry.h +72 -0
  484. data/src/core/ext/xds/xds_listener.cc +355 -307
  485. data/src/core/ext/xds/xds_listener.h +13 -4
  486. data/src/core/ext/xds/xds_resource_type.h +16 -5
  487. data/src/core/ext/xds/xds_resource_type_impl.h +7 -3
  488. data/src/core/ext/xds/xds_route_config.cc +215 -184
  489. data/src/core/ext/xds/xds_route_config.h +39 -16
  490. data/src/core/ext/xds/xds_routing.cc +19 -6
  491. data/src/core/ext/xds/xds_routing.h +12 -9
  492. data/src/core/ext/xds/xds_server_config_fetcher.cc +124 -81
  493. data/src/core/ext/xds/xds_transport.h +86 -0
  494. data/src/core/ext/xds/xds_transport_grpc.cc +349 -0
  495. data/src/core/ext/xds/xds_transport_grpc.h +135 -0
  496. data/src/core/lib/address_utils/parse_address.cc +24 -25
  497. data/src/core/lib/address_utils/parse_address.h +11 -7
  498. data/src/core/lib/address_utils/sockaddr_utils.cc +8 -7
  499. data/src/core/lib/address_utils/sockaddr_utils.h +2 -0
  500. data/src/core/lib/avl/avl.h +47 -25
  501. data/src/core/lib/backoff/backoff.cc +1 -1
  502. data/src/core/lib/backoff/backoff.h +1 -1
  503. data/src/core/lib/channel/call_tracer.h +4 -4
  504. data/src/core/lib/channel/channel_args.cc +88 -19
  505. data/src/core/lib/channel/channel_args.h +114 -62
  506. data/src/core/lib/channel/channel_args_preconditioning.cc +1 -0
  507. data/src/core/lib/channel/channel_fwd.h +26 -0
  508. data/src/core/lib/channel/channel_stack.cc +4 -5
  509. data/src/core/lib/channel/channel_stack.h +1 -11
  510. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  511. data/src/core/lib/channel/channel_stack_builder.h +4 -7
  512. data/src/core/lib/channel/channel_stack_builder_impl.cc +3 -5
  513. data/src/core/lib/channel/channel_stack_builder_impl.h +1 -0
  514. data/src/core/lib/channel/channelz.cc +28 -37
  515. data/src/core/lib/channel/channelz.h +11 -3
  516. data/src/core/lib/channel/channelz_registry.cc +4 -5
  517. data/src/core/lib/channel/connected_channel.cc +1 -0
  518. data/src/core/lib/channel/connected_channel.h +1 -0
  519. data/src/core/lib/channel/promise_based_filter.cc +11 -5
  520. data/src/core/lib/channel/promise_based_filter.h +2 -1
  521. data/src/core/lib/compression/compression.cc +6 -1
  522. data/src/core/lib/compression/compression_internal.cc +3 -6
  523. data/src/core/lib/compression/compression_internal.h +3 -2
  524. data/src/core/lib/compression/message_compress.cc +3 -1
  525. data/src/core/lib/compression/message_compress.h +2 -3
  526. data/src/core/lib/config/core_configuration.h +48 -35
  527. data/src/core/lib/debug/stats.cc +15 -18
  528. data/src/core/lib/debug/stats.h +13 -4
  529. data/src/core/lib/debug/stats_data.cc +2 -1
  530. data/src/core/lib/debug/stats_data.h +0 -4
  531. data/src/core/lib/debug/trace.h +13 -12
  532. data/src/core/lib/event_engine/default_event_engine.cc +71 -0
  533. data/src/core/lib/event_engine/{event_engine_factory.h → default_event_engine.h} +6 -10
  534. data/src/core/lib/event_engine/default_event_engine_factory.cc +20 -3
  535. data/src/core/lib/event_engine/default_event_engine_factory.h +33 -0
  536. data/src/core/lib/event_engine/executor/executor.h +38 -0
  537. data/src/core/lib/event_engine/executor/threaded_executor.cc +36 -0
  538. data/src/core/lib/event_engine/executor/threaded_executor.h +44 -0
  539. data/src/core/lib/event_engine/forkable.cc +98 -0
  540. data/src/core/lib/event_engine/forkable.h +61 -0
  541. data/src/core/lib/event_engine/poller.h +54 -0
  542. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +142 -0
  543. data/src/core/lib/event_engine/{iomgr_engine.h → posix_engine/posix_engine.h} +35 -32
  544. data/src/core/lib/event_engine/posix_engine/timer.cc +311 -0
  545. data/src/core/lib/event_engine/posix_engine/timer.h +193 -0
  546. data/src/core/lib/event_engine/posix_engine/timer_heap.cc +107 -0
  547. data/src/core/lib/event_engine/posix_engine/timer_heap.h +56 -0
  548. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +290 -0
  549. data/src/core/lib/event_engine/posix_engine/timer_manager.h +120 -0
  550. data/src/core/lib/event_engine/promise.h +78 -0
  551. data/src/core/lib/event_engine/socket_notifier.h +55 -0
  552. data/src/core/lib/event_engine/thread_pool.cc +158 -0
  553. data/src/core/lib/event_engine/thread_pool.h +81 -0
  554. data/src/core/lib/event_engine/utils.cc +49 -0
  555. data/src/core/lib/event_engine/utils.h +40 -0
  556. data/src/core/lib/event_engine/windows/iocp.cc +149 -0
  557. data/src/core/lib/event_engine/windows/iocp.h +68 -0
  558. data/src/core/lib/event_engine/windows/win_socket.cc +196 -0
  559. data/src/core/lib/event_engine/windows/win_socket.h +120 -0
  560. data/src/core/lib/event_engine/windows/windows_engine.cc +159 -0
  561. data/src/core/lib/event_engine/windows/windows_engine.h +120 -0
  562. data/src/core/lib/gpr/time.cc +11 -9
  563. data/src/core/lib/gpr/time_posix.cc +6 -9
  564. data/src/core/lib/gpr/time_windows.cc +10 -7
  565. data/src/core/lib/gpr/useful.h +29 -0
  566. data/src/core/lib/gprpp/bitset.h +3 -13
  567. data/src/core/lib/gprpp/debug_location.h +39 -7
  568. data/src/core/lib/gprpp/manual_constructor.h +0 -68
  569. data/src/core/lib/gprpp/no_destruct.h +94 -0
  570. data/src/core/lib/gprpp/ref_counted_ptr.h +0 -1
  571. data/src/core/lib/gprpp/status_helper.cc +45 -30
  572. data/src/core/lib/gprpp/table.h +0 -1
  573. data/src/core/lib/gprpp/time.cc +8 -0
  574. data/src/core/lib/gprpp/time.h +4 -0
  575. data/src/core/lib/gprpp/time_averaged_stats.cc +60 -0
  576. data/src/core/lib/{iomgr → gprpp}/time_averaged_stats.h +29 -22
  577. data/src/core/lib/{iomgr → gprpp}/work_serializer.cc +34 -18
  578. data/src/core/lib/{iomgr → gprpp}/work_serializer.h +21 -28
  579. data/src/core/lib/http/format_request.cc +5 -4
  580. data/src/core/lib/http/format_request.h +1 -1
  581. data/src/core/lib/http/httpcli.cc +29 -35
  582. data/src/core/lib/http/httpcli.h +19 -3
  583. data/src/core/lib/http/httpcli_security_connector.cc +26 -14
  584. data/src/core/lib/http/httpcli_ssl_credentials.h +3 -1
  585. data/src/core/lib/http/parser.cc +6 -7
  586. data/src/core/lib/http/parser.h +3 -0
  587. data/src/core/lib/iomgr/call_combiner.cc +2 -28
  588. data/src/core/lib/iomgr/closure.h +0 -9
  589. data/src/core/lib/iomgr/combiner.cc +0 -20
  590. data/src/core/lib/iomgr/endpoint.h +1 -1
  591. data/src/core/lib/iomgr/endpoint_cfstream.cc +2 -2
  592. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -1
  593. data/src/core/lib/iomgr/error.cc +6 -777
  594. data/src/core/lib/iomgr/error.h +6 -147
  595. data/src/core/lib/iomgr/error_cfstream.cc +0 -5
  596. data/src/core/lib/iomgr/ev_epoll1_linux.cc +57 -18
  597. data/src/core/lib/iomgr/ev_epoll1_linux.h +1 -1
  598. data/src/core/lib/iomgr/ev_poll_posix.cc +94 -61
  599. data/src/core/lib/iomgr/ev_poll_posix.h +2 -2
  600. data/src/core/lib/iomgr/ev_posix.cc +54 -92
  601. data/src/core/lib/iomgr/ev_posix.h +5 -3
  602. data/src/core/lib/iomgr/exec_ctx.cc +0 -12
  603. data/src/core/lib/iomgr/executor.cc +0 -10
  604. data/src/core/lib/iomgr/executor.h +0 -3
  605. data/src/core/lib/iomgr/fork_posix.cc +1 -1
  606. data/src/core/lib/iomgr/iomgr.cc +7 -0
  607. data/src/core/lib/iomgr/iomgr_posix.cc +1 -0
  608. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -0
  609. data/src/core/lib/iomgr/load_file.cc +1 -1
  610. data/src/core/lib/iomgr/lockfree_event.cc +0 -17
  611. data/src/core/lib/iomgr/port.h +3 -0
  612. data/src/core/lib/iomgr/resolve_address.h +29 -6
  613. data/src/core/lib/iomgr/resolve_address_posix.cc +39 -9
  614. data/src/core/lib/iomgr/resolve_address_posix.h +19 -5
  615. data/src/core/lib/iomgr/resolve_address_windows.cc +41 -11
  616. data/src/core/lib/iomgr/resolve_address_windows.h +19 -5
  617. data/src/core/lib/iomgr/socket_windows.h +0 -2
  618. data/src/core/lib/iomgr/tcp_client.cc +12 -7
  619. data/src/core/lib/iomgr/tcp_client.h +24 -13
  620. data/src/core/lib/iomgr/tcp_client_cfstream.cc +15 -9
  621. data/src/core/lib/iomgr/tcp_client_posix.cc +143 -25
  622. data/src/core/lib/iomgr/tcp_client_posix.h +1 -1
  623. data/src/core/lib/iomgr/tcp_client_windows.cc +14 -10
  624. data/src/core/lib/iomgr/tcp_posix.cc +207 -33
  625. data/src/core/lib/iomgr/tcp_server_posix.cc +7 -7
  626. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +12 -12
  627. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +2 -2
  628. data/src/core/lib/iomgr/tcp_server_windows.cc +7 -7
  629. data/src/core/lib/iomgr/tcp_windows.cc +5 -5
  630. data/src/core/lib/iomgr/timer_generic.cc +6 -8
  631. data/src/core/lib/iomgr/unix_sockets_posix.cc +2 -2
  632. data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
  633. data/src/core/lib/iomgr/wakeup_fd_posix.cc +15 -12
  634. data/src/core/lib/iomgr/wakeup_fd_posix.h +0 -2
  635. data/src/core/lib/json/json.h +19 -22
  636. data/src/core/lib/json/json_args.h +34 -0
  637. data/src/core/lib/json/json_object_loader.cc +233 -0
  638. data/src/core/lib/json/json_object_loader.h +618 -0
  639. data/src/core/lib/json/json_reader.cc +86 -62
  640. data/src/core/lib/json/json_util.cc +8 -36
  641. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.cc +3 -44
  642. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy.h +15 -31
  643. data/src/core/lib/load_balancing/lb_policy_factory.h +49 -0
  644. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.cc +48 -73
  645. data/src/core/{ext/filters/client_channel → lib/load_balancing}/lb_policy_registry.h +27 -27
  646. data/src/core/{ext/filters/client_channel → lib/load_balancing}/subchannel_interface.h +16 -24
  647. data/src/core/lib/matchers/matchers.cc +6 -3
  648. data/src/core/lib/matchers/matchers.h +2 -0
  649. data/src/core/lib/promise/activity.cc +0 -1
  650. data/src/core/lib/promise/activity.h +56 -14
  651. data/src/core/lib/promise/arena_promise.h +84 -81
  652. data/src/core/lib/promise/context.h +0 -1
  653. data/src/core/lib/promise/detail/basic_seq.h +43 -23
  654. data/src/core/lib/promise/detail/promise_factory.h +0 -1
  655. data/src/core/lib/promise/loop.h +1 -0
  656. data/src/core/lib/promise/map.h +0 -1
  657. data/src/core/lib/promise/promise.h +1 -0
  658. data/src/core/lib/promise/seq.h +25 -4
  659. data/src/core/lib/promise/sleep.cc +43 -42
  660. data/src/core/lib/promise/sleep.h +31 -28
  661. data/src/core/lib/promise/try_seq.h +26 -6
  662. data/src/core/lib/resolver/resolver.cc +0 -42
  663. data/src/core/lib/resolver/resolver.h +5 -12
  664. data/src/core/lib/resolver/resolver_factory.h +6 -4
  665. data/src/core/lib/resolver/resolver_registry.cc +3 -10
  666. data/src/core/lib/resolver/resolver_registry.h +12 -2
  667. data/src/core/lib/resolver/server_address.cc +19 -15
  668. data/src/core/lib/resolver/server_address.h +11 -8
  669. data/src/core/lib/resource_quota/api.cc +1 -1
  670. data/src/core/lib/resource_quota/arena.cc +21 -1
  671. data/src/core/lib/resource_quota/arena.h +24 -2
  672. data/src/core/lib/resource_quota/memory_quota.cc +171 -73
  673. data/src/core/lib/resource_quota/memory_quota.h +109 -42
  674. data/src/core/lib/resource_quota/periodic_update.cc +79 -0
  675. data/src/core/lib/resource_quota/periodic_update.h +71 -0
  676. data/src/core/lib/security/authorization/authorization_policy_provider.h +7 -0
  677. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +4 -0
  678. data/src/core/lib/security/authorization/evaluate_args.cc +17 -8
  679. data/src/core/lib/security/authorization/evaluate_args.h +6 -3
  680. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +6 -0
  681. data/src/core/lib/security/authorization/grpc_authorization_engine.h +7 -0
  682. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +12 -1
  683. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +13 -2
  684. data/src/core/lib/security/authorization/matchers.cc +20 -9
  685. data/src/core/lib/security/authorization/matchers.h +7 -0
  686. data/src/core/lib/security/authorization/rbac_policy.cc +4 -0
  687. data/src/core/lib/security/authorization/rbac_policy.h +7 -0
  688. data/src/core/lib/security/context/security_context.cc +5 -2
  689. data/src/core/lib/security/context/security_context.h +14 -2
  690. data/src/core/lib/security/credentials/alts/alts_credentials.cc +6 -5
  691. data/src/core/lib/security/credentials/alts/alts_credentials.h +8 -4
  692. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +1 -3
  693. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -4
  694. data/src/core/lib/security/credentials/call_creds_util.cc +8 -0
  695. data/src/core/lib/security/credentials/call_creds_util.h +1 -0
  696. data/src/core/lib/security/credentials/channel_creds_registry.h +6 -1
  697. data/src/core/lib/security/credentials/channel_creds_registry_init.cc +10 -0
  698. data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -9
  699. data/src/core/lib/security/credentials/composite/composite_credentials.h +17 -5
  700. data/src/core/lib/security/credentials/credentials.cc +4 -8
  701. data/src/core/lib/security/credentials/credentials.h +26 -20
  702. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +45 -20
  703. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +10 -0
  704. data/src/core/lib/security/credentials/external/aws_request_signer.cc +9 -0
  705. data/src/core/lib/security/credentials/external/external_account_credentials.cc +53 -29
  706. data/src/core/lib/security/credentials/external/external_account_credentials.h +11 -0
  707. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +15 -8
  708. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +6 -0
  709. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +23 -9
  710. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +10 -0
  711. data/src/core/lib/security/credentials/fake/fake_credentials.cc +10 -17
  712. data/src/core/lib/security/credentials/fake/fake_credentials.h +13 -5
  713. data/src/core/lib/security/credentials/google_default/credentials_generic.cc +1 -0
  714. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +55 -35
  715. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -3
  716. data/src/core/lib/security/credentials/iam/iam_credentials.cc +8 -3
  717. data/src/core/lib/security/credentials/iam/iam_credentials.h +10 -0
  718. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +7 -3
  719. data/src/core/lib/security/credentials/insecure/insecure_credentials.h +7 -3
  720. data/src/core/lib/security/credentials/jwt/json_token.cc +17 -5
  721. data/src/core/lib/security/credentials/jwt/json_token.h +2 -2
  722. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +12 -10
  723. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +14 -0
  724. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +37 -14
  725. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +4 -2
  726. data/src/core/lib/security/credentials/local/local_credentials.cc +7 -7
  727. data/src/core/lib/security/credentials/local/local_credentials.h +9 -3
  728. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +41 -29
  729. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +20 -0
  730. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +7 -7
  731. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -0
  732. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +18 -21
  733. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +15 -3
  734. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +6 -6
  735. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +9 -3
  736. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +29 -10
  737. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +15 -4
  738. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.cc +9 -2
  739. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_verifier.h +6 -7
  740. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +4 -5
  741. data/src/core/lib/security/credentials/tls/tls_credentials.cc +19 -26
  742. data/src/core/lib/security/credentials/tls/tls_credentials.h +7 -4
  743. data/src/core/lib/security/credentials/tls/tls_utils.cc +2 -0
  744. data/src/core/lib/security/credentials/tls/tls_utils.h +1 -1
  745. data/src/core/lib/security/credentials/xds/xds_credentials.cc +21 -31
  746. data/src/core/lib/security/credentials/xds/xds_credentials.h +16 -2
  747. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +30 -18
  748. data/src/core/lib/security/security_connector/alts/alts_security_connector.h +6 -3
  749. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +42 -38
  750. data/src/core/lib/security/security_connector/fake/fake_security_connector.h +3 -3
  751. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +13 -4
  752. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +21 -5
  753. data/src/core/lib/security/security_connector/load_system_roots_fallback.cc +5 -3
  754. data/src/core/lib/security/security_connector/{load_system_roots_linux.cc → load_system_roots_supported.cc} +27 -19
  755. data/src/core/lib/security/security_connector/{load_system_roots_linux.h → load_system_roots_supported.h} +5 -5
  756. data/src/core/lib/security/security_connector/local/local_security_connector.cc +34 -13
  757. data/src/core/lib/security/security_connector/local/local_security_connector.h +7 -3
  758. data/src/core/lib/security/security_connector/security_connector.cc +20 -18
  759. data/src/core/lib/security/security_connector/security_connector.h +23 -9
  760. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +21 -8
  761. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.h +4 -2
  762. data/src/core/lib/security/security_connector/ssl_utils.cc +12 -2
  763. data/src/core/lib/security/security_connector/ssl_utils.h +10 -7
  764. data/src/core/lib/security/security_connector/ssl_utils_config.h +1 -1
  765. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +25 -17
  766. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +27 -7
  767. data/src/core/lib/security/transport/auth_filters.h +8 -1
  768. data/src/core/lib/security/transport/client_auth_filter.cc +19 -11
  769. data/src/core/lib/security/transport/secure_endpoint.cc +63 -13
  770. data/src/core/lib/security/transport/secure_endpoint.h +4 -3
  771. data/src/core/lib/security/transport/security_handshaker.cc +70 -49
  772. data/src/core/lib/security/transport/security_handshaker.h +6 -1
  773. data/src/core/lib/security/transport/server_auth_filter.cc +26 -4
  774. data/src/core/lib/security/util/json_util.cc +3 -2
  775. data/src/core/lib/security/util/json_util.h +0 -2
  776. data/src/core/lib/service_config/service_config.h +11 -0
  777. data/src/core/lib/service_config/service_config_call_data.h +2 -1
  778. data/src/core/lib/service_config/service_config_impl.cc +98 -97
  779. data/src/core/lib/service_config/service_config_impl.h +12 -16
  780. data/src/core/lib/service_config/service_config_parser.cc +26 -29
  781. data/src/core/lib/service_config/service_config_parser.h +10 -22
  782. data/src/core/lib/slice/percent_encoding.cc +4 -13
  783. data/src/core/lib/slice/slice.cc +10 -4
  784. data/src/core/lib/slice/slice_buffer.cc +30 -1
  785. data/src/core/lib/slice/slice_buffer.h +37 -6
  786. data/src/core/lib/slice/slice_string_helpers.cc +0 -20
  787. data/src/core/lib/slice/slice_string_helpers.h +0 -4
  788. data/src/core/lib/surface/call.cc +61 -117
  789. data/src/core/lib/surface/call.h +5 -1
  790. data/src/core/lib/surface/channel.cc +6 -6
  791. data/src/core/lib/surface/channel.h +3 -1
  792. data/src/core/lib/surface/channel_ping.cc +1 -1
  793. data/src/core/lib/surface/completion_queue.cc +15 -16
  794. data/src/core/lib/surface/completion_queue.h +2 -4
  795. data/src/core/lib/surface/init.cc +2 -7
  796. data/src/core/lib/surface/lame_client.cc +3 -4
  797. data/src/core/lib/surface/lame_client.h +2 -2
  798. data/src/core/lib/surface/server.cc +21 -20
  799. data/src/core/lib/surface/server.h +11 -8
  800. data/src/core/lib/surface/validate_metadata.cc +5 -15
  801. data/src/core/lib/surface/version.cc +2 -2
  802. data/src/core/lib/transport/connectivity_state.cc +0 -1
  803. data/src/core/lib/transport/connectivity_state.h +1 -1
  804. data/src/core/lib/transport/error_utils.cc +9 -39
  805. data/src/core/lib/transport/handshaker.cc +10 -12
  806. data/src/core/lib/transport/handshaker.h +4 -5
  807. data/src/core/lib/transport/handshaker_factory.h +2 -3
  808. data/src/core/lib/transport/handshaker_registry.cc +2 -1
  809. data/src/core/lib/transport/handshaker_registry.h +2 -4
  810. data/src/core/lib/transport/http_connect_handshaker.cc +20 -20
  811. data/src/core/lib/transport/metadata_batch.cc +5 -0
  812. data/src/core/lib/transport/metadata_batch.h +52 -7
  813. data/src/core/lib/transport/parsed_metadata.h +0 -1
  814. data/src/core/lib/transport/tcp_connect_handshaker.cc +14 -20
  815. data/src/core/lib/transport/transport.cc +0 -3
  816. data/src/core/lib/transport/transport.h +20 -21
  817. data/src/core/lib/transport/transport_fwd.h +20 -0
  818. data/src/core/lib/transport/transport_impl.h +1 -0
  819. data/src/core/lib/transport/transport_op_string.cc +9 -9
  820. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +40 -21
  821. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +1 -1
  822. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +15 -8
  823. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +1 -1
  824. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +9 -1
  825. data/src/core/tsi/fake_transport_security.cc +66 -31
  826. data/src/core/tsi/fake_transport_security.h +6 -0
  827. data/src/core/tsi/local_transport_security.cc +9 -5
  828. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +10 -1
  829. data/src/core/tsi/ssl_transport_security.cc +48 -24
  830. data/src/core/tsi/transport_security.cc +18 -6
  831. data/src/core/tsi/transport_security.h +2 -1
  832. data/src/core/tsi/transport_security_grpc.cc +3 -2
  833. data/src/core/tsi/transport_security_grpc.h +5 -2
  834. data/src/core/tsi/transport_security_interface.h +17 -5
  835. data/src/ruby/ext/grpc/ext-export-truffleruby.clang +2 -0
  836. data/src/ruby/ext/grpc/ext-export-truffleruby.gcc +7 -0
  837. data/src/ruby/ext/grpc/ext-export.clang +1 -0
  838. data/src/ruby/ext/grpc/ext-export.gcc +1 -0
  839. data/src/ruby/ext/grpc/extconf.rb +51 -18
  840. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  841. data/src/ruby/ext/grpc/rb_loader.c +6 -2
  842. data/src/ruby/lib/grpc/2.5/grpc_c.so +0 -0
  843. data/src/ruby/lib/grpc/2.6/grpc_c.so +0 -0
  844. data/src/ruby/lib/grpc/2.7/grpc_c.so +0 -0
  845. data/src/ruby/lib/grpc/3.0/grpc_c.so +0 -0
  846. data/src/ruby/lib/grpc/3.1/grpc_c.so +0 -0
  847. data/src/ruby/lib/grpc/errors.rb +1 -1
  848. data/src/ruby/lib/grpc/grpc_c.so +0 -0
  849. data/src/ruby/lib/grpc/version.rb +1 -1
  850. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +4 -0
  851. data/src/ruby/spec/generic/client_stub_spec.rb +23 -23
  852. data/third_party/abseil-cpp/absl/algorithm/container.h +1 -1
  853. data/third_party/abseil-cpp/absl/base/attributes.h +49 -22
  854. data/third_party/abseil-cpp/absl/base/casts.h +61 -68
  855. data/third_party/abseil-cpp/absl/base/config.h +182 -41
  856. data/third_party/abseil-cpp/absl/base/internal/cycleclock.cc +12 -42
  857. data/third_party/abseil-cpp/absl/base/internal/cycleclock.h +67 -2
  858. data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +3 -3
  859. data/third_party/abseil-cpp/absl/base/internal/endian.h +17 -62
  860. data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +2 -0
  861. data/third_party/abseil-cpp/absl/base/internal/invoke.h +54 -0
  862. data/third_party/abseil-cpp/absl/base/internal/prefetch.h +138 -0
  863. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +29 -22
  864. data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +13 -12
  865. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +3 -0
  866. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +8 -0
  867. data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +2 -5
  868. data/third_party/abseil-cpp/absl/base/internal/strerror.cc +88 -0
  869. data/third_party/abseil-cpp/absl/base/internal/strerror.h +39 -0
  870. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +0 -1
  871. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +2 -1
  872. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +6 -7
  873. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +12 -3
  874. data/third_party/abseil-cpp/absl/base/log_severity.cc +28 -0
  875. data/third_party/abseil-cpp/absl/base/log_severity.h +51 -0
  876. data/third_party/abseil-cpp/absl/base/optimization.h +19 -11
  877. data/third_party/abseil-cpp/absl/base/options.h +1 -1
  878. data/third_party/abseil-cpp/absl/base/thread_annotations.h +2 -2
  879. data/third_party/abseil-cpp/absl/container/fixed_array.h +2 -0
  880. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +11 -4
  881. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +15 -9
  882. data/third_party/abseil-cpp/absl/container/inlined_vector.h +20 -9
  883. data/third_party/abseil-cpp/absl/container/internal/common.h +6 -5
  884. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +10 -28
  885. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +68 -20
  886. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +29 -11
  887. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +59 -38
  888. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +4 -0
  889. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +515 -184
  890. data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +45 -88
  891. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.cc +4 -0
  892. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +3 -2
  893. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +8 -3
  894. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +8 -3
  895. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +2 -1
  896. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +8 -3
  897. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +20 -18
  898. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  899. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +15 -2
  900. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +6 -1
  901. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +46 -7
  902. data/third_party/abseil-cpp/absl/functional/any_invocable.h +313 -0
  903. data/third_party/abseil-cpp/absl/functional/bind_front.h +10 -1
  904. data/third_party/abseil-cpp/absl/functional/function_ref.h +2 -1
  905. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +857 -0
  906. data/third_party/abseil-cpp/absl/hash/hash.h +82 -8
  907. data/third_party/abseil-cpp/absl/hash/internal/hash.h +218 -23
  908. data/third_party/abseil-cpp/absl/numeric/bits.h +2 -1
  909. data/third_party/abseil-cpp/absl/numeric/int128.cc +4 -2
  910. data/third_party/abseil-cpp/absl/numeric/int128.h +2 -2
  911. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +21 -6
  912. data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +4 -4
  913. data/third_party/abseil-cpp/absl/random/distributions.h +3 -3
  914. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +3 -0
  915. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +2 -1
  916. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +2 -2
  917. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +59 -48
  918. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +1 -1
  919. data/third_party/abseil-cpp/absl/random/internal/randen.h +5 -11
  920. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -2
  921. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +48 -23
  922. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +24 -26
  923. data/third_party/abseil-cpp/absl/random/internal/traits.h +53 -5
  924. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +5 -5
  925. data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +33 -48
  926. data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +9 -10
  927. data/third_party/abseil-cpp/absl/random/poisson_distribution.h +7 -4
  928. data/third_party/abseil-cpp/absl/random/seed_sequences.h +1 -0
  929. data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +2 -2
  930. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  931. data/third_party/abseil-cpp/absl/random/zipf_distribution.h +4 -3
  932. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +17 -0
  933. data/third_party/abseil-cpp/absl/status/status.cc +174 -2
  934. data/third_party/abseil-cpp/absl/status/status.h +22 -12
  935. data/third_party/abseil-cpp/absl/status/statusor.h +9 -3
  936. data/third_party/abseil-cpp/absl/strings/ascii.h +4 -4
  937. data/third_party/abseil-cpp/absl/strings/cord.cc +194 -913
  938. data/third_party/abseil-cpp/absl/strings/cord.h +202 -81
  939. data/third_party/abseil-cpp/absl/strings/cord_analysis.cc +188 -0
  940. data/third_party/abseil-cpp/absl/strings/cord_analysis.h +44 -0
  941. data/third_party/abseil-cpp/absl/strings/cord_buffer.cc +30 -0
  942. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +572 -0
  943. data/third_party/abseil-cpp/absl/strings/internal/cord_data_edge.h +63 -0
  944. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.cc +20 -32
  945. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +123 -88
  946. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +149 -49
  947. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree.h +44 -59
  948. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.cc +3 -1
  949. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_navigator.h +4 -2
  950. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.cc +3 -2
  951. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_btree_reader.h +5 -4
  952. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_consume.cc +7 -74
  953. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.cc +54 -0
  954. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_crc.h +102 -0
  955. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_flat.h +58 -17
  956. data/third_party/abseil-cpp/absl/strings/internal/cord_rep_ring.cc +13 -11
  957. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +11 -38
  958. data/third_party/abseil-cpp/absl/strings/internal/cordz_statistics.h +1 -0
  959. data/third_party/abseil-cpp/absl/strings/internal/cordz_update_tracker.h +4 -2
  960. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +6 -5
  961. data/third_party/abseil-cpp/absl/strings/internal/ostringstream.cc +1 -1
  962. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +1 -1
  963. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -1
  964. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +38 -7
  965. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -2
  966. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +4 -5
  967. data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +5 -2
  968. data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +2 -1
  969. data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  970. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +9 -6
  971. data/third_party/abseil-cpp/absl/strings/internal/string_constant.h +10 -2
  972. data/third_party/abseil-cpp/absl/strings/internal/utf8.cc +9 -9
  973. data/third_party/abseil-cpp/absl/strings/numbers.cc +8 -8
  974. data/third_party/abseil-cpp/absl/strings/numbers.h +26 -23
  975. data/third_party/abseil-cpp/absl/strings/str_cat.h +20 -13
  976. data/third_party/abseil-cpp/absl/strings/str_join.h +9 -15
  977. data/third_party/abseil-cpp/absl/strings/str_split.h +1 -2
  978. data/third_party/abseil-cpp/absl/strings/string_view.cc +2 -13
  979. data/third_party/abseil-cpp/absl/strings/string_view.h +3 -2
  980. data/third_party/abseil-cpp/absl/strings/strip.h +8 -6
  981. data/third_party/abseil-cpp/absl/strings/substitute.h +10 -2
  982. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +9 -6
  983. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.h +0 -4
  984. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.cc +0 -4
  985. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -6
  986. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +0 -25
  987. data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +10 -4
  988. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -40
  989. data/third_party/abseil-cpp/absl/synchronization/mutex.h +17 -9
  990. data/third_party/abseil-cpp/absl/synchronization/notification.h +3 -2
  991. data/third_party/abseil-cpp/absl/time/duration.cc +5 -4
  992. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +11 -7
  993. data/third_party/abseil-cpp/absl/time/time.h +16 -12
  994. data/third_party/abseil-cpp/absl/types/internal/optional.h +8 -0
  995. data/third_party/abseil-cpp/absl/types/internal/variant.h +3 -3
  996. data/third_party/abseil-cpp/absl/types/optional.h +17 -14
  997. data/third_party/abseil-cpp/absl/types/span.h +2 -1
  998. data/third_party/upb/third_party/utf8_range/utf8_range.h +1 -1
  999. data/third_party/upb/upb/arena.c +277 -0
  1000. data/third_party/upb/upb/arena.h +225 -0
  1001. data/third_party/upb/upb/array.c +114 -0
  1002. data/third_party/upb/upb/array.h +83 -0
  1003. data/third_party/upb/upb/collections.h +36 -0
  1004. data/third_party/upb/upb/decode.c +161 -65
  1005. data/third_party/upb/upb/decode.h +1 -0
  1006. data/third_party/upb/upb/decode_fast.c +1 -1
  1007. data/third_party/upb/upb/def.c +10 -2
  1008. data/third_party/upb/upb/def.h +8 -1
  1009. data/third_party/upb/upb/def.hpp +7 -4
  1010. data/third_party/upb/upb/encode.c +29 -20
  1011. data/third_party/upb/upb/encode.h +16 -6
  1012. data/third_party/upb/upb/extension_registry.c +93 -0
  1013. data/third_party/upb/upb/extension_registry.h +84 -0
  1014. data/third_party/upb/upb/{decode_internal.h → internal/decode.h} +5 -5
  1015. data/third_party/upb/upb/internal/table.h +385 -0
  1016. data/third_party/upb/upb/{upb_internal.h → internal/upb.h} +3 -3
  1017. data/third_party/upb/upb/internal/vsnprintf_compat.h +52 -0
  1018. data/third_party/upb/upb/json_decode.c +1512 -0
  1019. data/third_party/upb/upb/json_decode.h +47 -0
  1020. data/third_party/upb/upb/json_encode.c +7 -3
  1021. data/third_party/upb/upb/json_encode.h +6 -3
  1022. data/third_party/upb/upb/map.c +108 -0
  1023. data/third_party/upb/upb/map.h +117 -0
  1024. data/third_party/upb/upb/message_value.h +66 -0
  1025. data/third_party/upb/upb/mini_table.c +1147 -0
  1026. data/third_party/upb/upb/mini_table.h +189 -0
  1027. data/third_party/upb/upb/mini_table.hpp +112 -0
  1028. data/third_party/upb/upb/msg.c +2 -62
  1029. data/third_party/upb/upb/msg.h +2 -45
  1030. data/third_party/upb/upb/msg_internal.h +28 -22
  1031. data/third_party/upb/upb/port_def.inc +2 -1
  1032. data/third_party/upb/upb/port_undef.inc +1 -0
  1033. data/third_party/upb/upb/reflection.c +2 -159
  1034. data/third_party/upb/upb/reflection.h +2 -112
  1035. data/third_party/upb/upb/status.c +86 -0
  1036. data/third_party/upb/upb/status.h +66 -0
  1037. data/third_party/upb/upb/table.c +2 -2
  1038. data/third_party/upb/upb/table_internal.h +3 -352
  1039. data/third_party/upb/upb/text_encode.c +3 -2
  1040. data/third_party/upb/upb/upb.c +4 -290
  1041. data/third_party/upb/upb/upb.h +7 -196
  1042. metadata +113 -37
  1043. data/src/core/ext/filters/client_channel/lb_policy_factory.h +0 -50
  1044. data/src/core/lib/event_engine/event_engine.cc +0 -62
  1045. data/src/core/lib/event_engine/iomgr_engine.cc +0 -206
  1046. data/src/core/lib/iomgr/error_internal.h +0 -66
  1047. data/src/core/lib/iomgr/executor/mpmcqueue.cc +0 -182
  1048. data/src/core/lib/iomgr/executor/mpmcqueue.h +0 -171
  1049. data/src/core/lib/iomgr/executor/threadpool.cc +0 -136
  1050. data/src/core/lib/iomgr/executor/threadpool.h +0 -150
  1051. data/src/core/lib/iomgr/time_averaged_stats.cc +0 -64
  1052. data/src/core/lib/promise/detail/switch.h +0 -1455
  1053. data/src/core/lib/slice/slice_split.cc +0 -103
  1054. data/src/core/lib/slice/slice_split.h +0 -36
  1055. data/src/core/lib/transport/byte_stream.cc +0 -165
  1056. data/src/core/lib/transport/byte_stream.h +0 -170
  1057. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +0 -140
  1058. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +0 -100
  1059. data/third_party/abseil-cpp/absl/container/internal/have_sse.h +0 -50
@@ -18,10 +18,16 @@
18
18
 
19
19
  #include "src/core/ext/xds/xds_listener.h"
20
20
 
21
+ #include <stdint.h>
22
+
23
+ #include <set>
24
+ #include <utility>
25
+
26
+ #include "absl/memory/memory.h"
27
+ #include "absl/status/status.h"
21
28
  #include "absl/strings/str_cat.h"
22
29
  #include "absl/strings/str_format.h"
23
30
  #include "absl/strings/str_join.h"
24
- #include "absl/strings/str_split.h"
25
31
  #include "envoy/config/core/v3/address.upb.h"
26
32
  #include "envoy/config/core/v3/base.upb.h"
27
33
  #include "envoy/config/core/v3/config_source.upb.h"
@@ -30,18 +36,29 @@
30
36
  #include "envoy/config/listener/v3/listener.upb.h"
31
37
  #include "envoy/config/listener/v3/listener.upbdefs.h"
32
38
  #include "envoy/config/listener/v3/listener_components.upb.h"
39
+ #include "envoy/config/route/v3/route.upb.h"
33
40
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h"
34
41
  #include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h"
42
+ #include "envoy/extensions/transport_sockets/tls/v3/tls.upb.h"
43
+ #include "google/protobuf/any.upb.h"
44
+ #include "google/protobuf/duration.upb.h"
35
45
  #include "google/protobuf/wrappers.upb.h"
36
46
  #include "upb/text_encode.h"
37
47
  #include "upb/upb.h"
38
- #include "upb/upb.hpp"
39
48
 
49
+ #include <grpc/support/log.h>
50
+
51
+ #include "src/core/ext/xds/upb_utils.h"
40
52
  #include "src/core/ext/xds/xds_common_types.h"
53
+ #include "src/core/ext/xds/xds_resource_type.h"
41
54
  #include "src/core/lib/address_utils/parse_address.h"
42
55
  #include "src/core/lib/address_utils/sockaddr_utils.h"
56
+ #include "src/core/lib/debug/trace.h"
43
57
  #include "src/core/lib/gprpp/host_port.h"
58
+ #include "src/core/lib/gprpp/status_helper.h"
59
+ #include "src/core/lib/iomgr/error.h"
44
60
  #include "src/core/lib/iomgr/sockaddr.h"
61
+ #include "src/core/lib/json/json.h"
45
62
 
46
63
  namespace grpc_core {
47
64
 
@@ -64,7 +81,7 @@ bool XdsListenerResource::DownstreamTlsContext::Empty() const {
64
81
  //
65
82
 
66
83
  std::string XdsListenerResource::HttpConnectionManager::ToString() const {
67
- absl::InlinedVector<std::string, 4> contents;
84
+ std::vector<std::string> contents;
68
85
  contents.push_back(absl::StrFormat(
69
86
  "route_config_name=%s",
70
87
  !route_config_name.empty() ? route_config_name.c_str() : "<inlined>"));
@@ -140,7 +157,7 @@ struct FilterChain {
140
157
  };
141
158
 
142
159
  std::string FilterChain::FilterChainMatch::ToString() const {
143
- absl::InlinedVector<std::string, 8> contents;
160
+ std::vector<std::string> contents;
144
161
  if (destination_port != 0) {
145
162
  contents.push_back(absl::StrCat("destination_port=", destination_port));
146
163
  }
@@ -229,7 +246,7 @@ std::string XdsListenerResource::FilterChainMap::ToString() const {
229
246
  //
230
247
 
231
248
  std::string XdsListenerResource::ToString() const {
232
- absl::InlinedVector<std::string, 4> contents;
249
+ std::vector<std::string> contents;
233
250
  if (type == ListenerType::kTcpListener) {
234
251
  contents.push_back(absl::StrCat("address=", address));
235
252
  contents.push_back(
@@ -252,7 +269,7 @@ std::string XdsListenerResource::ToString() const {
252
269
  namespace {
253
270
 
254
271
  void MaybeLogHttpConnectionManager(
255
- const XdsEncodingContext& context,
272
+ const XdsResourceType::DecodeContext& context,
256
273
  const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
257
274
  http_connection_manager_config) {
258
275
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
@@ -268,25 +285,25 @@ void MaybeLogHttpConnectionManager(
268
285
  }
269
286
  }
270
287
 
271
- grpc_error_handle HttpConnectionManagerParse(
272
- bool is_client, const XdsEncodingContext& context,
288
+ absl::StatusOr<XdsListenerResource::HttpConnectionManager>
289
+ HttpConnectionManagerParse(
290
+ bool is_client, const XdsResourceType::DecodeContext& context,
273
291
  const envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager*
274
292
  http_connection_manager_proto,
275
- bool is_v2,
276
- XdsListenerResource::HttpConnectionManager* http_connection_manager) {
293
+ bool is_v2) {
277
294
  MaybeLogHttpConnectionManager(context, http_connection_manager_proto);
295
+ std::vector<std::string> errors;
296
+ XdsListenerResource::HttpConnectionManager http_connection_manager;
278
297
  // NACK a non-zero `xff_num_trusted_hops` and a `non-empty
279
298
  // original_ip_detection_extensions` as mentioned in
280
299
  // https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md
281
300
  if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_xff_num_trusted_hops(
282
301
  http_connection_manager_proto) != 0) {
283
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
284
- "'xff_num_trusted_hops' must be zero");
302
+ errors.emplace_back("'xff_num_trusted_hops' must be zero");
285
303
  }
286
304
  if (envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_has_original_ip_detection_extensions(
287
305
  http_connection_manager_proto)) {
288
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
289
- "'original_ip_detection_extensions' must be empty");
306
+ errors.emplace_back("'original_ip_detection_extensions' must be empty");
290
307
  }
291
308
  // Obtain max_stream_duration from Http Protocol Options.
292
309
  const envoy_config_core_v3_HttpProtocolOptions* options =
@@ -296,7 +313,7 @@ grpc_error_handle HttpConnectionManagerParse(
296
313
  const google_protobuf_Duration* duration =
297
314
  envoy_config_core_v3_HttpProtocolOptions_max_stream_duration(options);
298
315
  if (duration != nullptr) {
299
- http_connection_manager->http_max_stream_duration =
316
+ http_connection_manager.http_max_stream_duration =
300
317
  ParseDuration(duration);
301
318
  }
302
319
  }
@@ -313,12 +330,12 @@ grpc_error_handle HttpConnectionManagerParse(
313
330
  envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_name(
314
331
  http_filter));
315
332
  if (name.empty()) {
316
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
317
- absl::StrCat("empty filter name at index ", i));
333
+ errors.emplace_back(absl::StrCat("empty filter name at index ", i));
334
+ continue;
318
335
  }
319
336
  if (names_seen.find(name) != names_seen.end()) {
320
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
321
- absl::StrCat("duplicate HTTP filter name: ", name));
337
+ errors.emplace_back(absl::StrCat("duplicate HTTP filter name: ", name));
338
+ continue;
322
339
  }
323
340
  names_seen.insert(name);
324
341
  const bool is_optional =
@@ -328,56 +345,64 @@ grpc_error_handle HttpConnectionManagerParse(
328
345
  envoy_extensions_filters_network_http_connection_manager_v3_HttpFilter_typed_config(
329
346
  http_filter);
330
347
  if (any == nullptr) {
331
- if (is_optional) continue;
332
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
333
- absl::StrCat("no filter config specified for filter name ", name));
348
+ if (!is_optional) {
349
+ errors.emplace_back(absl::StrCat(
350
+ "no filter config specified for filter name ", name));
351
+ }
352
+ continue;
353
+ }
354
+ auto filter_type = ExtractExtensionTypeName(context, any);
355
+ if (!filter_type.ok()) {
356
+ errors.emplace_back(absl::StrCat("filter name ", name, ": ",
357
+ filter_type.status().message()));
358
+ continue;
334
359
  }
335
- absl::string_view filter_type;
336
- grpc_error_handle error =
337
- ExtractExtensionTypeName(context, any, &filter_type);
338
- if (error != GRPC_ERROR_NONE) return error;
339
360
  const XdsHttpFilterImpl* filter_impl =
340
- XdsHttpFilterRegistry::GetFilterForType(filter_type);
361
+ XdsHttpFilterRegistry::GetFilterForType(filter_type->type);
341
362
  if (filter_impl == nullptr) {
342
- if (is_optional) continue;
343
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
344
- absl::StrCat("no filter registered for config type ", filter_type));
363
+ if (!is_optional) {
364
+ errors.emplace_back(absl::StrCat(
365
+ "no filter registered for config type ", filter_type->type));
366
+ }
367
+ continue;
345
368
  }
346
369
  if ((is_client && !filter_impl->IsSupportedOnClients()) ||
347
370
  (!is_client && !filter_impl->IsSupportedOnServers())) {
348
- if (is_optional) continue;
349
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
350
- absl::StrFormat("Filter %s is not supported on %s", filter_type,
351
- is_client ? "clients" : "servers"));
371
+ if (!is_optional) {
372
+ errors.emplace_back(absl::StrFormat(
373
+ "Filter %s is not supported on %s", filter_type->type,
374
+ is_client ? "clients" : "servers"));
375
+ }
376
+ continue;
352
377
  }
353
378
  absl::StatusOr<XdsHttpFilterImpl::FilterConfig> filter_config =
354
379
  filter_impl->GenerateFilterConfig(google_protobuf_Any_value(any),
355
380
  context.arena);
356
381
  if (!filter_config.ok()) {
357
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
358
- "filter config for type ", filter_type,
382
+ errors.emplace_back(absl::StrCat(
383
+ "filter config for type ", filter_type->type,
359
384
  " failed to parse: ", StatusToString(filter_config.status())));
385
+ continue;
360
386
  }
361
- http_connection_manager->http_filters.emplace_back(
387
+ http_connection_manager.http_filters.emplace_back(
362
388
  XdsListenerResource::HttpConnectionManager::HttpFilter{
363
389
  std::string(name), std::move(*filter_config)});
364
390
  }
365
- if (http_connection_manager->http_filters.empty()) {
366
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
367
- "Expected at least one HTTP filter");
391
+ if (http_connection_manager.http_filters.empty()) {
392
+ errors.emplace_back("Expected at least one HTTP filter");
368
393
  }
369
394
  // Make sure that the last filter is terminal and non-last filters are
370
395
  // non-terminal. Note that this check is being performed in a separate loop
371
396
  // to take care of the case where there are two terminal filters in the list
372
397
  // out of which only one gets added in the final list.
373
- for (const auto& http_filter : http_connection_manager->http_filters) {
398
+ for (const auto& http_filter : http_connection_manager.http_filters) {
374
399
  const XdsHttpFilterImpl* filter_impl =
375
400
  XdsHttpFilterRegistry::GetFilterForType(
376
401
  http_filter.config.config_proto_type_name);
377
- if (&http_filter != &http_connection_manager->http_filters.back()) {
402
+ if (&http_filter != &http_connection_manager.http_filters.back()) {
378
403
  // Filters before the last filter must not be terminal.
379
404
  if (filter_impl->IsTerminalFilter()) {
380
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
405
+ errors.emplace_back(
381
406
  absl::StrCat("terminal filter for config type ",
382
407
  http_filter.config.config_proto_type_name,
383
408
  " must be the last filter in the chain"));
@@ -385,7 +410,7 @@ grpc_error_handle HttpConnectionManagerParse(
385
410
  } else {
386
411
  // The last filter must be terminal.
387
412
  if (!filter_impl->IsTerminalFilter()) {
388
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
413
+ errors.emplace_back(
389
414
  absl::StrCat("non-terminal filter for config type ",
390
415
  http_filter.config.config_proto_type_name,
391
416
  " is the last filter in the chain"));
@@ -397,7 +422,7 @@ grpc_error_handle HttpConnectionManagerParse(
397
422
  // router filter without actually looking at the config. This ensures
398
423
  // that the right thing happens in the xds resolver without having
399
424
  // to expose whether the resource we received was v2 or v3.
400
- http_connection_manager->http_filters.emplace_back(
425
+ http_connection_manager.http_filters.emplace_back(
401
426
  XdsListenerResource::HttpConnectionManager::HttpFilter{
402
427
  "router", {kXdsHttpRouterFilterConfigName, Json()}});
403
428
  }
@@ -411,252 +436,281 @@ grpc_error_handle HttpConnectionManagerParse(
411
436
  const envoy_config_route_v3_RouteConfiguration* route_config =
412
437
  envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_route_config(
413
438
  http_connection_manager_proto);
414
- XdsRouteConfigResource rds_update;
415
- grpc_error_handle error =
416
- XdsRouteConfigResource::Parse(context, route_config, &rds_update);
417
- if (error != GRPC_ERROR_NONE) return error;
418
- http_connection_manager->rds_update = std::move(rds_update);
419
- return GRPC_ERROR_NONE;
420
- }
421
- // Validate that RDS must be used to get the route_config dynamically.
422
- const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
423
- envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
424
- http_connection_manager_proto);
425
- if (rds == nullptr) {
426
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
427
- "HttpConnectionManager neither has inlined route_config nor RDS.");
428
- }
429
- // Check that the ConfigSource specifies ADS.
430
- const envoy_config_core_v3_ConfigSource* config_source =
431
- envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
432
- rds);
433
- if (config_source == nullptr) {
434
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
435
- "HttpConnectionManager missing config_source for RDS.");
436
- }
437
- if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
438
- !envoy_config_core_v3_ConfigSource_has_self(config_source)) {
439
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
440
- "HttpConnectionManager ConfigSource for RDS does not specify ADS "
441
- "or SELF.");
439
+ auto rds_update = XdsRouteConfigResource::Parse(context, route_config);
440
+ if (!rds_update.ok()) {
441
+ errors.emplace_back(rds_update.status().message());
442
+ } else {
443
+ http_connection_manager.rds_update = std::move(*rds_update);
444
+ }
445
+ } else {
446
+ // Validate that RDS must be used to get the route_config dynamically.
447
+ const envoy_extensions_filters_network_http_connection_manager_v3_Rds* rds =
448
+ envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_rds(
449
+ http_connection_manager_proto);
450
+ if (rds == nullptr) {
451
+ return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
452
+ "HttpConnectionManager neither has inlined route_config nor RDS.");
453
+ }
454
+ // Check that the ConfigSource specifies ADS.
455
+ const envoy_config_core_v3_ConfigSource* config_source =
456
+ envoy_extensions_filters_network_http_connection_manager_v3_Rds_config_source(
457
+ rds);
458
+ if (config_source == nullptr) {
459
+ errors.emplace_back(
460
+ "HttpConnectionManager missing config_source for RDS.");
461
+ } else if (!envoy_config_core_v3_ConfigSource_has_ads(config_source) &&
462
+ !envoy_config_core_v3_ConfigSource_has_self(config_source)) {
463
+ errors.emplace_back(
464
+ "HttpConnectionManager ConfigSource for RDS does not specify ADS "
465
+ "or SELF.");
466
+ } else {
467
+ // Get the route_config_name.
468
+ http_connection_manager.route_config_name = UpbStringToStdString(
469
+ envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
470
+ rds));
471
+ }
442
472
  }
443
- // Get the route_config_name.
444
- http_connection_manager->route_config_name = UpbStringToStdString(
445
- envoy_extensions_filters_network_http_connection_manager_v3_Rds_route_config_name(
446
- rds));
447
473
  }
448
- return GRPC_ERROR_NONE;
474
+ // Return result.
475
+ if (!errors.empty()) {
476
+ return absl::InvalidArgumentError(
477
+ absl::StrCat("Errors parsing HttpConnectionManager config: [",
478
+ absl::StrJoin(errors, "; "), "]"));
479
+ }
480
+ return http_connection_manager;
449
481
  }
450
482
 
451
- grpc_error_handle LdsResourceParseClient(
452
- const XdsEncodingContext& context,
453
- const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2,
454
- XdsListenerResource* lds_update) {
455
- lds_update->type = XdsListenerResource::ListenerType::kHttpApiListener;
483
+ absl::StatusOr<XdsListenerResource> LdsResourceParseClient(
484
+ const XdsResourceType::DecodeContext& context,
485
+ const envoy_config_listener_v3_ApiListener* api_listener, bool is_v2) {
456
486
  const upb_StringView encoded_api_listener = google_protobuf_Any_value(
457
487
  envoy_config_listener_v3_ApiListener_api_listener(api_listener));
458
488
  const auto* http_connection_manager =
459
489
  envoy_extensions_filters_network_http_connection_manager_v3_HttpConnectionManager_parse(
460
490
  encoded_api_listener.data, encoded_api_listener.size, context.arena);
461
491
  if (http_connection_manager == nullptr) {
462
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
492
+ return absl::InvalidArgumentError(
463
493
  "Could not parse HttpConnectionManager config from ApiListener");
464
494
  }
465
- return HttpConnectionManagerParse(true /* is_client */, context,
466
- http_connection_manager, is_v2,
467
- &lds_update->http_connection_manager);
495
+ auto hcm = HttpConnectionManagerParse(true /* is_client */, context,
496
+ http_connection_manager, is_v2);
497
+ if (!hcm.ok()) return hcm.status();
498
+ XdsListenerResource lds_update;
499
+ lds_update.type = XdsListenerResource::ListenerType::kHttpApiListener;
500
+ lds_update.http_connection_manager = std::move(*hcm);
501
+ return lds_update;
468
502
  }
469
503
 
470
- grpc_error_handle DownstreamTlsContextParse(
471
- const XdsEncodingContext& context,
472
- const envoy_config_core_v3_TransportSocket* transport_socket,
473
- XdsListenerResource::DownstreamTlsContext* downstream_tls_context) {
504
+ absl::StatusOr<XdsListenerResource::DownstreamTlsContext>
505
+ DownstreamTlsContextParse(
506
+ const XdsResourceType::DecodeContext& context,
507
+ const envoy_config_core_v3_TransportSocket* transport_socket) {
474
508
  absl::string_view name = UpbStringToAbsl(
475
509
  envoy_config_core_v3_TransportSocket_name(transport_socket));
476
510
  if (name != "envoy.transport_sockets.tls") {
477
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(
511
+ return absl::InvalidArgumentError(
478
512
  absl::StrCat("Unrecognized transport socket: ", name));
479
513
  }
514
+ std::vector<std::string> errors;
515
+ XdsListenerResource::DownstreamTlsContext downstream_tls_context;
480
516
  auto* typed_config =
481
517
  envoy_config_core_v3_TransportSocket_typed_config(transport_socket);
482
- std::vector<grpc_error_handle> errors;
483
- if (typed_config != nullptr) {
484
- const upb_StringView encoded_downstream_tls_context =
485
- google_protobuf_Any_value(typed_config);
486
- auto* downstream_tls_context_proto =
487
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
488
- encoded_downstream_tls_context.data,
489
- encoded_downstream_tls_context.size, context.arena);
490
- if (downstream_tls_context_proto == nullptr) {
491
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
492
- "Can't decode downstream tls context.");
493
- }
494
- auto* common_tls_context =
495
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
496
- downstream_tls_context_proto);
497
- if (common_tls_context != nullptr) {
498
- grpc_error_handle error =
499
- CommonTlsContext::Parse(context, common_tls_context,
500
- &downstream_tls_context->common_tls_context);
501
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
502
- }
503
- auto* require_client_certificate =
504
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
505
- downstream_tls_context_proto);
506
- if (require_client_certificate != nullptr) {
507
- downstream_tls_context->require_client_certificate =
508
- google_protobuf_BoolValue_value(require_client_certificate);
509
- }
510
- auto* require_sni =
511
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
512
- downstream_tls_context_proto);
513
- if (require_sni != nullptr &&
514
- google_protobuf_BoolValue_value(require_sni)) {
515
- errors.push_back(
516
- GRPC_ERROR_CREATE_FROM_STATIC_STRING("require_sni: unsupported"));
517
- }
518
- if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
519
- downstream_tls_context_proto) !=
520
- envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
521
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
522
- "ocsp_staple_policy: Only LENIENT_STAPLING supported"));
518
+ if (typed_config == nullptr) {
519
+ return absl::InvalidArgumentError("transport socket typed config unset");
520
+ }
521
+ const upb_StringView encoded_downstream_tls_context =
522
+ google_protobuf_Any_value(typed_config);
523
+ auto* downstream_tls_context_proto =
524
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_parse(
525
+ encoded_downstream_tls_context.data,
526
+ encoded_downstream_tls_context.size, context.arena);
527
+ if (downstream_tls_context_proto == nullptr) {
528
+ return absl::InvalidArgumentError("Can't decode downstream tls context.");
529
+ }
530
+ auto* common_tls_context =
531
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_common_tls_context(
532
+ downstream_tls_context_proto);
533
+ if (common_tls_context != nullptr) {
534
+ auto common_context = CommonTlsContext::Parse(context, common_tls_context);
535
+ if (!common_context.ok()) {
536
+ errors.emplace_back(common_context.status().message());
537
+ } else {
538
+ downstream_tls_context.common_tls_context = std::move(*common_context);
523
539
  }
524
540
  }
525
- if (downstream_tls_context->common_tls_context
541
+ auto* require_client_certificate =
542
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_client_certificate(
543
+ downstream_tls_context_proto);
544
+ if (require_client_certificate != nullptr) {
545
+ downstream_tls_context.require_client_certificate =
546
+ google_protobuf_BoolValue_value(require_client_certificate);
547
+ }
548
+ auto* require_sni =
549
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_require_sni(
550
+ downstream_tls_context_proto);
551
+ if (require_sni != nullptr && google_protobuf_BoolValue_value(require_sni)) {
552
+ errors.emplace_back("require_sni: unsupported");
553
+ }
554
+ if (envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_ocsp_staple_policy(
555
+ downstream_tls_context_proto) !=
556
+ envoy_extensions_transport_sockets_tls_v3_DownstreamTlsContext_LENIENT_STAPLING) {
557
+ errors.emplace_back("ocsp_staple_policy: Only LENIENT_STAPLING supported");
558
+ }
559
+
560
+ if (downstream_tls_context.common_tls_context
526
561
  .tls_certificate_provider_instance.instance_name.empty()) {
527
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
562
+ errors.emplace_back(
528
563
  "TLS configuration provided but no "
529
- "tls_certificate_provider_instance found."));
564
+ "tls_certificate_provider_instance found.");
530
565
  }
531
- if (downstream_tls_context->require_client_certificate &&
532
- downstream_tls_context->common_tls_context.certificate_validation_context
566
+ if (downstream_tls_context.require_client_certificate &&
567
+ downstream_tls_context.common_tls_context.certificate_validation_context
533
568
  .ca_certificate_provider_instance.instance_name.empty()) {
534
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
569
+ errors.emplace_back(
535
570
  "TLS configuration requires client certificates but no certificate "
536
- "provider instance specified for validation."));
571
+ "provider instance specified for validation.");
537
572
  }
538
- if (!downstream_tls_context->common_tls_context.certificate_validation_context
573
+ if (!downstream_tls_context.common_tls_context.certificate_validation_context
539
574
  .match_subject_alt_names.empty()) {
540
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
541
- "match_subject_alt_names not supported on servers"));
575
+ errors.emplace_back("match_subject_alt_names not supported on servers");
576
+ }
577
+ // Return result.
578
+ if (!errors.empty()) {
579
+ return absl::InvalidArgumentError(
580
+ absl::StrCat("Errors parsing DownstreamTlsContext: [",
581
+ absl::StrJoin(errors, "; "), "]"));
542
582
  }
543
- return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing DownstreamTlsContext",
544
- &errors);
583
+ return downstream_tls_context;
545
584
  }
546
585
 
547
- grpc_error_handle CidrRangeParse(
548
- const envoy_config_core_v3_CidrRange* cidr_range_proto,
549
- XdsListenerResource::FilterChainMap::CidrRange* cidr_range) {
586
+ absl::StatusOr<XdsListenerResource::FilterChainMap::CidrRange> CidrRangeParse(
587
+ const envoy_config_core_v3_CidrRange* cidr_range_proto) {
588
+ XdsListenerResource::FilterChainMap::CidrRange cidr_range;
550
589
  std::string address_prefix = UpbStringToStdString(
551
590
  envoy_config_core_v3_CidrRange_address_prefix(cidr_range_proto));
552
- grpc_error_handle error =
553
- grpc_string_to_sockaddr(&cidr_range->address, address_prefix.c_str(), 0);
554
- if (error != GRPC_ERROR_NONE) return error;
555
- cidr_range->prefix_len = 0;
591
+ auto address = StringToSockaddr(address_prefix, /*port=*/0);
592
+ if (!address.ok()) return address.status();
593
+ cidr_range.address = *address;
594
+ cidr_range.prefix_len = 0;
556
595
  auto* prefix_len_proto =
557
596
  envoy_config_core_v3_CidrRange_prefix_len(cidr_range_proto);
558
597
  if (prefix_len_proto != nullptr) {
559
- cidr_range->prefix_len = std::min(
598
+ cidr_range.prefix_len = std::min(
560
599
  google_protobuf_UInt32Value_value(prefix_len_proto),
561
- (reinterpret_cast<const grpc_sockaddr*>(cidr_range->address.addr))
600
+ (reinterpret_cast<const grpc_sockaddr*>(cidr_range.address.addr))
562
601
  ->sa_family == GRPC_AF_INET
563
602
  ? uint32_t(32)
564
603
  : uint32_t(128));
565
604
  }
566
605
  // Normalize the network address by masking it with prefix_len
567
- grpc_sockaddr_mask_bits(&cidr_range->address, cidr_range->prefix_len);
568
- return GRPC_ERROR_NONE;
606
+ grpc_sockaddr_mask_bits(&cidr_range.address, cidr_range.prefix_len);
607
+ return cidr_range;
569
608
  }
570
609
 
571
- grpc_error_handle FilterChainMatchParse(
572
- const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto,
573
- FilterChain::FilterChainMatch* filter_chain_match) {
610
+ absl::StatusOr<FilterChain::FilterChainMatch> FilterChainMatchParse(
611
+ const envoy_config_listener_v3_FilterChainMatch* filter_chain_match_proto) {
612
+ std::vector<std::string> errors;
613
+ FilterChain::FilterChainMatch filter_chain_match;
574
614
  auto* destination_port =
575
615
  envoy_config_listener_v3_FilterChainMatch_destination_port(
576
616
  filter_chain_match_proto);
577
617
  if (destination_port != nullptr) {
578
- filter_chain_match->destination_port =
618
+ filter_chain_match.destination_port =
579
619
  google_protobuf_UInt32Value_value(destination_port);
580
620
  }
581
621
  size_t size = 0;
582
622
  auto* prefix_ranges = envoy_config_listener_v3_FilterChainMatch_prefix_ranges(
583
623
  filter_chain_match_proto, &size);
584
- filter_chain_match->prefix_ranges.reserve(size);
624
+ filter_chain_match.prefix_ranges.reserve(size);
585
625
  for (size_t i = 0; i < size; i++) {
586
- XdsListenerResource::FilterChainMap::CidrRange cidr_range;
587
- grpc_error_handle error = CidrRangeParse(prefix_ranges[i], &cidr_range);
588
- if (error != GRPC_ERROR_NONE) return error;
589
- filter_chain_match->prefix_ranges.push_back(cidr_range);
626
+ auto cidr_range = CidrRangeParse(prefix_ranges[i]);
627
+ if (!cidr_range.ok()) {
628
+ errors.emplace_back(absl::StrCat("prefix range ", i, ": ",
629
+ cidr_range.status().message()));
630
+ continue;
631
+ }
632
+ filter_chain_match.prefix_ranges.push_back(*cidr_range);
590
633
  }
591
- filter_chain_match->source_type =
634
+ filter_chain_match.source_type =
592
635
  static_cast<XdsListenerResource::FilterChainMap::ConnectionSourceType>(
593
636
  envoy_config_listener_v3_FilterChainMatch_source_type(
594
637
  filter_chain_match_proto));
595
638
  auto* source_prefix_ranges =
596
639
  envoy_config_listener_v3_FilterChainMatch_source_prefix_ranges(
597
640
  filter_chain_match_proto, &size);
598
- filter_chain_match->source_prefix_ranges.reserve(size);
641
+ filter_chain_match.source_prefix_ranges.reserve(size);
599
642
  for (size_t i = 0; i < size; i++) {
600
- XdsListenerResource::FilterChainMap::CidrRange cidr_range;
601
- grpc_error_handle error =
602
- CidrRangeParse(source_prefix_ranges[i], &cidr_range);
603
- if (error != GRPC_ERROR_NONE) return error;
604
- filter_chain_match->source_prefix_ranges.push_back(cidr_range);
643
+ auto cidr_range = CidrRangeParse(source_prefix_ranges[i]);
644
+ if (!cidr_range.ok()) {
645
+ errors.emplace_back(absl::StrCat("source prefix range ", i, ": ",
646
+ cidr_range.status().message()));
647
+ continue;
648
+ }
649
+ filter_chain_match.source_prefix_ranges.push_back(*cidr_range);
605
650
  }
606
651
  auto* source_ports = envoy_config_listener_v3_FilterChainMatch_source_ports(
607
652
  filter_chain_match_proto, &size);
608
- filter_chain_match->source_ports.reserve(size);
653
+ filter_chain_match.source_ports.reserve(size);
609
654
  for (size_t i = 0; i < size; i++) {
610
- filter_chain_match->source_ports.push_back(source_ports[i]);
655
+ filter_chain_match.source_ports.push_back(source_ports[i]);
611
656
  }
612
657
  auto* server_names = envoy_config_listener_v3_FilterChainMatch_server_names(
613
658
  filter_chain_match_proto, &size);
614
659
  for (size_t i = 0; i < size; i++) {
615
- filter_chain_match->server_names.push_back(
660
+ filter_chain_match.server_names.push_back(
616
661
  UpbStringToStdString(server_names[i]));
617
662
  }
618
- filter_chain_match->transport_protocol = UpbStringToStdString(
663
+ filter_chain_match.transport_protocol = UpbStringToStdString(
619
664
  envoy_config_listener_v3_FilterChainMatch_transport_protocol(
620
665
  filter_chain_match_proto));
621
666
  auto* application_protocols =
622
667
  envoy_config_listener_v3_FilterChainMatch_application_protocols(
623
668
  filter_chain_match_proto, &size);
624
669
  for (size_t i = 0; i < size; i++) {
625
- filter_chain_match->application_protocols.push_back(
670
+ filter_chain_match.application_protocols.push_back(
626
671
  UpbStringToStdString(application_protocols[i]));
627
672
  }
628
- return GRPC_ERROR_NONE;
673
+ // Return result.
674
+ if (!errors.empty()) {
675
+ return absl::InvalidArgumentError(
676
+ absl::StrCat("errors parsing filter chain match: [",
677
+ absl::StrJoin(errors, "; "), "]"));
678
+ }
679
+ return filter_chain_match;
629
680
  }
630
681
 
631
- grpc_error_handle FilterChainParse(
632
- const XdsEncodingContext& context,
633
- const envoy_config_listener_v3_FilterChain* filter_chain_proto, bool is_v2,
634
- FilterChain* filter_chain) {
635
- std::vector<grpc_error_handle> errors;
682
+ absl::StatusOr<FilterChain> FilterChainParse(
683
+ const XdsResourceType::DecodeContext& context,
684
+ const envoy_config_listener_v3_FilterChain* filter_chain_proto,
685
+ bool is_v2) {
686
+ FilterChain filter_chain;
687
+ std::vector<std::string> errors;
636
688
  auto* filter_chain_match =
637
689
  envoy_config_listener_v3_FilterChain_filter_chain_match(
638
690
  filter_chain_proto);
639
691
  if (filter_chain_match != nullptr) {
640
- grpc_error_handle error = FilterChainMatchParse(
641
- filter_chain_match, &filter_chain->filter_chain_match);
642
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
692
+ auto match = FilterChainMatchParse(filter_chain_match);
693
+ if (!match.ok()) {
694
+ errors.emplace_back(match.status().message());
695
+ } else {
696
+ filter_chain.filter_chain_match = std::move(*match);
697
+ }
643
698
  }
644
- filter_chain->filter_chain_data =
699
+ filter_chain.filter_chain_data =
645
700
  std::make_shared<XdsListenerResource::FilterChainData>();
646
701
  // Parse the filters list. Currently we only support HttpConnectionManager.
647
702
  size_t size = 0;
648
703
  auto* filters =
649
704
  envoy_config_listener_v3_FilterChain_filters(filter_chain_proto, &size);
650
705
  if (size != 1) {
651
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
706
+ errors.push_back(
652
707
  "FilterChain should have exactly one filter: HttpConnectionManager; no "
653
- "other filter is supported at the moment"));
708
+ "other filter is supported at the moment");
654
709
  } else {
655
710
  auto* typed_config =
656
711
  envoy_config_listener_v3_Filter_typed_config(filters[0]);
657
712
  if (typed_config == nullptr) {
658
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
659
- "No typed_config found in filter."));
713
+ errors.emplace_back("No typed_config found in filter.");
660
714
  } else {
661
715
  absl::string_view type_url =
662
716
  UpbStringToAbsl(google_protobuf_Any_type_url(typed_config));
@@ -664,8 +718,7 @@ grpc_error_handle FilterChainParse(
664
718
  "type.googleapis.com/"
665
719
  "envoy.extensions.filters.network.http_connection_manager.v3."
666
720
  "HttpConnectionManager") {
667
- errors.push_back(GRPC_ERROR_CREATE_FROM_CPP_STRING(
668
- absl::StrCat("Unsupported filter type ", type_url)));
721
+ errors.emplace_back(absl::StrCat("Unsupported filter type ", type_url));
669
722
  } else {
670
723
  const upb_StringView encoded_http_connection_manager =
671
724
  google_protobuf_Any_value(typed_config);
@@ -674,14 +727,18 @@ grpc_error_handle FilterChainParse(
674
727
  encoded_http_connection_manager.data,
675
728
  encoded_http_connection_manager.size, context.arena);
676
729
  if (http_connection_manager == nullptr) {
677
- errors.push_back(GRPC_ERROR_CREATE_FROM_STATIC_STRING(
730
+ errors.emplace_back(
678
731
  "Could not parse HttpConnectionManager config from filter "
679
- "typed_config"));
732
+ "typed_config");
680
733
  } else {
681
- grpc_error_handle error = HttpConnectionManagerParse(
682
- false /* is_client */, context, http_connection_manager, is_v2,
683
- &filter_chain->filter_chain_data->http_connection_manager);
684
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
734
+ auto hcm = HttpConnectionManagerParse(
735
+ /*is_client=*/false, context, http_connection_manager, is_v2);
736
+ if (!hcm.ok()) {
737
+ errors.emplace_back(hcm.status().message());
738
+ } else {
739
+ filter_chain.filter_chain_data->http_connection_manager =
740
+ std::move(*hcm);
741
+ }
685
742
  }
686
743
  }
687
744
  }
@@ -689,36 +746,42 @@ grpc_error_handle FilterChainParse(
689
746
  auto* transport_socket =
690
747
  envoy_config_listener_v3_FilterChain_transport_socket(filter_chain_proto);
691
748
  if (transport_socket != nullptr) {
692
- grpc_error_handle error = DownstreamTlsContextParse(
693
- context, transport_socket,
694
- &filter_chain->filter_chain_data->downstream_tls_context);
695
- if (error != GRPC_ERROR_NONE) errors.push_back(error);
749
+ auto downstream_context =
750
+ DownstreamTlsContextParse(context, transport_socket);
751
+ if (!downstream_context.ok()) {
752
+ errors.emplace_back(downstream_context.status().message());
753
+ } else {
754
+ filter_chain.filter_chain_data->downstream_tls_context =
755
+ std::move(*downstream_context);
756
+ }
757
+ }
758
+ // Return result.
759
+ if (!errors.empty()) {
760
+ return absl::InvalidArgumentError(absl::StrCat(
761
+ "Errors parsing FilterChain: [", absl::StrJoin(errors, "; "), "]"));
696
762
  }
697
- return GRPC_ERROR_CREATE_FROM_VECTOR("Error parsing FilterChain", &errors);
763
+ return filter_chain;
698
764
  }
699
765
 
700
- grpc_error_handle AddressParse(
701
- const envoy_config_core_v3_Address* address_proto, std::string* address) {
766
+ absl::StatusOr<std::string> AddressParse(
767
+ const envoy_config_core_v3_Address* address_proto) {
702
768
  const auto* socket_address =
703
769
  envoy_config_core_v3_Address_socket_address(address_proto);
704
770
  if (socket_address == nullptr) {
705
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
706
- "Address does not have socket_address");
771
+ return absl::InvalidArgumentError("Address does not have socket_address");
707
772
  }
708
773
  if (envoy_config_core_v3_SocketAddress_protocol(socket_address) !=
709
774
  envoy_config_core_v3_SocketAddress_TCP) {
710
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
711
- "SocketAddress protocol is not TCP");
775
+ return absl::InvalidArgumentError("SocketAddress protocol is not TCP");
712
776
  }
713
777
  uint32_t port = envoy_config_core_v3_SocketAddress_port_value(socket_address);
714
778
  if (port > 65535) {
715
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("Invalid port");
779
+ return absl::InvalidArgumentError("Invalid port");
716
780
  }
717
- *address = JoinHostPort(
781
+ return JoinHostPort(
718
782
  UpbStringToAbsl(
719
783
  envoy_config_core_v3_SocketAddress_address(socket_address)),
720
784
  port);
721
- return GRPC_ERROR_NONE;
722
785
  }
723
786
 
724
787
  // An intermediate map for filter chains that we create to validate the list of
@@ -737,37 +800,36 @@ struct InternalFilterChainMap {
737
800
  DestinationIpMap destination_ip_map;
738
801
  };
739
802
 
740
- grpc_error_handle AddFilterChainDataForSourcePort(
741
- const FilterChain& filter_chain,
742
- XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map,
743
- uint32_t port) {
803
+ absl::Status AddFilterChainDataForSourcePort(
804
+ const FilterChain& filter_chain, uint32_t port,
805
+ XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
744
806
  auto insert_result = ports_map->emplace(
745
807
  port, XdsListenerResource::FilterChainMap::FilterChainDataSharedPtr{
746
808
  filter_chain.filter_chain_data});
747
809
  if (!insert_result.second) {
748
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(absl::StrCat(
810
+ return absl::InvalidArgumentError(absl::StrCat(
749
811
  "Duplicate matching rules detected when adding filter chain: ",
750
812
  filter_chain.filter_chain_match.ToString()));
751
813
  }
752
- return GRPC_ERROR_NONE;
814
+ return absl::OkStatus();
753
815
  }
754
816
 
755
- grpc_error_handle AddFilterChainDataForSourcePorts(
817
+ absl::Status AddFilterChainDataForSourcePorts(
756
818
  const FilterChain& filter_chain,
757
819
  XdsListenerResource::FilterChainMap::SourcePortsMap* ports_map) {
758
820
  if (filter_chain.filter_chain_match.source_ports.empty()) {
759
- return AddFilterChainDataForSourcePort(filter_chain, ports_map, 0);
821
+ return AddFilterChainDataForSourcePort(filter_chain, 0, ports_map);
760
822
  } else {
761
823
  for (uint32_t port : filter_chain.filter_chain_match.source_ports) {
762
- grpc_error_handle error =
763
- AddFilterChainDataForSourcePort(filter_chain, ports_map, port);
764
- if (error != GRPC_ERROR_NONE) return error;
824
+ absl::Status status =
825
+ AddFilterChainDataForSourcePort(filter_chain, port, ports_map);
826
+ if (!status.ok()) return status;
765
827
  }
766
828
  }
767
- return GRPC_ERROR_NONE;
829
+ return absl::OkStatus();
768
830
  }
769
831
 
770
- grpc_error_handle AddFilterChainDataForSourceIpRange(
832
+ absl::Status AddFilterChainDataForSourceIpRange(
771
833
  const FilterChain& filter_chain,
772
834
  InternalFilterChainMap::SourceIpMap* source_ip_map) {
773
835
  if (filter_chain.filter_chain_match.source_prefix_ranges.empty()) {
@@ -779,24 +841,22 @@ grpc_error_handle AddFilterChainDataForSourceIpRange(
779
841
  for (const auto& prefix_range :
780
842
  filter_chain.filter_chain_match.source_prefix_ranges) {
781
843
  auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
782
- if (!addr_str.ok()) {
783
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
784
- }
844
+ if (!addr_str.ok()) return addr_str.status();
785
845
  auto insert_result = source_ip_map->emplace(
786
846
  absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
787
847
  XdsListenerResource::FilterChainMap::SourceIp());
788
848
  if (insert_result.second) {
789
849
  insert_result.first->second.prefix_range.emplace(prefix_range);
790
850
  }
791
- grpc_error_handle error = AddFilterChainDataForSourcePorts(
851
+ absl::Status status = AddFilterChainDataForSourcePorts(
792
852
  filter_chain, &insert_result.first->second.ports_map);
793
- if (error != GRPC_ERROR_NONE) return error;
853
+ if (!status.ok()) return status;
794
854
  }
795
855
  }
796
- return GRPC_ERROR_NONE;
856
+ return absl::OkStatus();
797
857
  }
798
858
 
799
- grpc_error_handle AddFilterChainDataForSourceType(
859
+ absl::Status AddFilterChainDataForSourceType(
800
860
  const FilterChain& filter_chain,
801
861
  InternalFilterChainMap::DestinationIp* destination_ip) {
802
862
  GPR_ASSERT(static_cast<unsigned int>(
@@ -806,31 +866,31 @@ grpc_error_handle AddFilterChainDataForSourceType(
806
866
  filter_chain.filter_chain_match.source_type)]);
807
867
  }
808
868
 
809
- grpc_error_handle AddFilterChainDataForApplicationProtocols(
869
+ absl::Status AddFilterChainDataForApplicationProtocols(
810
870
  const FilterChain& filter_chain,
811
871
  InternalFilterChainMap::DestinationIp* destination_ip) {
812
872
  // Only allow filter chains that do not mention application protocols
813
873
  if (!filter_chain.filter_chain_match.application_protocols.empty()) {
814
- return GRPC_ERROR_NONE;
874
+ return absl::OkStatus();
815
875
  }
816
876
  return AddFilterChainDataForSourceType(filter_chain, destination_ip);
817
877
  }
818
878
 
819
- grpc_error_handle AddFilterChainDataForTransportProtocol(
879
+ absl::Status AddFilterChainDataForTransportProtocol(
820
880
  const FilterChain& filter_chain,
821
881
  InternalFilterChainMap::DestinationIp* destination_ip) {
822
882
  const std::string& transport_protocol =
823
883
  filter_chain.filter_chain_match.transport_protocol;
824
884
  // Only allow filter chains with no transport protocol or "raw_buffer"
825
885
  if (!transport_protocol.empty() && transport_protocol != "raw_buffer") {
826
- return GRPC_ERROR_NONE;
886
+ return absl::OkStatus();
827
887
  }
828
888
  // If for this configuration, we've already seen filter chains that mention
829
889
  // the transport protocol as "raw_buffer", we will never match filter chains
830
890
  // that do not mention it.
831
891
  if (destination_ip->transport_protocol_raw_buffer_provided &&
832
892
  transport_protocol.empty()) {
833
- return GRPC_ERROR_NONE;
893
+ return absl::OkStatus();
834
894
  }
835
895
  if (!transport_protocol.empty() &&
836
896
  !destination_ip->transport_protocol_raw_buffer_provided) {
@@ -844,17 +904,17 @@ grpc_error_handle AddFilterChainDataForTransportProtocol(
844
904
  destination_ip);
845
905
  }
846
906
 
847
- grpc_error_handle AddFilterChainDataForServerNames(
907
+ absl::Status AddFilterChainDataForServerNames(
848
908
  const FilterChain& filter_chain,
849
909
  InternalFilterChainMap::DestinationIp* destination_ip) {
850
910
  // Don't continue adding filter chains with server names mentioned
851
911
  if (!filter_chain.filter_chain_match.server_names.empty()) {
852
- return GRPC_ERROR_NONE;
912
+ return absl::OkStatus();
853
913
  }
854
914
  return AddFilterChainDataForTransportProtocol(filter_chain, destination_ip);
855
915
  }
856
916
 
857
- grpc_error_handle AddFilterChainDataForDestinationIpRange(
917
+ absl::Status AddFilterChainDataForDestinationIpRange(
858
918
  const FilterChain& filter_chain,
859
919
  InternalFilterChainMap::DestinationIpMap* destination_ip_map) {
860
920
  if (filter_chain.filter_chain_match.prefix_ranges.empty()) {
@@ -866,21 +926,19 @@ grpc_error_handle AddFilterChainDataForDestinationIpRange(
866
926
  for (const auto& prefix_range :
867
927
  filter_chain.filter_chain_match.prefix_ranges) {
868
928
  auto addr_str = grpc_sockaddr_to_string(&prefix_range.address, false);
869
- if (!addr_str.ok()) {
870
- return GRPC_ERROR_CREATE_FROM_CPP_STRING(addr_str.status().ToString());
871
- }
929
+ if (!addr_str.ok()) return addr_str.status();
872
930
  auto insert_result = destination_ip_map->emplace(
873
931
  absl::StrCat(*addr_str, "/", prefix_range.prefix_len),
874
932
  InternalFilterChainMap::DestinationIp());
875
933
  if (insert_result.second) {
876
934
  insert_result.first->second.prefix_range.emplace(prefix_range);
877
935
  }
878
- grpc_error_handle error = AddFilterChainDataForServerNames(
936
+ absl::Status status = AddFilterChainDataForServerNames(
879
937
  filter_chain, &insert_result.first->second);
880
- if (error != GRPC_ERROR_NONE) return error;
938
+ if (!status.ok()) return status;
881
939
  }
882
940
  }
883
- return GRPC_ERROR_NONE;
941
+ return absl::OkStatus();
884
942
  }
885
943
 
886
944
  XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
@@ -902,36 +960,33 @@ XdsListenerResource::FilterChainMap BuildFromInternalFilterChainMap(
902
960
  return filter_chain_map;
903
961
  }
904
962
 
905
- grpc_error_handle BuildFilterChainMap(
906
- const std::vector<FilterChain>& filter_chains,
907
- XdsListenerResource::FilterChainMap* filter_chain_map) {
963
+ absl::StatusOr<XdsListenerResource::FilterChainMap> BuildFilterChainMap(
964
+ const std::vector<FilterChain>& filter_chains) {
908
965
  InternalFilterChainMap internal_filter_chain_map;
909
966
  for (const auto& filter_chain : filter_chains) {
910
967
  // Discard filter chain entries that specify destination port
911
968
  if (filter_chain.filter_chain_match.destination_port != 0) continue;
912
- grpc_error_handle error = AddFilterChainDataForDestinationIpRange(
969
+ absl::Status status = AddFilterChainDataForDestinationIpRange(
913
970
  filter_chain, &internal_filter_chain_map.destination_ip_map);
914
- if (error != GRPC_ERROR_NONE) return error;
971
+ if (!status.ok()) return status;
915
972
  }
916
- *filter_chain_map =
917
- BuildFromInternalFilterChainMap(&internal_filter_chain_map);
918
- return GRPC_ERROR_NONE;
973
+ return BuildFromInternalFilterChainMap(&internal_filter_chain_map);
919
974
  }
920
975
 
921
- grpc_error_handle LdsResourceParseServer(
922
- const XdsEncodingContext& context,
923
- const envoy_config_listener_v3_Listener* listener, bool is_v2,
924
- XdsListenerResource* lds_update) {
925
- lds_update->type = XdsListenerResource::ListenerType::kTcpListener;
926
- grpc_error_handle error =
927
- AddressParse(envoy_config_listener_v3_Listener_address(listener),
928
- &lds_update->address);
929
- if (error != GRPC_ERROR_NONE) return error;
976
+ absl::StatusOr<XdsListenerResource> LdsResourceParseServer(
977
+ const XdsResourceType::DecodeContext& context,
978
+ const envoy_config_listener_v3_Listener* listener, bool is_v2) {
979
+ XdsListenerResource lds_update;
980
+ lds_update.type = XdsListenerResource::ListenerType::kTcpListener;
981
+ auto address =
982
+ AddressParse(envoy_config_listener_v3_Listener_address(listener));
983
+ if (!address.ok()) return address.status();
984
+ lds_update.address = std::move(*address);
930
985
  const auto* use_original_dst =
931
986
  envoy_config_listener_v3_Listener_use_original_dst(listener);
932
987
  if (use_original_dst != nullptr) {
933
988
  if (google_protobuf_BoolValue_value(use_original_dst)) {
934
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
989
+ return absl::InvalidArgumentError(
935
990
  "Field \'use_original_dst\' is not supported.");
936
991
  }
937
992
  }
@@ -941,36 +996,32 @@ grpc_error_handle LdsResourceParseServer(
941
996
  std::vector<FilterChain> parsed_filter_chains;
942
997
  parsed_filter_chains.reserve(size);
943
998
  for (size_t i = 0; i < size; i++) {
944
- FilterChain filter_chain;
945
- error = FilterChainParse(context, filter_chains[i], is_v2, &filter_chain);
946
- if (error != GRPC_ERROR_NONE) return error;
947
- parsed_filter_chains.push_back(std::move(filter_chain));
948
- }
949
- error =
950
- BuildFilterChainMap(parsed_filter_chains, &lds_update->filter_chain_map);
951
- if (error != GRPC_ERROR_NONE) return error;
999
+ auto filter_chain = FilterChainParse(context, filter_chains[i], is_v2);
1000
+ if (!filter_chain.ok()) return filter_chain.status();
1001
+ parsed_filter_chains.push_back(std::move(*filter_chain));
1002
+ }
1003
+ auto filter_chain_map = BuildFilterChainMap(parsed_filter_chains);
1004
+ if (!filter_chain_map.ok()) return filter_chain_map.status();
1005
+ lds_update.filter_chain_map = std::move(*filter_chain_map);
952
1006
  auto* default_filter_chain =
953
1007
  envoy_config_listener_v3_Listener_default_filter_chain(listener);
954
1008
  if (default_filter_chain != nullptr) {
955
- FilterChain filter_chain;
956
- error =
957
- FilterChainParse(context, default_filter_chain, is_v2, &filter_chain);
958
- if (error != GRPC_ERROR_NONE) return error;
959
- if (filter_chain.filter_chain_data != nullptr) {
960
- lds_update->default_filter_chain =
961
- std::move(*filter_chain.filter_chain_data);
1009
+ auto filter_chain = FilterChainParse(context, default_filter_chain, is_v2);
1010
+ if (!filter_chain.ok()) return filter_chain.status();
1011
+ if (filter_chain->filter_chain_data != nullptr) {
1012
+ lds_update.default_filter_chain =
1013
+ std::move(*filter_chain->filter_chain_data);
962
1014
  }
963
1015
  }
964
1016
  if (size == 0 && default_filter_chain == nullptr) {
965
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING("No filter chain provided.");
1017
+ return absl::InvalidArgumentError("No filter chain provided.");
966
1018
  }
967
- return GRPC_ERROR_NONE;
1019
+ return lds_update;
968
1020
  }
969
1021
 
970
- grpc_error_handle LdsResourceParse(
971
- const XdsEncodingContext& context,
972
- const envoy_config_listener_v3_Listener* listener, bool is_v2,
973
- XdsListenerResource* lds_update) {
1022
+ absl::StatusOr<XdsListenerResource> LdsResourceParse(
1023
+ const XdsResourceType::DecodeContext& context,
1024
+ const envoy_config_listener_v3_Listener* listener, bool is_v2) {
974
1025
  // Check whether it's a client or server listener.
975
1026
  const envoy_config_listener_v3_ApiListener* api_listener =
976
1027
  envoy_config_listener_v3_Listener_api_listener(listener);
@@ -979,24 +1030,22 @@ grpc_error_handle LdsResourceParse(
979
1030
  // TODO(roth): Re-enable the following check once
980
1031
  // github.com/istio/istio/issues/38914 is resolved.
981
1032
  // if (api_listener != nullptr && address != nullptr) {
982
- // return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1033
+ // return absl::InvalidArgumentError(
983
1034
  // "Listener has both address and ApiListener");
984
1035
  // }
985
1036
  if (api_listener == nullptr && address == nullptr) {
986
- return GRPC_ERROR_CREATE_FROM_STATIC_STRING(
1037
+ return absl::InvalidArgumentError(
987
1038
  "Listener has neither address nor ApiListener");
988
1039
  }
989
- // Validate Listener fields.
990
- grpc_error_handle error = GRPC_ERROR_NONE;
1040
+ // If api_listener is present, it's for a client; otherwise, it's
1041
+ // for a server.
991
1042
  if (api_listener != nullptr) {
992
- error = LdsResourceParseClient(context, api_listener, is_v2, lds_update);
993
- } else {
994
- error = LdsResourceParseServer(context, listener, is_v2, lds_update);
1043
+ return LdsResourceParseClient(context, api_listener, is_v2);
995
1044
  }
996
- return error;
1045
+ return LdsResourceParseServer(context, listener, is_v2);
997
1046
  }
998
1047
 
999
- void MaybeLogListener(const XdsEncodingContext& context,
1048
+ void MaybeLogListener(const XdsResourceType::DecodeContext& context,
1000
1049
  const envoy_config_listener_v3_Listener* listener) {
1001
1050
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer) &&
1002
1051
  gpr_should_log(GPR_LOG_SEVERITY_DEBUG)) {
@@ -1011,8 +1060,8 @@ void MaybeLogListener(const XdsEncodingContext& context,
1011
1060
  } // namespace
1012
1061
 
1013
1062
  absl::StatusOr<XdsResourceType::DecodeResult> XdsListenerResourceType::Decode(
1014
- const XdsEncodingContext& context, absl::string_view serialized_resource,
1015
- bool is_v2) const {
1063
+ const XdsResourceType::DecodeContext& context,
1064
+ absl::string_view serialized_resource, bool is_v2) const {
1016
1065
  // Parse serialized proto.
1017
1066
  auto* resource = envoy_config_listener_v3_Listener_parse(
1018
1067
  serialized_resource.data(), serialized_resource.size(), context.arena);
@@ -1024,24 +1073,23 @@ absl::StatusOr<XdsResourceType::DecodeResult> XdsListenerResourceType::Decode(
1024
1073
  DecodeResult result;
1025
1074
  result.name =
1026
1075
  UpbStringToStdString(envoy_config_listener_v3_Listener_name(resource));
1027
- auto listener_data = absl::make_unique<ResourceDataSubclass>();
1028
- grpc_error_handle error =
1029
- LdsResourceParse(context, resource, is_v2, &listener_data->resource);
1030
- if (error != GRPC_ERROR_NONE) {
1031
- std::string error_str = grpc_error_std_string(error);
1032
- GRPC_ERROR_UNREF(error);
1076
+ auto listener = LdsResourceParse(context, resource, is_v2);
1077
+ if (!listener.ok()) {
1033
1078
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1034
1079
  gpr_log(GPR_ERROR, "[xds_client %p] invalid Listener %s: %s",
1035
- context.client, result.name.c_str(), error_str.c_str());
1080
+ context.client, result.name.c_str(),
1081
+ listener.status().ToString().c_str());
1036
1082
  }
1037
- result.resource = absl::InvalidArgumentError(error_str);
1083
+ result.resource = listener.status();
1038
1084
  } else {
1039
1085
  if (GRPC_TRACE_FLAG_ENABLED(*context.tracer)) {
1040
1086
  gpr_log(GPR_INFO, "[xds_client %p] parsed Listener %s: %s",
1041
1087
  context.client, result.name.c_str(),
1042
- listener_data->resource.ToString().c_str());
1088
+ listener->ToString().c_str());
1043
1089
  }
1044
- result.resource = std::move(listener_data);
1090
+ auto resource = absl::make_unique<ResourceDataSubclass>();
1091
+ resource->resource = std::move(*listener);
1092
+ result.resource = std::move(resource);
1045
1093
  }
1046
1094
  return std::move(result);
1047
1095
  }