Fixed serious bug regarding timeouts. Improved logging for proxy.
[yazpp-moved-to-github.git] / include / yaz-socket-manager.h
1 /*
2  * Copyright (c) 1998-1999, Index Data.
3  * See the file LICENSE for details.
4  * Sebastian Hammer, Adam Dickmeiss
5  * 
6  * $Id: yaz-socket-manager.h,v 1.5 1999-12-06 13:52:45 adam Exp $
7  */
8
9 #include <yaz-socket-observer.h>
10 #include <time.h>
11
12 /** Simple Socket Manager.
13     Implements a stand-alone simple model that uses select(2) to
14     observe socket events.
15 */
16 class YAZ_EXPORT Yaz_SocketManager : public IYazSocketObservable {
17  private:
18     struct YazSocketEntry {
19         IYazSocketObserver *observer;
20         int fd;
21         unsigned mask;
22         unsigned timeout;
23         time_t last_activity;
24         YazSocketEntry *next;
25     };
26     YazSocketEntry *m_observers;       // all registered observers
27     struct YazSocketEvent {
28         IYazSocketObserver *observer;
29         int event;
30         YazSocketEvent *next;          // front in queue
31         YazSocketEvent *prev;          // back in queue
32     };
33     YazSocketEvent *m_queue_front;
34     YazSocketEvent *m_queue_back;
35     
36     YazSocketEntry **Yaz_SocketManager::lookupObserver
37         (IYazSocketObserver *observer);
38     YazSocketEvent *Yaz_SocketManager::getEvent();
39     void putEvent(YazSocketEvent *event);
40     void removeEvent(IYazSocketObserver *observer);
41     int m_log;
42  public:
43     /// Add an observer
44     virtual void addObserver(int fd, IYazSocketObserver *observer);
45     /// Delete an observer
46     virtual void deleteObserver(IYazSocketObserver *observer);
47     /// Delete all observers
48     virtual void deleteObservers();
49     /// Set event mask for observer
50     virtual void maskObserver(IYazSocketObserver *observer, int mask);
51     /// Set timeout
52     virtual void timeoutObserver(IYazSocketObserver *observer,
53                                  unsigned timeout);
54     /// Process one event. return > 0 if event could be processed;
55     int Yaz_SocketManager::processEvent();
56     Yaz_SocketManager();
57     virtual ~Yaz_SocketManager();
58 };
59