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