mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-23 17:36:37 +02:00
don't connect to unpublished NTCP2 addresses
This commit is contained in:
parent
910a9600bd
commit
e0790700cd
4 changed files with 6 additions and 3 deletions
|
@ -590,7 +590,7 @@ namespace transport
|
||||||
uint8_t * decrypted = new uint8_t[m_NextReceivedLen];
|
uint8_t * decrypted = new uint8_t[m_NextReceivedLen];
|
||||||
if (i2p::crypto::AEADChaCha20Poly1305 (m_NextReceivedBuffer, m_NextReceivedLen-16, nullptr, 0, m_ReceiveKey, nonce, decrypted, m_NextReceivedLen, false))
|
if (i2p::crypto::AEADChaCha20Poly1305 (m_NextReceivedBuffer, m_NextReceivedLen-16, nullptr, 0, m_ReceiveKey, nonce, decrypted, m_NextReceivedLen, false))
|
||||||
{
|
{
|
||||||
LogPrint (eLogInfo, "NTCP2: received message decrypted");
|
LogPrint (eLogDebug, "NTCP2: received message decrypted");
|
||||||
ProcessNextFrame (decrypted, m_NextReceivedLen-16);
|
ProcessNextFrame (decrypted, m_NextReceivedLen-16);
|
||||||
ReceiveLength ();
|
ReceiveLength ();
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,6 +259,7 @@ namespace data
|
||||||
if (!address->ntcp2) address->ntcp2.reset (new NTCP2Ext ());
|
if (!address->ntcp2) address->ntcp2.reset (new NTCP2Ext ());
|
||||||
supportedTransports |= (address->host.is_v4 ()) ? eNTCP2V4 : eNTCP2V6;
|
supportedTransports |= (address->host.is_v4 ()) ? eNTCP2V4 : eNTCP2V6;
|
||||||
Base64ToByteStream (value, strlen (value), address->ntcp2->iv, 16);
|
Base64ToByteStream (value, strlen (value), address->ntcp2->iv, 16);
|
||||||
|
address->ntcp2->isPublished = true; // presence if "i" means "published"
|
||||||
}
|
}
|
||||||
else if (key[0] == 'i')
|
else if (key[0] == 'i')
|
||||||
{
|
{
|
||||||
|
@ -292,7 +293,7 @@ namespace data
|
||||||
if (!s) return;
|
if (!s) return;
|
||||||
}
|
}
|
||||||
if (introducers) supportedTransports |= eSSUV4; // in case if host is not presented
|
if (introducers) supportedTransports |= eSSUV4; // in case if host is not presented
|
||||||
if (supportedTransports && !isNtcp2) // we ignore NTCP2 addresses for now. TODO:
|
if (supportedTransports && (!isNtcp2 || address->IsPublishedNTCP2 ())) // we ignore unpublished NTCP2 only addresses
|
||||||
{
|
{
|
||||||
addresses->push_back(address);
|
addresses->push_back(address);
|
||||||
m_SupportedTransports |= supportedTransports;
|
m_SupportedTransports |= supportedTransports;
|
||||||
|
|
|
@ -94,6 +94,7 @@ namespace data
|
||||||
{
|
{
|
||||||
Tag<32> staticKey;
|
Tag<32> staticKey;
|
||||||
Tag<16> iv;
|
Tag<16> iv;
|
||||||
|
bool isPublished = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Address
|
struct Address
|
||||||
|
@ -124,6 +125,7 @@ namespace data
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsNTCP2 () const { return (bool)ntcp2; };
|
bool IsNTCP2 () const { return (bool)ntcp2; };
|
||||||
|
bool IsPublishedNTCP2 () const { return IsNTCP2 () && ntcp2->isPublished; };
|
||||||
};
|
};
|
||||||
typedef std::list<std::shared_ptr<Address> > Addresses;
|
typedef std::list<std::shared_ptr<Address> > Addresses;
|
||||||
|
|
||||||
|
|
|
@ -405,7 +405,7 @@ namespace transport
|
||||||
{
|
{
|
||||||
peer.numAttempts++;
|
peer.numAttempts++;
|
||||||
auto address = peer.router->GetNTCPAddress (!context.SupportsV6 ());
|
auto address = peer.router->GetNTCPAddress (!context.SupportsV6 ());
|
||||||
if (address && address->IsNTCP2 () && m_NTCP2Server) // NTCP2 have priority over NTCP if enabled
|
if (address && address->IsPublishedNTCP2 () && m_NTCP2Server) // NTCP2 have priority over NTCP if enabled
|
||||||
{
|
{
|
||||||
auto s = std::make_shared<NTCP2Session> (*m_NTCP2Server, peer.router);
|
auto s = std::make_shared<NTCP2Session> (*m_NTCP2Server, peer.router);
|
||||||
m_NTCP2Server->Connect (address->host, address->port, s);
|
m_NTCP2Server->Connect (address->host, address->port, s);
|
||||||
|
|
Loading…
Add table
Reference in a new issue