9 #include <boost/ptr_container/ptr_list.hpp>
12 #include <pugixml/pugixml.hpp>
13 #include "schema/routing_policy_types.h"
27 typedef std::map<std::string, PolicyTerms>
PolicyMap;
30 xml_attribute name = xterm.attribute(
"name");
34 xml_node xmatch = xterm.child(
"from");
37 term->
match.XmlParse(xmatch);
38 xaction = xmatch.next_sibling(
"then");
40 xaction = xterm.child(
"then");
43 term->
action.XmlParse(xaction);
50 xml_attribute name = node.attribute(
"name");
51 for (xml_node xterm = node.child(
"term"); xterm;
52 xterm = xterm.next_sibling(
"term")) {
55 policy_terms.push_back(term_data);
58 policy->insert(std::make_pair(name.value(), policy_terms));
67 istringstream sstream(content);
69 xml_parse_result result = xdoc.load(sstream);
71 LOG(WARN,
"Unable to load XML document. (status="
72 << result.status <<
", offset=" << result.offset <<
")");
77 for (xml_node node = xdoc.first_child(); node; node = node.next_sibling()) {
78 if (strcmp(node.name(),
"policy") == 0) {
static bool ParseTerm(const xml_node &xterm, PolicyTerm *term)
autogen::PolicyMatch match
bool Parse(const std::string &content)
static bool ParsePolicy(const xml_node &node, PolicyMap *policy)
std::map< std::string, PolicyTerms > PolicyMap
#define LOG(_Level, _Msg)
boost::ptr_list< PolicyTerm > PolicyTerms
autogen::PolicyAction action