mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-03-21 16:49:10 +01:00
use TransportSession for sending messages
This commit is contained in:
parent
4d25634b66
commit
d8942a3359
2 changed files with 23 additions and 20 deletions
|
@ -6,6 +6,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "Identity.h"
|
#include "Identity.h"
|
||||||
#include "RouterInfo.h"
|
#include "RouterInfo.h"
|
||||||
|
#include "I2NPProtocol.h"
|
||||||
|
|
||||||
namespace i2p
|
namespace i2p
|
||||||
{
|
{
|
||||||
|
@ -64,6 +65,8 @@ namespace transport
|
||||||
std::shared_ptr<const i2p::data::RouterInfo> GetRemoteRouter () { return m_RemoteRouter; };
|
std::shared_ptr<const i2p::data::RouterInfo> GetRemoteRouter () { return m_RemoteRouter; };
|
||||||
const i2p::data::IdentityEx& GetRemoteIdentity () { return m_RemoteIdentity; };
|
const i2p::data::IdentityEx& GetRemoteIdentity () { return m_RemoteIdentity; };
|
||||||
|
|
||||||
|
virtual void SendI2NPMessage (I2NPMessage * msg) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
std::shared_ptr<const i2p::data::RouterInfo> m_RemoteRouter;
|
std::shared_ptr<const i2p::data::RouterInfo> m_RemoteRouter;
|
||||||
|
|
|
@ -285,27 +285,26 @@ namespace transport
|
||||||
|
|
||||||
void Transports::SendMessage (const i2p::data::IdentHash& ident, i2p::I2NPMessage * msg)
|
void Transports::SendMessage (const i2p::data::IdentHash& ident, i2p::I2NPMessage * msg)
|
||||||
{
|
{
|
||||||
if (ident == i2p::context.GetRouterInfo ().GetIdentHash ())
|
|
||||||
// we send it to ourself
|
|
||||||
i2p::HandleI2NPMessage (msg);
|
|
||||||
else
|
|
||||||
m_Service.post (boost::bind (&Transports::PostMessage, this, ident, msg));
|
m_Service.post (boost::bind (&Transports::PostMessage, this, ident, msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
if (ident == i2p::context.GetRouterInfo ().GetIdentHash ())
|
||||||
if (session)
|
{
|
||||||
session->SendI2NPMessage (msg);
|
// we send it to ourself
|
||||||
else
|
i2p::HandleI2NPMessage (msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::shared_ptr<TransportSession> session = FindNTCPSession (ident);
|
||||||
|
if (!session)
|
||||||
{
|
{
|
||||||
auto r = netdb.FindRouter (ident);
|
auto r = netdb.FindRouter (ident);
|
||||||
if (r)
|
if (r)
|
||||||
{
|
{
|
||||||
auto ssuSession = m_SSUServer ? m_SSUServer->FindSession (r) : nullptr;
|
if (m_SSUServer)
|
||||||
if (ssuSession)
|
session = m_SSUServer->FindSession (r);
|
||||||
ssuSession->SendI2NPMessage (msg);
|
if (!session)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// existing session not found. create new
|
// existing session not found. create new
|
||||||
// try NTCP first if message size < 16K
|
// try NTCP first if message size < 16K
|
||||||
|
@ -314,16 +313,15 @@ namespace transport
|
||||||
{
|
{
|
||||||
auto s = std::make_shared<NTCPSession> (m_Service, r);
|
auto s = std::make_shared<NTCPSession> (m_Service, r);
|
||||||
AddNTCPSession (s);
|
AddNTCPSession (s);
|
||||||
s->SendI2NPMessage (msg);
|
session = s;
|
||||||
Connect (address->host, address->port, s);
|
Connect (address->host, address->port, s);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// then SSU
|
// then SSU
|
||||||
auto s = m_SSUServer ? m_SSUServer->GetSession (r) : nullptr;
|
if (m_SSUServer)
|
||||||
if (s)
|
session = m_SSUServer->GetSession (r);
|
||||||
s->SendI2NPMessage (msg);
|
if (!session)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
LogPrint ("No NTCP and SSU addresses available");
|
LogPrint ("No NTCP and SSU addresses available");
|
||||||
DeleteI2NPMessage (msg);
|
DeleteI2NPMessage (msg);
|
||||||
|
@ -341,6 +339,8 @@ namespace transport
|
||||||
this, boost::asio::placeholders::error, resendTimer, ident, msg));
|
this, boost::asio::placeholders::error, resendTimer, ident, msg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (session)
|
||||||
|
session->SendI2NPMessage (msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Transports::HandleResendTimer (const boost::system::error_code& ecode,
|
void Transports::HandleResendTimer (const boost::system::error_code& ecode,
|
||||||
|
|
Loading…
Add table
Reference in a new issue