Author: toad
Date: 2006-09-02 21:21:38 +0000 (Sat, 02 Sep 2006)
New Revision: 10374
Modified:
trunk/freenet/src/freenet/io/comm/DMT.java
trunk/freenet/src/freenet/node/NodeDispatcher.java
Log:
Bugfix in probe request handling.
Modified: trunk/freenet/src/freenet/io/comm/DMT.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/DMT.java 2006-09-02 20:57:13 UTC (rev
10373)
+++ trunk/freenet/src/freenet/io/comm/DMT.java 2006-09-02 21:21:38 UTC (rev
10374)
@@ -721,12 +721,13 @@
}};
public static final Message createFNPProbeRejected(long uid, double
target, double nearest,
- double best, short counter, short reason) {
+ double best, short counter, short htl, short reason) {
Message msg = new Message(FNPProbeRejected);
msg.set(UID, uid);
msg.set(TARGET_LOCATION, target);
msg.set(NEAREST_LOCATION, nearest);
msg.set(BEST_LOCATION, best);
+ msg.set(HTL, htl);
msg.set(COUNTER, counter);
msg.set(REASON, reason);
return msg;
Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java 2006-09-02 20:57:13 UTC
(rev 10373)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java 2006-09-02 21:21:38 UTC
(rev 10374)
@@ -448,17 +448,20 @@
synchronized(recentProbeContexts) {
if(recentProbeRequestIDs.contains(lid)) {
// Reject: Loop
- Message reject = DMT.createFNPProbeRejected(id,
target, nearest, best, counter, DMT.PROBE_REJECTED_LOOP);
+ Message reject = DMT.createFNPProbeRejected(id,
target, nearest, best, counter, htl, DMT.PROBE_REJECTED_LOOP);
try {
src.sendAsync(reject, null, 0, null);
} catch (NotConnectedException e) {
- Logger.error(this, "Not connected
rejecting a probe request from "+src);
+ Logger.error(this, "Not connected
rejecting a Probe request from "+src);
}
return true;
+ } else
+ Logger.minor(this, "Probe request "+id+" not
already present");
+ recentProbeRequestIDs.push(lid);
+ while(recentProbeRequestIDs.size() > MAX_PROBE_IDS) {
+ Object o = recentProbeRequestIDs.pop();
+ Logger.minor(this, "Probe request popped "+o);
}
- recentProbeRequestIDs.push(lid);
- while(recentProbeRequestIDs.size() > MAX_PROBE_IDS)
- recentProbeRequestIDs.pop();
}
return innerHandleProbeRequest(src, id, lid, target, best,
nearest, htl, counter, true);
}
@@ -489,7 +492,7 @@
}
if(rejected) {
// Reject: rate limit
- Message reject = DMT.createFNPProbeRejected(id, target,
nearest, best, counter, DMT.PROBE_REJECTED_OVERLOAD);
+ Message reject = DMT.createFNPProbeRejected(id, target,
nearest, best, counter, htl, DMT.PROBE_REJECTED_OVERLOAD);
try {
src.sendAsync(reject, null, 0, null);
} catch (NotConnectedException e) {
@@ -560,7 +563,7 @@
if(pn == null) {
// Can't complete, because some HTL left
// Reject: RNF
- Message reject = DMT.createFNPProbeRejected(id,
target, nearest, best, counter, DMT.PROBE_REJECTED_RNF);
+ Message reject = DMT.createFNPProbeRejected(id,
target, nearest, best, counter, htl, DMT.PROBE_REJECTED_RNF);
try {
src.sendAsync(reject, null, 0, null);
} catch (NotConnectedException e) {
@@ -643,9 +646,12 @@
}
public void startProbe(double d) {
-
- // TODO Auto-generated method stub
-
+ long l = node.random.nextLong();
+ Long ll = new Long(l);
+ synchronized(recentProbeRequestIDs) {
+ recentProbeRequestIDs.push(ll);
+ }
+ innerHandleProbeRequest(null, l, ll, d, 2.0, 2.0, Node.MAX_HTL,
(short)0, false);
}
}