diff --git a/sleekxmpp/util/__init__.py b/sleekxmpp/util/__init__.py index 957a9335..05286d33 100644 --- a/sleekxmpp/util/__init__.py +++ b/sleekxmpp/util/__init__.py @@ -11,7 +11,8 @@ from sleekxmpp.util.misc_ops import bytes, unicode, hashes, hash, \ - num_to_bytes, bytes_to_num, quote, XOR + num_to_bytes, bytes_to_num, quote, \ + XOR, safedict # ===================================================================== diff --git a/sleekxmpp/util/misc_ops.py b/sleekxmpp/util/misc_ops.py index c2533eec..18c919a8 100644 --- a/sleekxmpp/util/misc_ops.py +++ b/sleekxmpp/util/misc_ops.py @@ -129,6 +129,7 @@ def hashes(): hashes = ['SHA-' + h[3:] for h in dir(hashlib) if h.startswith('sha')] return t + hashes + def setdefaultencoding(encoding): """ Set the current default string encoding used by the Unicode implementation. @@ -152,3 +153,13 @@ def setdefaultencoding(encoding): raise RuntimeError("Could not find setdefaultencoding") sys.setdefaultencoding = func return func(encoding) + + +def safedict(data): + if sys.version_info < (2, 7): + safe = {} + for key in data: + safe[key.encode('utf8')] = data[key] + return safe + else: + return data diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index c5c9fe38..66985f3d 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -31,7 +31,7 @@ import errno from xml.parsers.expat import ExpatError import sleekxmpp -from sleekxmpp.util import Queue, QueueEmpty +from sleekxmpp.util import Queue, QueueEmpty, safedict from sleekxmpp.thirdparty.statemachine import StateMachine from sleekxmpp.xmlstream import Scheduler, tostring, cert from sleekxmpp.xmlstream.stanzabase import StanzaBase, ET, ElementBase @@ -518,13 +518,13 @@ class XMLStream(object): else: cert_policy = ssl.CERT_REQUIRED - ssl_args = { - b'certfile': self.certfile, - b'keyfile': self.keyfile, - b'ca_certs': self.ca_certs, - b'cert_reqs': cert_policy, - b'do_handshake_on_connect': False, - } + ssl_args = safedict({ + 'certfile': self.certfile, + 'keyfile': self.keyfile, + 'ca_certs': self.ca_certs, + 'cert_reqs': cert_policy, + 'do_handshake_on_connect': False + }) if sys.version_info >= (2, 7): ssl_args['ciphers'] = self.ciphers @@ -842,13 +842,13 @@ class XMLStream(object): else: cert_policy = ssl.CERT_REQUIRED - ssl_args = { - b'certfile': self.certfile, - b'keyfile': self.keyfile, - b'ca_certs': self.ca_certs, - b'cert_reqs': cert_policy, - b'do_handshake_on_connect': False, - } + ssl_args = safedict({ + 'certfile': self.certfile, + 'keyfile': self.keyfile, + 'ca_certs': self.ca_certs, + 'cert_reqs': cert_policy, + 'do_handshake_on_connect': False + }) if sys.version_info >= (2, 7): ssl_args['ciphers'] = self.ciphers