-/* $Id: filter_sru_to_z3950.cpp,v 1.28 2007-01-25 13:52:56 adam Exp $
- Copyright (c) 2005-2006, Index Data.
+/* $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
*/
// 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;
}
// 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);
sru_pdu_res = yaz_srw_get(odr_en, Z_SRW_explain_response);
// TODO: make nice diagnostic return package
- package.session().close();
return;
}
// build and send SRU response
mp_util::build_sru_response(package, odr_en, soap,
sru_pdu_res, charset, stylesheet);
- return;
}
&(sru_pdu_res->u.response->diagnostics),
&(sru_pdu_res->u.response->num_diagnostics),
2, 0);
- package.session().close();
return false;
}
&(sru_pdu_res->u.response->diagnostics),
&(sru_pdu_res->u.response->num_diagnostics),
2, 0);
- package.session().close();
return false;
}
bool
yf::SRUtoZ3950::Impl::z3950_close_request(mp::Package &package) const
{
- // close SRU package
- package.session().close();
-
// prepare and close Z3950 package
Package z3950_package(package.session(), package.origin());
z3950_package.copy_filter(package);
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);
&(sru_pdu_res->u.response->diagnostics),
&(sru_pdu_res->u.response->num_diagnostics),
2, 0);
- package.session().close();
return false;
}
&(sru_pdu_res->u.response->diagnostics),
&(sru_pdu_res->u.response->num_diagnostics),
2, 0);
- package.session().close();
return false;
}
-
+
// everything fine, continuing