changeset b7999dc0b37b in /home/hg/repos/gajim

details:http://hg.gajim.org/gajim?cmd=changeset;node=b7999dc0b37b
description: terminate e2e sessions (from chat and private chat) when we get an 
offline presence. Fixes #6956

diffstat:

 src/common/connection_handlers.py |  20 +++++++++++++++++++-
 src/common/stanza_session.py      |   4 +++-
 2 files changed, 22 insertions(+), 2 deletions(-)

diffs (69 lines):

diff -r 0baf415e9f18 -r b7999dc0b37b src/common/connection_handlers.py
--- a/src/common/connection_handlers.py Tue Aug 30 15:23:16 2011 +0300
+++ b/src/common/connection_handlers.py Tue Aug 30 14:52:59 2011 +0200
@@ -770,6 +770,8 @@
             self._nec_iq_error_received)
         gajim.ged.register_event_handler('presence-received', ged.CORE,
             self._nec_presence_received)
+        gajim.ged.register_event_handler('gc-presence-received', ged.CORE,
+            self._nec_gc_presence_received)
         gajim.ged.register_event_handler('message-received', ged.CORE,
             self._nec_message_received)
         gajim.ged.register_event_handler('decrypted-message-received', 
ged.CORE,
@@ -780,6 +782,8 @@
             self._nec_iq_error_received)
         gajim.ged.remove_event_handler('presence-received', ged.CORE,
             self._nec_presence_received)
+        gajim.ged.remove_event_handler('gc-presence-received', ged.CORE,
+            self._nec_gc_presence_received)
         gajim.ged.remove_event_handler('message-received', ged.CORE,
             self._nec_message_received)
         gajim.ged.remove_event_handler('decrypted-message-received', ged.CORE,
@@ -921,10 +925,15 @@
             # there won't be any sessions here if the contact terminated
             # their sessions before going offline (which we do)
             for sess in self.get_sessions(jid):
-                if obj.fjid != str(sess.jid):
+                sess_fjid = str(sess.jid)
+                if sess.resource:
+                    sess_fjid += '/' + sess.resource
+                if obj.fjid != sess_fjid:
                     continue
                 if sess.control:
                     sess.control.no_autonegotiation = False
+                if sess.enable_encryption:
+                    sess.terminate_e2e()
 
         if gajim.config.get('log_contact_status_changes') and \
         gajim.config.should_log(self.name, obj.jid):
@@ -940,6 +949,15 @@
                 self.dispatch('DB_ERROR', (pritext, sectext))
             our_jid = gajim.get_jid_from_account(self.name)
 
+    def _nec_gc_presence_received(self, obj):
+        if obj.conn.name != self.name:
+            return
+        for sess in self.get_sessions(obj.fjid):
+            if obj.fjid != sess.jid:
+                continue
+            if sess.enable_encryption:
+                sess.terminate_e2e()
+
     def _nec_message_received(self, obj):
         if obj.conn.name != self.name:
             return
diff -r 0baf415e9f18 -r b7999dc0b37b src/common/stanza_session.py
--- a/src/common/stanza_session.py      Tue Aug 30 15:23:16 2011 +0300
+++ b/src/common/stanza_session.py      Tue Aug 30 14:52:59 2011 +0200
@@ -1148,8 +1148,10 @@
         return xmpp.DataField(name=name, typ='hidden', value=dhs)
 
     def terminate_e2e(self):
+        self.enable_encryption = False
+        if self.control:
+            self.control.print_session_details()
         self.terminate()
-        self.enable_encryption = False
 
     def acknowledge_termination(self):
         StanzaSession.acknowledge_termination(self)
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to