[freenet-cvs] r16264 - trunk/freenet/src/freenet/node

toad at freenetproject.org toad at freenetproject.org
Tue Dec 4 15:28:57 UTC 2007


Author: toad
Date: 2007-12-04 15:28:57 +0000 (Tue, 04 Dec 2007)
New Revision: 16264

Modified:
   trunk/freenet/src/freenet/node/OpennetManager.java
Log:
Pad noderefs to next kB from 3K to 32K. After that, refuse to send them.

Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java	2007-12-04 15:17:59 UTC (rev 16263)
+++ trunk/freenet/src/freenet/node/OpennetManager.java	2007-12-04 15:28:57 UTC (rev 16264)
@@ -468,7 +468,7 @@
 	 * @throws NotConnectedException If the peer becomes disconnected while we are trying to send the noderef.
 	 */
 	public void sendOpennetRef(boolean isReply, long uid, PeerNode peer, byte[] noderef, ByteCounter ctr) throws NotConnectedException {
-		byte[] padded = new byte[PADDED_NODEREF_SIZE];
+		byte[] padded = new byte[paddedSize(noderef.length)];
 		if(noderef.length > padded.length) {
 			Logger.error(this, "Noderef too big: "+noderef.length+" bytes");
 			return;
@@ -506,7 +506,7 @@
 
 	public void sendAnnouncementRequest(long uid, PeerNode peer, byte[] noderef, ByteCounter ctr, 
 			double target, short htl, double nearestLocSoFar) throws NotConnectedException {
-		byte[] padded = new byte[PADDED_NODEREF_SIZE];
+		byte[] padded = new byte[paddedSize(noderef.length)];
 		if(noderef.length > padded.length) {
 			Logger.error(this, "Noderef too big: "+noderef.length+" bytes");
 			return;
@@ -520,6 +520,14 @@
 		innerSendOpennetRef(xferUID, padded, peer);
 	}
 	
+	private int paddedSize(int length) {
+		if(length < PADDED_NODEREF_SIZE) return PADDED_NODEREF_SIZE;
+		Logger.normal(this, "Large noderef: "+length);
+		if(length > MAX_OPENNET_NODEREF_LENGTH)
+			throw new IllegalArgumentException("Too big noderef: "+length+" limit is "+MAX_OPENNET_NODEREF_LENGTH);
+		return ((length >>> 10) + ((length & 1023) == 0 ? 0 : 1)) << 10;
+	}
+
 	public void sendAnnouncementReply(long uid, PeerNode peer, byte[] noderef, ByteCounter ctr) 
 	throws NotConnectedException {
 		byte[] padded = new byte[PADDED_NODEREF_SIZE];




More information about the cvs mailing list