X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ffilter_sru_to_z3950.cpp;h=8cccea3edb198c2bdcc4b5a0a0c3deffec83ec9f;hb=f9f0ca0d1907f9922889910d1ce7a83bf11ffa63;hp=a4f2f6da61b7733b929a2ef25233b8b99752976f;hpb=f0fb2a160e8c8cbb1147d476ae206ebcedbf8ecf;p=metaproxy-moved-to-github.git diff --git a/src/filter_sru_to_z3950.cpp b/src/filter_sru_to_z3950.cpp index a4f2f6d..8cccea3 100644 --- a/src/filter_sru_to_z3950.cpp +++ b/src/filter_sru_to_z3950.cpp @@ -1,4 +1,4 @@ -/* $Id: filter_sru_to_z3950.cpp,v 1.30 2007-03-08 09:43:37 adam Exp $ +/* $Id: filter_sru_to_z3950.cpp,v 1.32 2007-03-20 07:20:16 adam Exp $ Copyright (c) 2005-2007, Index Data. See the LICENSE file for details @@ -176,14 +176,24 @@ void yf::SRUtoZ3950::Impl::process(mp::Package &package) // filter acts as sink for non-valid SRU requests if (! (sru_pdu_req = mp_util::decode_sru_request(package, odr_de, odr_en, - sru_pdu_res, soap, + sru_pdu_res, &soap, charset, stylesheet))) { - mp_util::build_sru_explain(package, odr_en, sru_pdu_res, - sruinfo, explainnode); - mp_util::build_sru_response(package, odr_en, soap, - sru_pdu_res, charset, stylesheet); - // package.session().close(); + if (soap) + { + mp_util::build_sru_explain(package, odr_en, sru_pdu_res, + sruinfo, explainnode); + mp_util::build_sru_response(package, odr_en, soap, + sru_pdu_res, charset, stylesheet); + } + else + { + metaproxy_1::odr odr; + Z_GDU *zgdu_res = + odr.create_HTTP_Response(package.session(), + zgdu_req->u.HTTP_Request, 400); + package.response() = zgdu_res; + } return; } @@ -195,16 +205,11 @@ void yf::SRUtoZ3950::Impl::process(mp::Package &package) // sruinfo, er_req); mp_util::build_sru_explain(package, odr_en, sru_pdu_res, sruinfo, explainnode, er_req); - mp_util::build_sru_response(package, odr_en, soap, - sru_pdu_res, charset, stylesheet); - return; } - - // searchRetrieve else if (sru_pdu_req && sru_pdu_req->which == Z_SRW_searchRetrieve_request && sru_pdu_req->u.request) - { + { // searchRetrieve Z_SRW_searchRetrieveRequest *sr_req = sru_pdu_req->u.request; sru_pdu_res = yaz_srw_get(odr_en, Z_SRW_searchRetrieve_response); @@ -267,7 +272,6 @@ void yf::SRUtoZ3950::Impl::process(mp::Package &package) // build and send SRU response mp_util::build_sru_response(package, odr_en, soap, sru_pdu_res, charset, stylesheet); - return; } @@ -357,12 +361,11 @@ yf::SRUtoZ3950::Impl::z3950_close_request(mp::Package &package) const return false; } -bool -yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package, - mp::odr &odr_en, - Z_SRW_PDU *sru_pdu_res, - Z_SRW_searchRetrieveRequest - const *sr_req) const +bool yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package, + mp::odr &odr_en, + Z_SRW_PDU *sru_pdu_res, + Z_SRW_searchRetrieveRequest + const *sr_req) const { assert(sru_pdu_res->u.response);