add FinishedCompression
[jSite2.git] / src / net / pterodactylus / util / fcp / FcpConnection.java
index dffb110..8ea71ee 100644 (file)
@@ -29,6 +29,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import net.pterodactylus.util.io.Closer;
+import net.pterodactylus.util.io.LimitedInputStream;
 
 /**
  * An FCP connection to a Freenet node.
@@ -323,6 +324,54 @@ public class FcpConnection {
        }
 
        /**
+        * 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
@@ -408,7 +457,9 @@ public class FcpConnection {
         */
        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));
@@ -420,6 +471,25 @@ public class FcpConnection {
                        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)) {