From ab70491d56233b599ce9789bc4155d187d7acb85 Mon Sep 17 00:00:00 2001
From: Brendan Taylor <bct@diffeq.com>
Date: Fri, 8 Aug 2008 22:55:12 +0000
Subject: [PATCH] correctly decide whether to autonegotiate after a session was
 replaced

---
 src/chat_control.py | 17 ++++++++++-------
 src/gajim.py        |  3 ---
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/chat_control.py b/src/chat_control.py
index b31ec65fb1..8e65afe954 100644
--- a/src/chat_control.py
+++ b/src/chat_control.py
@@ -1153,7 +1153,6 @@ def __init__(self, parent_win, contact, acct, session, resource = None):
 				self.print_esession_details()
 
 		# Enable encryption if needed
-		self.no_autonegotiation = False
 		e2e_is_active = self.session and self.session.enable_encryption
 		self.gpg_is_active = False
 		gpg_pref = gajim.config.get_per('contacts', contact.jid,
@@ -2325,18 +2324,22 @@ def _on_message_tv_buffer_changed(self, textbuffer):
 				self.account, 'autonegotiate_esessions') and \
 				gajim.config.get_per('contacts',
 				self.contact.jid, 'autonegotiate_esessions')
+
 			want_e2e = not e2e_is_active and not self.gpg_is_active \
 				and e2e_pref
 
+			already_negotiating = bool(self.session and \
+				self.session.status)
+
 			# XXX: Once we have fallback to disco, remove
 			#      notexistant check
-			if want_e2e and not self.no_autonegotiation \
-			and gajim.HAVE_PYCRYPTO \
-			and gajim.capscache.is_supported(self.contact,
-			NS_ESESSION) and not gajim.capscache.is_supported(
-			self.contact, 'notexistant'):
+			can_e2e = gajim.HAVE_PYCRYPTO and gajim.capscache. \
+				is_supported(self.contact, NS_ESESSION) and \
+				not gajim.capscache.is_supported(self.contact,
+				'notexistant')
+
+			if want_e2e and not already_negotiating and can_e2e:
 				self.begin_e2e_negotiation()
-				self.no_autonegotiation = True
 		else:
 			self.send_chatstate('active', self.contact)
 
diff --git a/src/gajim.py b/src/gajim.py
index d520b9f425..ccb400f66f 100755
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -816,9 +816,6 @@ def handle_event_notify(self, account, array):
 				for sess in  conn.get_sessions(ji):
 					if (ji+'/'+resource) != str(sess.jid):
 						continue
-					ctrl = sess.control
-					if ctrl:
-						ctrl.no_autonegotiation = False
 					if sess.enable_encryption:
 						sess.terminate_e2e()
 						conn.delete_session(jid,
-- 
GitLab