/*
- * 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.25 2001-04-25 18:59:30 adam
+ * Added referenceId handling for server.
+ *
+ * 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
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;
abort();
delete m_client;
}
+ else if (!m_parent)
+ {
+ abort();
+ }
delete this;
}
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);
}
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;