summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Client')
-rw-r--r--Swiften/Client/ClientSession.cpp3
-rw-r--r--Swiften/Client/ClientSession.h5
-rw-r--r--Swiften/Client/CoreClient.cpp7
-rw-r--r--Swiften/Client/CoreClient.h6
4 files changed, 19 insertions, 2 deletions
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp
index 98e3065..8d9e678 100644
--- a/Swiften/Client/ClientSession.cpp
+++ b/Swiften/Client/ClientSession.cpp
@@ -49,6 +49,7 @@ ClientSession::ClientSession(
state(Initial),
stream(stream),
allowPLAINOverNonTLS(false),
+ useStreamCompression(true),
needSessionStart(false),
needResourceBind(false),
needAcking(false),
@@ -173,7 +174,7 @@ void ClientSession::handleElement(boost::shared_ptr<Element> element) {
state = WaitingForEncrypt;
stream->writeElement(boost::shared_ptr<StartTLSRequest>(new StartTLSRequest()));
}
- else if (streamFeatures->hasCompressionMethod("zlib")) {
+ else if (useStreamCompression && streamFeatures->hasCompressionMethod("zlib")) {
state = Compressing;
stream->writeElement(boost::shared_ptr<CompressRequest>(new CompressRequest("zlib")));
}
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index e15a707..ee3992d 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -71,6 +71,10 @@ namespace Swift {
allowPLAINOverNonTLS = b;
}
+ void setUseStreamCompression(bool b) {
+ useStreamCompression = b;
+ }
+
bool getStreamManagementEnabled() const {
return stanzaAckRequester_;
}
@@ -134,6 +138,7 @@ namespace Swift {
State state;
boost::shared_ptr<SessionStream> stream;
bool allowPLAINOverNonTLS;
+ bool useStreamCompression;
bool needSessionStart;
bool needResourceBind;
bool needAcking;
diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp
index edb7643..a199b16 100644
--- a/Swiften/Client/CoreClient.cpp
+++ b/Swiften/Client/CoreClient.cpp
@@ -22,7 +22,7 @@
namespace Swift {
-CoreClient::CoreClient(const JID& jid, const std::string& password, NetworkFactories* networkFactories) : jid_(jid), password_(password), networkFactories(networkFactories), disconnectRequested_(false), certificateTrustChecker(NULL) {
+CoreClient::CoreClient(const JID& jid, const std::string& password, NetworkFactories* networkFactories) : jid_(jid), password_(password), networkFactories(networkFactories), useStreamCompression(true), disconnectRequested_(false), certificateTrustChecker(NULL) {
stanzaChannel_ = new ClientSessionStanzaChannel();
stanzaChannel_->onMessageReceived.connect(boost::bind(&CoreClient::handleMessageReceived, this, _1));
stanzaChannel_->onPresenceReceived.connect(boost::bind(&CoreClient::handlePresenceReceived, this, _1));
@@ -82,6 +82,7 @@ void CoreClient::handleConnectorFinished(boost::shared_ptr<Connection> connectio
session_ = ClientSession::create(jid_, sessionStream_);
session_->setCertificateTrustChecker(certificateTrustChecker);
+ session_->setUseStreamCompression(useStreamCompression);
stanzaChannel_->setSession(session_);
session_->onFinished.connect(boost::bind(&CoreClient::handleSessionFinished, this, _1));
session_->onNeedCredentials.connect(boost::bind(&CoreClient::handleNeedCredentials, this));
@@ -262,5 +263,9 @@ void CoreClient::handleStanzaAcked(Stanza::ref stanza) {
onStanzaAcked(stanza);
}
+void CoreClient::setUseStreamCompression(bool b) {
+ useStreamCompression = b;
+}
+
}
diff --git a/Swiften/Client/CoreClient.h b/Swiften/Client/CoreClient.h
index 92cd197..ee73396 100644
--- a/Swiften/Client/CoreClient.h
+++ b/Swiften/Client/CoreClient.h
@@ -143,6 +143,11 @@ namespace Swift {
*/
void setCertificateTrustChecker(CertificateTrustChecker*);
+ /**
+ * Sets whether ZLib stream compression should be used when available.
+ */
+ void setUseStreamCompression(bool b);
+
public:
/**
* Emitted when the client was disconnected from the network.
@@ -207,6 +212,7 @@ namespace Swift {
JID jid_;
std::string password_;
NetworkFactories* networkFactories;
+ bool useStreamCompression;
ClientSessionStanzaChannel* stanzaChannel_;
IQRouter* iqRouter_;
Connector::ref connector_;