2 * Copyright (c) 2012 BMW
4 * \author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012
7 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction,
8 * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
9 * subject to the following conditions:
10 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
12 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
13 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15 * For further information see http://www.genivi.org/.
18 #include "CAmDbusMessageHandler.h"
23 #include "CAmCommandSenderDbus.h"
24 #include "shared/CAmDltWrapper.h"
26 DLT_IMPORT_CONTEXT(commandDbus)
31 CAmDbusMessageHandler::CAmDbusMessageHandler() :
32 mDBusMessageIter(), //
37 mpDBusMessage(NULL), //
38 mpReveiveMessage(NULL), //
39 mpDBusConnection(NULL)
41 log(&commandDbus, DLT_LOG_INFO, "DBusMessageHandler constructed");
44 CAmDbusMessageHandler::~CAmDbusMessageHandler()
46 log(&commandDbus, DLT_LOG_INFO, "DBUSMessageHandler destructed");
49 void CAmDbusMessageHandler::initReceive(DBusMessage* msg)
52 mpReveiveMessage = msg;
53 if (!dbus_message_iter_init(msg, &mDBusMessageIter))
55 log(&commandDbus, DLT_LOG_INFO, "DBusMessageHandler::initReceive DBus Message has no arguments!");
56 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
57 mErrorMsg = "DBUS Message has no arguments!";
61 void CAmDbusMessageHandler::initReply(DBusMessage* msg)
64 mpDBusMessage = dbus_message_new_method_return(msg);
65 if (mpDBusMessage == NULL)
67 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::initReply Cannot allocate DBus message!");
68 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
69 mErrorMsg = "Cannot create reply!";
71 dbus_message_iter_init_append(mpDBusMessage, &mDBusMessageIter);
74 void CAmDbusMessageHandler::initSignal(std::string path, std::string signalName)
76 assert(!path.empty());
77 assert(!signalName.empty());
78 std::string completePath = std::string(DBUS_SERVICE_OBJECT_PATH) + "/" + path;
79 mpDBusMessage = dbus_message_new_signal(completePath.c_str(), DBUS_SERVICE_PREFIX, signalName.c_str());
81 if (mpDBusMessage == NULL)
83 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::initSignal Cannot allocate DBus message!");
85 dbus_message_iter_init_append(mpDBusMessage, &mDBusMessageIter);
88 void CAmDbusMessageHandler::sendMessage()
90 assert(mpDBusConnection!=NULL);
91 if (mpReveiveMessage != 0)
93 mSerial = dbus_message_get_serial(mpReveiveMessage);
99 if (!mErrorName.empty())
101 mpDBusMessage = dbus_message_new_error(mpReveiveMessage, mErrorName.c_str(), mErrorMsg.c_str());
103 if (!dbus_connection_send(mpDBusConnection, mpDBusMessage, &mSerial))
105 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::sendMessage cannot send message!");
107 dbus_connection_flush(mpDBusConnection);
108 dbus_message_unref(mpDBusMessage);
109 mpDBusMessage = NULL;
112 char* CAmDbusMessageHandler::getString()
116 if (DBUS_TYPE_STRING != dbus_message_iter_get_arg_type(&mDBusMessageIter))
118 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getString DBUS handler argument is no String!");
119 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
120 mErrorMsg = "DBus argument is no string";
124 dbus_message_iter_get_basic(&mDBusMessageIter, ¶m);
125 dbus_message_iter_next(&mDBusMessageIter);
130 dbus_bool_t CAmDbusMessageHandler::getBool()
132 dbus_bool_t boolparam = false;
134 if (DBUS_TYPE_BOOLEAN != dbus_message_iter_get_arg_type(&mDBusMessageIter))
136 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getBool DBUS handler argument is no bool!");
137 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
138 mErrorMsg = "DBus argument is no bool";
142 dbus_message_iter_get_basic(&mDBusMessageIter, &boolparam);
143 dbus_message_iter_next(&mDBusMessageIter);
148 char CAmDbusMessageHandler::getByte()
152 if (DBUS_TYPE_BYTE != dbus_message_iter_get_arg_type(&mDBusMessageIter))
154 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getByte DBUS handler argument is no byte!");
155 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
156 mErrorMsg = "DBus argument is no byte";
160 dbus_message_iter_get_basic(&mDBusMessageIter, ¶m);
161 dbus_message_iter_next(&mDBusMessageIter);
166 dbus_uint16_t CAmDbusMessageHandler::getUInt()
168 dbus_uint16_t param(0);
170 #ifdef GLIB_DBUS_TYPES_TOLERANT
171 if (DBUS_TYPE_UINT16 != dbus_message_iter_get_arg_type(&mDBusMessageIter) && DBUS_TYPE_UINT32 != dbus_message_iter_get_arg_type(&mDBusMessageIter))
173 if (DBUS_TYPE_UINT16 != dbus_message_iter_get_arg_type(&mDBusMessageIter))
176 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getUInt DBUS handler argument is no uint16_t!");
177 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
178 mErrorMsg = "DBus argument is no uint16_t";
182 dbus_message_iter_get_basic(&mDBusMessageIter, ¶m);
183 dbus_message_iter_next(&mDBusMessageIter);
188 dbus_int16_t CAmDbusMessageHandler::getInt()
190 dbus_int16_t param(0);
192 #ifdef GLIB_DBUS_TYPES_TOLERANT
193 if (DBUS_TYPE_INT16 != dbus_message_iter_get_arg_type(&mDBusMessageIter) && DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&mDBusMessageIter))
195 if (DBUS_TYPE_INT16 != dbus_message_iter_get_arg_type(&mDBusMessageIter))
198 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getInt DBUS handler argument is no int16_t!");
199 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
200 mErrorMsg = "DBus argument is no int16_t";
204 dbus_message_iter_get_basic(&mDBusMessageIter, ¶m);
205 dbus_message_iter_next(&mDBusMessageIter);
210 double CAmDbusMessageHandler::getDouble()
213 if (DBUS_TYPE_DOUBLE != dbus_message_iter_get_arg_type(&mDBusMessageIter))
215 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getDouble DBUS handler argument is no double!");
216 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
217 mErrorMsg = "DBus argument is no double";
221 dbus_message_iter_get_basic(&mDBusMessageIter, ¶m);
222 dbus_message_iter_next(&mDBusMessageIter);
227 void CAmDbusMessageHandler::getProperty(dbus_int16_t & type, dbus_int16_t & value)
229 DBusMessageIter arrayIter;
230 if (DBUS_TYPE_STRUCT != dbus_message_iter_get_arg_type(&mDBusMessageIter))
232 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::getProperty DBUS handler argument is no array!");
233 mErrorName = std::string(DBUS_ERROR_INVALID_ARGS);
234 mErrorMsg = "DBus argument is no array";
238 dbus_message_iter_recurse(&mDBusMessageIter, &arrayIter);
239 dbus_message_iter_get_basic(&arrayIter, &type);
240 dbus_message_iter_next(&arrayIter);
241 dbus_message_iter_get_basic(&arrayIter, &value);
242 dbus_message_iter_next(&mDBusMessageIter);
246 void CAmDbusMessageHandler::append(bool toAppend)
248 dbus_bool_t mybool = toAppend;
249 if (!dbus_message_iter_append_basic(&mDBusMessageIter, DBUS_TYPE_BOOLEAN, &mybool))
251 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
252 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
253 mErrorMsg = "Cannot create reply!";
257 void CAmDbusMessageHandler::append(double toAppend)
259 if (!dbus_message_iter_append_basic(&mDBusMessageIter, DBUS_TYPE_DOUBLE, &toAppend))
261 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
262 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
263 mErrorMsg = "Cannot create reply!";
267 void CAmDbusMessageHandler::append(char toAppend)
269 if (!dbus_message_iter_append_basic(&mDBusMessageIter, DBUS_TYPE_BYTE, &toAppend))
271 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
272 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
273 mErrorMsg = "Cannot create reply!";
277 void CAmDbusMessageHandler::append(dbus_int16_t toAppend)
279 if (!dbus_message_iter_append_basic(&mDBusMessageIter, DBUS_TYPE_INT16, &toAppend))
281 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
282 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
283 mErrorMsg = "Cannot create reply!";
287 void CAmDbusMessageHandler::append(dbus_uint16_t toAppend)
289 if (!dbus_message_iter_append_basic(&mDBusMessageIter, DBUS_TYPE_UINT16, &toAppend))
291 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
292 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
293 mErrorMsg = "Cannot create reply!";
297 void CAmDbusMessageHandler::setDBusConnection(DBusConnection *& connection)
299 assert(connection!=NULL);
300 mpDBusConnection = connection;
303 void CAmDbusMessageHandler::append(const am::am_SinkType_s& sinkType)
305 DBusMessageIter structIter;
306 DBusMessageIter structAvailIter;
307 dbus_bool_t success = true;
308 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter);
309 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &sinkType.sinkID);
310 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_STRING, &sinkType.name);
312 success = success && dbus_message_iter_open_container(&structIter, DBUS_TYPE_STRUCT, NULL, &structAvailIter);
313 success = success && dbus_message_iter_append_basic(&structAvailIter, DBUS_TYPE_INT16, &sinkType.availability.availability);
314 success = success && dbus_message_iter_append_basic(&structAvailIter, DBUS_TYPE_INT16, &sinkType.availability.availabilityReason);
315 success = success && dbus_message_iter_close_container(&structIter, &structAvailIter);
317 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &sinkType.volume);
318 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &sinkType.muteState);
319 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &sinkType.sinkClassID);
320 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structIter);
324 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
325 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
326 mErrorMsg = "Cannot create reply!";
330 void CAmDbusMessageHandler::append(const am::am_SourceType_s & sourceType)
332 DBusMessageIter structIter;
333 DBusMessageIter structAvailIter;
334 dbus_bool_t success = true;
335 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter);
336 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &sourceType.sourceID);
337 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_STRING, &sourceType.name);
339 success = success && dbus_message_iter_open_container(&structIter, DBUS_TYPE_STRUCT, NULL, &structAvailIter);
340 success = success && dbus_message_iter_append_basic(&structAvailIter, DBUS_TYPE_INT16, &sourceType.availability.availability);
341 success = success && dbus_message_iter_append_basic(&structAvailIter, DBUS_TYPE_INT16, &sourceType.availability.availabilityReason);
342 success = success && dbus_message_iter_close_container(&structIter, &structAvailIter);
344 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &sourceType.sourceClassID);
345 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structIter);
349 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
350 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
351 mErrorMsg = "Cannot create reply!";
355 void CAmDbusMessageHandler::append(const am::am_MainSoundProperty_s mainSoundProperty)
357 DBusMessageIter structIter;
358 dbus_bool_t success = true;
359 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter);
360 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &mainSoundProperty.type);
361 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &mainSoundProperty.value);
362 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structIter);
366 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
367 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
368 mErrorMsg = "Cannot create reply!";
372 void CAmDbusMessageHandler::append(const am::am_Availability_s & availability)
374 DBusMessageIter structAvailIter;
375 dbus_bool_t success = true;
376 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structAvailIter);
377 success = success && dbus_message_iter_append_basic(&structAvailIter, DBUS_TYPE_INT16, &availability.availability);
378 success = success && dbus_message_iter_append_basic(&structAvailIter, DBUS_TYPE_INT16, &availability.availabilityReason);
379 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structAvailIter);
383 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
384 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
385 mErrorMsg = "Cannot create reply!";
389 void CAmDbusMessageHandler::append(const am::am_SystemProperty_s & SystemProperty)
391 DBusMessageIter structIter;
392 dbus_bool_t success = true;
393 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter);
394 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &SystemProperty.type);
395 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &SystemProperty.value);
396 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &structIter);
400 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
401 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
402 mErrorMsg = "Cannot create reply!";
406 void CAmDbusMessageHandler::append(const std::vector<am::am_MainConnectionType_s>& listMainConnections)
408 DBusMessageIter arrayIter;
409 DBusMessageIter structIter;
410 std::vector<am::am_MainConnectionType_s>::const_iterator listIterator = listMainConnections.begin();
411 dbus_bool_t success = true;
413 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(qqqnn)", &arrayIter);
414 for (; listIterator < listMainConnections.end(); ++listIterator)
416 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
417 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->mainConnectionID);
418 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sourceID);
419 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sinkID);
420 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->delay);
421 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->connectionState);
422 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
424 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
428 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
429 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
430 mErrorMsg = "Cannot create reply!";
434 void CAmDbusMessageHandler::append(const std::vector<am::am_SinkType_s> & listMainSinks)
436 DBusMessageIter arrayIter;
437 DBusMessageIter structIter;
438 DBusMessageIter availIter;
439 std::vector<am::am_SinkType_s>::const_iterator listIterator = listMainSinks.begin();
440 dbus_bool_t success = true;
442 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(qs(nn)nnq)", &arrayIter);
443 for (; listIterator < listMainSinks.end(); ++listIterator)
445 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
446 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sinkID);
447 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_STRING, &listIterator->name);
448 success = success && dbus_message_iter_open_container(&structIter, DBUS_TYPE_STRUCT, NULL, &availIter);
449 success = success && dbus_message_iter_append_basic(&availIter, DBUS_TYPE_INT16, &listIterator->availability.availability);
450 success = success && dbus_message_iter_append_basic(&availIter, DBUS_TYPE_INT16, &listIterator->availability.availabilityReason);
451 success = success && dbus_message_iter_close_container(&structIter, &availIter);
452 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->volume);
453 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->muteState);
454 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sinkClassID);
455 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
457 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
461 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
462 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
463 mErrorMsg = "Cannot create reply!";
467 void CAmDbusMessageHandler::append(const std::vector<am::am_SourceType_s> & listMainSources)
469 DBusMessageIter arrayIter;
470 DBusMessageIter structIter;
471 DBusMessageIter availIter;
472 std::vector<am::am_SourceType_s>::const_iterator listIterator = listMainSources.begin();
473 dbus_bool_t success = true;
475 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(qs(nn)q)", &arrayIter);
476 for (; listIterator < listMainSources.end(); ++listIterator)
478 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
479 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sourceID);
480 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_STRING, &listIterator->name);
481 success = success && dbus_message_iter_open_container(&structIter, DBUS_TYPE_STRUCT, NULL, &availIter);
482 success = success && dbus_message_iter_append_basic(&availIter, DBUS_TYPE_INT16, &listIterator->availability.availability);
483 success = success && dbus_message_iter_append_basic(&availIter, DBUS_TYPE_INT16, &listIterator->availability.availabilityReason);
484 success = success && dbus_message_iter_close_container(&structIter, &availIter);
485 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sourceClassID);
486 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
488 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
492 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
493 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
494 mErrorMsg = "Cannot create reply!";
498 void CAmDbusMessageHandler::append(const std::vector<am::am_MainSoundProperty_s> & listMainSoundProperties)
500 DBusMessageIter arrayIter;
501 DBusMessageIter structIter;
502 std::vector<am::am_MainSoundProperty_s>::const_iterator listIterator = listMainSoundProperties.begin();
503 dbus_bool_t success = true;
505 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(nn)", &arrayIter);
506 for (; listIterator < listMainSoundProperties.end(); ++listIterator)
508 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
509 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->type);
510 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->value);
511 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
513 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
517 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
518 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
519 mErrorMsg = "Cannot create reply!";
523 void CAmDbusMessageHandler::append(const std::vector<am::am_SourceClass_s> & listSourceClasses)
525 DBusMessageIter arrayIter;
526 DBusMessageIter structIter;
527 DBusMessageIter propIter;
528 DBusMessageIter innerIter;
529 std::vector<am::am_SourceClass_s>::const_iterator listIterator = listSourceClasses.begin();
530 dbus_bool_t success = true;
532 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(qsa(nn))", &arrayIter);
533 for (; listIterator < listSourceClasses.end(); ++listIterator)
535 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
536 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sourceClassID);
537 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_STRING, &listIterator->name);
538 success = success && dbus_message_iter_open_container(&structIter, DBUS_TYPE_ARRAY, "(nn)", &innerIter);
540 std::vector<am::am_ClassProperty_s>::const_iterator listInnerIterator = listIterator->listClassProperties.begin();
541 for (; listInnerIterator < listIterator->listClassProperties.end(); ++listInnerIterator)
543 success = success && dbus_message_iter_open_container(&innerIter, DBUS_TYPE_STRUCT, NULL, &propIter);
544 success = success && dbus_message_iter_append_basic(&propIter, DBUS_TYPE_INT16, &listInnerIterator->classProperty);
545 success = success && dbus_message_iter_append_basic(&propIter, DBUS_TYPE_INT16, &listInnerIterator->value);
546 success = success && dbus_message_iter_close_container(&innerIter, &propIter);
548 success = success && dbus_message_iter_close_container(&structIter, &innerIter);
549 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
551 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
555 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
556 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
557 mErrorMsg = "Cannot create reply!";
561 void CAmDbusMessageHandler::append(const std::vector<am::am_SinkClass_s> & listSinkClasses)
563 DBusMessageIter arrayIter;
564 DBusMessageIter structIter;
565 DBusMessageIter propIter;
566 DBusMessageIter innerIter;
567 std::vector<am::am_SinkClass_s>::const_iterator listIterator = listSinkClasses.begin();
568 dbus_bool_t success = true;
570 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(qsa(nn))", &arrayIter);
571 for (; listIterator < listSinkClasses.end(); ++listIterator)
573 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
574 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_UINT16, &listIterator->sinkClassID);
575 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_STRING, &listIterator->name);
576 success = success && dbus_message_iter_open_container(&structIter, DBUS_TYPE_ARRAY, "(nn)", &innerIter);
578 std::vector<am::am_ClassProperty_s>::const_iterator listInnerIterator = listIterator->listClassProperties.begin();
579 for (; listInnerIterator < listIterator->listClassProperties.end(); ++listInnerIterator)
581 success = success && dbus_message_iter_open_container(&innerIter, DBUS_TYPE_STRUCT, NULL, &propIter);
582 success = success && dbus_message_iter_append_basic(&propIter, DBUS_TYPE_INT16, &listInnerIterator->classProperty);
583 success = success && dbus_message_iter_append_basic(&propIter, DBUS_TYPE_INT16, &listInnerIterator->value);
584 success = success && dbus_message_iter_close_container(&innerIter, &propIter);
586 success = success && dbus_message_iter_close_container(&structIter, &innerIter);
587 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
589 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
593 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
594 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
595 mErrorMsg = "Cannot create reply!";
599 void CAmDbusMessageHandler::append(const std::vector<am::am_SystemProperty_s> & listSystemProperties)
601 DBusMessageIter arrayIter;
602 DBusMessageIter structIter;
603 std::vector<am::am_SystemProperty_s>::const_iterator listIterator = listSystemProperties.begin();
604 dbus_bool_t success = true;
606 success = success && dbus_message_iter_open_container(&mDBusMessageIter, DBUS_TYPE_ARRAY, "(nn)", &arrayIter);
607 for (; listIterator < listSystemProperties.end(); ++listIterator)
609 success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter);
610 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->type);
611 success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->value);
612 success = success && dbus_message_iter_close_container(&arrayIter, &structIter);
614 success = success && dbus_message_iter_close_container(&mDBusMessageIter, &arrayIter);
618 log(&commandDbus, DLT_LOG_ERROR, "DBusMessageHandler::append Cannot allocate DBus message!");
619 mErrorName = std::string(DBUS_ERROR_NO_MEMORY);
620 mErrorMsg = "Cannot create reply!";