zoom: db arg content-{user,password} dealt with
[metaproxy-moved-to-github.git] / src / filter_zoom.cpp
index d6a8cdc..05f3a4c 100644 (file)
@@ -314,6 +314,7 @@ yf::Zoom::Searchable::Searchable(CCL_bibset base)
     piggyback = true;
     use_turbomarc = true;
     sortStrategy = "embed";
+    urlRecipe = "${md-electronic-url}";
     ccl_bibset = ccl_qual_dup(base);
 }
 
@@ -436,7 +437,8 @@ yf::Zoom::SearchablePtr yf::Zoom::Impl::parse_torus_record(const xmlNode *ptr)
         {
             s->sru = mp::xml::get_text(ptr);
         }
-        else if (!strcmp((const char *) ptr->name, "SRUVersion"))
+        else if (!strcmp((const char *) ptr->name, "SRUVersion") ||
+                 !strcmp((const char *) ptr->name, "sruVersion"))
         {
             s->sru_version = mp::xml::get_text(ptr);
         }
@@ -721,11 +723,14 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
         torus_db = database;
 
     std::string authentication;
+    std::string content_authentication;
     std::string proxy;
     std::string realm = m_p->default_realm;
 
     const char *param_user = 0;
     const char *param_password = 0;
+    const char *param_content_user = 0;
+    const char *param_content_password = 0;
     int no_parms = 0;
 
     char **names;
@@ -751,6 +756,10 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
             param_user = value;
         else if (!strcmp(name, "password"))
             param_password = value;
+        else if (!strcmp(name, "content-user"))
+            param_content_user = value;
+        else if (!strcmp(name, "content-password"))
+            param_content_password = value;
         else if (!strcmp(name, "proxy"))
             proxy = value;
         else if (!strcmp(name, "cproxysession"))
@@ -781,6 +790,12 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
         if (param_password)
             authentication += "/" + std::string(param_password);
     }
+    if (param_content_user)
+    {
+        content_authentication = std::string(param_content_user);
+        if (param_content_password)
+            content_authentication += "/" + std::string(param_content_password);
+    }
     SearchablePtr sptr;
 
     std::map<std::string,SearchablePtr>::iterator it;
@@ -1002,7 +1017,8 @@ yf::Zoom::BackendPtr yf::Zoom::Frontend::get_backend_from_databases(
     b->connect(url, error, addinfo, odr);
     if (*error == 0)
         create_content_session(package, b, error, addinfo, odr,
-                               authentication, proxy);
+                               content_authentication.length() ?
+                               content_authentication : authentication, proxy);
     if (*error == 0)
         m_backend = b;
     return b;