/**
* Creates a new FCP connection to the freenet node running on localhost,
* using the default port.
/**
* Creates a new FCP connection to the freenet node running on localhost,
* using the default port.
/**
* Creates a new FCP connection to the Freenet node running on the given
* host, listening on the default port.
/**
* Creates a new FCP connection to the Freenet node running on the given
* host, listening on the default port.
/**
* Creates a new FCP connection to the Freenet node running on the given
* host, listening on the given port.
/**
* Creates a new FCP connection to the Freenet node running on the given
* host, listening on the given port.
/**
* Creates a new FCP connection to the Freenet node running at the given
* address, listening on the default port.
/**
* Creates a new FCP connection to the Freenet node running at the given
* address, listening on the default port.
/**
* Creates a new FCP connection to the Freenet node running at the given
* address, listening on the given port.
/**
* Creates a new FCP connection to the Freenet node running at the given
* address, listening on the given port.
* @see FcpListener#receivedNodeHello(FcpConnection, NodeHello)
* @param nodeHello
* The “NodeHello” message
* @see FcpListener#receivedNodeHello(FcpConnection, NodeHello)
* @param nodeHello
* The “NodeHello” message
* @see FcpListener#receivedCloseConnectionDuplicateClientName(FcpConnection,
* CloseConnectionDuplicateClientName)
* @param closeConnectionDuplicateClientName
* @see FcpListener#receivedCloseConnectionDuplicateClientName(FcpConnection,
* CloseConnectionDuplicateClientName)
* @param closeConnectionDuplicateClientName
* @see FcpListener#receivedSSKKeypair(FcpConnection, SSKKeypair)
* @param sskKeypair
* The “SSKKeypair” message
* @see FcpListener#receivedSSKKeypair(FcpConnection, SSKKeypair)
* @param sskKeypair
* The “SSKKeypair” message
* @see FcpListener#receivedEndListPeers(FcpConnection, EndListPeers)
* @param endListPeers
* The “EndListPeers” message
* @see FcpListener#receivedEndListPeers(FcpConnection, EndListPeers)
* @param endListPeers
* The “EndListPeers” message
* @see FcpListener#receivedEndListPeerNotes(FcpConnection,
* EndListPeerNotes)
* @param endListPeerNotes
* @see FcpListener#receivedEndListPeerNotes(FcpConnection,
* EndListPeerNotes)
* @param endListPeerNotes
* @see FcpListener#receivedPeerRemoved(FcpConnection, PeerRemoved)
* @param peerRemoved
* The “PeerRemoved” message
* @see FcpListener#receivedPeerRemoved(FcpConnection, PeerRemoved)
* @param peerRemoved
* The “PeerRemoved” message
* @see FcpListener#receivedTestDDAReply(FcpConnection, TestDDAReply)
* @param testDDAReply
* The “TestDDAReply” message
* @see FcpListener#receivedTestDDAReply(FcpConnection, TestDDAReply)
* @param testDDAReply
* The “TestDDAReply” message
* @see FcpListener#receivedTestDDAComplete(FcpConnection, TestDDAComplete)
* @param testDDAComplete
* The “TestDDAComplete” message
* @see FcpListener#receivedTestDDAComplete(FcpConnection, TestDDAComplete)
* @param testDDAComplete
* The “TestDDAComplete” message
* @see FcpListener#receivedPersistentGet(FcpConnection, PersistentGet)
* @param persistentGet
* The “PersistentGet” message
* @see FcpListener#receivedPersistentGet(FcpConnection, PersistentGet)
* @param persistentGet
* The “PersistentGet” message
* @see FcpListener#receivedPersistentPut(FcpConnection, PersistentPut)
* @param persistentPut
* The “PersistentPut” message
* @see FcpListener#receivedPersistentPut(FcpConnection, PersistentPut)
* @param persistentPut
* The “PersistentPut” message
* @see FcpListener#receivedEndListPersistentRequests(FcpConnection,
* EndListPersistentRequests)
* @param endListPersistentRequests
* @see FcpListener#receivedEndListPersistentRequests(FcpConnection,
* EndListPersistentRequests)
* @param endListPersistentRequests
* @see FcpListener#receivedURIGenerated(FcpConnection, URIGenerated)
* @param uriGenerated
* The “URIGenerated” message
* @see FcpListener#receivedURIGenerated(FcpConnection, URIGenerated)
* @param uriGenerated
* The “URIGenerated” message
* @see FcpListener#receivedDataFound(FcpConnection, DataFound)
* @param dataFound
* The “DataFound” message
* @see FcpListener#receivedDataFound(FcpConnection, DataFound)
* @param dataFound
* The “DataFound” message
* @see FcpListener#receivedSimpleProgress(FcpConnection, SimpleProgress)
* @param simpleProgress
* The “SimpleProgress” message
* @see FcpListener#receivedSimpleProgress(FcpConnection, SimpleProgress)
* @param simpleProgress
* The “SimpleProgress” message
* @see FcpListener#receivedStartedCompression(FcpConnection,
* StartedCompression)
* @param startedCompression
* @see FcpListener#receivedStartedCompression(FcpConnection,
* StartedCompression)
* @param startedCompression
* @see FcpListener#receviedFinishedCompression(FcpConnection,
* FinishedCompression)
* @param finishedCompression
* @see FcpListener#receviedFinishedCompression(FcpConnection,
* FinishedCompression)
* @param finishedCompression
* @see FcpListener#receivedUnknownPeerNoteType(FcpConnection,
* UnknownPeerNoteType)
* @param unknownPeerNoteType
* @see FcpListener#receivedUnknownPeerNoteType(FcpConnection,
* UnknownPeerNoteType)
* @param unknownPeerNoteType
* @see FcpListener#receivedUnknownNodeIdentifier(FcpConnection,
* UnknownNodeIdentifier)
* @param unknownNodeIdentifier
* @see FcpListener#receivedUnknownNodeIdentifier(FcpConnection,
* UnknownNodeIdentifier)
* @param unknownNodeIdentifier
* @see FcpListener#receivedConfigData(FcpConnection, ConfigData)
* @param configData
* The “ConfigData” message
* @see FcpListener#receivedConfigData(FcpConnection, ConfigData)
* @param configData
* The “ConfigData” message
* @see FcpListener#receivedGetFailed(FcpConnection, GetFailed)
* @param getFailed
* The “GetFailed” message
* @see FcpListener#receivedGetFailed(FcpConnection, GetFailed)
* @param getFailed
* The “GetFailed” message
* @see FcpListener#receivedPutFailed(FcpConnection, PutFailed)
* @param putFailed
* The “PutFailed” message
* @see FcpListener#receivedPutFailed(FcpConnection, PutFailed)
* @param putFailed
* The “PutFailed” message
* @see FcpListener#receivedIdentifierCollision(FcpConnection,
* IdentifierCollision)
* @param identifierCollision
* @see FcpListener#receivedIdentifierCollision(FcpConnection,
* IdentifierCollision)
* @param identifierCollision
* @see FcpListener#receivedPersistentPutDir(FcpConnection,
* PersistentPutDir)
* @param persistentPutDir
* @see FcpListener#receivedPersistentPutDir(FcpConnection,
* PersistentPutDir)
* @param persistentPutDir
* @see FcpListener#receivedPersistentRequestRemoved(FcpConnection,
* PersistentRequestRemoved)
* @param persistentRequestRemoved
* @see FcpListener#receivedPersistentRequestRemoved(FcpConnection,
* PersistentRequestRemoved)
* @param persistentRequestRemoved
* @see FcpListener#receivedSubscribedUSKUpdate(FcpConnection,
* SubscribedUSKUpdate)
* @param subscribedUSKUpdate
* @see FcpListener#receivedSubscribedUSKUpdate(FcpConnection,
* SubscribedUSKUpdate)
* @param subscribedUSKUpdate
* @see FcpListener#receivedPluginInfo(FcpConnection, PluginInfo)
* @param pluginInfo
* The “PluginInfo” message
* @see FcpListener#receivedPluginInfo(FcpConnection, PluginInfo)
* @param pluginInfo
* The “PluginInfo” message
* @see FcpListener#receivedFCPPluginReply(FcpConnection, FCPPluginReply)
* @param fcpPluginReply
* The “FCPPluginReply” message
* @see FcpListener#receivedFCPPluginReply(FcpConnection, FCPPluginReply)
* @param fcpPluginReply
* The “FCPPluginReply” message
* @see FcpListener#receivedPersistentRequestModified(FcpConnection,
* PersistentRequestModified)
* @param persistentRequestModified
* @see FcpListener#receivedPersistentRequestModified(FcpConnection,
* PersistentRequestModified)
* @param persistentRequestModified
* @see FcpListener#receivedPutSuccessful(FcpConnection, PutSuccessful)
* @param putSuccessful
* The “PutSuccessful” message
* @see FcpListener#receivedPutSuccessful(FcpConnection, PutSuccessful)
* @param putSuccessful
* The “PutSuccessful” message
* @see FcpListener#receivedPutFetchable(FcpConnection, PutFetchable)
* @param putFetchable
* The “PutFetchable” message
* @see FcpListener#receivedPutFetchable(FcpConnection, PutFetchable)
* @param putFetchable
* The “PutFetchable” message
* @see FcpListener#receivedProtocolError(FcpConnection, ProtocolError)
* @param protocolError
* The “ProtocolError” message
* @see FcpListener#receivedProtocolError(FcpConnection, ProtocolError)
* @param protocolError
* The “ProtocolError” message
* @see FcpListener#receivedMessage(FcpConnection, FcpMessage)
* @param fcpMessage
* The message that was received
* @see FcpListener#receivedMessage(FcpConnection, FcpMessage)
* @param fcpMessage
* The message that was received
* @param throwable
* The exception that caused the disconnect, or <code>null</code>
* if there was no exception
* @param throwable
* The exception that caused the disconnect, or <code>null</code>
* if there was no exception
/**
* Handles the given message, notifying listeners. This message should only
* be called by {@link FcpConnectionHandler}.
/**
* Handles the given message, notifying listeners. This message should only
* be called by {@link FcpConnectionHandler}.
* @param throwable
* The exception that caused the disconnect, or <code>null</code>
* if there was no exception
* @param throwable
* The exception that caused the disconnect, or <code>null</code>
* if there was no exception
/**
* Incremets the counter in {@link #incomingMessageStatistics} by <cod>1</code>
* for the given message name.
/**
* Incremets the counter in {@link #incomingMessageStatistics} by <cod>1</code>
* for the given message name.
/**
* A wrapper around an {@link InputStream} that only supplies a limit number
* of bytes from the underlying input stream.
/**
* A wrapper around an {@link InputStream} that only supplies a limit number
* of bytes from the underlying input stream.
/**
* Creates a new LimitedInputStream that supplies at most
* <code>length</code> bytes from the given input stream.
/**
* Creates a new LimitedInputStream that supplies at most
* <code>length</code> bytes from the given input stream.
/**
* {@inheritDoc} This method does nothing, as {@link #mark(int)} and
* {@link #reset()} are not supported.
/**
* {@inheritDoc} This method does nothing, as {@link #mark(int)} and
* {@link #reset()} are not supported.
/**
* {@inheritDoc} This method does nothing, as {@link #mark(int)} and
* {@link #reset()} are not supported.
/**
* {@inheritDoc} This method does nothing, as {@link #mark(int)} and
* {@link #reset()} are not supported.