X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Frouter_flexml.cpp;h=54232de4682896b5563e3bed92b54f47094914cc;hb=586d78659d671683f33ec55f4a7d32b28e345ccd;hp=783b52e0519851af0e41fb9aceae87133dc02117;hpb=8ced8e7b5de3ecba12ac68ce5c5e8cddf40d800f;p=metaproxy-moved-to-github.git diff --git a/src/router_flexml.cpp b/src/router_flexml.cpp index 783b52e..54232de 100644 --- a/src/router_flexml.cpp +++ b/src/router_flexml.cpp @@ -1,5 +1,5 @@ /* This file is part of Metaproxy. - Copyright (C) 2005-2013 Index Data + Copyright (C) Index Data 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 @@ -119,6 +119,8 @@ void mp::RouterFleXML::Rep::parse_xml_filters(xmlDocPtr doc, id_value = value; else if (name == "type") type_value = value; + else if (name == "base") + ;// Ignore XInclude base attribute. else throw mp::XMLError("Only attribute id or type allowed" " in filter element. Got " + name); @@ -130,15 +132,14 @@ void mp::RouterFleXML::Rep::parse_xml_filters(xmlDocPtr doc, type_value.c_str(), m_dl_path.c_str()); m_factory->add_creator_dl(type_value, m_dl_path); } - mp::filter::Base* filter_base = m_factory->create(type_value); + boost::shared_ptr fb(m_factory->create(type_value)); - filter_base->configure(node, test_only, file_include_path); + fb->configure(node, test_only, file_include_path); if (m_id_filter_map.find(id_value) != m_id_filter_map.end()) throw mp::XMLError("Filter " + id_value + " already defined"); - m_id_filter_map[id_value] = - boost::shared_ptr(filter_base); + m_id_filter_map[id_value] = fb; node = mp::xml::jump_to_next(node, XML_ELEMENT_NODE); } @@ -176,6 +177,8 @@ void mp::RouterFleXML::Rep::parse_xml_filters1(xmlDocPtr doc, refid_value = value; else if (name == "type") type_value = value; + else if (name == "base") + ;// Ignore XInclude base attribute. else throw mp::XMLError("Only attribute 'refid' or 'type'" " allowed for element 'filter'." @@ -238,6 +241,8 @@ void mp::RouterFleXML::Rep::parse_xml_routes(xmlDocPtr doc, if (name == "id") id_value = value; + else if (name == "base") + ;// Ignore XInclude base attribute. else throw mp::XMLError("Only attribute 'id' allowed for" " element 'route'." @@ -248,6 +253,9 @@ void mp::RouterFleXML::Rep::parse_xml_routes(xmlDocPtr doc, // process / nodes in third level const xmlNode* node3 = mp::xml::jump_to_children(node, XML_ELEMENT_NODE); + + + parse_xml_filters1(doc, node3, test_only, file_include_path, route); std::map::iterator it; @@ -315,7 +323,8 @@ void mp::RouterFleXML::Rep::parse_xml_config_dom(xmlDocPtr doc, if (file_include_path) { - int r = yaz_xml_include_simple((xmlNode *) root, file_include_path); + int r = yaz_xml_include_glob((xmlNode *) root, file_include_path, + YAZ_FILE_GLOB_FAIL_NOTEXIST); if (r) throw mp::XMLError("YAZ XML Include failed"); } @@ -343,6 +352,8 @@ void mp::RouterFleXML::Rep::parse_xml_config_dom(xmlDocPtr doc, if (name == "route") m_start_route = value; + else if (name == "base") + ;// Ignore XInclude base attribute. else throw mp::XMLError("Only attribute route allowed" " in element 'start'. Got " + name); @@ -420,8 +431,6 @@ mp::RouterFleXML::RouterFleXML(std::string xmlconf, mp::FactoryFilter &factory, bool test_only) : m_p(new Rep) { - LIBXML_TEST_VERSION; - xmlDocPtr doc = xmlParseMemory(xmlconf.c_str(), xmlconf.size()); if (!doc) @@ -503,7 +512,7 @@ void mp::RouterFleXML::start() } } -void mp::RouterFleXML::stop() +void mp::RouterFleXML::stop(int signo) { std::map::iterator route_it; @@ -515,7 +524,7 @@ void mp::RouterFleXML::stop() std::list >::iterator it; for (it = route.m_list.begin(); it != route.m_list.end(); it++) - (*it)->stop(); + (*it)->stop(signo); route_it++; } }