don't reply to DatabaseStore messages extracted from transit

This commit is contained in:
orignal 2023-04-21 21:31:14 -04:00
parent 5769a41208
commit c34df2090c
2 changed files with 20 additions and 6 deletions

View File

@ -586,10 +586,16 @@ namespace tunnel
auto typeID = msg->GetTypeID ();
LogPrint (eLogDebug, "Tunnel: Gateway of ", (int) len, " bytes for tunnel ", tunnel->GetTunnelID (), ", msg type ", (int)typeID);
if (IsRouterInfoMsg (msg) || typeID == eI2NPDatabaseSearchReply)
// transit DatabaseStore my contain new/updated RI
// or DatabaseSearchReply with new routers
if (typeID == eI2NPDatabaseSearchReply)
// DatabaseSearchReply with new routers
i2p::data::netdb.PostI2NPMsg (CopyI2NPMessage (msg));
else if (IsRouterInfoMsg (msg))
{
// transit DatabaseStore might contain new/updated RI
auto m = CopyI2NPMessage (msg);
memset (m->GetPayload () + DATABASE_STORE_REPLY_TOKEN_OFFSET, 0, 4); // no reply
i2p::data::netdb.PostI2NPMsg (m);
}
tunnel->SendTunnelDataMsg (msg);
}

View File

@ -324,9 +324,17 @@ namespace tunnel
uint8_t typeID = msg.data->GetTypeID ();
LogPrint (eLogDebug, "TunnelMessage: Handle fragment of ", msg.data->GetLength (), " bytes, msg type ", (int)typeID);
// catch RI or reply with new list of routers
if ((IsRouterInfoMsg (msg.data) || typeID == eI2NPDatabaseSearchReply) &&
!m_IsInbound && msg.deliveryType != eDeliveryTypeLocal)
i2p::data::netdb.PostI2NPMsg (CopyI2NPMessage (msg.data));
if (!m_IsInbound && msg.deliveryType != eDeliveryTypeLocal)
{
if (typeID == eI2NPDatabaseSearchReply)
i2p::data::netdb.PostI2NPMsg (CopyI2NPMessage (msg.data));
else if (IsRouterInfoMsg (msg.data))
{
auto m = CopyI2NPMessage (msg.data);
memset (m->GetPayload () + DATABASE_STORE_REPLY_TOKEN_OFFSET, 0, 4); // no reply
i2p::data::netdb.PostI2NPMsg (m);
}
}
switch (msg.deliveryType)
{