From 1cc68ea402c26d41d84d1227288a65be224fdf48 Mon Sep 17 00:00:00 2001 From: orignal Date: Sat, 7 Jan 2023 12:06:26 -0500 Subject: [PATCH] differentiate symmetric and full cone NAT --- daemon/HTTPServer.cpp | 3 +++ libi2pd/SSU2Session.cpp | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/daemon/HTTPServer.cpp b/daemon/HTTPServer.cpp index 281d3d53..dcd4f7f7 100644 --- a/daemon/HTTPServer.cpp +++ b/daemon/HTTPServer.cpp @@ -245,6 +245,9 @@ namespace http { case eRouterErrorSymmetricNAT: s << " - " << tr("Symmetric NAT"); break; + case eRouterErrorFullConeNAT: + s << " - " << tr("Full cone NAT"); + break; case eRouterErrorNoDescriptors: s << " - " << tr("No Descriptors"); break; diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index cef67ea1..d10c694c 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -1668,23 +1668,25 @@ namespace transport LogPrint (eLogInfo, "SSU2: Our port ", ep.port (), " received from ", m_RemoteEndpoint, " is different from ", m_Server.GetPort (isV4)); if (isV4) { - if (i2p::context.GetStatus () == eRouterStatusTesting || - m_State == eSSU2SessionStatePeerTest) + if (i2p::context.GetStatus () == eRouterStatusTesting) { i2p::context.SetStatus (eRouterStatusFirewalled); i2p::context.SetError (eRouterErrorSymmetricNAT); m_Server.RescheduleIntroducersUpdateTimer (); } + else if (m_State == eSSU2SessionStatePeerTest) + i2p::context.SetError (eRouterErrorFullConeNAT); } else { - if (i2p::context.GetStatusV6 () == eRouterStatusTesting || - m_State == eSSU2SessionStatePeerTest) + if (i2p::context.GetStatusV6 () == eRouterStatusTesting) { i2p::context.SetStatusV6 (eRouterStatusFirewalled); i2p::context.SetErrorV6 (eRouterErrorSymmetricNAT); m_Server.RescheduleIntroducersUpdateTimerV6 (); } + else if (m_State == eSSU2SessionStatePeerTest) + i2p::context.SetErrorV6 (eRouterErrorFullConeNAT); } } else @@ -1697,6 +1699,8 @@ namespace transport i2p::context.SetStatus (eRouterStatusOK); i2p::context.SetError (eRouterErrorNone); } + else if (i2p::context.GetError () == eRouterErrorFullConeNAT) + i2p::context.SetError (eRouterErrorNone); } else { @@ -1706,6 +1710,8 @@ namespace transport i2p::context.SetStatusV6 (eRouterStatusOK); i2p::context.SetErrorV6 (eRouterErrorNone); } + else if (i2p::context.GetErrorV6 () == eRouterErrorFullConeNAT) + i2p::context.SetErrorV6 (eRouterErrorNone); } } }