Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPhilipp Hörist <forenjunkie@chello.at>2017-06-17 00:40:42 +0300
committerPhilipp Hörist <forenjunkie@chello.at>2017-06-17 00:40:42 +0300
commit49a78ae8ed999ee8866ea570746b9c1b61dd0984 (patch)
tree708c96ed534d5cbdfe9df6e490227c88406a1dd2 /src
parent4650615010c8aefa86bb14d7bcea49f8305a9b37 (diff)
Support IPV6 and IPV4 domainparts
https://tools.ietf.org/html/rfc7622#section-3.2
Diffstat (limited to 'src')
-rw-r--r--src/common/helpers.py40
1 files changed, 29 insertions, 11 deletions
diff --git a/src/common/helpers.py b/src/common/helpers.py
index 0d8f4cf70..17a1fb9d0 100644
--- a/src/common/helpers.py
+++ b/src/common/helpers.py
@@ -173,6 +173,35 @@ def prep(user, server, resource):
"""
# This function comes from
#http://svn.twistedmatrix.com/cvs/trunk/twisted/words/protocols/jabber/jid.py
+
+ ip_address = False
+
+ try:
+ socket.inet_aton(server)
+ ip_address = True
+ except socket.error:
+ pass
+
+ if not ip_address and hasattr(socket, 'inet_pton'):
+ try:
+ socket.inet_pton(socket.AF_INET6, server.strip('[]'))
+ server = '[%s]' % server.strip('[]')
+ ip_address = True
+ except (socket.error, ValueError):
+ pass
+
+ if not ip_address:
+ if server is not None:
+ if len(server) < 1 or len(server) > 1023:
+ raise InvalidFormat(_('Server must be between 1 and 1023 chars'))
+ try:
+ from nbxmpp.stringprepare import nameprep
+ server = nameprep.prepare(server)
+ except UnicodeError:
+ raise InvalidFormat(_('Invalid character in hostname.'))
+ else:
+ raise InvalidFormat(_('Server address required.'))
+
if user is not None:
if len(user) < 1 or len(user) > 1023:
raise InvalidFormat(_('Username must be between 1 and 1023 chars'))
@@ -184,17 +213,6 @@ def prep(user, server, resource):
else:
user = None
- if server is not None:
- if len(server) < 1 or len(server) > 1023:
- raise InvalidFormat(_('Server must be between 1 and 1023 chars'))
- try:
- from nbxmpp.stringprepare import nameprep
- server = nameprep.prepare(server)
- except UnicodeError:
- raise InvalidFormat(_('Invalid character in hostname.'))
- else:
- raise InvalidFormat(_('Server address required.'))
-
if resource is not None:
if len(resource) < 1 or len(resource) > 1023:
raise InvalidFormat(_('Resource must be between 1 and 1023 chars'))