package freenet.clients.fcp;
import java.net.MalformedURLException;
import freenet.keys.FreenetURI;
import freenet.support.LogThresholdCallback;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
import freenet.support.Logger.LogLevel;
import freenet.support.api.Bucket;
import freenet.support.api.ManifestElement;
import freenet.support.api.RandomAccessBucket;
public class RedirectDirPutFile extends DirPutFile {
final FreenetURI targetURI;
private static volatile boolean logMINOR;
static {
Logger.registerLogThresholdCallback(new LogThresholdCallback(){
@Override
public void shouldUpdate(){
logMINOR = Logger.shouldLog(LogLevel.MINOR, this);
}
});
}
public static RedirectDirPutFile create(String name, String contentTypeOverride, SimpleFieldSet subset,
String identifier, boolean global) throws MessageInvalidException {
String target = subset.get("TargetURI");
if(target == null)
throw new MessageInvalidException(ProtocolErrorMessage.MISSING_FIELD, "TargetURI missing but UploadFrom=redirect", identifier, global);
FreenetURI targetURI;
try {
targetURI = new FreenetURI(target);
} catch (MalformedURLException e) {
throw new MessageInvalidException(ProtocolErrorMessage.INVALID_FIELD, "Invalid TargetURI: "+e, identifier, global);
}
if(logMINOR)
Logger.minor(RedirectDirPutFile.class, "targetURI = "+targetURI);
String mimeType;
if(contentTypeOverride != null)
mimeType = contentTypeOverride;
else
mimeType = guessMIME(name);
return new RedirectDirPutFile(name, mimeType, targetURI);
}
public RedirectDirPutFile(String name, String mimeType, FreenetURI targetURI) {
super(name, mimeType);
this.targetURI = targetURI;
}
@Override
public RandomAccessBucket getData() {
return null;
}
@Override
public ManifestElement getElement() {
return new ManifestElement(name, targetURI, getMIMEType());
}
}