From 101053d01cf2274e8eb75c520cce0bfee4d15618 Mon Sep 17 00:00:00 2001
From: Kevin Smith <git@kismith.co.uk>
Date: Mon, 26 Sep 2011 15:27:00 +0100
Subject: Allow disabling of 198-acks in Swiften


diff --git a/Swiften/Client/ClientOptions.h b/Swiften/Client/ClientOptions.h
index 6b15f18..3b51a87 100644
--- a/Swiften/Client/ClientOptions.h
+++ b/Swiften/Client/ClientOptions.h
@@ -14,7 +14,7 @@ namespace Swift {
 			RequireTLS
 		};
 
-		ClientOptions() : useStreamCompression(true), useTLS(UseTLSWhenAvailable), allowPLAINWithoutTLS(false), useStreamResumption(false), forgetPassword(false) {
+		ClientOptions() : useStreamCompression(true), useTLS(UseTLSWhenAvailable), allowPLAINWithoutTLS(false), useStreamResumption(false), forgetPassword(false), useAcks(true) {
 		}
 
 		/**
@@ -55,5 +55,11 @@ namespace Swift {
 		 * Default: false
 		 */
 		bool forgetPassword;
+
+		/**
+		 * Use XEP-0198 acks in the stream when available.
+		 * Default: true
+		 */
+		bool useAcks;
 	};
 }
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp
index 2eeb3c0..275f913 100644
--- a/Swiften/Client/ClientSession.cpp
+++ b/Swiften/Client/ClientSession.cpp
@@ -57,7 +57,8 @@ ClientSession::ClientSession(
 			needAcking(false),
 			rosterVersioningSupported(false),
 			authenticator(NULL),
-			certificateTrustChecker(NULL) {
+			certificateTrustChecker(NULL),
+			useAcks(true) {
 }
 
 ClientSession::~ClientSession() {
@@ -232,7 +233,7 @@ void ClientSession::handleElement(boost::shared_ptr<Element> element) {
 			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::ResourceBindError);
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index e58e758..939e96e 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -85,6 +85,10 @@ namespace Swift {
 				useTLS = b;
 			}
 
+			void setUseAcks(bool b) {
+				useAcks = b;
+			}
+
 
 			bool getStreamManagementEnabled() const {
 				return stanzaAckRequester_;
@@ -159,6 +163,7 @@ namespace Swift {
 			bool needResourceBind;
 			bool needAcking;
 			bool rosterVersioningSupported;
+			bool useAcks;
 			ClientAuthenticator* authenticator;
 			boost::shared_ptr<StanzaAckRequester> stanzaAckRequester_;
 			boost::shared_ptr<StanzaAckResponder> stanzaAckResponder_;
diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp
index 37055e4..a223e3d 100644
--- a/Swiften/Client/CoreClient.cpp
+++ b/Swiften/Client/CoreClient.cpp
@@ -123,6 +123,7 @@ void CoreClient::handleConnectorFinished(boost::shared_ptr<Connection> connectio
 				session_->setUseTLS(ClientSession::RequireTLS);
 				break;
 		}
+		session_->setUseAcks(options.useAcks);
 		stanzaChannel_->setSession(session_);
 		session_->onFinished.connect(boost::bind(&CoreClient::handleSessionFinished, this, _1));
 		session_->onNeedCredentials.connect(boost::bind(&CoreClient::handleNeedCredentials, this));
-- 
cgit v0.10.2-6-g49f6