X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Frouter_flexml.hpp;h=9b5d890361a0fdf5550361d08897b62778f84815;hb=586d78659d671683f33ec55f4a7d32b28e345ccd;hp=0b4ca3a4bd4714482606a6762e54322feac45d40;hpb=c859210e9c315c0f15c93fc6f65477a6c3e65d14;p=metaproxy-moved-to-github.git diff --git a/src/router_flexml.hpp b/src/router_flexml.hpp index 0b4ca3a..9b5d890 100644 --- a/src/router_flexml.hpp +++ b/src/router_flexml.hpp @@ -1,284 +1,63 @@ -/* $Id: router_flexml.hpp,v 1.1 2005-10-26 14:12:00 marc Exp $ - Copyright (c) 2005, Index Data. +/* This file is part of Metaproxy. + Copyright (C) Index Data -%LICENSE% - */ - -#include -#include - -#include -#include -#include -#include -#include -//#include - -namespace yp2 -{ - - -class RouterFleXML -{ -public: - RouterFleXML(std::string xmlconf) - : m_xmlconf(""), m_xinclude(false), m_xmlconf_doc(0) - { - LIBXML_TEST_VERSION; - - m_xmlconf = xmlconf; - m_xinclude = false; - - m_xmlconf_doc - = xmlParseMemory(m_xmlconf.c_str(), m_xmlconf.size()); - - parse_xml_config_dom(); - //parse_xml_config_xmlreader(); - } - ~RouterFleXML() - { - xmlFreeDoc(m_xmlconf_doc); - } - - -private: - std::string m_xmlconf; - bool m_xinclude; - xmlDoc * m_xmlconf_doc; - - void xml_dom_error ( xmlNode* node, std::string msg) - { - std::cerr << "ERROR: " << msg << " " - << node->name << " " - << std::endl; - } - - void parse_xml_config_dom() { - if (m_xmlconf_doc) - { - xmlNode* root = xmlDocGetRootElement(m_xmlconf_doc); - - if (std::string((const char *) root->name) != "yp2") - xml_dom_error(root, "expected , got "); - - - for (const struct _xmlAttr *attr = root->properties; attr; attr = attr->next) - { - if (std::string((const char *)attr->name) == "xmlns") - { - const xmlNode *val = attr->children; - //BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE); - if (std::string((const char *)val->content) - != "http://indexdata.dk/yp2/config/1") - xml_dom_error(root, - "expected xmlns=\"http://indexdata.dk/yp2/config/1\", got "); - } - } - std::cout << "GOT HERE" << std::endl; - - } - } - - -#if 0 - void parse_xml_config_xmlreader() { - - xmlTextReader* reader; - //reader->SetParserProp(libxml2.PARSER_SUBST_ENTITIES,1); - int ret; - //reader = xmlReaderForFile(m_xmlconf.c_str(), NULL, 0); - reader = xmlReaderWalker(m_xmlconf_doc); - - if (reader == NULL) { - std::cerr << "failed to read XML config file " - << std::endl - << m_xmlconf << std::endl; - std::exit(1); - } - - - // root element processing - xml_progress_deep_to_element(reader); - if (std::string("yp2") != (const char*)xmlTextReaderConstName(reader)) - xml_error(reader, "root element must be named "); - - std::cout << "<" << xmlTextReaderConstName(reader); - - //if (xmlTextReaderHasAttributes(reader)) - //if ((!xmlTextReaderMoveToAttributeNs(reader, NULL, - // (const xmlChar*)"http://indexdata.dk/yp2/config/1" ))) - if ((!xmlTextReaderMoveToFirstAttribute(reader)) - || (! xmlTextReaderIsNamespaceDecl(reader)) - || (std::string("http://indexdata.dk/yp2/config/1") - != (const char*)xmlTextReaderConstValue(reader))) - xml_error(reader, "expected root element in namespace " - "'http://indexdata.dk/yp2/config/1'"); - - std::cout << " " << xmlTextReaderConstName(reader) << "=\"" - << xmlTextReaderConstValue(reader) << "\">" - //<< xmlTextReaderIsNamespaceDecl(reader) - << std::endl; +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. - // start element processing - xml_progress_deep_to_element(reader); - if (std::string("start") != (const char*)xmlTextReaderConstName(reader) - || !xmlTextReaderMoveToFirstAttribute(reader) - || std::string("route") != (const char*)xmlTextReaderConstName(reader) - ) - xml_error(reader, "start element expected"); +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 +*/ - std::cout << "" << std::endl; - //<< xmlTextReaderGetAttribute(reader, (const xmlChar *)"route") +#ifndef ROUTER_FLEXML_HPP +#define ROUTER_FLEXML_HPP +#include - // filters element processing - xml_progress_flat_to_element(reader); - - if (std::string("filters") != (const char*)xmlTextReaderConstName(reader) - ) - xml_error(reader, "filters element expected"); - - std::cout << "" << std::endl; - - - // filter element processing - xml_progress_deep_to_element(reader); - if (std::string("filter") != (const char*)xmlTextReaderConstName(reader) - ) - xml_error(reader, "filter element expected"); - - while (std::string("filter") == (const char*)xmlTextReaderConstName(reader)){ - std::string filter_id; - std::string filter_type; - if (!xmlTextReaderMoveToFirstAttribute(reader) - || std::string("id") != (const char*)xmlTextReaderConstName(reader)) - xml_error(reader, "filter element expected"); - filter_id = (const char*)xmlTextReaderConstValue(reader); - if (!xmlTextReaderMoveToNextAttribute(reader) - || std::string("type") != (const char*)xmlTextReaderConstName(reader)) - xml_error(reader, "filter element expected"); - filter_type = (const char*)xmlTextReaderConstValue(reader); - std::cout << "" - << std::endl; - xml_progress_flat_to_element(reader); - } - - std::cout << "" << std::endl; - - - // routes element processing - // xml_progress_flat_to_element(reader); - if (std::string("routes") != (const char*)xmlTextReaderConstName(reader) - ) - xml_error(reader, "routes element expected"); - - std::cout << "" << std::endl; - // route element processing - xml_progress_deep_to_element(reader); - if (std::string("route") != (const char*)xmlTextReaderConstName(reader) - ) - xml_error(reader, "route element expected"); - while (std::string("route") == (const char*)xmlTextReaderConstName(reader)){ - std::string route_id; - if (!xmlTextReaderMoveToFirstAttribute(reader) - || std::string("id") != (const char*)xmlTextReaderConstName(reader)) - xml_error(reader, "route element expected"); - route_id = (const char*)xmlTextReaderConstValue(reader); - - - std::cout << "" << std::endl; - std::cout << "" << std::endl; - xml_progress_flat_to_element(reader); - } - - std::cout << "" << std::endl; - - std::cout << "" << std::endl; - - xml_debug_print(reader); +#include "factory_filter.hpp" +#include - // freeing C xml reader libs - xmlFreeTextReader(reader); - if (ret != 0) { - std::cerr << "Parsing failed of XML configuration" - << std::endl - << m_xmlconf << std::endl; - std::exit(1); - } - } +#include - void xml_error ( xmlTextReader* reader, std::string msg) - { - std::cerr << "ERROR: " << msg << " " - << xmlTextReaderGetParserLineNumber(reader) << ":" - << xmlTextReaderGetParserColumnNumber(reader) << " " - << xmlTextReaderConstName(reader) << " " - << xmlTextReaderDepth(reader) << " " - << xmlTextReaderNodeType(reader) << std::endl; - } - - void xml_debug_print ( xmlTextReader* reader) - { - // processing all other elements - //while (xmlTextReaderMoveToElement(reader)) // reads next element ?? - //while (xmlTextReaderNext(reader)) //does not descend, keeps level - while (xmlTextReaderRead(reader)) // descends into all subtree nodes - std::cout << xmlTextReaderGetParserLineNumber(reader) << ":" - << xmlTextReaderGetParserColumnNumber(reader) << " " - << xmlTextReaderDepth(reader) << " " - << xmlTextReaderNodeType(reader) << " " - << "ConstName " << xmlTextReaderConstName(reader) << " " - << std::endl; - } - - bool xml_progress_deep_to_element(xmlTextReader* reader) - { - bool ret = false; - while(xmlTextReaderRead(reader) - && xmlTextReaderNodeType(reader) != XML_ELEMENT_NODE - && !( xmlTextReaderNodeType(reader) - == XML_READER_TYPE_END_ELEMENT - && 0 == xmlTextReaderDepth(reader)) - ) - ret = true; - return ret; - } - - bool xml_progress_flat_to_element(xmlTextReader* reader) - { - bool ret = false; - - while(xmlTextReaderNext(reader) - && xmlTextReaderNodeType(reader) != XML_ELEMENT_NODE - && !( xmlTextReaderNodeType(reader) - == XML_READER_TYPE_END_ELEMENT - && 0 == xmlTextReaderDepth(reader)) - ) { - ret = true; - } - return ret; - } - -#endif +namespace metaproxy_1 +{ + class RouterFleXML : public metaproxy_1::Router + { + class Rep; + class Route; + class Pos; + public: + RouterFleXML(std::string xmlconf, metaproxy_1::FactoryFilter &factory, + bool test_only); + RouterFleXML(xmlDocPtr doc, metaproxy_1::FactoryFilter &factory, + bool test_only, const char *file_include_path); + + ~RouterFleXML(); + + virtual RoutePos *createpos() const; + void start(); + void stop(int signo); + private: + boost::scoped_ptr m_p; + }; }; - -}; - +#endif /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil - * c-file-style: "stroustrup" * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +