-/* $Id: filter_sru_to_z3950.cpp,v 1.33 2007-04-13 09:57:51 adam Exp $
+/* $Id: filter_sru_to_z3950.cpp,v 1.36 2008-01-29 16:51:12 adam Exp $
Copyright (c) 2005-2007, Index Data.
- See the LICENSE file for details
-*/
+This file is part of Metaproxy.
+
+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 Metaproxy; see the file LICENSE. If not, write to the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+ */
#include "config.hpp"
#include "filter.hpp"
bool z3950_init_request(mp::Package &package,
mp::odr &odr_en,
- Z_SRW_PDU *sru_pdu_res,
- const std::string
- &database = "Default") const;
+ Z_SRW_PDU *sru_pdu_req,
+ Z_SRW_PDU *sru_pdu_res) const;
bool z3950_close_request(mp::Package &package) const;
- bool z3950_search_request(mp::Package &package,
- mp::odr &odr_en,
- Z_SRW_PDU *sru_pdu_res,
- Z_SRW_searchRetrieveRequest
- const *sr_req) const;
+ bool z3950_search_request(
+ mp::Package &package,
+ mp::odr &odr_en,
+ Z_SRW_PDU *sru_pdu_res,
+ Z_SRW_searchRetrieveRequest const *sr_req) const;
- bool z3950_present_request(mp::Package &package,
- mp::odr &odr_en,
- Z_SRW_PDU *sru_pdu_res,
- Z_SRW_searchRetrieveRequest
- const *sr_req) const;
+ bool z3950_present_request(
+ mp::Package &package,
+ mp::odr &odr_en,
+ Z_SRW_PDU *sru_pdu_res,
+ Z_SRW_searchRetrieveRequest const *sr_req) const;
bool z3950_scan_request(mp::Package &package,
mp::odr &odr_en,
ok = mp_util::check_sru_query_exists(package, odr_en,
sru_pdu_res, sr_req);
- if (ok && z3950_init_request(package, odr_en, sru_pdu_res))
+ if (ok && z3950_init_request(package, odr_en, sru_pdu_req, sru_pdu_res))
{
{
ok = z3950_search_request(package, odr_en,
4, "scan");
// to be used when we do scan
- if (false && z3950_init_request(package, odr_en, sru_pdu_res))
+ if (false && z3950_init_request(package, odr_en, sru_pdu_req,
+ sru_pdu_res))
{
z3950_scan_request(package, odr_en, sru_pdu_res, sr_req);
z3950_close_request(package);
bool
yf::SRUtoZ3950::Impl::z3950_init_request(mp::Package &package,
mp::odr &odr_en,
- Z_SRW_PDU *sru_pdu_res,
- const std::string &database) const
+ Z_SRW_PDU *sru_pdu_req,
+ Z_SRW_PDU *sru_pdu_res) const
{
// prepare Z3950 package
Package z3950_package(package.session(), package.origin());
ODR_MASK_SET(init_req->protocolVersion, Z_ProtocolVersion_2);
ODR_MASK_SET(init_req->protocolVersion, Z_ProtocolVersion_3);
+ Z_SRW_extra_arg *arg;
+ for ( arg = sru_pdu_req->extra_args; arg; arg = arg->next)
+ if (!strcmp(arg->name, "x-target"))
+ {
+ std::string target(arg->value);
+ mp_util::set_vhost_otherinfo(&init_req->otherInfo,
+ odr_en, target, 1);
+
+ }
+
z3950_package.request() = apdu;
// send Z3950 package
// RecordSyntax will always be XML
apdu->u.presentRequest->preferredRecordSyntax
- = yaz_string_to_oid_odr(yaz_oid_std(), CLASS_RECSYN, OID_STR_XML,
- odr_en);
+ = odr_oiddup(odr_en, yaz_oid_recsyn_xml);
// z3950'fy record schema
if (sr_req->recordSchema)
else
{
Z_External *r = npr->u.databaseRecord;
- const int *xml_oid = yaz_string_to_oid(yaz_oid_std(),
- CLASS_RECSYN,
- OID_STR_XML);
- if (xml_oid && r->direct_reference
- && !oid_oidcmp(r->direct_reference, xml_oid))
+ if (r->direct_reference
+ && !oid_oidcmp(r->direct_reference, yaz_oid_recsyn_xml))
{
sru_res->records[i].recordSchema = "dc";
sru_res->records[i].recordData_buf