Author: toad
Date: 2006-07-01 19:32:42 +0000 (Sat, 01 Jul 2006)
New Revision: 9415
Added:
trunk/freenet/src/freenet/support/ReceivedPacketNumbers.java
Removed:
trunk/freenet/src/freenet/node/ReceivedPacketNumbers.java
Modified:
trunk/freenet/src/freenet/node/KeyTracker.java
Log:
Move ReceivedPacketNumbers to freenet.support.
Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java 2006-07-01 14:46:32 UTC
(rev 9414)
+++ trunk/freenet/src/freenet/node/KeyTracker.java 2006-07-01 19:32:42 UTC
(rev 9415)
@@ -13,6 +13,7 @@
import freenet.support.LimitedRangeIntByteArrayMap;
import freenet.support.LimitedRangeIntByteArrayMapElement;
import freenet.support.Logger;
+import freenet.support.ReceivedPacketNumbers;
import freenet.support.UpdatableSortedLinkedListItem;
import freenet.support.UpdatableSortedLinkedListKilledException;
import freenet.support.UpdatableSortedLinkedListWithForeignIndex;
Deleted: trunk/freenet/src/freenet/node/ReceivedPacketNumbers.java
===================================================================
--- trunk/freenet/src/freenet/node/ReceivedPacketNumbers.java 2006-07-01
14:46:32 UTC (rev 9414)
+++ trunk/freenet/src/freenet/node/ReceivedPacketNumbers.java 2006-07-01
19:32:42 UTC (rev 9415)
@@ -1,184 +0,0 @@
-package freenet.node;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
-import freenet.support.Logger;
-
-/**
- * @author amphibian
- *
- * Tracks which packet numbers we have received.
- * Implemented as a sorted list since this is simplest and
- * it's unlikely it will be very long in practice. The 512-
- * packet window provides a practical limit.
- */
-public class ReceivedPacketNumbers {
-
- final LinkedList ranges;
- int lowestSeqNumber;
- int highestSeqNumber;
- final int horizon;
-
- ReceivedPacketNumbers(int horizon) {
- ranges = new LinkedList();
- lowestSeqNumber = -1;
- highestSeqNumber = -1;
- this.horizon = horizon;
- }
-
- public synchronized void clear() {
- lowestSeqNumber = -1;
- highestSeqNumber = -1;
- ranges.clear();
- }
-
- private static class Range {
- int start; // inclusive
- int end; // inclusive
-
- public String toString() {
- return "Range:"+start+"->"+end;
- }
- }
-
- /**
- * We received a packet!
- * @param seqNumber The number of the packet.
- * @return True if we stored the packet. False if it is out
- * of range of the current window.
- */
- public synchronized boolean got(int seqNumber) {
- if(seqNumber < 0) throw new IllegalArgumentException();
- if(ranges.isEmpty()) {
- Range r = new Range();
- r.start = r.end = lowestSeqNumber = highestSeqNumber = seqNumber;
- ranges.addFirst(r);
- return true;
- } else {
- ListIterator li = ranges.listIterator();
- Range r = (Range)li.next();
- int firstSeq = r.end;
- if(seqNumber - firstSeq > horizon) {
- // Delete first item
- li.remove();
- r = (Range)li.next();
- lowestSeqNumber = r.start;
- }
- while(true) {
- if(seqNumber == r.start-1) {
- r.start--;
- if(li.hasPrevious()) {
- Range r1 = (Range) li.previous();
- if(r1.end == seqNumber-1) {
- r.start = r1.start;
- li.remove();
- }
- } else {
- lowestSeqNumber = seqNumber;
- }
- return true;
- }
- if(seqNumber < r.start-1) {
- if(highestSeqNumber - seqNumber > horizon) {
- // Out of window, don't store
- return false;
- }
- Range r1 = new Range();
- r1.start = r1.end = seqNumber;
- li.previous(); // move cursor back
- if(!li.hasPrevious()) // inserting at start??
- lowestSeqNumber = seqNumber;
- li.add(r1);
- return true;
- }
- if(seqNumber >= r.start && seqNumber <= r.end) {
- // Duh
- return true;
- }
- if(seqNumber == r.end+1) {
- r.end++;
- if(li.hasNext()) {
- Range r1 = (Range) li.next();
- if(r1.start == seqNumber+1) {
- r.end = r1.end;
- li.remove();
- }
- } else {
- highestSeqNumber = seqNumber;
- }
- return true;
- }
- if(seqNumber > r.end+1) {
- if(!li.hasNext()) {
- // This is the end of the list
- Range r1 = new Range();
- r1.start = r1.end = highestSeqNumber = seqNumber;
- li.add(r1);
- return true;
- }
- }
- r = (Range) li.next();
- }
- }
- }
-
- /**
- * Have we received packet #seqNumber??
- * @param seqNumber
- * @return
- */
- public synchronized boolean contains(int seqNumber) {
- if(seqNumber > highestSeqNumber)
- return false;
- if(seqNumber == highestSeqNumber)
- return true;
- if(seqNumber == lowestSeqNumber)
- return true;
- if(highestSeqNumber - seqNumber > horizon)
- return true; // Assume we have since out of window
- Iterator i = ranges.iterator();
- Range last = null;
- for(;i.hasNext();) {
- Range r = (Range)i.next();
- if(r.start > r.end) {
- Logger.error(this, "Bad Range: "+r);
- }
- if(last != null && r.start < last.end) {
- Logger.error(this, "This range: "+r+" but last was: "+last);
- }
- if(r.start <= seqNumber && r.end >= seqNumber)
- return true;
- }
- return false;
- }
-
- /**
- * @return The highest packet number seen so far.
- */
- public synchronized int highest() {
- return highestSeqNumber;
- }
-
- public String toString() {
- StringBuffer sb = new StringBuffer();
- sb.append(super.toString());
- sb.append(": max=");
- sb.append(highestSeqNumber);
- sb.append(", min=");
- sb.append(lowestSeqNumber);
- sb.append(", ranges=");
- synchronized(this) {
- Iterator i = ranges.iterator();
- while(i.hasNext()) {
- Range r = (Range) i.next();
- sb.append(r.start);
- sb.append('-');
- sb.append(r.end);
- if(i.hasNext()) sb.append(',');
- }
- }
- return sb.toString();
- }
-}
Copied: trunk/freenet/src/freenet/support/ReceivedPacketNumbers.java (from rev
9413, trunk/freenet/src/freenet/node/ReceivedPacketNumbers.java)
===================================================================
--- trunk/freenet/src/freenet/node/ReceivedPacketNumbers.java 2006-07-01
13:55:22 UTC (rev 9413)
+++ trunk/freenet/src/freenet/support/ReceivedPacketNumbers.java
2006-07-01 19:32:42 UTC (rev 9415)
@@ -0,0 +1,183 @@
+package freenet.support;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.ListIterator;
+
+
+/**
+ * @author amphibian
+ *
+ * Tracks which packet numbers we have received.
+ * Implemented as a sorted list since this is simplest and
+ * it's unlikely it will be very long in practice. The 512-
+ * packet window provides a practical limit.
+ */
+public class ReceivedPacketNumbers {
+
+ final LinkedList ranges;
+ int lowestSeqNumber;
+ int highestSeqNumber;
+ final int horizon;
+
+ ReceivedPacketNumbers(int horizon) {
+ ranges = new LinkedList();
+ lowestSeqNumber = -1;
+ highestSeqNumber = -1;
+ this.horizon = horizon;
+ }
+
+ public synchronized void clear() {
+ lowestSeqNumber = -1;
+ highestSeqNumber = -1;
+ ranges.clear();
+ }
+
+ private static class Range {
+ int start; // inclusive
+ int end; // inclusive
+
+ public String toString() {
+ return "Range:"+start+"->"+end;
+ }
+ }
+
+ /**
+ * We received a packet!
+ * @param seqNumber The number of the packet.
+ * @return True if we stored the packet. False if it is out
+ * of range of the current window.
+ */
+ public synchronized boolean got(int seqNumber) {
+ if(seqNumber < 0) throw new IllegalArgumentException();
+ if(ranges.isEmpty()) {
+ Range r = new Range();
+ r.start = r.end = lowestSeqNumber = highestSeqNumber = seqNumber;
+ ranges.addFirst(r);
+ return true;
+ } else {
+ ListIterator li = ranges.listIterator();
+ Range r = (Range)li.next();
+ int firstSeq = r.end;
+ if(seqNumber - firstSeq > horizon) {
+ // Delete first item
+ li.remove();
+ r = (Range)li.next();
+ lowestSeqNumber = r.start;
+ }
+ while(true) {
+ if(seqNumber == r.start-1) {
+ r.start--;
+ if(li.hasPrevious()) {
+ Range r1 = (Range) li.previous();
+ if(r1.end == seqNumber-1) {
+ r.start = r1.start;
+ li.remove();
+ }
+ } else {
+ lowestSeqNumber = seqNumber;
+ }
+ return true;
+ }
+ if(seqNumber < r.start-1) {
+ if(highestSeqNumber - seqNumber > horizon) {
+ // Out of window, don't store
+ return false;
+ }
+ Range r1 = new Range();
+ r1.start = r1.end = seqNumber;
+ li.previous(); // move cursor back
+ if(!li.hasPrevious()) // inserting at start??
+ lowestSeqNumber = seqNumber;
+ li.add(r1);
+ return true;
+ }
+ if(seqNumber >= r.start && seqNumber <= r.end) {
+ // Duh
+ return true;
+ }
+ if(seqNumber == r.end+1) {
+ r.end++;
+ if(li.hasNext()) {
+ Range r1 = (Range) li.next();
+ if(r1.start == seqNumber+1) {
+ r.end = r1.end;
+ li.remove();
+ }
+ } else {
+ highestSeqNumber = seqNumber;
+ }
+ return true;
+ }
+ if(seqNumber > r.end+1) {
+ if(!li.hasNext()) {
+ // This is the end of the list
+ Range r1 = new Range();
+ r1.start = r1.end = highestSeqNumber = seqNumber;
+ li.add(r1);
+ return true;
+ }
+ }
+ r = (Range) li.next();
+ }
+ }
+ }
+
+ /**
+ * Have we received packet #seqNumber??
+ * @param seqNumber
+ * @return
+ */
+ public synchronized boolean contains(int seqNumber) {
+ if(seqNumber > highestSeqNumber)
+ return false;
+ if(seqNumber == highestSeqNumber)
+ return true;
+ if(seqNumber == lowestSeqNumber)
+ return true;
+ if(highestSeqNumber - seqNumber > horizon)
+ return true; // Assume we have since out of window
+ Iterator i = ranges.iterator();
+ Range last = null;
+ for(;i.hasNext();) {
+ Range r = (Range)i.next();
+ if(r.start > r.end) {
+ Logger.error(this, "Bad Range: "+r);
+ }
+ if(last != null && r.start < last.end) {
+ Logger.error(this, "This range: "+r+" but last was: "+last);
+ }
+ if(r.start <= seqNumber && r.end >= seqNumber)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @return The highest packet number seen so far.
+ */
+ public synchronized int highest() {
+ return highestSeqNumber;
+ }
+
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(super.toString());
+ sb.append(": max=");
+ sb.append(highestSeqNumber);
+ sb.append(", min=");
+ sb.append(lowestSeqNumber);
+ sb.append(", ranges=");
+ synchronized(this) {
+ Iterator i = ranges.iterator();
+ while(i.hasNext()) {
+ Range r = (Range) i.next();
+ sb.append(r.start);
+ sb.append('-');
+ sb.append(r.end);
+ if(i.hasNext()) sb.append(',');
+ }
+ }
+ return sb.toString();
+ }
+}
Property changes on:
trunk/freenet/src/freenet/support/ReceivedPacketNumbers.java
___________________________________________________________________
Name: svn:eol-style
+ native