diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-04-27 18:29:14 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-04-27 18:34:52 +0200 |
commit | 693228985df3aab03a53d9ae68aed7d309c4f6bd (patch) | |
tree | 3676e38dfe0d171a2ec677b3b58d5f046650e45c /app/src/main/java/com/wireguard/config/Attribute.java | |
parent | 9c6f9135e9eda8a9cceebf1eb1980c9b06ce3741 (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.java | 27 |
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); } |