diff options
author | Remko Tronçon <git@el-tramo.be> | 2009-11-25 19:19:28 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2009-11-25 19:20:53 (GMT) |
commit | db00adc9810377500e6ab27900b29496a0d05afe (patch) | |
tree | 0f13d821883e0e99e9b6e7f15c84e3371375cd96 /Swiften/Client/ClientSession.cpp | |
parent | c198064db0a6444a24220eee65cbf747eb7fbfb0 (diff) | |
download | swift-contrib-db00adc9810377500e6ab27900b29496a0d05afe.zip swift-contrib-db00adc9810377500e6ab27900b29496a0d05afe.tar.bz2 |
Enabled stream compression again.
Diffstat (limited to 'Swiften/Client/ClientSession.cpp')
-rw-r--r-- | Swiften/Client/ClientSession.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp index 61ce8ef..8427d27 100644 --- a/Swiften/Client/ClientSession.cpp +++ b/Swiften/Client/ClientSession.cpp @@ -12,6 +12,9 @@ #include "Swiften/Elements/AuthFailure.h" #include "Swiften/Elements/AuthChallenge.h" #include "Swiften/Elements/AuthResponse.h" +#include "Swiften/Elements/Compressed.h" +#include "Swiften/Elements/CompressFailure.h" +#include "Swiften/Elements/CompressRequest.h" #include "Swiften/Elements/StartSession.h" #include "Swiften/Elements/IQ.h" #include "Swiften/Elements/ResourceBind.h" @@ -70,6 +73,10 @@ void ClientSession::handleElement(boost::shared_ptr<Element> element) { state = WaitingForEncrypt; stream->writeElement(boost::shared_ptr<StartTLSRequest>(new StartTLSRequest())); } + else if (streamFeatures->hasCompressionMethod("zlib")) { + state = Compressing; + stream->writeElement(boost::shared_ptr<CompressRequest>(new CompressRequest("zlib"))); + } else if (streamFeatures->hasAuthenticationMechanisms()) { if (stream->hasTLSCertificate()) { if (streamFeatures->hasAuthenticationMechanism("EXTERNAL")) { @@ -120,6 +127,16 @@ void ClientSession::handleElement(boost::shared_ptr<Element> element) { } } } + else if (boost::dynamic_pointer_cast<Compressed>(element)) { + checkState(Compressing); + state = WaitingForStreamStart; + stream->addZLibCompression(); + stream->resetXMPPParser(); + sendStreamHeader(); + } + else if (boost::dynamic_pointer_cast<CompressFailure>(element)) { + finishSession(Error::CompressionFailedError); + } else if (AuthChallenge* challenge = dynamic_cast<AuthChallenge*>(element.get())) { checkState(Authenticating); assert(authenticator); |