Custom session ID may be specified for SRU filter
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 24 Oct 2011 11:18:54 +0000 (13:18 +0200)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 24 Oct 2011 11:19:54 +0000 (13:19 +0200)
The ID is specified by using x-session-id argument for the SRU URL.
It is attached to the origin instance and passed down the chain.

include/metaproxy/origin.hpp
src/filter_sru_to_z3950.cpp
src/origin.cpp

index d9d625c..955476f 100644 (file)
@@ -59,6 +59,8 @@ namespace metaproxy_1 {
         
         /// get tcpip address
         std::string get_address();
+
+        void set_custom_session(const std::string &s);
     private:
         friend std::ostream& 
         std::operator<<(std::ostream& os,  metaproxy_1::Origin& o);
@@ -73,6 +75,7 @@ namespace metaproxy_1 {
         std::string m_listen_host;
         unsigned int m_listen_port;
         int m_max_sockets;
+        std::string m_custom_session;
     };
 
 }
index 140b346..17e5b55 100644 (file)
@@ -223,6 +223,10 @@ void yf::SRUtoZ3950::Impl::sru(mp::Package &package, Z_GDU *zgdu_req)
         {
             package.origin().set_max_sockets(atoi(arg->value));
         }
+        else if (!strcmp(arg->name, "x-session-id"))
+        {
+            package.origin().set_custom_session(arg->value);
+        }
 
     assert(sru_pdu_req);
 
index 500a446..6901a92 100644 (file)
@@ -67,6 +67,11 @@ void mp::Origin::set_tcpip_address(std::string addr, unsigned long s)
     m_origin_id = s;
 }
 
+void mp::Origin::set_custom_session(const std::string &s)
+{
+    m_custom_session = s;
+}
+
 std::string mp::Origin::get_address()
 {
     return m_address;
@@ -74,11 +79,13 @@ std::string mp::Origin::get_address()
 
 std::ostream& std::operator<<(std::ostream& os,  mp::Origin& o)
 {
-    if (o.m_address != "")
+    if (o.m_address.length())
         os << o.m_address;
     else
         os << "0";
     os << ":" << o.m_origin_id;
+    if (o.m_custom_session.length())
+        os << ":" << o.m_custom_session;
     return os;
 }