zoom: warn if %query is not defined and Explain is used
[metaproxy-moved-to-github.git] / src / torus.cpp
index f3661f9..e286adf 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of Metaproxy.
-   Copyright (C) 2005-2011 Index Data
+   Copyright (C) 2005-2012 Index Data
 
 Metaproxy is free software; you can redistribute it and/or modify it under
 the terms of the GNU General Public License as published by the Free
@@ -20,22 +20,45 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 #include <string.h>
 #include <yaz/wrbuf.h>
+#include <yaz/log.h>
 #include <yaz/url.h>
 #include <metaproxy/util.hpp>
 #include "torus.hpp"
 
 namespace mp = metaproxy_1;
 
-xmlDoc *mp::get_searchable(std::string url_template, const std::string &db,
+xmlDoc *mp::get_searchable(mp::Package &package,
+                           std::string url_template, const std::string &db,
+                           const std::string &query,
+                           const std::string &realm,
                            const std::string &proxy)
 {
-    // http://newmk2.indexdata.com/torus2/searchable.ebsco/records/?query=udb=aberdeenUni
+    // http://mk2.indexdata.com/torus2/searchable/records/?query=udb%3d%db
+    // or
+    // http://mk2.indexdata.com/torus2/searchable/records/?query=%query
     xmlDoc *doc = 0;
     size_t found;
 
+    found = url_template.find("%query");
+    if (found != std::string::npos)
+        url_template.replace(found, 6, mp::util::uri_encode(query));
+    else
+    {
+        if (db.length() == 0)
+        {
+            package.log("zoom", YLOG_WARN,
+                        "%query not defined in <torus url=\"..\"");
+            return 0;
+        }
+    }
+
     found = url_template.find("%db");
     if (found != std::string::npos)
-        url_template.replace(found, found+3, mp::util::uri_encode(db));
+        url_template.replace(found, 3, mp::util::uri_encode(db));
+
+    found = url_template.find("%realm");
+    if (found != std::string::npos)
+        url_template.replace(found, 6, mp::util::uri_encode(realm));
 
     Z_HTTP_Header *http_headers = 0;
     mp::odr odr;
@@ -55,8 +78,27 @@ xmlDoc *mp::get_searchable(std::string url_template, const std::string &db,
         );
     if (http_response && http_response->code == 200 && 
         http_response->content_buf)
+    {
+        package.log("zoom", YLOG_LOG, "Torus: %s OK", url_template.c_str());
         doc = xmlParseMemory(http_response->content_buf,
                              http_response->content_len);
+        
+    }
+    else
+    {
+        package.log("zoom", YLOG_WARN, "Torus: %s FAIL", url_template.c_str());
+        if (http_response)
+        {
+            package.log("zoom", YLOG_LOG, "HTTP code: %d", http_response->code);
+        }
+    }
+
+    if (http_response && http_response->content_buf)
+    {
+        package.log("zoom", YLOG_LOG, "HTTP content");
+        package.log_write(http_response->content_buf,
+                          http_response->content_len);
+    }
     yaz_url_destroy(url_p);
     return doc;
 }