aboutsummaryrefslogtreecommitdiffstatshomepage
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
commit6d0786c8a8699cc2e0a04c923a2e0888c2a94f8e (patch)
tree3676e38dfe0d171a2ec677b3b58d5f046650e45c /app/src/main/java/com/wireguard/config/Attribute.java
parentAdd build instructions (diff)
downloadwireguard-android-6d0786c8a8699cc2e0a04c923a2e0888c2a94f8e.tar.xz
wireguard-android-6d0786c8a8699cc2e0a04c923a2e0888c2a94f8e.zip
Do not do DNS lookups for IPs
This involves reflection, which is a bummer, but it's better than doing unnecessary DNS lookups.
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);
}