Browse Source

don't reply to DatabaseStore messages extracted from transit

pull/1919/head
orignal 2 years ago
parent
commit
c34df2090c
  1. 12
      libi2pd/Tunnel.cpp
  2. 14
      libi2pd/TunnelEndpoint.cpp

12
libi2pd/Tunnel.cpp

@ -586,10 +586,16 @@ namespace tunnel
auto typeID = msg->GetTypeID (); auto typeID = msg->GetTypeID ();
LogPrint (eLogDebug, "Tunnel: Gateway of ", (int) len, " bytes for tunnel ", tunnel->GetTunnelID (), ", msg type ", (int)typeID); LogPrint (eLogDebug, "Tunnel: Gateway of ", (int) len, " bytes for tunnel ", tunnel->GetTunnelID (), ", msg type ", (int)typeID);
if (IsRouterInfoMsg (msg) || typeID == eI2NPDatabaseSearchReply) if (typeID == eI2NPDatabaseSearchReply)
// transit DatabaseStore my contain new/updated RI // DatabaseSearchReply with new routers
// or DatabaseSearchReply with new routers
i2p::data::netdb.PostI2NPMsg (CopyI2NPMessage (msg)); 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); tunnel->SendTunnelDataMsg (msg);
} }

14
libi2pd/TunnelEndpoint.cpp

@ -324,9 +324,17 @@ namespace tunnel
uint8_t typeID = msg.data->GetTypeID (); uint8_t typeID = msg.data->GetTypeID ();
LogPrint (eLogDebug, "TunnelMessage: Handle fragment of ", msg.data->GetLength (), " bytes, msg type ", (int)typeID); LogPrint (eLogDebug, "TunnelMessage: Handle fragment of ", msg.data->GetLength (), " bytes, msg type ", (int)typeID);
// catch RI or reply with new list of routers // catch RI or reply with new list of routers
if ((IsRouterInfoMsg (msg.data) || typeID == eI2NPDatabaseSearchReply) && if (!m_IsInbound && msg.deliveryType != eDeliveryTypeLocal)
!m_IsInbound && msg.deliveryType != eDeliveryTypeLocal) {
i2p::data::netdb.PostI2NPMsg (CopyI2NPMessage (msg.data)); 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) switch (msg.deliveryType)
{ {

Loading…
Cancel
Save