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);
        }

 }


Reply via email to