Idle time can be set via option -i
authorAdam Dickmeiss <adam@indexdata.dk>
Wed, 23 Oct 2002 10:15:17 +0000 (10:15 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Wed, 23 Oct 2002 10:15:17 +0000 (10:15 +0000)
include/yaz++/proxy.h
src/yaz-proxy-main.cpp
src/yaz-proxy.cpp

index e385812..d27c5a9 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1998-2000, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: proxy.h,v 1.1 2002-10-09 12:50:26 adam Exp $
+ * $Id: proxy.h,v 1.2 2002-10-23 10:15:17 adam Exp $
  */
 
 #include <yaz++/z-assoc.h>
@@ -56,6 +56,7 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc {
     int m_seqno;
     int m_max_clients;
     int m_keepalive;
+    int m_idletime;
     char *m_proxyTarget;
     char *m_proxy_authentication;
     long m_seed;
@@ -74,5 +75,6 @@ class YAZ_EXPORT Yaz_Proxy : public Yaz_Z_Assoc {
     void set_proxy_authentication (const char *auth);
     char *get_proxy_target() { return m_proxyTarget; };
     void set_max_clients(int m) { m_max_clients = m; };
+    void set_idletime (int t) { m_idletime = (t > 1) ? t : 600; };
 };
 
index 9afdc32..9b7ffc5 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1998-2001, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: yaz-proxy-main.cpp,v 1.17 2002-10-09 12:50:26 adam Exp $
+ * $Id: yaz-proxy-main.cpp,v 1.18 2002-10-23 10:15:18 adam Exp $
  */
 
 #include <yaz/log.h>
@@ -14,7 +14,7 @@
 
 void usage(char *prog)
 {
-    fprintf (stderr, "%s: [-a log] [-c num] [-v level] [-t target] "
+    fprintf (stderr, "%s: [-a log] [-c num] [-v level] [-t target] [-i sec] "
              "[-u auth] [-o optlevel] @:port\n", prog);
     exit (1);
 }
@@ -27,7 +27,7 @@ int args(Yaz_Proxy *proxy, int argc, char **argv)
     char *prog = argv[0];
     int ret;
 
-    while ((ret = options("o:a:t:v:c:u:", argv, argc, &arg)) != -2)
+    while ((ret = options("o:a:t:v:c:u:i:", argv, argc, &arg)) != -2)
     {
         switch (ret)
         {
@@ -57,6 +57,9 @@ int args(Yaz_Proxy *proxy, int argc, char **argv)
        case 'c':
            proxy->set_max_clients(atoi(arg));
            break;
+        case 'i':
+           proxy->set_idletime(atoi(arg));
+           break;
         default:
            usage(prog);
            return 1;
index b0ac802..f61547a 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (c) 1998-2001, Index Data.
  * See the file LICENSE for details.
  * 
- * $Id: yaz-proxy.cpp,v 1.36 2002-10-09 12:50:26 adam Exp $
+ * $Id: yaz-proxy.cpp,v 1.37 2002-10-23 10:15:18 adam Exp $
  */
 
 #include <assert.h>
@@ -24,6 +24,7 @@ Yaz_Proxy::Yaz_Proxy(IYaz_PDU_Observable *the_PDU_Observable) :
     m_proxy_authentication = 0;
     m_max_clients = 50;
     m_seed = time(0);
+    m_idletime = 600;
     m_optimize = xstrdup ("1");
 }
 
@@ -55,7 +56,7 @@ IYaz_PDU_Observer *Yaz_Proxy::sessionNotify(IYaz_PDU_Observable
 {
     Yaz_Proxy *new_proxy = new Yaz_Proxy(the_PDU_Observable);
     new_proxy->m_parent = this;
-    new_proxy->timeout(500);
+    new_proxy->timeout(m_idletime);
     new_proxy->set_proxy_target(m_proxyTarget);
     new_proxy->set_APDU_log(get_APDU_log());
     new_proxy->set_proxy_authentication(m_proxy_authentication);
@@ -147,7 +148,7 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu)
                c->m_last_resultCount = 0;
                c->m_sr_transform = 0;
                c->m_waiting = 0;
-               c->timeout(600); 
+               c->timeout(m_idletime); 
            }
            c->m_seqno = parent->m_seqno;
            if (c->m_server && c->m_server != this)
@@ -252,7 +253,7 @@ Yaz_ProxyClient *Yaz_Proxy::get_client(Z_APDU *apdu)
         c->m_last_ok = 0;
        c->m_sr_transform = 0;
        c->m_waiting = 0;
-       c->timeout(10);
+       c->timeout(20);
 
        (parent->m_seqno)++;
     }
@@ -430,23 +431,24 @@ void Yaz_Proxy::shutdown()
     // only keep if keep_alive flag and cookie is set...
     if (m_keepalive && m_client && m_client->m_cookie[0])
     {
-       if (m_client->m_waiting == 2)
-           abort();
+        yaz_log (LOG_LOG, "shutdown (client to proxy) keepalive %s",
+                 m_client->get_hostname());
+        assert (m_client->m_waiting != 2);
        // Tell client (if any) that no server connection is there..
        m_client->m_server = 0;
-        yaz_log (LOG_LOG, "shutdown (client to proxy) keepalive %s", m_client->get_hostname());
+
     }
     else if (m_client)
     {
-       if (m_client->m_waiting == 2)
-           abort();
-        yaz_log (LOG_LOG, "shutdown (client to proxy) close %s", m_client->get_hostname());
+        yaz_log (LOG_LOG, "shutdown (client to proxy) close %s",
+                 m_client->get_hostname());
+        assert (m_client->m_waiting != 2);
        delete m_client;
     }
     else if (!m_parent)
     {
         yaz_log (LOG_LOG, "shutdown (client to proxy) bad state");
-        abort();
+        assert (m_parent);
     }
     else 
     {