if(edition <= usk.suggestedEdition) {
context.uskManager.startTemporaryBackgroundFetcher(usk, context, ctx, true, realTimeFlag);
edition = context.uskManager.lookupKnownGood(usk);
if(edition > usk.suggestedEdition) {
if(logMINOR) Logger.minor(SingleFileFetcher.class, "Redirecting to edition "+edition);
cb.onFailure(new FetchException(FetchExceptionMode.PERMANENT_REDIRECT, usk.copy(edition).getURI().addMetaStrings(metaStrings)), null, context);
return null;
} else if(edition == -1 &&
context.uskManager.lookupLatestSlot(usk) == -1) { // We do not want to be going round and round here!
// Check the datastore first.
USKFetcherTag tag =
context.uskManager.getFetcher(usk.copy(usk.suggestedEdition), ctx, false, requester.persistent(),
realTimeFlag, new MyUSKFetcherCallback(requester, cb, usk, metaStrings, ctx, actx, realTimeFlag, maxRetries, recursionLevel, dontTellClientGet, l, requester.persistent(), true), false, context, true);
if(isEssential)
requester.addMustSucceedBlocks(1);
return tag;
} else {
// Transition to SingleFileFetcher
GetCompletionCallback myCB =
new USKProxyCompletionCallback(usk, cb, requester.persistent());
// Want to update the latest known good iff the fetch succeeds.
SingleFileFetcher sf =
new SingleFileFetcher(requester, myCB, null, usk.getSSK(), metaStrings,
usk.getURI().addMetaStrings(metaStrings), 0, ctx, false, realTimeFlag, actx, null, null, maxRetries, recursionLevel,
dontTellClientGet, l, isEssential, isFinal, false, (short)0, context, false);
return sf;
}
} else {
cb.onFailure(new FetchException(FetchExceptionMode.PERMANENT_REDIRECT, usk.copy(edition).getURI().addMetaStrings(metaStrings)), null, context);
return null;
}
} else {
// Do a thorough, blocking search
USKFetcherTag tag =