add method to encode multiple string values
[jSite2.git] / src / net / pterodactylus / util / fcp / FcpConnection.java
index dabb542..96f2ea0 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.
@@ -261,6 +262,7 @@ public class FcpConnection {
        /**
         * Notifies all listeners that a “TestDDAReply” message was received.
         * 
+        * @see FcpListener#receivedTestDDAReply(FcpConnection, TestDDAReply)
         * @param testDDAReply
         *            The “TestDDAReply” message
         */
@@ -273,6 +275,7 @@ public class FcpConnection {
        /**
         * Notifies all listeners that a “TestDDAComplete” message was received.
         * 
+        * @see FcpListener#receivedTestDDAComplete(FcpConnection, TestDDAComplete)
         * @param testDDAComplete
         *            The “TestDDAComplete” message
         */
@@ -283,6 +286,56 @@ public class FcpConnection {
        }
 
        /**
+        * Notifies all listeners that a “PersistentPut” message was received.
+        * 
+        * @see FcpListener#receivedPersistentPut(FcpConnection, PersistentPut)
+        * @param persistentPut
+        *            The “PersistentPut” message
+        */
+       private void fireReceivedPersistentPut(PersistentPut persistentPut) {
+               for (FcpListener fcpListener: fcpListeners) {
+                       fcpListener.receivedPersistentPut(this, persistentPut);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a “EndListPersistentRequests” message was
+        * received.
+        * 
+        * @param endListPersistentRequests
+        *            The “EndListPersistentRequests” message
+        */
+       private void fireReceivedEndListPersistentRequests(EndListPersistentRequests endListPersistentRequests) {
+               for (FcpListener fcpListener: fcpListeners) {
+                       fcpListener.receivedEndListPersistentRequests(this, endListPersistentRequests);
+               }
+       }
+
+       /**
+        * Notifies all listeners that a “URIGenerated” message was received.
+        * 
+        * @param uriGenerated
+        *            The “URIGenerated” message
+        */
+       private void fireReceivedURIGenerated(URIGenerated uriGenerated) {
+               for (FcpListener fcpListener: fcpListeners) {
+                       fcpListener.receivedURIGenerated(this, uriGenerated);
+               }
+       }
+
+       /**
+        * 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 “ProtocolError” message was received.
         * 
         * @param protocolError
@@ -370,10 +423,31 @@ public class FcpConnection {
                String messageName = fcpMessage.getName();
                if ("ProtocolError".equals(messageName)) {
                        fireReceivedProtocolError(new ProtocolError(fcpMessage));
+               } else if ("PersistentPut".equals(messageName)) {
+                       fireReceivedPersistentPut(new PersistentPut(fcpMessage));
+               } else if ("URIGenerated".equals(messageName)) {
+                       fireReceivedURIGenerated(new URIGenerated(fcpMessage));
+               } else if ("EndListPersistentRequests".equals(messageName)) {
+                       fireReceivedEndListPersistentRequests(new EndListPersistentRequests(fcpMessage));
                } else if ("Peer".equals(messageName)) {
                        fireReceivedPeer(new Peer(fcpMessage));
                } else if ("PeerNote".equals(messageName)) {
                        fireReceivedPeerNote(new PeerNote(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)) {