8#include <botan/tls_session_manager.h>
20 std::chrono::seconds session_lifetime) :
21 m_max_sessions(max_sessions),
22 m_session_lifetime(session_lifetime),
24 m_session_key(m_rng.random_vec(32))
27bool Session_Manager_In_Memory::load_from_session_str(
28 const std::string& session_str,
Session& session)
32 auto i = m_sessions.find(session_str);
34 if(i == m_sessions.end())
47 const auto now = std::chrono::system_clock::now();
59 const std::vector<uint8_t>& session_id,
Session& session)
63 return load_from_session_str(
hex_encode(session_id), session);
71 auto i = m_info_sessions.find(info);
73 if(i == m_info_sessions.end())
76 if(load_from_session_str(i->second, session))
83 m_info_sessions.erase(i);
89 const std::vector<uint8_t>& session_id)
93 auto i = m_sessions.find(
hex_encode(session_id));
95 if(i != m_sessions.end())
101 const size_t removed = m_sessions.size();
102 m_info_sessions.clear();
112 if(m_max_sessions != 0)
118 while(m_sessions.size() >= m_max_sessions)
119 m_sessions.erase(m_sessions.begin());
124 m_sessions[session_id_str] = session.
encrypt(m_session_key, m_rng);
127 m_info_sessions[session.
server_info()] = session_id_str;
secure_vector< uint8_t > random_vec(size_t bytes)
Session_Manager_In_Memory(RandomNumberGenerator &rng, size_t max_sessions=1000, std::chrono::seconds session_lifetime=std::chrono::seconds(7200))
bool load_from_server_info(const Server_Information &info, Session &session) override
size_t remove_all() override
std::chrono::seconds session_lifetime() const override
bool load_from_session_id(const std::vector< uint8_t > &session_id, Session &session) override
void save(const Session &session_data) override
void remove_entry(const std::vector< uint8_t > &session_id) override
const Server_Information & server_info() const
std::vector< uint8_t > encrypt(const SymmetricKey &key, RandomNumberGenerator &rng) const
std::chrono::system_clock::time_point start_time() const
Connection_Side side() const
const std::vector< uint8_t > & session_id() const
static Session decrypt(const uint8_t ctext[], size_t ctext_size, const SymmetricKey &key)
void hex_encode(char output[], const uint8_t input[], size_t input_length, bool uppercase)