X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ffilter_virt_db.cpp;h=b30e7b4b975bd61d4b233b8cde78d9bfaacab8b7;hb=c1d953eee6c00432493bc364da6284704ccd9cc2;hp=a7d0ae8c2dcabb8236efdfbdd5b6bbc455ed9b4e;hpb=0d323a3f455c0a0a669fa33e77b670d1af23fec5;p=metaproxy-moved-to-github.git diff --git a/src/filter_virt_db.cpp b/src/filter_virt_db.cpp index a7d0ae8..b30e7b4 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-2009 Index Data + Copyright (C) 2005-2011 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 @@ -18,20 +18,20 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "config.hpp" -#include "filter.hpp" -#include "package.hpp" +#include "filter_virt_db.hpp" +#include #include #include #include -#include "util.hpp" -#include "filter_virt_db.hpp" +#include #include #include #include #include +#include #include #include @@ -228,21 +228,21 @@ yf::VirtualDB::BackendPtr yf::VirtualDB::Frontend::init_backend( Z_GDU *gdu = init_package.response().get(); // we hope to get an init response - if (gdu && gdu->which == Z_GDU_Z3950 && gdu->u.z3950->which == - Z_APDU_initResponse) + 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) { Z_InitResponse *res = gdu->u.z3950->u.initResponse; if (ODR_MASK_GET(res->options, Z_Options_namedResultSets)) { b->m_named_result_sets = true; } - if (*res->result) + if (*res->result && !init_package.session().is_closed()) { m_backend_list.push_back(b); return b; - } - error_code = YAZ_BIB1_DATABASE_UNAVAILABLE; mp::util::get_init_diagnostics(res, error_code, addinfo); } if (!init_package.session().is_closed()) @@ -268,7 +268,6 @@ void yf::VirtualDB::Frontend::search(mp::Package &package, Z_APDU *apdu_req) for (i = 0; inum_databaseNames; i++) databases.push_back(req->databaseNames[i]); - BackendPtr b; // null for now Sets_it sets_it = m_sets.find(req->resultSetName); if (sets_it != m_sets.end()) { @@ -287,37 +286,22 @@ void yf::VirtualDB::Frontend::search(mp::Package &package, Z_APDU *apdu_req) return; } sets_it->second.m_backend->m_number_of_sets--; - - // pick up any existing backend with a database match - std::list::const_iterator map_it; - map_it = m_backend_list.begin(); - for (; map_it != m_backend_list.end(); map_it++) - { - BackendPtr tmp = *map_it; - if (tmp->m_frontend_databases == databases) - break; - } - if (map_it != m_backend_list.end()) - b = *map_it; } - else + // pick up any existing database with named result sets .. + // or one which has no result sets.. yet. + BackendPtr b; // null for now + std::list::const_iterator map_it; + map_it = m_backend_list.begin(); + for (; map_it != m_backend_list.end(); map_it++) { - // new result set. - - // pick up any existing database with named result sets .. - // or one which has no result sets.. yet. - std::list::const_iterator map_it; - map_it = m_backend_list.begin(); - for (; map_it != m_backend_list.end(); map_it++) + BackendPtr tmp = *map_it; + if (tmp->m_frontend_databases == databases && + (tmp->m_named_result_sets || + tmp->m_number_of_sets == 0)) { - BackendPtr tmp = *map_it; - if (tmp->m_frontend_databases == databases && - (tmp->m_named_result_sets || - tmp->m_number_of_sets == 0)) - break; - } - if (map_it != m_backend_list.end()) b = *map_it; + break; + } } if (!b) // no backend yet. Must create a new one {