1
#pragma once
2

            
3
#include "envoy/extensions/quic/server_preferred_address/v3/datasource.pb.h"
4
#include "envoy/extensions/quic/server_preferred_address/v3/datasource.pb.validate.h"
5
#include "envoy/registry/registry.h"
6

            
7
#include "source/common/quic/envoy_quic_server_preferred_address_config_factory.h"
8

            
9
namespace Envoy {
10
namespace Quic {
11

            
12
// This method of configuring server preferred address allows fetching the config from
13
// a `DataSource`, for situations where the control plane doesn't know the correct value
14
// but it is available in the context in which Envoy is running.
15
class DataSourceServerPreferredAddressConfigFactory
16
    : public Envoy::Quic::EnvoyQuicServerPreferredAddressConfigFactory {
17
public:
18
5
  std::string name() const override { return "quic.server_preferred_address.datasource"; }
19

            
20
  Envoy::Quic::EnvoyQuicServerPreferredAddressConfigPtr
21
  createServerPreferredAddressConfig(const Protobuf::Message& message,
22
                                     ProtobufMessage::ValidationVisitor& validation_visitor,
23
                                     Server::Configuration::ServerFactoryContext& context) override;
24

            
25
1
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
26
1
    return ProtobufTypes::MessagePtr{new envoy::extensions::quic::server_preferred_address::v3::
27
1
                                         DataSourceServerPreferredAddressConfig()};
28
1
  }
29
};
30

            
31
DECLARE_FACTORY(DataSourceServerPreferredAddressConfigFactory);
32

            
33
} // namespace Quic
34
} // namespace Envoy