netipmid: use std::shared_ptr instead of weak_ptr/lock

All of the instances of getSession and startSession were assigning the
result to a local shared_ptr via lock on the weak_ptr. It doesn't make
sense to demote the shared_ptr (from the sessionsMap) to a weak_ptr via
the return, only to promote to a shared_ptr again via lock.

Tested-by: running ipmitool -H a.b.c.d -P 0penBmc -I lanplus mc info
           Sessions start and stop, same as before.

Change-Id: Ic10779285891d73ee51115f16ed0000b38d1c52a
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/command/open_session.cpp b/command/open_session.cpp
index b41eefa..b48b7e9 100644
--- a/command/open_session.cpp
+++ b/command/open_session.cpp
@@ -50,16 +50,15 @@
     {
         // Start an IPMI session
         session =
-            (std::get<session::Manager&>(singletonPool)
-                 .startSession(
-                     endian::from_ipmi<>(request->remoteConsoleSessionID),
-                     static_cast<session::Privilege>(request->maxPrivLevel),
-                     static_cast<cipher::rakp_auth::Algorithms>(
-                         request->authAlgo),
-                     static_cast<cipher::integrity::Algorithms>(
-                         request->intAlgo),
-                     static_cast<cipher::crypt::Algorithms>(request->confAlgo)))
-                .lock();
+            std::get<session::Manager&>(singletonPool)
+                .startSession(
+                    endian::from_ipmi<>(request->remoteConsoleSessionID),
+                    static_cast<session::Privilege>(request->maxPrivLevel),
+                    static_cast<cipher::rakp_auth::Algorithms>(
+                        request->authAlgo),
+                    static_cast<cipher::integrity::Algorithms>(
+                        request->intAlgo),
+                    static_cast<cipher::crypt::Algorithms>(request->confAlgo));
     }
     catch (std::exception& e)
     {
diff --git a/command/payload_cmds.cpp b/command/payload_cmds.cpp
index 8030b92..2e8ac6f 100644
--- a/command/payload_cmds.cpp
+++ b/command/payload_cmds.cpp
@@ -47,9 +47,8 @@
         return outPayload;
     }
 
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(handler.sessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(handler.sessionID);
 
     if (!request->encryption && session->isCryptAlgoEnabled())
     {
diff --git a/command/rakp12.cpp b/command/rakp12.cpp
index b0aad87..b4842b2 100644
--- a/command/rakp12.cpp
+++ b/command/rakp12.cpp
@@ -35,10 +35,9 @@
     std::shared_ptr<session::Session> session;
     try
     {
-        session = (std::get<session::Manager&>(singletonPool)
-                       .getSession(
-                           endian::from_ipmi(request->managedSystemSessionID)))
-                      .lock();
+        session =
+            std::get<session::Manager&>(singletonPool)
+                .getSession(endian::from_ipmi(request->managedSystemSessionID));
     }
     catch (std::exception& e)
     {
diff --git a/command/rakp34.cpp b/command/rakp34.cpp
index 76236d5..84c90fc 100644
--- a/command/rakp34.cpp
+++ b/command/rakp34.cpp
@@ -16,8 +16,7 @@
 void applyIntegrityAlgo(const uint32_t bmcSessionID)
 {
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(bmcSessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(bmcSessionID);
 
     auto authAlgo = session->getAuthAlgo();
 
@@ -45,8 +44,7 @@
 void applyCryptAlgo(const uint32_t bmcSessionID)
 {
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(bmcSessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(bmcSessionID);
 
     auto authAlgo = session->getAuthAlgo();
 
@@ -96,10 +94,9 @@
     std::shared_ptr<session::Session> session;
     try
     {
-        session = (std::get<session::Manager&>(singletonPool)
-                       .getSession(
-                           endian::from_ipmi(request->managedSystemSessionID)))
-                      .lock();
+        session =
+            std::get<session::Manager&>(singletonPool)
+                .getSession(endian::from_ipmi(request->managedSystemSessionID));
     }
     catch (std::exception& e)
     {
diff --git a/command/session_cmds.cpp b/command/session_cmds.cpp
index fb2d074..d363c1e 100644
--- a/command/session_cmds.cpp
+++ b/command/session_cmds.cpp
@@ -23,9 +23,8 @@
     response->completionCode = IPMI_CC_OK;
     uint8_t reqPrivilegeLevel = request->reqPrivLevel;
 
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(handler.sessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(handler.sessionID);
 
     if (reqPrivilegeLevel == 0) // Just return present privilege level
     {
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
index fb6f19e..a8fa410 100644
--- a/command/sol_cmds.cpp
+++ b/command/sol_cmds.cpp
@@ -57,8 +57,7 @@
     request->minorVersion = MINOR_VERSION;
 
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(sessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(sessionID);
 
     message::Handler msgHandler(session->channelPtr, sessionID);
 
diff --git a/message_handler.cpp b/message_handler.cpp
index 62855a9..c5d5d4e 100644
--- a/message_handler.cpp
+++ b/message_handler.cpp
@@ -35,9 +35,8 @@
     std::unique_ptr<Message> message;
     std::tie(message, sessionHeader) = parser::unflatten(packet);
 
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(message->bmcSessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(message->bmcSessionID);
 
     sessionID = message->bmcSessionID;
     message->rcSessionID = session->getRCSessionID();
@@ -166,8 +165,7 @@
 void Handler::send(Message& outMessage)
 {
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(sessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(sessionID);
 
     // Flatten the packet
     auto packet = parser::flatten(outMessage, sessionHeader, *session);
@@ -183,8 +181,7 @@
 void Handler::setChannelInSession() const
 {
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(sessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(sessionID);
 
     session->channelPtr = channel;
 }
@@ -194,8 +191,7 @@
     Message outMessage;
 
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(sessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(sessionID);
 
     outMessage.payloadType = PayloadType::SOL;
     outMessage.payload = input;
@@ -213,8 +209,7 @@
     Message outMessage;
 
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(sessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(sessionID);
 
     outMessage.payloadType = PayloadType::IPMI;
     outMessage.isPacketEncrypted = session->isCryptAlgoEnabled();
diff --git a/message_parsers.cpp b/message_parsers.cpp
index 695b5b7..7497747 100644
--- a/message_parsers.cpp
+++ b/message_parsers.cpp
@@ -280,9 +280,8 @@
         return false;
     }
 
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(message.bmcSessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(message.bmcSessionID);
 
     auto integrityAlgo = session->getIntegrityAlgo();
 
@@ -322,9 +321,8 @@
     trailer->padLength = paddingLen;
     trailer->nextHeader = parser::RMCP_MESSAGE_CLASS_IPMI;
 
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(message.bmcSessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(message.bmcSessionID);
 
     auto integrityData =
         session->getIntegrityAlgo()->generateIntegrityData(packet);
@@ -335,9 +333,8 @@
 std::vector<uint8_t> decryptPayload(const std::vector<uint8_t>& packet,
                                     const Message& message, size_t payloadLen)
 {
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(message.bmcSessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(message.bmcSessionID);
 
     return session->getCryptAlgo()->decryptPayload(
         packet, sizeof(SessionHeader_t), payloadLen);
@@ -345,9 +342,8 @@
 
 std::vector<uint8_t> encryptPayload(Message& message)
 {
-    auto session = (std::get<session::Manager&>(singletonPool)
-                        .getSession(message.bmcSessionID))
-                       .lock();
+    auto session = std::get<session::Manager&>(singletonPool)
+                       .getSession(message.bmcSessionID);
 
     return session->getCryptAlgo()->encryptPayload(message.payload);
 }
diff --git a/sessions_manager.cpp b/sessions_manager.cpp
index 10c2764..bf7ff34 100644
--- a/sessions_manager.cpp
+++ b/sessions_manager.cpp
@@ -24,7 +24,7 @@
     std::srand(std::time(0));
 }
 
-std::weak_ptr<Session>
+std::shared_ptr<Session>
     Manager::startSession(SessionID remoteConsoleSessID, Privilege priv,
                           cipher::rakp_auth::Algorithms authAlgo,
                           cipher::integrity::Algorithms intAlgo,
@@ -120,8 +120,8 @@
     }
 }
 
-std::weak_ptr<Session> Manager::getSession(SessionID sessionID,
-                                           RetrieveOption option)
+std::shared_ptr<Session> Manager::getSession(SessionID sessionID,
+                                             RetrieveOption option)
 {
     switch (option)
     {
diff --git a/sessions_manager.hpp b/sessions_manager.hpp
index cf28238..251ca96 100644
--- a/sessions_manager.hpp
+++ b/sessions_manager.hpp
@@ -53,11 +53,11 @@
      * @return session handle on success and nullptr on failure
      *
      */
-    std::weak_ptr<Session> startSession(SessionID remoteConsoleSessID,
-                                        Privilege priv,
-                                        cipher::rakp_auth::Algorithms authAlgo,
-                                        cipher::integrity::Algorithms intAlgo,
-                                        cipher::crypt::Algorithms cryptAlgo);
+    std::shared_ptr<Session>
+        startSession(SessionID remoteConsoleSessID, Privilege priv,
+                     cipher::rakp_auth::Algorithms authAlgo,
+                     cipher::integrity::Algorithms intAlgo,
+                     cipher::crypt::Algorithms cryptAlgo);
 
     /**
      * @brief Stop IPMI Session
@@ -79,7 +79,7 @@
      * @return session handle on success and nullptr on failure
      *
      */
-    std::weak_ptr<Session>
+    std::shared_ptr<Session>
         getSession(SessionID sessionID,
                    RetrieveOption option = RetrieveOption::BMC_SESSION_ID);
 
diff --git a/sol/sol_context.cpp b/sol/sol_context.cpp
index 7329ed2..fffb66f 100644
--- a/sol/sol_context.cpp
+++ b/sol/sol_context.cpp
@@ -205,8 +205,7 @@
 void Context::sendPayload(const std::vector<uint8_t>& out) const
 {
     auto session =
-        (std::get<session::Manager&>(singletonPool).getSession(sessionID))
-            .lock();
+        std::get<session::Manager&>(singletonPool).getSession(sessionID);
 
     message::Handler msgHandler(session->channelPtr, sessionID);