WvStreams
wvdbusserver.h
1 /* -*- Mode: C++ -*-
2  * Worldvisions Weaver Software:
3  * Copyright (C) 2004-2006 Net Integration Technologies, Inc.
4  *
5  * Pathfinder Software:
6  * Copyright (C) 2007, Carillon Information Security Inc.
7  *
8  * This library is licensed under the LGPL, please read LICENSE for details.
9  *
10  * This class represents a dbus server, which may have multiple connections
11  * at the same time. It is intended purely for unit testing and debugging
12  * purposes and by no means should be used in production code (use the
13  * dbus daemon for that).
14  *
15  */
16 #ifndef __WVDBUSSERVER_H
17 #define __WVDBUSSERVER_H
18 
19 #include "wvlistener.h"
20 #include "wvhashtable.h"
21 #include "wvlog.h"
22 #include "wvistreamlist.h"
23 #include <stdint.h>
24 
25 class WvDBusMsg;
26 class WvDBusConn;
27 DeclareWvList(WvDBusConn);
28 
29 
31 {
32  WvIStreamList listeners;
33 public:
34  /*
35  * Constructs a new DBus server. You must then call listen() to
36  * actually listen for new connections.
37  */
38  WvDBusServer();
39 
44 
48  virtual ~WvDBusServer();
49 
59  void listen(WvStringParm moniker);
60 
61  virtual bool isok() const;
62  virtual int geterr() const;
63 
68  void register_name(WvStringParm name, WvDBusConn *conn);
69 
73  void unregister_name(WvStringParm name, WvDBusConn *conn);
74 
80  void unregister_conn(WvDBusConn *conn);
81 
87 
88 private:
89  WvLog log;
90  WvDBusConnList all_conns;
91  std::map<WvString,WvDBusConn*> name_to_conn;
92 
93  void new_connection_cb(IWvStream *s);
94  void conn_closed(WvStream &s);
95 
96  bool do_server_msg(WvDBusConn &conn, WvDBusMsg &msg);
97  bool do_bridge_msg(WvDBusConn &conn, WvDBusMsg &msg);
98  bool do_broadcast_msg(WvDBusConn &conn, WvDBusMsg &msg);
99  bool do_gaveup_msg(WvDBusConn &conn, WvDBusMsg &msg);
100 };
101 
102 #endif // __WVDBUSSERVER_H