diff options
Diffstat (limited to 'PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp')
-rw-r--r-- | PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp | 187 |
1 files changed, 97 insertions, 90 deletions
diff --git a/PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp b/PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp index 16a42ca..0f02ab3 100644 --- a/PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp +++ b/PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp @@ -1,7 +1,9 @@ /** * Copyright (c) copyright 2011-2012 Aricent® Group and its licensors + * Copyright (c) 2012 BMW * - * \author: Sampreeth Ramavana + * \author Sampreeth Ramavana + * \author Christian Mueller, christian.ei.mueller@bmw.de BMW 2011,2012 * * \copyright * 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, @@ -16,118 +18,123 @@ */ #include "CAmDbusSend.h" -#include <dlt/dlt.h> +#include "shared/CAmDltWrapper.h" -DLT_IMPORT_CONTEXT(DLT_CONTEXT) +namespace am +{ -CAmDbusSend::CAmDbusSend (DBusConnection* conn, const char* bus_name,const char* path, const char* interface, const char* method) : m_conn(conn) { - m_msg=dbus_message_new_method_call(bus_name,path,interface,method); - if (NULL == m_msg) { - this->~CAmDbusSend(); - } -} +DLT_IMPORT_CONTEXT(routingDbus) -CAmDbusSend::~CAmDbusSend() { - if(replymsg) - dbus_message_unref(replymsg); +CAmRoutingDbusSend::CAmRoutingDbusSend(DBusConnection* conn, std::string bus_name, std::string path, std::string interface, std::string method) : + mpDbusMessage(NULL), // + mpDbusConnection(conn), // + mDbusMessageIter(), // + mDBusError() +{ + dbus_error_init(&mDBusError); + mpDbusMessage = dbus_message_new_method_call(bus_name.c_str(), path.c_str(), interface.c_str(), method.c_str()); + if (NULL == mpDbusMessage) + { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusSend::CAmRoutingDbusSend dbus error:", mDBusError.message); + this->~CAmRoutingDbusSend(); + } } -void CAmDbusSend::appendString(char* string) { - dbus_message_iter_init_append(m_msg, &m_args); - if (!dbus_message_iter_append_basic(&m_args, DBUS_TYPE_STRING, string)) { - this->~CAmDbusSend(); - } +CAmRoutingDbusSend::~CAmRoutingDbusSend() +{ } -void CAmDbusSend::appendInteger(int integer) { - dbus_message_iter_init_append(m_msg, &m_args); - if (!dbus_message_iter_append_basic(&m_args, DBUS_TYPE_INT32, &integer)) { - this->~CAmDbusSend(); - } - +void CAmRoutingDbusSend::append(std::string string) +{ + dbus_message_iter_init_append(mpDbusMessage, &mDbusMessageIter); + if (!dbus_message_iter_append_basic(&mDbusMessageIter, DBUS_TYPE_STRING, string.c_str())) + { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusSend::append no more memory"); + this->~CAmRoutingDbusSend(); + } } -void CAmDbusSend::sendReply(bool* reply) { - - DBusPendingCall* pending; - DBusMessageIter args; - if (!dbus_connection_send_with_reply (m_conn, m_msg, &pending, -1)) { // -1 is default timeout - this->~CAmDbusSend(); - } - - if (NULL == pending) { - this->~CAmDbusSend(); - } - dbus_connection_flush(m_conn); - dbus_message_unref(m_msg); - dbus_pending_call_block(pending); - - DBusMessage* msg=dbus_pending_call_steal_reply(pending); - - if (NULL == msg) { - this->~CAmDbusSend(); - } - - dbus_pending_call_unref(pending); - - if (!dbus_message_iter_init(msg, &args)) { - } else if (DBUS_TYPE_BOOLEAN != dbus_message_iter_get_arg_type(&args)) { - } else { - dbus_message_iter_get_basic(&args, reply); - } - - dbus_message_unref(msg); +void CAmRoutingDbusSend::append(uint16_t integer) +{ + dbus_message_iter_init_append(mpDbusMessage, &mDbusMessageIter); + if (!dbus_message_iter_append_basic(&mDbusMessageIter, DBUS_TYPE_UINT16, &integer)) + { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusSend::append no more memory"); + this->~CAmRoutingDbusSend(); + } } -void CAmDbusSend::sendReply(int* reply) { - - DBusPendingCall* pending; - DBusMessageIter args; - if (!dbus_connection_send_with_reply (m_conn, m_msg, &pending, -1)) { // -1 is default timeout - this->~CAmDbusSend(); - } - - if (NULL == pending) { - this->~CAmDbusSend(); - } - dbus_connection_flush(m_conn); - dbus_message_unref(m_msg); - dbus_pending_call_block(pending); - - DBusMessage* msg=dbus_pending_call_steal_reply(pending); - - if (NULL == msg) { - this->~CAmDbusSend(); - } +void CAmRoutingDbusSend::append(int16_t integer) +{ + dbus_message_iter_init_append(mpDbusMessage, &mDbusMessageIter); + if (!dbus_message_iter_append_basic(&mDbusMessageIter, DBUS_TYPE_INT16, &integer)) + { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusSend::append no more memory"); + this->~CAmRoutingDbusSend(); + } +} - dbus_pending_call_unref(pending); +void CAmRoutingDbusSend::append(std::vector<am_SoundProperty_s> listSoundProperties) +{ + DBusMessageIter arrayIter; + DBusMessageIter structIter; + std::vector<am_SoundProperty_s>::const_iterator listIterator = listSoundProperties.begin(); + dbus_bool_t success = true; - if (!dbus_message_iter_init(msg, &args)) { - } else if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&args)) { - } else { - dbus_message_iter_get_basic(&args, reply); - } + success = success && dbus_message_iter_open_container(&mDbusMessageIter, DBUS_TYPE_ARRAY, "(nn)", &arrayIter); + for (; listIterator < listSoundProperties.end(); ++listIterator) + { + success = success && dbus_message_iter_open_container(&arrayIter, DBUS_TYPE_STRUCT, NULL, &structIter); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->type); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &listIterator->value); + success = success && dbus_message_iter_close_container(&arrayIter, &structIter); + } + success = success && dbus_message_iter_close_container(&mDbusMessageIter, &arrayIter); - dbus_message_unref(msg); + if (!success) + { + log(&routingDbus, DLT_LOG_ERROR, "DBusMessageHandler::append error", mDBusError.message); + } } -void CAmDbusSend::sendReply(void) { +void CAmRoutingDbusSend::append(am_SoundProperty_s soundProperty) +{ + DBusMessageIter structIter; + dbus_bool_t success = true; - if (!dbus_connection_send(m_conn, m_msg, NULL)) - { - this->~CAmDbusSend(); - } - replymsg = NULL; + success = success && dbus_message_iter_open_container(&mDbusMessageIter, DBUS_TYPE_STRUCT, NULL, &structIter); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &soundProperty.type); + success = success && dbus_message_iter_append_basic(&structIter, DBUS_TYPE_INT16, &soundProperty.value); + success = success && dbus_message_iter_close_container(&mDbusMessageIter, &structIter); + if (!success) + { + log(&routingDbus, DLT_LOG_ERROR, "DBusMessageHandler::append error", mDBusError.message); + } } -void CAmDbusSend::Replyint32(int *reply) + +am_Error_e CAmRoutingDbusSend::send() { - if (DBUS_TYPE_INT32 != dbus_message_iter_get_arg_type(&mDBusMessageIter)) + + am_Error_e error; + DBusMessage* reply(dbus_connection_send_with_reply_and_block(mpDbusConnection, mpDbusMessage, -1, &mDBusError)); + if (!reply) { + log(&routingDbus, DLT_LOG_ERROR, "CAmRoutingDbusSend::send failed, dbus error", mDBusError.message); + return (E_UNKNOWN); + } + if (!dbus_message_iter_init(reply, &mDbusMessageIter)) + { + log(&routingDbus, DLT_LOG_ERROR, "DBusMessageHandler::send DBus Message has no arguments!"); + } + if (DBUS_TYPE_INT16 != dbus_message_iter_get_arg_type(&mDbusMessageIter)) + { + log(&routingDbus, DLT_LOG_ERROR, "DBusMessageHandler::getBool DBUS handler argument is no error!"); } else { - dbus_message_iter_get_basic(&mDBusMessageIter, reply); + dbus_message_iter_get_basic(&mDbusMessageIter, &error); } - dbus_message_iter_next(&mDBusMessageIter); + return (error); +} } |