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

            
3
#include "envoy/extensions/transport_sockets/proxy_protocol/v3/upstream_proxy_protocol.pb.h"
4
#include "envoy/extensions/transport_sockets/proxy_protocol/v3/upstream_proxy_protocol.pb.validate.h"
5
#include "envoy/registry/registry.h"
6

            
7
#include "source/common/config/utility.h"
8
#include "source/extensions/transport_sockets/proxy_protocol/proxy_protocol.h"
9

            
10
namespace Envoy {
11
namespace Extensions {
12
namespace TransportSockets {
13
namespace ProxyProtocol {
14

            
15
absl::StatusOr<Network::UpstreamTransportSocketFactoryPtr>
16
UpstreamProxyProtocolSocketConfigFactory::createTransportSocketFactory(
17
    const Protobuf::Message& message,
18
16
    Server::Configuration::TransportSocketFactoryContext& context) {
19
16
  const auto& outer_config =
20
16
      MessageUtil::downcastAndValidate<const envoy::extensions::transport_sockets::proxy_protocol::
21
16
                                           v3::ProxyProtocolUpstreamTransport&>(
22
16
          message, context.messageValidationVisitor());
23
16
  auto& inner_config_factory = Config::Utility::getAndCheckFactory<
24
16
      Server::Configuration::UpstreamTransportSocketConfigFactory>(outer_config.transport_socket());
25
16
  ProtobufTypes::MessagePtr inner_factory_config = Config::Utility::translateToFactoryConfig(
26
16
      outer_config.transport_socket(), context.messageValidationVisitor(), inner_config_factory);
27
16
  auto factory_or_error =
28
16
      inner_config_factory.createTransportSocketFactory(*inner_factory_config, context);
29
16
  RETURN_IF_NOT_OK_REF(factory_or_error.status());
30
16
  return std::make_unique<UpstreamProxyProtocolSocketFactory>(
31
16
      std::move(factory_or_error.value()), outer_config.config(), context.statsScope());
32
16
}
33

            
34
19
ProtobufTypes::MessagePtr UpstreamProxyProtocolSocketConfigFactory::createEmptyConfigProto() {
35
19
  return std::make_unique<
36
19
      envoy::extensions::transport_sockets::proxy_protocol::v3::ProxyProtocolUpstreamTransport>();
37
  ;
38
}
39

            
40
REGISTER_FACTORY(UpstreamProxyProtocolSocketConfigFactory,
41
                 Server::Configuration::UpstreamTransportSocketConfigFactory);
42

            
43
} // namespace ProxyProtocol
44
} // namespace TransportSockets
45
} // namespace Extensions
46
} // namespace Envoy