summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Clayton <alex.clayton@isode.com>2016-01-26 16:33:29 (GMT)
committerAlex Clayton <alex.clayton@isode.com>2016-01-27 12:29:01 (GMT)
commit91e97e936fe671678758702bbede6a47b5487f13 (patch)
treef92b1939fb1704d602f30cbf3791bb98d1a56018 /src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java
parent97a085f7e2c9b7820000eaace97dc0ab6392cb0d (diff)
downloadstroke-91e97e936fe671678758702bbede6a47b5487f13.zip
stroke-91e97e936fe671678758702bbede6a47b5487f13.tar.bz2
Some fixes for File Transfer Patch
Some fixes that were required for the File Transfer Patch (see patch notes on Gerrit). Test-information: By code inspection. Ran against MLC (after modification so it works for stroke interface changes introduces in a previous patch) it still runs correctly. Ran unit tests they still all pass. Change-Id: Ib49d9f9160f5e6b6b578f16695f8e8bc0f96a412
Diffstat (limited to 'src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java')
-rw-r--r--src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java
index 3a745e2..1c9eb31 100644
--- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java
+++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java
@@ -18,6 +18,10 @@ import com.isode.stroke.jid.JID;
import com.isode.stroke.signals.SignalConnection;
import com.isode.stroke.signals.Slot1;
import com.isode.stroke.signals.Slot;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
import java.util.Vector;
public class SOCKS5BytestreamServer {
@@ -26,7 +30,13 @@ public class SOCKS5BytestreamServer {
private SOCKS5BytestreamRegistry registry;
private Vector<SOCKS5BytestreamServerSession> sessions = new Vector<SOCKS5BytestreamServerSession>();
private SignalConnection onNewConnectionConn;
- private SignalConnection onFinishedConnection;
+
+ /**
+ * Map between {@link SOCKS5BytestreamServerSession} and the {@link SignalConnection}
+ * to that session's {@link SOCKS5BytestreamServerSession#onFinished} signal.
+ */
+ private Map<SOCKS5BytestreamServerSession, SignalConnection> sessionOnFinishedConnectionMap =
+ new HashMap<SOCKS5BytestreamServerSession, SignalConnection>();
public SOCKS5BytestreamServer(ConnectionServer connectionServer, SOCKS5BytestreamRegistry registry) {
this.connectionServer = connectionServer;
@@ -49,7 +59,10 @@ public class SOCKS5BytestreamServer {
public void stop() {
onNewConnectionConn.disconnect();
for (SOCKS5BytestreamServerSession session : sessions) {
- session.onFinished.disconnectAll();
+ SignalConnection onFinishedConnection = sessionOnFinishedConnectionMap.remove(session);
+ if (onFinishedConnection != null) {
+ onFinishedConnection.disconnect();
+ }
session.stop();
}
sessions.clear();
@@ -67,20 +80,25 @@ public class SOCKS5BytestreamServer {
private void handleNewConnection(Connection connection) {
final SOCKS5BytestreamServerSession session = new SOCKS5BytestreamServerSession(connection, registry);
- onFinishedConnection = session.onFinished.connect(new Slot1<FileTransferError>() {
+ SignalConnection onFinishedConnection = session.onFinished.connect(new Slot1<FileTransferError>() {
@Override
public void call(FileTransferError e) {
handleSessionFinished(session);
}
});
sessions.add(session);
+ sessionOnFinishedConnectionMap.put(session, onFinishedConnection);
+
session.start();
}
private void handleSessionFinished(SOCKS5BytestreamServerSession session) {
- while(sessions.contains(session)) {
- sessions.remove(session);
+ while(sessions.remove(session)) {
+ // Loop will run till session no longer is sessions
+ }
+ SignalConnection onFinishedConnection = sessionOnFinishedConnectionMap.remove(session);
+ if (onFinishedConnection != null) {
+ onFinishedConnection.disconnect();
}
- onFinishedConnection.disconnect();
}
} \ No newline at end of file