summaryrefslogtreecommitdiff
path: root/PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp')
-rw-r--r--PluginRoutingInterfaceDbus/src/CAmDbusSend.cpp187
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);
+}
}