1
#include "source/extensions/transport_sockets/starttls/config.h"
2

            
3
#include "source/extensions/transport_sockets/starttls/starttls_socket.h"
4

            
5
namespace Envoy {
6
namespace Extensions {
7
namespace TransportSockets {
8
namespace StartTls {
9

            
10
absl::StatusOr<Network::DownstreamTransportSocketFactoryPtr>
11
DownstreamStartTlsSocketFactory::createTransportSocketFactory(
12
    const Protobuf::Message& message, Server::Configuration::TransportSocketFactoryContext& context,
13
2
    const std::vector<std::string>& server_names) {
14
2
  const auto& outer_config = MessageUtil::downcastAndValidate<
15
2
      const envoy::extensions::transport_sockets::starttls::v3::StartTlsConfig&>(
16
2
      message, context.messageValidationVisitor());
17

            
18
2
  auto& raw_socket_config_factory = rawSocketConfigFactory();
19
2
  auto& tls_socket_config_factory = tlsSocketConfigFactory();
20

            
21
2
  auto raw_or_error = raw_socket_config_factory.createTransportSocketFactory(
22
2
      outer_config.cleartext_socket_config(), context, server_names);
23
2
  RETURN_IF_NOT_OK_REF(raw_or_error.status());
24

            
25
2
  auto factory_or_error = tls_socket_config_factory.createTransportSocketFactory(
26
2
      outer_config.tls_socket_config(), context, server_names);
27
2
  RETURN_IF_NOT_OK_REF(factory_or_error.status());
28

            
29
2
  return std::make_unique<StartTlsDownstreamSocketFactory>(std::move(raw_or_error.value()),
30
2
                                                           std::move(factory_or_error.value()));
31
2
}
32

            
33
absl::StatusOr<Network::UpstreamTransportSocketFactoryPtr>
34
UpstreamStartTlsSocketFactory::createTransportSocketFactory(
35
    const Protobuf::Message& message,
36
2
    Server::Configuration::TransportSocketFactoryContext& context) {
37

            
38
2
  const auto& outer_config = MessageUtil::downcastAndValidate<
39
2
      const envoy::extensions::transport_sockets::starttls::v3::UpstreamStartTlsConfig&>(
40
2
      message, context.messageValidationVisitor());
41
2
  auto& raw_socket_config_factory = rawSocketConfigFactory();
42
2
  auto& tls_socket_config_factory = tlsSocketConfigFactory();
43

            
44
2
  auto raw_or_error = raw_socket_config_factory.createTransportSocketFactory(
45
2
      outer_config.cleartext_socket_config(), context);
46
2
  RETURN_IF_NOT_OK_REF(raw_or_error.status());
47

            
48
2
  auto factory_or_error = tls_socket_config_factory.createTransportSocketFactory(
49
2
      outer_config.tls_socket_config(), context);
50
2
  RETURN_IF_NOT_OK_REF(factory_or_error.status());
51

            
52
2
  return std::make_unique<StartTlsSocketFactory>(std::move(raw_or_error.value()),
53
2
                                                 std::move(factory_or_error.value()));
54
2
}
55

            
56
LEGACY_REGISTER_FACTORY(DownstreamStartTlsSocketFactory,
57
                        Server::Configuration::DownstreamTransportSocketConfigFactory, "starttls");
58

            
59
LEGACY_REGISTER_FACTORY(UpstreamStartTlsSocketFactory,
60
                        Server::Configuration::UpstreamTransportSocketConfigFactory, "starttls");
61

            
62
} // namespace StartTls
63
} // namespace TransportSockets
64
} // namespace Extensions
65
} // namespace Envoy