From e7126908f928285811d1ebefec1b49dba1b242c8 Mon Sep 17 00:00:00 2001 From: orignal Date: Sun, 10 Aug 2014 09:04:17 -0400 Subject: [PATCH] exploratory improvement --- I2NPProtocol.cpp | 6 ++++-- NetDb.cpp | 12 ++++++++++++ TunnelEndpoint.cpp | 5 +++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/I2NPProtocol.cpp b/I2NPProtocol.cpp index 7e1e78d7..13f4c154 100644 --- a/I2NPProtocol.cpp +++ b/I2NPProtocol.cpp @@ -463,9 +463,11 @@ namespace i2p msg->offset += sizeof (I2NPHeader) + sizeof (TunnelGatewayHeader); msg->len = msg->offset + len; LogPrint ("TunnelGateway of ", (int)len, " bytes for tunnel ", (unsigned int)tunnelID, ". Msg type ", (int)msg->GetHeader()->typeID); - if (msg->GetHeader()->typeID == eI2NPDatabaseStore) + if (msg->GetHeader()->typeID == eI2NPDatabaseStore || + msg->GetHeader()->typeID == eI2NPDatabaseSearchReply) { - // transit DatabaseStore my contain new/updated RI + // transit DatabaseStore my contain new/updated RI + // or DatabaseSearchReply with new routers auto ds = NewI2NPMessage (); *ds = *msg; i2p::data::netdb.PostI2NPMsg (ds); diff --git a/NetDb.cpp b/NetDb.cpp index 81e7d984..765ec76c 100644 --- a/NetDb.cpp +++ b/NetDb.cpp @@ -559,7 +559,19 @@ namespace data } } else + { LogPrint ("Requested destination for ", key, " not found"); + // it might contain new routers + for (int i = 0; i < num; i++) + { + IdentHash router (buf + 33 + i*32); + if (!FindRouter (router)) + { + LogPrint ("New router ", router.ToBase64 (), " found. Request it"); + RequestDestination (router); + } + } + } i2p::DeleteI2NPMessage (msg); } diff --git a/TunnelEndpoint.cpp b/TunnelEndpoint.cpp index 254c56ab..5bb31f07 100644 --- a/TunnelEndpoint.cpp +++ b/TunnelEndpoint.cpp @@ -203,9 +203,10 @@ namespace tunnel // to somebody else if (!m_IsInbound) // outbound transit tunnel { - if (msg.data->GetHeader()->typeID == eI2NPDatabaseStore) + if (msg.data->GetHeader()->typeID == eI2NPDatabaseStore || + msg.data->GetHeader()->typeID == eI2NPDatabaseSearchReply ) { - // catch RI + // catch RI or reply with new list of routers auto ds = NewI2NPMessage (); *ds = *(msg.data); i2p::data::netdb.PostI2NPMsg (ds);