Mercurial > libervia-backend
diff src/plugins/plugin_xep_0260.py @ 1756:061011fad5b1
plugin XEP-0260: better proxy error handling:
- display a better message in logs
- fixed fallback to IBB
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 17 Dec 2015 22:37:56 +0100 |
parents | d2e023da2983 |
children | abd6d6f89006 |
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0260.py Thu Dec 17 22:10:53 2015 +0100 +++ b/src/plugins/plugin_xep_0260.py Thu Dec 17 22:37:56 2015 +0100 @@ -50,7 +50,9 @@ class ProxyError(Exception): - pass + + def __str__(self): + return "an error happened while trying to use the proxy" class XEP_0260(object): @@ -157,7 +159,8 @@ iq_elt, transport_elt = self._j.buildAction(self._j.A_TRANSPORT_INFO, session, content_name, profile) transport_elt.addElement('proxy-error') iq_elt.send() - log.warning(u"Can't activate proxy, we need to fallback to IBB") + log.warning(u"Can't activate proxy, we need to fallback to IBB: {reason}" + .format(reason = stanza_error.value.condition)) client = self.host.getClient(profile) self.doFallback(session, content_name, client) @@ -264,6 +267,19 @@ if content_data['senders'] == session['role']: # we can now start the file transfer (or start it after proxy activation) d.addCallback(lambda dummy: choosed_candidate.startTransfer(transport_data['session_hash'])) + d.addErrback(self._startEb, session, content_name, client) + + def _startEb(self, fail, session, content_name, client): + """Called when it's not possible to start the transfer + + Will try to fallback to IBB + """ + try: + reason = unicode(fail.value) + except AttributeError: + reason = unicode(fail) + log.warning(u"Cant start transfert, we'll try fallback method: {}".format(reason)) + self.doFallback(session, content_name, client) def _candidateInfo(self, candidate_elt, session, content_name, transport_data, client): """Called when best candidate has been received from peer (or if none is working) @@ -320,7 +336,7 @@ if proxy_elt.name == 'activated': activation_d.callback(None) else: - activation_d.errback(ProxyError) + activation_d.errback(ProxyError()) @defer.inlineCallbacks def jingleHandler(self, action, session, content_name, transport_elt, profile):