summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohannes Schanda <schanda@itestra.de>2013-09-13 18:12:44 +0200
committerJohannes Schanda <schanda@itestra.de>2013-09-13 18:21:23 +0200
commit6c45633828b2ec10ef6bbdbdc9e2939e7602a632 (patch)
treefca7e4bf6cbd750f3156b58c890c48173ec2b638 /src
parent167eb533d7ed8af7b977f8e26508cb233fdb76a9 (diff)
downloadgenivi-common-api-dbus-runtime-6c45633828b2ec10ef6bbdbdc9e2939e7602a632.tar.gz
Fix incorrect transmission of selective signals
Diffstat (limited to 'src')
-rw-r--r--src/CommonAPI/DBus/DBusClientId.cpp4
-rw-r--r--src/CommonAPI/DBus/DBusClientId.h2
-rw-r--r--src/CommonAPI/DBus/DBusStubAdapterHelper.h27
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;
+ }
};