Reorganise to remove redundant folder
[profile/ivi/common-api-dbus-runtime.git] / src / CommonAPI / DBus / DBusDaemonProxy.cpp
1 /* This Source Code Form is subject to the terms of the Mozilla Public\r
2  * License, v. 2.0. If a copy of the MPL was not distributed with this\r
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */\r
4 #include "DBusDaemonProxy.h"\r
5 #include "DBusProxyHelper.h"\r
6 #include <iostream>\r
7 \r
8 \r
9 namespace CommonAPI {\r
10 namespace DBus {\r
11 \r
12 DBusDaemonProxy::DBusDaemonProxy(const std::shared_ptr<DBusProxyConnection>& connection):\r
13                 DBusProxy("org.freedesktop.DBus", "/org/freedesktop/DBus", getInterfaceName(), connection, true),\r
14                 nameOwnerChangedEvent_(*this, "NameOwnerChanged", "sss") {\r
15 }\r
16 \r
17 const char* DBusDaemonProxy::getInterfaceName() const {\r
18         return "org.freedesktop.DBus";\r
19 }\r
20 \r
21 DBusDaemonProxy::NameOwnerChangedEvent& DBusDaemonProxy::getNameOwnerChangedEvent() {\r
22     return nameOwnerChangedEvent_;\r
23 }\r
24 \r
25 void DBusDaemonProxy::listNames(CommonAPI::CallStatus& callStatus, std::vector<std::string>& busNames) const {\r
26     DBusMessage dbusMethodCall = createMethodCall("ListNames", "");\r
27 \r
28     DBusError dbusError;\r
29     DBusMessage dbusMessageReply = getDBusConnection()->sendDBusMessageWithReplyAndBlock(\r
30                     dbusMethodCall,\r
31                     dbusError);\r
32 \r
33     if (dbusError || !dbusMessageReply.isMethodReturnType()) {\r
34         callStatus = CallStatus::REMOTE_ERROR;\r
35         return;\r
36     }\r
37 \r
38     DBusInputStream inputStream(dbusMessageReply);\r
39     const bool success = DBusSerializableArguments<std::vector<std::string>>::deserialize(inputStream, busNames);\r
40     if (!success) {\r
41         callStatus = CallStatus::REMOTE_ERROR;\r
42         return;\r
43     }\r
44     callStatus = CallStatus::SUCCESS;\r
45 \r
46 }\r
47 \r
48 std::future<CallStatus> DBusDaemonProxy::listNamesAsync(ListNamesAsyncCallback listNamesAsyncCallback) const {\r
49     DBusMessage dbusMessage = createMethodCall("ListNames", "");\r
50 \r
51     return getDBusConnection()->sendDBusMessageWithReplyAsync(\r
52                     dbusMessage,\r
53                     DBusProxyAsyncCallbackHandler<std::vector<std::string>>::create(listNamesAsyncCallback));\r
54 }\r
55 \r
56 void DBusDaemonProxy::nameHasOwner(const std::string& busName, CommonAPI::CallStatus& callStatus, bool& hasOwner) const {\r
57 \r
58     DBusMessage dbusMethodCall = createMethodCall("NameHasOwner", "s");\r
59 \r
60     DBusOutputStream outputStream(dbusMethodCall);\r
61     bool success = DBusSerializableArguments<std::string>::serialize(outputStream, busName);\r
62     if (!success) {\r
63         callStatus = CallStatus::OUT_OF_MEMORY;\r
64         return;\r
65     }\r
66     outputStream.flush();\r
67 \r
68     DBusError dbusError;\r
69     DBusMessage dbusMessageReply = getDBusConnection()->sendDBusMessageWithReplyAndBlock(\r
70                     dbusMethodCall,\r
71                     dbusError);\r
72     if (dbusError || !dbusMessageReply.isMethodReturnType()) {\r
73         callStatus = CallStatus::REMOTE_ERROR;\r
74         return;\r
75     }\r
76 \r
77     DBusInputStream inputStream(dbusMessageReply);\r
78     success = DBusSerializableArguments<bool>::deserialize(inputStream, hasOwner);\r
79     if (!success) {\r
80         callStatus = CallStatus::REMOTE_ERROR;\r
81         return;\r
82     }\r
83     callStatus = CallStatus::SUCCESS;\r
84 \r
85 }\r
86 \r
87 std::future<CallStatus> DBusDaemonProxy::nameHasOwnerAsync(const std::string& busName, NameHasOwnerAsyncCallback nameHasOwnerAsyncCallback) const {\r
88 \r
89     DBusMessage dbusMessage = createMethodCall("NameHasOwner", "s");\r
90 \r
91     DBusOutputStream outputStream(dbusMessage);\r
92     const bool success = DBusSerializableArguments<std::string>::serialize(outputStream, busName);\r
93     if (!success) {\r
94         std::promise<CallStatus> promise;\r
95         promise.set_value(CallStatus::OUT_OF_MEMORY);\r
96         return promise.get_future();\r
97     }\r
98     outputStream.flush();\r
99 \r
100     return getDBusConnection()->sendDBusMessageWithReplyAsync(\r
101                     dbusMessage,\r
102                     DBusProxyAsyncCallbackHandler<bool>::create(nameHasOwnerAsyncCallback));\r
103 \r
104 }\r
105 \r
106 void DBusDaemonProxy::getOwnVersion(uint16_t& ownVersionMajor, uint16_t& ownVersionMinor) const {\r
107 }\r
108 \r
109 } // namespace DBus\r
110 } // namespace CommonAPI\r