Mercurial > libervia-backend
diff src/plugins/plugin_xep_0065.py @ 1581:8cc7d83141a4
plugin XEP-0065: chunk size optimization: 64Kio is used except for proxy were it is set to 4Kio, to avoid wild disconnection by Prosody's proxy
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 11 Nov 2015 22:28:48 +0100 |
parents | d04d7402b8e9 |
children | d46aae87c03a |
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0065.py Wed Nov 11 18:32:59 2015 +0100 +++ b/src/plugins/plugin_xep_0065.py Wed Nov 11 22:28:48 2015 +0100 @@ -274,7 +274,11 @@ return iq_elt.send() def startTransfer(self, session_hash=None): - self.factory.startTransfer(session_hash) + if self.type == XEP_0065.TYPE_PROXY: + chunk_size = 4096 # Prosody's proxy reject bigger chunks by default + else: + chunk_size = None + self.factory.startTransfer(session_hash, chunk_size=chunk_size) def getSessionHash(from_jid, to_jid, sid): @@ -289,7 +293,7 @@ class SOCKSv5(protocol.Protocol, FileSender): - CHUNK_SIZE = 4096 + CHUNK_SIZE = 2**16 def __init__(self, session_hash=None): """ @@ -484,8 +488,13 @@ self._session_hash = addr self.connectCompleted(addr, 0) - def startTransfer(self): - """Callback called when the result iq is received""" + def startTransfer(self, chunk_size): + """Callback called when the result iq is received + + @param chunk_size(None, int): size of the buffer, or None for default + """ + if chunk_size is not None: + self.CHUNK_SIZE = chunk_size log.debug(u"Starting file transfer") d = self.beginFileTransfer(self.file_obj, self.transport) d.addCallback(self.fileTransfered) @@ -554,14 +563,14 @@ def getSession(self, session_hash): return self.parent.getSession(session_hash, None) - def startTransfer(self, session_hash): + def startTransfer(self, session_hash, chunk_size=None): session = self.getSession(session_hash) try: protocol = session['protocols'][0] except (KeyError, IndexError): log.error(u"Can't start file transfer, can't find protocol") else: - protocol.startTransfer() + protocol.startTransfer(chunk_size) def addToSession(self, session_hash, protocol): """Check is session_hash is valid, and associate protocol with it @@ -631,8 +640,8 @@ def getSession(self): return self.session - def startTransfer(self, dummy=None): - self._protocol_instance.startTransfer() + def startTransfer(self, dummy=None, chunk_size=None): + self._protocol_instance.startTransfer(chunk_size) def clientConnectionFailed(self, connector, reason): log.debug(u"Connection failed")