X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ffilter_sru_to_z3950.cpp;h=03eeb343a0ff02e88889fc48f3be09d209391c4f;hb=d3d22455030e61bf74a2da3e93226c5d92ba2d36;hp=d3a672de4a9490ecd9261ba127d4562a62bb3c90;hpb=5beddc7e2432ca7eda40eacf025e9bbbbc026a86;p=metaproxy-moved-to-github.git diff --git a/src/filter_sru_to_z3950.cpp b/src/filter_sru_to_z3950.cpp index d3a672d..03eeb34 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.16 2006-09-29 09:48:36 marc Exp $ +/* $Id: filter_sru_to_z3950.cpp,v 1.18 2006-10-02 12:17:54 marc Exp $ Copyright (c) 2005-2006, Index Data. See the LICENSE file for details @@ -153,6 +153,7 @@ void yf::SRUtoZ3950::Impl::process(mp::Package &package) const sru_pdu_res, soap, charset, stylesheet))) { + build_simple_explain(package, odr_en, sru_pdu_res, 0); build_sru_response(package, odr_en, soap, sru_pdu_res, charset, stylesheet); package.session().close(); @@ -254,26 +255,51 @@ bool yf::SRUtoZ3950::Impl::build_simple_explain(mp::Package &package, const *er_req) const { + + // z3950'fy recordPacking int record_packing = Z_SRW_recordPacking_XML; - if (er_req->recordPacking && 's' == *(er_req->recordPacking)) + if (er_req && er_req->recordPacking && 's' == *(er_req->recordPacking)) record_packing = Z_SRW_recordPacking_string; // getting database info std::string database("Default"); - if (er_req->database) + if (er_req && er_req->database) database = er_req->database; + // getting host and port info + std::string host = package.origin().listen_host(); + std::string port = mp_util::to_string(package.origin().listen_port()); + + // overwriting host and port info if set from HTTP Host header + Z_GDU *zgdu_req = package.request().get(); + if (zgdu_req && zgdu_req->which == Z_GDU_HTTP_Request) + { + Z_HTTP_Request* http_req = zgdu_req->u.HTTP_Request; + if (http_req) + { + 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) + { + host.assign(http_host_address, 0, i); + port.assign(http_host_address, i + 1, std::string::npos); + } + } + } + // building SRU explain record std::string explain_xml = mp_util::to_string( "\n" " \n" " ") - + package.origin().server_host() + + host + mp_util::to_string("\n" " ") - + mp_util::to_string(package.origin().server_port()) + + port + mp_util::to_string("\n" " ") + database