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
9 namespace CommonAPI {
\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
17 const char* DBusDaemonProxy::getInterfaceName() const {
\r
18 return "org.freedesktop.DBus";
\r
21 DBusDaemonProxy::NameOwnerChangedEvent& DBusDaemonProxy::getNameOwnerChangedEvent() {
\r
22 return nameOwnerChangedEvent_;
\r
25 void DBusDaemonProxy::listNames(CommonAPI::CallStatus& callStatus, std::vector<std::string>& busNames) const {
\r
26 DBusMessage dbusMethodCall = createMethodCall("ListNames", "");
\r
28 DBusError dbusError;
\r
29 DBusMessage dbusMessageReply = getDBusConnection()->sendDBusMessageWithReplyAndBlock(
\r
33 if (dbusError || !dbusMessageReply.isMethodReturnType()) {
\r
34 callStatus = CallStatus::REMOTE_ERROR;
\r
38 DBusInputStream inputStream(dbusMessageReply);
\r
39 const bool success = DBusSerializableArguments<std::vector<std::string>>::deserialize(inputStream, busNames);
\r
41 callStatus = CallStatus::REMOTE_ERROR;
\r
44 callStatus = CallStatus::SUCCESS;
\r
48 std::future<CallStatus> DBusDaemonProxy::listNamesAsync(ListNamesAsyncCallback listNamesAsyncCallback) const {
\r
49 DBusMessage dbusMessage = createMethodCall("ListNames", "");
\r
51 return getDBusConnection()->sendDBusMessageWithReplyAsync(
\r
53 DBusProxyAsyncCallbackHandler<std::vector<std::string>>::create(listNamesAsyncCallback));
\r
56 void DBusDaemonProxy::nameHasOwner(const std::string& busName, CommonAPI::CallStatus& callStatus, bool& hasOwner) const {
\r
58 DBusMessage dbusMethodCall = createMethodCall("NameHasOwner", "s");
\r
60 DBusOutputStream outputStream(dbusMethodCall);
\r
61 bool success = DBusSerializableArguments<std::string>::serialize(outputStream, busName);
\r
63 callStatus = CallStatus::OUT_OF_MEMORY;
\r
66 outputStream.flush();
\r
68 DBusError dbusError;
\r
69 DBusMessage dbusMessageReply = getDBusConnection()->sendDBusMessageWithReplyAndBlock(
\r
72 if (dbusError || !dbusMessageReply.isMethodReturnType()) {
\r
73 callStatus = CallStatus::REMOTE_ERROR;
\r
77 DBusInputStream inputStream(dbusMessageReply);
\r
78 success = DBusSerializableArguments<bool>::deserialize(inputStream, hasOwner);
\r
80 callStatus = CallStatus::REMOTE_ERROR;
\r
83 callStatus = CallStatus::SUCCESS;
\r
87 std::future<CallStatus> DBusDaemonProxy::nameHasOwnerAsync(const std::string& busName, NameHasOwnerAsyncCallback nameHasOwnerAsyncCallback) const {
\r
89 DBusMessage dbusMessage = createMethodCall("NameHasOwner", "s");
\r
91 DBusOutputStream outputStream(dbusMessage);
\r
92 const bool success = DBusSerializableArguments<std::string>::serialize(outputStream, busName);
\r
94 std::promise<CallStatus> promise;
\r
95 promise.set_value(CallStatus::OUT_OF_MEMORY);
\r
96 return promise.get_future();
\r
98 outputStream.flush();
\r
100 return getDBusConnection()->sendDBusMessageWithReplyAsync(
\r
102 DBusProxyAsyncCallbackHandler<bool>::create(nameHasOwnerAsyncCallback));
\r
106 void DBusDaemonProxy::getOwnVersion(uint16_t& ownVersionMajor, uint16_t& ownVersionMinor) const {
\r
109 } // namespace DBus
\r
110 } // namespace CommonAPI
\r