# HG changeset patch # User Goffi # Date 1545841298 -3600 # Node ID 59ac9284dee80ff9150b22f5578340b67e32d4bf # Parent a86f494457c23766da7e8f5e0af0380eedf4f107 plugin XEP-0198: allow to customise/disable ack_timeout: "ack_timeout" setting can be set in [DEFAULT] section to the number of seconds before timing out, or to 0 to disable the timeout. diff -r a86f494457c2 -r 59ac9284dee8 sat/plugins/plugin_xep_0198.py --- a/sat/plugins/plugin_xep_0198.py Wed Dec 26 17:18:52 2018 +0100 +++ b/sat/plugins/plugin_xep_0198.py Wed Dec 26 17:21:38 2018 +0100 @@ -60,7 +60,7 @@ MAX_COUNTER = 2**32 RESUME_MAX = 5*60 # if we don't have an answer to ACK REQUEST after this delay, connection is aborted -ACK_R_TIMEOUT = 25 +ACK_TIMEOUT = 25 class ProfileSessionData(object): @@ -129,6 +129,16 @@ host.trigger.add("xml_init", self._XMLInitTrigger) host.trigger.add("disconnecting", self._disconnectingTrigger) host.trigger.add("disconnected", self._disconnectedTrigger) + try: + self._ack_timeout = int(host.memory.getConfig("", "ack_timeout", ACK_TIMEOUT)) + except ValueError: + log.error(_(u"Invalid ack_timeout value, please check your configuration")) + self._ack_timeout = ACK_TIMEOUT + if not self._ack_timeout: + log.info(_(u"Ack timeout disabled")) + else: + log.info(_(u"Ack timeout set to {timeout} s").format( + timeout=self._ack_timeout)) def profileConnecting(self, client): client._xep_0198_session = ProfileSessionData(callback=self.checkAcks, @@ -240,7 +250,9 @@ client.send(r_elt) if session.req_timer is not None: raise exceptions.InternalError("req_timer should not be set") - session.req_timer = reactor.callLater(ACK_R_TIMEOUT, self.onAckTimeOut, client) + if self._ack_timeout: + session.req_timer = reactor.callLater(self._ack_timeout, self.onAckTimeOut, + client) def _connectionFailed(self, failure_, connector): normal_host, normal_port = connector.normal_location @@ -413,11 +425,12 @@ def onAckAnswer(self, a_elt, client): session = client._xep_0198_session session.ack_requested = False - if session.req_timer is None: - log.error("reg_timer should be set") - else: - session.req_timer.cancel() - session.req_timer = None + if self._ack_timeout: + if session.req_timer is None: + log.error("reg_timer should be set") + else: + session.req_timer.cancel() + session.req_timer = None try: server_acked = int(a_elt['h']) except ValueError: