X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ffilter_zeerex_explain.cpp;h=f82039d23868c0591a01c90997f8a83282baac50;hb=690bbc42f9678b5f6b895ac5c4ce427b08ab6dd2;hp=cd777c0aed1d46053ae041b637aac83ec52760ec;hpb=b70b9ec78f0ab1c3ed3b432de986159129a0e4ed;p=metaproxy-moved-to-github.git diff --git a/src/filter_zeerex_explain.cpp b/src/filter_zeerex_explain.cpp index cd777c0..f82039d 100644 --- a/src/filter_zeerex_explain.cpp +++ b/src/filter_zeerex_explain.cpp @@ -1,16 +1,27 @@ -/* $Id: filter_zeerex_explain.cpp,v 1.4 2007-01-25 14:05:54 adam Exp $ - Copyright (c) 2005-2007, Index Data. +/* This file is part of Metaproxy. + Copyright (C) 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 "filter.hpp" -#include "package.hpp" -#include "util.hpp" +#include "filter_zeerex_explain.hpp" +#include +#include #include "gduutil.hpp" #include "sru_util.hpp" -#include "filter_zeerex_explain.hpp" #include #include @@ -50,7 +61,8 @@ yf::ZeeRexExplain::~ZeeRexExplain() { // must have a destructor because of boost::scoped_ptr } -void yf::ZeeRexExplain::configure(const xmlNode *xmlnode) +void yf::ZeeRexExplain::configure(const xmlNode *xmlnode, bool test_only, + const char *path) { m_p->configure(xmlnode); } @@ -63,31 +75,31 @@ void yf::ZeeRexExplain::process(mp::Package &package) const void yf::ZeeRexExplain::Impl::configure(const xmlNode *confignode) { const xmlNode * dbnode; - + for (dbnode = confignode->children; dbnode; dbnode = dbnode->next){ if (dbnode->type != XML_ELEMENT_NODE) continue; - + std::string database; mp::xml::check_element_mp(dbnode, "database"); - for (struct _xmlAttr *attr = dbnode->properties; + for (struct _xmlAttr *attr = dbnode->properties; attr; attr = attr->next){ - + mp::xml::check_attribute(attr, "", "name"); database = mp::xml::get_text(attr); - + std::cout << database << "\n"; - + const xmlNode *explainnode; - for (explainnode = dbnode->children; + for (explainnode = dbnode->children; explainnode; explainnode = explainnode->next){ if (explainnode->type != XML_ELEMENT_NODE) continue; if (explainnode) break; } - // assigning explain node to database name - no check yet + // assigning explain node to database name - no check yet m_database_explain.insert(std::make_pair(database, explainnode)); } } @@ -103,7 +115,7 @@ void yf::ZeeRexExplain::Impl::process(mp::Package &package) package.move(); return; } - + // only working on HTTP_Request packages now mp::odr odr_de(ODR_DECODE); @@ -131,7 +143,7 @@ void yf::ZeeRexExplain::Impl::process(mp::Package &package) package.move(); return; } - + // if SRU package could not be decoded, send minimal explain and // close connection @@ -139,39 +151,48 @@ void yf::ZeeRexExplain::Impl::process(mp::Package &package) Z_SOAP *soap = 0; char *charset = 0; char *stylesheet = 0; - if (! (sru_pdu_req = mp_util::decode_sru_request(package, odr_de, odr_en, - sru_pdu_res, soap, - charset, stylesheet))) + Z_SRW_diagnostic *diagnostic = 0; + int num_diagnostic = 0; + + if (! (sru_pdu_req = mp_util::decode_sru_request( + package, odr_de, odr_en, + &diagnostic, &num_diagnostic, &soap, + charset))) { - mp_util::build_sru_explain(package, odr_en, sru_pdu_res, + mp_util::build_sru_explain(package, odr_en, sru_pdu_res, sruinfo, explainnode); - mp_util::build_sru_response(package, odr_en, soap, + mp_util::build_sru_response(package, odr_en, soap, sru_pdu_res, charset, stylesheet); package.session().close(); return; } - - if (sru_pdu_req->which != Z_SRW_explain_request){ + + if (sru_pdu_req->which != Z_SRW_explain_request) + { // Let pass all other SRU actions package.move(); return; } // except valid SRU explain request, construct ZeeRex Explain response - else { + else + { Z_SRW_explainRequest *er_req = sru_pdu_req->u.explain_request; - //mp_util::build_simple_explain(package, odr_en, sru_pdu_res, + + sru_pdu_res->u.explain_response->diagnostics = diagnostic; + sru_pdu_res->u.explain_response->num_diagnostics = num_diagnostic; + //mp_util::build_simple_explain(package, odr_en, sru_pdu_res, // sruinfo, er_req); - mp_util::build_sru_explain(package, odr_en, sru_pdu_res, + mp_util::build_sru_explain(package, odr_en, sru_pdu_res, sruinfo, explainnode, er_req); - mp_util::build_sru_response(package, odr_en, soap, + mp_util::build_sru_response(package, odr_en, soap, sru_pdu_res, charset, stylesheet); return; } // should never arrive here package.session().close(); - return; + return; } @@ -193,8 +214,9 @@ extern "C" { /* * 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 */ +