[Git][gajim/python-nbxmpp][nbxmpp_0.6] 3 commits: Dont try to guess system language

Philipp Hörist gitlab at dev.gajim.org
Tue Jan 8 20:02:44 CET 2019


Philipp Hörist pushed to branch nbxmpp_0.6 at gajim / python-nbxmpp


Commits:
a85b5376 by Philipp Hörist at 2019-01-08T18:23:49Z
Dont try to guess system language

getdefaultlocale() is not a good way for determining the users configured language

Let the client figure it out and pass it to nbxmpp

- - - - -
9f7a5212 by Philipp Hörist at 2019-01-08T18:59:00Z
Always bind after sm resume fails

- - - - -
82764c3a by Philipp Hörist at 2019-01-08T18:59:59Z
Update .gitignore

- - - - -


5 changed files:

- .gitignore
- nbxmpp/bosh.py
- nbxmpp/client_nb.py
- nbxmpp/dispatcher_nb.py
- nbxmpp/smacks.py


Changes:

=====================================
.gitignore
=====================================
@@ -1,2 +1,4 @@
 build/
 __pycache__/
+dist/
+nbxmpp.egg-info/
\ No newline at end of file


=====================================
nbxmpp/bosh.py
=====================================
@@ -44,10 +44,7 @@ class NonBlockingBOSH(NonBlockingTransport):
             idlequeue, estabilish_tls, certs, tls_version, cipher_list)
 
         self.bosh_sid = None
-        if locale.getdefaultlocale()[0]:
-            self.bosh_xml_lang = locale.getdefaultlocale()[0].split('_')[0]
-        else:
-            self.bosh_xml_lang = 'en'
+        self.bosh_xml_lang = self._owner.lang
 
         self.http_version = 'HTTP/1.1'
         self.http_persistent = True


=====================================
nbxmpp/client_nb.py
=====================================
@@ -37,7 +37,7 @@ class NonBlockingClient(object):
     handling, whereas underlying modules take care of feature-specific logic
     """
 
-    def __init__(self, domain, idlequeue, caller=None):
+    def __init__(self, domain, idlequeue, caller=None, lang='en'):
         """
         Caches connection data
 
