X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ffilter_zoom.cpp;h=4948ca5aee34113bd5cb82a2023b2125444430b8;hb=refs%2Ftags%2Fv1.9.1;hp=67eb01e667cd8b34915a95a1b85beeee0cdfe7ad;hpb=ada737df8a221496581267f17f011e0c7c26d2fb;p=metaproxy-moved-to-github.git diff --git a/src/filter_zoom.cpp b/src/filter_zoom.cpp index 67eb01e..4948ca5 100644 --- a/src/filter_zoom.cpp +++ b/src/filter_zoom.cpp @@ -83,6 +83,7 @@ namespace metaproxy_1 { std::string extraArgs; std::string rpn2cql_fname; std::string retry_on_failure; + std::map cf_param; bool use_turbomarc; bool piggyback; CCL_bibset ccl_bibset; @@ -93,7 +94,6 @@ namespace metaproxy_1 { class Zoom::Backend : boost::noncopyable { friend class Impl; friend class Frontend; - std::string zurl; mp::wrbuf m_apdu_wrbuf; ZOOM_connection m_connection; ZOOM_resultset m_resultset; @@ -716,6 +716,11 @@ yf::Zoom::SearchablePtr yf::Zoom::Impl::parse_torus_record(const xmlNode *ptr) { s->retry_on_failure = mp::xml::get_text(ptr); } + else if (strlen((const char *) ptr->name) > 3 && + !memcmp((const char *) ptr->name, "cf_", 3)) + { + s->cf_param[(const char *) ptr->name + 3] = mp::xml::get_text(ptr); + } } return s; } @@ -1159,11 +1164,11 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases( if (input_args.length()) no_parms = yaz_uri_to_array(input_args.c_str(), odr, &names, &values); - // adding 10 because we'll be adding other URL args + // adding 20 because we'll be adding other URL args const char **out_names = (const char **) - odr_malloc(odr, (10 + no_parms) * sizeof(*out_names)); + odr_malloc(odr, (20 + no_parms) * sizeof(*out_names)); const char **out_values = (const char **) - odr_malloc(odr, (10 + no_parms) * sizeof(*out_values)); + odr_malloc(odr, (20 + no_parms) * sizeof(*out_values)); // may be changed if it's a content connection std::string torus_url = m_p->torus_searchable_url; @@ -1526,6 +1531,20 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases( out_names[no_out_args] = "nocproxy"; out_values[no_out_args++] = odr_strdup(odr, param_nocproxy); } + std::map::const_iterator it; + for (it = sptr->cf_param.begin(); it != sptr->cf_param.end(); it++) + { + int i; + const char *n = it->first.c_str(); + for (i = 0; i < no_out_args; i++) + if (!strcmp(n, out_names[i])) + break; + if (i == no_out_args) + { + out_names[no_out_args] = odr_strdup(odr, n); + out_values[no_out_args++] = odr_strdup(odr, it->second.c_str()); + } + } } else { @@ -2395,12 +2414,8 @@ next_proxy: case CCL_ERR_TRUNC_NOT_LEFT: case CCL_ERR_TRUNC_NOT_RIGHT: case CCL_ERR_TRUNC_NOT_BOTH: -#ifdef CCL_ERR_TRUNC_NOT_EMBED case CCL_ERR_TRUNC_NOT_EMBED: -#endif -#ifdef CCL_ERR_TRUNC_NOT_SINGLE case CCL_ERR_TRUNC_NOT_SINGLE: -#endif error = YAZ_BIB1_UNSUPP_SEARCH; break; }