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