LCOV - code coverage report
Current view: top level - source/common/http - codec_wrappers.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 47 70 67.1 %
Date: 2024-01-05 06:35:25 Functions: 9 15 60.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include "envoy/http/codec.h"
       4             : 
       5             : namespace Envoy {
       6             : namespace Http {
       7             : 
       8             : /**
       9             :  * Wrapper for ResponseDecoder that just forwards to an "inner" decoder.
      10             :  */
      11             : class ResponseDecoderWrapper : public ResponseDecoder {
      12             : public:
      13             :   // ResponseDecoder
      14           0 :   void decode1xxHeaders(ResponseHeaderMapPtr&& headers) override {
      15           0 :     inner_.decode1xxHeaders(std::move(headers));
      16           0 :   }
      17             : 
      18         338 :   void decodeHeaders(ResponseHeaderMapPtr&& headers, bool end_stream) override {
      19         338 :     if (end_stream) {
      20          40 :       onPreDecodeComplete();
      21          40 :     }
      22         338 :     inner_.decodeHeaders(std::move(headers), end_stream);
      23         338 :     if (end_stream) {
      24          40 :       onDecodeComplete();
      25          40 :     }
      26         338 :   }
      27             : 
      28         755 :   void decodeData(Buffer::Instance& data, bool end_stream) override {
      29         755 :     if (end_stream) {
      30         244 :       onPreDecodeComplete();
      31         244 :     }
      32         755 :     inner_.decodeData(data, end_stream);
      33         755 :     if (end_stream) {
      34         244 :       onDecodeComplete();
      35         244 :     }
      36         755 :   }
      37             : 
      38           9 :   void decodeTrailers(ResponseTrailerMapPtr&& trailers) override {
      39           9 :     onPreDecodeComplete();
      40           9 :     inner_.decodeTrailers(std::move(trailers));
      41           9 :     onDecodeComplete();
      42           9 :   }
      43             : 
      44           2 :   void decodeMetadata(MetadataMapPtr&& metadata_map) override {
      45           2 :     inner_.decodeMetadata(std::move(metadata_map));
      46           2 :   }
      47             : 
      48           0 :   void dumpState(std::ostream& os, int indent_level) const override {
      49           0 :     inner_.dumpState(os, indent_level);
      50           0 :   }
      51             : 
      52             : protected:
      53         452 :   ResponseDecoderWrapper(ResponseDecoder& inner) : inner_(inner) {}
      54             : 
      55             :   /**
      56             :    * Consumers of the wrapper generally want to know when a decode is complete. This is called
      57             :    * at that time and is implemented by derived classes.
      58             :    */
      59             :   virtual void onPreDecodeComplete() PURE;
      60             :   virtual void onDecodeComplete() PURE;
      61             : 
      62             :   ResponseDecoder& inner_;
      63             : };
      64             : 
      65             : /**
      66             :  * Wrapper for RequestEncoder that just forwards to an "inner" encoder.
      67             :  */
      68             : class RequestEncoderWrapper : public RequestEncoder {
      69             : public:
      70             :   // RequestEncoder
      71         452 :   Status encodeHeaders(const RequestHeaderMap& headers, bool end_stream) override {
      72         452 :     ASSERT(inner_encoder_);
      73         452 :     RETURN_IF_ERROR(inner_encoder_->encodeHeaders(headers, end_stream));
      74         452 :     if (end_stream) {
      75         214 :       onEncodeComplete();
      76         214 :     }
      77         452 :     return okStatus();
      78         452 :   }
      79             : 
      80         613 :   void encodeData(Buffer::Instance& data, bool end_stream) override {
      81         613 :     ASSERT(inner_encoder_);
      82         613 :     inner_encoder_->encodeData(data, end_stream);
      83         613 :     if (end_stream) {
      84         181 :       onEncodeComplete();
      85         181 :     }
      86         613 :   }
      87             : 
      88           0 :   void encodeTrailers(const RequestTrailerMap& trailers) override {
      89           0 :     ASSERT(inner_encoder_);
      90           0 :     inner_encoder_->encodeTrailers(trailers);
      91           0 :     onEncodeComplete();
      92           0 :   }
      93             : 
      94           0 :   void enableTcpTunneling() override {
      95           0 :     ASSERT(inner_encoder_);
      96           0 :     inner_encoder_->enableTcpTunneling();
      97           0 :   }
      98             : 
      99           0 :   void encodeMetadata(const MetadataMapVector& metadata_map_vector) override {
     100           0 :     ASSERT(inner_encoder_);
     101           0 :     inner_encoder_->encodeMetadata(metadata_map_vector);
     102           0 :   }
     103             : 
     104        1473 :   Stream& getStream() override {
     105        1473 :     ASSERT(inner_encoder_);
     106        1473 :     return inner_encoder_->getStream();
     107        1473 :   }
     108             : 
     109           0 :   Http1StreamEncoderOptionsOptRef http1StreamEncoderOptions() override {
     110           0 :     ASSERT(inner_encoder_);
     111           0 :     return inner_encoder_->http1StreamEncoderOptions();
     112           0 :   }
     113             : 
     114             : protected:
     115         452 :   RequestEncoderWrapper(RequestEncoder* inner) : inner_encoder_(inner) {}
     116             : 
     117             :   /**
     118             :    * Consumers of the wrapper generally want to know when an encode is complete. This is called at
     119             :    * that time and is implemented by derived classes.
     120             :    */
     121             :   virtual void onEncodeComplete() PURE;
     122             : 
     123             :   RequestEncoder* inner_encoder_;
     124             : };
     125             : 
     126             : } // namespace Http
     127             : } // namespace Envoy

Generated by: LCOV version 1.15