summaryrefslogtreecommitdiffhomepage
path: root/app/src/main/java/com/wireguard/config/Attribute.java
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-04-27 18:29:14 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-04-27 18:34:52 +0200
commit693228985df3aab03a53d9ae68aed7d309c4f6bd (patch)
tree3676e38dfe0d171a2ec677b3b58d5f046650e45c /app/src/main/java/com/wireguard/config/Attribute.java
parent9c6f9135e9eda8a9cceebf1eb1980c9b06ce3741 (diff)
Do not do DNS lookups for IPs
This involves reflection, which is a bummer, but it's better than doing unnecessary DNS lookups. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/src/main/java/com/wireguard/config/Attribute.java')
-rw-r--r--app/src/main/java/com/wireguard/config/Attribute.java27
1 files changed, 27 insertions, 0 deletions
diff --git a/app/src/main/java/com/wireguard/config/Attribute.java b/app/src/main/java/com/wireguard/config/Attribute.java
index c73e9f2e..c98588b2 100644
--- a/app/src/main/java/com/wireguard/config/Attribute.java
+++ b/app/src/main/java/com/wireguard/config/Attribute.java
@@ -2,6 +2,9 @@ package com.wireguard.config;
import android.text.TextUtils;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.InetAddress;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -54,6 +57,30 @@ enum Attribute {
return string.trim().split("\\s*,\\s*");
}
+ private static Method parseNumericAddressMethod;
+ static {
+ try {
+ parseNumericAddressMethod = InetAddress.class.getMethod("parseNumericAddress", new Class[]{String.class});
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static InetAddress parseIPString(final String address) {
+ if (address == null || address.isEmpty())
+ throw new IllegalArgumentException("Empty address");
+ try {
+ return (InetAddress)parseNumericAddressMethod.invoke(null, new Object[]{address});
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ } catch (InvocationTargetException e) {
+ if (e.getCause() instanceof IllegalArgumentException)
+ throw (IllegalArgumentException)e.getCause();
+ else
+ throw new IllegalArgumentException(e.getCause());
+ }
+ }
+
public String composeWith(final Object value) {
return String.format("%s = %s%n", token, value);
}