diff --git a/src/common/xmpp/transports_nb.py b/src/common/xmpp/transports_nb.py index 8f6364c4a..e23348bba 100644 --- a/src/common/xmpp/transports_nb.py +++ b/src/common/xmpp/transports_nb.py @@ -35,6 +35,7 @@ import errno import time import traceback import base64 +import urlparse import logging log = logging.getLogger('gajim.c.x.transports_nb') @@ -46,25 +47,19 @@ def urisplit(uri): ('http', 'httpcm.jabber.org', 123, '/webclient') return 443 as default port if proto is https else 80 ''' - import re - regex = '(([^:/]+)(://))?([^/]*)(:)*([^/]*)(/?.*)' - grouped = re.match(regex, uri).groups() - proto, host, port, path = grouped[1], grouped[3], grouped[5], grouped[6] + splitted = urlparse.urlsplit(uri) + proto, host, path = splitted.scheme, splitted.hostname, splitted.path + try: + port = splitted.port + except ValueError: + log.warn('port cannot be extracted from BOSH URL %s, using default port' \ + % uri) + port = '' if not port: if proto == 'https': port = 443 else: port = 80 - else: - try: - port = int(port) - except ValueError: - if proto == 'https': - port = 443 - else: - port = 80 - log.warn('port cannot be extracted from BOSH URL %s, using port %i', - uri, port) return proto, host, port, path def get_proxy_data_from_dict(proxy): diff --git a/test/test_xmpp_transports_nb.py b/test/test_xmpp_transports_nb.py index edc2f3ebb..d3b1ff9c9 100644 --- a/test/test_xmpp_transports_nb.py +++ b/test/test_xmpp_transports_nb.py @@ -17,13 +17,16 @@ class TestModuleLevelFunctions(unittest.TestCase): Test class for functions defined at module level ''' def test_urisplit(self): - def check_uri(uri, proto, host, path): - _proto, _host, _path = transports_nb.urisplit(uri) + def check_uri(uri, proto, host, port, path): + _proto, _host, _port, _path = transports_nb.urisplit(uri) self.assertEqual(proto, _proto) self.assertEqual(host, _host) + self.assertEqual(port, _port) self.assertEqual(path, _path) check_uri('http://httpcm.jabber.org/webclient', - proto='http', host='httpcm.jabber.org', path='/webclient') + proto='http', host='httpcm.jabber.org', port=80, path='/webclient') + check_uri('http://httpcm.jabber.org:5280/webclient', + proto='http', host='httpcm.jabber.org', port=5280, path='/webclient') def test_get_proxy_data_from_dict(self): def check_dict(proxy_dict, host, port, user, passwd):