changeset d99441bf920a in /home/hg/repos/python-nbxmpp
details:http://hg.gajim.org/python-nbxmpp?cmd=changeset;node=d99441bf920a description: BOSH doesn't support channel binding.
BOSH (XEP-0124) uses short lived HTTPS connections for encryption. Channel binding requires long lived TLS connection, therefor doesn't work with XMPP over BOSH.
Fixes #22
diffstat:
nbxmpp/client_nb.py | 7 ++++--- nbxmpp/tls_nb.py | 7 +++++-- nbxmpp/transports_nb.py | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-)
diffs (45 lines):
diff -r d6b80a7947ff -r d99441bf920a nbxmpp/client_nb.py --- a/nbxmpp/client_nb.py Sat Mar 29 18:28:28 2014 +0100 +++ b/nbxmpp/client_nb.py Mon Mar 31 16:54:20 2014 +0200 @@ -495,9 +495,10 @@ self._channel_binding = None if self.connected in ('ssl', 'tls'): try: - self._channel_binding = self.Connection.NonBlockingTLS.get_channel_binding() - # TLS handshake is finished so channel binding data muss exist - assert (self._channel_binding != None) + if self.protocol_type != 'BOSH': + self._channel_binding = self.Connection.NonBlockingTLS.get_channel_binding() + # TLS handshake is finished so channel binding data muss exist + assert (self._channel_binding != None) except NotImplementedError: pass if auth_mechs == None: diff -r d6b80a7947ff -r d99441bf920a nbxmpp/tls_nb.py --- a/nbxmpp/tls_nb.py Sat Mar 29 18:28:28 2014 +0100 +++ b/nbxmpp/tls_nb.py Mon Mar 31 16:54:20 2014 +0200 @@ -508,7 +508,10 @@ Get channel binding data. RFC 5929 """ sslObj = self._owner._sslObj - try: - return sslObj.get_channel_binding() + try: + if USE_PYOPENSSL: + return sslObj.get_finished() + else: + return sslObj.get_channel_binding() except AttributeError: raise NotImplementedError diff -r d6b80a7947ff -r d99441bf920a nbxmpp/transports_nb.py --- a/nbxmpp/transports_nb.py Sat Mar 29 18:28:28 2014 +0100 +++ b/nbxmpp/transports_nb.py Mon Mar 31 16:54:20 2014 +0200 @@ -555,7 +555,7 @@ return None self.sendbuff = self.sendqueue.pop(0) try: - send_count = self._send(self.sendbuff) + send_count = self._send(self.sendbuff.encode("utf-8")) if send_count: sent_data = self.sendbuff[:send_count] self.sendbuff = self.sendbuff[send_count:]