LCOV - code coverage report
Current view: top level - source/common/http/http1 - conn_pool.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 8 10 80.0 %
Date: 2024-01-05 06:35:25 Functions: 3 5 60.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "envoy/event/timer.h"
       4             : #include "envoy/http/codec.h"
       5             : #include "envoy/upstream/upstream.h"
       6             : 
       7             : #include "source/common/http/codec_wrappers.h"
       8             : #include "source/common/http/conn_pool_base.h"
       9             : 
      10             : namespace Envoy {
      11             : namespace Http {
      12             : namespace Http1 {
      13             : 
      14             : /**
      15             :  * An active client for HTTP/1.1 connections.
      16             :  */
      17             : class ActiveClient : public Envoy::Http::ActiveClient {
      18             : public:
      19             :   ActiveClient(HttpConnPoolImplBase& parent, OptRef<Upstream::Host::CreateConnectionData> data);
      20             :   ~ActiveClient() override;
      21             : 
      22             :   // ConnPoolImplBase::ActiveClient
      23             :   bool closingWithIncompleteStream() const override;
      24             :   RequestEncoder& newStreamEncoder(ResponseDecoder& response_decoder) override;
      25             : 
      26         467 :   uint32_t numActiveStreams() const override {
      27             :     // Override the parent class using the codec for numActiveStreams.
      28             :     // Unfortunately for the HTTP/1 codec, the stream is destroyed before decode
      29             :     // is complete, and we must make sure the connection pool does not observe available
      30             :     // capacity and assign a new stream before decode is complete.
      31         467 :     return stream_wrapper_.get() ? 1 : 0;
      32         467 :   }
      33          68 :   void releaseResources() override {
      34          68 :     parent_.dispatcher().deferredDelete(std::move(stream_wrapper_));
      35          68 :     Envoy::Http::ActiveClient::releaseResources();
      36          68 :   }
      37             : 
      38             :   struct StreamWrapper : public RequestEncoderWrapper,
      39             :                          public ResponseDecoderWrapper,
      40             :                          public StreamCallbacks,
      41             :                          public Event::DeferredDeletable,
      42             :                          protected Logger::Loggable<Logger::Id::pool> {
      43             :   public:
      44             :     StreamWrapper(ResponseDecoder& response_decoder, ActiveClient& parent);
      45             :     ~StreamWrapper() override;
      46             : 
      47             :     // StreamEncoderWrapper
      48             :     void onEncodeComplete() override;
      49             : 
      50             :     // StreamDecoderWrapper
      51             :     void decodeHeaders(ResponseHeaderMapPtr&& headers, bool end_stream) override;
      52          33 :     void onPreDecodeComplete() override {}
      53             :     void onDecodeComplete() override;
      54             : 
      55             :     // Http::StreamCallbacks
      56             :     void onResetStream(StreamResetReason, absl::string_view) override;
      57           0 :     void onAboveWriteBufferHighWatermark() override {}
      58           0 :     void onBelowWriteBufferLowWatermark() override {}
      59             : 
      60             :     ActiveClient& parent_;
      61             :     bool stream_incomplete_{};
      62             :     bool encode_complete_{};
      63             :     bool decode_complete_{};
      64             :     bool close_connection_{};
      65             :   };
      66             :   using StreamWrapperPtr = std::unique_ptr<StreamWrapper>;
      67             : 
      68             :   StreamWrapperPtr stream_wrapper_;
      69             : };
      70             : 
      71             : ConnectionPool::InstancePtr
      72             : allocateConnPool(Event::Dispatcher& dispatcher, Random::RandomGenerator& random_generator,
      73             :                  Upstream::HostConstSharedPtr host, Upstream::ResourcePriority priority,
      74             :                  const Network::ConnectionSocket::OptionsSharedPtr& options,
      75             :                  const Network::TransportSocketOptionsConstSharedPtr& transport_socket_options,
      76             :                  Upstream::ClusterConnectivityState& state);
      77             : 
      78             : } // namespace Http1
      79             : } // namespace Http
      80             : } // namespace Envoy

Generated by: LCOV version 1.15