From bc2cdd6c01e477939a62359d1479144de9b4b25a Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 12 Mar 2026 20:46:06 -0400 Subject: [PATCH] update published pq param from config --- libi2pd/RouterContext.cpp | 6 ++++-- libi2pd/RouterContext.h | 2 +- libi2pd/SSU2Session.cpp | 4 ++-- libi2pd/Transports.cpp | 8 ++++++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/libi2pd/RouterContext.cpp b/libi2pd/RouterContext.cpp index a57fa5a7..16d70e7c 100644 --- a/libi2pd/RouterContext.cpp +++ b/libi2pd/RouterContext.cpp @@ -472,7 +472,7 @@ namespace i2p } } - void RouterContext::PublishSSU2Address (int port, bool publish, bool v4, bool v6) + void RouterContext::PublishSSU2Address (int port, bool publish, bool v4, bool v6, int version) { if (!m_SSU2Keys) return; auto addresses = m_RouterInfo.GetAddresses (); @@ -491,12 +491,14 @@ namespace i2p bool updated = false; for (auto& address : *addresses) { - if (address && address->IsSSU2 () && (!address->port || address->port != port || address->published != publish) && + if (address && address->IsSSU2 () && (!address->port || address->port != port || + address->published != publish || address->v != version) && ((v4 && address->IsV4 ()) || (v6 && address->IsV6 ()))) { if (port) address->port = port; else if (!address->port) address->port = newPort; address->published = publish; + address->v = version; if (publish) { UpdateSSU2AddressCapsTesting (address, true); diff --git a/libi2pd/RouterContext.h b/libi2pd/RouterContext.h index 2600f4d2..ab87e148 100644 --- a/libi2pd/RouterContext.h +++ b/libi2pd/RouterContext.h @@ -153,7 +153,7 @@ namespace garlic void UpdatePort (int port); // called from Daemon void UpdateAddress (const boost::asio::ip::address& host); // called from SSU2 or Daemon void PublishNTCP2Address (int port, bool publish, bool v4, bool v6, bool ygg, int version); - void PublishSSU2Address (int port, bool publish, bool v4, bool v6); + void PublishSSU2Address (int port, bool publish, bool v4, bool v6, int version); bool AddSSU2Introducer (const i2p::data::RouterInfo::Introducer& introducer, bool v4); void RemoveSSU2Introducer (const i2p::data::IdentHash& h, bool v4); void UpdateSSU2Introducer (const i2p::data::IdentHash& h, bool v4, uint32_t iTag, uint32_t iExp); diff --git a/libi2pd/SSU2Session.cpp b/libi2pd/SSU2Session.cpp index 16f75f57..1b38d7c5 100644 --- a/libi2pd/SSU2Session.cpp +++ b/libi2pd/SSU2Session.cpp @@ -2032,7 +2032,7 @@ namespace transport { i2p::context.SetError (eRouterErrorFullConeNAT); // TODO: Full-Cone NAT detection isn't working. // i2p::context.PublishNTCP2Address (TCP_PORT, true, true, false, false); // TODO: TCP_PORT to be filled similar to ep.port() - i2p::context.PublishSSU2Address (ep.port(), true, true, false); + i2p::context.PublishSSU2Address (ep.port(), true, true, false, m_Server.GetVersion ()); } } else @@ -2043,7 +2043,7 @@ namespace transport { i2p::context.SetErrorV6 (eRouterErrorFullConeNAT); // i2p::context.PublishNTCP2Address (TCP_PORT, true, false, true, false); // TODO: TCP_PORT to be filled similar to ep.port() - i2p::context.PublishSSU2Address (ep.port(), true, false, true); + i2p::context.PublishSSU2Address (ep.port(), true, false, true, m_Server.GetVersion ()); } } } diff --git a/libi2pd/Transports.cpp b/libi2pd/Transports.cpp index 1337fb95..505c96be 100644 --- a/libi2pd/Transports.cpp +++ b/libi2pd/Transports.cpp @@ -1482,14 +1482,18 @@ namespace transport ssu2 = false; // don't enable ssu2 for yggdrasil only router if (ssu2) { + int ssu2version = 2; +#if OPENSSL_PQ + i2p::config::GetOption("ssu2.version", ssu2version); +#endif uint16_t ssu2port; i2p::config::GetOption("ssu2.port", ssu2port); if (!ssu2port && port) ssu2port = port; bool published = false; if (!stan) i2p::config::GetOption("ssu2.published", published); if (published) - i2p::context.PublishSSU2Address (ssu2port, true, ipv4, ipv6); // publish + i2p::context.PublishSSU2Address (ssu2port, true, ipv4, ipv6, ssu2version); // publish else - i2p::context.PublishSSU2Address (ssu2port, false, ipv4, ipv6); // unpublish + i2p::context.PublishSSU2Address (ssu2port, false, ipv4, ipv6, ssu2version); // unpublish } if (stan) i2p::context.SetStatus (eRouterStatusStan);