diff options
14 files changed, 112 insertions, 73 deletions
diff --git a/src/com/isode/stroke/elements/JingleS5BTransportPayload.java b/src/com/isode/stroke/elements/JingleS5BTransportPayload.java index 546a41a..5da70e3 100644 --- a/src/com/isode/stroke/elements/JingleS5BTransportPayload.java +++ b/src/com/isode/stroke/elements/JingleS5BTransportPayload.java @@ -55,11 +55,2 @@ public class JingleS5BTransportPayload extends JingleTransportPayload { } - - public boolean equals(Object c) { - if(!(c instanceof JingleS5BTransportPayload.Candidate)) { - return false; - } - else { - return this.equals(c); - } - } } diff --git a/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java b/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java index 4c3d47d..41528fa 100644 --- a/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java +++ b/src/com/isode/stroke/filetransfer/ByteArrayReadBytestream.java @@ -32,3 +32,3 @@ public class ByteArrayReadBytestream extends ReadBytestream { } - String s = new String(data.getData()); + String s = data.toString(); s = s.substring(position, position+readSize); diff --git a/src/com/isode/stroke/filetransfer/DefaultFileTransferTransporter.java b/src/com/isode/stroke/filetransfer/DefaultFileTransferTransporter.java index f06407e..c14ee86 100644 --- a/src/com/isode/stroke/filetransfer/DefaultFileTransferTransporter.java +++ b/src/com/isode/stroke/filetransfer/DefaultFileTransferTransporter.java @@ -71,2 +71,3 @@ public class DefaultFileTransferTransporter extends FileTransferTransporter { this.s5bRegistry = s5bRegistry; + this.s5bServerManager = s5bServerManager; this.s5bProxy = s5bProxy; @@ -77,3 +78,3 @@ public class DefaultFileTransferTransporter extends FileTransferTransporter { s5bProxy, - (Role.Initiator.equals(role) ? initiator : responder), + (role == Role.Initiator ? initiator : responder), idGenerator, @@ -134,3 +135,3 @@ public class DefaultFileTransferTransporter extends FileTransferTransporter { proxyRequest.setSID(s5bSessionID); - proxyRequest.setActivate(Role.Initiator.equals(role) ? responder : initiator); + proxyRequest.setActivate(role == Role.Initiator ? responder : initiator); diff --git a/src/com/isode/stroke/filetransfer/FileReadBytestream.java b/src/com/isode/stroke/filetransfer/FileReadBytestream.java index d349c17..53cb974 100644 --- a/src/com/isode/stroke/filetransfer/FileReadBytestream.java +++ b/src/com/isode/stroke/filetransfer/FileReadBytestream.java @@ -33,5 +33,6 @@ public class FileReadBytestream extends ReadBytestream { } - ByteArray result = new ByteArray(); //assert(stream.good()); - stream.read(result.getData(), 0, size); + byte[] buffer = new byte[size]; + stream.read(buffer, 0, size); + ByteArray result = new ByteArray(buffer); onRead.emit(result); diff --git a/src/com/isode/stroke/filetransfer/FileTransferTransporter.java b/src/com/isode/stroke/filetransfer/FileTransferTransporter.java index d20550d..4aea154 100644 --- a/src/com/isode/stroke/filetransfer/FileTransferTransporter.java +++ b/src/com/isode/stroke/filetransfer/FileTransferTransporter.java @@ -51,5 +51,5 @@ public abstract class FileTransferTransporter { - public final Signal3<String /* sessionID */, Vector<JingleS5BTransportPayload.Candidate>, String /* dstAddr */> onLocalCandidatesGenerated = new Signal3<String, Vector<JingleS5BTransportPayload.Candidate>, String>(); - public final Signal2<String /* sessionID */, JingleS5BTransportPayload.Candidate> onRemoteCandidateSelectFinished = new Signal2<String, JingleS5BTransportPayload.Candidate>(); - public final Signal2<String /* sessionID */, ErrorPayload> onProxyActivated = new Signal2<String, ErrorPayload>(); + public final Signal3<String, Vector<JingleS5BTransportPayload.Candidate>, String> onLocalCandidatesGenerated = new Signal3<String, Vector<JingleS5BTransportPayload.Candidate>, String>(); + public final Signal2<String, JingleS5BTransportPayload.Candidate> onRemoteCandidateSelectFinished = new Signal2<String, JingleS5BTransportPayload.Candidate>(); + public final Signal2<String, ErrorPayload> onProxyActivated = new Signal2<String, ErrorPayload>(); }
\ No newline at end of file diff --git a/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java b/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java index c5001e0..92b185d 100644 --- a/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java +++ b/src/com/isode/stroke/filetransfer/IncomingJingleFileTransfer.java @@ -394,5 +394,4 @@ public class IncomingJingleFileTransfer extends JingleFileTransfer implements In - JingleIBBTransportPayload ibbTransport; if (options.isInBandAllowed() && transport instanceof JingleIBBTransportPayload) { - ibbTransport = (JingleIBBTransportPayload)transport; + JingleIBBTransportPayload ibbTransport = (JingleIBBTransportPayload)transport; logger_.fine("transport replaced with IBB\n"); diff --git a/src/com/isode/stroke/filetransfer/IncrementalBytestreamHashCalculator.java b/src/com/isode/stroke/filetransfer/IncrementalBytestreamHashCalculator.java index e79a7a5..0b8902e 100644 --- a/src/com/isode/stroke/filetransfer/IncrementalBytestreamHashCalculator.java +++ b/src/com/isode/stroke/filetransfer/IncrementalBytestreamHashCalculator.java @@ -44,11 +44,2 @@ public class IncrementalBytestreamHashCalculator { - /*void feedData(const SafeByteArray& data) { - if (md5Hasher) { - md5Hasher.update(createByteArray(data.data(), data.size())); - } - if (sha1Hasher) { - sha1Hasher.update(createByteArray(data.data(), data.size())); - } - }*/ - public ByteArray getSHA1Hash() { diff --git a/src/com/isode/stroke/filetransfer/LocalJingleTransportCandidateGenerator.java b/src/com/isode/stroke/filetransfer/LocalJingleTransportCandidateGenerator.java index 1cacda7..3839b26 100644 --- a/src/com/isode/stroke/filetransfer/LocalJingleTransportCandidateGenerator.java +++ b/src/com/isode/stroke/filetransfer/LocalJingleTransportCandidateGenerator.java @@ -48,3 +48,8 @@ public class LocalJingleTransportCandidateGenerator { - public LocalJingleTransportCandidateGenerator( + /** + * {@link SignalConnection} to {@link #s5bServerResourceUser_.onSuccessfulInitialized} + */ + private SignalConnection onSuccessfulInitializedConnection_; + + public LocalJingleTransportCandidateGenerator( SOCKS5BytestreamServerManager s5bServerManager, @@ -72,3 +77,3 @@ public class LocalJingleTransportCandidateGenerator { else { - s5bServerResourceUser_.onSuccessfulInitialized.connect(new Slot1<Boolean>() { + onSuccessfulInitializedConnection_ = s5bServerResourceUser_.onSuccessfulInitialized.connect(new Slot1<Boolean>() { @Override @@ -102,6 +107,6 @@ public class LocalJingleTransportCandidateGenerator { } - if (s5bServerResourceUser_ != null) { - s5bServerResourceUser_.onSuccessfulInitialized.disconnectAll(); - s5bServerResourceUser_ = null; + if (onSuccessfulInitializedConnection_ != null) { + onSuccessfulInitializedConnection_.disconnect(); } + s5bServerResourceUser_ = null; } @@ -109,6 +114,6 @@ public class LocalJingleTransportCandidateGenerator { public Signal1<Vector<JingleS5BTransportPayload.Candidate>> onLocalTransportCandidatesGenerated = new Signal1<Vector<JingleS5BTransportPayload.Candidate>>(); - + private void handleS5BServerInitialized(boolean success) { - if (s5bServerResourceUser_ != null) { - s5bServerResourceUser_.onSuccessfulInitialized.disconnectAll(); + if (onSuccessfulInitializedConnection_ != null) { + onSuccessfulInitializedConnection_.disconnect(); } @@ -132,5 +137,2 @@ public class LocalJingleTransportCandidateGenerator { logger_.warning("Unable to start SOCKS5 server\n"); - if (s5bServerResourceUser_ != null) { - s5bServerResourceUser_.onSuccessfulInitialized.disconnectAll(); - } s5bServerResourceUser_ = null; @@ -183,3 +185,3 @@ public class LocalJingleTransportCandidateGenerator { if (options_.isAssistedAllowed()) { - // get assissted candidates + // get assisted candidates Vector<HostAddressPort> assisstedCandidates = s5bServerManager.getAssistedHostAddressPorts(); diff --git a/src/com/isode/stroke/filetransfer/RemoteJingleTransportCandidateSelector.java b/src/com/isode/stroke/filetransfer/RemoteJingleTransportCandidateSelector.java index 1d1c822..5cbc3ae 100644 --- a/src/com/isode/stroke/filetransfer/RemoteJingleTransportCandidateSelector.java +++ b/src/com/isode/stroke/filetransfer/RemoteJingleTransportCandidateSelector.java @@ -77,4 +77,3 @@ public class RemoteJingleTransportCandidateSelector { else { - lastCandidate = candidates.peek(); - candidates.poll(); + lastCandidate = candidates.poll(); logger_.fine("Trying candidate " + lastCandidate.cid + "\n"); diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java index 25aadc4..0144bcb 100644 --- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java +++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamClientSession.java @@ -48,3 +48,3 @@ public class SOCKS5BytestreamClientSession { } - public int description; + public final int description; }; @@ -276,3 +276,3 @@ public class SOCKS5BytestreamClientSession { else { - //---------writeBytestream.write(new ByteArray(vecptr(*data), data.size())); + writeBytestream.write(data); //onBytesReceived(data.size()); diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamProxiesManager.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamProxiesManager.java index 14c7ea3..eab3031 100644 --- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamProxiesManager.java +++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamProxiesManager.java @@ -27,2 +27,3 @@ import com.isode.stroke.network.HostAddress; import com.isode.stroke.queries.IQRouter; +import com.isode.stroke.session.Session; import com.isode.stroke.signals.Slot1; @@ -33,2 +34,4 @@ import com.isode.stroke.elements.S5BProxyRequest; import com.isode.stroke.jid.JID; + +import java.util.Iterator; import java.util.Vector; @@ -51,5 +54,5 @@ public class SOCKS5BytestreamProxiesManager { private Logger logger_ = Logger.getLogger(this.getClass().getName()); - private SignalConnection onSessionReadyConnection; - private SignalConnection onFinishedConnection; + // TODO plonk this into the pair or not + // TODO think what this is trying to do? private static class Pair { @@ -63,2 +66,16 @@ public class SOCKS5BytestreamProxiesManager { + /** + * Map between {@link SOCKS5BytestreamClientSession} and a {@link SignalConnection} to their + * {@link SOCKS5BytestreamClientSession#onSessionReady} + */ + private Map<SOCKS5BytestreamClientSession,SignalConnection> onSessionReadyConnectionMap = + new HashMap<SOCKS5BytestreamClientSession,SignalConnection>(); + + /** + * Map between {@link SOCKS5BytestreamClientSession} and a {@link SignalConnection} to their + * {@link SOCKS5BytestreamClientSession#onFinished} + */ + private Map<SOCKS5BytestreamClientSession,SignalConnection> onFinishedConnectionMap = + new HashMap<SOCKS5BytestreamClientSession,SignalConnection>(); + private SOCKS5BytestreamProxyFinder proxyFinder_; @@ -109,3 +126,3 @@ public class SOCKS5BytestreamProxiesManager { clientSessions.add(new Pair(proxyJid, session)); - onSessionReadyConnection = session.onSessionReady.connect(new Slot1<Boolean>() { + SignalConnection onSessionReadyConnection = session.onSessionReady.connect(new Slot1<Boolean>() { @Override @@ -115,3 +132,4 @@ public class SOCKS5BytestreamProxiesManager { }); - onFinishedConnection = session.onFinished.connect(new Slot1<FileTransferError>() { + onSessionReadyConnectionMap.put(session, onSessionReadyConnection); + SignalConnection onFinishedConnection = session.onFinished.connect(new Slot1<FileTransferError>() { @Override @@ -121,2 +139,3 @@ public class SOCKS5BytestreamProxiesManager { }); + onFinishedConnectionMap.put(session, onFinishedConnection); session.start(); @@ -137,4 +156,12 @@ public class SOCKS5BytestreamProxiesManager { for(Pair i : proxySessions_.get(sessionID)) { - i.sock5.onSessionReady.disconnectAll(); - i.sock5.onFinished.disconnectAll(); + SignalConnection onSessionReadyConnection = + onSessionReadyConnectionMap.remove(i.sock5); + if (onSessionReadyConnection != null) { + onSessionReadyConnection.disconnect(); + } + SignalConnection onFinishedConnection = + onFinishedConnectionMap.remove(i.sock5); + if (onFinishedConnection != null) { + onFinishedConnection.disconnect(); + } if (i.jid.equals(proxyJID) && activeSession == null) { @@ -219,3 +246,6 @@ public class SOCKS5BytestreamProxiesManager { private void handleProxySessionReady(final String sessionID, final JID jid, SOCKS5BytestreamClientSession session, boolean error) { - onSessionReadyConnection.disconnect(); + SignalConnection onSessionReadyConnection = onSessionReadyConnectionMap.remove(session); + if (onSessionReadyConnection != null) { + onSessionReadyConnection.disconnect(); + } if (!error) { @@ -223,7 +253,9 @@ public class SOCKS5BytestreamProxiesManager { if (proxySessions_.containsKey(sessionID)) { - for(Pair i : proxySessions_.get(sessionID)) { - if ((i.jid.equals(jid)) && (!i.sock5.equals(session))) { - i.sock5.stop(); - proxySessions_.get(sessionID).remove(i); //Swiften assigns i, so that iterator points to the next element. - } + Iterator<Pair> iterator = proxySessions_.get(sessionID).iterator(); + while (iterator.hasNext()) { + Pair i = iterator.next(); + if ((i.jid.equals(jid)) && (!i.sock5.equals(session))) { + i.sock5.stop(); + iterator.remove();; //Swiften assigns i, so that iterator points to the next element. + } } @@ -234,3 +266,6 @@ public class SOCKS5BytestreamProxiesManager { private void handleProxySessionFinished(final String sessionID, final JID jid, SOCKS5BytestreamClientSession session, FileTransferError error) { - onFinishedConnection.disconnect(); + SignalConnection onFinishedConnection = onFinishedConnectionMap.remove(session); + if (onFinishedConnection != null) { + onFinishedConnection.disconnect(); + } if (error != null) { @@ -238,9 +273,11 @@ public class SOCKS5BytestreamProxiesManager { if (proxySessions_.containsKey(sessionID)) { - for(Pair i : proxySessions_.get(sessionID)) { - if ((i.jid.equals(jid)) && (i.sock5.equals(session))) { - i.sock5.stop(); - proxySessions_.get(sessionID).remove(i); //Swiften assigns i, so that iterator points to the next element. - break; - } - } + Iterator<Pair> iterator = proxySessions_.get(sessionID).iterator(); + while (iterator.hasNext()) { + Pair i = iterator.next(); + if ((i.jid.equals(jid)) && (i.sock5.equals(session))) { + i.sock5.stop(); + iterator.remove();; //Swiften assigns i, so that iterator points to the next element. + break; + } + } } 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 @@ -20,2 +20,6 @@ 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; @@ -28,3 +32,9 @@ public class SOCKS5BytestreamServer { 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>(); @@ -51,3 +61,6 @@ public class SOCKS5BytestreamServer { for (SOCKS5BytestreamServerSession session : sessions) { - session.onFinished.disconnectAll(); + SignalConnection onFinishedConnection = sessionOnFinishedConnectionMap.remove(session); + if (onFinishedConnection != null) { + onFinishedConnection.disconnect(); + } session.stop(); @@ -69,3 +82,3 @@ public class SOCKS5BytestreamServer { final SOCKS5BytestreamServerSession session = new SOCKS5BytestreamServerSession(connection, registry); - onFinishedConnection = session.onFinished.connect(new Slot1<FileTransferError>() { + SignalConnection onFinishedConnection = session.onFinished.connect(new Slot1<FileTransferError>() { @Override @@ -76,2 +89,4 @@ public class SOCKS5BytestreamServer { sessions.add(session); + sessionOnFinishedConnectionMap.put(session, onFinishedConnection); + session.start(); @@ -80,6 +95,9 @@ public class SOCKS5BytestreamServer { 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(); } diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java index dc3c3b7..277d7f8 100644 --- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java +++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerPortForwardingUser.java @@ -25,3 +25,3 @@ public class SOCKS5BytestreamServerPortForwardingUser { // the server should be initialized, so we know what port to setup a forward for - assert(s5bServerManager != null); + assert(s5bServerManager.isInitialized()); if (s5bServerManager_.isPortForwardingReady()) { diff --git a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerResourceUser.java b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerResourceUser.java index acb8af1..c814b1d 100644 --- a/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerResourceUser.java +++ b/src/com/isode/stroke/filetransfer/SOCKS5BytestreamServerResourceUser.java @@ -24,3 +24,3 @@ public class SOCKS5BytestreamServerResourceUser { this.s5bServerManager_ = s5bServerManager; - assert(s5bServerManager_ == null); + assert(!s5bServerManager_.isInitialized()); onInitializedConnection_ = s5bServerManager_.onInitialized.connect(new Slot1<Boolean>() { @@ -38,3 +38,3 @@ public class SOCKS5BytestreamServerResourceUser { public void delete() { - if (s5bServerManager_ != null) { + if (s5bServerManager_.isInitialized()) { s5bServerManager_.stop(); |
Swift