[freenet-cvs] r16910 - trunk/freenet/src/freenet/store

toad at freenetproject.org toad at freenetproject.org
Sat Jan 5 19:41:34 UTC 2008


Author: toad
Date: 2008-01-05 19:41:33 +0000 (Sat, 05 Jan 2008)
New Revision: 16910

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
   trunk/freenet/src/freenet/store/CHKStore.java
   trunk/freenet/src/freenet/store/PubkeyStore.java
   trunk/freenet/src/freenet/store/SSKStore.java
Log:
Use the callback when reconstructing

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java	2008-01-05 19:35:42 UTC (rev 16909)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java	2008-01-05 19:41:33 UTC (rev 16910)
@@ -42,6 +42,7 @@
 import freenet.keys.CHKVerifyException;
 import freenet.keys.Key;
 import freenet.keys.KeyBlock;
+import freenet.keys.KeyVerifyException;
 import freenet.keys.NodeCHK;
 import freenet.keys.NodeSSK;
 import freenet.keys.SSKBlock;
@@ -1189,46 +1190,16 @@
 				lruVal = lruRAF.readLong();
 				try {
 					byte[] routingkey = null;
-					if(type == TYPE_CHK) {
-						try {
-							CHKBlock chk = CHKBlock.construct(data, header);
-							routingkey = chk.getKey().getRoutingKey();
-						} catch (CHKVerifyException e) {
-							String err = "Bogus key at slot "+l+" : "+e+" - lost block "+l;
-							Logger.error(this, err, e);
-							System.err.println(err);
-							e.printStackTrace();
-							addFreeBlock(l, true, "bogus key ("+type+ ')');
-							routingkey = null;
-							continue;
-						}
-					} else if(type == TYPE_PUBKEY) {
-						DSAPublicKey key = DSAPublicKey.create(data);
-						routingkey = key.asBytesHash();
-					} else if(type == TYPE_SSK && readKey) {
-						try {
-							NodeSSK ssk = NodeSSK.construct(keyBuf);
-							if(ssk.grabPubkey(pubkeyCache)) {
-								SSKBlock block = new SSKBlock(data, header, ssk, false);
-								routingkey = block.getKey().getRoutingKey();
-							} else {
-								String err = "No pubkey for SSK at slot "+l;
-								Logger.error(this, err);
-								System.err.println(err);
-								addFreeBlock(l, true, "no pubkey");
-								routingkey = null;
-								continue;
-							}
-						} catch (SSKVerifyException e) {
-							String err = "Bogus SSK at slot "+l+" : "+e+" - lost block "+l;
-							Logger.error(this, err, e);
-							System.err.println(err);
-							e.printStackTrace();
-							addFreeBlock(l, true, "bogus SSK");
-							routingkey = null;
-							continue;
-						}
-					} else {
+					try {
+						StorableBlock block = callback.construct(data, header, null, keyBuf);
+						routingkey = block.getRoutingKey();
+					} catch (KeyVerifyException e) {
+						String err = "Bogus or unreconstructible key at slot "+l+" : "+e+" - lost block "+l;
+						Logger.error(this, err, e);
+						System.err.println(err);
+						e.printStackTrace();
+						addFreeBlock(l, true, "can't reconsturct key ("+type+ ')');
+						routingkey = null;
 						continue;
 					}
 					t = environment.beginTransaction(null,null);
@@ -1248,9 +1219,6 @@
 					if(l % 1024 == 0)
 						System.out.println("Key "+l+ '/' +(storeRAF.length()/(dataBlockSize+headerBlockSize))+" OK ("+dupes+" dupes, "+failures+" failures)");
 					t = null;
-				} catch (CryptFormatException e) {
-					addFreeBlock(l, true, "invalid key: "+e);
-					failures++;
 				} catch (DatabaseException e) {
 					// t.abort() below may also throw.
 					System.err.println("Error while reconstructing: "+e);

Modified: trunk/freenet/src/freenet/store/CHKStore.java
===================================================================
--- trunk/freenet/src/freenet/store/CHKStore.java	2008-01-05 19:35:42 UTC (rev 16909)
+++ trunk/freenet/src/freenet/store/CHKStore.java	2008-01-05 19:41:33 UTC (rev 16910)
@@ -1,6 +1,7 @@
 package freenet.store;
 
 import freenet.keys.CHKBlock;
+import freenet.keys.CHKVerifyException;
 import freenet.keys.KeyVerifyException;
 import freenet.keys.NodeCHK;
 
@@ -12,6 +13,7 @@
 
 	public StorableBlock construct(byte[] data, byte[] headers,
 			byte[] routingKey, byte[] fullKey) throws KeyVerifyException {
+		if(data == null || headers == null) throw new CHKVerifyException("Need either data and headers");
 		return CHKBlock.construct(data, headers);
 	}
 

Modified: trunk/freenet/src/freenet/store/PubkeyStore.java
===================================================================
--- trunk/freenet/src/freenet/store/PubkeyStore.java	2008-01-05 19:35:42 UTC (rev 16909)
+++ trunk/freenet/src/freenet/store/PubkeyStore.java	2008-01-05 19:41:33 UTC (rev 16910)
@@ -13,6 +13,7 @@
 
 	StorableBlock construct(byte[] data, byte[] headers, byte[] routingKey,
 			byte[] fullKey) throws KeyVerifyException {
+		if(data == null) throw new PubkeyVerifyException("Need data to construct pubkey");
 		try {
 			return DSAPublicKey.create(data);
 		} catch (CryptFormatException e) {

Modified: trunk/freenet/src/freenet/store/SSKStore.java
===================================================================
--- trunk/freenet/src/freenet/store/SSKStore.java	2008-01-05 19:35:42 UTC (rev 16909)
+++ trunk/freenet/src/freenet/store/SSKStore.java	2008-01-05 19:41:33 UTC (rev 16910)
@@ -17,6 +17,8 @@
 	
 	public StorableBlock construct(byte[] data, byte[] headers,
 			byte[] routingKey, byte[] fullKey) throws SSKVerifyException {
+		if(data == null || headers == null) throw new SSKVerifyException("Need data and headers");
+		if(fullKey == null) throw new SSKVerifyException("Need full key to reconstruct an SSK");
 		NodeSSK key;
 		key = NodeSSK.construct(fullKey);
 		key.grabPubkey(pubkeyCache);




More information about the cvs mailing list