mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
use existing SSU session if available
This commit is contained in:
parent
129052c330
commit
3ae225fb41
12
SSU.cpp
12
SSU.cpp
@ -796,6 +796,18 @@ namespace ssu
|
|||||||
LogPrint ("SSU receive error: ", ecode.message ());
|
LogPrint ("SSU receive error: ", ecode.message ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SSUSession * SSUServer::FindSession (const i2p::data::RouterInfo * router)
|
||||||
|
{
|
||||||
|
if (!router) return nullptr;
|
||||||
|
auto address = router->GetSSUAddress ();
|
||||||
|
if (!address) return nullptr;
|
||||||
|
auto it = m_Sessions.find (boost::asio::ip::udp::endpoint (address->host, address->port));
|
||||||
|
if (it != m_Sessions.end ())
|
||||||
|
return it->second;
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
SSUSession * SSUServer::GetSession (const i2p::data::RouterInfo * router)
|
SSUSession * SSUServer::GetSession (const i2p::data::RouterInfo * router)
|
||||||
{
|
{
|
||||||
SSUSession * session = nullptr;
|
SSUSession * session = nullptr;
|
||||||
|
1
SSU.h
1
SSU.h
@ -126,6 +126,7 @@ namespace ssu
|
|||||||
void Start ();
|
void Start ();
|
||||||
void Stop ();
|
void Stop ();
|
||||||
SSUSession * GetSession (const i2p::data::RouterInfo * router);
|
SSUSession * GetSession (const i2p::data::RouterInfo * router);
|
||||||
|
SSUSession * FindSession (const i2p::data::RouterInfo * router);
|
||||||
void DeleteSession (SSUSession * session);
|
void DeleteSession (SSUSession * session);
|
||||||
void DeleteAllSessions ();
|
void DeleteAllSessions ();
|
||||||
|
|
||||||
|
@ -156,34 +156,36 @@ namespace i2p
|
|||||||
void Transports::PostMessage (const i2p::data::IdentHash& ident, i2p::I2NPMessage * msg)
|
void Transports::PostMessage (const i2p::data::IdentHash& ident, i2p::I2NPMessage * msg)
|
||||||
{
|
{
|
||||||
auto session = FindNTCPSession (ident);
|
auto session = FindNTCPSession (ident);
|
||||||
if (!session)
|
if (session)
|
||||||
|
session->SendI2NPMessage (msg);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
RouterInfo * r = netdb.FindRouter (ident);
|
RouterInfo * r = netdb.FindRouter (ident);
|
||||||
if (r)
|
if (r)
|
||||||
{
|
{
|
||||||
auto address = r->GetNTCPAddress ();
|
auto ssuSession = m_SSUServer ? m_SSUServer->FindSession (r) : nullptr;
|
||||||
if (address)
|
if (ssuSession)
|
||||||
{
|
ssuSession->SendI2NPMessage (msg);
|
||||||
session = new i2p::ntcp::NTCPClient (m_Service, address->host, address->port, *r);
|
|
||||||
AddNTCPSession (session);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// SSU always have lower prioprity than NTCP
|
// existing session not found. create new
|
||||||
// TODO: it shouldn't
|
// try NTCP first
|
||||||
LogPrint ("No NTCP addresses available. Trying SSU");
|
auto address = r->GetNTCPAddress ();
|
||||||
address = r->GetSSUAddress ();
|
if (address)
|
||||||
if (address && m_SSUServer)
|
{
|
||||||
{
|
auto s = new i2p::ntcp::NTCPClient (m_Service, address->host, address->port, *r);
|
||||||
auto s = m_SSUServer->GetSession (r);
|
AddNTCPSession (s);
|
||||||
if (s)
|
s->SendI2NPMessage (msg);
|
||||||
{
|
}
|
||||||
s->SendI2NPMessage (msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
LogPrint ("No SSU addresses available");
|
{
|
||||||
|
// then SSU
|
||||||
|
auto s = m_SSUServer ? m_SSUServer->GetSession (r) : nullptr;
|
||||||
|
if (s)
|
||||||
|
s->SendI2NPMessage (msg);
|
||||||
|
else
|
||||||
|
LogPrint ("No NTCP and SSU addresses available");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -192,10 +194,6 @@ namespace i2p
|
|||||||
i2p::data::netdb.RequestDestination (ident);
|
i2p::data::netdb.RequestDestination (ident);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (session)
|
|
||||||
session->SendI2NPMessage (msg);
|
|
||||||
else
|
|
||||||
LogPrint ("Session not found");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transports::DetectExternalIP ()
|
void Transports::DetectExternalIP ()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user