29 #include <boost/algorithm/string.hpp> 34 namespace validator_config {
48 return matchName(pktName);
54 , m_relation(relation)
59 RelationNameFilter::matchName(
const Name&
name)
70 RegexNameFilter::matchName(
const Name& name)
72 return m_regex.
match(name);
78 auto propertyIt = configSection.begin();
80 if (propertyIt == configSection.end() || !boost::iequals(propertyIt->first,
"type")) {
81 BOOST_THROW_EXCEPTION(
Error(
"Expect <filter.type>"));
84 std::string type = propertyIt->second.data();
86 if (boost::iequals(type,
"name"))
87 return createNameFilter(configSection, configFilename);
89 BOOST_THROW_EXCEPTION(
Error(
"Unsupported filter.type: " + type));
93 Filter::createNameFilter(
const ConfigSection& configSection,
const std::string& configFilename)
95 auto propertyIt = configSection.begin();
98 if (propertyIt == configSection.end()) {
99 BOOST_THROW_EXCEPTION(
Error(
"Expect more properties for filter(name)"));
102 if (boost::iequals(propertyIt->first,
"name")) {
106 name =
Name(propertyIt->second.data());
109 BOOST_THROW_EXCEPTION(
Error(
"Wrong filter.name: " + propertyIt->second.data()));
115 if (propertyIt == configSection.end() || !boost::iequals(propertyIt->first,
"relation")) {
116 BOOST_THROW_EXCEPTION(
Error(
"Expect <filter.relation>"));
122 if (propertyIt != configSection.end())
123 BOOST_THROW_EXCEPTION(
Error(
"Expect the end of filter"));
125 return make_unique<RelationNameFilter>(name, relation);
127 else if (boost::iequals(propertyIt->first,
"regex")) {
128 std::string regexString = propertyIt->second.data();
131 if (propertyIt != configSection.end())
132 BOOST_THROW_EXCEPTION(
Error(
"Expect the end of filter"));
135 return make_unique<RegexNameFilter>(regexString);
138 BOOST_THROW_EXCEPTION(
Error(
"Wrong filter.regex: " + regexString));
142 BOOST_THROW_EXCEPTION(
Error(
"Wrong filter(name) properties"));
Copyright (c) 2011-2015 Regents of the University of California.
const size_t MIN_SIZE
minimal number of components for Signed Interest
Catch-all error for security policy errors that don't fit in other categories.
bool match(uint32_t pktType, const Name &pktName)
bool checkNameRelation(NameRelation relation, const Name &name1, const Name &name2)
check whether name1 and name2 satisfies relation
NameRelation getNameRelationFromString(const std::string &relationString)
convert relationString to NameRelation
RelationNameFilter(const Name &name, NameRelation relation)
size_t size() const
Get number of components.
RegexNameFilter(const Regex ®ex)
Represents an absolute name.
static unique_ptr< Filter > create(const ConfigSection &configSection, const std::string &configFilename)
Create a filter from the configuration section.
boost::property_tree::ptree ConfigSection
bool match(const Name &name)
PartialName getPrefix(ssize_t nComponents) const
Extract a prefix of the name.