2 * Worldvisions Weaver Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
5 * A base implementation for "listeners", streams that spawn other streams
6 * from (presumably) incoming connections.
11 #include "iwvlistener.h"
12 #include "wvstreamclone.h" // FIXME needed *only* for CompatCallback
15 class WvListener
: public IWvListener
17 IMPLEMENT_IOBJECT(WvListener
);
21 IWvListenerCallback acceptor
;
22 IWvListenerWrapper wrapper
;
24 WvListener(IWvStream
*_cloned
);
25 virtual ~WvListener();
27 virtual void addwrap(IWvListenerWrapper _wrapper
);
29 virtual IWvListenerCallback
onaccept(IWvListenerCallback _cb
);
30 IWvStream
*wrap(IWvStream
*s
);
31 void runonce(time_t msec_delay
);
34 // IWvStream default implementation.
37 { if (cloned
) cloned
->close(); }
38 virtual bool isok() const
39 { return WvErrorBase::isok() && cloned
&& cloned
->isok(); }
41 virtual void callback();
45 virtual int getrfd() const
46 { return cloned
? cloned
->getrfd() : -1; }
47 virtual int getwfd() const
48 { return cloned
? cloned
->getwfd() : -1; }
50 virtual const WvAddr
*src() const
51 { return cloned
? cloned
->src() : NULL
; }
53 virtual void pre_select(SelectInfo
&si
)
54 { if (cloned
) cloned
->pre_select(si
); }
55 virtual bool post_select(SelectInfo
&si
)
56 { return cloned
? cloned
->post_select(si
) : false; }
58 virtual size_t read(void *buf
, size_t count
)
60 virtual size_t write(const void *buf
, size_t count
)
62 virtual size_t read(WvBuf
&outbuf
, size_t count
)
64 virtual size_t write(WvBuf
&inbuf
, size_t count
= INT_MAX
)
68 virtual void nowrite()
70 virtual void maybe_autoclose()
72 virtual bool isreadable()
74 virtual bool iswritable()
76 virtual bool flush(time_t msec_timeout
)
78 virtual bool should_flush()
80 virtual IWvStreamCallback
setreadcallback(IWvStreamCallback _cb
)
82 virtual IWvStreamCallback
setwritecallback(IWvStreamCallback _cb
)
84 virtual IWvStreamCallback
setexceptcallback(IWvStreamCallback _cb
)
86 virtual IWvStreamCallback
setclosecallback(IWvStreamCallback _cb
)
88 virtual const char *wsname() const
89 { return "Listener"; }
90 virtual void set_wsname(WvStringParm name
)
92 void set_wsname(WVSTRING_FORMAT_DECL
)
93 { set_wsname(WvString(WVSTRING_FORMAT_CALL
)); }
94 virtual const char *wstype() const
95 { return "Listener"; }
96 virtual WSID
wsid() const
98 virtual void outbuf_limit(size_t size
)
100 virtual WvString
getattr(WvStringParm name
) const;
104 * This is a listener that doesn't work. You can use it for returning
107 class WvNullListener
: public WvListener
110 WvNullListener() : WvListener(NULL
)
115 virtual IWvStream
*accept()
118 virtual bool isok() const
121 virtual const WvAddr
*src() const;
124 #endif // __WVLISTENER_H