X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ffilter_zoom.cpp;h=5f647dafee49341b2d0331ec91de2c7cb2f86da6;hb=cf16212cc3ea5a38f40b49779814eaeba57e69c0;hp=271ec9ae15efaf2dc4b487adcd95494d7309c9f5;hpb=700432caf095fe10b180186c27bf0803fb6acd0e;p=metaproxy-moved-to-github.git diff --git a/src/filter_zoom.cpp b/src/filter_zoom.cpp index 271ec9a..5f647da 100644 --- a/src/filter_zoom.cpp +++ b/src/filter_zoom.cpp @@ -20,7 +20,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include -#include #include "filter_zoom.hpp" #include #include @@ -53,7 +52,8 @@ namespace yf = mp::filter; namespace metaproxy_1 { namespace filter { - struct Zoom::Searchable : boost::noncopyable { + class Zoom::Searchable : boost::noncopyable { + public: std::string authentication; std::string cfAuth; std::string cfProxy; @@ -153,6 +153,7 @@ namespace metaproxy_1 { CCL_bibset bibset; std::string element_transform; std::string element_raw; + std::string proxy; std::map s_map; }; } @@ -370,7 +371,7 @@ yf::Zoom::Impl::Impl() : { bibset = ccl_qual_mk(); - srand(time(0)); + srand((unsigned int) time(0)); } yf::Zoom::Impl::~Impl() @@ -549,6 +550,8 @@ void yf::Zoom::Impl::configure(const xmlNode *ptr, bool test_only, element_transform = mp::xml::get_text(attr->children); else if (!strcmp((const char *) attr->name, "element_raw")) element_raw = mp::xml::get_text(attr->children); + else if (!strcmp((const char *) attr->name, "proxy")) + proxy = mp::xml::get_text(attr->children); else throw mp::filter::FilterException( "Bad attribute " + std::string((const char *) @@ -644,7 +647,7 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases( sptr = it->second; else { - xmlDoc *doc = mp::get_searchable(m_p->torus_url, torus_db); + xmlDoc *doc = mp::get_searchable(m_p->torus_url, torus_db, m_p->proxy); if (!doc) { *error = YAZ_BIB1_DATABASE_DOES_NOT_EXIST; @@ -661,8 +664,17 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases( if (ptr->type == XML_ELEMENT_NODE && !strcmp((const char *) ptr->name, "record")) { + if (sptr) + { + *error = YAZ_BIB1_UNSPECIFIED_ERROR; + *addinfo = (char*) odr_malloc(odr, 40 + database.length()), + sprintf(*addinfo, "multiple records for udb=%s", + database.c_str()); + xmlFreeDoc(doc); + BackendPtr b; + return b; + } sptr = m_p->parse_torus_record(ptr); - break; } } } @@ -853,8 +865,8 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases( sprintf(xx, "%06d", ((unsigned) rand()) % 1000000); xx[6] = tmp_char; - int fd = creat(fname, 0666); - if (fd == -1) + FILE *file = fopen(fname, "w"); + if (!file) { yaz_log(YLOG_WARN|YLOG_ERRNO, "create %s", fname); *error = YAZ_BIB1_TEMPORARY_SYSTEM_ERROR; @@ -872,13 +884,11 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases( wrbuf_printf(w, "authentication: %s\n", authentication.c_str()); if (proxy.length()) wrbuf_printf(w, "proxy: %s\n", proxy.c_str()); - if (sptr->cfAuth.length()) - wrbuf_printf(w, "cfauth: %s\n", sptr->cfAuth.c_str()); if (sptr->cfProxy.length()) wrbuf_printf(w, "cfproxy: %s\n", sptr->cfProxy.c_str()); - write(fd, wrbuf_buf(w), wrbuf_len(w)); - close(fd); + fwrite(wrbuf_buf(w), 1, wrbuf_len(w), file); + fclose(file); yaz_log(YLOG_LOG, "file %s created\n", fname); xfree(fname); } @@ -927,7 +937,7 @@ Z_Records *yf::Zoom::Frontend::get_records(Odr_int start, number_to_present = 10000; ZOOM_record *recs = (ZOOM_record *) - odr_malloc(odr, number_to_present * sizeof(*recs)); + odr_malloc(odr, (size_t) number_to_present * sizeof(*recs)); char oid_name_str[OID_STR_MAX]; const char *syntax_name = 0; @@ -976,7 +986,7 @@ Z_Records *yf::Zoom::Frontend::get_records(Odr_int start, b->present(start, number_to_present, recs, error, addinfo, odr); - Odr_int i = 0; + int i = 0; if (!*error) { for (i = 0; i < number_to_present; i++)