/
delegating_route_impl.h
119 lines (105 loc) · 5.17 KB
/
delegating_route_impl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#pragma once
#include "envoy/router/router.h"
#include "source/common/config/metadata.h"
namespace Envoy {
namespace Router {
/**
* Wrapper class around Router::Route that delegates all method calls to the RouteConstSharedPtr
* base route it wraps around.
*
* Intended to be used as a route mutability mechanism, where a filter can create a derived class of
* DelegatingRoute and override specific methods (e.g. routeEntry) while preserving the rest of the
* properties/behavior of the base route.
*/
class DelegatingRoute : public Router::Route {
public:
explicit DelegatingRoute(Router::RouteConstSharedPtr route) : base_route_(std::move(route)) {
ASSERT(base_route_ != nullptr);
}
// Router::Route
const Router::DirectResponseEntry* directResponseEntry() const override;
const Router::RouteEntry* routeEntry() const override;
const Router::Decorator* decorator() const override;
const Router::RouteTracing* tracingConfig() const override;
const RouteSpecificFilterConfig*
mostSpecificPerFilterConfig(const std::string& name) const override {
return base_route_->mostSpecificPerFilterConfig(name);
}
void traversePerFilterConfig(
const std::string& filter_name,
std::function<void(const Router::RouteSpecificFilterConfig&)> cb) const override {
base_route_->traversePerFilterConfig(filter_name, cb);
}
const envoy::config::core::v3::Metadata& metadata() const override {
return base_route_->metadata();
}
const Envoy::Config::TypedMetadata& typedMetadata() const override {
return base_route_->typedMetadata();
}
private:
const Router::RouteConstSharedPtr base_route_;
};
/**
* Wrapper class around Router::RouteEntry that delegates all method calls to the
* RouteConstSharedPtr base route it wraps around.
*
* Intended to be used with DelegatingRoute when a filter wants to override the routeEntry() method.
* See example with SetRouteFilter in test/integration/filters.
*/
class DelegatingRouteEntry : public Router::RouteEntry {
public:
explicit DelegatingRouteEntry(Router::RouteConstSharedPtr route) : base_route_(std::move(route)) {
ASSERT(base_route_ != nullptr);
}
// Router::ResponseEntry
void finalizeResponseHeaders(Http::ResponseHeaderMap& headers,
const StreamInfo::StreamInfo& stream_info) const override;
Http::HeaderTransforms responseHeaderTransforms(const StreamInfo::StreamInfo& stream_info,
bool do_formatting = true) const override;
// Router::RouteEntry
const std::string& clusterName() const override;
Http::Code clusterNotFoundResponseCode() const override;
const CorsPolicy* corsPolicy() const override;
absl::optional<std::string>
currentUrlPathAfterRewrite(const Http::RequestHeaderMap& headers) const override;
void finalizeRequestHeaders(Http::RequestHeaderMap& headers,
const StreamInfo::StreamInfo& stream_info,
bool insert_envoy_original_path) const override;
Http::HeaderTransforms requestHeaderTransforms(const StreamInfo::StreamInfo& stream_info,
bool do_formatting = true) const override;
const Http::HashPolicy* hashPolicy() const override;
const HedgePolicy& hedgePolicy() const override;
Upstream::ResourcePriority priority() const override;
const RateLimitPolicy& rateLimitPolicy() const override;
const RetryPolicy& retryPolicy() const override;
const InternalRedirectPolicy& internalRedirectPolicy() const override;
uint32_t retryShadowBufferLimit() const override;
const std::vector<Router::ShadowPolicyPtr>& shadowPolicies() const override;
std::chrono::milliseconds timeout() const override;
absl::optional<std::chrono::milliseconds> idleTimeout() const override;
bool usingNewTimeouts() const override;
absl::optional<std::chrono::milliseconds> maxStreamDuration() const override;
absl::optional<std::chrono::milliseconds> grpcTimeoutHeaderMax() const override;
absl::optional<std::chrono::milliseconds> grpcTimeoutHeaderOffset() const override;
absl::optional<std::chrono::milliseconds> maxGrpcTimeout() const override;
absl::optional<std::chrono::milliseconds> grpcTimeoutOffset() const override;
const VirtualCluster* virtualCluster(const Http::HeaderMap& headers) const override;
const VirtualHost& virtualHost() const override;
bool autoHostRewrite() const override;
bool appendXfh() const override;
const MetadataMatchCriteria* metadataMatchCriteria() const override;
const std::multimap<std::string, std::string>& opaqueConfig() const override;
bool includeVirtualHostRateLimits() const override;
const TlsContextMatchCriteria* tlsContextMatchCriteria() const override;
const PathMatchCriterion& pathMatchCriterion() const override;
bool includeAttemptCountInRequest() const override;
bool includeAttemptCountInResponse() const override;
const UpgradeMap& upgradeMap() const override;
const absl::optional<ConnectConfig>& connectConfig() const override;
const std::string& routeName() const override;
const EarlyDataPolicy& earlyDataPolicy() const override;
private:
const Router::RouteConstSharedPtr base_route_;
};
} // namespace Router
} // namespace Envoy