summaryrefslogtreecommitdiff
path: root/slixmpp/stringprep.py
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <linkmauve@linkmauve.fr>2015-08-20 20:03:32 +0100
committerEmmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>2015-08-20 20:04:58 +0100
commit041bd63864429ac74ff7b7e267a0a96b04553383 (patch)
tree632b523bf73ef7b6fa387dea7540973bd1a0c159 /slixmpp/stringprep.py
parenta721084f6e9bc82568483176c7c8b8f182e96c15 (diff)
downloadslixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.tar.gz
slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.tar.bz2
slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.tar.xz
slixmpp-041bd63864429ac74ff7b7e267a0a96b04553383.zip
Add a function to convert a domain name to punycode.
Diffstat (limited to 'slixmpp/stringprep.py')
-rw-r--r--slixmpp/stringprep.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/slixmpp/stringprep.py b/slixmpp/stringprep.py
index e0757ef2..99506d78 100644
--- a/slixmpp/stringprep.py
+++ b/slixmpp/stringprep.py
@@ -101,5 +101,21 @@ def idna(domain):
domain_parts.append(label)
return '.'.join(domain_parts)
+def punycode(domain):
+ domain_parts = []
+ for label in domain.split('.'):
+ try:
+ label = encodings.idna.nameprep(label)
+ encodings.idna.ToASCII(label)
+ except UnicodeError:
+ raise StringprepError
+
+ for char in label:
+ if char in ILLEGAL_CHARS:
+ raise StringprepError
+
+ domain_parts.append(label)
+ return b'.'.join(domain_parts)
+
logging.getLogger(__name__).warning('Using slower stringprep, consider '
'compiling the faster cython/libidn one.')