Lines
100 %
Functions
#pragma once
#include <cstdint>
#include <functional>
#include <memory>
#include <queue>
#include <string>
#include "envoy/admin/v3/config_dump.pb.h"
#include "envoy/config/core/v3/config_source.pb.h"
#include "envoy/config/route/v3/route.pb.h"
#include "envoy/config/route/v3/route.pb.validate.h"
#include "envoy/config/subscription.h"
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.h"
#include "envoy/http/codes.h"
#include "envoy/local_info/local_info.h"
#include "envoy/router/rds.h"
#include "envoy/router/route_config_provider_manager.h"
#include "envoy/router/route_config_update_receiver.h"
#include "envoy/server/admin.h"
#include "envoy/server/filter_config.h"
#include "envoy/singleton/instance.h"
#include "envoy/stats/scope.h"
#include "envoy/thread_local/thread_local.h"
#include "source/common/common/callback_impl.h"
#include "source/common/common/cleanup.h"
#include "source/common/common/logger.h"
#include "source/common/init/manager_impl.h"
#include "source/common/init/target_impl.h"
#include "source/common/init/watcher_impl.h"
#include "source/common/protobuf/utility.h"
#include "source/common/rds/common/proto_traits_impl.h"
#include "source/common/rds/rds_route_config_provider_impl.h"
#include "source/common/rds/rds_route_config_subscription.h"
#include "source/common/rds/route_config_provider_manager.h"
#include "source/common/rds/route_config_update_receiver_impl.h"
#include "source/common/rds/static_route_config_provider_impl.h"
#include "absl/container/node_hash_map.h"
#include "absl/container/node_hash_set.h"
namespace Envoy {
namespace Router {
using ProtoTraitsImpl =
Rds::Common::ProtoTraitsImpl<envoy::config::route::v3::RouteConfiguration, 1>;
class RouteConfigProviderManagerImpl : public RouteConfigProviderManager,
public Singleton::Instance {
public:
RouteConfigProviderManagerImpl(OptRef<Server::Admin> admin);
std::unique_ptr<envoy::admin::v3::RoutesConfigDump>
dumpRouteConfigs(const Matchers::StringMatcher& name_matcher) const {
return manager_.dumpRouteConfigs(name_matcher);
}
// RouteConfigProviderManager
RouteConfigProviderSharedPtr createRdsRouteConfigProvider(
const envoy::extensions::filters::network::http_connection_manager::v3::Rds& rds,
Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix,
Init::Manager& init_manager) override;
RouteConfigProviderPtr
createStaticRouteConfigProvider(const envoy::config::route::v3::RouteConfiguration& route_config,
Server::Configuration::ServerFactoryContext& factory_context,
ProtobufMessage::ValidationVisitor& validator) override;
private:
ProtoTraitsImpl proto_traits_;
Rds::RouteConfigProviderManager manager_;
};
using RouteConfigProviderManagerImplPtr = std::unique_ptr<RouteConfigProviderManagerImpl>;
// Allows loose coupling of this file and rds.h
class RdsFactory : public Envoy::Config::UntypedFactory {
std::string category() const override { return "envoy.rds_factory"; }
virtual RouteConfigProviderSharedPtr createRdsRouteConfigProvider(
Init::Manager& init_manager, ProtoTraitsImpl& proto_traits,
Rds::RouteConfigProviderManager& manager) PURE;
} // namespace Router
} // namespace Envoy