1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4 #include "DBusMessage.h"
12 DBusMessage::DBusMessage():
13 libdbusMessage_(NULL) {
16 DBusMessage::DBusMessage(::DBusMessage* libdbusMessage) {
17 libdbusMessage_ = libdbusMessage != NULL ? dbus_message_ref(libdbusMessage) : NULL;
20 DBusMessage::DBusMessage(::DBusMessage* libdbusMessage, bool increaseReferenceCount) {
21 assert(libdbusMessage);
23 libdbusMessage_ = increaseReferenceCount ? dbus_message_ref(libdbusMessage) : libdbusMessage;
26 DBusMessage::DBusMessage(const DBusMessage& src) {
27 libdbusMessage_ = src.libdbusMessage_ != NULL ? dbus_message_ref(src.libdbusMessage_) : NULL;
30 DBusMessage::DBusMessage(DBusMessage&& rsrc) {
31 libdbusMessage_ = rsrc.libdbusMessage_;
32 rsrc.libdbusMessage_ = NULL;
35 DBusMessage::~DBusMessage() {
37 dbus_message_unref(libdbusMessage_);
40 DBusMessage& DBusMessage::operator=(const DBusMessage& src) {
43 dbus_message_unref(libdbusMessage_);
45 libdbusMessage_ = src.libdbusMessage_ != NULL ? dbus_message_ref(src.libdbusMessage_) : NULL;
51 DBusMessage& DBusMessage::operator=(DBusMessage&& rsrc) {
54 dbus_message_unref(libdbusMessage_);
56 libdbusMessage_ = rsrc.libdbusMessage_;
57 rsrc.libdbusMessage_ = NULL;
63 DBusMessage::operator bool() const {
64 const bool isNotNullDBusMessage = (libdbusMessage_ != NULL);
65 return isNotNullDBusMessage;
68 DBusMessage DBusMessage::createOrgFreedesktopOrgMethodCall(const char* methodName, const char* signature) {
69 return DBusMessage::createMethodCall("org.freedesktop.DBus",
71 "org.freedesktop.DBus",
76 DBusMessage DBusMessage::createOrgFreedesktopOrgMethodCall(const std::string& methodName,
77 const std::string& signature) {
78 assert(!methodName.empty());
80 return createOrgFreedesktopOrgMethodCall(methodName.c_str(),
81 signature.empty() ? NULL : signature.c_str());
84 DBusMessage DBusMessage::createMethodCall(const char* busName,
85 const char* objectPath,
86 const char* interfaceName,
87 const char* methodName,
88 const char* signature) {
91 assert(interfaceName);
94 ::DBusMessage* libdbusMessageCall = dbus_message_new_method_call(busName,
98 assert(libdbusMessageCall);
101 dbus_message_set_signature(libdbusMessageCall, signature);
103 const bool increaseLibdbusMessageReferenceCount = false;
104 return DBusMessage(libdbusMessageCall, increaseLibdbusMessageReferenceCount);
107 DBusMessage DBusMessage::createMethodCall(const std::string& busName,
108 const std::string& objectPath,
109 const std::string& interfaceName,
110 const std::string& methodName,
111 const std::string& signature) {
112 assert(!busName.empty());
113 assert(!objectPath.empty());
114 assert(!interfaceName.empty());
115 assert(!methodName.empty());
117 return createMethodCall(busName.c_str(),
119 interfaceName.c_str(),
121 signature.empty() ? NULL : signature.c_str());
124 DBusMessage DBusMessage::createMethodReturn(const char* signature) const {
125 ::DBusMessage* libdbusMessageReturn = dbus_message_new_method_return(libdbusMessage_);
126 assert(libdbusMessageReturn);
129 dbus_message_set_signature(libdbusMessageReturn, signature);
131 const bool increaseLibdbusMessageReferenceCount = false;
132 return DBusMessage(libdbusMessageReturn, increaseLibdbusMessageReferenceCount);
135 DBusMessage DBusMessage::createMethodReturn(const std::string& signature) const {
136 return createMethodReturn(signature.empty() ? NULL : signature.c_str());
139 DBusMessage DBusMessage::createSignal(const char* objectPath,
140 const char* interfaceName,
141 const char* signalName,
142 const char* signature) {
144 assert(interfaceName);
147 ::DBusMessage* libdbusMessageSignal = dbus_message_new_signal(objectPath,
150 assert(libdbusMessageSignal);
153 dbus_message_set_signature(libdbusMessageSignal, signature);
155 const bool increaseLibdbusMessageReferenceCount = false;
156 return DBusMessage(libdbusMessageSignal, increaseLibdbusMessageReferenceCount);
159 DBusMessage DBusMessage::createSignal(const std::string& objectPath,
160 const std::string& interfaceName,
161 const std::string& signalName,
162 const std::string& signature) {
163 assert(!objectPath.empty());
164 assert(!interfaceName.empty());
165 assert(!signalName.empty());
167 return createSignal(objectPath.c_str(),
168 interfaceName.c_str(),
170 signature.empty() ? NULL : signature.c_str());
173 const char* DBusMessage::getObjectPath() const {
174 return dbus_message_get_path(libdbusMessage_);
177 const char* DBusMessage::getSenderName() const {
178 return dbus_message_get_sender(libdbusMessage_);
181 const char* DBusMessage::getInterfaceName() const {
182 return dbus_message_get_interface(libdbusMessage_);
185 const char* DBusMessage::getMemberName() const {
186 return dbus_message_get_member(libdbusMessage_);
189 const char* DBusMessage::getSignatureString() const {
190 return dbus_message_get_signature(libdbusMessage_);
193 const char* DBusMessage::getErrorName() const {
194 assert(isErrorType());
196 return dbus_message_get_error_name(libdbusMessage_);
199 bool DBusMessage::hasMemberName(const char* memberName) const {
200 const char* dbusMessageMemberName = getMemberName();
203 assert(dbusMessageMemberName);
205 return !strcmp(dbusMessageMemberName, memberName);
208 bool DBusMessage::hasSignature(const char* signature) const {
209 const char* dbusMessageSignature = getSignatureString();
212 assert(dbusMessageSignature);
214 return !strcmp(dbusMessageSignature, signature);
217 const DBusMessage::Type DBusMessage::getType() const {
218 const int libdbusType = dbus_message_get_type(libdbusMessage_);
219 return static_cast<Type>(libdbusType);
222 char* DBusMessage::getBodyData() const {
223 return dbus_message_get_body(libdbusMessage_);
226 int DBusMessage::getBodyLength() const {
227 return dbus_message_get_body_length(libdbusMessage_);
230 int DBusMessage::getBodySize() const {
231 return dbus_message_get_body_allocated(libdbusMessage_);
234 bool DBusMessage::setBodyLength(const int bodyLength) {
235 return dbus_message_set_body_length(libdbusMessage_, bodyLength);
239 } // namespace CommonAPI