wvdbusserver: implement NameHasOwner request.
[wvstreams.git] / include / wvlistener.h
blob3a0942cc873db733e9ef945b5ade1bf8a6fe6ee9
1 /* -*- Mode: C++ -*-
2 * Worldvisions Weaver Software:
3 * Copyright (C) 1997-2002 Net Integration Technologies, Inc.
4 *
5 * A base implementation for "listeners", streams that spawn other streams
6 * from (presumably) incoming connections.
7 */
8 #ifndef __WVLISTENER_H
9 #define __WVLISTENER_H
11 #include "iwvlistener.h"
12 #include "wvstreamclone.h" // FIXME needed *only* for CompatCallback
13 #include "wvattrs.h"
15 class WvListener : public IWvListener
17 IMPLEMENT_IOBJECT(WvListener);
18 WvAttrs attrs;
19 public:
20 IWvStream *cloned;
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.
36 virtual void close()
37 { if (cloned) cloned->close(); }
38 virtual bool isok() const
39 { return WvErrorBase::isok() && cloned && cloned->isok(); }
41 virtual void callback();
43 int getfd() const
44 { return getrfd(); }
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)
59 { return 0; }
60 virtual size_t write(const void *buf, size_t count)
61 { return 0; }
62 virtual size_t read(WvBuf &outbuf, size_t count)
63 { return 0; }
64 virtual size_t write(WvBuf &inbuf, size_t count = INT_MAX)
65 { return 0; }
66 virtual void noread()
67 { }
68 virtual void nowrite()
69 { }
70 virtual void maybe_autoclose()
71 { }
72 virtual bool isreadable()
73 { return false; }
74 virtual bool iswritable()
75 { return false; }
76 virtual bool flush(time_t msec_timeout)
77 { return false; }
78 virtual bool should_flush()
79 { return false; }
80 virtual IWvStreamCallback setreadcallback(IWvStreamCallback _cb)
81 { return 0; }
82 virtual IWvStreamCallback setwritecallback(IWvStreamCallback _cb)
83 { return 0; }
84 virtual IWvStreamCallback setexceptcallback(IWvStreamCallback _cb)
85 { return 0; }
86 virtual IWvStreamCallback setclosecallback(IWvStreamCallback _cb)
87 { return 0; }
88 virtual const char *wsname() const
89 { return "Listener"; }
90 virtual void set_wsname(WvStringParm name)
91 { }
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
97 { return 0; }
98 virtual void outbuf_limit(size_t size)
99 { }
100 virtual WvString getattr(WvStringParm name) const;
104 * This is a listener that doesn't work. You can use it for returning
105 * weird errors.
107 class WvNullListener : public WvListener
109 public:
110 WvNullListener() : WvListener(NULL)
112 // nothing to do
115 virtual IWvStream *accept()
116 { return NULL; }
118 virtual bool isok() const
119 { return false; }
121 virtual const WvAddr *src() const;
124 #endif // __WVLISTENER_H