Author: toad
Date: 2007-06-12 22:05:50 +0000 (Tue, 12 Jun 2007)
New Revision: 13545
Modified:
trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
Log:
Insert the binary blob for the revocation key once we have downloaded it from a
peer.
This is useful because it means it will be transferred to and persist on even
an out of date network.
Modified: trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
===================================================================
--- trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2007-06-12 21:32:29 UTC (rev 13544)
+++ trunk/freenet/src/freenet/node/updater/UpdateOverMandatoryManager.java
2007-06-12 22:05:50 UTC (rev 13545)
@@ -13,6 +13,7 @@
import java.util.HashSet;
import java.util.Vector;
+import freenet.client.ClientMetadata;
import freenet.client.FetchContext;
import freenet.client.FetchException;
import freenet.client.FetchResult;
@@ -20,8 +21,10 @@
import freenet.client.async.BaseClientPutter;
import freenet.client.async.BinaryBlob;
import freenet.client.async.BinaryBlobFormatException;
+import freenet.client.async.BinaryBlobInserter;
import freenet.client.async.ClientCallback;
import freenet.client.async.ClientGetter;
+import freenet.client.async.ClientPutter;
import freenet.client.async.ClientRequestScheduler;
import freenet.client.async.SimpleBlockSet;
import freenet.io.comm.AsyncMessageCallback;
@@ -36,6 +39,8 @@
import freenet.l10n.L10n;
import freenet.node.Node;
import freenet.node.PeerNode;
+import freenet.node.RequestSender;
+import freenet.node.RequestStarter;
import freenet.node.useralerts.UserAlert;
import freenet.support.HTMLNode;
import freenet.support.Logger;
@@ -618,6 +623,9 @@
// Blow the update, and propagate the
revocation certificate.
updateManager.revocationChecker.onFailure(e, state, cleanedBlobFile);
temp.delete();
+
+ insertBlob();
+
} else {
Logger.error(this, "Failed to fetch
revocation certificate from blob from "+source.userToString());
System.err.println("Failed to fetch
revocation certificate from blob from "+source.userToString());
@@ -647,6 +655,7 @@
System.err.println("Got revocation certificate
from "+source.userToString());
updateManager.revocationChecker.onSuccess(result, state, cleanedBlobFile);
temp.delete();
+ insertBlob();
}
public void onSuccess(BaseClientPutter state) {
@@ -668,6 +677,44 @@
}
+ protected void insertBlob() {
+ ClientCallback callback = new ClientCallback() {
+ public void onFailure(FetchException e, ClientGetter
state) {
+ // Ignore, can't happen
+ }
+ public void onFailure(InsertException e,
BaseClientPutter state) {
+ Logger.error(this, "Failed to insert revocation
key binary blob: "+e, e);
+ }
+ public void onFetchable(BaseClientPutter state) {
+ // Ignore
+ }
+ public void onGeneratedURI(FreenetURI uri,
BaseClientPutter state) {
+ // Ignore
+ }
+ public void onMajorProgress() {
+ // Ignore
+ }
+ public void onSuccess(FetchResult result, ClientGetter
state) {
+ // Ignore, can't happen
+ }
+ public void onSuccess(BaseClientPutter state) {
+ // All done. Cool.
+ Logger.normal(this, "Inserted binary blob for
revocation key");
+ }
+ };
+ FileBucket bucket = new
FileBucket(updateManager.revocationChecker.getBlobFile(), true, false, false,
false, false);
+ ClientPutter putter = new ClientPutter(callback, bucket,
+ FreenetURI.EMPTY_CHK_URI, null,
updateManager.node.clientCore.makeClient(RequestStarter.INTERACTIVE_PRIORITY_CLASS).getInsertContext(true),
+
updateManager.node.clientCore.requestStarters.chkPutScheduler,
+
updateManager.node.clientCore.requestStarters.sskPutScheduler,
+ RequestStarter.INTERACTIVE_PRIORITY_CLASS,
false, false, this, null, null, true);
+ try {
+ putter.start(false);
+ } catch (InsertException e1) {
+ Logger.error(this, "Failed to start insert of
revocation key binary blob: "+e1, e1);
+ }
+ }
+
private void cancelSend(PeerNode source, long uid) {
Message msg = DMT.createFNPBulkReceiveAborted(uid);
try {