1
#pragma once
2

            
3
#include <memory>
4
#include <string>
5
#include <vector>
6

            
7
#include "envoy/http/filter.h"
8
#include "envoy/server/factory_context.h"
9

            
10
#include "source/common/common/utility.h"
11

            
12
namespace Envoy {
13
namespace Http {
14
namespace Matching {
15

            
16
/**
17
 * Implementation of HttpMatchingData, providing HTTP specific data to
18
 * the match tree.
19
 */
20
class HttpMatchingDataImpl : public HttpMatchingData {
21
public:
22
  explicit HttpMatchingDataImpl(const StreamInfo::StreamInfo& stream_info)
23
1120
      : stream_info_(stream_info) {}
24

            
25
  static absl::string_view name() { return "http"; }
26

            
27
830
  void onRequestHeaders(const RequestHeaderMap& request_headers) {
28
830
    request_headers_ = &request_headers;
29
830
  }
30

            
31
4
  void onRequestTrailers(const RequestTrailerMap& request_trailers) {
32
4
    request_trailers_ = &request_trailers;
33
4
  }
34

            
35
234
  void onResponseHeaders(const ResponseHeaderMap& response_headers) {
36
234
    response_headers_ = &response_headers;
37
234
  }
38

            
39
12
  void onResponseTrailers(const ResponseTrailerMap& response_trailers) {
40
12
    response_trailers_ = &response_trailers;
41
12
  }
42

            
43
1480
  RequestHeaderMapOptConstRef requestHeaders() const override {
44
1480
    return makeOptRefFromPtr(request_headers_);
45
1480
  }
46

            
47
5
  RequestTrailerMapOptConstRef requestTrailers() const override {
48
5
    return makeOptRefFromPtr(request_trailers_);
49
5
  }
50

            
51
597
  ResponseHeaderMapOptConstRef responseHeaders() const override {
52
597
    return makeOptRefFromPtr(response_headers_);
53
597
  }
54

            
55
121
  ResponseTrailerMapOptConstRef responseTrailers() const override {
56
121
    return makeOptRefFromPtr(response_trailers_);
57
121
  }
58

            
59
165
  const StreamInfo::StreamInfo& streamInfo() const override { return stream_info_; }
60

            
61
95
  const Network::ConnectionInfoProvider& connectionInfoProvider() const override {
62
95
    return stream_info_.downstreamAddressProvider();
63
95
  }
64

            
65
private:
66
  const StreamInfo::StreamInfo& stream_info_;
67
  const RequestHeaderMap* request_headers_{};
68
  const ResponseHeaderMap* response_headers_{};
69
  const RequestTrailerMap* request_trailers_{};
70
  const ResponseTrailerMap* response_trailers_{};
71
};
72

            
73
using HttpMatchingDataImplSharedPtr = std::shared_ptr<HttpMatchingDataImpl>;
74

            
75
struct HttpFilterActionContext {
76
  // Identify whether the filter is in downstream filter chain or upstream filter chain.
77
  const bool is_downstream_ = true;
78
  const std::string& stat_prefix_;
79
  OptRef<Server::Configuration::FactoryContext> factory_context_;
80
  OptRef<Server::Configuration::UpstreamFactoryContext> upstream_factory_context_;
81
  OptRef<Server::Configuration::ServerFactoryContext> server_factory_context_;
82
};
83

            
84
} // namespace Matching
85
} // namespace Http
86
} // namespace Envoy