diff --git a/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java b/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java index feac9d75f..24aec9447 100644 --- a/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java +++ b/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java @@ -43,17 +43,23 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { private static final long LOOKUP_THROTTLE_MAX = 50; public DatabaseLookupMessage(I2PAppContext context) { + this(context, false); + } + public DatabaseLookupMessage(I2PAppContext context, boolean locallyCreated) { super(context); setSearchKey(null); setFrom(null); setDontIncludePeers(null); context.statManager().createRateStat("router.throttleNetDbDoSSend", "How many netDb lookup messages we are sending during a period with a DoS detected", "Throttle", new long[] { 60*1000, 10*60*1000, 60*60*1000, 24*60*60*1000 }); - - // we do this in the writeMessage so we know that we have all the data - int dosCount = detectDoS(context); - if (dosCount > 0) { - _log.log(Log.CRIT, "Are we flooding the network with NetDb messages? (" + dosCount + " messages so far)", new Exception("Flood cause")); + + // only check DoS generation if we are creating the message... + if (locallyCreated) { + // we do this in the writeMessage so we know that we have all the data + int dosCount = detectDoS(context); + if (dosCount > 0) { + _log.log(Log.CRIT, "Are we flooding the network with NetDb messages? (" + dosCount + " messages so far)", new Exception("Flood cause")); + } } } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java index 50087b10d..36588ee6a 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java @@ -68,7 +68,7 @@ class ExploreJob extends SearchJob { * @param expiration when the search should stop */ protected DatabaseLookupMessage buildMessage(TunnelId replyTunnelId, RouterInfo replyGateway, long expiration) { - DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext()); + DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext(), true); msg.setSearchKey(getState().getTarget()); msg.setFrom(replyGateway.getIdentity().getHash()); msg.setDontIncludePeers(getState().getAttempted()); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java index 566ac1312..4c2d0c707 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HarvesterJob.java @@ -108,7 +108,7 @@ class HarvesterJob extends JobImpl { */ private void harvest(Hash peer) { long now = getContext().clock().now(); - DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext()); + DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext(), true); msg.setFrom(getContext().routerHash()); msg.setMessageExpiration(new Date(10*1000+now)); msg.setSearchKey(peer); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java index dd9012afe..3f9fc08f6 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java @@ -355,7 +355,7 @@ class SearchJob extends JobImpl { * @param expiration when the search should stop */ protected DatabaseLookupMessage buildMessage(TunnelId replyTunnelId, RouterInfo replyGateway, long expiration) { - DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext()); + DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext(), true); msg.setSearchKey(_state.getTarget()); msg.setFrom(replyGateway.getIdentity().getHash()); msg.setDontIncludePeers(_state.getAttempted()); @@ -370,7 +370,7 @@ class SearchJob extends JobImpl { * */ protected DatabaseLookupMessage buildMessage(long expiration) { - DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext()); + DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext(), true); msg.setSearchKey(_state.getTarget()); msg.setFrom(getContext().routerHash()); msg.setDontIncludePeers(_state.getAttempted());