From c6dc1b8b204260e38d6f5d69cd3636101adcf641 Mon Sep 17 00:00:00 2001
From: Thibaut Girka <thib@sitedethib.com>
Date: Thu, 1 Jul 2010 18:30:35 +0200
Subject: [PATCH] [Jingle] refactor a bit and ignore non-critical errors. Fixes
 #5794

---
 src/common/jingle_session.py | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/src/common/jingle_session.py b/src/common/jingle_session.py
index bdcd89125..4849f7fa8 100644
--- a/src/common/jingle_session.py
+++ b/src/common/jingle_session.py
@@ -318,14 +318,14 @@ class JingleSession(object):
     def __on_error(self, stanza, jingle, error, action):
         # FIXME
         text = error.getTagData('text')
-        jingle_error = None
-        xmpp_error = None
+        error_name = None
         for child in error.getChildren():
             if child.getNamespace() == xmpp.NS_JINGLE_ERRORS:
-                jingle_error = child.getName()
+                error_name = child.getName()
+                break
             elif child.getNamespace() == xmpp.NS_STANZAS:
-                xmpp_error = child.getName()
-        self.__dispatch_error(xmpp_error, jingle_error, text)
+                error_name = child.getName()
+        self.__dispatch_error(error_name, text, error.getAttribute('type'))
         # FIXME: Not sure when we would want to do that...
 
     def __on_transport_replace(self, stanza, jingle, error, action):
@@ -478,7 +478,7 @@ class JingleSession(object):
         self.connection.delete_jingle_session(self.sid)
         reason, text = self.__reason_from_stanza(jingle)
         if reason not in ('success', 'cancel', 'decline'):
-            self.__dispatch_error(reason, reason, text)
+            self.__dispatch_error(reason, text)
         if text:
             text = '%s (%s)' % (reason, text)
         else:
@@ -530,14 +530,12 @@ class JingleSession(object):
 
         return (contents, contents_rejected, failure_reason)
 
-    def __dispatch_error(self, error, jingle_error=None, text=None):
-        if jingle_error:
-            error = jingle_error
+    def __dispatch_error(self, error=None, text=None, type_=None):
         if text:
             text = '%s (%s)' % (error, text)
-        else:
-            text = error
-        self.connection.dispatch('JINGLE_ERROR', (self.peerjid, self.sid, text))
+        if type_ != 'modify':
+            self.connection.dispatch('JINGLE_ERROR',
+                (self.peerjid, self.sid, text or error))
 
     def __reason_from_stanza(self, stanza):
         # TODO: Move to GUI?
@@ -579,7 +577,7 @@ class JingleSession(object):
         if text:
             err.setTagData('text', text)
         self.connection.connection.send(err_stanza)
-        self.__dispatch_error(error, jingle_error, text)
+        self.__dispatch_error(jingle_error or error, text, type_)
 
     def __append_content(self, jingle, content):
         """
@@ -630,7 +628,7 @@ class JingleSession(object):
         # TODO: Move to GUI?
         reason, text = self.__reason_from_stanza(jingle)
         if reason not in ('success', 'cancel', 'decline'):
-            self.__dispatch_error(reason, reason, text)
+            self.__dispatch_error(reason, text)
         if text:
             text = '%s (%s)' % (reason, text)
         else: