summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/isode/stroke/idn/ICUConverter.java50
-rw-r--r--src/com/isode/stroke/idn/IDNA.java7
-rw-r--r--src/com/isode/stroke/idn/IDNConverter.java31
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