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 {


Reply via email to