a0619cee7a9005c07e76ea06a891406487bd1189
[browser-dbus-bridge.git] / xpcom-dbusservice / DBusService.h
1 /**
2  * Browser D-Bus Bridge, XPCOM version
3  *
4  * Copyright © 2008 Movial Creative Technologies Inc
5  *  Contact: Movial Creative Technologies Inc, <info@movial.com>
6  *  Authors: Lauri Mylläri, <lauri.myllari@movial.fi>
7  *           Kalle Vahlman, <kalle.vahlman@movial.com>
8  *
9  * The contents of this file are subject to the Mozilla Public License
10  * Version 1.1 (the "License"); you may not use this file except in
11  * compliance with the License. You may obtain a copy of the License at
12  * http://www.mozilla.org/MPL/
13  *
14  * Software distributed under the License is distributed on an "AS IS"
15  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
16  * License for the specific language governing rights and limitations
17  * under the License.
18  *
19  * The Original Code is the Browser D-Bus Bridge, XPCOM version.
20  *
21  * The Initial Developer of the Original Code is Movial Creative Technologies
22  * Inc. Portions created by Initial Developer are Copyright (C) 2008
23  * Movial Creative Technologies Inc. All Rights Reserved.
24  *
25  */
26
27 #ifndef __DBUSSERVICE_H__
28 #define __DBUSSERVICE_H__
29
30 #include <dbus/dbus-glib-lowlevel.h>
31
32 #include "nsTArray.h"
33 #include "nsCOMArray.h"
34 #include "nsIWeakReference.h"
35 #include "nsIWeakReferenceUtils.h"
36
37 typedef PRUint8 uint8; /* otherwise pldhash.h:199 is sad */
38 #include "nsClassHashtable.h"
39
40 //
41 // DBusService declarations
42 //
43
44 #define DBUSSERVICE_CID \
45 { \
46     0xe3b49db1, \
47     0x5754, \
48     0x4330, \
49     0x92, 0xcd, 0xab, 0xe8, 0xf7, 0xea, 0x54, 0x3d \
50 }
51
52 class DBusService : public IDBusService
53 {
54 public:
55     NS_DECL_ISUPPORTS
56     NS_DECL_IDBUSSERVICE
57
58     static DBusService *GetSingleton();
59
60     DBusService();
61
62     DBusMessage *SendWithReplyAndBlock(PRUint32 aConnType,
63                                        DBusMessage *aMessage,
64                                        PRUint32 aTimeout,
65                                        DBusError *aError);
66     DBusPendingCall *SendWithReply(PRUint32 aConnType,
67                                    DBusMessage *aMessage,
68                                    PRUint32 aTimeout);
69     void AddSignalObserver(IDBusSignal *aSignal);
70     void RemoveSignalObserver(IDBusSignal *aSignal);
71     
72     void SetInsideEmit(PRBool inside) { mInsideEmit = inside; };
73     void CheckSignalObserverQueue();
74     
75 private:
76     ~DBusService();
77
78     DBusConnection *GetConnection(PRUint32 aConnType);
79
80     DBusConnection *mSystemBus;
81     DBusConnection *mSessionBus;
82
83     nsClassHashtable<nsCStringHashKey, nsTArray<nsWeakPtr> > mSystemBusSignalObservers;
84     nsClassHashtable<nsCStringHashKey, nsTArray<nsWeakPtr> > mSessionBusSignalObservers;
85     PRBool mSystemBusHasFilter;
86     PRBool mSessionBusHasFilter;
87     
88     /* We need to queue changes to signal observers within onemit callbacks
89      * so that we don't alter the list while iterating over it...
90      */
91     PRBool mInsideEmit;
92     nsTArray<IDBusSignal*> mRemovedSignals;
93     nsTArray<IDBusSignal*> mAddedSignals;
94 };
95
96 #endif /* __DBUSSERVICE_H__ */
97
98 /* vim: set cindent ts=4 et sw=4: */