diff --git a/libi2pd/RouterInfo.cpp b/libi2pd/RouterInfo.cpp index 5e1479f8..b20f0d07 100644 --- a/libi2pd/RouterInfo.cpp +++ b/libi2pd/RouterInfo.cpp @@ -896,13 +896,13 @@ namespace data }); } - std::shared_ptr RouterInfo::GetSSU2AddressWithStaticKey (const uint8_t * key) const + std::shared_ptr RouterInfo::GetSSU2AddressWithStaticKey (const uint8_t * key, bool isV6) const { if (!key) return nullptr; return GetAddress ( - [key](std::shared_ptr address)->bool + [key, isV6](std::shared_ptr address)->bool { - return address->IsSSU2 () && !memcmp (address->s, key, 32); + return address->IsSSU2 () && !memcmp (address->s, key, 32) && address->IsV6 () == isV6; }); } diff --git a/libi2pd/RouterInfo.h b/libi2pd/RouterInfo.h index a77abd17..c400d7f5 100644 --- a/libi2pd/RouterInfo.h +++ b/libi2pd/RouterInfo.h @@ -184,7 +184,7 @@ namespace data virtual void ClearProperties () {}; Addresses& GetAddresses () { return *m_Addresses; }; // should be called for local RI only, otherwise must return shared_ptr std::shared_ptr GetNTCP2AddressWithStaticKey (const uint8_t * key) const; - std::shared_ptr GetSSU2AddressWithStaticKey (const uint8_t * key) const; + std::shared_ptr GetSSU2AddressWithStaticKey (const uint8_t * key, bool isV6) const; std::shared_ptr GetPublishedNTCP2V4Address () const; std::shared_ptr GetPublishedNTCP2V6Address () const; std::shared_ptr GetSSUAddress (bool v4only = true) const; diff --git a/libi2pd/SSU2.cpp b/libi2pd/SSU2.cpp index 96541ea7..1c6aeb3b 100644 --- a/libi2pd/SSU2.cpp +++ b/libi2pd/SSU2.cpp @@ -384,7 +384,7 @@ namespace transport return false; } SetRemoteIdentity (ri->GetRouterIdentity ()); - m_Address = ri->GetSSU2AddressWithStaticKey (S); + m_Address = ri->GetSSU2AddressWithStaticKey (S, m_RemoteEndpoint.address ().is_v6 ()); if (!m_Address) { LogPrint (eLogError, "SSU2: No SSU2 address with static key found in SessionConfirmed");