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