netipmid: use shared_ptr on messages instead of unique_ptr+references

Messages were being created and held by unique_ptr objects and then
shared via reference. This is dangerous and sidesteps the whole point of
a unique_ptr, which is to enforce single ownership. This replaces the
usage with a shared_ptr, which denotes shared ownership.

Change-Id: I19ed2693f5a0f5ce47d720ed255fa05bdf3844f8
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/message_handler.hpp b/message_handler.hpp
index 063f8d2..3c99660 100644
--- a/message_handler.hpp
+++ b/message_handler.hpp
@@ -6,6 +6,7 @@
 #include "sol/console_buffer.hpp"
 
 #include <iostream>
+#include <memory>
 #include <numeric>
 
 namespace message
@@ -38,7 +39,7 @@
      * @return IPMI Message on success and nullptr on failure
      *
      */
-    std::unique_ptr<Message> receive();
+    std::shared_ptr<Message> receive();
 
     /**
      * @brief Process the incoming IPMI message
@@ -51,7 +52,7 @@
      *
      * @return Outgoing message on success and nullptr on failure
      */
-    std::unique_ptr<Message> executeCommand(Message& inMessage);
+    std::shared_ptr<Message> executeCommand(std::shared_ptr<Message> inMessage);
 
     /** @brief Send the outgoing message
      *
@@ -60,7 +61,7 @@
      *
      *  @param[in] outMessage - Outgoing Message
      */
-    void send(Message& outMessage);
+    void send(std::shared_ptr<Message> outMessage);
 
     /** @brief Set socket channel in session object */
     void setChannelInSession() const;
@@ -109,10 +110,10 @@
      * @return Outgoing message on success and nullptr on failure
      */
     template <PayloadType T>
-    std::unique_ptr<Message> createResponse(std::vector<uint8_t>& output,
-                                            Message& inMessage)
+    std::shared_ptr<Message> createResponse(std::vector<uint8_t>& output,
+                                            std::shared_ptr<Message> inMessage)
     {
-        auto outMessage = std::make_unique<Message>();
+        auto outMessage = std::make_shared<Message>();
         outMessage->payloadType = T;
         outMessage->payload = output;
         return outMessage;
@@ -125,7 +126,7 @@
      *
      * @return Command ID in the incoming message
      */
-    uint32_t getCommand(Message& message);
+    uint32_t getCommand(std::shared_ptr<Message> message);
 
     /**
      * @brief Calculate 8 bit 2's complement checksum