X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fde%2Ftodesbaum%2Futil%2Ffreenet%2Ffcp2%2FConnection.java;h=c4cb66909daaf895b818c5f3d514f11c1b5fa5b4;hb=e47e15fdbb7515f5a3757c3f5df8c1d0950aee8e;hp=9c6b74db14e5b4b7fd4fc8cb0fd2262c7f09e291;hpb=bbfa208695e2a7f1bb555f841623945767f296e7;p=jSite.git diff --git a/src/de/todesbaum/util/freenet/fcp2/Connection.java b/src/de/todesbaum/util/freenet/fcp2/Connection.java index 9c6b74d..c4cb669 100644 --- a/src/de/todesbaum/util/freenet/fcp2/Connection.java +++ b/src/de/todesbaum/util/freenet/fcp2/Connection.java @@ -1,6 +1,5 @@ /* - * todesbaum-lib - - * Copyright (C) 2006 David Roden + * jSite - Connection.java - Copyright © 2006–2012 David Roden * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,6 +33,7 @@ import java.util.List; import de.todesbaum.util.io.Closer; import de.todesbaum.util.io.LineInputStream; import de.todesbaum.util.io.StreamCopier; +import de.todesbaum.util.io.StreamCopier.ProgressListener; import de.todesbaum.util.io.TempFileInputStream; /** @@ -71,6 +71,9 @@ public class Connection { /** The NodeHello message sent by the node on connect. */ protected Message nodeHello; + /** The temp directory to use. */ + private String tempDirectory; + /** * Creates a new connection to the specified node with the specified name. * @@ -113,7 +116,7 @@ public class Connection { * The received message */ protected void fireMessageReceived(Message message) { - for (ConnectionListener connectionListener: connectionListeners) { + for (ConnectionListener connectionListener : connectionListeners) { connectionListener.messageReceived(this, message); } } @@ -122,7 +125,7 @@ public class Connection { * Notifies listeners about the loss of the connection. */ protected void fireConnectionTerminated() { - for (ConnectionListener connectionListener: connectionListeners) { + for (ConnectionListener connectionListener : connectionListeners) { connectionListener.connectionTerminated(this); } } @@ -137,6 +140,17 @@ public class Connection { } /** + * Sets the temp directory to use for creation of temporary files. + * + * @param tempDirectory + * The temp directory to use, or {@code null} to use the default + * temp directory + */ + public void setTempDirectory(String tempDirectory) { + this.tempDirectory = tempDirectory; + } + + /** * Connects to the node. * * @return true if the connection succeeded and the node @@ -201,34 +215,15 @@ public class Connection { * Disconnects from the node. */ public void disconnect() { - if (nodeWriter != null) { - try { - nodeWriter.close(); - } catch (IOException ioe1) { - } - nodeWriter = null; - } - if (nodeOutputStream != null) { - try { - nodeOutputStream.close(); - } catch (IOException ioe1) { - } - nodeOutputStream = null; - } - if (nodeInputStream != null) { - try { - nodeInputStream.close(); - } catch (IOException ioe1) { - } - nodeInputStream = null; - } - if (nodeSocket != null) { - try { - nodeSocket.close(); - } catch (IOException ioe1) { - } - nodeSocket = null; - } + Closer.close(nodeWriter); + nodeWriter = null; + Closer.close(nodeOutputStream); + nodeOutputStream = null; + Closer.close(nodeInputStream); + nodeInputStream = null; + nodeInputStream = null; + Closer.close(nodeSocket); + nodeSocket = null; synchronized (this) { notify(); } @@ -246,6 +241,22 @@ public class Connection { * if an I/O error occurs */ public synchronized void execute(Command command) throws IllegalStateException, IOException { + execute(command, null); + } + + /** + * Executes the specified command. + * + * @param command + * The command to execute + * @param progressListener + * A progress listener for a payload transfer + * @throws IllegalStateException + * if the connection is not connected + * @throws IOException + * if an I/O error occurs + */ + public synchronized void execute(Command command, ProgressListener progressListener) throws IllegalStateException, IOException { if (nodeSocket == null) { throw new IllegalStateException("connection is not connected"); } @@ -257,7 +268,7 @@ public class Connection { InputStream payloadInputStream = null; try { payloadInputStream = command.getPayload(); - StreamCopier.copy(payloadInputStream, nodeOutputStream, command.getPayloadLength()); + StreamCopier.copy(payloadInputStream, nodeOutputStream, command.getPayloadLength(), progressListener); } finally { Closer.close(payloadInputStream); } @@ -293,6 +304,7 @@ public class Connection { * Main loop of the reader. Lines are read and converted into * {@link Message} objects. */ + @SuppressWarnings("synthetic-access") public void run() { LineInputStream nodeReader = null; try { @@ -313,7 +325,7 @@ public class Connection { /* need to read message from stream now */ File tempFile = null; try { - tempFile = File.createTempFile("fcpv2", "data"); + tempFile = File.createTempFile("fcpv2", "data", (tempDirectory != null) ? new File(tempDirectory) : null); tempFile.deleteOnExit(); FileOutputStream tempFileOutputStream = new FileOutputStream(tempFile); long dataLength = Long.parseLong(message.get("DataLength"));