1
#include "source/common/router/route_provider_manager.h"
2

            
3
#include <chrono>
4
#include <cstdint>
5
#include <memory>
6
#include <string>
7

            
8
#include "envoy/admin/v3/config_dump.pb.h"
9
#include "envoy/config/core/v3/config_source.pb.h"
10
#include "envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.pb.h"
11
#include "envoy/service/discovery/v3/discovery.pb.h"
12

            
13
#include "source/common/common/assert.h"
14
#include "source/common/common/fmt.h"
15
#include "source/common/config/api_version.h"
16
#include "source/common/config/utility.h"
17
#include "source/common/http/header_map_impl.h"
18
#include "source/common/protobuf/utility.h"
19
#include "source/common/router/config_impl.h"
20
#include "source/common/router/route_config_update_receiver_impl.h"
21
#include "source/common/router/static_route_provider_impl.h"
22

            
23
namespace Envoy {
24
namespace Router {
25

            
26
RouteConfigProviderManagerImpl::RouteConfigProviderManagerImpl(OptRef<Server::Admin> admin)
27
9652
    : manager_(admin, "routes", proto_traits_) {}
28

            
29
Router::RouteConfigProviderSharedPtr RouteConfigProviderManagerImpl::createRdsRouteConfigProvider(
30
    const envoy::extensions::filters::network::http_connection_manager::v3::Rds& rds,
31
    Server::Configuration::ServerFactoryContext& factory_context, const std::string& stat_prefix,
32
475
    Init::Manager& init_manager) {
33

            
34
475
  auto factory = Envoy::Config::Utility::getFactoryByName<RdsFactory>("envoy.rds_factory.default");
35
475
  if (!factory) {
36
    IS_ENVOY_BUG("No envoy.rds_factory.default registered");
37
    return nullptr;
38
  }
39
475
  return factory->createRdsRouteConfigProvider(rds, factory_context, stat_prefix, init_manager,
40
475
                                               proto_traits_, manager_);
41
475
}
42

            
43
RouteConfigProviderPtr RouteConfigProviderManagerImpl::createStaticRouteConfigProvider(
44
    const envoy::config::route::v3::RouteConfiguration& route_config,
45
    Server::Configuration::ServerFactoryContext& factory_context,
46
9441
    ProtobufMessage::ValidationVisitor& validator) {
47
9441
  auto provider = manager_.addStaticProvider([&factory_context, &validator, &route_config, this]() {
48
9441
    ConfigTraitsImpl config_traits(validator);
49
9441
    return std::make_unique<StaticRouteConfigProviderImpl>(route_config, config_traits,
50
9441
                                                           factory_context, manager_);
51
9441
  });
52
9441
  ASSERT(dynamic_cast<RouteConfigProvider*>(provider.get()));
53
9441
  return RouteConfigProviderPtr(static_cast<RouteConfigProvider*>(provider.release()));
54
9441
}
55

            
56
} // namespace Router
57
} // namespace Envoy