X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Fsru_util.cpp;h=5584afd40a1f6a9ae105a8b617efda7f87c7a182;hb=665559cbc22546e8df69be33a7d492294cab9fb1;hp=2b254109f6f15e274c0356bf47e86df3360d3578;hpb=b70b9ec78f0ab1c3ed3b432de986159129a0e4ed;p=metaproxy-moved-to-github.git diff --git a/src/sru_util.cpp b/src/sru_util.cpp index 2b25410..5584afd 100644 --- a/src/sru_util.cpp +++ b/src/sru_util.cpp @@ -1,7 +1,19 @@ -/* $Id: sru_util.cpp,v 1.7 2007-01-25 14:05:54 adam Exp $ - Copyright (c) 2005-2007, Index Data. - - See the LICENSE file for details +/* This file is part of Metaproxy. + Copyright (C) 2005-2008 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 +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 "sru_util.hpp" @@ -36,14 +48,9 @@ bool mp_util::build_sru_debug_package(mp::Package &package) } mp_util::SRUServerInfo mp_util::get_sru_server_info(mp::Package &package) - //Z_SRW_explainRequest const *er_req) { mp_util::SRUServerInfo sruinfo; - // getting database info - //if (er_req && er_req->database) - // sruinfo.database = er_req->database; - // getting host and port info sruinfo.host = package.origin().listen_host(); sruinfo.port = mp_util::to_string(package.origin().listen_port()); @@ -55,21 +62,26 @@ mp_util::SRUServerInfo mp_util::get_sru_server_info(mp::Package &package) Z_HTTP_Request* http_req = zgdu_req->u.HTTP_Request; if (http_req) { - - //std::string http_method = http_req->method; - //std::string http_version = http_req->version; std::string http_path = http_req->path; - if (http_path.size() > 1) + + // taking out GET parameters + std::string::size_type ipath = http_path.rfind("?"); + if (ipath != std::string::npos) + http_path.assign(http_path, 0, ipath); + + // assign to database name + if (http_path.size() > 1){ sruinfo.database.assign(http_path, 1, std::string::npos); - + } + std::string http_host_address = mp_util::http_header_value(http_req->headers, "Host"); - std::string::size_type i = http_host_address.rfind(":"); - if (i != std::string::npos) + std::string::size_type iaddress = http_host_address.rfind(":"); + if (iaddress != std::string::npos) { - sruinfo.host.assign(http_host_address, 0, i); - sruinfo.port.assign(http_host_address, i + 1, + sruinfo.host.assign(http_host_address, 0, iaddress); + sruinfo.port.assign(http_host_address, iaddress + 1, std::string::npos); } } @@ -83,51 +95,6 @@ mp_util::SRUServerInfo mp_util::get_sru_server_info(mp::Package &package) } -// bool mp_util::build_simple_explain(mp::Package &package, -// mp::odr &odr_en, -// Z_SRW_PDU *sru_pdu_res, -// SRUServerInfo sruinfo, -// Z_SRW_explainRequest const *er_req) -// { -// // z3950'fy recordPacking -// int record_packing = Z_SRW_recordPacking_XML; -// if (er_req && er_req->recordPacking && 's' == *(er_req->recordPacking)) -// record_packing = Z_SRW_recordPacking_string; - -// // building SRU explain record -// std::string explain_xml -// = mp_util::to_string( -// "\n" -// " \n" -// " ") -// + sruinfo.host -// + mp_util::to_string("\n" -// " ") -// + sruinfo.port -// + mp_util::to_string("\n" -// " ") -// + sruinfo.database -// + mp_util::to_string("\n" -// " \n" -// "\n"); - - -// // preparing explain record insert -// Z_SRW_explainResponse *sru_res = sru_pdu_res->u.explain_response; - -// // inserting one and only explain record - -// sru_res->record.recordPosition = odr_intdup(odr_en, 1); -// sru_res->record.recordPacking = record_packing; -// sru_res->record.recordSchema = (char *)xmlns_explain.c_str(); -// sru_res->record.recordData_len = 1 + explain_xml.size(); -// sru_res->record.recordData_buf -// = odr_strdupn(odr_en, (const char *)explain_xml.c_str(), -// 1 + explain_xml.size()); - -// return true; -// }; - bool mp_util::build_sru_explain(metaproxy_1::Package &package, metaproxy_1::odr &odr_en, @@ -266,7 +233,7 @@ bool mp_util::build_sru_response(mp::Package &package, mp::odr &odr_de, mp::odr &odr_en, Z_SRW_PDU *sru_pdu_res, - Z_SOAP *&soap, + Z_SOAP **soap, char *charset, char *stylesheet) { @@ -286,7 +253,7 @@ bool mp_util::build_sru_response(mp::Package &package, // checking if we got a SRU GET/POST/SOAP HTTP package // closing connection if we did not ... - if (0 == yaz_sru_decode(http_req, &sru_pdu_req, &soap, + if (0 == yaz_sru_decode(http_req, &sru_pdu_req, soap, odr_de, &charset, &(sru_pdu_res->u.response->diagnostics), &(sru_pdu_res->u.response->num_diagnostics))) @@ -299,7 +266,7 @@ bool mp_util::build_sru_response(mp::Package &package, } return sru_pdu_req; } - else if (0 == yaz_srw_decode(http_req, &sru_pdu_req, &soap, + else if (0 == yaz_srw_decode(http_req, &sru_pdu_req, soap, odr_de, &charset)) return sru_pdu_req; else @@ -604,8 +571,9 @@ std::ostream& std::operator<<(std::ostream& os, Z_SRW_PDU& srw_pdu) /* * 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 */ +