message: Implment get_reply_cookie()

sd-bus messages of a reply type (return,error) contain the cookie
associated with the incoming request. Lets expose the reply cookie
of the message on the public interface.

Tested:
    Builds and unit tests still pass

Change-Id: I7dddae1d2c4b961987e6526ce2dcb16107f40bed
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/sdbusplus/message.hpp b/sdbusplus/message.hpp
index df8a38d..11cfb9f 100644
--- a/sdbusplus/message.hpp
+++ b/sdbusplus/message.hpp
@@ -249,6 +249,21 @@
         return cookie;
     }
 
+    /** @brief Get the reply cookie of a message.
+     *
+     * @return The reply cookie of a message.
+     */
+    auto get_reply_cookie()
+    {
+        uint64_t cookie;
+        int r = _intf->sd_bus_message_get_reply_cookie(_msg.get(), &cookie);
+        if (r < 0)
+        {
+            throw exception::SdBusError(-r, "sd_bus_message_get_reply_cookie");
+        }
+        return cookie;
+    }
+
     /** @brief Check if message is a method call for an interface/method.
      *
      *  @param[in] interface - The interface to match.
diff --git a/sdbusplus/sdbus.hpp b/sdbusplus/sdbus.hpp
index f1bea78..429e70a 100644
--- a/sdbusplus/sdbus.hpp
+++ b/sdbusplus/sdbus.hpp
@@ -75,6 +75,8 @@
     virtual int sd_bus_message_get_type(sd_bus_message* m, uint8_t* type) = 0;
     virtual int sd_bus_message_get_cookie(sd_bus_message* m,
                                           uint64_t* cookie) = 0;
+    virtual int sd_bus_message_get_reply_cookie(sd_bus_message* m,
+                                                uint64_t* cookie) = 0;
     virtual const char* sd_bus_message_get_destination(sd_bus_message* m) = 0;
     virtual const char* sd_bus_message_get_interface(sd_bus_message* m) = 0;
     virtual const char* sd_bus_message_get_member(sd_bus_message* m) = 0;
@@ -305,6 +307,12 @@
         return ::sd_bus_message_get_cookie(m, cookie);
     }
 
+    int sd_bus_message_get_reply_cookie(sd_bus_message* m,
+                                        uint64_t* cookie) override
+    {
+        return ::sd_bus_message_get_reply_cookie(m, cookie);
+    }
+
     const char* sd_bus_message_get_destination(sd_bus_message* m) override
     {
         return ::sd_bus_message_get_destination(m);
diff --git a/sdbusplus/test/sdbus_mock.hpp b/sdbusplus/test/sdbus_mock.hpp
index 7b8abc5..2386a4d 100644
--- a/sdbusplus/test/sdbus_mock.hpp
+++ b/sdbusplus/test/sdbus_mock.hpp
@@ -58,6 +58,8 @@
     MOCK_METHOD1(sd_bus_message_get_bus, sd_bus*(sd_bus_message*));
     MOCK_METHOD2(sd_bus_message_get_type, int(sd_bus_message*, uint8_t*));
     MOCK_METHOD2(sd_bus_message_get_cookie, int(sd_bus_message*, uint64_t*));
+    MOCK_METHOD2(sd_bus_message_get_reply_cookie,
+                 int(sd_bus_message*, uint64_t*));
     MOCK_METHOD1(sd_bus_message_get_destination, const char*(sd_bus_message*));
     MOCK_METHOD1(sd_bus_message_get_interface, const char*(sd_bus_message*));
     MOCK_METHOD1(sd_bus_message_get_member, const char*(sd_bus_message*));