From cf9d8b85823e3f68210316411ae95c9b82c84e04 Mon Sep 17 00:00:00 2001 From: David Roden Date: Wed, 21 May 2008 20:29:20 +0000 Subject: [PATCH] hand in exception on disconnects, if any handle disconnects better use logger instead of System.out git-svn-id: file:///home/toad/git-migration/temprepository/trunk/apps/jFCPlib@20023 67a373e5-eb02-0410-a15c-ee090a768436 --- src/net/pterodactylus/fcp/FcpAdapter.java | 8 +- src/net/pterodactylus/fcp/FcpConnection.java | 165 ++++++++++++--------- .../pterodactylus/fcp/FcpConnectionHandler.java | 12 +- src/net/pterodactylus/fcp/FcpListener.java | 81 +++++----- src/net/pterodactylus/fcp/FcpMessage.java | 24 +-- src/net/pterodactylus/fcp/FcpTest.java | 6 +- 6 files changed, 162 insertions(+), 134 deletions(-) diff --git a/src/net/pterodactylus/fcp/FcpAdapter.java b/src/net/pterodactylus/fcp/FcpAdapter.java index 5f35180..eb67768 100644 --- a/src/net/pterodactylus/fcp/FcpAdapter.java +++ b/src/net/pterodactylus/fcp/FcpAdapter.java @@ -21,7 +21,7 @@ package net.pterodactylus.fcp; /** * Adapter for {@link FcpListener}. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ @@ -85,7 +85,7 @@ public class FcpAdapter implements FcpListener { /** * {@inheritDoc} - * + * * @see FcpListener#receivedNodeData(FcpConnection, NodeData) */ public void receivedNodeData(FcpConnection fcpConnection, NodeData nodeData) { @@ -94,7 +94,7 @@ public class FcpAdapter implements FcpListener { /** * {@inheritDoc} - * + * * @see FcpListener#receivedTestDDAReply(FcpConnection, TestDDAReply) */ public void receivedTestDDAReply(FcpConnection fcpConnection, TestDDAReply testDDAReply) { @@ -286,7 +286,7 @@ public class FcpAdapter implements FcpListener { /** * {@inheritDoc} */ - public void connectionClosed(FcpConnection fcpConnection) { + public void connectionClosed(FcpConnection fcpConnection, Throwable throwable) { /* empty. */ } diff --git a/src/net/pterodactylus/fcp/FcpConnection.java b/src/net/pterodactylus/fcp/FcpConnection.java index 0dc1e7f..d1a1be7 100644 --- a/src/net/pterodactylus/fcp/FcpConnection.java +++ b/src/net/pterodactylus/fcp/FcpConnection.java @@ -19,6 +19,7 @@ package net.pterodactylus.fcp; +import java.io.Closeable; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -31,14 +32,18 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Logger; /** * An FCP connection to a Freenet node. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ -public class FcpConnection { +public class FcpConnection implements Closeable { + + /** Logger. */ + private static final Logger logger = Logger.getLogger(FcpConnection.class.getName()); /** The default port for FCP v2. */ public static final int DEFAULT_PORT = 9481; @@ -70,7 +75,7 @@ public class FcpConnection { /** * Creates a new FCP connection to the freenet node running on localhost, * using the default port. - * + * * @throws UnknownHostException * if the hostname can not be resolved */ @@ -81,7 +86,7 @@ public class FcpConnection { /** * Creates a new FCP connection to the Freenet node running on the given * host, listening on the default port. - * + * * @param host * The hostname of the Freenet node * @throws UnknownHostException @@ -94,7 +99,7 @@ public class FcpConnection { /** * Creates a new FCP connection to the Freenet node running on the given * host, listening on the given port. - * + * * @param host * The hostname of the Freenet node * @param port @@ -109,7 +114,7 @@ public class FcpConnection { /** * Creates a new FCP connection to the Freenet node running at the given * address, listening on the default port. - * + * * @param address * The address of the Freenet node */ @@ -120,7 +125,7 @@ public class FcpConnection { /** * Creates a new FCP connection to the Freenet node running at the given * address, listening on the given port. - * + * * @param address * The address of the Freenet node * @param port @@ -137,7 +142,7 @@ public class FcpConnection { /** * Adds the given listener to the list of listeners. - * + * * @param fcpListener * The listener to add */ @@ -147,7 +152,7 @@ public class FcpConnection { /** * Removes the given listener from the list of listeners. - * + * * @param fcpListener * The listener to remove */ @@ -157,7 +162,7 @@ public class FcpConnection { /** * Notifies listeners that a “NodeHello” message was received. - * + * * @see FcpListener#receivedNodeHello(FcpConnection, NodeHello) * @param nodeHello * The “NodeHello” message @@ -171,7 +176,7 @@ public class FcpConnection { /** * Notifies listeners that a “CloseConnectionDuplicateClientName” message * was received. - * + * * @see FcpListener#receivedCloseConnectionDuplicateClientName(FcpConnection, * CloseConnectionDuplicateClientName) * @param closeConnectionDuplicateClientName @@ -185,7 +190,7 @@ public class FcpConnection { /** * Notifies listeners that a “SSKKeypair” message was received. - * + * * @see FcpListener#receivedSSKKeypair(FcpConnection, SSKKeypair) * @param sskKeypair * The “SSKKeypair” message @@ -198,7 +203,7 @@ public class FcpConnection { /** * Notifies listeners that a “Peer” message was received. - * + * * @see FcpListener#receivedPeer(FcpConnection, Peer) * @param peer * The “Peer” message @@ -211,7 +216,7 @@ public class FcpConnection { /** * Notifies all listeners that an “EndListPeers” message was received. - * + * * @see FcpListener#receivedEndListPeers(FcpConnection, EndListPeers) * @param endListPeers * The “EndListPeers” message @@ -224,7 +229,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PeerNote” message was received. - * + * * @see FcpListener#receivedPeerNote(FcpConnection, PeerNote) * @param peerNote */ @@ -236,7 +241,7 @@ public class FcpConnection { /** * Notifies all listeners that an “EndListPeerNotes” message was received. - * + * * @see FcpListener#receivedEndListPeerNotes(FcpConnection, * EndListPeerNotes) * @param endListPeerNotes @@ -250,7 +255,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PeerRemoved” message was received. - * + * * @see FcpListener#receivedPeerRemoved(FcpConnection, PeerRemoved) * @param peerRemoved * The “PeerRemoved” message @@ -263,7 +268,7 @@ public class FcpConnection { /** * Notifies all listeners that a “NodeData” message was received. - * + * * @see FcpListener#receivedNodeData(FcpConnection, NodeData) * @param nodeData * The “NodeData” message @@ -276,7 +281,7 @@ public class FcpConnection { /** * Notifies all listeners that a “TestDDAReply” message was received. - * + * * @see FcpListener#receivedTestDDAReply(FcpConnection, TestDDAReply) * @param testDDAReply * The “TestDDAReply” message @@ -289,7 +294,7 @@ public class FcpConnection { /** * Notifies all listeners that a “TestDDAComplete” message was received. - * + * * @see FcpListener#receivedTestDDAComplete(FcpConnection, TestDDAComplete) * @param testDDAComplete * The “TestDDAComplete” message @@ -302,7 +307,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PersistentGet” message was received. - * + * * @see FcpListener#receivedPersistentGet(FcpConnection, PersistentGet) * @param persistentGet * The “PersistentGet” message @@ -315,7 +320,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PersistentPut” message was received. - * + * * @see FcpListener#receivedPersistentPut(FcpConnection, PersistentPut) * @param persistentPut * The “PersistentPut” message @@ -329,7 +334,7 @@ public class FcpConnection { /** * Notifies all listeners that a “EndListPersistentRequests” message was * received. - * + * * @see FcpListener#receivedEndListPersistentRequests(FcpConnection, * EndListPersistentRequests) * @param endListPersistentRequests @@ -343,7 +348,7 @@ public class FcpConnection { /** * Notifies all listeners that a “URIGenerated” message was received. - * + * * @see FcpListener#receivedURIGenerated(FcpConnection, URIGenerated) * @param uriGenerated * The “URIGenerated” message @@ -356,7 +361,7 @@ public class FcpConnection { /** * Notifies all listeners that a “DataFound” message was received. - * + * * @see FcpListener#receivedDataFound(FcpConnection, DataFound) * @param dataFound * The “DataFound” message @@ -369,7 +374,7 @@ public class FcpConnection { /** * Notifies all listeners that an “AllData” message was received. - * + * * @see FcpListener#receivedAllData(FcpConnection, AllData) * @param allData * The “AllData” message @@ -382,7 +387,7 @@ public class FcpConnection { /** * Notifies all listeners that a “SimpleProgress” message was received. - * + * * @see FcpListener#receivedSimpleProgress(FcpConnection, SimpleProgress) * @param simpleProgress * The “SimpleProgress” message @@ -395,7 +400,7 @@ public class FcpConnection { /** * Notifies all listeners that a “StartedCompression” message was received. - * + * * @see FcpListener#receivedStartedCompression(FcpConnection, * StartedCompression) * @param startedCompression @@ -409,7 +414,7 @@ public class FcpConnection { /** * Notifies all listeners that a “FinishedCompression” message was received. - * + * * @see FcpListener#receviedFinishedCompression(FcpConnection, * FinishedCompression) * @param finishedCompression @@ -424,7 +429,7 @@ public class FcpConnection { /** * Notifies all listeners that an “UnknownPeerNoteType” message was * received. - * + * * @see FcpListener#receivedUnknownPeerNoteType(FcpConnection, * UnknownPeerNoteType) * @param unknownPeerNoteType @@ -439,7 +444,7 @@ public class FcpConnection { /** * Notifies all listeners that an “UnknownNodeIdentifier” message was * received. - * + * * @see FcpListener#receivedUnknownNodeIdentifier(FcpConnection, * UnknownNodeIdentifier) * @param unknownNodeIdentifier @@ -453,7 +458,7 @@ public class FcpConnection { /** * Notifies all listeners that a “ConfigData” message was received. - * + * * @see FcpListener#receivedConfigData(FcpConnection, ConfigData) * @param configData * The “ConfigData” message @@ -466,7 +471,7 @@ public class FcpConnection { /** * Notifies all listeners that a “GetFailed” message was received. - * + * * @see FcpListener#receivedGetFailed(FcpConnection, GetFailed) * @param getFailed * The “GetFailed” message @@ -479,7 +484,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PutFailed” message was received. - * + * * @see FcpListener#receivedPutFailed(FcpConnection, PutFailed) * @param putFailed * The “PutFailed” message @@ -493,7 +498,7 @@ public class FcpConnection { /** * Notifies all listeners that an “IdentifierCollision” message was * received. - * + * * @see FcpListener#receivedIdentifierCollision(FcpConnection, * IdentifierCollision) * @param identifierCollision @@ -507,7 +512,7 @@ public class FcpConnection { /** * Notifies all listeners that an “PersistentPutDir” message was received. - * + * * @see FcpListener#receivedPersistentPutDir(FcpConnection, * PersistentPutDir) * @param persistentPutDir @@ -522,7 +527,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PersistentRequestRemoved” message was * received. - * + * * @see FcpListener#receivedPersistentRequestRemoved(FcpConnection, * PersistentRequestRemoved) * @param persistentRequestRemoved @@ -536,7 +541,7 @@ public class FcpConnection { /** * Notifies all listeners that a “SubscribedUSKUpdate” message was received. - * + * * @see FcpListener#receivedSubscribedUSKUpdate(FcpConnection, * SubscribedUSKUpdate) * @param subscribedUSKUpdate @@ -550,7 +555,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PluginInfo” message was received. - * + * * @see FcpListener#receivedPluginInfo(FcpConnection, PluginInfo) * @param pluginInfo * The “PluginInfo” message @@ -563,7 +568,7 @@ public class FcpConnection { /** * Notifies all listeners that an “FCPPluginReply” message was received. - * + * * @see FcpListener#receivedFCPPluginReply(FcpConnection, FCPPluginReply) * @param fcpPluginReply * The “FCPPluginReply” message @@ -577,7 +582,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PersistentRequestModified” message was * received. - * + * * @see FcpListener#receivedPersistentRequestModified(FcpConnection, * PersistentRequestModified) * @param persistentRequestModified @@ -591,7 +596,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PutSuccessful” message was received. - * + * * @see FcpListener#receivedPutSuccessful(FcpConnection, PutSuccessful) * @param putSuccessful * The “PutSuccessful” message @@ -604,7 +609,7 @@ public class FcpConnection { /** * Notifies all listeners that a “PutFetchable” message was received. - * + * * @see FcpListener#receivedPutFetchable(FcpConnection, PutFetchable) * @param putFetchable * The “PutFetchable” message @@ -617,7 +622,7 @@ public class FcpConnection { /** * Notifies all listeners that a “ProtocolError” message was received. - * + * * @see FcpListener#receivedProtocolError(FcpConnection, ProtocolError) * @param protocolError * The “ProtocolError” message @@ -630,7 +635,7 @@ public class FcpConnection { /** * Notifies all registered listeners that a message has been received. - * + * * @see FcpListener#receivedMessage(FcpConnection, FcpMessage) * @param fcpMessage * The message that was received @@ -643,12 +648,15 @@ public class FcpConnection { /** * Notifies all listeners that the connection to the node was closed. - * - * @see FcpListener#connectionClosed(FcpConnection) + * + * @param throwable + * The exception that caused the disconnect, or null + * if there was no exception + * @see FcpListener#connectionClosed(FcpConnection, Throwable) */ - private void fireConnectionClosed() { + private void fireConnectionClosed(Throwable throwable) { for (FcpListener fcpListener: fcpListeners) { - fcpListener.connectionClosed(this); + fcpListener.connectionClosed(this, throwable); } } @@ -658,7 +666,7 @@ public class FcpConnection { /** * Connects to the node. - * + * * @throws IOException * if an I/O error occurs * @throws IllegalStateException @@ -668,6 +676,7 @@ public class FcpConnection { if (connectionHandler != null) { throw new IllegalStateException("already connected, disconnect first"); } + logger.info("connecting to " + address + ":" + port + "…"); remoteSocket = new Socket(address, port); remoteInputStream = remoteSocket.getInputStream(); remoteOutputStream = remoteSocket.getOutputStream(); @@ -677,27 +686,32 @@ public class FcpConnection { /** * Disconnects from the node. If there is no connection to the node, this * method does nothing. + * + * @deprecated Use {@link #close()} instead */ + @Deprecated public synchronized void disconnect() { - if (connectionHandler == null) { - return; - } - FcpUtils.close(remoteSocket); - connectionHandler.stop(); - connectionHandler = null; - fireConnectionClosed(); + close(); + } + + /** + * Closes the connection. If there is no connection to the node, this method + * does nothing. + */ + public void close() { + handleDisconnect(null); } /** * Sends the given FCP message. - * + * * @param fcpMessage * The FCP message to send * @throws IOException * if an I/O error occurs */ public synchronized void sendMessage(FcpMessage fcpMessage) throws IOException { - System.out.println("sending message: " + fcpMessage.getName()); + logger.fine("sending message: " + fcpMessage.getName()); fcpMessage.write(remoteOutputStream); } @@ -708,11 +722,12 @@ public class FcpConnection { /** * Handles the given message, notifying listeners. This message should only * be called by {@link FcpConnectionHandler}. - * + * * @param fcpMessage * The received message */ void handleMessage(FcpMessage fcpMessage) { + logger.fine("received message: " + fcpMessage.getName()); String messageName = fcpMessage.getName(); countMessage(messageName); if ("SimpleProgress".equals(messageName)) { @@ -804,13 +819,20 @@ public class FcpConnection { /** * Handles a disconnect from the node. + * + * @param throwable + * The exception that caused the disconnect, or null + * if there was no exception */ - synchronized void handleDisconnect() { + synchronized void handleDisconnect(Throwable throwable) { FcpUtils.close(remoteInputStream); FcpUtils.close(remoteOutputStream); FcpUtils.close(remoteSocket); - connectionHandler = null; - fireConnectionClosed(); + if (connectionHandler != null) { + connectionHandler.stop(); + connectionHandler = null; + fireConnectionClosed(throwable); + } } // @@ -820,7 +842,7 @@ public class FcpConnection { /** * Incremets the counter in {@link #incomingMessageStatistics} by 1 * for the given message name. - * + * * @param name * The name of the message to count */ @@ -830,11 +852,12 @@ public class FcpConnection { oldValue = incomingMessageStatistics.get(name); } incomingMessageStatistics.put(name, oldValue + 1); + logger.finest("count for " + name + ": " + (oldValue + 1)); } /** * Returns a limited input stream from the node’s input stream. - * + * * @param dataLength * The length of the stream * @return The limited input stream @@ -849,7 +872,7 @@ public class FcpConnection { /** * A wrapper around an {@link InputStream} that only supplies a limit number * of bytes from the underlying input stream. - * + * * @author David Roden * @version $Id$ */ @@ -861,7 +884,7 @@ public class FcpConnection { /** * Creates a new LimitedInputStream that supplies at most * length bytes from the given input stream. - * + * * @param inputStream * The input stream * @param length @@ -926,7 +949,7 @@ public class FcpConnection { /** * {@inheritDoc} This method does nothing, as {@link #mark(int)} and * {@link #reset()} are not supported. - * + * * @see java.io.FilterInputStream#mark(int) */ @Override @@ -936,7 +959,7 @@ public class FcpConnection { /** * {@inheritDoc} - * + * * @see java.io.FilterInputStream#markSupported() * @return false */ @@ -948,7 +971,7 @@ public class FcpConnection { /** * {@inheritDoc} This method does nothing, as {@link #mark(int)} and * {@link #reset()} are not supported. - * + * * @see java.io.FilterInputStream#reset() */ @Override @@ -959,7 +982,7 @@ public class FcpConnection { /** * Consumes the input stream, i.e. read all bytes until the limit is * reached. - * + * * @throws IOException * if an I/O error occurs */ diff --git a/src/net/pterodactylus/fcp/FcpConnectionHandler.java b/src/net/pterodactylus/fcp/FcpConnectionHandler.java index b6404c5..ba6b86b 100644 --- a/src/net/pterodactylus/fcp/FcpConnectionHandler.java +++ b/src/net/pterodactylus/fcp/FcpConnectionHandler.java @@ -26,7 +26,7 @@ import java.nio.charset.Charset; /** * Handles an FCP connection to a node. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ @@ -47,7 +47,7 @@ class FcpConnectionHandler implements Runnable { /** * Creates a new connection handler that operates on the given connection * and input stream. - * + * * @param fcpConnection * The underlying FCP connection * @param remoteInputStream @@ -63,6 +63,7 @@ class FcpConnectionHandler implements Runnable { */ public void run() { FcpMessage fcpMessage = null; + Throwable throwable = null; while (true) { synchronized (this) { if (shouldStop) { @@ -96,11 +97,12 @@ class FcpConnectionHandler implements Runnable { String value = line.substring(equalSign + 1); assert fcpMessage != null: "fcp message is null"; fcpMessage.setField(field, value); - } catch (IOException e) { + } catch (IOException ioe1) { + throwable = ioe1; break; } } - fcpConnection.handleDisconnect(); + fcpConnection.handleDisconnect(throwable); } /** @@ -119,7 +121,7 @@ class FcpConnectionHandler implements Runnable { /** * Reads bytes from {@link #remoteInputStream} until ‘\r’ or ‘\n’ are * encountered and decodes the read bytes using UTF-8. - * + * * @return The decoded line * @throws IOException * if an I/O error occurs diff --git a/src/net/pterodactylus/fcp/FcpListener.java b/src/net/pterodactylus/fcp/FcpListener.java index 90860e5..09a5f2a 100644 --- a/src/net/pterodactylus/fcp/FcpListener.java +++ b/src/net/pterodactylus/fcp/FcpListener.java @@ -23,7 +23,7 @@ import java.util.EventListener; /** * Interface for objects that want to be notified on certain FCP events. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ @@ -31,7 +31,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “NodeHello” message was received. - * + * * @param fcpConnection * The connection that received the message * @param nodeHello @@ -42,7 +42,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “CloseConnectionDuplicateClientName” message * was received. - * + * * @param fcpConnection * The connection that received the message * @param closeConnectionDuplicateClientName @@ -52,7 +52,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “SSKKeypair” message was received. - * + * * @param fcpConnection * The connection that received themessage * @param sskKeypair @@ -62,7 +62,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “Peer” message was received. - * + * * @param fcpConnection * The connection that received the message * @param peer @@ -72,7 +72,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that an “EndListPeers” message was received. - * + * * @param fcpConnection * The connection that recevied the message * @param endListPeers @@ -82,7 +82,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PeerNote” message was received. - * + * * @param fcpConnection * The connection that received the message * @param peerNote @@ -92,7 +92,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that an “EndListPeerNotes” message was received. - * + * * @param fcpConnection * The connection that received the message * @param endListPeerNotes @@ -102,7 +102,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PeerRemoved” message was received. - * + * * @param fcpConnection * The connection that received the message * @param peerRemoved @@ -112,7 +112,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “NodeData” message was received. - * + * * @param fcpConnection * The connection that received the message * @param nodeData @@ -122,7 +122,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “TestDDAReply” message was received. - * + * * @param fcpConnection * The connection that received the message * @param testDDAReply @@ -132,7 +132,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “TestDDAComplete” was received. - * + * * @param fcpConnection * The connection that received the message * @param testDDAComplete @@ -142,7 +142,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PersistentGet” was received. - * + * * @param fcpConnection * The connection that received the message * @param persistentGet @@ -152,7 +152,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PersistentPut” was received. - * + * * @param fcpConnection * The connection that received the message * @param persistentPut @@ -162,7 +162,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “EndListPersistentRequests” was received. - * + * * @param fcpConnection * The connection that received the message * @param endListPersistentRequests @@ -172,7 +172,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “URIGenerated” was received. - * + * * @param fcpConnection * The connection that received the message * @param uriGenerated @@ -182,7 +182,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “DataFound” was received. - * + * * @param fcpConnection * The connection that received the message * @param dataFound @@ -192,7 +192,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that an “AllData” was received. - * + * * @param fcpConnection * The connection that received the message * @param allData @@ -202,7 +202,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “SimpleProgress” was received. - * + * * @param fcpConnection * The connection that received the message * @param simpleProgress @@ -212,7 +212,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “StartedCompression” was received. - * + * * @param fcpConnection * The connection that received the message * @param startedCompression @@ -222,7 +222,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “FinishedCompression” was received. - * + * * @param fcpConnection * The connection that received the message * @param finishedCompression @@ -232,7 +232,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that an “UnknownPeerNoteType” was received. - * + * * @param fcpConnection * The connection that received the message * @param unknownPeerNoteType @@ -242,7 +242,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “UnknownNodeIdentifier” message was received. - * + * * @param fcpConnection * The connection that received the message * @param unknownNodeIdentifier @@ -252,7 +252,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “ConfigData” message was received. - * + * * @param fcpConnection * The connection that received the message * @param configData @@ -262,7 +262,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “GetFailed” message was recevied. - * + * * @param fcpConnection * The connection that received the message * @param getFailed @@ -272,7 +272,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PutFailed” message was received. - * + * * @param fcpConnection * The connection that received the message * @param putFailed @@ -282,7 +282,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that an “IdentifierCollision” message was receied. - * + * * @param fcpConnection * The connection that received the message * @param identifierCollision @@ -292,7 +292,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PersistentPutDir” message was received. - * + * * @param fcpConnection * The connection that received the message * @param persistentPutDir @@ -303,7 +303,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PersistentRequestRemoved” message was * received. - * + * * @param fcpConnection * The connection that received the message * @param persistentRequestRemoved @@ -313,7 +313,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “SubscribedUSKUpdate” message was received. - * + * * @param fcpConnection * The connection that recevied the message * @param subscribedUSKUpdate @@ -323,7 +323,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PluginInfo” message was received. - * + * * @param fcpConnection * The connection that received the message * @param pluginInfo @@ -333,7 +333,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that an “FCPPluginReply“ message was received. - * + * * @param fcpConnection * The connection that received the message * @param fcpPluginReply @@ -344,7 +344,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PersistentRequestModified” message was * received. - * + * * @param fcpConnection * The connection that received the message * @param persistentRequestModified @@ -354,7 +354,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PutSuccessful” message was received. - * + * * @param fcpConnection * The connection that received the message * @param putSuccessful @@ -364,7 +364,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “PutFetchable” message was received. - * + * * @param fcpConnection * The connection that received the message * @param putFetchable @@ -374,7 +374,7 @@ public interface FcpListener extends EventListener { /** * Notifies a listener that a “ProtocolError” was received. - * + * * @param fcpConnection * The connection that received the message * @param protocolError @@ -386,7 +386,7 @@ public interface FcpListener extends EventListener { * Notifies a listener that a message has been received. This method is only * called if {@link FcpConnection#handleMessage(FcpMessage)} does not * recognize the message. Should that ever happen, please file a bug report! - * + * * @param fcpConnection * The connection that received the message * @param fcpMessage @@ -398,10 +398,13 @@ public interface FcpListener extends EventListener { * Notifies a listener that a connection was closed. A closed connection can * be reestablished by calling {@link FcpConnection#connect()} on the same * object again. - * + * * @param fcpConnection * The connection that was closed. + * @param throwable + * The exception that caused the disconnect, or null + * if there was no exception */ - public void connectionClosed(FcpConnection fcpConnection); + public void connectionClosed(FcpConnection fcpConnection, Throwable throwable); } diff --git a/src/net/pterodactylus/fcp/FcpMessage.java b/src/net/pterodactylus/fcp/FcpMessage.java index cac9196..ff65a98 100644 --- a/src/net/pterodactylus/fcp/FcpMessage.java +++ b/src/net/pterodactylus/fcp/FcpMessage.java @@ -32,7 +32,7 @@ import java.util.Map.Entry; * An FCP message. FCP messages consist of a name, an arbitrary amount of * “fields” (i.e. key-value pairs), a message end marker, and optional payload * data that follows the marker. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ @@ -52,7 +52,7 @@ public class FcpMessage implements Iterable { /** * Creates a new FCP message with the given name. - * + * * @param name * The name of the FCP message */ @@ -64,7 +64,7 @@ public class FcpMessage implements Iterable { * Creates a new FCP message with the given name and the given payload input * stream. The payload input stream is not read until the message is sent to * the node using {@link FcpConnection#sendMessage(FcpMessage)}. - * + * * @param name * The name of the message * @param payloadInputStream @@ -77,7 +77,7 @@ public class FcpMessage implements Iterable { /** * Returns the name of the message. - * + * * @return The name of the message */ public String getName() { @@ -86,7 +86,7 @@ public class FcpMessage implements Iterable { /** * Checks whether this message has a field with the given name. - * + * * @param field * The name of the field to check for * @return true if the message has a field with the given @@ -99,7 +99,7 @@ public class FcpMessage implements Iterable { /** * Sets the field with the given name to the given value. If the field * already exists in this message it is overwritten. - * + * * @param field * The name of the field * @param value @@ -114,7 +114,7 @@ public class FcpMessage implements Iterable { /** * Returns the value of the given field. - * + * * @param field * The name of the field * @return The value of the field, or null if there is no @@ -126,7 +126,7 @@ public class FcpMessage implements Iterable { /** * Returns all fields of this message. - * + * * @return All fields of this message */ public Map getFields() { @@ -142,7 +142,7 @@ public class FcpMessage implements Iterable { /** * Sets the payload input stream of the message. - * + * * @param payloadInputStream * The payload input stream */ @@ -156,7 +156,7 @@ public class FcpMessage implements Iterable { * the payload is written to the given output stream after the message as * well. That means that this method can only be called once because on the * second invocation the payload input stream could not be read (again). - * + * * @param outputStream * The output stream to write the message to * @throws IOException @@ -171,8 +171,8 @@ public class FcpMessage implements Iterable { outputStream.flush(); if (payloadInputStream != null) { FcpUtils.copy(payloadInputStream, outputStream); + outputStream.flush(); } - outputStream.flush(); } // @@ -182,7 +182,7 @@ public class FcpMessage implements Iterable { /** * Writes the given line (followed by {@link #LINEFEED} to the given output * stream, using UTF-8 as encoding. - * + * * @param outputStream * The output stream to write to * @param line diff --git a/src/net/pterodactylus/fcp/FcpTest.java b/src/net/pterodactylus/fcp/FcpTest.java index a47cbca..9e0c0c5 100644 --- a/src/net/pterodactylus/fcp/FcpTest.java +++ b/src/net/pterodactylus/fcp/FcpTest.java @@ -25,7 +25,7 @@ import junit.framework.TestCase; /** * Tests various commands and the FCP connection. - * + * * @author David ‘Bombe’ Roden <bombe@freenetproject.org> * @version $Id$ */ @@ -49,7 +49,7 @@ public class FcpTest extends TestCase { */ @Override protected void tearDown() throws Exception { - fcpConnection.disconnect(); + fcpConnection.close(); } /** @@ -62,7 +62,7 @@ public class FcpTest extends TestCase { /** * Generates an SSK key pair. - * + * * @throws IOException * if an I/O error occurs * @throws InterruptedException -- 2.7.4