X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Futil%2Ffreenet%2Ffcp2%2FClientPutComplexDir.java;h=d645bb170fe2ccd6be8998baf7d74ff697b13bc5;hb=85d5c89f25bed4fc3002eaaaa98e7ca4992fa2d6;hp=2feec7257b808d66506d565e9e61a18be8a099ae;hpb=8cc524061375237e2f5c01cfe605e3e74d50d785;p=jSite.git diff --git a/src/de/todesbaum/util/freenet/fcp2/ClientPutComplexDir.java b/src/de/todesbaum/util/freenet/fcp2/ClientPutComplexDir.java index 2feec72..d645bb1 100644 --- a/src/de/todesbaum/util/freenet/fcp2/ClientPutComplexDir.java +++ b/src/de/todesbaum/util/freenet/fcp2/ClientPutComplexDir.java @@ -19,13 +19,17 @@ package de.todesbaum.util.freenet.fcp2; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.io.SequenceInputStream; import java.io.Writer; import java.util.ArrayList; import java.util.List; -import java.util.Vector; + +import de.todesbaum.util.io.Closer; /** * Implementation of the ClientPutComplexDir command. This @@ -43,7 +47,7 @@ public class ClientPutComplexDir extends ClientPutDir { private boolean hasPayload = false; /** The input streams for the payload. */ - private List payloadInputStreams = new ArrayList(); + private File payloadFile; /** The total number of bytes of the payload. */ private long payloadLength = 0; @@ -62,7 +66,33 @@ public class ClientPutComplexDir extends ClientPutDir { * @param fileEntry The file entry to add to the directory */ public void addFileEntry(FileEntry fileEntry) { - fileEntries.add(fileEntry); + if (payloadFile == null){ + try { + payloadFile = File.createTempFile("payload", ".dat"); + payloadFile.deleteOnExit(); + } catch (IOException e) { + } + } + if (payloadFile != null) { + InputStream payloadInputStream = ((DirectFileEntry) fileEntry).getDataInputStream(); + FileOutputStream payloadOutputStream = null; + try { + payloadOutputStream = new FileOutputStream(payloadFile, true); + byte[] buffer = new byte[65536]; + int read = 0; + while ((read = payloadInputStream.read(buffer)) != -1) { + payloadOutputStream.write(buffer, 0, read); + System.out.println("writing " + read + " bytes"); + } + payloadOutputStream.flush(); + fileEntries.add(fileEntry); + } catch (IOException ioe1) { + /* hmm, ignore? */ + } finally { + Closer.close(payloadOutputStream); + Closer.close(payloadInputStream); + } + } } /** @@ -82,7 +112,6 @@ public class ClientPutComplexDir extends ClientPutDir { hasPayload = true; writer.write("Files." + fileIndex + ".DataLength=" + ((DirectFileEntry) fileEntry).getDataLength() + LINEFEED); payloadLength += ((DirectFileEntry) fileEntry).getDataLength(); - payloadInputStreams.add(((DirectFileEntry) fileEntry).getDataInputStream()); } else if (fileEntry instanceof DiskFileEntry) { writer.write("Files." + fileIndex + ".Filename=" + ((DiskFileEntry) fileEntry).getFilename() + LINEFEED); } else if (fileEntry instanceof RedirectFileEntry) { @@ -113,9 +142,14 @@ public class ClientPutComplexDir extends ClientPutDir { */ @Override protected InputStream getPayload() { - /* grr. use Vector here because it returns an Enumeration. */ - Vector inputStreams = new Vector(payloadInputStreams); - return new SequenceInputStream(inputStreams.elements()); + if (payloadFile != null) { + try { + return new FileInputStream(payloadFile); + } catch (FileNotFoundException e) { + /* shouldn't occur. */ + } + } + return null; } }