Author: toad
Date: 2007-11-30 23:59:55 +0000 (Fri, 30 Nov 2007)
New Revision: 16170
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
Log:
Some refactoring and some new methods that will be used by announcement
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-11-30 23:49:14 UTC
(rev 16169)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-11-30 23:59:55 UTC
(rev 16170)
@@ -531,12 +531,18 @@
long xferUID = msg.getLong(DMT.TRANSFER_UID);
int paddedLength = msg.getInt(DMT.PADDED_LENGTH);
int realLength = msg.getInt(DMT.NODEREF_LENGTH);
+ return innerWaitForOpennetNoderef(xferUID, paddedLength, realLength,
source, isReply, uid, false, ctr);
+ }
+
+ byte[] innerWaitForOpennetNoderef(long xferUID, int paddedLength, int
realLength, PeerNode source, boolean isReply, long uid, boolean sendReject,
ByteCounter ctr) {
if(paddedLength > OpennetManager.MAX_OPENNET_NODEREF_LENGTH) {
Logger.error(this, "Noderef too big:
"+SizeUtil.formatSize(paddedLength)+" real length
"+SizeUtil.formatSize(realLength));
+ if(sendReject) rejectRef(uid, source,
DMT.NODEREF_REJECTED_TOO_BIG, ctr);
return null;
}
if(realLength > paddedLength) {
Logger.error(this, "Real length larger than padded length:
"+SizeUtil.formatSize(paddedLength)+" real length
"+SizeUtil.formatSize(realLength));
+ if(sendReject) rejectRef(uid, source,
DMT.NODEREF_REJECTED_REAL_BIGGER_THAN_PADDED, ctr);
return null;
}
byte[] buf = new byte[paddedLength];
@@ -547,6 +553,7 @@
Logger.minor(this, "Receiving noderef (reply="+isReply+") as
bulk transfer for request uid "+uid+" with transfer "+xferUID+" from "+source);
if(!br.receive()) {
Logger.error(this, "Failed to receive noderef bulk transfer for
"+this);
+ if(sendReject) rejectRef(uid, source,
DMT.NODEREF_REJECTED_TRANSFER_FAILED, ctr);
return null;
}
byte[] noderef = new byte[realLength];
@@ -554,6 +561,15 @@
return noderef;
}
+ public void rejectRef(long uid, PeerNode source, int reason,
ByteCounter ctr) {
+ Message msg = DMT.createFNPOpennetNoderefRejected(uid, reason);
+ try {
+ source.sendAsync(msg, null, 0, ctr);
+ } catch (NotConnectedException e) {
+ // Ignore
+ }
+ }
+
public SimpleFieldSet validateNoderef(byte[] noderef, int offset, int
length, PeerNode from) {
SimpleFieldSet ref;
try {