X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ffilter_virt_db.cpp;h=b58375730014b510646002dc31f3d0e15fe55290;hb=722c498e016a6eb94044c608a7d1dcb21e5013cd;hp=8d68ceb6a16d05347206299735533106b4ef40f0;hpb=897733ba99d2448d1d523c0c9757be714f097132;p=metaproxy-moved-to-github.git diff --git a/src/filter_virt_db.cpp b/src/filter_virt_db.cpp index 8d68ceb..b583757 100644 --- a/src/filter_virt_db.cpp +++ b/src/filter_virt_db.cpp @@ -1,5 +1,5 @@ /* This file is part of Metaproxy. - Copyright (C) 2005-2011 Index Data + Copyright (C) 2005-2012 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 @@ -52,6 +52,7 @@ namespace metaproxy_1 { }; struct VirtualDB::Map { Map(std::string database, std::list targets, std::string route); + Map(std::string database, std::string target, std::string route); Map(); bool match(const std::string db) const; std::string m_dbpattern; @@ -108,6 +109,7 @@ namespace metaproxy_1 { FrontendPtr get_frontend(Package &package); void release_frontend(Package &package); + void refresh_torus(); private: std::listm_maps; typedef std::map::iterator Sets_it; @@ -175,7 +177,7 @@ yf::VirtualDB::BackendPtr yf::VirtualDB::Frontend::create_backend_from_databases // see if we have a route conflict. if (!first_route && b->m_route != map_it->m_route) { - // we have a conflict.. + // we have a conflict.. routing must be same for all error_code = YAZ_BIB1_COMBI_OF_SPECIFIED_DATABASES_UNSUPP; BackendPtr ptr; return ptr; @@ -233,8 +235,7 @@ yf::VirtualDB::BackendPtr yf::VirtualDB::Frontend::init_backend( // we hope to get an init response error_code = YAZ_BIB1_DATABASE_UNAVAILABLE; if (gdu && gdu->which == Z_GDU_Z3950 - && gdu->u.z3950->which == Z_APDU_initResponse - && *gdu->u.z3950->u.initResponse->result) + && gdu->u.z3950->which == Z_APDU_initResponse) { Z_InitResponse *res = gdu->u.z3950->u.initResponse; if (ODR_MASK_GET(res->options, Z_Options_namedResultSets)) @@ -437,6 +438,7 @@ void yf::VirtualDB::Rep::release_frontend(mp::Package &package) } } + yf::VirtualDB::Set::Set(BackendPtr b, std::string setname) : m_backend(b), m_setname(setname) { @@ -458,6 +460,14 @@ yf::VirtualDB::Map::Map(std::string database, { } +yf::VirtualDB::Map::Map(std::string database, + std::string target, std::string route) + : m_dbpattern(database), m_route(route) +{ + m_targets.push_back(target); +} + + yf::VirtualDB::Map::Map() { } @@ -677,6 +687,7 @@ void yf::VirtualDB::Frontend::scan(mp::Package &package, Z_APDU *apdu_req) &req->num_databaseNames, &req->databaseNames); } + scan_package.request() = yazpp_1::GDU(apdu_req); scan_package.move(b->m_route); @@ -692,8 +703,8 @@ void yf::VirtualDB::Frontend::scan(mp::Package &package, Z_APDU *apdu_req) void yf::VirtualDB::add_map_db2targets(std::string db, - std::list targets, - std::string route) + std::list targets, + std::string route) { m_p->m_maps.push_back( VirtualDB::Map(mp::util::database_name_normalize(db), targets, route)); @@ -701,13 +712,12 @@ void yf::VirtualDB::add_map_db2targets(std::string db, void yf::VirtualDB::add_map_db2target(std::string db, - std::string target, - std::string route) -{ - std::list targets; - targets.push_back(target); + std::string target, + std::string route) - add_map_db2targets(db, targets, route); +{ + m_p->m_maps.push_back( + VirtualDB::Map(mp::util::database_name_normalize(db), target, route)); } void yf::VirtualDB::process(mp::Package &package) const @@ -821,8 +831,8 @@ void yf::VirtualDB::process(mp::Package &package) const m_p->release_frontend(package); } - -void mp::filter::VirtualDB::configure(const xmlNode * ptr, bool test_only) +void mp::filter::VirtualDB::configure(const xmlNode * ptr, bool test_only, + const char *path) { for (ptr = ptr->children; ptr; ptr = ptr->next) { @@ -830,7 +840,7 @@ void mp::filter::VirtualDB::configure(const xmlNode * ptr, bool test_only) continue; if (!strcmp((const char *) ptr->name, "pass-vhosts")) { - m_p->pass_vhosts = mp::xml::get_bool(ptr->children, false); + m_p->pass_vhosts = mp::xml::get_bool(ptr, false); } else if (!strcmp((const char *) ptr->name, "virtual")) { @@ -854,7 +864,10 @@ void mp::filter::VirtualDB::configure(const xmlNode * ptr, bool test_only) ); } std::string route = mp::xml::get_route(ptr); - add_map_db2targets(database, targets, route); + + VirtualDB::Map vmap(mp::util::database_name_normalize(database), + targets, route); + m_p->m_maps.push_back(vmap); } else {