blob: 0c6847bb47b47bc6bf6a1b0a23ae1462638c61a5 [file] [log] [blame]
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -08001// 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
Gilad Arnoldcf175a02014-07-10 16:48:47 -07005#ifndef UPDATE_ENGINE_REAL_DBUS_WRAPPER_H_
6#define UPDATE_ENGINE_REAL_DBUS_WRAPPER_H_
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -08007
8// A mockable interface for DBus.
9
Daniel Erat65f1da02014-06-27 22:05:38 -070010#include <base/macros.h>
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080011#include <dbus/dbus-glib.h>
Alex Vakulenko44cab302014-07-23 13:12:15 -070012#include <dbus/dbus-glib-lowlevel.h>
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080013
14#include "update_engine/dbus_wrapper_interface.h"
15
16namespace chromeos_update_engine {
17
18class RealDBusWrapper : public DBusWrapperInterface {
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070019 DBusGProxy* ProxyNewForName(DBusGConnection* connection,
20 const char* name,
21 const char* path,
22 const char* interface) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080023 return dbus_g_proxy_new_for_name(connection,
24 name,
25 path,
26 interface);
27 }
28
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070029 void ProxyUnref(DBusGProxy* proxy) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080030 g_object_unref(proxy);
31 }
32
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070033 DBusGConnection* BusGet(DBusBusType type, GError** error) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080034 return dbus_g_bus_get(type, error);
35 }
36
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070037 gboolean ProxyCall_0_1(DBusGProxy* proxy,
38 const char* method,
39 GError** error,
40 GHashTable** out1) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080041 return dbus_g_proxy_call(proxy, method, error, G_TYPE_INVALID,
42 dbus_g_type_get_map("GHashTable",
43 G_TYPE_STRING,
44 G_TYPE_VALUE),
45 out1, G_TYPE_INVALID);
46 }
47
David Pursell02c18642014-11-06 11:26:11 -080048 gboolean ProxyCall_0_1(DBusGProxy* proxy,
49 const char* method,
50 GError** error,
51 gint* out1) override {
52 return dbus_g_proxy_call(proxy, method, error, G_TYPE_INVALID,
53 G_TYPE_INT, out1, G_TYPE_INVALID);
54 }
55
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070056 gboolean ProxyCall_1_0(DBusGProxy* proxy,
57 const char* method,
58 GError** error,
59 gint in1) override {
Daniel Erat65f1da02014-06-27 22:05:38 -070060 return dbus_g_proxy_call(proxy, method, error,
61 G_TYPE_INT, in1,
62 G_TYPE_INVALID, G_TYPE_INVALID);
63 }
64
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070065 gboolean ProxyCall_3_0(DBusGProxy* proxy,
66 const char* method,
67 GError** error,
68 const char* in1,
69 const char* in2,
70 const char* in3) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -080071 return dbus_g_proxy_call(
72 proxy, method, error,
73 G_TYPE_STRING, in1, G_TYPE_STRING, in2, G_TYPE_STRING, in3,
74 G_TYPE_INVALID, G_TYPE_INVALID);
75 }
76
Alex Deymo9b7ae1a2014-12-15 10:35:56 -080077 void ProxyAddSignal_1(DBusGProxy* proxy,
78 const char* signal_name,
79 GType type1) override {
80 dbus_g_object_register_marshaller(
81 g_cclosure_marshal_generic, G_TYPE_NONE, type1, G_TYPE_INVALID);
82 dbus_g_proxy_add_signal(proxy, signal_name, type1, G_TYPE_INVALID);
83 }
84
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070085 void ProxyAddSignal_2(DBusGProxy* proxy,
86 const char* signal_name,
87 GType type1,
88 GType type2) override {
Alex Deymo66574982014-11-13 16:24:05 -080089 dbus_g_object_register_marshaller(
90 g_cclosure_marshal_generic, G_TYPE_NONE, type1, type2, G_TYPE_INVALID);
Gilad Arnoldbeb39e92014-03-11 11:34:50 -070091 dbus_g_proxy_add_signal(proxy, signal_name, type1, type2, G_TYPE_INVALID);
92 }
93
Alex Vakulenkoa839bc32014-08-14 12:55:41 -070094 void ProxyConnectSignal(DBusGProxy* proxy,
95 const char* signal_name,
96 GCallback handler,
97 void* data,
98 GClosureNotify free_data_func) override {
Gilad Arnoldbeb39e92014-03-11 11:34:50 -070099 dbus_g_proxy_connect_signal(proxy, signal_name, handler, data,
100 free_data_func);
101 }
102
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700103 void ProxyDisconnectSignal(DBusGProxy* proxy,
104 const char* signal_name,
105 GCallback handler,
106 void* data) override {
Gilad Arnoldbeb39e92014-03-11 11:34:50 -0700107 dbus_g_proxy_disconnect_signal(proxy, signal_name, handler, data);
108 }
109
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700110 DBusConnection* ConnectionGetConnection(DBusGConnection* gbus) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800111 return dbus_g_connection_get_connection(gbus);
112 }
113
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700114 void DBusBusAddMatch(DBusConnection* connection,
115 const char* rule,
116 DBusError* error) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800117 dbus_bus_add_match(connection, rule, error);
118 }
119
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700120 dbus_bool_t DBusConnectionAddFilter(
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800121 DBusConnection* connection,
122 DBusHandleMessageFunction function,
123 void* user_data,
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700124 DBusFreeFunction free_data_function) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800125 return dbus_connection_add_filter(connection,
126 function,
127 user_data,
128 free_data_function);
129 }
130
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700131 void DBusConnectionRemoveFilter(DBusConnection* connection,
132 DBusHandleMessageFunction function,
133 void* user_data) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800134 dbus_connection_remove_filter(connection, function, user_data);
135 }
136
137 dbus_bool_t DBusMessageIsSignal(DBusMessage* message,
138 const char* interface,
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700139 const char* signal_name) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800140 return dbus_message_is_signal(message, interface, signal_name);
141 }
142
Alex Vakulenkoa839bc32014-08-14 12:55:41 -0700143 dbus_bool_t DBusMessageGetArgs_3(DBusMessage* message,
144 DBusError* error,
145 char** out1,
146 char** out2,
147 char** out3) override {
Gilad Arnold1b9d6ae2014-03-03 13:46:07 -0800148 return dbus_message_get_args(message, error,
149 DBUS_TYPE_STRING, out1,
150 DBUS_TYPE_STRING, out2,
151 DBUS_TYPE_STRING, out3,
152 G_TYPE_INVALID);
153 }
154};
155
156} // namespace chromeos_update_engine
157
Gilad Arnoldcf175a02014-07-10 16:48:47 -0700158#endif // UPDATE_ENGINE_REAL_DBUS_WRAPPER_H_