I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 0c520de6 authored by zzz's avatar zzz
Browse files

* HandleFloodfillDatabaseLookupMessageJob:

       - Send back your routerinfo with the DSRM if not ff to
         spread the word that you aren't ff anymore
       - Fix behavior when router.isHidden=true
parent 09b868e2
No related branches found
No related tags found
No related merge requests found
...@@ -82,7 +82,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl { ...@@ -82,7 +82,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
} }
// If we are hidden we should not get queries, log and return // If we are hidden we should not get queries, log and return
if (getContext().router().getRouterInfo().isHidden()) { if (getContext().router().isHidden()) {
if (_log.shouldLog(Log.ERROR)) { if (_log.shouldLog(Log.ERROR)) {
_log.error("Uninvited dbLookup received with replies going to " + fromKey _log.error("Uninvited dbLookup received with replies going to " + fromKey
+ " (tunnel " + _message.getReplyTunnel() + ")"); + " (tunnel " + _message.getReplyTunnel() + ")");
...@@ -211,7 +211,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl { ...@@ -211,7 +211,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
sendMessage(msg, toPeer, replyTunnel); sendMessage(msg, toPeer, replyTunnel);
} }
private void sendClosest(Hash key, Set routerInfoSet, Hash toPeer, TunnelId replyTunnel) { protected void sendClosest(Hash key, Set routerInfoSet, Hash toPeer, TunnelId replyTunnel) {
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("Sending closest routers to key " + key.toBase64() + ": # peers = " _log.debug("Sending closest routers to key " + key.toBase64() + ": # peers = "
+ routerInfoSet.size() + " tunnel " + replyTunnel); + routerInfoSet.size() + " tunnel " + replyTunnel);
...@@ -228,7 +228,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl { ...@@ -228,7 +228,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
sendMessage(msg, toPeer, replyTunnel); // should this go via garlic messages instead? sendMessage(msg, toPeer, replyTunnel); // should this go via garlic messages instead?
} }
private void sendMessage(I2NPMessage message, Hash toPeer, TunnelId replyTunnel) { protected void sendMessage(I2NPMessage message, Hash toPeer, TunnelId replyTunnel) {
if (replyTunnel != null) { if (replyTunnel != null) {
sendThroughTunnel(message, toPeer, replyTunnel); sendThroughTunnel(message, toPeer, replyTunnel);
} else { } else {
......
...@@ -8,12 +8,18 @@ package net.i2p.router.networkdb.kademlia; ...@@ -8,12 +8,18 @@ package net.i2p.router.networkdb.kademlia;
* *
*/ */
import java.util.Set;
import net.i2p.data.Hash; import net.i2p.data.Hash;
import net.i2p.data.RouterIdentity; import net.i2p.data.RouterIdentity;
import net.i2p.data.RouterInfo;
import net.i2p.data.TunnelId;
import net.i2p.data.i2np.DatabaseStoreMessage;
import net.i2p.data.i2np.DatabaseLookupMessage; import net.i2p.data.i2np.DatabaseLookupMessage;
import net.i2p.router.RouterContext; import net.i2p.router.RouterContext;
import net.i2p.router.networkdb.HandleDatabaseLookupMessageJob; import net.i2p.router.networkdb.HandleDatabaseLookupMessageJob;
/** /**
* Handle a lookup for a key received from a remote peer. Needs to be implemented * Handle a lookup for a key received from a remote peer. Needs to be implemented
* to send back replies, etc * to send back replies, etc
...@@ -28,4 +34,25 @@ public class HandleFloodfillDatabaseLookupMessageJob extends HandleDatabaseLooku ...@@ -28,4 +34,25 @@ public class HandleFloodfillDatabaseLookupMessageJob extends HandleDatabaseLooku
if (!FloodfillNetworkDatabaseFacade.floodfillEnabled(getContext())) return false; if (!FloodfillNetworkDatabaseFacade.floodfillEnabled(getContext())) return false;
return FloodfillNetworkDatabaseFacade.isFloodfill(getContext().router().getRouterInfo()); return FloodfillNetworkDatabaseFacade.isFloodfill(getContext().router().getRouterInfo());
} }
/**
* We extend this here to send our routerInfo back as well, if we are not floodfill.
* This gets the word out to routers that we are no longer floodfill, so they
* will stop bugging us.
*/
protected void sendClosest(Hash key, Set routerInfoSet, Hash toPeer, TunnelId replyTunnel) {
super.sendClosest(key, routerInfoSet, toPeer, replyTunnel);
// go away, you got the wrong guy, send our RI back unsolicited
if (!FloodfillNetworkDatabaseFacade.floodfillEnabled(getContext())) {
// We could just call sendData(myhash, myri, toPeer, replyTunnel) but
// that would increment the netDb.lookupsHandled and netDb.lookupsMatched stats
DatabaseStoreMessage msg = new DatabaseStoreMessage(getContext());
RouterInfo me = getContext().router().getRouterInfo();
msg.setKey(me.getIdentity().getHash());
msg.setRouterInfo(me);
msg.setValueType(DatabaseStoreMessage.KEY_TYPE_ROUTERINFO);
sendMessage(msg, toPeer, replyTunnel);
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment