changeset 22085f6d39e8 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=22085f6d39e8 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 a47daf9997d5 -r 22085f6d39e8 src/common/connection_handlers.py --- a/src/common/connection_handlers.py Mon Aug 29 15:08:04 2011 +0200 +++ 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, @@ -922,10 +926,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): @@ -941,6 +950,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 a47daf9997d5 -r 22085f6d39e8 src/common/stanza_session.py --- a/src/common/stanza_session.py Mon Aug 29 15:08:04 2011 +0200 +++ 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)