LCOV - code coverage report
Current view: top level - source/extensions/transport_sockets/proxy_protocol - proxy_protocol.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 1 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 0 -

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "envoy/config/core/v3/proxy_protocol.pb.h"
       4             : #include "envoy/network/connection.h"
       5             : #include "envoy/network/transport_socket.h"
       6             : #include "envoy/stats/stats.h"
       7             : 
       8             : #include "source/common/buffer/buffer_impl.h"
       9             : #include "source/common/common/logger.h"
      10             : #include "source/extensions/transport_sockets/common/passthrough.h"
      11             : 
      12             : using envoy::config::core::v3::ProxyProtocolConfig;
      13             : using envoy::config::core::v3::ProxyProtocolConfig_Version;
      14             : 
      15             : namespace Envoy {
      16             : namespace Extensions {
      17             : namespace TransportSockets {
      18             : namespace ProxyProtocol {
      19             : 
      20             : #define ALL_PROXY_PROTOCOL_TRANSPORT_SOCKET_STATS(COUNTER)                                         \
      21             :   /* Upstream events counter. */                                                                   \
      22           0 :   COUNTER(v2_tlvs_exceed_max_length)
      23             : 
      24             : /**
      25             :  * Wrapper struct for upstream ProxyProtocol stats. @see stats_macros.h
      26             :  */
      27             : struct UpstreamProxyProtocolStats {
      28             :   ALL_PROXY_PROTOCOL_TRANSPORT_SOCKET_STATS(GENERATE_COUNTER_STRUCT)
      29             : };
      30             : 
      31             : class UpstreamProxyProtocolSocket : public TransportSockets::PassthroughSocket,
      32             :                                     public Logger::Loggable<Logger::Id::connection> {
      33             : public:
      34             :   UpstreamProxyProtocolSocket(Network::TransportSocketPtr&& transport_socket,
      35             :                               Network::TransportSocketOptionsConstSharedPtr options,
      36             :                               ProxyProtocolConfig config, Stats::Scope& scope);
      37             : 
      38             :   void setTransportSocketCallbacks(Network::TransportSocketCallbacks& callbacks) override;
      39             :   Network::IoResult doWrite(Buffer::Instance& buffer, bool end_stream) override;
      40             :   void onConnected() override;
      41             : 
      42             : private:
      43             :   void generateHeader();
      44             :   void generateHeaderV1();
      45             :   void generateHeaderV2();
      46             :   Network::IoResult writeHeader();
      47             : 
      48             :   Network::TransportSocketOptionsConstSharedPtr options_;
      49             :   Network::TransportSocketCallbacks* callbacks_{};
      50             :   Buffer::OwnedImpl header_buffer_{};
      51             :   ProxyProtocolConfig_Version version_{ProxyProtocolConfig_Version::ProxyProtocolConfig_Version_V1};
      52             :   UpstreamProxyProtocolStats stats_;
      53             :   const bool pass_all_tlvs_;
      54             :   absl::flat_hash_set<uint8_t> pass_through_tlvs_{};
      55             : };
      56             : 
      57             : class UpstreamProxyProtocolSocketFactory : public PassthroughFactory {
      58             : public:
      59             :   UpstreamProxyProtocolSocketFactory(
      60             :       Network::UpstreamTransportSocketFactoryPtr transport_socket_factory,
      61             :       ProxyProtocolConfig config, Stats::Scope& scope);
      62             : 
      63             :   // Network::UpstreamTransportSocketFactory
      64             :   Network::TransportSocketPtr
      65             :   createTransportSocket(Network::TransportSocketOptionsConstSharedPtr options,
      66             :                         Upstream::HostDescriptionConstSharedPtr host) const override;
      67             :   void hashKey(std::vector<uint8_t>& key,
      68             :                Network::TransportSocketOptionsConstSharedPtr options) const override;
      69             : 
      70             : private:
      71             :   ProxyProtocolConfig config_;
      72             :   Stats::Scope& scope_;
      73             : };
      74             : 
      75             : } // namespace ProxyProtocol
      76             : } // namespace TransportSockets
      77             : } // namespace Extensions
      78             : } // namespace Envoy

Generated by: LCOV version 1.15