Browse Source

try recently connected SSU2 address if no other transports found

pull/2117/head
orignal 1 month ago
parent
commit
26901e2945
  1. 2
      libi2pd/SSU2.cpp
  2. 25
      libi2pd/Transports.cpp

2
libi2pd/SSU2.cpp

@ -884,7 +884,7 @@ namespace transport
if (!isValidEndpoint && router->GetProfile ()->HasLastEndpoint (address->IsV4 ())) if (!isValidEndpoint && router->GetProfile ()->HasLastEndpoint (address->IsV4 ()))
{ {
// router doesn't publish endpoint, but we connected before and hole punch might be alive // router doesn't publish endpoint, but we connected before and hole punch might be alive
const auto& ep = router->GetProfile ()->GetLastEndpoint (); auto ep = router->GetProfile ()->GetLastEndpoint ();
if (IsConnectedRecently (ep)) if (IsConnectedRecently (ep))
{ {
if (CheckPendingOutgoingSession (ep, peerTest)) return false; if (CheckPendingOutgoingSession (ep, peerTest)) return false;

25
libi2pd/Transports.cpp

@ -672,6 +672,31 @@ namespace transport
if (transport & compatibleTransports) if (transport & compatibleTransports)
peer->priority.push_back (transport); peer->priority.push_back (transport);
} }
if (peer->priority.empty ())
{
// try recently connected SSU2 if any
auto supportedTransports = context.GetRouterInfo ().GetCompatibleTransports (false) &
peer->router->GetCompatibleTransports (false);
if (supportedTransports & (i2p::data::RouterInfo::eSSU2V4 | i2p::data::RouterInfo::eSSU2V6))
{
auto ep = peer->router->GetProfile ()->GetLastEndpoint ();
if (!ep.address ().is_unspecified () && ep.port ())
{
if (ep.address ().is_v4 ())
{
if ((supportedTransports & i2p::data::RouterInfo::eSSU2V4) &&
m_SSU2Server->IsConnectedRecently (ep))
peer->priority.push_back (i2p::data::RouterInfo::eSSU2V4);
}
else if (ep.address ().is_v6 ())
{
if ((supportedTransports & i2p::data::RouterInfo::eSSU2V6) &&
m_SSU2Server->IsConnectedRecently (ep))
peer->priority.push_back (i2p::data::RouterInfo::eSSU2V6);
}
}
}
}
} }
void Transports::RequestComplete (std::shared_ptr<const i2p::data::RouterInfo> r, const i2p::data::IdentHash& ident) void Transports::RequestComplete (std::shared_ptr<const i2p::data::RouterInfo> r, const i2p::data::IdentHash& ident)

Loading…
Cancel
Save