session_shared: don't reset timestap for query match
[metaproxy-moved-to-github.git] / src / util.cpp
index 27916ba..3ab3033 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
@@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include <yaz/otherinfo.h>
 #include <yaz/querytowrbuf.h>
 #include <yaz/oid_db.h>
+#include <yaz/srw.h>
 
 #include <iostream>
 
@@ -261,22 +262,19 @@ std::string mp_util::zQueryToString(Z_Query *query)
 {
     std::string query_str = "";
 
-    if (query && query->which == Z_Query_type_1){
+    if (query && query->which == Z_Query_type_1)
+    {
         Z_RPNQuery *rpn = query->u.type_1;
         
-        if (rpn){
-            
-            // allocate wrbuf (strings in YAZ!)
-            WRBUF w = wrbuf_alloc();
+        if (rpn)
+        {
+            mp::wrbuf w;
             
             // put query in w
             yaz_rpnquery_to_wrbuf(w, rpn);
             
             // from w to std::string
-            query_str = std::string(wrbuf_buf(w), wrbuf_len(w));
-            
-            // destroy wrbuf
-            wrbuf_destroy(w);
+            query_str = std::string(w.buf(), w.len());
         }
     }
 
@@ -684,6 +682,50 @@ Z_ReferenceId **mp_util::get_referenceId(const Z_APDU *apdu)
     return 0;
 }
 
+std::string mp_util::uri_encode(std::string s)
+{
+    char *x = (char *) xmalloc(1 + s.length() * 3);
+    yaz_encode_uri_component(x, s.c_str());
+    std::string result(x);
+    xfree(x);
+    return result;
+}
+
+
+std::string mp_util::uri_decode(std::string s)
+{
+    char *x = (char *) xmalloc(1 + s.length());
+    yaz_decode_uri_component(x, s.c_str(), s.length());
+    std::string result(x);
+    xfree(x);
+    return result;
+}
+
+mp::wrbuf::wrbuf()
+{
+    m_wrbuf = wrbuf_alloc();
+}
+
+mp::wrbuf::~wrbuf()
+{
+    wrbuf_destroy(m_wrbuf);
+}
+
+mp::wrbuf::operator WRBUF() const
+{
+    return m_wrbuf;
+}
+
+size_t mp::wrbuf::len()
+{
+    return wrbuf_len(m_wrbuf);
+}
+
+const char *mp::wrbuf::buf()
+{
+    return wrbuf_buf(m_wrbuf);
+}
+
 
 /*
  * Local variables: