[omemo] Set devices inactive after 300 unacknowledged messages

This commit is contained in:
Philipp Hörist
2019-02-21 00:02:45 +01:00
parent d463caf034
commit 14a45be321
4 changed files with 39 additions and 5 deletions

View File

@@ -19,6 +19,8 @@ from collections import defaultdict
from gajim.common import app
from omemo.backend.util import UNACKNOWLEDGED_COUNT
log = logging.getLogger('gajim.plugin_system.omemo')
@@ -39,6 +41,15 @@ class DeviceManager:
self.add_device(jid, device)
def update_devicelist(self, jid, devicelist):
for device in list(devicelist):
if device == self.own_device:
continue
count = self._storage.getUnacknowledgedCount(jid, device)
if count > UNACKNOWLEDGED_COUNT:
log.warning('Ignore device because of %s unacknowledged'
' messages: %s %s', count, jid, device)
devicelist.remove(device)
self.__device_store[jid] = set(devicelist)
log.info('Saved devices for %s', jid)
self._storage.setActiveState(jid, devicelist)
@@ -60,6 +71,10 @@ class DeviceManager:
def add_device(self, jid, device):
self.__device_store[jid].add(device)
def remove_device(self, jid, device):
self.__device_store[jid].discard(device)
self._storage.setInactive(jid, device)
def get_devices(self, jid, without_self=False):
devices = set(self.__device_store[jid])
if without_self: