diff options
Diffstat (limited to 'src/com/isode/stroke/client/ClientSession.java')
-rw-r--r-- | src/com/isode/stroke/client/ClientSession.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/com/isode/stroke/client/ClientSession.java b/src/com/isode/stroke/client/ClientSession.java index 78594b0..b0afb7b 100644 --- a/src/com/isode/stroke/client/ClientSession.java +++ b/src/com/isode/stroke/client/ClientSession.java @@ -104,14 +104,18 @@ public class ClientSession { public enum UseTLS { NeverUseTLS, - UseTLSWhenAvailable + UseTLSWhenAvailable, + RequireTLS } private ClientSession(JID jid, SessionStream stream) { localJID = jid; state = State.Initial; this.stream = stream; - allowPLAINOverNonTLS = true; /* FIXME: false */ + allowPLAINOverNonTLS = false; + useStreamCompression = true; + useTLS = UseTLS.UseTLSWhenAvailable; + useAcks = true; needSessionStart = false; needResourceBind = false; needAcking = false; @@ -138,6 +142,10 @@ public class ClientSession { useTLS = use; } + public void setUseAcks(boolean use) { + useAcks = use; + } + public boolean getStreamManagementEnabled() { return stanzaAckRequester_ != null; } @@ -291,11 +299,14 @@ public class ClientSession { return; } - if (streamFeatures.hasStartTLS() && stream.supportsTLSEncryption()) { + if (streamFeatures.hasStartTLS() && stream.supportsTLSEncryption() && !UseTLS.NeverUseTLS.equals(useTLS)) { state = State.WaitingForEncrypt; stream.writeElement(new StartTLSRequest()); } - else if (false && streamFeatures.hasCompressionMethod("zlib")) { /*FIXME: test and enable!*/ + else if (UseTLS.RequireTLS.equals(useTLS) && !stream.isTLSEncrypted()) { + finishSession(Error.Type.NoSupportedAuthMechanismsError); + } + else if (false && useStreamCompression && streamFeatures.hasCompressionMethod("zlib")) { /*FIXME: test and enable!*/ state = State.Compressing; stream.writeElement(new CompressRequest("zlib")); } @@ -344,7 +355,7 @@ public class ClientSession { stream.setWhitespacePingEnabled(true); needSessionStart = streamFeatures.hasSession(); needResourceBind = streamFeatures.hasResourceBind(); - needAcking = streamFeatures.hasStreamManagement(); + needAcking = streamFeatures.hasStreamManagement() && useAcks; if (!needResourceBind) { // Resource binding is a MUST finishSession(Error.Type.ResourceBindError); @@ -605,6 +616,7 @@ public class ClientSession { private boolean allowPLAINOverNonTLS; private boolean useStreamCompression; private UseTLS useTLS; + private boolean useAcks; private boolean needSessionStart; private boolean needResourceBind; private boolean needAcking; |