@@ -48,6 +48,7 @@ class NonBlockingClient(object):
         """
         self.Namespace = protocol.NS_CLIENT
         self.defaultNamespace = self.Namespace
+        self.lang = lang
 
         self.idlequeue = idlequeue
         self.disconnect_handlers = []


=====================================
nbxmpp/dispatcher_nb.py
=====================================
@@ -194,9 +194,7 @@ class XMPPDispatcher(PlugIn):
         self._metastream.setAttr('version', '1.0')
         self._metastream.setAttr('xmlns:stream', NS_STREAMS)
         self._metastream.setAttr('to', self._owner.Server)
-        if locale.getdefaultlocale()[0]:
-            self._metastream.setAttr('xml:lang',
-                    locale.getdefaultlocale()[0].split('_')[0])
+        self._metastream.setAttr('xml:lang', self._owner.lang)
         self._owner.send("%s%s>" % (XML_DECLARATION, str(self._metastream)[:-2]))
 
     def _check_stream_start(self, ns, tag, attrs):
@@ -623,9 +621,7 @@ class BOSHDispatcher(XMPPDispatcher):
         self._metastream.setAttr('version', '1.0')
         self._metastream.setAttr('xmlns:stream', NS_STREAMS)
         self._metastream.setAttr('to', self._owner.Server)
-        if locale.getdefaultlocale()[0]:
-            self._metastream.setAttr('xml:lang',
-                    locale.getdefaultlocale()[0].split('_')[0])
+        self._metastream.setAttr('xml:lang', self._owner.lang)
 
         self.restart = True
         self._owner.Connection.send_init(after_SASL=self.after_SASL)


=====================================
nbxmpp/smacks.py
=====================================
@@ -184,43 +184,36 @@ class Smacks(object):
             self.old_uqueue = []
 
     def error_handling(self, disp, stanza):
-        # If the server doesn't recognize previd, forget about resuming
-        # Ask for service discovery, etc..
-        if stanza.getTag('item-not-found'):
-            self.resuming = False
-            self.enabled = False
-            # we need to bind a resource
-            self._owner.NonBlockingBind.resuming = False
-            self._owner.Dispatcher.Event(NS_STREAM_MGMT, 'RESUME FAILED', None)
-            self._owner._on_auth_bind(None)
-            self.failed_resume = True
-            
-            h = stanza.getAttr('h')
-            log.info('Session resumption failed (item-not-found), server h: %s' % str(h))
-            if not h:
-                return
-            #prepare old_queue to contain only unacked stanzas for later resend (which is happening after our session is established properly)
-            h = int(h)
-            diff = self.out_h - h
-
-            if diff < 0:
-                log.error('Server and client number of stanzas handled mismatch on session resumption (our h: %d, server h: %d, #queue: %d)' % (self.out_h, h, len(self.old_uqueue)))
-                self.old_uqueue = []        #that's weird, but we don't resend this stanzas if the server says we don't need to
-            elif len(self.old_uqueue) < diff:
-                log.error('Server and client number of stanzas handled mismatch on session resumption (our h: %d, server h: %d, #queue: %d)' % (self.out_h, h, len(self.old_uqueue)))
-            else:
-                log.info('Removing %d already acked stanzas from old outgoing queue (our h: %d, server h: %d, #queue: %d, remaining in queue: %d)' % (len(self.old_uqueue) - diff, self.out_h, h, len(self.old_uqueue), diff))
-                while (len(self.old_uqueue) > diff):
-                    self.old_uqueue.pop(0)
-            return
-
         # Doesn't support resumption
         if stanza.getTag('feature-not-implemented'):
             log.info('Session resumption failed (feature-not-implemented)')
             self.negociate(False)
             return
 
-        if stanza.getTag('unexpected-request'):
-            log.error('Gajim failed to negociate Stream Management')
-            self.enabled = False
+        # If the server doesn't recognize previd, forget about resuming
+        # Ask for service discovery, etc..
+        self.resuming = False
+        self.enabled = False
+        # we need to bind a resource
+        self._owner.NonBlockingBind.resuming = False
+        self._owner.Dispatcher.Event(NS_STREAM_MGMT, 'RESUME FAILED', None)
+        self._owner._on_auth_bind(None)
+        self.failed_resume = True
+        
+        h = stanza.getAttr('h')
+        log.info('Session resumption failed, server h: %s' % str(h))
+        if not h:
             return
+        #prepare old_queue to contain only unacked stanzas for later resend (which is happening after our session is established properly)
+        h = int(h)
+        diff = self.out_h - h
+
+        if diff < 0:
+            log.error('Server and client number of stanzas handled mismatch on session resumption (our h: %d, server h: %d, #queue: %d)' % (self.out_h, h, len(self.old_uqueue)))
+            self.old_uqueue = []        #that's weird, but we don't resend this stanzas if the server says we don't need to
+        elif len(self.old_uqueue) < diff:
+            log.error('Server and client number of stanzas handled mismatch on session resumption (our h: %d, server h: %d, #queue: %d)' % (self.out_h, h, len(self.old_uqueue)))
+        else:
+            log.info('Removing %d already acked stanzas from old outgoing queue (our h: %d, server h: %d, #queue: %d, remaining in queue: %d)' % (len(self.old_uqueue) - diff, self.out_h, h, len(self.old_uqueue), diff))
+            while (len(self.old_uqueue) > diff):
+                self.old_uqueue.pop(0)



View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/compare/3e4c66556bb830556b16ffae022b379f3195adfd...82764c3a918e43a5beb74a6a662f66153e2fbdc0

-- 
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/compare/3e4c66556bb830556b16ffae022b379f3195adfd...82764c3a918e43a5beb74a6a662f66153e2fbdc0
You're receiving this email because of your account on dev.gajim.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gajim.org/pipermail/commits/attachments/20190108/0c7c587e/attachment-0001.html>


More information about the Commits mailing list