zoom: extra XSLT with cproxyhost param
[metaproxy-moved-to-github.git] / src / filter_sru_to_z3950.cpp
index 62a542b..2b62986 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
@@ -211,6 +211,7 @@ void yf::SRUtoZ3950::Impl::sru(mp::Package &package, Z_GDU *zgdu_req)
         return;
     }
     
+    bool enable_package_log = false;
     std::string zurl;
     Z_SRW_extra_arg *arg;
 
@@ -227,7 +228,14 @@ void yf::SRUtoZ3950::Impl::sru(mp::Package &package, Z_GDU *zgdu_req)
         {
             package.origin().set_custom_session(arg->value);
         }
-
+        else if (!strcmp(arg->name, "x-log-enable"))
+        {
+            if (*arg->value == '1')
+            {
+                enable_package_log = true;
+                package.log_enable();
+            }
+        }
     assert(sru_pdu_req);
 
     // filter acts as sink for SRU explain requests
@@ -289,20 +297,23 @@ void yf::SRUtoZ3950::Impl::sru(mp::Package &package, Z_GDU *zgdu_req)
                                YAZ_SRW_UNSUPP_OPERATION, "unknown");
     }
 
-
-    std::string l;
-    package.reset_log(l);
-    if (l.length())
+    if (enable_package_log)
     {
-        WRBUF w = wrbuf_alloc();
-
-        wrbuf_puts(w, "<log>\n");
-        wrbuf_xmlputs(w, l.c_str());
-        wrbuf_puts(w, "</log>");
-        
-        sru_pdu_res->extraResponseData_len = wrbuf_len(w);
-        sru_pdu_res->extraResponseData_buf = odr_strdup(odr_en, wrbuf_cstr(w));
-        wrbuf_destroy(w);
+        std::string l;
+        package.log_reset(l);
+        if (l.length())
+        {
+            WRBUF w = wrbuf_alloc();
+            
+            wrbuf_puts(w, "<log>\n");
+            wrbuf_xmlputs(w, l.c_str());
+            wrbuf_puts(w, "</log>");
+            
+            sru_pdu_res->extraResponseData_len = wrbuf_len(w);
+            sru_pdu_res->extraResponseData_buf =
+                odr_strdup(odr_en, wrbuf_cstr(w));
+            wrbuf_destroy(w);
+        }
     }
     
     // build and send SRU response