/proc/self/cwd/source/common/router/reset_header_parser.h
Line | Count | Source (jump to first uncovered line) |
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 | 7.36k | reset_headers) { |
34 | 7.36k | std::vector<ResetHeaderParserSharedPtr> ret; |
35 | 25.1k | for (const auto& reset_header : reset_headers) { |
36 | 25.1k | ret.emplace_back(std::make_shared<ResetHeaderParserImpl>(reset_header)); |
37 | 25.1k | } |
38 | 7.36k | return ret; |
39 | 7.36k | } |
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 |