mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-01-22 04:04:16 +00:00
zero-hops outbound tunnels
This commit is contained in:
parent
0f56b1c943
commit
96a713afeb
54
Tunnel.cpp
54
Tunnel.cpp
@ -244,8 +244,7 @@ namespace tunnel
|
|||||||
block.deliveryType = eDeliveryTypeLocal;
|
block.deliveryType = eDeliveryTypeLocal;
|
||||||
block.data = msg;
|
block.data = msg;
|
||||||
|
|
||||||
std::unique_lock<std::mutex> l(m_SendMutex);
|
SendTunnelDataMsg ({block});
|
||||||
m_Gateway.SendTunnelDataMsg (block);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutboundTunnel::SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs)
|
void OutboundTunnel::SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs)
|
||||||
@ -268,6 +267,38 @@ namespace tunnel
|
|||||||
s << " ⇒ ";
|
s << " ⇒ ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZeroHopsOutboundTunnel::ZeroHopsOutboundTunnel ():
|
||||||
|
OutboundTunnel (std::make_shared<ZeroHopsTunnelConfig> ()),
|
||||||
|
m_NumSentBytes (0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZeroHopsOutboundTunnel::SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs)
|
||||||
|
{
|
||||||
|
for (auto& msg : msgs)
|
||||||
|
{
|
||||||
|
switch (msg.deliveryType)
|
||||||
|
{
|
||||||
|
case eDeliveryTypeLocal:
|
||||||
|
i2p::HandleI2NPMessage (msg.data);
|
||||||
|
break;
|
||||||
|
case eDeliveryTypeTunnel:
|
||||||
|
i2p::transport::transports.SendMessage (msg.hash, i2p::CreateTunnelGatewayMsg (msg.tunnelID, msg.data));
|
||||||
|
break;
|
||||||
|
case eDeliveryTypeRouter:
|
||||||
|
i2p::transport::transports.SendMessage (msg.hash, msg.data);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
LogPrint (eLogError, "Tunnel: Unknown delivery type ", (int)msg.deliveryType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ZeroHopsOutboundTunnel::Print (std::stringstream& s) const
|
||||||
|
{
|
||||||
|
s << GetTunnelID () << ":me ⇒ ";
|
||||||
|
}
|
||||||
|
|
||||||
Tunnels tunnels;
|
Tunnels tunnels;
|
||||||
|
|
||||||
Tunnels::Tunnels (): m_IsRunning (false), m_Thread (nullptr),
|
Tunnels::Tunnels (): m_IsRunning (false), m_Thread (nullptr),
|
||||||
@ -661,6 +692,7 @@ namespace tunnel
|
|||||||
{
|
{
|
||||||
LogPrint (eLogDebug, "Tunnel: Creating zero hops inbound tunnel");
|
LogPrint (eLogDebug, "Tunnel: Creating zero hops inbound tunnel");
|
||||||
CreateZeroHopsInboundTunnel ();
|
CreateZeroHopsInboundTunnel ();
|
||||||
|
CreateZeroHopsOutboundTunnel ();
|
||||||
if (!m_ExploratoryPool)
|
if (!m_ExploratoryPool)
|
||||||
{
|
{
|
||||||
m_ExploratoryPool = CreateTunnelPool (2, 2, 5, 5); // 2-hop exploratory, 5 tunnels
|
m_ExploratoryPool = CreateTunnelPool (2, 2, 5, 5); // 2-hop exploratory, 5 tunnels
|
||||||
@ -785,23 +817,17 @@ namespace tunnel
|
|||||||
|
|
||||||
void Tunnels::CreateZeroHopsInboundTunnel ()
|
void Tunnels::CreateZeroHopsInboundTunnel ()
|
||||||
{
|
{
|
||||||
/*CreateTunnel<InboundTunnel> (
|
|
||||||
std::make_shared<TunnelConfig> (std::vector<std::shared_ptr<const i2p::data::IdentityEx> >
|
|
||||||
{
|
|
||||||
i2p::context.GetIdentity ()
|
|
||||||
}));*/
|
|
||||||
auto inboundTunnel = std::make_shared<ZeroHopsInboundTunnel> ();
|
auto inboundTunnel = std::make_shared<ZeroHopsInboundTunnel> ();
|
||||||
m_InboundTunnels.push_back (inboundTunnel);
|
m_InboundTunnels.push_back (inboundTunnel);
|
||||||
m_Tunnels[inboundTunnel->GetTunnelID ()] = inboundTunnel;
|
m_Tunnels[inboundTunnel->GetTunnelID ()] = inboundTunnel;
|
||||||
|
|
||||||
// create paired outbound tunnel, TODO: move to separate function
|
|
||||||
CreateTunnel<OutboundTunnel> (
|
|
||||||
std::make_shared<TunnelConfig> (std::vector<std::shared_ptr<const i2p::data::IdentityEx> >
|
|
||||||
{
|
|
||||||
i2p::context.GetIdentity ()
|
|
||||||
}, inboundTunnel->GetNextTunnelID (), inboundTunnel->GetNextIdentHash ()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Tunnels::CreateZeroHopsOutboundTunnel ()
|
||||||
|
{
|
||||||
|
m_OutboundTunnels.push_back (std::make_shared<ZeroHopsOutboundTunnel> ());
|
||||||
|
// we don't insert into m_Tunnels
|
||||||
|
}
|
||||||
|
|
||||||
int Tunnels::GetTransitTunnelsExpirationTimeout ()
|
int Tunnels::GetTransitTunnelsExpirationTimeout ()
|
||||||
{
|
{
|
||||||
int timeout = 0;
|
int timeout = 0;
|
||||||
|
21
Tunnel.h
21
Tunnel.h
@ -100,9 +100,9 @@ namespace tunnel
|
|||||||
Tunnel (config), m_Gateway (this), m_EndpointIdentHash (config->GetLastIdentHash ()) {};
|
Tunnel (config), m_Gateway (this), m_EndpointIdentHash (config->GetLastIdentHash ()) {};
|
||||||
|
|
||||||
void SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, std::shared_ptr<i2p::I2NPMessage> msg);
|
void SendTunnelDataMsg (const uint8_t * gwHash, uint32_t gwTunnel, std::shared_ptr<i2p::I2NPMessage> msg);
|
||||||
void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs); // multiple messages
|
virtual void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs); // multiple messages
|
||||||
const i2p::data::IdentHash& GetEndpointIdentHash () const { return m_EndpointIdentHash; };
|
const i2p::data::IdentHash& GetEndpointIdentHash () const { return m_EndpointIdentHash; };
|
||||||
size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); };
|
virtual size_t GetNumSentBytes () const { return m_Gateway.GetNumSentBytes (); };
|
||||||
void Print (std::stringstream& s) const;
|
void Print (std::stringstream& s) const;
|
||||||
|
|
||||||
// implements TunnelBase
|
// implements TunnelBase
|
||||||
@ -143,6 +143,20 @@ namespace tunnel
|
|||||||
size_t m_NumReceivedBytes;
|
size_t m_NumReceivedBytes;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class ZeroHopsOutboundTunnel: public OutboundTunnel
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
ZeroHopsOutboundTunnel ();
|
||||||
|
void SendTunnelDataMsg (const std::vector<TunnelMessageBlock>& msgs);
|
||||||
|
void Print (std::stringstream& s) const;
|
||||||
|
size_t GetNumSentBytes () const { return m_NumSentBytes; };
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
size_t m_NumSentBytes;
|
||||||
|
};
|
||||||
|
|
||||||
class Tunnels
|
class Tunnels
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -191,7 +205,8 @@ namespace tunnel
|
|||||||
void ManageTunnelPools ();
|
void ManageTunnelPools ();
|
||||||
|
|
||||||
void CreateZeroHopsInboundTunnel ();
|
void CreateZeroHopsInboundTunnel ();
|
||||||
|
void CreateZeroHopsOutboundTunnel ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
bool m_IsRunning;
|
bool m_IsRunning;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user