Fix incorrect transmission of selective signals
authorJohannes Schanda <schanda@itestra.de>
Fri, 13 Sep 2013 16:12:44 +0000 (18:12 +0200)
committerJohannes Schanda <schanda@itestra.de>
Fri, 13 Sep 2013 16:21:23 +0000 (18:21 +0200)
src/CommonAPI/DBus/DBusClientId.cpp
src/CommonAPI/DBus/DBusClientId.h
src/CommonAPI/DBus/DBusStubAdapterHelper.h

index 39219bf..b68b7fa 100644 (file)
@@ -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);
index 4b76699..a252de6 100644 (file)
@@ -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_;
index 650230c..24de3f1 100644 (file)
@@ -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;
+       }
 };