diff options
author | Johannes Schanda <schanda@itestra.de> | 2013-09-13 18:12:44 +0200 |
---|---|---|
committer | Johannes Schanda <schanda@itestra.de> | 2013-09-13 18:21:23 +0200 |
commit | 6c45633828b2ec10ef6bbdbdc9e2939e7602a632 (patch) | |
tree | fca7e4bf6cbd750f3156b58c890c48173ec2b638 | |
parent | 167eb533d7ed8af7b977f8e26508cb233fdb76a9 (diff) | |
download | genivi-common-api-dbus-runtime-6c45633828b2ec10ef6bbdbdc9e2939e7602a632.tar.gz |
Fix incorrect transmission of selective signals
-rw-r--r-- | src/CommonAPI/DBus/DBusClientId.cpp | 4 | ||||
-rw-r--r-- | src/CommonAPI/DBus/DBusClientId.h | 2 | ||||
-rw-r--r-- | src/CommonAPI/DBus/DBusStubAdapterHelper.h | 27 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/CommonAPI/DBus/DBusClientId.cpp b/src/CommonAPI/DBus/DBusClientId.cpp index 39219bf..b68b7fa 100644 --- a/src/CommonAPI/DBus/DBusClientId.cpp +++ b/src/CommonAPI/DBus/DBusClientId.cpp @@ -47,6 +47,10 @@ size_t DBusClientId::hashCode() return std::hash<DBusClientId>()(this); } +const char * DBusClientId::getDBusId() { + return dbusId_.c_str(); +} + DBusMessage DBusClientId::createMessage(const std::string objectPath, const std::string interfaceName, const std::string signalName) const { DBusMessage returnMessage = DBusMessage::createSignal(objectPath, interfaceName, signalName); diff --git a/src/CommonAPI/DBus/DBusClientId.h b/src/CommonAPI/DBus/DBusClientId.h index 4b76699..a252de6 100644 --- a/src/CommonAPI/DBus/DBusClientId.h +++ b/src/CommonAPI/DBus/DBusClientId.h @@ -36,6 +36,8 @@ public: bool operator==(DBusClientId& clientIdToCompare); size_t hashCode(); + const char * getDBusId(); + DBusMessage createMessage(const std::string objectPath, const std::string interfaceName, const std::string signalName) const; protected: std::string dbusId_; diff --git a/src/CommonAPI/DBus/DBusStubAdapterHelper.h b/src/CommonAPI/DBus/DBusStubAdapterHelper.h index 650230c..24de3f1 100644 --- a/src/CommonAPI/DBus/DBusStubAdapterHelper.h +++ b/src/CommonAPI/DBus/DBusStubAdapterHelper.h @@ -134,6 +134,33 @@ struct DBusStubSignalHelper<_In<_InArgs...>> { const bool dbusMessageSent = dbusStub.getDBusConnection()->sendDBusMessage(dbusMessage); return dbusMessageSent; } + + template <typename _DBusStub = DBusStubAdapter> + static bool sendSignal( const char* target, + const _DBusStub& dbusStub, + const char* signalName, + const char* signalSignature, + const _InArgs&... inArgs) { + DBusMessage dbusMessage = DBusMessage::createSignal( + dbusStub.getObjectPath().c_str(), + dbusStub.getInterfaceName(), + signalName, + signalSignature); + + dbusMessage.setDestination(target); + + if (sizeof...(_InArgs) > 0) { + DBusOutputStream outputStream(dbusMessage); + const bool success = DBusSerializableArguments<_InArgs...>::serialize(outputStream, inArgs...); + if (!success) { + return false; + } + outputStream.flush(); + } + + const bool dbusMessageSent = dbusStub.getDBusConnection()->sendDBusMessage(dbusMessage); + return dbusMessageSent; + } }; |