/*
- * Copyright (c) 1998-2001, Index Data.
+ * Copyright (c) 1998-2003, Index Data.
* See the file LICENSE for details.
*
- * $Id: yaz-pdu-assoc.cpp,v 1.32 2003-10-10 10:50:37 adam Exp $
+ * $Id: yaz-pdu-assoc.cpp,v 1.37 2003-10-23 11:45:08 adam Exp $
*/
#include <assert.h>
m_socketObservable = socketObservable;
m_PDU_Observer = 0;
m_queue_out = 0;
+ m_queue_in = 0;
m_input_buf = 0;
m_input_len = 0;
m_children = 0;
if (!m_PDU_Observer)
return;
-
+#if 0
+ PDU_Queue **pq = &m_queue_in;
+ while (*pq)
+ pq = &(*pq)->m_next;
+
+ *pq = new PDU_Queue(m_input_buf, res);
+#else
m_PDU_Observer->recv_PDU(m_input_buf, res);
- m_destroyed = 0;
+#endif
if (destroyed) // it really was destroyed, return now.
return;
+ m_destroyed = 0;
} while (m_cs && cs_more (m_cs));
if (m_cs && m_state == Ready)
{
return cs_create_host(type_and_host, 2, vp);
}
-void Yaz_PDU_Assoc::listen(IYaz_PDU_Observer *observer,
- const char *addr)
+int Yaz_PDU_Assoc::listen(IYaz_PDU_Observer *observer,
+ const char *addr)
{
close();
- yaz_log (LOG_LOG, "Adding listener %s", addr);
-
m_PDU_Observer = observer;
void *ap;
m_cs = comstack(addr, &ap);
if (!m_cs)
- return;
+ return -1;
if (cs_bind(m_cs, ap, CS_SERVER) < 0)
- return;
+ return -2;
m_socketObservable->addObserver(cs_fileno(m_cs), this);
yaz_log(m_log, "maskObserver 9");
m_socketObservable->maskObserver(this, YAZ_SOCKET_OBSERVE_READ|
YAZ_SOCKET_OBSERVE_EXCEPT);
yaz_log (m_log, "Yaz_PDU_Assoc::listen ok fd=%d", cs_fileno(m_cs));
m_state = Listen;
+ return 0;
}
void Yaz_PDU_Assoc::idleTime(int idleTime)
m_socketObservable->timeoutObserver(this, m_idleTime);
}
-void Yaz_PDU_Assoc::connect(IYaz_PDU_Observer *observer,
+int Yaz_PDU_Assoc::connect(IYaz_PDU_Observer *observer,
const char *addr)
{
yaz_log (m_log, "Yaz_PDU_Assoc::connect %s", addr);
void *ap;
m_cs = comstack(addr, &ap);
if (!m_cs)
- {
- m_PDU_Observer->failNotify();
- return;
- }
+ return -1;
int res = cs_connect (m_cs, ap);
yaz_log (m_log, "Yaz_PDU_Assoc::connect fd=%d res=%d", cs_fileno(m_cs),
res);
m_socketObservable->maskObserver(this, YAZ_SOCKET_OBSERVE_WRITE|
YAZ_SOCKET_OBSERVE_EXCEPT);
}
+ return 0;
}
// Single-threaded... Only useful for non-blocking handlers