1
#pragma once
2

            
3
#include "envoy/api/api.h"
4
#include "envoy/common/random_generator.h"
5
#include "envoy/config/core/v3/config_source.pb.h"
6
#include "envoy/config/grpc_mux.h"
7
#include "envoy/config/subscription.h"
8
#include "envoy/config/subscription_factory.h"
9
#include "envoy/config/xds_config_tracker.h"
10
#include "envoy/config/xds_resources_delegate.h"
11
#include "envoy/server/instance.h"
12
#include "envoy/stats/scope.h"
13
#include "envoy/upstream/cluster_manager.h"
14

            
15
#include "source/common/common/logger.h"
16

            
17
namespace Envoy {
18
namespace Config {
19

            
20
class SubscriptionFactoryImpl : public SubscriptionFactory, Logger::Loggable<Logger::Id::config> {
21
public:
22
  SubscriptionFactoryImpl(const LocalInfo::LocalInfo& local_info, Event::Dispatcher& dispatcher,
23
                          Upstream::ClusterManager& cm,
24
                          ProtobufMessage::ValidationVisitor& validation_visitor, Api::Api& api,
25
                          const Server::Instance& server,
26
                          XdsResourcesDelegateOptRef xds_resources_delegate,
27
                          XdsConfigTrackerOptRef xds_config_tracker);
28

            
29
  // Config::SubscriptionFactory
30
  absl::StatusOr<SubscriptionPtr> subscriptionFromConfigSource(
31
      const envoy::config::core::v3::ConfigSource& config, absl::string_view type_url,
32
      Stats::Scope& scope, SubscriptionCallbacks& callbacks,
33
      OpaqueResourceDecoderSharedPtr resource_decoder, const SubscriptionOptions& options) override;
34
  absl::StatusOr<SubscriptionPtr> subscriptionOverAdsGrpcMux(
35
      GrpcMuxSharedPtr& ads_grpc_mux, const envoy::config::core::v3::ConfigSource& config,
36
      absl::string_view type_url, Stats::Scope& scope, SubscriptionCallbacks& callbacks,
37
      OpaqueResourceDecoderSharedPtr resource_decoder, const SubscriptionOptions& options) override;
38
  absl::StatusOr<SubscriptionPtr>
39
  collectionSubscriptionFromUrl(const xds::core::v3::ResourceLocator& collection_locator,
40
                                const envoy::config::core::v3::ConfigSource& config,
41
                                absl::string_view resource_type, Stats::Scope& scope,
42
                                SubscriptionCallbacks& callbacks,
43
                                OpaqueResourceDecoderSharedPtr resource_decoder) override;
44

            
45
private:
46
  const LocalInfo::LocalInfo& local_info_;
47
  Event::Dispatcher& dispatcher_;
48
  Upstream::ClusterManager& cm_;
49
  ProtobufMessage::ValidationVisitor& validation_visitor_;
50
  Api::Api& api_;
51
  const Server::Instance& server_;
52
  XdsResourcesDelegateOptRef xds_resources_delegate_;
53
  XdsConfigTrackerOptRef xds_config_tracker_;
54
};
55

            
56
} // namespace Config
57
} // namespace Envoy