-/* $Id: router_flexml.cpp,v 1.18 2006-06-10 14:29:12 adam Exp $
- Copyright (c) 2005-2006, Index Data.
+/* This file is part of Metaproxy.
+ Copyright (C) 2005-2008 Index Data
- See the LICENSE file for details
- */
+Metaproxy is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
#include "config.hpp"
#include "xmlutil.hpp"
friend class RouterFleXML::Pos;
Rep();
- void base(xmlDocPtr doc, mp::FactoryFilter &factory);
+ void base(xmlDocPtr doc, mp::FactoryFilter &factory, bool test_only);
typedef std::map<std::string,
boost::shared_ptr<const mp::filter::Base > >
std::string m_dl_path;
- void parse_xml_config_dom(xmlDocPtr doc);
+ void parse_xml_config_dom(xmlDocPtr doc, bool test_only);
- void parse_xml_filters(xmlDocPtr doc, const xmlNode *node);
- void parse_xml_routes(xmlDocPtr doc, const xmlNode *node);
+ void parse_xml_filters(xmlDocPtr doc, const xmlNode *node,
+ bool test_only);
+ void parse_xml_routes(xmlDocPtr doc, const xmlNode *node,
+ bool test_only);
bool m_xinclude;
private:
}
void mp::RouterFleXML::Rep::parse_xml_filters(xmlDocPtr doc,
- const xmlNode *node)
+ const xmlNode *node,
+ bool test_only)
{
unsigned int filter_nr = 0;
- while(node && mp::xml::check_element_yp2(node, "filter"))
+ while(node && mp::xml::check_element_mp(node, "filter"))
{
filter_nr++;
}
mp::filter::Base* filter_base = m_factory->create(type_value);
- filter_base->configure(node);
+ filter_base->configure(node, test_only);
if (m_id_filter_map.find(id_value) != m_id_filter_map.end())
throw mp::XMLError("Filter " + id_value + " already defined");
}
void mp::RouterFleXML::Rep::parse_xml_routes(xmlDocPtr doc,
- const xmlNode *node)
+ const xmlNode *node,
+ bool test_only)
{
- mp::xml::check_element_yp2(node, "route");
+ mp::xml::check_element_mp(node, "route");
unsigned int route_nr = 0;
- while(mp::xml::is_element_yp2(node, "route"))
+ while(mp::xml::is_element_mp(node, "route"))
{
route_nr++;
const xmlNode* node3 = mp::xml::jump_to_children(node, XML_ELEMENT_NODE);
unsigned int filter3_nr = 0;
- while(node3 && mp::xml::check_element_yp2(node3, "filter"))
+ while(node3 && mp::xml::check_element_mp(node3, "filter"))
{
filter3_nr++;
}
mp::filter::Base* filter_base = m_factory->create(type_value);
- filter_base->configure(node3);
+ filter_base->configure(node3, test_only);
route.m_list.push_back(
boost::shared_ptr<mp::filter::Base>(filter_base));
}
}
-void mp::RouterFleXML::Rep::parse_xml_config_dom(xmlDocPtr doc)
+void mp::RouterFleXML::Rep::parse_xml_config_dom(xmlDocPtr doc,
+ bool test_only)
{
if (!doc)
throw mp::XMLError("Empty XML Document");
const xmlNode* root = xmlDocGetRootElement(doc);
- mp::xml::check_element_yp2(root, "yp2");
+ mp::xml::check_element_mp(root, "metaproxy");
const xmlNode* node = mp::xml::jump_to_children(root, XML_ELEMENT_NODE);
- if (mp::xml::is_element_yp2(node, "dlpath"))
+ if (mp::xml::is_element_mp(node, "dlpath"))
{
m_dl_path = mp::xml::get_text(node);
node = mp::xml::jump_to_next(node, XML_ELEMENT_NODE);
}
// process <start> node which is expected first element node
- if (mp::xml::check_element_yp2(node, "start"))
+ if (mp::xml::check_element_mp(node, "start"))
{
const struct _xmlAttr *attr;
std::string id_value;
node = mp::xml::jump_to_next(node, XML_ELEMENT_NODE);
}
// process <filters> node if given
- if (mp::xml::is_element_yp2(node, "filters"))
+ if (mp::xml::is_element_mp(node, "filters"))
{
parse_xml_filters(doc, mp::xml::jump_to_children(node,
- XML_ELEMENT_NODE));
+ XML_ELEMENT_NODE),
+ test_only);
node = mp::xml::jump_to_next(node, XML_ELEMENT_NODE);
}
// process <routes> node which is expected third element node
- mp::xml::check_element_yp2(node, "routes");
+ mp::xml::check_element_mp(node, "routes");
- parse_xml_routes(doc, mp::xml::jump_to_children(node, XML_ELEMENT_NODE));
+ parse_xml_routes(doc, mp::xml::jump_to_children(node, XML_ELEMENT_NODE),
+ test_only);
node = mp::xml::jump_to_next(node, XML_ELEMENT_NODE);
if (node)
{
}
-void mp::RouterFleXML::Rep::base(xmlDocPtr doc, mp::FactoryFilter &factory)
+void mp::RouterFleXML::Rep::base(xmlDocPtr doc, mp::FactoryFilter &factory,
+ bool test_only)
{
m_factory = &factory;
- parse_xml_config_dom(doc);
+ parse_xml_config_dom(doc, test_only);
m_start_route = "start";
}
-mp::RouterFleXML::RouterFleXML(xmlDocPtr doc, mp::FactoryFilter &factory)
+mp::RouterFleXML::RouterFleXML(xmlDocPtr doc, mp::FactoryFilter &factory,
+ bool test_only)
: m_p(new Rep)
{
- m_p->base(doc, factory);
+ m_p->base(doc, factory, test_only);
}
-mp::RouterFleXML::RouterFleXML(std::string xmlconf, mp::FactoryFilter &factory)
+mp::RouterFleXML::RouterFleXML(std::string xmlconf, mp::FactoryFilter &factory,
+ bool test_only)
: m_p(new Rep)
{
LIBXML_TEST_VERSION;
throw mp::XMLError("xmlParseMemory failed");
else
{
- m_p->base(doc, factory);
+ m_p->base(doc, factory, test_only);
xmlFreeDoc(doc);
}
}
{
if (route && *route)
{
- std::cout << "move to " << route << "\n";
+ //std::cout << "move to " << route << "\n";
m_route_it = m_p->m_routes.find(route);
if (m_route_it == m_p->m_routes.end())
{