private boolean handleAnnounceRequest(Message m, PeerNode source) { long uid = m.getLong(DMT.UID); OpennetManager om = node.getOpennet(); if (om == null || !source.canAcceptAnnouncements()) { Message msg = DMT.createFNPOpennetDisabled(uid); try { source.sendAsync(msg, null, node.nodeStats.announceByteCounter); } catch (NotConnectedException e) { // Ok } return true; } if (node.recentlyCompleted(uid)) { Message msg = DMT.createFNPRejectedLoop(uid); try { source.sendAsync(msg, null, node.nodeStats.announceByteCounter); } catch (NotConnectedException e) { // Ok } return true; } boolean success = false; // No way to check whether it's actually running atm, so lets report it to the completed list // immediately. // FIXME we should probably keep a list! node.completed(uid); try { if (!source.shouldAcceptAnnounce(uid)) { Message msg = DMT.createFNPRejectedOverload(uid, true); try { source.sendAsync(msg, null, node.nodeStats.announceByteCounter); } catch (NotConnectedException e) { // Ok } return true; } AnnounceSender sender = new AnnounceSender(m, uid, source, om, node); node.executor.execute(sender, "Announcement sender for " + uid); success = true; return true; } finally { if (!success) source.completedAnnounce(uid); } }
private boolean handleProbeRequest(Message m, PeerNode source) { long id = m.getLong(DMT.UID); if (node.recentlyCompleted(id)) { Message rejected = DMT.createFNPRejectedLoop(id); try { source.sendAsync(rejected, null, node.nodeStats.probeRequestCtr); } catch (NotConnectedException e) { Logger.normal(this, "Rejecting probe request from " + source.getPeer() + ": " + e); } return true; } // Lets not bother with full lockUID, just add it to the recently completed list. node.completed(id); // SSKs don't fix bwlimitDelayTime so shouldn't be accepted when overloaded. if (source.shouldRejectProbeRequest()) { Logger.normal(this, "Rejecting probe request from " + source.getPeer()); Message rejected = DMT.createFNPRejectedOverload(id, true); try { source.sendAsync(rejected, null, node.nodeStats.probeRequestCtr); } catch (NotConnectedException e) { Logger.normal( this, "Rejecting (overload) insert request from " + source.getPeer() + ": " + e); } return true; } double target = m.getDouble(DMT.TARGET_LOCATION); if (target > 1.0 || target < 0.0) { Logger.normal( this, "Rejecting invalid (target=" + target + ") probe request from " + source.getPeer()); Message rejected = DMT.createFNPRejectedOverload(id, true); try { source.sendAsync(rejected, null, node.nodeStats.probeRequestCtr); } catch (NotConnectedException e) { Logger.normal( this, "Rejecting (invalid) insert request from " + source.getPeer() + ": " + e); } return true; } ProbeRequestHandler.start(m, source, node, target); return true; }