Author: toad
Date: 2006-11-28 18:11:51 +0000 (Tue, 28 Nov 2006)
New Revision: 11090
Modified:
trunk/freenet/src/freenet/node/FNPPacketMangler.java
trunk/freenet/src/freenet/node/KeyTracker.java
Log:
Even more packet length paranoia.
Not totally bulletproof, but I don't think it needs to be.
Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java 2006-11-28
18:02:13 UTC (rev 11089)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java 2006-11-28
18:11:51 UTC (rev 11090)
@@ -906,7 +906,9 @@
byte[][] messageData = new byte[messages.length][];
int[] alreadyReported = new int[messages.length];
MessageItem[] newMsgs = new MessageItem[messages.length];
+ KeyTracker kt = pn.getCurrentKeyTracker();
int length = 1;
+ length += kt.countAcks() + kt.countAckRequests() +
kt.countResendRequests();
int callbacksCount = 0;
int x = 0;
String mi_name = null;
@@ -917,7 +919,7 @@
if(mi.formatted) {
try {
byte[] buf = mi.getData(pn);
- KeyTracker kt = pn.getCurrentKeyTracker();
+ kt = pn.getCurrentKeyTracker();
if(kt == null) {
if(logMINOR) Logger.minor(this, "kt = null");
pn.requeueMessageItems(messages, i, messages.length-i,
false, "kt = null");
@@ -1036,6 +1038,7 @@
requeueLogString = ", requeueing remaining
messages";
}
length = 1;
+ length += kt.countAcks() + kt.countAckRequests() +
kt.countResendRequests();
int count = 0;
int lastIndex = 0;
alreadyReportedBytes = 0;
Modified: trunk/freenet/src/freenet/node/KeyTracker.java
===================================================================
--- trunk/freenet/src/freenet/node/KeyTracker.java 2006-11-28 18:02:13 UTC
(rev 11089)
+++ trunk/freenet/src/freenet/node/KeyTracker.java 2006-11-28 18:11:51 UTC
(rev 11090)
@@ -959,4 +959,20 @@
public boolean isDeprecated() {
return this.isDeprecated;
}
+
+ public int countAckRequests() {
+ return ackRequestQueue.size();
+ }
+
+ public int countResendRequests() {
+ synchronized(resendRequestQueue) {
+ return resendRequestQueue.size();
+ }
+ }
+
+ public int countAcks() {
+ synchronized(ackQueue) {
+ return ackQueue.size();
+ }
+ }
}