Add function to send outbound SOL payload

Change-Id: I63213034110c0a550b43e1cbc0115b1312821e3d
Signed-off-by: Tom Joseph <tomjoseph@in.ibm.com>
diff --git a/message_handler.cpp b/message_handler.cpp
index 820895d..e8dbe7d 100644
--- a/message_handler.cpp
+++ b/message_handler.cpp
@@ -190,5 +190,22 @@
     session->channelPtr = channel;
 }
 
+void Handler::sendSOLPayload(const sol::Buffer& input)
+{
+    Message outMessage;
+
+    auto session = (std::get<session::Manager&>(singletonPool).getSession(
+                    sessionID)).lock();
+
+    outMessage.payloadType = PayloadType::SOL;
+    outMessage.payload = input;
+    outMessage.isPacketEncrypted = session->isCryptAlgoEnabled();
+    outMessage.isPacketAuthenticated = session->isIntegrityAlgoEnabled();
+    outMessage.rcSessionID = session->getRCSessionID();
+    outMessage.bmcSessionID = sessionID;
+
+    send(outMessage);
+}
+
 } //namespace message
 
diff --git a/message_handler.hpp b/message_handler.hpp
index 457af3e..60b7a6d 100644
--- a/message_handler.hpp
+++ b/message_handler.hpp
@@ -65,6 +65,14 @@
         /** @brief Set socket channel in session object */
         void setChannelInSession() const;
 
+        /** @brief Send the SOL payload
+         *
+         *  The SOL payload is flattened and sent out on the socket
+         *
+         *  @param[in] input - SOL Payload
+         */
+        void sendSOLPayload(const sol::Buffer& input);
+
         // BMC Session ID for the Channel
         session::SessionID sessionID;
 
diff --git a/sol/sol_context.cpp b/sol/sol_context.cpp
index ec48a59..c00d01c 100644
--- a/sol/sol_context.cpp
+++ b/sol/sol_context.cpp
@@ -198,7 +198,12 @@
 
 void Context::sendPayload(const Buffer& out) const
 {
+    auto session = (std::get<session::Manager&>(singletonPool).getSession(
+                    sessionID)).lock();
 
+    message::Handler msgHandler(session->channelPtr, sessionID);
+
+    msgHandler.sendSOLPayload(out);
 }
 
 } // namespace sol