diff options
author | Alex Clayton <alex.clayton@isode.com> | 2016-01-26 16:33:29 (GMT) |
---|---|---|
committer | Alex Clayton <alex.clayton@isode.com> | 2016-01-27 12:29:01 (GMT) |
commit | 91e97e936fe671678758702bbede6a47b5487f13 (patch) | |
tree | f92b1939fb1704d602f30cbf3791bb98d1a56018 /src/com/isode/stroke/filetransfer/SOCKS5BytestreamServer.java | |
parent | 97a085f7e2c9b7820000eaace97dc0ab6392cb0d (diff) | |
download | stroke-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.java | 30 |
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 |