1
#include "source/extensions/matching/input_matchers/dynamic_modules/matcher.h"
2

            
3
namespace Envoy {
4
namespace Extensions {
5
namespace Matching {
6
namespace InputMatchers {
7
namespace DynamicModules {
8

            
9
using ::Envoy::Extensions::Matching::Http::DynamicModules::DynamicModuleMatchData;
10
using ::Envoy::Matcher::MatchResult;
11

            
12
DynamicModuleInputMatcher::DynamicModuleInputMatcher(
13
    DynamicModuleSharedPtr module, OnMatcherConfigDestroyType on_config_destroy,
14
    OnMatcherMatchType on_match,
15
    envoy_dynamic_module_type_matcher_config_module_ptr in_module_config)
16
11
    : module_(std::move(module)), on_config_destroy_(on_config_destroy), on_match_(on_match),
17
11
      in_module_config_(in_module_config) {}
18

            
19
11
DynamicModuleInputMatcher::~DynamicModuleInputMatcher() {
20
11
  if (in_module_config_ != nullptr && on_config_destroy_ != nullptr) {
21
11
    on_config_destroy_(in_module_config_);
22
11
  }
23
11
}
24

            
25
10
MatchResult DynamicModuleInputMatcher::match(const ::Envoy::Matcher::DataInputGetResult& input) {
26
10
  if (auto dynamic_module_data = input.customData<DynamicModuleMatchData>(); dynamic_module_data) {
27
    // Build the match context with header pointers from the matching data.
28
8
    MatchContext context;
29
8
    context.request_headers = dynamic_module_data->request_headers_;
30
8
    context.response_headers = dynamic_module_data->response_headers_;
31
8
    context.response_trailers = dynamic_module_data->response_trailers_;
32

            
33
8
    if (on_match_(in_module_config_, static_cast<void*>(&context))) {
34
3
      return MatchResult::Matched;
35
3
    }
36
8
  }
37

            
38
7
  return MatchResult::NoMatch;
39
10
}
40

            
41
} // namespace DynamicModules
42
} // namespace InputMatchers
43
} // namespace Matching
44
} // namespace Extensions
45
} // namespace Envoy