std::string torus_content_url;
std::string torus_auth_url;
std::string default_realm;
+ std::string torus_auth_hostname;
std::map<std::string,std::string> fieldmap;
std::string xsldir;
std::string file_path;
torus_auth_url = mp::xml::get_text(attr->children);
else if (!strcmp((const char *) attr->name, "realm"))
default_realm = mp::xml::get_text(attr->children);
+ else if (!strcmp((const char *) attr->name, "auth_hostname"))
+ torus_auth_hostname = mp::xml::get_text(attr->children);
else if (!strcmp((const char *) attr->name, "xsldir"))
xsldir = mp::xml::get_text(attr->children);
else if (!strcmp((const char *) attr->name, "element_transform"))
sptr = it->second;
else if (torus_url.length() > 0)
{
+ std::string torus_addinfo;
std::string torus_query = "udb==" + torus_db;
xmlDoc *doc = mp::get_searchable(package,torus_url, torus_db,
torus_query,
- realm, m_p->proxy);
+ realm, m_p->proxy,
+ torus_addinfo);
if (!doc)
{
*error = YAZ_BIB1_UNSPECIFIED_ERROR;
- *addinfo = odr_strdup(odr, "Torus server unavailable or "
- "incorrectly configured");
+ if (torus_addinfo.length())
+ *addinfo = odr_strdup(odr, torus_addinfo.c_str());
BackendPtr b;
return b;
}
if (!*error)
{
for (i = 0; i < number_to_present; i++)
+ {
if (!recs[i])
break;
+
+ const char *addinfo;
+ int sur_error = ZOOM_record_error(recs[i], 0 /* msg */,
+ &addinfo, 0 /* diagset */);
+ if (sur_error ==
+ YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS && addinfo &&
+ !strcmp(addinfo,
+ "ZOOM C generated. Present phase and no records"))
+ break;
+ }
}
if (i > 0)
{ // only return records if no error and at least one record
npl->num_records = i;
npl->records = (Z_NamePlusRecord **)
odr_malloc(odr, i * sizeof(*npl->records));
- for (i = 0; i < number_to_present; i++)
+ for (i = 0; i < npl->num_records; i++)
{
Z_NamePlusRecord *npr = 0;
const char *addinfo;
else if (query->which == Z_Query_type_104 &&
query->u.type_104->which == Z_External_CQL)
{
+ std::string torus_addinfo;
std::string torus_query(query->u.type_104->u.cql);
xmlDoc *doc = mp::get_searchable(package, torus_url, "",
torus_query,
- realm, m_p->proxy);
+ realm, m_p->proxy,
+ torus_addinfo);
if (m_p->explain_xsp)
{
xmlDoc *rec_res = xsltApplyStylesheet(m_p->explain_xsp, doc, 0);
if (!doc)
{
*error = YAZ_BIB1_UNSPECIFIED_ERROR;
- *addinfo = odr_strdup(odr, "Torus server unavailable or "
- "incorrectly configured");
+ if (torus_addinfo.length())
+ *addinfo = odr_strdup(odr, torus_addinfo.c_str());
}
else
{
if (b->get_option("sru"))
{
- int status = 0;
Z_RPNQuery *zquery;
zquery = p_query_rpn(odr, wrbuf_cstr(pqf_wrbuf));
- mp::wrbuf wrb;
+ mp::wrbuf wrb_cql;
+ mp::wrbuf wrb_addinfo;
if (!strcmp(b->get_option("sru"), "solr"))
- {
- solr_transform_t cqlt = solr_transform_create();
-
- status = solr_transform_rpn2solr_wrbuf(cqlt, wrb, zquery);
-
- solr_transform_close(cqlt);
- }
+ error = solr_transform_rpn2solr_stream_r(b->cqlt, wrb_addinfo,
+ wrbuf_vp_puts, wrb_cql,
+ zquery);
else
+ error = cql_transform_rpn2cql_stream_r(b->cqlt, wrb_addinfo,
+ wrbuf_vp_puts, wrb_cql,
+ zquery);
+ if (error)
{
- status = cql_transform_rpn2cql_wrbuf(b->cqlt, wrb, zquery);
- }
- if (status == 0)
- {
- ZOOM_query_cql(q, wrbuf_cstr(wrb));
- package.log("zoom", YLOG_LOG, "CQL: %s", wrbuf_cstr(wrb));
- b->search(q, &hits, &error, &addinfo, &fl, odr);
- }
- ZOOM_query_destroy(q);
-
- if (status)
- {
- error = YAZ_BIB1_MALFORMED_QUERY;
- const char *addinfo = "can not convert from RPN to CQL/Solr";
- log_diagnostic(package, error, addinfo);
- apdu_res = odr.create_searchResponse(apdu_req, error, addinfo);
+ log_diagnostic(package, error, wrb_addinfo.c_str_null());
+ apdu_res = odr.create_searchResponse(apdu_req, error,
+ wrb_addinfo.c_str_null());
package.response() = apdu_res;
return;
}
+ ZOOM_query_cql(q, wrb_cql.c_str());
+ package.log("zoom", YLOG_LOG, "search CQL: %s", wrb_cql.c_str());
+ b->search(q, &hits, &error, &addinfo, &fl, odr);
+ ZOOM_query_destroy(q);
}
else
{
- ZOOM_query_prefix(q, wrbuf_cstr(pqf_wrbuf));
- package.log("zoom", YLOG_LOG, "search PQF: %s", wrbuf_cstr(pqf_wrbuf));
+ ZOOM_query_prefix(q, pqf_wrbuf.c_str());
+ package.log("zoom", YLOG_LOG, "search PQF: %s", pqf_wrbuf.c_str());
b->search(q, &hits, &error, &addinfo, &fl, odr);
ZOOM_query_destroy(q);
}
}
else
{
- torus_query = "ip encloses/net.ipaddress \"";
+ torus_query = "ipRanges encloses/net.ipaddress \"";
torus_query += escape_cql_term(std::string(ip));
torus_query += "\"";
+
+ if (m_p->torus_auth_hostname.length())
+ {
+ torus_query += " AND hostName == \"";
+ torus_query += escape_cql_term(m_p->torus_auth_hostname);
+ torus_query += "\"";
+ }
failure_code = YAZ_BIB1_INIT_AC_BLOCKED_NETWORK_ADDRESS;
}
std::string dummy_db;
std::string dummy_realm;
+ std::string torus_addinfo;
xmlDoc *doc = mp::get_searchable(package, m_p->torus_auth_url, dummy_db,
- torus_query, dummy_realm, m_p->proxy);
+ torus_query, dummy_realm, m_p->proxy,
+ torus_addinfo);
if (!doc)
{
// something fundamental broken in lookup.
*error = YAZ_BIB1_TEMPORARY_SYSTEM_ERROR;
- *addinfo = odr_strdup(odr, "zoom: torus server unavailable or "
- "incorrectly configured.");
+ if (torus_addinfo.length())
+ *addinfo = odr_strdup(odr, torus_addinfo.c_str());
return;
}
const xmlNode *ptr = xmlDocGetRootElement(doc);