1
#pragma once
2

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

            
6
#include "source/extensions/transport_sockets/common/passthrough.h"
7
#include "source/extensions/transport_sockets/tcp_stats/tcp_stats.h"
8

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

            
14
class TcpStatsSocketFactory {
15
public:
16
  TcpStatsSocketFactory(Server::Configuration::TransportSocketFactoryContext& context,
17
                        const envoy::extensions::transport_sockets::tcp_stats::v3::Config& config);
18

            
19
protected:
20
#if defined(__linux__)
21
  ConfigConstSharedPtr config_;
22
#endif
23
};
24

            
25
class UpstreamTcpStatsSocketFactory : public TcpStatsSocketFactory, public PassthroughFactory {
26
public:
27
  UpstreamTcpStatsSocketFactory(
28
      Server::Configuration::TransportSocketFactoryContext& context,
29
      const envoy::extensions::transport_sockets::tcp_stats::v3::Config& config,
30
      Network::UpstreamTransportSocketFactoryPtr&& inner_factory);
31

            
32
  Network::TransportSocketPtr
33
  createTransportSocket(Network::TransportSocketOptionsConstSharedPtr options,
34
                        Upstream::HostDescriptionConstSharedPtr host) const override;
35
};
36

            
37
class DownstreamTcpStatsSocketFactory : public TcpStatsSocketFactory,
38
                                        public DownstreamPassthroughFactory {
39
public:
40
  DownstreamTcpStatsSocketFactory(
41
      Server::Configuration::TransportSocketFactoryContext& context,
42
      const envoy::extensions::transport_sockets::tcp_stats::v3::Config& config,
43
      Network::DownstreamTransportSocketFactoryPtr&& inner_factory);
44

            
45
  Network::TransportSocketPtr createDownstreamTransportSocket() const override;
46
};
47

            
48
} // namespace TcpStats
49
} // namespace TransportSockets
50
} // namespace Extensions
51
} // namespace Envoy