* Copyright (c) 1998-2001, Index Data.
* See the file LICENSE for details.
*
- * $Id: yaz-pdu-assoc.cpp,v 1.29 2003-07-25 19:27:36 adam Exp $
+ * $Id: yaz-pdu-assoc.cpp,v 1.33 2003-10-10 12:37:26 adam Exp $
*/
#include <assert.h>
COMSTACK Yaz_PDU_Assoc::comstack(const char *type_and_host, void **vp)
{
- return cs_create_host(type_and_host, 0, vp);
+ return cs_create_host(type_and_host, 2, vp);
}
void Yaz_PDU_Assoc::listen(IYaz_PDU_Observer *observer,
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);
m_PDU_Observer = observer;
void *ap;
m_cs = comstack(addr, &ap);
+ if (!m_cs)
+ 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->addObserver(cs_fileno(m_cs), this);
- if (res >= 0)
- { // Connect pending or complete
+ if (res == 0)
+ { // Connect complete
+ m_state = Connecting;
+ unsigned mask = YAZ_SOCKET_OBSERVE_EXCEPT;
+ mask |= YAZ_SOCKET_OBSERVE_WRITE;
+ mask |= YAZ_SOCKET_OBSERVE_READ;
+ yaz_log(m_log, "maskObserver 11");
+ m_socketObservable->maskObserver(this, mask);
+ }
+ else if (res > 0)
+ { // Connect pending
m_state = Connecting;
unsigned mask = YAZ_SOCKET_OBSERVE_EXCEPT;
if (m_cs->io_pending & CS_WANT_WRITE)
m_socketObservable->maskObserver(this, YAZ_SOCKET_OBSERVE_WRITE|
YAZ_SOCKET_OBSERVE_EXCEPT);
}
+ return 0;
}
// Single-threaded... Only useful for non-blocking handlers
new_observable->m_PDU_Observer = m_PDU_Observer->sessionNotify
(new_observable, cs_fileno(cs));
}
+
+const char*Yaz_PDU_Assoc::getpeername()
+{
+ return cs_addrstr(m_cs);
+}