message: add signal interfaces

Change-Id: Ida59e91564fbc452431ff54cfd7de59d7903e7b1
diff --git a/sdbusplus/bus.hpp b/sdbusplus/bus.hpp
index fe68690..20e0836 100644
--- a/sdbusplus/bus.hpp
+++ b/sdbusplus/bus.hpp
@@ -118,6 +118,22 @@
         return message::message(m);
     }
 
+    /** @brief Create a signal message.
+     *
+     *  @param[in] objpath - The object's path for the signal.
+     *  @param[in] interf - The object's interface for the signal.
+     *  @param[in] member - The signal name.
+     *
+     *  @return A newly constructed message.
+     */
+    auto new_signal(const char* objpath, const char* interf, const char* member)
+    {
+        sd_bus_message* m = nullptr;
+        sd_bus_message_new_signal(_bus.get(), &m, objpath, interf, member);
+
+        return message::message(m);
+    }
+
     /** @brief Perform a message call.
      *
      *  @param[in] m - The method_call message.
diff --git a/sdbusplus/message.hpp b/sdbusplus/message.hpp
index 327fb7e..74e0cdd 100644
--- a/sdbusplus/message.hpp
+++ b/sdbusplus/message.hpp
@@ -108,6 +108,16 @@
         return sd_bus_message_is_method_call(_msg.get(), interface, method);
     }
 
+    /** @brief Check if message is a signal for an interface/member.
+     *
+     *  @param[in] interface - The interface to match.
+     *  @param[in] member - The member to match.
+     */
+    bool is_signal(const char* interface, const char* member)
+    {
+        return sd_bus_message_is_signal(_msg.get(), interface, member);
+    }
+
     /** @brief Create a 'method_return' type message from an existing message.
      *
      *  @return method-return message.