diff options
author | Tarun Gupta <tarun1995gupta@gmail.com> | 2015-06-27 08:59:57 (GMT) |
---|---|---|
committer | Kevin Smith <kevin.smith@isode.com> | 2015-07-06 14:14:14 (GMT) |
commit | c23c591f888f6cb1054bd110f7b6ffff9a1173a0 (patch) | |
tree | f52eda81dc8f1028ed51fef39c690571978ad45d /src | |
parent | fcdff3f162995170469833a82f607903e660812d (diff) | |
download | stroke-c23c591f888f6cb1054bd110f7b6ffff9a1173a0.zip stroke-c23c591f888f6cb1054bd110f7b6ffff9a1173a0.tar.bz2 |
Add Internationalized Domain Name Features.
Adds IDNConverter interface, ICUConverter using ICU for Stringprep.
Also updates Makefile and build.xml by adding path to icu4j to compile tests classpath,
so that icu4j.jar can be used in the tests. IDNConverter tests need StringPrepParseException from icu4j jar.
License:
This patch is BSD-licensed, see Documentation/Licenses/BSD-simplified.txt for details.
Test-Information:
Added test for IDNConverter, which passes.
Change-Id: I56aacf080a10216a2455cf561de567f5666cd0c9
Diffstat (limited to 'src')
-rw-r--r-- | src/com/isode/stroke/idn/ICUConverter.java | 50 | ||||
-rw-r--r-- | src/com/isode/stroke/idn/IDNA.java | 7 | ||||
-rw-r--r-- | src/com/isode/stroke/idn/IDNConverter.java | 31 |
3 files changed, 87 insertions, 1 deletions
diff --git a/src/com/isode/stroke/idn/ICUConverter.java b/src/com/isode/stroke/idn/ICUConverter.java new file mode 100644 index 0000000..bd347df --- /dev/null +++ b/src/com/isode/stroke/idn/ICUConverter.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2012-2013 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.idn; + +import com.isode.stroke.base.SafeByteArray; +import com.isode.stroke.idn.IDNConverter; +import com.isode.stroke.idn.IDNA; +import com.ibm.icu.text.StringPrep; +import com.ibm.icu.text.StringPrepParseException; + +public class ICUConverter implements IDNConverter { + + public String getStringPrepared(String s, StringPrepProfile profile) throws StringPrepParseException { + StringPrep str = StringPrep.getInstance(getICUProfileType(profile)); + + String preparedData = str.prepare(s, StringPrep.DEFAULT); + return preparedData; + } + + public SafeByteArray getStringPrepared(SafeByteArray s, StringPrepProfile profile) throws StringPrepParseException { + StringPrep str = StringPrep.getInstance(getICUProfileType(profile)); + + String preparedData = str.prepare(s.toString(), StringPrep.DEFAULT); + return new SafeByteArray(preparedData); + } + + public String getIDNAEncoded(String s) { + return IDNA.getEncoded(s); + } + + private int getICUProfileType(IDNConverter.StringPrepProfile profile) { + switch(profile) { + case NamePrep: return StringPrep.RFC3491_NAMEPREP; + case XMPPNodePrep: return StringPrep.RFC3920_NODEPREP; + case XMPPResourcePrep: return StringPrep.RFC3920_RESOURCEPREP; + case SASLPrep: return StringPrep.RFC4013_SASLPREP; + } + assert(false); + return StringPrep.RFC3491_NAMEPREP; + } +}
\ No newline at end of file diff --git a/src/com/isode/stroke/idn/IDNA.java b/src/com/isode/stroke/idn/IDNA.java index 572369f..e3b86dd 100644 --- a/src/com/isode/stroke/idn/IDNA.java +++ b/src/com/isode/stroke/idn/IDNA.java @@ -13,6 +13,11 @@ import java.net.IDN; public class IDNA { public static String getEncoded(String s) { - return IDN.toASCII(s); + try { + return IDN.toASCII(s, IDN.USE_STD3_ASCII_RULES); + } + catch (IllegalArgumentException e) { + return null; + } } } diff --git a/src/com/isode/stroke/idn/IDNConverter.java b/src/com/isode/stroke/idn/IDNConverter.java new file mode 100644 index 0000000..3566020 --- /dev/null +++ b/src/com/isode/stroke/idn/IDNConverter.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2013 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ +/* + * Copyright (c) 2015 Tarun Gupta. + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.idn; + +import com.isode.stroke.base.SafeByteArray; +import com.ibm.icu.text.StringPrepParseException; + +public interface IDNConverter { + + public enum StringPrepProfile { + NamePrep, + XMPPNodePrep, + XMPPResourcePrep, + SASLPrep + }; + + public String getStringPrepared(String s, StringPrepProfile profile) throws StringPrepParseException; + public SafeByteArray getStringPrepared(SafeByteArray s, StringPrepProfile profile) throws StringPrepParseException; + + // Thread-safe + public String getIDNAEncoded(String s); +}
\ No newline at end of file |