fix bosh url parsing (wrong regex replaced by urlparse.urlsplit() funxtion)

This commit is contained in:
Yann Leboulanger 2009-11-05 08:50:21 +01:00
parent c1cbc07645
commit 1a76b72b58
2 changed files with 15 additions and 17 deletions

View File

@ -35,6 +35,7 @@ import errno
import time import time
import traceback import traceback
import base64 import base64
import urlparse
import logging import logging
log = logging.getLogger('gajim.c.x.transports_nb') log = logging.getLogger('gajim.c.x.transports_nb')
@ -46,25 +47,19 @@ def urisplit(uri):
('http', 'httpcm.jabber.org', 123, '/webclient') ('http', 'httpcm.jabber.org', 123, '/webclient')
return 443 as default port if proto is https else 80 return 443 as default port if proto is https else 80
''' '''
import re splitted = urlparse.urlsplit(uri)
regex = '(([^:/]+)(://))?([^/]*)(:)*([^/]*)(/?.*)' proto, host, path = splitted.scheme, splitted.hostname, splitted.path
grouped = re.match(regex, uri).groups() try:
proto, host, port, path = grouped[1], grouped[3], grouped[5], grouped[6] port = splitted.port
except ValueError:
log.warn('port cannot be extracted from BOSH URL %s, using default port' \
% uri)
port = ''
if not port: if not port:
if proto == 'https': if proto == 'https':
port = 443 port = 443
else: else:
port = 80 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 return proto, host, port, path
def get_proxy_data_from_dict(proxy): def get_proxy_data_from_dict(proxy):

View File

@ -17,13 +17,16 @@ class TestModuleLevelFunctions(unittest.TestCase):
Test class for functions defined at module level Test class for functions defined at module level
''' '''
def test_urisplit(self): def test_urisplit(self):
def check_uri(uri, proto, host, path): def check_uri(uri, proto, host, port, path):
_proto, _host, _path = transports_nb.urisplit(uri) _proto, _host, _port, _path = transports_nb.urisplit(uri)
self.assertEqual(proto, _proto) self.assertEqual(proto, _proto)
self.assertEqual(host, _host) self.assertEqual(host, _host)
self.assertEqual(port, _port)
self.assertEqual(path, _path) self.assertEqual(path, _path)
check_uri('http://httpcm.jabber.org/webclient', 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 test_get_proxy_data_from_dict(self):
def check_dict(proxy_dict, host, port, user, passwd): def check_dict(proxy_dict, host, port, user, passwd):