1
#pragma once
2

            
3
#include "envoy/extensions/transport_sockets/starttls/v3/starttls.pb.h"
4
#include "envoy/registry/registry.h"
5
#include "envoy/server/transport_socket_config.h"
6

            
7
#include "source/common/config/utility.h"
8

            
9
namespace Envoy {
10
namespace Extensions {
11
namespace TransportSockets {
12
namespace StartTls {
13

            
14
template <typename ConfigFactory, typename ConfigMessage>
15
class BaseStartTlsSocketFactory : public ConfigFactory {
16
public:
17
46
  std::string name() const override { return "envoy.transport_sockets.starttls"; }
18

            
19
20
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
20
20
    return std::make_unique<ConfigMessage>();
21
20
  }
22

            
23
protected:
24
4
  ConfigFactory& rawSocketConfigFactory() {
25
4
    return Config::Utility::getAndCheckFactoryByName<ConfigFactory>(
26
4
        "envoy.transport_sockets.raw_buffer");
27
4
  }
28

            
29
4
  ConfigFactory& tlsSocketConfigFactory() {
30
4
    return Config::Utility::getAndCheckFactoryByName<ConfigFactory>("envoy.transport_sockets.tls");
31
4
  }
32
};
33

            
34
class DownstreamStartTlsSocketFactory
35
    : public BaseStartTlsSocketFactory<
36
          Server::Configuration::DownstreamTransportSocketConfigFactory,
37
          envoy::extensions::transport_sockets::starttls::v3::StartTlsConfig> {
38
public:
39
  absl::StatusOr<Network::DownstreamTransportSocketFactoryPtr>
40
  createTransportSocketFactory(const Protobuf::Message& config,
41
                               Server::Configuration::TransportSocketFactoryContext& context,
42
                               const std::vector<std::string>& server_names) override;
43
};
44

            
45
class UpstreamStartTlsSocketFactory
46
    : public BaseStartTlsSocketFactory<
47
          Server::Configuration::UpstreamTransportSocketConfigFactory,
48
          envoy::extensions::transport_sockets::starttls::v3::UpstreamStartTlsConfig> {
49
public:
50
  absl::StatusOr<Network::UpstreamTransportSocketFactoryPtr> createTransportSocketFactory(
51
      const Protobuf::Message& config,
52
      Server::Configuration::TransportSocketFactoryContext& context) override;
53
};
54

            
55
DECLARE_FACTORY(DownstreamStartTlsSocketFactory);
56
DECLARE_FACTORY(UpstreamStartTlsSocketFactory);
57

            
58
} // namespace StartTls
59
} // namespace TransportSockets
60
} // namespace Extensions
61
} // namespace Envoy