Working on UrsulaRenewal, Request, and Update
[yazpp-moved-to-github.git] / src / yaz-proxy.cpp
index e0ec329..8609021 100644 (file)
@@ -1,9 +1,15 @@
 /*
- * 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.22  2000-11-20 11:27:33  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
@@ -113,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;
@@ -486,8 +492,8 @@ void Yaz_ProxyClient::connectNotify()
     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);
 }
@@ -532,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;