summaryrefslogtreecommitdiffstats
path: root/src/dbusInterface.h
blob: f5afbd3956b270e287696150dc7f609936f57ca2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
 /**************************************************************************
 *   Copyright (C) 2006-2007 by Danny Kukawka                              *
 *                           <dkukawka@suse.de>, <danny.kukawka@web.de>    *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of version 2 of the GNU General Public License     *
 *   as published by the Free Software Foundation.                         *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.          *
 ***************************************************************************/

/*!
*  \file 	dbusInterface.h
*  \brief 	Headerfile for dbusInterface.cpp and the class \ref dbusInterface.
*/
/*!
*  \class 	dbusInterface
*  \brief 	class for connection to HAL via D-Bus
*  \author 	Danny Kukawka, <dkukawka@suse.de>, <danny.kukawka@web.de>
*  \date    	2006-2007
*/

#ifndef _DBUSHAL_H_
#define _DBUSHAL_H_

#ifndef DBUS_API_SUBJECT_TO_CHANGE
#define DBUS_API_SUBJECT_TO_CHANGE
#endif

// Global Header
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

// QT - Header
#include <tqstring.h>

// D-Bus Header
#include <dbus/dbus.h> // needed for dbus_bool_t
#include <dbus/message.h>
#include <dbus/connection.h>

// tdepowersave - Header
#include "tdepowersave_debug.h"

#define CK_SERVICE		"org.freedesktop.ConsoleKit"
#define CK_MANAGER_IFACE	"org.freedesktop.ConsoleKit.Manager"
#define CK_MANAGER_OBJECT	"/org/freedesktop/ConsoleKit/Manager"
#define CK_SESSION_IFACE	"org.freedesktop.ConsoleKit.Session"

enum msg_type {
	ACPI_EVENT,
	DBUS_EVENT,
	HAL_DEVICE,
	HAL_PROPERTY_CHANGED,
	HAL_CONDITION,
	CONSOLEKIT_SESSION_ACTIVE,
	POLICY_POWER_OWNER_CHANGED
};

class dbusInterface : public TQObject{
	Q_OBJECT
	

private:

	//! QT connection to D-Bus
	DBusQt::Connection* m_dBusQtConnection;
	//! real connection to D-Bus
	DBusConnection *dbus_connection;

	//! to store information if TDEPowersave is connected to D-Bus
	/*!
	* This boolean represent information about the state of the connection to D-Bus
	* \li true:  if connected
	* \li false: if disconnected
	*/
	bool dbus_is_connected;

	//! if we could claim the org.freedesktop.Policy.Power interface
	/*!
	* This boolean represent information if TDEPowersave could claim the 
	* org.freedesktop.Policy.Power interface from the D-Bus
	* \li true:  if acquired
	* \li false: if not
	*/
	bool acquiredPolicyPower;

	/* D-Bus helper functions */
	//! to initialise the connection to D-Bus 
	bool initDBUS();
	//! to call a methode on a dbus interface with reply
	bool dbusMethodCall( TQString interface, TQString path, TQString object, TQString method,
			     DBusBusType dbus_type, void *retvalue, int retval_type,
			     int first_arg_type, va_list var_args);

public:

	//! default constructor
	dbusInterface();
	//! default destructor
	~dbusInterface();

	//! to reconnect to D-Bus and HAL
	bool reconnect();
	//! to close the connection to D-Bus and HAL
	bool close();

	//! to acquire the org.freedesktop.Policy.Power interface
	bool acquirePolicyPowerIface();
	//! to release the org.freedesktop.Policy.Power interface
	bool releasePolicyPowerIface();
	//! to check if the org.freedesktop.Policy.Power interface has an owner
	bool isPolicyPowerIfaceOwned();

	// --- helper to get private members of the class --- //
	//! to get information if TDEPowersave is connected to D-Bus
	bool isConnectedToDBUS();
	//! to get info about claim org.freedesktop.Policy.Power interface
	bool acquiredPolicyPowerInterface();

	//! return the current DBus connection
	DBusConnection *get_DBUS_connection();

	/* D-Bus helper functions */

	/* functions to call methodes */
	//! to call a methode on a dbus system bus method without reply
	bool dbusSystemMethodCall( TQString interface, TQString path, TQString object, TQString method,
				   int first_arg_type, ... );
	//! to call a methode on a dbus system bus method with reply
	bool dbusSystemMethodCall( TQString interface, TQString path, TQString object, TQString method, 
				   void *retvalue, int retval_type, int first_arg_type, ... );

	/* PolicyKit call helper */
	//! check if the user has a requested privilege
	int isUserPrivileged( TQString privilege, TQString udi, TQString ressource = "", TQString user = TQString());

	//! wrapper to emit a signal with a event from HAL
	void emitMsgReceived( msg_type type, TQString message, TQString string );

signals:
        //! signal with message to forward from D-Bus to HAL
	void msgReceived_withStringString( msg_type, TQString, TQString );
	//! signal if we resumed!
	void backFromSuspend( int result );
};

//! filter function to filter out needed information from D-Bus messages
DBusHandlerResult filterFunction (DBusConnection *connection, DBusMessage *message, void *data);

#endif