LCOV - code coverage report
Current view: top level - source/extensions/transport_sockets/tcp_stats - config.cc (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 4 58 6.9 %
Date: 2024-01-05 06:35:25 Functions: 2 11 18.2 %

          Line data    Source code
       1             : #include "source/extensions/transport_sockets/tcp_stats/config.h"
       2             : 
       3             : #include "envoy/extensions/transport_sockets/tcp_stats/v3/tcp_stats.pb.validate.h"
       4             : #include "envoy/registry/registry.h"
       5             : #include "envoy/server/transport_socket_config.h"
       6             : 
       7             : #include "source/common/config/utility.h"
       8             : #include "source/extensions/transport_sockets/tcp_stats/tcp_stats.h"
       9             : 
      10             : namespace Envoy {
      11             : namespace Extensions {
      12             : namespace TransportSockets {
      13             : namespace TcpStats {
      14             : 
      15             : TcpStatsSocketFactory::TcpStatsSocketFactory(
      16             :     Server::Configuration::TransportSocketFactoryContext& context,
      17           0 :     const envoy::extensions::transport_sockets::tcp_stats::v3::Config& config) {
      18           0 : #if defined(__linux__)
      19           0 :   config_ = std::make_shared<Config>(config, context.statsScope());
      20             : #else
      21             :   UNREFERENCED_PARAMETER(config);
      22             :   UNREFERENCED_PARAMETER(context);
      23             :   throw EnvoyException("envoy.transport_sockets.tcp_stats is not supported on this platform.");
      24             : #endif
      25           0 : }
      26             : 
      27             : UpstreamTcpStatsSocketFactory::UpstreamTcpStatsSocketFactory(
      28             :     Server::Configuration::TransportSocketFactoryContext& context,
      29             :     const envoy::extensions::transport_sockets::tcp_stats::v3::Config& config,
      30             :     Network::UpstreamTransportSocketFactoryPtr&& inner_factory)
      31           0 :     : TcpStatsSocketFactory(context, config), PassthroughFactory(std::move(inner_factory)) {}
      32             : 
      33             : Network::TransportSocketPtr UpstreamTcpStatsSocketFactory::createTransportSocket(
      34             :     Network::TransportSocketOptionsConstSharedPtr options,
      35           0 :     Upstream::HostDescriptionConstSharedPtr host) const {
      36           0 : #if defined(__linux__)
      37           0 :   auto inner_socket = transport_socket_factory_->createTransportSocket(options, host);
      38           0 :   if (inner_socket == nullptr) {
      39           0 :     return nullptr;
      40           0 :   }
      41           0 :   return std::make_unique<TcpStatsSocket>(config_, std::move(inner_socket));
      42             : #else
      43             :   UNREFERENCED_PARAMETER(options);
      44             :   UNREFERENCED_PARAMETER(host);
      45             :   return nullptr;
      46             : #endif
      47           0 : }
      48             : 
      49             : DownstreamTcpStatsSocketFactory::DownstreamTcpStatsSocketFactory(
      50             :     Server::Configuration::TransportSocketFactoryContext& context,
      51             :     const envoy::extensions::transport_sockets::tcp_stats::v3::Config& config,
      52             :     Network::DownstreamTransportSocketFactoryPtr&& inner_factory)
      53             :     : TcpStatsSocketFactory(context, config),
      54           0 :       DownstreamPassthroughFactory(std::move(inner_factory)) {}
      55             : 
      56             : Network::TransportSocketPtr
      57           0 : DownstreamTcpStatsSocketFactory::createDownstreamTransportSocket() const {
      58           0 : #if defined(__linux__)
      59           0 :   auto inner_socket = transport_socket_factory_->createDownstreamTransportSocket();
      60           0 :   if (inner_socket == nullptr) {
      61           0 :     return nullptr;
      62           0 :   }
      63           0 :   return std::make_unique<TcpStatsSocket>(config_, std::move(inner_socket));
      64             : #else
      65             :   return nullptr;
      66             : #endif
      67           0 : }
      68             : 
      69             : class TcpStatsConfigFactory : public virtual Server::Configuration::TransportSocketConfigFactory {
      70             : public:
      71          76 :   std::string name() const override { return "envoy.transport_sockets.tcp_stats"; }
      72           2 :   ProtobufTypes::MessagePtr createEmptyConfigProto() override {
      73           2 :     return std::make_unique<envoy::extensions::transport_sockets::tcp_stats::v3::Config>();
      74           2 :   }
      75             : };
      76             : 
      77             : class UpstreamTcpStatsConfigFactory
      78             :     : public Server::Configuration::UpstreamTransportSocketConfigFactory,
      79             :       public TcpStatsConfigFactory {
      80             : public:
      81             :   Network::UpstreamTransportSocketFactoryPtr createTransportSocketFactory(
      82             :       const Protobuf::Message& config,
      83           0 :       Server::Configuration::TransportSocketFactoryContext& context) override {
      84           0 :     const auto& outer_config = MessageUtil::downcastAndValidate<
      85           0 :         const envoy::extensions::transport_sockets::tcp_stats::v3::Config&>(
      86           0 :         config, context.messageValidationVisitor());
      87           0 :     auto& inner_config_factory = Envoy::Config::Utility::getAndCheckFactory<
      88           0 :         Server::Configuration::UpstreamTransportSocketConfigFactory>(
      89           0 :         outer_config.transport_socket());
      90           0 :     ProtobufTypes::MessagePtr inner_factory_config =
      91           0 :         Envoy::Config::Utility::translateToFactoryConfig(outer_config.transport_socket(),
      92           0 :                                                          context.messageValidationVisitor(),
      93           0 :                                                          inner_config_factory);
      94           0 :     auto inner_transport_factory =
      95           0 :         inner_config_factory.createTransportSocketFactory(*inner_factory_config, context);
      96           0 :     return std::make_unique<UpstreamTcpStatsSocketFactory>(context, outer_config,
      97           0 :                                                            std::move(inner_transport_factory));
      98           0 :   }
      99             : };
     100             : 
     101             : class DownstreamTcpStatsConfigFactory
     102             :     : public Server::Configuration::DownstreamTransportSocketConfigFactory,
     103             :       public TcpStatsConfigFactory {
     104             : public:
     105             :   Network::DownstreamTransportSocketFactoryPtr
     106             :   createTransportSocketFactory(const Protobuf::Message& config,
     107             :                                Server::Configuration::TransportSocketFactoryContext& context,
     108           0 :                                const std::vector<std::string>& server_names) override {
     109           0 :     const auto& outer_config = MessageUtil::downcastAndValidate<
     110           0 :         const envoy::extensions::transport_sockets::tcp_stats::v3::Config&>(
     111           0 :         config, context.messageValidationVisitor());
     112           0 :     auto& inner_config_factory = Envoy::Config::Utility::getAndCheckFactory<
     113           0 :         Server::Configuration::DownstreamTransportSocketConfigFactory>(
     114           0 :         outer_config.transport_socket());
     115           0 :     ProtobufTypes::MessagePtr inner_factory_config =
     116           0 :         Envoy::Config::Utility::translateToFactoryConfig(outer_config.transport_socket(),
     117           0 :                                                          context.messageValidationVisitor(),
     118           0 :                                                          inner_config_factory);
     119           0 :     auto inner_transport_factory = inner_config_factory.createTransportSocketFactory(
     120           0 :         *inner_factory_config, context, server_names);
     121           0 :     return std::make_unique<DownstreamTcpStatsSocketFactory>(context, outer_config,
     122           0 :                                                              std::move(inner_transport_factory));
     123           0 :   }
     124             : };
     125             : 
     126             : REGISTER_FACTORY(UpstreamTcpStatsConfigFactory,
     127             :                  Server::Configuration::UpstreamTransportSocketConfigFactory);
     128             : 
     129             : REGISTER_FACTORY(DownstreamTcpStatsConfigFactory,
     130             :                  Server::Configuration::DownstreamTransportSocketConfigFactory);
     131             : 
     132             : } // namespace TcpStats
     133             : } // namespace TransportSockets
     134             : } // namespace Extensions
     135             : } // namespace Envoy

Generated by: LCOV version 1.15