Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/http/filter.h" 4 : #include "envoy/server/factory_context.h" 5 : 6 : namespace Envoy { 7 : namespace Http { 8 : namespace Matching { 9 : 10 : /** 11 : * Implementation of HttpMatchingData, providing HTTP specific data to 12 : * the match tree. 13 : */ 14 : class HttpMatchingDataImpl : public HttpMatchingData { 15 : public: 16 : explicit HttpMatchingDataImpl(const StreamInfo::StreamInfo& stream_info) 17 2 : : stream_info_(stream_info) {} 18 : 19 0 : static absl::string_view name() { return "http"; } 20 : 21 2 : void onRequestHeaders(const RequestHeaderMap& request_headers) { 22 2 : request_headers_ = &request_headers; 23 2 : } 24 : 25 0 : void onRequestTrailers(const RequestTrailerMap& request_trailers) { 26 0 : request_trailers_ = &request_trailers; 27 0 : } 28 : 29 0 : void onResponseHeaders(const ResponseHeaderMap& response_headers) { 30 0 : response_headers_ = &response_headers; 31 0 : } 32 : 33 0 : void onResponseTrailers(const ResponseTrailerMap& response_trailers) { 34 0 : response_trailers_ = &response_trailers; 35 0 : } 36 : 37 0 : RequestHeaderMapOptConstRef requestHeaders() const override { 38 0 : return makeOptRefFromPtr(request_headers_); 39 0 : } 40 : 41 0 : RequestTrailerMapOptConstRef requestTrailers() const override { 42 0 : return makeOptRefFromPtr(request_trailers_); 43 0 : } 44 : 45 0 : ResponseHeaderMapOptConstRef responseHeaders() const override { 46 0 : return makeOptRefFromPtr(response_headers_); 47 0 : } 48 : 49 0 : ResponseTrailerMapOptConstRef responseTrailers() const override { 50 0 : return makeOptRefFromPtr(response_trailers_); 51 0 : } 52 : 53 0 : const StreamInfo::StreamInfo& streamInfo() const override { return stream_info_; } 54 : 55 0 : const Network::ConnectionInfoProvider& connectionInfoProvider() const override { 56 0 : return stream_info_.downstreamAddressProvider(); 57 0 : } 58 : 59 : private: 60 : const StreamInfo::StreamInfo& stream_info_; 61 : const RequestHeaderMap* request_headers_{}; 62 : const ResponseHeaderMap* response_headers_{}; 63 : const RequestTrailerMap* request_trailers_{}; 64 : const ResponseTrailerMap* response_trailers_{}; 65 : }; 66 : 67 : using HttpMatchingDataImplSharedPtr = std::shared_ptr<HttpMatchingDataImpl>; 68 : 69 : struct HttpFilterActionContext { 70 : const std::string& stat_prefix_; 71 : OptRef<Server::Configuration::FactoryContext> factory_context_; 72 : OptRef<Server::Configuration::ServerFactoryContext> server_factory_context_; 73 : }; 74 : } // namespace Matching 75 : } // namespace Http 76 : } // namespace Envoy