Author: toad
Date: 2007-05-24 23:07:19 +0000 (Thu, 24 May 2007)
New Revision: 13368

Added:
   trunk/freenet/src/freenet/client/async/BinaryBlob.java
Modified:
   trunk/freenet/src/freenet/client/async/ClientGetter.java
Log:
Binary blob refactoring: move constants and methods to an abstract class

Added: trunk/freenet/src/freenet/client/async/BinaryBlob.java
===================================================================
--- trunk/freenet/src/freenet/client/async/BinaryBlob.java                      
        (rev 0)
+++ trunk/freenet/src/freenet/client/async/BinaryBlob.java      2007-05-24 
23:07:19 UTC (rev 13368)
@@ -0,0 +1,48 @@
+package freenet.client.async;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import freenet.keys.Key;
+import freenet.keys.KeyBlock;
+
+public abstract class BinaryBlob {
+
+       public static final long BINARY_BLOB_MAGIC = 0x6d58249f72d67ed9L;
+       public static final short BINARY_BLOB_OVERALL_VERSION = 0;
+       public static void writeBinaryBlobHeader(DataOutputStream 
binaryBlobStream) throws IOException {
+               binaryBlobStream.writeLong(BinaryBlob.BINARY_BLOB_MAGIC);
+               
binaryBlobStream.writeShort(BinaryBlob.BINARY_BLOB_OVERALL_VERSION);
+       }
+       public static void writeKey(DataOutputStream binaryBlobStream, KeyBlock 
block, Key key) throws IOException {
+               byte[] keyData = key.getRoutingKey();
+               byte[] headers = block.getRawHeaders();
+               byte[] data = block.getRawData();
+               byte[] pubkey = block.getPubkeyBytes();
+               writeBlobHeader(binaryBlobStream, BLOB_BLOCK, 
BLOB_BLOCK_VERSION, 
+                               
9+keyData.length+headers.length+data.length+(pubkey==null?0:pubkey.length));
+               binaryBlobStream.writeShort(block.getKey().getType());
+               binaryBlobStream.writeByte(keyData.length);
+               binaryBlobStream.writeShort(headers.length);
+               binaryBlobStream.writeShort(data.length);
+               binaryBlobStream.writeShort(pubkey == null ? 0 : pubkey.length);
+               binaryBlobStream.write(keyData);
+               binaryBlobStream.write(headers);
+               binaryBlobStream.write(data);
+               if(pubkey != null)
+                       binaryBlobStream.write(pubkey);
+       }
+       static final short BLOB_BLOCK = 1;
+       static final short BLOB_BLOCK_VERSION = 0;
+       static final short BLOB_END = 2;
+       static final short BLOB_END_VERSION = 0;
+       static void writeBlobHeader(DataOutputStream binaryBlobStream, short 
type, short version, int length) throws IOException {
+               binaryBlobStream.writeInt(length);
+               binaryBlobStream.writeShort(type);
+               binaryBlobStream.writeShort(version);
+       }
+       public static void writeEndBlob(DataOutputStream binaryBlobStream) 
throws IOException {
+               writeBlobHeader(binaryBlobStream, BinaryBlob.BLOB_END, 
BinaryBlob.BLOB_END_VERSION, 0);
+       }
+
+}

Modified: trunk/freenet/src/freenet/client/async/ClientGetter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/ClientGetter.java    2007-05-24 
22:41:50 UTC (rev 13367)
+++ trunk/freenet/src/freenet/client/async/ClientGetter.java    2007-05-24 
23:07:19 UTC (rev 13368)
@@ -97,7 +97,8 @@
                        if(currentState != null && !finished) {
                                if(binaryBlobBucket != null) {
                                        try {
-                                               writeBinaryBlobHeader();
+                                               binaryBlobStream = new 
DataOutputStream(binaryBlobBucket.getOutputStream());
+                                               
BinaryBlob.writeBinaryBlobHeader(binaryBlobStream);
                                        } catch (IOException e) {
                                                onFailure(new 
FetchException(FetchException.BUCKET_ERROR, "Failed to open binary blob 
bucket"), null);
                                                return false;
@@ -239,21 +240,6 @@
                return super.toString()+ ':' +uri;
        }

-       public static final long BINARY_BLOB_MAGIC = 0x6d58249f72d67ed9L;
-       public static final short BINARY_BLOB_OVERALL_VERSION = 0;
-       
-       private void writeBinaryBlobHeader() throws IOException {
-               binaryBlobStream = new 
DataOutputStream(binaryBlobBucket.getOutputStream());
-               binaryBlobStream.writeLong(BINARY_BLOB_MAGIC);
-               binaryBlobStream.writeShort(BINARY_BLOB_OVERALL_VERSION);
-       }
-
-       static final short BLOB_BLOCK = 1;
-       static final short BLOB_BLOCK_VERSION = 0;
-       
-       static final short BLOB_END = 2;
-       static final short BLOB_END_VERSION = 0;
-       
        void addKeyToBinaryBlob(KeyBlock block) {
                if(binaryBlobKeysAddedAlready == null) return;
                Key key = block.getKey();
@@ -261,22 +247,8 @@
                        if(binaryBlobStream == null) return;
                        if(binaryBlobKeysAddedAlready.contains(key)) return;
                        binaryBlobKeysAddedAlready.add(key);
-                       byte[] keyData = key.getRoutingKey();
-                       byte[] headers = block.getRawHeaders();
-                       byte[] data = block.getRawData();
-                       byte[] pubkey = block.getPubkeyBytes();
                        try {
-                               writeBlobHeader(BLOB_BLOCK, BLOB_BLOCK_VERSION, 
9+keyData.length+headers.length+data.length+(pubkey==null?0:pubkey.length));
-                               
binaryBlobStream.writeShort(block.getKey().getType());
-                               binaryBlobStream.writeByte(keyData.length);
-                               binaryBlobStream.writeShort(headers.length);
-                               binaryBlobStream.writeShort(data.length);
-                               binaryBlobStream.writeShort(pubkey == null ? 0 
: pubkey.length);
-                               binaryBlobStream.write(keyData);
-                               binaryBlobStream.write(headers);
-                               binaryBlobStream.write(data);
-                               if(pubkey != null)
-                                       binaryBlobStream.write(pubkey);
+                               BinaryBlob.writeKey(binaryBlobStream, block, 
key);
                        } catch (IOException e) {
                                Logger.error(this, "Failed to write key to 
binary blob stream: "+e, e);
                                onFailure(new 
FetchException(FetchException.BUCKET_ERROR, "Failed to write key to binary blob 
stream: "+e), null);
@@ -295,7 +267,7 @@
                if(binaryBlobBucket == null) return true;
                synchronized(binaryBlobKeysAddedAlready) {
                        try {
-                               writeBlobHeader(BLOB_END, BLOB_END_VERSION, 0);
+                               BinaryBlob.writeEndBlob(binaryBlobStream);
                                binaryBlobStream.close();
                                return true;
                        } catch (IOException e) {
@@ -309,12 +281,6 @@
                }
        }

-       private void writeBlobHeader(short type, short version, int length) 
throws IOException {
-               binaryBlobStream.writeInt(length);
-               binaryBlobStream.writeShort(type);
-               binaryBlobStream.writeShort(version);
-       }
-       
        boolean collectingBinaryBlob() {
                return binaryBlobBucket != null;
        }


Reply via email to