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