From 23e82d08519c747e6d8d2add53d7e84b363687bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Sat, 26 Feb 2011 12:41:09 +0100 Subject: Added an option to not use stream compression. diff --git a/.cproject b/.cproject index f046218..7971420 100644 --- a/.cproject +++ b/.cproject @@ -2908,6 +2908,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project index fcdfcdc..8a42eaa 100644 --- a/.project +++ b/.project @@ -18,7 +18,7 @@ org.eclipse.cdt.make.core.autoBuildTarget - + Sluift org.eclipse.cdt.make.core.buildArguments @@ -29,6 +29,10 @@ python + org.eclipse.cdt.make.core.buildLocation + + + org.eclipse.cdt.make.core.cleanBuildTarget -c @@ -50,7 +54,7 @@ org.eclipse.cdt.make.core.fullBuildTarget - + Sluift org.eclipse.cdt.make.core.stopOnError diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp index b3ca8dc..086fb2a 100644 --- a/Sluift/sluift.cpp +++ b/Sluift/sluift.cpp @@ -72,6 +72,10 @@ class SluiftClient { delete client; } + Client* getClient() { + return client; + } + void connect() { rosterReceived = false; client->connect(); @@ -380,6 +384,17 @@ static int sluift_client_send_presence(lua_State *L) { return 0; } +static int sluift_client_set_options(lua_State* L) { + SluiftClient* client = getClient(L); + luaL_checktype(L, 2, LUA_TTABLE); + lua_getfield(L, 2, "compress"); + if (!lua_isnil(L, -1)) { + client->getClient()->setUseStreamCompression(lua_toboolean(L, -1)); + } + lua_pop(L, -1); + return 0; +} + static int sluift_client_for_event (lua_State *L) { try { SluiftClient* client = getClient(L); @@ -460,6 +475,7 @@ static const luaL_reg sluift_client_functions[] = { {"set_version", sluift_client_set_version}, {"get_roster", sluift_client_get_roster}, {"get_version", sluift_client_get_version}, + {"set_options", sluift_client_set_options}, {"for_event", sluift_client_for_event}, {"__gc", sluift_client_gc}, {NULL, NULL} 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) { state = WaitingForEncrypt; stream->writeElement(boost::shared_ptr(new StartTLSRequest())); } - else if (streamFeatures->hasCompressionMethod("zlib")) { + else if (useStreamCompression && streamFeatures->hasCompressionMethod("zlib")) { state = Compressing; stream->writeElement(boost::shared_ptr(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 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 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_; diff --git a/Swiften/QA/ScriptedTests/MultipleClients.lua b/Swiften/QA/ScriptedTests/MultipleClients.lua index 76eba74..ce51481 100644 --- a/Swiften/QA/ScriptedTests/MultipleClients.lua +++ b/Swiften/QA/ScriptedTests/MultipleClients.lua @@ -14,6 +14,7 @@ clients = {} for i = 1, num_clients do jid = os.getenv("SWIFT_CLIENTTEST_JID") .. "/Client" .. i client = sluift.new_client(jid, os.getenv("SWIFT_CLIENTTEST_PASS")) + client:set_options({compress = false}) client:async_connect() table.insert(clients, client) end -- cgit v0.10.2-6-g49f6