mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
store SAMSession by pointer
This commit is contained in:
parent
8b05455545
commit
b007b66b15
19
SAM.cpp
19
SAM.cpp
@ -30,6 +30,7 @@ namespace client
|
|||||||
|
|
||||||
void SAMSocket::CloseStream ()
|
void SAMSocket::CloseStream ()
|
||||||
{
|
{
|
||||||
|
m_SocketType = eSAMSocketTypeTerminated;
|
||||||
if (m_Stream)
|
if (m_Stream)
|
||||||
{
|
{
|
||||||
m_Stream->Close ();
|
m_Stream->Close ();
|
||||||
@ -568,7 +569,8 @@ namespace client
|
|||||||
LogPrint (eLogWarning, "Datagram size ", len," exceeds buffer");
|
LogPrint (eLogWarning, "Datagram size ", len," exceeds buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
SAMSession::SAMSession (ClientDestination * localDestination)
|
SAMSession::SAMSession (ClientDestination * dest):
|
||||||
|
localDestination (dest)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -595,7 +597,8 @@ namespace client
|
|||||||
|
|
||||||
SAMBridge::~SAMBridge ()
|
SAMBridge::~SAMBridge ()
|
||||||
{
|
{
|
||||||
Stop ();
|
if (m_IsRunning)
|
||||||
|
Stop ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SAMBridge::Start ()
|
void SAMBridge::Start ()
|
||||||
@ -611,6 +614,8 @@ namespace client
|
|||||||
m_IsRunning = false;
|
m_IsRunning = false;
|
||||||
m_Acceptor.cancel ();
|
m_Acceptor.cancel ();
|
||||||
m_DatagramSocket.cancel ();
|
m_DatagramSocket.cancel ();
|
||||||
|
for (auto it: m_Sessions)
|
||||||
|
delete it.second;
|
||||||
m_Sessions.clear ();
|
m_Sessions.clear ();
|
||||||
m_Service.stop ();
|
m_Service.stop ();
|
||||||
if (m_Thread)
|
if (m_Thread)
|
||||||
@ -683,10 +688,10 @@ namespace client
|
|||||||
if (localDestination)
|
if (localDestination)
|
||||||
{
|
{
|
||||||
std::unique_lock<std::mutex> l(m_SessionsMutex);
|
std::unique_lock<std::mutex> l(m_SessionsMutex);
|
||||||
auto ret = m_Sessions.insert (std::pair<std::string, SAMSession>(id, SAMSession (localDestination)));
|
auto ret = m_Sessions.insert (std::pair<std::string, SAMSession *>(id, new SAMSession (localDestination)));
|
||||||
if (!ret.second)
|
if (!ret.second)
|
||||||
LogPrint ("Session ", id, " already exists");
|
LogPrint ("Session ", id, " already exists");
|
||||||
return &(ret.first->second);
|
return ret.first->second;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -697,8 +702,10 @@ namespace client
|
|||||||
auto it = m_Sessions.find (id);
|
auto it = m_Sessions.find (id);
|
||||||
if (it != m_Sessions.end ())
|
if (it != m_Sessions.end ())
|
||||||
{
|
{
|
||||||
it->second.CloseStreams ();
|
auto session = it->second;
|
||||||
|
session->CloseStreams ();
|
||||||
m_Sessions.erase (it);
|
m_Sessions.erase (it);
|
||||||
|
delete session;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -707,7 +714,7 @@ namespace client
|
|||||||
std::unique_lock<std::mutex> l(m_SessionsMutex);
|
std::unique_lock<std::mutex> l(m_SessionsMutex);
|
||||||
auto it = m_Sessions.find (id);
|
auto it = m_Sessions.find (id);
|
||||||
if (it != m_Sessions.end ())
|
if (it != m_Sessions.end ())
|
||||||
return &it->second;
|
return it->second;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
SAM.h
2
SAM.h
@ -173,7 +173,7 @@ namespace client
|
|||||||
boost::asio::ip::udp::endpoint m_DatagramEndpoint, m_SenderEndpoint;
|
boost::asio::ip::udp::endpoint m_DatagramEndpoint, m_SenderEndpoint;
|
||||||
boost::asio::ip::udp::socket m_DatagramSocket;
|
boost::asio::ip::udp::socket m_DatagramSocket;
|
||||||
std::mutex m_SessionsMutex;
|
std::mutex m_SessionsMutex;
|
||||||
std::map<std::string, SAMSession> m_Sessions;
|
std::map<std::string, SAMSession *> m_Sessions;
|
||||||
uint8_t m_DatagramReceiveBuffer[i2p::datagram::MAX_DATAGRAM_SIZE+1];
|
uint8_t m_DatagramReceiveBuffer[i2p::datagram::MAX_DATAGRAM_SIZE+1];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user