import java.util.List;
import net.pterodactylus.util.io.Closer;
+import net.pterodactylus.util.io.LimitedInputStream;
/**
* An FCP connection to a Freenet node.
}
/**
+ * Notifies all listeners that an “AllData” message was received.
+ *
+ * @param allData
+ * The “AllData” message
+ */
+ private void fireReceivedAllData(AllData allData) {
+ for (FcpListener fcpListener: fcpListeners) {
+ fcpListener.receivedAllData(this, allData);
+ }
+ }
+
+ /**
+ * Notifies all listeners that a “SimpleProgress” message was received.
+ *
+ * @param simpleProgress
+ * The “SimpleProgress” message
+ */
+ private void fireReceivedSimpleProgress(SimpleProgress simpleProgress) {
+ for (FcpListener fcpListener: fcpListeners) {
+ fcpListener.receivedSimpleProgress(this, simpleProgress);
+ }
+ }
+
+ /**
+ * Notifies all listeners that a “StartedCompression” message was received.
+ *
+ * @param startedCompression
+ * The “StartedCompression” message
+ */
+ private void fireReceivedStartedCompression(StartedCompression startedCompression) {
+ for (FcpListener fcpListener: fcpListeners) {
+ fcpListener.receivedStartedCompression(this, startedCompression);
+ }
+ }
+
+ /**
+ * Notifies all listeners that a “FinishedCompression” message was received.
+ *
+ * @param finishedCompression
+ * The “FinishedCompression” message
+ */
+ private void fireReceivedFinishedCompression(FinishedCompression finishedCompression) {
+ for (FcpListener fcpListener: fcpListeners) {
+ fcpListener.receviedFinishedCompression(this, finishedCompression);
+ }
+ }
+
+ /**
* Notifies all listeners that a “ProtocolError” message was received.
*
* @param protocolError
*/
void handleMessage(FcpMessage fcpMessage) {
String messageName = fcpMessage.getName();
- if ("ProtocolError".equals(messageName)) {
+ if ("SimpleProgress".equals(messageName)) {
+ fireReceivedSimpleProgress(new SimpleProgress(fcpMessage));
+ } else if ("ProtocolError".equals(messageName)) {
fireReceivedProtocolError(new ProtocolError(fcpMessage));
} else if ("PersistentPut".equals(messageName)) {
fireReceivedPersistentPut(new PersistentPut(fcpMessage));
fireReceivedPeer(new Peer(fcpMessage));
} else if ("PeerNote".equals(messageName)) {
fireReceivedPeerNote(new PeerNote(fcpMessage));
+ } else if ("StartedCompression".equals(messageName)) {
+ fireReceivedStartedCompression(new StartedCompression(fcpMessage));
+ } else if ("FinishedCompression".equals(messageName)) {
+ fireReceivedFinishedCompression(new FinishedCompression(fcpMessage));
+ } else if ("AllData".equals(messageName)) {
+ long dataLength;
+ try {
+ dataLength = Long.valueOf(fcpMessage.getField("DataLength"));
+ } catch (NumberFormatException nfe1) {
+ dataLength = -1;
+ }
+ LimitedInputStream payloadInputStream = new LimitedInputStream(remoteInputStream, dataLength);
+ fireReceivedAllData(new AllData(fcpMessage, payloadInputStream));
+ try {
+ payloadInputStream.consume();
+ } catch (IOException ioe1) {
+ /* FIXME - what now? */
+ /* well, ignore. when the connection handler fails, all fails. */
+ }
} else if ("EndListPeerNotes".equals(messageName)) {
fireReceivedEndListPeerNotes(new EndListPeerNotes(fcpMessage));
} else if ("EndListPeers".equals(messageName)) {