Move shared methods and constants from Proxy to shared lib
Proxy is moving into connectivity mainline and its hidden methods
are not accessible outside the module. Thus, move the shared
methods and constants to ProxyUtils to share between module and
platform.
Bug: 172183305
Test: atest FrameworksNetTests
Test: atest CtsNetTestCases:ProxyInfoTest
Change-Id: I7153ce4e77b80964ffad67254b6329973ed61f30
diff --git a/staticlibs/framework/com/android/net/module/util/ProxyUtils.java b/staticlibs/framework/com/android/net/module/util/ProxyUtils.java
index a7b8393..fdd7dca 100644
--- a/staticlibs/framework/com/android/net/module/util/ProxyUtils.java
+++ b/staticlibs/framework/com/android/net/module/util/ProxyUtils.java
@@ -22,6 +22,8 @@
import java.util.Collections;
import java.util.List;
import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Collection of network common utilities.
@@ -30,6 +32,28 @@
*/
public final class ProxyUtils {
+ public static final int PROXY_VALID = 0;
+ public static final int PROXY_HOSTNAME_EMPTY = 1;
+ public static final int PROXY_HOSTNAME_INVALID = 2;
+ public static final int PROXY_PORT_EMPTY = 3;
+ public static final int PROXY_PORT_INVALID = 4;
+ public static final int PROXY_EXCLLIST_INVALID = 5;
+
+ // Hostname / IP REGEX validation
+ // Matches blank input, ips, and domain names
+ private static final String NAME_IP_REGEX =
+ "[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*";
+ private static final Pattern HOSTNAME_PATTERN;
+ private static final String HOSTNAME_REGEXP = "^$|^" + NAME_IP_REGEX + "$";
+ private static final Pattern EXCLLIST_PATTERN;
+ private static final String EXCL_REGEX =
+ "[a-zA-Z0-9*]+(\\-[a-zA-Z0-9*]+)*(\\.[a-zA-Z0-9*]+(\\-[a-zA-Z0-9*]+)*)*";
+ private static final String EXCLLIST_REGEXP = "^$|^" + EXCL_REGEX + "(," + EXCL_REGEX + ")*$";
+ static {
+ HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP);
+ EXCLLIST_PATTERN = Pattern.compile(EXCLLIST_REGEXP);
+ }
+
/** Converts exclusion list from String to List. */
public static List<String> exclusionStringAsList(String exclusionList) {
if (exclusionList == null) {
@@ -45,4 +69,30 @@
}
return TextUtils.join(",", exclusionList);
}
+
+ /**
+ * Validate syntax of hostname, port and exclusion list entries
+ */
+ public static int validate(String hostname, String port, String exclList) {
+ Matcher match = HOSTNAME_PATTERN.matcher(hostname);
+ Matcher listMatch = EXCLLIST_PATTERN.matcher(exclList);
+
+ if (!match.matches()) return PROXY_HOSTNAME_INVALID;
+
+ if (!listMatch.matches()) return PROXY_EXCLLIST_INVALID;
+
+ if (hostname.length() > 0 && port.length() == 0) return PROXY_PORT_EMPTY;
+
+ if (port.length() > 0) {
+ if (hostname.length() == 0) return PROXY_HOSTNAME_EMPTY;
+ int portVal = -1;
+ try {
+ portVal = Integer.parseInt(port);
+ } catch (NumberFormatException ex) {
+ return PROXY_PORT_INVALID;
+ }
+ if (portVal <= 0 || portVal > 0xFFFF) return PROXY_PORT_INVALID;
+ }
+ return PROXY_VALID;
+ }
}