X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fnet%2Fpterodactylus%2Futil%2Ffcp%2FFcpConnection.java;h=8ea71ee55fff7743852cfd8204d2da2bf65ca953;hb=e98291d3a70d3791b9ed3e87c58e6a45584f1ae2;hp=dffb11085f974f0b058a7c382da7bba39cb1a5d3;hpb=ff858758c2c7db3b075cce6e233600555a612935;p=jSite2.git diff --git a/src/net/pterodactylus/util/fcp/FcpConnection.java b/src/net/pterodactylus/util/fcp/FcpConnection.java index dffb110..8ea71ee 100644 --- a/src/net/pterodactylus/util/fcp/FcpConnection.java +++ b/src/net/pterodactylus/util/fcp/FcpConnection.java @@ -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)) {