blob: ec266b5d324848016d6dfd1a492da95216b9b8a2 [file] [log] [blame]
Andrew de los Reyesd57d1472010-10-21 13:34:08 -07001// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_DBUS_INTERFACE_H__
6#define CHROMEOS_PLATFORM_UPDATE_ENGINE_DBUS_INTERFACE_H__
7
8// This class interfaces with DBus. The interface allows it to be mocked.
9
Andrew de los Reyes9cd120d2010-11-18 17:50:03 -080010#include <base/logging.h>
Andrew de los Reyesd57d1472010-10-21 13:34:08 -070011#include <dbus/dbus-glib.h>
Andrew de los Reyes000d8952011-03-02 15:21:14 -080012#include <dbus/dbus-glib-lowlevel.h>
Andrew de los Reyesd57d1472010-10-21 13:34:08 -070013
14namespace chromeos_update_engine {
15
16class DbusGlibInterface {
17 public:
18 // wraps dbus_g_proxy_new_for_name_owner
19 virtual DBusGProxy* ProxyNewForNameOwner(DBusGConnection* connection,
20 const char* name,
21 const char* path,
22 const char* interface,
23 GError** error) = 0;
24
25 // wraps g_object_unref
26 virtual void ProxyUnref(DBusGProxy* proxy) = 0;
27
28 // wraps dbus_g_bus_get
Andrew de los Reyes000d8952011-03-02 15:21:14 -080029 virtual DBusGConnection* BusGet(DBusBusType type, GError** error) = 0;
Andrew de los Reyes9cd120d2010-11-18 17:50:03 -080030
Andrew de los Reyesd57d1472010-10-21 13:34:08 -070031 // wraps dbus_g_proxy_call
32 virtual gboolean ProxyCall(DBusGProxy* proxy,
33 const char* method,
34 GError** error,
35 GType first_arg_type,
36 GType var_arg1,
37 GHashTable** var_arg2,
38 GType var_arg3) = 0;
Andrew de los Reyes9cd120d2010-11-18 17:50:03 -080039
40 virtual gboolean ProxyCall(DBusGProxy* proxy,
41 const char* method,
42 GError** error,
43 GType var_arg1, const char* var_arg2,
44 GType var_arg3,
45 GType var_arg4, gchar** var_arg5,
46 GType var_arg6, GArray** var_arg7,
47 GType var_arg8) = 0;
Andrew de los Reyes000d8952011-03-02 15:21:14 -080048
49 virtual gboolean ProxyCall(DBusGProxy* proxy,
50 const char* method,
51 GError** error,
52 GType var_arg1, const char* var_arg2,
53 GType var_arg3, const char* var_arg4,
54 GType var_arg5, const char* var_arg6,
55 GType var_arg7, GType var_arg8) = 0;
56
57 virtual DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) = 0;
58
59 virtual void DbusBusAddMatch(DBusConnection* connection,
60 const char* rule,
61 DBusError* error) = 0;
62
63 virtual dbus_bool_t DbusConnectionAddFilter(
64 DBusConnection* connection,
65 DBusHandleMessageFunction function,
66 void* user_data,
67 DBusFreeFunction free_data_function) = 0;
68 virtual void DbusConnectionRemoveFilter(DBusConnection* connection,
69 DBusHandleMessageFunction function,
70 void* user_data) = 0;
71 virtual dbus_bool_t DbusMessageIsSignal(DBusMessage* message,
72 const char* interface,
73 const char* signal_name) = 0;
74 virtual dbus_bool_t DbusMessageGetArgs(DBusMessage* message,
75 DBusError* error,
76 GType var_arg1, char** var_arg2,
77 GType var_arg3, char** var_arg4,
78 GType var_arg5, char** var_arg6,
79 GType var_arg7) = 0;
Andrew de los Reyesd57d1472010-10-21 13:34:08 -070080};
81
82class ConcreteDbusGlib : public DbusGlibInterface {
83 virtual DBusGProxy* ProxyNewForNameOwner(DBusGConnection* connection,
84 const char* name,
85 const char* path,
86 const char* interface,
87 GError** error) {
88 return dbus_g_proxy_new_for_name_owner(connection,
89 name,
90 path,
91 interface,
92 error);
93 }
94
95 virtual void ProxyUnref(DBusGProxy* proxy) {
96 g_object_unref(proxy);
97 }
98
Andrew de los Reyes000d8952011-03-02 15:21:14 -080099 virtual DBusGConnection* BusGet(DBusBusType type, GError** error) {
Andrew de los Reyesd57d1472010-10-21 13:34:08 -0700100 return dbus_g_bus_get(type, error);
101 }
102
103 virtual gboolean ProxyCall(DBusGProxy* proxy,
104 const char* method,
105 GError** error,
106 GType first_arg_type,
107 GType var_arg1,
108 GHashTable** var_arg2,
109 GType var_arg3) {
110 return dbus_g_proxy_call(
111 proxy, method, error, first_arg_type, var_arg1, var_arg2, var_arg3);
112 }
Andrew de los Reyes9cd120d2010-11-18 17:50:03 -0800113
114 virtual gboolean ProxyCall(DBusGProxy* proxy,
115 const char* method,
116 GError** error,
117 GType var_arg1, const char* var_arg2,
118 GType var_arg3,
119 GType var_arg4, gchar** var_arg5,
120 GType var_arg6, GArray** var_arg7,
121 GType var_arg8) {
122 return dbus_g_proxy_call(
123 proxy, method, error, var_arg1, var_arg2, var_arg3,
124 var_arg4, var_arg5, var_arg6, var_arg7, var_arg8);
125 }
Andrew de los Reyes000d8952011-03-02 15:21:14 -0800126
127 virtual gboolean ProxyCall(DBusGProxy* proxy,
128 const char* method,
129 GError** error,
130 GType var_arg1, const char* var_arg2,
131 GType var_arg3, const char* var_arg4,
132 GType var_arg5, const char* var_arg6,
133 GType var_arg7, GType var_arg8) {
134 return dbus_g_proxy_call(
135 proxy, method, error, var_arg1, var_arg2, var_arg3,
136 var_arg4, var_arg5, var_arg6, var_arg7, var_arg8);
137 }
138
139
140 virtual DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) {
141 return dbus_g_connection_get_connection(gbus);
142 }
143
144 virtual void DbusBusAddMatch(DBusConnection* connection,
145 const char* rule,
146 DBusError* error) {
147 dbus_bus_add_match(connection, rule, error);
148 }
149
150 virtual dbus_bool_t DbusConnectionAddFilter(
151 DBusConnection* connection,
152 DBusHandleMessageFunction function,
153 void* user_data,
154 DBusFreeFunction free_data_function) {
155 return dbus_connection_add_filter(connection,
156 function,
157 user_data,
158 free_data_function);
159 }
160 virtual void DbusConnectionRemoveFilter(DBusConnection* connection,
161 DBusHandleMessageFunction function,
162 void* user_data) {
163 dbus_connection_remove_filter(connection, function, user_data);
164 }
165 dbus_bool_t DbusMessageIsSignal(DBusMessage* message,
166 const char* interface,
167 const char* signal_name) {
168 return dbus_message_is_signal(message, interface, signal_name);
169 }
170 virtual dbus_bool_t DbusMessageGetArgs(DBusMessage* message,
171 DBusError* error,
172 GType var_arg1, char** var_arg2,
173 GType var_arg3, char** var_arg4,
174 GType var_arg5, char** var_arg6,
175 GType var_arg7) {
176 return dbus_message_get_args(message, error,
177 var_arg1, var_arg2,
178 var_arg3, var_arg4,
179 var_arg5, var_arg6,
180 var_arg7);
181 }
Andrew de los Reyesd57d1472010-10-21 13:34:08 -0700182};
183
184} // namespace chromeos_update_engine
185
186#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_DBUS_INTERFACE_H__