#include <yaz/pquery.h>
#include <yaz/oid_db.h>
#include <yaz/log.h>
+#include <yaz/otherinfo.h>
#if YAZ_VERSIONL >= 0x50000
#include <yaz/facet.h>
#endif
bool z3950_search_request(
mp::Package &package,
+ mp::Package &z3950_package,
mp::odr &odr_en,
Z_SRW_PDU *sru_pdu_res,
Z_SRW_searchRetrieveRequest const *sr_req,
assert(sru_pdu_req);
+ Package z3950_package(package.session(), package.origin());
+ z3950_package.copy_filter(package);
+
// filter acts as sink for SRU explain requests
if (sru_pdu_req->which == Z_SRW_explain_request)
{
if (ok && z3950_init_request(package, odr_en,
zurl, sru_pdu_res, sru_pdu_req))
{
- ok = z3950_search_request(package, odr_en,
+ ok = z3950_search_request(package, z3950_package, odr_en,
sru_pdu_res, sr_req, zurl, dbargs);
if (ok
mp_util::set_vhost_otherinfo(&init_req->otherInfo, odr_en, host, 1);
}
+ Z_GDU *zgdu_req = package.request().get();
+ if (zgdu_req->which == Z_GDU_HTTP_Request)
+ {
+ Z_HTTP_Request *hreq = zgdu_req->u.HTTP_Request;
+ const char *peer_name =
+ z_HTTP_header_lookup(hreq->headers, "X-Forwarded-For");
+ if (peer_name)
+ {
+ yaz_oi_set_string_oid(&init_req->otherInfo, odr_en,
+ yaz_oid_userinfo_client_ip, 1, peer_name);
+ }
+ }
+
z3950_package.request() = apdu;
// send Z3950 package
}
bool yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package,
+ mp::Package &z3950_package,
mp::odr &odr_en,
Z_SRW_PDU *sru_pdu_res,
Z_SRW_searchRetrieveRequest
assert(sru_pdu_res->u.response);
- Package z3950_package(package.session(), package.origin());
- z3950_package.copy_filter(package);
-
Z_APDU *apdu = zget_APDU(odr_en, Z_APDU_searchRequest);
Z_SearchRequest *z_searchRequest = apdu->u.searchRequest;
// yaz_oi_set_facetlist not public in YAZ 4.2.66
if (sr_req->facetList)
{
- Z_OtherInformation **oi = &z_searchRequest->otherInfo;
+ Z_OtherInformation **oi = &z_searchRequest->additionalSearchInfo;
yaz_oi_set_facetlist(oi, odr_en, sr_req->facetList);
}
#endif