blob: c23e3abaac6f2b087ddddd912ce0eaa669c626c9 [file] [log] [blame]
Tom Joseph3e61aa02016-08-08 08:42:39 -05001#pragma once
2
3#include <map>
4#include <memory>
5#include <mutex>
6
7#include "session.hpp"
8
9namespace session
10{
11
12enum class RetrieveOption
13{
14 BMC_SESSION_ID,
15 RC_SESSION_ID,
16};
17
18constexpr size_t SESSION_ZERO = 0;
19constexpr size_t MAX_SESSIONLESS_COUNT = 1;
20constexpr size_t MAX_SESSION_COUNT = 5;
21
22/*
23 * @class Manager
24 *
25 * Manager class acts a manager for the IPMI sessions and provides interfaces
26 * to start a session, stop a session and get reference to the session objects.
27 *
28 */
29
30class Manager
31{
32 public:
33
34 // BMC Session ID is the key for the map
35 using SessionMap = std::map<SessionID, std::shared_ptr<Session>>;
36
37 Manager();
38 ~Manager() = default;
39 Manager(const Manager&) = delete;
40 Manager& operator=(const Manager&) = delete;
41 Manager(Manager&&) = default;
42 Manager& operator=(Manager&&) = default;
43
44 /*
45 * @brief Start an IPMI session
46 *
47 * @param[in] remoteConsoleSessID - Remote Console Session ID mentioned
48 * in the Open SessionRequest Command
49 * @param[in] priv - Privilege level requested
50 * @param[in] authAlgo - Authentication Algorithm
Tom Josephdd1be1a2017-01-10 16:10:29 +053051 * @param[in] intAlgo - Integrity Algorithm
Tom Joseph3e61aa02016-08-08 08:42:39 -050052 *
53 * @return session handle on success and nullptr on failure
54 *
55 */
56 std::weak_ptr<Session> startSession(SessionID remoteConsoleSessID,
Tom Josephdd1be1a2017-01-10 16:10:29 +053057 Privilege priv, cipher::rakp_auth::Algorithms authAlgo,
58 cipher::integrity::Algorithms intAlgo);
Tom Joseph3e61aa02016-08-08 08:42:39 -050059
60 /*
61 * @brief Stop IPMI Session
62 *
63 * @param[in] bmcSessionID - BMC Session ID
64 *
Tom Joseph9662c3a2016-12-06 17:52:16 +053065 * @return true on success and failure if session ID is invalid
66 *
Tom Joseph3e61aa02016-08-08 08:42:39 -050067 */
Tom Joseph9662c3a2016-12-06 17:52:16 +053068 bool stopSession(SessionID bmcSessionID);
Tom Joseph3e61aa02016-08-08 08:42:39 -050069
70 /*
71 * @brief Get Session Handle
72 *
73 * @param[in] sessionID - Session ID
74 * @param[in] option - Select between BMC Session ID and Remote Console
75 * Session ID, Default option is BMC Session ID
76 *
77 * @return session handle on success and nullptr on failure
78 *
79 */
80 std::weak_ptr<Session> getSession(
81 SessionID sessionID,
82 RetrieveOption option = RetrieveOption::BMC_SESSION_ID);
83
84 private:
85
86 /*
87 * @brief Session Manager keeps the session objects as a sorted
88 * associative container with Session ID as the unique key
89 */
90 SessionMap sessionsMap;
91
92 /*
93 * @brief Clean Session Stale Entries
94 *
95 * Removes the inactive sessions entries from the Session Map
96 */
97 void cleanStaleEntries();
98};
99
100} // namespace session