Working on UrsulaRenewal, Request, and Update
[yazpp-moved-to-github.git] / src / yaz-proxy.cpp
index 72969d3..8609021 100644 (file)
@@ -1,9 +1,18 @@
 /*
- * Copyright (c) 1998-2000, Index Data.
+ * Copyright (c) 1998-2001, Index Data.
  * See the file LICENSE for details.
  * 
  * $Log: yaz-proxy.cpp,v $
- * Revision 1.21  2000-11-01 14:22:59  adam
+ * Revision 1.24  2001-04-10 10:48:08  adam
+ * Fixed problem where proxy could cash bad result sets.
+ *
+ * Revision 1.23  2001/03/26 14:43:49  adam
+ * New threaded PDU association.
+ *
+ * Revision 1.22  2000/11/20 11:27:33  adam
+ * Fixes for connect operation (timeout and notify fix).
+ *
+ * Revision 1.21  2000/11/01 14:22:59  adam
  * Added fd parameter for method IYaz_PDU_Observer::clone.
  *
  * Revision 1.20  2000/10/24 12:29:57  adam
@@ -110,8 +119,8 @@ void Yaz_Proxy::set_proxyTarget(const char *target)
        m_proxyTarget = (char *) xstrdup (target);
 }
 
-IYaz_PDU_Observer *Yaz_Proxy::clone(IYaz_PDU_Observable
-                                   *the_PDU_Observable, int fd)
+IYaz_PDU_Observer *Yaz_Proxy::sessionNotify(IYaz_PDU_Observable
+                                           *the_PDU_Observable, int fd)
 {
     Yaz_Proxy *new_proxy = new Yaz_Proxy(the_PDU_Observable);
     new_proxy->m_parent = this;
@@ -301,7 +310,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(10);
 
        (parent->m_seqno)++;
     }
@@ -478,11 +487,13 @@ void Yaz_ProxyClient::failNotify()
 
 void Yaz_ProxyClient::connectNotify()
 {
-    logf (LOG_LOG, "Yaz_ProxyClient connection accept by %s", get_hostname());
+    logf (LOG_LOG, "Yaz_ProxyClient connection accepted by %s",
+         get_hostname());
+    timeout(600);
 }
 
-IYaz_PDU_Observer *Yaz_ProxyClient::clone(IYaz_PDU_Observable
-                                         *the_PDU_Observable, int fd)
+IYaz_PDU_Observer *Yaz_ProxyClient::sessionNotify(IYaz_PDU_Observable
+                                                 *the_PDU_Observable, int fd)
 {
     return new Yaz_ProxyClient(the_PDU_Observable);
 }
@@ -527,7 +538,17 @@ void Yaz_ProxyClient::recv_Z_PDU(Z_APDU *apdu)
     m_waiting = 0;
     logf (LOG_LOG, "Yaz_ProxyClient::recv_Z_PDU %s", get_hostname());
     if (apdu->which == Z_APDU_searchResponse)
+    {
        m_last_resultCount = *apdu->u.searchResponse->resultCount;
+       int status = *apdu->u.searchResponse->searchStatus;
+       if (! status || (
+               apdu->u.searchResponse->records &&
+               apdu->u.searchResponse->records->which != Z_Records_DBOSD))
+       {
+           delete m_last_query;
+           m_last_query = 0;
+       }
+    }
     if (apdu->which == Z_APDU_presentResponse && m_sr_transform)
     {
        m_sr_transform = 0;