fd is passed to maskOserver rather than to addObserver
Rep *m_p;
public:
/// Add an observer
Rep *m_p;
public:
/// Add an observer
- virtual void addObserver(int fd, ISocketObserver *observer);
+ virtual void addObserver(ISocketObserver *observer);
/// Delete an observer
virtual void deleteObserver(ISocketObserver *observer);
/// Delete all observers
virtual void deleteObservers();
/// Set event mask for observer
/// Delete an observer
virtual void deleteObserver(ISocketObserver *observer);
/// Delete all observers
virtual void deleteObservers();
/// Set event mask for observer
- virtual void maskObserver(ISocketObserver *observer, int mask);
+ virtual void maskObserver(ISocketObserver *observer, int mask, int fd);
/// Set timeout
virtual void timeoutObserver(ISocketObserver *observer, int timeout);
/// Process one event. return > 0 if event could be processed;
/// Set timeout
virtual void timeoutObserver(ISocketObserver *observer, int timeout);
/// Process one event. return > 0 if event could be processed;
class YAZ_EXPORT ISocketObservable {
public:
/// Add an observer interested in socket fd
class YAZ_EXPORT ISocketObservable {
public:
/// Add an observer interested in socket fd
- virtual void addObserver(int fd, ISocketObserver *observer) = 0;
+ virtual void addObserver(ISocketObserver *observer) = 0;
/// Delete an observer
virtual void deleteObserver(ISocketObserver *observer) = 0;
/// Delete all observers
virtual void deleteObservers() = 0;
/// Specify the events that the observer is intersted in.
/// Delete an observer
virtual void deleteObserver(ISocketObserver *observer) = 0;
/// Delete all observers
virtual void deleteObservers() = 0;
/// Specify the events that the observer is intersted in.
- virtual void maskObserver(ISocketObserver *observer, int mask) = 0;
+ virtual void maskObserver(ISocketObserver *observer,
+ int mask, int fd) = 0;
/// Specify timeout
virtual void timeoutObserver(ISocketObserver *observer,
int timeout)=0;
/// Specify timeout
virtual void timeoutObserver(ISocketObserver *observer,
int timeout)=0;
mask |= SOCKET_OBSERVE_WRITE;
if (cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
mask |= SOCKET_OBSERVE_WRITE;
if (cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
- m_p->m_socketObservable->addObserver(cs_fileno(cs), this);
+ m_p->m_socketObservable->addObserver(this);
if (!mask)
{
yaz_log(m_p->log, "new PDU_Assoc. Ready");
if (!mask)
{
yaz_log(m_p->log, "new PDU_Assoc. Ready");
yaz_log(m_p->log, "new PDU_Assoc. Accepting");
// assume comstack is accepting...
m_p->state = PDU_Assoc_priv::Accepting;
yaz_log(m_p->log, "new PDU_Assoc. Accepting");
// assume comstack is accepting...
m_p->state = PDU_Assoc_priv::Accepting;
- m_p->m_socketObservable->addObserver(cs_fileno(cs), this);
+ m_p->m_socketObservable->addObserver(this);
yaz_log(m_p->log, "maskObserver 1");
m_p->m_socketObservable->maskObserver(this,
yaz_log(m_p->log, "maskObserver 1");
m_p->m_socketObservable->maskObserver(this,
- mask|SOCKET_OBSERVE_EXCEPT);
+ mask|SOCKET_OBSERVE_EXCEPT,
+ cs_fileno(cs));
else
{ // accept still incomplete.
yaz_log(m_p->log, "maskObserver 2");
else
{ // accept still incomplete.
yaz_log(m_p->log, "maskObserver 2");
- m_p->m_socketObservable->maskObserver(this,
- mask|SOCKET_OBSERVE_EXCEPT);
+ m_p->m_socketObservable->maskObserver(
+ this,
+ mask|SOCKET_OBSERVE_EXCEPT, cs_fileno(m_p->cs));
if (m_p->cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 3");
if (m_p->cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 3");
- m_p->m_socketObservable->addObserver(cs_fileno(m_p->cs), this);
- m_p->m_socketObservable->maskObserver(this, mask);
+ m_p->m_socketObservable->maskObserver(this, mask,
+ cs_fileno(m_p->cs));
if (m_p->cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 4");
if (m_p->cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 4");
- m_p->m_socketObservable->maskObserver(this, mask);
+ m_p->m_socketObservable->maskObserver(this, mask,
+ cs_fileno(m_p->cs));
return;
}
else if (res <= 0)
return;
}
else if (res <= 0)
yaz_log(m_p->log, "maskObserver 5");
m_p->m_socketObservable->maskObserver(this,
SOCKET_OBSERVE_EXCEPT|
yaz_log(m_p->log, "maskObserver 5");
m_p->m_socketObservable->maskObserver(this,
SOCKET_OBSERVE_EXCEPT|
+ SOCKET_OBSERVE_READ,
+ cs_fileno(m_p->cs));
yaz_log(m_p->log, "maskObserver 6");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_READ|
SOCKET_OBSERVE_WRITE|
yaz_log(m_p->log, "maskObserver 6");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_READ|
SOCKET_OBSERVE_WRITE|
- SOCKET_OBSERVE_EXCEPT);
+ SOCKET_OBSERVE_EXCEPT,
+ cs_fileno(m_p->cs));
if (m_p->m_session_is_dead)
{
shutdown();
if (m_p->m_session_is_dead)
{
shutdown();
m_PDU_Observer->failNotify();
return r;
}
m_PDU_Observer->failNotify();
return r;
}
- m_p->m_socketObservable->addObserver(cs_fileno(m_p->cs), this);
if (r == 1)
{
unsigned mask = SOCKET_OBSERVE_EXCEPT;
if (r == 1)
{
unsigned mask = SOCKET_OBSERVE_EXCEPT;
mask |= SOCKET_OBSERVE_WRITE;
yaz_log(m_p->log, "maskObserver 7");
mask |= SOCKET_OBSERVE_WRITE;
yaz_log(m_p->log, "maskObserver 7");
- m_p->m_socketObservable->maskObserver(this, mask);
+ m_p->m_socketObservable->maskObserver(this, mask, cs_fileno(m_p->cs));
yaz_log(m_p->log, "PDU_Assoc::flush_PDU cs_put %d bytes fd=%d (inc)",
q->m_len, cs_fileno(m_p->cs));
return r;
yaz_log(m_p->log, "PDU_Assoc::flush_PDU cs_put %d bytes fd=%d (inc)",
q->m_len, cs_fileno(m_p->cs));
return r;
m_p->state = PDU_Assoc_priv::Ready;
yaz_log(m_p->log, "maskObserver 8");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_READ|
m_p->state = PDU_Assoc_priv::Ready;
yaz_log(m_p->log, "maskObserver 8");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_READ|
- SOCKET_OBSERVE_EXCEPT);
+ SOCKET_OBSERVE_EXCEPT,
+ cs_fileno(m_p->cs));
if (m_p->m_session_is_dead)
shutdown();
}
if (m_p->m_session_is_dead)
shutdown();
}
fcntl(fd, F_SETFD, oldflags);
}
#endif
fcntl(fd, F_SETFD, oldflags);
}
#endif
- m_p->m_socketObservable->addObserver(fd, this);
+ m_p->m_socketObservable->addObserver(this);
yaz_log(m_p->log, "maskObserver 9");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_READ|
yaz_log(m_p->log, "maskObserver 9");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_READ|
- SOCKET_OBSERVE_EXCEPT);
+ SOCKET_OBSERVE_EXCEPT,
+ cs_fileno(m_p->cs));
yaz_log(m_p->log, "PDU_Assoc::listen ok fd=%d", fd);
m_p->state = PDU_Assoc_priv::Listen;
return 0;
yaz_log(m_p->log, "PDU_Assoc::listen ok fd=%d", fd);
m_p->state = PDU_Assoc_priv::Listen;
return 0;
int res = cs_connect(m_p->cs, ap);
yaz_log(m_p->log, "PDU_Assoc::connect fd=%d res=%d", cs_fileno(m_p->cs),
res);
int res = cs_connect(m_p->cs, ap);
yaz_log(m_p->log, "PDU_Assoc::connect fd=%d res=%d", cs_fileno(m_p->cs),
res);
- m_p->m_socketObservable->addObserver(cs_fileno(m_p->cs), this);
+ m_p->m_socketObservable->addObserver(this);
if (res == 0)
{ // Connect complete
if (res == 0)
{ // Connect complete
mask |= SOCKET_OBSERVE_WRITE;
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 11");
mask |= SOCKET_OBSERVE_WRITE;
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 11");
- m_p->m_socketObservable->maskObserver(this, mask);
+ m_p->m_socketObservable->maskObserver(this, mask, cs_fileno(m_p->cs));
}
else if (res > 0)
{ // Connect pending
}
else if (res > 0)
{ // Connect pending
if (m_p->cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 11");
if (m_p->cs->io_pending & CS_WANT_READ)
mask |= SOCKET_OBSERVE_READ;
yaz_log(m_p->log, "maskObserver 11");
- m_p->m_socketObservable->maskObserver(this, mask);
+ m_p->m_socketObservable->maskObserver(this, mask, cs_fileno(m_p->cs));
}
else
{ // Connect failed immediately
}
else
{ // Connect failed immediately
// normal connect in socketNotify handler
yaz_log(m_p->log, "maskObserver 12");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_WRITE|
// normal connect in socketNotify handler
yaz_log(m_p->log, "maskObserver 12");
m_p->m_socketObservable->maskObserver(this, SOCKET_OBSERVE_WRITE|
- SOCKET_OBSERVE_EXCEPT);
+ SOCKET_OBSERVE_EXCEPT,
+ cs_fileno(m_p->cs));
-void SocketManager::addObserver(int fd, ISocketObserver *observer)
+void SocketManager::addObserver(ISocketObserver *observer)
m_p->observers = se;
se->observer = observer;
}
m_p->observers = se;
se->observer = observer;
}
se->mask = 0;
se->last_activity = 0;
se->timeout = -1;
se->mask = 0;
se->last_activity = 0;
se->timeout = -1;
-void SocketManager::maskObserver(ISocketObserver *observer, int mask)
+void SocketManager::maskObserver(ISocketObserver *observer, int mask, int fd)
- yaz_log(m_p->log, "obs=%p read=%d write=%d except=%d", observer,
- mask & SOCKET_OBSERVE_READ,
- mask & SOCKET_OBSERVE_WRITE,
- mask & SOCKET_OBSERVE_EXCEPT);
+ yaz_log(m_p->log, "obs=%p read=%d write=%d except=%d fd=%d", observer,
+ mask & SOCKET_OBSERVE_READ,
+ mask & SOCKET_OBSERVE_WRITE,
+ mask & SOCKET_OBSERVE_EXCEPT, fd);
se = *m_p->lookupObserver(observer);
if (se)
se = *m_p->lookupObserver(observer);
if (se)
}
void SocketManager::timeoutObserver(ISocketObserver *observer,
}
void SocketManager::timeoutObserver(ISocketObserver *observer,