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

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "envoy/config/tap/v3/common.pb.h"
       4             : #include "envoy/data/tap/v3/transport.pb.h"
       5             : #include "envoy/event/timer.h"
       6             : #include "envoy/server/transport_socket_config.h"
       7             : 
       8             : #include "source/extensions/common/tap/tap_config_base.h"
       9             : #include "source/extensions/transport_sockets/tap/tap_config.h"
      10             : 
      11             : namespace Envoy {
      12             : namespace Extensions {
      13             : namespace TransportSockets {
      14             : namespace Tap {
      15             : 
      16             : class PerSocketTapperImpl : public PerSocketTapper {
      17             : public:
      18             :   PerSocketTapperImpl(SocketTapConfigSharedPtr config, const Network::Connection& connection);
      19             : 
      20             :   // PerSocketTapper
      21             :   void closeSocket(Network::ConnectionEvent event) override;
      22             :   void onRead(const Buffer::Instance& data, uint32_t bytes_read) override;
      23             :   void onWrite(const Buffer::Instance& data, uint32_t bytes_written, bool end_stream) override;
      24             : 
      25             : private:
      26             :   void initEvent(envoy::data::tap::v3::SocketEvent&);
      27             :   void fillConnectionInfo(envoy::data::tap::v3::Connection& connection);
      28           0 :   void makeBufferedTraceIfNeeded() {
      29           0 :     if (buffered_trace_ == nullptr) {
      30           0 :       buffered_trace_ = Extensions::Common::Tap::makeTraceWrapper();
      31           0 :       buffered_trace_->mutable_socket_buffered_trace()->set_trace_id(connection_.id());
      32           0 :     }
      33           0 :   }
      34           0 :   Extensions::Common::Tap::TraceWrapperPtr makeTraceSegment() {
      35           0 :     Extensions::Common::Tap::TraceWrapperPtr trace = Extensions::Common::Tap::makeTraceWrapper();
      36           0 :     trace->mutable_socket_streamed_trace_segment()->set_trace_id(connection_.id());
      37           0 :     return trace;
      38           0 :   }
      39             : 
      40             :   SocketTapConfigSharedPtr config_;
      41             :   Extensions::Common::Tap::PerTapSinkHandleManagerPtr sink_handle_;
      42             :   const Network::Connection& connection_;
      43             :   Extensions::Common::Tap::Matcher::MatchStatusVector statuses_;
      44             :   // Must be a shared_ptr because of submitTrace().
      45             :   Extensions::Common::Tap::TraceWrapperPtr buffered_trace_;
      46             :   uint32_t rx_bytes_buffered_{};
      47             :   uint32_t tx_bytes_buffered_{};
      48             : };
      49             : 
      50             : class SocketTapConfigImpl : public Extensions::Common::Tap::TapConfigBaseImpl,
      51             :                             public SocketTapConfig,
      52             :                             public std::enable_shared_from_this<SocketTapConfigImpl> {
      53             : public:
      54             :   SocketTapConfigImpl(const envoy::config::tap::v3::TapConfig& proto_config,
      55             :                       Extensions::Common::Tap::Sink* admin_streamer, TimeSource& time_system,
      56             :                       Server::Configuration::TransportSocketFactoryContext& context)
      57             :       : Extensions::Common::Tap::TapConfigBaseImpl(std::move(proto_config), admin_streamer,
      58             :                                                    context),
      59           0 :         time_source_(time_system) {}
      60             : 
      61             :   // SocketTapConfig
      62           0 :   PerSocketTapperPtr createPerSocketTapper(const Network::Connection& connection) override {
      63           0 :     return std::make_unique<PerSocketTapperImpl>(shared_from_this(), connection);
      64           0 :   }
      65           0 :   TimeSource& timeSource() const override { return time_source_; }
      66             : 
      67             : private:
      68             :   TimeSource& time_source_;
      69             : 
      70             :   friend class PerSocketTapperImpl;
      71             : };
      72             : 
      73             : } // namespace Tap
      74             : } // namespace TransportSockets
      75             : } // namespace Extensions
      76             : } // namespace Envoy

Generated by: LCOV version 1.15