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;
}