LCOV - code coverage report
Current view: top level - source/common/router - reset_header_parser.h (source / functions) Hit Total Coverage
Test: coverage.dat Lines: 0 9 0.0 %
Date: 2024-01-05 06:35:25 Functions: 0 3 0.0 %

          Line data    Source code
       1             : #pragma once
       2             : 
       3             : #include <chrono>
       4             : #include <memory>
       5             : #include <vector>
       6             : 
       7             : #include "envoy/common/time.h"
       8             : #include "envoy/config/route/v3/route_components.pb.h"
       9             : #include "envoy/http/header_map.h"
      10             : #include "envoy/router/router.h"
      11             : 
      12             : #include "source/common/protobuf/protobuf.h"
      13             : 
      14             : #include "absl/types/optional.h"
      15             : 
      16             : namespace Envoy {
      17             : namespace Router {
      18             : 
      19             : enum class ResetHeaderFormat { Seconds, UnixTimestamp };
      20             : 
      21             : /**
      22             :  * A ResetHeaderParser specifies a header name and a format to match against
      23             :  * response headers that are used to signal a rate limit interval reset, such
      24             :  * as Retry-After or X-RateLimit-Reset.
      25             :  */
      26             : class ResetHeaderParserImpl : public ResetHeaderParser {
      27             : public:
      28             :   /**
      29             :    * Build a vector of ResetHeaderParserSharedPtr given input config.
      30             :    */
      31             :   static std::vector<ResetHeaderParserSharedPtr> buildResetHeaderParserVector(
      32             :       const Protobuf::RepeatedPtrField<envoy::config::route::v3::RetryPolicy::ResetHeader>&
      33           0 :           reset_headers) {
      34           0 :     std::vector<ResetHeaderParserSharedPtr> ret;
      35           0 :     for (const auto& reset_header : reset_headers) {
      36           0 :       ret.emplace_back(std::make_shared<ResetHeaderParserImpl>(reset_header));
      37           0 :     }
      38           0 :     return ret;
      39           0 :   }
      40             : 
      41             :   ResetHeaderParserImpl(const envoy::config::route::v3::RetryPolicy::ResetHeader& config);
      42             : 
      43           0 :   const Http::LowerCaseString& name() const { return name_; }
      44           0 :   ResetHeaderFormat format() const { return format_; }
      45             : 
      46             :   /**
      47             :    * Iterate over the headers, choose the first one that matches by name, and try to parse its
      48             :    * value.
      49             :    */
      50             :   absl::optional<std::chrono::milliseconds>
      51             :   parseInterval(TimeSource& time_source, const Http::HeaderMap& headers) const override;
      52             : 
      53             : private:
      54             :   const Http::LowerCaseString name_;
      55             :   ResetHeaderFormat format_;
      56             : };
      57             : 
      58             : } // namespace Router
      59             : } // namespace Envoy

Generated by: LCOV version 1.15