From 6d1bb065cdbd0f78a10133be5892699e13712780 Mon Sep 17 00:00:00 2001 From: Goffi Date: Mon, 8 Feb 2016 18:06:07 +0100 Subject: [PATCH] plugin XEP-0065: fixed timer cancellation when a profile is receiving a file --- src/plugins/plugin_xep_0065.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/plugins/plugin_xep_0065.py b/src/plugins/plugin_xep_0065.py index 5398e749..b1cc825a 100755 --- a/src/plugins/plugin_xep_0065.py +++ b/src/plugins/plugin_xep_0065.py @@ -324,12 +324,19 @@ class SOCKSv5(protocol.Protocol, FileSender): @property def file_obj(self): if self._file_obj is None: - if self.server_mode: - self._file_obj = self.factory.getSession(self._session_hash)["file"] - else: - self._file_obj = self.factory.getSession()['file'] + self._file_obj = self.getSession()['file'] return self._file_obj + def getSession(self): + """Return session associated with this candidate + + @return (dict): session data + """ + if self.server_mode: + return self.factory.getSession(self._session_hash) + else: + return self.factory.getSession() + def _startNegotiation(self): log.debug("starting negotiation (client mode)") self.state = STATE_CLIENT_AUTH @@ -531,6 +538,7 @@ class SOCKSv5(protocol.Protocol, FileSender): self.file_obj.write(buf) if not self.active: self.active = True + self.getSession()[TIMER_KEY].cancel() return self.buf = self.buf + buf @@ -1151,7 +1159,7 @@ class XEP_0065(object): return client._s5b_sessions[session_hash] def registerHash(self, *args, **kwargs): - """like [_registerHash] but resturn the session deferred instead of the whole session + """like [_registerHash] but return the session deferred instead of the whole session session deferred is fired when transfer is finished """ return self._registerHash(*args, **kwargs)[DEFER_KEY]