13 m_message = dbus_message_ref(message);
18 m_message = dbus_message_ref(other.m_message);
19 m_serial = other.m_serial;
24 m_message = dbus_message_ref(message);
30 dbus_message_unref(m_message);
35 std::swap(m_serial, other.m_serial);
36 m_message = dbus_message_ref(other.m_message);
42 return dbus_message_get_type(m_message) == DBUS_MESSAGE_TYPE_METHOD_CALL;
47 return !dbus_message_get_no_reply(m_message);
52 const char* sender = dbus_message_get_sender(m_message);
53 return sender ? std::string(sender) : std::string();
58 return dbus_message_get_serial(m_message);
63 return dbus_message_get_interface(m_message);
68 return dbus_message_get_path(m_message);
73 return dbus_message_get_member(m_message);
78 dbus_message_iter_init_append(m_message, &m_messageIterator);
83 dbus_bool_t
boolean = value ? 1 : 0;
84 dbus_message_iter_append_basic(&m_messageIterator, DBUS_TYPE_BOOLEAN, &
boolean);
89 dbus_message_iter_append_basic(&m_messageIterator, DBUS_TYPE_STRING, &value);
94 const char* ptr = value.c_str();
95 dbus_message_iter_append_basic(&m_messageIterator, DBUS_TYPE_STRING, &ptr);
100 dbus_int32_t
i = value;
101 dbus_message_iter_append_basic(&m_messageIterator, DBUS_TYPE_INT32, &
i);
106 dbus_message_iter_append_basic(&m_messageIterator, DBUS_TYPE_DOUBLE, &value);
111 DBusMessageIter arrayIterator;
112 dbus_message_iter_open_container(&m_messageIterator, DBUS_TYPE_ARRAY, DBUS_TYPE_DOUBLE_AS_STRING, &arrayIterator);
113 const double* ptr = array.data();
114 dbus_message_iter_append_fixed_array(&arrayIterator, DBUS_TYPE_DOUBLE, &ptr,
static_cast<int>(array.size()));
115 dbus_message_iter_close_container(&m_messageIterator, &arrayIterator);
120 DBusMessageIter arrayIterator;
121 dbus_message_iter_open_container(&m_messageIterator, DBUS_TYPE_ARRAY, DBUS_TYPE_STRING_AS_STRING, &arrayIterator);
122 for (
const auto&
i : array) {
123 const char* ptr =
i.c_str();
124 dbus_message_iter_append_basic(&arrayIterator, DBUS_TYPE_STRING, &ptr);
126 dbus_message_iter_close_container(&m_messageIterator, &arrayIterator);
131 dbus_message_iter_init(m_message, &m_messageIterator);
136 if (dbus_message_iter_get_arg_type(&m_messageIterator) != DBUS_TYPE_INT32) {
return; }
138 dbus_message_iter_get_basic(&m_messageIterator, &
i);
140 dbus_message_iter_next(&m_messageIterator);
145 if (dbus_message_iter_get_arg_type(&m_messageIterator) != DBUS_TYPE_BOOLEAN) {
return; }
147 dbus_message_iter_get_basic(&m_messageIterator, &v);
153 dbus_message_iter_next(&m_messageIterator);
158 if (dbus_message_iter_get_arg_type(&m_messageIterator) != DBUS_TYPE_DOUBLE) {
return; }
159 dbus_message_iter_get_basic(&m_messageIterator, &value);
160 dbus_message_iter_next(&m_messageIterator);
165 const char* str =
nullptr;
166 if (dbus_message_iter_get_arg_type(&m_messageIterator) != DBUS_TYPE_STRING) {
return; }
167 dbus_message_iter_get_basic(&m_messageIterator, &str);
168 dbus_message_iter_next(&m_messageIterator);
169 value = std::string(str);
174 DBusMessageIter arrayIterator;
175 dbus_message_iter_recurse(&m_messageIterator, &arrayIterator);
177 if (dbus_message_iter_get_arg_type(&arrayIterator) != DBUS_TYPE_INT32) {
return; }
179 dbus_message_iter_get_basic(&arrayIterator, &
i);
181 }
while (dbus_message_iter_next(&arrayIterator));
182 dbus_message_iter_next(&m_messageIterator);
187 if (dbus_message_iter_get_arg_type(&m_messageIterator) != DBUS_TYPE_ARRAY) {
return; }
188 DBusMessageIter arrayIterator;
189 dbus_message_iter_recurse(&m_messageIterator, &arrayIterator);
191 if (dbus_message_iter_get_arg_type(&arrayIterator) != DBUS_TYPE_BOOLEAN) {
return; }
193 dbus_message_iter_get_basic(&arrayIterator, &b);
195 value.push_back(
true);
197 value.push_back(
false);
199 }
while (dbus_message_iter_next(&arrayIterator));
200 dbus_message_iter_next(&m_messageIterator);
205 DBusMessageIter arrayIterator;
206 dbus_message_iter_recurse(&m_messageIterator, &arrayIterator);
208 if (dbus_message_iter_get_arg_type(&arrayIterator) != DBUS_TYPE_DOUBLE) {
return; }
210 dbus_message_iter_get_basic(&arrayIterator, &d);
212 }
while (dbus_message_iter_next(&arrayIterator));
213 dbus_message_iter_next(&m_messageIterator);
218 DBusMessageIter arrayIterator;
219 dbus_message_iter_recurse(&m_messageIterator, &arrayIterator);
221 if (dbus_message_iter_get_arg_type(&arrayIterator) != DBUS_TYPE_STRING) {
return; }
222 const char* str =
nullptr;
223 dbus_message_iter_get_basic(&arrayIterator, &str);
224 value.push_back(std::string(str));
225 }
while (dbus_message_iter_next(&arrayIterator));
226 dbus_message_iter_next(&m_messageIterator);
231 DBusMessage* signal = dbus_message_new_signal(path.c_str(), interfaceName.c_str(), signalName.c_str());
237 DBusMessage* reply = dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
238 dbus_message_set_no_reply(reply, TRUE);
239 if (!destination.empty()) { dbus_message_set_destination(reply, destination.c_str()); }
240 dbus_message_set_reply_serial(reply, serial);
242 dbus_message_unref(reply);
static CDBusMessage createSignal(const std::string &path, const std::string &interfaceName, const std::string &signalName)
Creates a DBus message containing a DBus signal.
void appendArgument(bool value)
Append argument.
bool isMethodCall() const
Is this message a method call?
static CDBusMessage createReply(const std::string &destination, dbus_uint32_t serial)
Creates a DBus message containing a DBus reply.
std::string getSender() const
Get the message sender.
std::string getObjectPath() const
Get the called object path.
dbus_uint32_t getSerial() const
Get the message serial. This is usally required for reply message.
~CDBusMessage()
Destructor.
std::string getMethodName() const
Get the called method name.
std::string getInterfaceName() const
Get the called interface name.
CDBusMessage(DBusMessage *message)
Constructor.
bool wantsReply() const
Does this message want a reply?
void getArgument(int &value)
Read single argument.
void beginArgumentRead()
Begin reading arguments.
void beginArgumentWrite()
Begin writing argument.
CDBusMessage & operator=(CDBusMessage other)
Assignment operator.