projects
/
metaproxy-moved-to-github.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
HTTP response with Metaproxy name and URL MP-493
[metaproxy-moved-to-github.git]
/
src
/
filter_sru_to_z3950.cpp
diff --git
a/src/filter_sru_to_z3950.cpp
b/src/filter_sru_to_z3950.cpp
index
44b72bf
..
882728b
100644
(file)
--- a/
src/filter_sru_to_z3950.cpp
+++ b/
src/filter_sru_to_z3950.cpp
@@
-30,6
+30,9
@@
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include <yaz/pquery.h>
#include <yaz/oid_db.h>
#include <yaz/log.h>
#include <yaz/pquery.h>
#include <yaz/oid_db.h>
#include <yaz/log.h>
+#if YAZ_VERSIONL >= 0x50000
+#include <yaz/facet.h>
+#endif
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition.hpp>
@@
-94,7
+97,7
@@
namespace metaproxy_1 {
Z_SRW_PDU *sru_pdu_res,
Z_SRW_searchRetrieveRequest const *sr_req,
std::string zurl,
Z_SRW_PDU *sru_pdu_res,
Z_SRW_searchRetrieveRequest const *sr_req,
std::string zurl,
- const char *db_append
+ std::string db_append
) const;
bool z3950_present_request(
) const;
bool z3950_present_request(
@@
-225,7
+228,7
@@
void yf::SRUtoZ3950::Impl::sru(mp::Package &package, Z_GDU *zgdu_req)
bool enable_package_log = false;
std::string zurl;
bool enable_package_log = false;
std::string zurl;
- const char *dbargs = 0;
+ std::string dbargs;
Z_SRW_extra_arg *arg;
for ( arg = sru_pdu_req->extra_args; arg; arg = arg->next)
Z_SRW_extra_arg *arg;
for ( arg = sru_pdu_req->extra_args; arg; arg = arg->next)
@@
-249,9
+252,13
@@
void yf::SRUtoZ3950::Impl::sru(mp::Package &package, Z_GDU *zgdu_req)
package.log_enable();
}
}
package.log_enable();
}
}
- else if (!strcmp(arg->name, "x-dbargs"))
+ else if (!strncmp(arg->name, "x-client-", 9) && arg->value)
{
{
- dbargs = arg->value;
+ if (dbargs.length())
+ dbargs += '&';
+ dbargs += mp_util::uri_encode(arg->name + 9);
+ dbargs += '=';
+ dbargs += mp_util::uri_encode(arg->value);
}
assert(sru_pdu_req);
}
assert(sru_pdu_req);
@@
-557,7
+564,7
@@
bool yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package,
Z_SRW_searchRetrieveRequest
const *sr_req,
std::string zurl,
Z_SRW_searchRetrieveRequest
const *sr_req,
std::string zurl,
- const char *dbappend) const
+ std::string dbappend) const
{
assert(sru_pdu_res->u.response);
{
assert(sru_pdu_res->u.response);
@@
-583,7
+590,7
@@
bool yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package,
else
db = "Default";
else
db = "Default";
- if (dbappend)
+ if (dbappend.length())
{
db += ",";
db += dbappend;
{
db += ",";
db += dbappend;
@@
-593,6
+600,14
@@
bool yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package,
odr_malloc(odr_en, sizeof(char *));
z_searchRequest->databaseNames[0] = odr_strdup(odr_en, db.c_str());
}
odr_malloc(odr_en, sizeof(char *));
z_searchRequest->databaseNames[0] = odr_strdup(odr_en, db.c_str());
}
+#if YAZ_VERSIONL >= 0x50000
+ // yaz_oi_set_facetlist not public in YAZ 4.2.66
+ if (sr_req->facetList)
+ {
+ Z_OtherInformation **oi = &z_searchRequest->otherInfo;
+ yaz_oi_set_facetlist(oi, odr_en, sr_req->facetList);
+ }
+#endif
Z_Query *z_query = (Z_Query *) odr_malloc(odr_en, sizeof(Z_Query));
z_searchRequest->query = z_query;
Z_Query *z_query = (Z_Query *) odr_malloc(odr_en, sizeof(Z_Query));
z_searchRequest->query = z_query;
@@
-633,7
+648,12
@@
bool yf::SRUtoZ3950::Impl::z3950_search_request(mp::Package &package,
{
return false;
}
{
return false;
}
-
+#if YAZ_VERSIONL >= 0x50000
+ Z_FacetList *fl = yaz_oi_get_facetlist(&sr->additionalSearchInfo);
+ if (!fl)
+ fl = yaz_oi_get_facetlist(&sr->otherInfo);
+ sru_pdu_res->u.response->facetList = fl;
+#endif
sru_pdu_res->u.response->numberOfRecords
= odr_intdup(odr_en, *sr->resultCount);
return true;
sru_pdu_res->u.response->numberOfRecords
= odr_intdup(odr_en, *sr->resultCount);
return true;
@@
-865,7
+885,13
@@
int yf::SRUtoZ3950::Impl::z3950_build_query(
const Z_SRW_searchRetrieveRequest *req
) const
{
const Z_SRW_searchRetrieveRequest *req
) const
{
- if (req->query_type == Z_SRW_query_type_cql)
+ if (
+#ifdef Z_SRW_query_type_cql
+ req->query_type == Z_SRW_query_type_cql
+#else
+ !strcmp(req->queryType, "cql")
+#endif
+ )
{
Z_External *ext = (Z_External *)
odr_malloc(odr_en, sizeof(*ext));
{
Z_External *ext = (Z_External *)
odr_malloc(odr_en, sizeof(*ext));
@@
-874,22
+900,39
@@
int yf::SRUtoZ3950::Impl::z3950_build_query(
ext->indirect_reference = 0;
ext->descriptor = 0;
ext->which = Z_External_CQL;
ext->indirect_reference = 0;
ext->descriptor = 0;
ext->which = Z_External_CQL;
- ext->u.cql = odr_strdup(odr_en, req->query.cql);
+ ext->u.cql = odr_strdup(odr_en,
+#ifdef Z_SRW_query_type_cql
+ req->query.cql
+#else
+ req->query
+#endif
+ );
z_query->which = Z_Query_type_104;
z_query->u.type_104 = ext;
return 0;
}
z_query->which = Z_Query_type_104;
z_query->u.type_104 = ext;
return 0;
}
- if (req->query_type == Z_SRW_query_type_pqf)
+ if (
+#ifdef Z_SRW_query_type_pqf
+ req->query_type == Z_SRW_query_type_pqf
+#else
+ !strcmp(req->queryType, "pqf")
+#endif
+ )
{
Z_RPNQuery *RPNquery;
YAZ_PQF_Parser pqf_parser;
pqf_parser = yaz_pqf_create ();
{
Z_RPNQuery *RPNquery;
YAZ_PQF_Parser pqf_parser;
pqf_parser = yaz_pqf_create ();
- RPNquery = yaz_pqf_parse (pqf_parser, odr_en, req->query.pqf);
-
+ RPNquery = yaz_pqf_parse (pqf_parser, odr_en,
+#ifdef Z_SRW_query_type_pqf
+ req->query.pqf
+#else
+ req->query
+#endif
+ );
yaz_pqf_destroy(pqf_parser);
if (!RPNquery)
yaz_pqf_destroy(pqf_parser);
if (!RPNquery)
@@
-942,7
+985,7
@@
static mp::filter::Base* filter_creator()
}
extern "C" {
}
extern "C" {
- struct metaproxy_1_filter_struct metaproxy_1_filter_sru_to_z3950 = {
+ struct metaproxy_1_filter_struct metaproxy_1_filter_sru_z3950 = {
0,
"sru_z3950",
filter_creator
0,
"sru_z3950",
filter_creator