Author: toad
Date: 2009-04-18 18:00:47 +0000 (Sat, 18 Apr 2009)
New Revision: 27002
Modified:
trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
trunk/freenet/src/freenet/keys/FreenetURI.java
Log:
Make direct SSK fetches update the USKManager if they are USK compatible.
Modified: trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
2009-04-18 18:00:00 UTC (rev 27001)
+++ trunk/freenet/src/freenet/client/async/SimpleSingleFileFetcher.java
2009-04-18 18:00:47 UTC (rev 27002)
@@ -4,6 +4,7 @@
package freenet.client.async;
import java.io.IOException;
+import java.net.MalformedURLException;
import com.db4o.ObjectContainer;
@@ -13,8 +14,11 @@
import freenet.client.FetchResult;
import freenet.keys.ClientKey;
import freenet.keys.ClientKeyBlock;
+import freenet.keys.ClientSSK;
+import freenet.keys.FreenetURI;
import freenet.keys.KeyDecodeException;
import freenet.keys.TooBigException;
+import freenet.keys.USK;
import freenet.node.LowLevelGetException;
import freenet.support.Logger;
import freenet.support.api.Bucket;
@@ -140,6 +144,21 @@
Bucket data = extract(block, container, context);
if(data == null) return; // failed
if(!block.isMetadata()) {
+ if(key instanceof ClientSSK) {
+ try {
+ FreenetURI uri = this.key.getURI();
+ if(uri.isSSK() && uri.isSSKForUSK()) {
+ uri = uri.uskForSSK();
+ USK u = USK.create(uri);
+
context.uskManager.updateKnownGood(u, uri.getSuggestedEdition(), context);
+ }
+ } catch (MalformedURLException e) {
+ Logger.error(this, "Caught "+e, e);
+ } catch (Throwable t) {
+ // Don't let the USK hint cause us to
not succeed on the block.
+ Logger.error(this, "Caught "+t, t);
+ }
+ }
onSuccess(new FetchResult((ClientMetadata)null, data),
container, context);
} else {
onFailure(new
FetchException(FetchException.INVALID_METADATA, "Metadata where expected
data"), false, container, context);
Modified: trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
2009-04-18 18:00:00 UTC (rev 27001)
+++ trunk/freenet/src/freenet/client/async/SingleFileFetcher.java
2009-04-18 18:00:47 UTC (rev 27002)
@@ -159,6 +159,21 @@
Logger.error(this, "block is null!
fromStore="+fromStore+", token="+token, new Exception("error"));
return;
}
+ if(key instanceof ClientSSK) {
+ try {
+ if(uri.isSSK() && uri.isSSKForUSK()) {
+ if(persistent) container.activate(uri,
5);
+ FreenetURI uu =
uri.setMetaString(null).uskForSSK();
+ USK usk = USK.create(uu);
+ context.uskManager.updateKnownGood(usk,
uu.getSuggestedEdition(), context);
+ }
+ } catch (MalformedURLException e) {
+ Logger.error(this, "Caught "+e, e);
+ } catch (Throwable t) {
+ // Don't let the USK hint cause us to not
succeed on the block.
+ Logger.error(this, "Caught "+t, t);
+ }
+ }
Bucket data = extract(block, container, context);
if(data == null) {
if(logMINOR)
Modified: trunk/freenet/src/freenet/keys/FreenetURI.java
===================================================================
--- trunk/freenet/src/freenet/keys/FreenetURI.java 2009-04-18 18:00:00 UTC
(rev 27001)
+++ trunk/freenet/src/freenet/keys/FreenetURI.java 2009-04-18 18:00:47 UTC
(rev 27002)
@@ -925,6 +925,10 @@
return new FreenetURI("SSK", docName+"-"+suggestedEdition,
metaStr, routingKey, cryptoKey, extra, 0);
}
+ public boolean isSSKForUSK() {
+ return keyType.equalsIgnoreCase("SSK") &&
docName.matches(".*\\-[0-9]+");
+ }
+
public FreenetURI uskForSSK() {
if(!keyType.equalsIgnoreCase("SSK")) throw new
IllegalStateException();
if (!docName.matches(".*\\-[0-9]+"))
_______________________________________________
cvs mailing list
[email protected]
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs