Line data Source code
1 : #include "source/extensions/matching/network/common/inputs.h" 2 : 3 : #include "envoy/http/filter.h" 4 : #include "envoy/registry/registry.h" 5 : 6 : #include "absl/strings/str_cat.h" 7 : 8 : namespace Envoy { 9 : namespace Network { 10 : namespace Matching { 11 : 12 0 : Matcher::DataInputGetResult TransportProtocolInput::get(const MatchingData& data) const { 13 0 : const auto transport_protocol = data.socket().detectedTransportProtocol(); 14 0 : if (!transport_protocol.empty()) { 15 0 : return {Matcher::DataInputGetResult::DataAvailability::AllDataAvailable, 16 0 : std::string(transport_protocol)}; 17 0 : } 18 0 : return {Matcher::DataInputGetResult::DataAvailability::AllDataAvailable, absl::monostate()}; 19 0 : } 20 : 21 0 : Matcher::DataInputGetResult FilterStateInput::get(const MatchingData& data) const { 22 0 : const auto* filter_state_object = 23 0 : data.filterState().getDataReadOnly<StreamInfo::FilterState::Object>(filter_state_key_); 24 : 25 0 : if (filter_state_object != nullptr) { 26 0 : auto str = filter_state_object->serializeAsString(); 27 0 : if (str.has_value()) { 28 0 : return {Matcher::DataInputGetResult::DataAvailability::AllDataAvailable, str.value()}; 29 0 : } else { 30 0 : return {Matcher::DataInputGetResult::DataAvailability::AllDataAvailable, absl::monostate()}; 31 0 : } 32 0 : } 33 : 34 0 : return {Matcher::DataInputGetResult::DataAvailability::AllDataAvailable, absl::monostate()}; 35 0 : } 36 : 37 : class DestinationIPInputFactory : public DestinationIPInputBaseFactory<MatchingData> {}; 38 : class UdpDestinationIPInputFactory : public DestinationIPInputBaseFactory<UdpMatchingData> {}; 39 : class HttpDestinationIPInputFactory : public DestinationIPInputBaseFactory<Http::HttpMatchingData> { 40 : }; 41 : REGISTER_FACTORY(DestinationIPInputFactory, Matcher::DataInputFactory<MatchingData>); 42 : REGISTER_FACTORY(UdpDestinationIPInputFactory, Matcher::DataInputFactory<UdpMatchingData>); 43 : REGISTER_FACTORY(HttpDestinationIPInputFactory, Matcher::DataInputFactory<Http::HttpMatchingData>); 44 : 45 : class DestinationPortInputFactory : public DestinationPortInputBaseFactory<MatchingData> {}; 46 : class UdpDestinationPortInputFactory : public DestinationPortInputBaseFactory<UdpMatchingData> {}; 47 : class HttpDestinationPortInputFactory 48 : : public DestinationPortInputBaseFactory<Http::HttpMatchingData> {}; 49 : REGISTER_FACTORY(DestinationPortInputFactory, Matcher::DataInputFactory<MatchingData>); 50 : REGISTER_FACTORY(UdpDestinationPortInputFactory, Matcher::DataInputFactory<UdpMatchingData>); 51 : REGISTER_FACTORY(HttpDestinationPortInputFactory, 52 : Matcher::DataInputFactory<Http::HttpMatchingData>); 53 : 54 : class SourceIPInputFactory : public SourceIPInputBaseFactory<MatchingData> {}; 55 : class UdpSourceIPInputFactory : public SourceIPInputBaseFactory<UdpMatchingData> {}; 56 : class HttpSourceIPInputFactory : public SourceIPInputBaseFactory<Http::HttpMatchingData> {}; 57 : REGISTER_FACTORY(SourceIPInputFactory, Matcher::DataInputFactory<MatchingData>); 58 : REGISTER_FACTORY(UdpSourceIPInputFactory, Matcher::DataInputFactory<UdpMatchingData>); 59 : REGISTER_FACTORY(HttpSourceIPInputFactory, Matcher::DataInputFactory<Http::HttpMatchingData>); 60 : 61 : class SourcePortInputFactory : public SourcePortInputBaseFactory<MatchingData> {}; 62 : class UdpSourcePortInputFactory : public SourcePortInputBaseFactory<UdpMatchingData> {}; 63 : class HttpSourcePortInputFactory : public SourcePortInputBaseFactory<Http::HttpMatchingData> {}; 64 : REGISTER_FACTORY(SourcePortInputFactory, Matcher::DataInputFactory<MatchingData>); 65 : REGISTER_FACTORY(UdpSourcePortInputFactory, Matcher::DataInputFactory<UdpMatchingData>); 66 : REGISTER_FACTORY(HttpSourcePortInputFactory, Matcher::DataInputFactory<Http::HttpMatchingData>); 67 : 68 : class DirectSourceIPInputFactory : public DirectSourceIPInputBaseFactory<MatchingData> {}; 69 : class HttpDirectSourceIPInputFactory 70 : : public DirectSourceIPInputBaseFactory<Http::HttpMatchingData> {}; 71 : REGISTER_FACTORY(DirectSourceIPInputFactory, Matcher::DataInputFactory<MatchingData>); 72 : REGISTER_FACTORY(HttpDirectSourceIPInputFactory, Matcher::DataInputFactory<Http::HttpMatchingData>); 73 : 74 : class ServerNameInputFactory : public ServerNameInputBaseFactory<MatchingData> {}; 75 : class HttpServerNameInputFactory : public ServerNameInputBaseFactory<Http::HttpMatchingData> {}; 76 : REGISTER_FACTORY(ServerNameInputFactory, Matcher::DataInputFactory<MatchingData>); 77 : REGISTER_FACTORY(HttpServerNameInputFactory, Matcher::DataInputFactory<Http::HttpMatchingData>); 78 : 79 : class SourceTypeInputFactory : public SourceTypeInputBaseFactory<MatchingData> {}; 80 : class HttpSourceTypeInputFactory : public SourceTypeInputBaseFactory<Http::HttpMatchingData> {}; 81 : REGISTER_FACTORY(SourceTypeInputFactory, Matcher::DataInputFactory<MatchingData>); 82 : REGISTER_FACTORY(HttpSourceTypeInputFactory, Matcher::DataInputFactory<Http::HttpMatchingData>); 83 : 84 : REGISTER_FACTORY(TransportProtocolInputFactory, Matcher::DataInputFactory<MatchingData>); 85 : REGISTER_FACTORY(FilterStateInputFactory, Matcher::DataInputFactory<MatchingData>); 86 : 87 : } // namespace Matching 88 : } // namespace Network 89 : } // namespace Envoy