Merge "Comply with naming convention in RFC6335." into rvc-dev
This commit is contained in:
@@ -177,7 +177,15 @@ public class AdbDebuggingManager {
|
||||
private String mPairingCode;
|
||||
private String mGuid;
|
||||
private String mServiceName;
|
||||
private final String mServiceType = "_adb_secure_pairing._tcp.";
|
||||
// From RFC6763 (https://tools.ietf.org/html/rfc6763#section-7.2),
|
||||
// The rules for Service Names [RFC6335] state that they may be no more
|
||||
// than fifteen characters long (not counting the mandatory underscore),
|
||||
// consisting of only letters, digits, and hyphens, must begin and end
|
||||
// with a letter or digit, must not contain consecutive hyphens, and
|
||||
// must contain at least one letter.
|
||||
@VisibleForTesting
|
||||
static final String SERVICE_PROTOCOL = "adb-tls-pairing";
|
||||
private final String mServiceType = String.format("_%s._tcp.", SERVICE_PROTOCOL);
|
||||
private int mPort;
|
||||
|
||||
private native int native_pairing_start(String guid, String password);
|
||||
|
||||
@@ -721,6 +721,98 @@ public final class AdbDebuggingManagerTest {
|
||||
isKeyInFile(TEST_KEY_2, mAdbKeyFile));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsValidMdnsServiceName() {
|
||||
// Longer than 15 characters
|
||||
assertFalse(isValidMdnsServiceName("abcd1234abcd1234"));
|
||||
|
||||
// Contains invalid characters
|
||||
assertFalse(isValidMdnsServiceName("a*a"));
|
||||
assertFalse(isValidMdnsServiceName("a_a"));
|
||||
assertFalse(isValidMdnsServiceName("_a"));
|
||||
|
||||
// Does not begin or end with letter or digit
|
||||
assertFalse(isValidMdnsServiceName(""));
|
||||
assertFalse(isValidMdnsServiceName("-"));
|
||||
assertFalse(isValidMdnsServiceName("-a"));
|
||||
assertFalse(isValidMdnsServiceName("-1"));
|
||||
assertFalse(isValidMdnsServiceName("a-"));
|
||||
assertFalse(isValidMdnsServiceName("1-"));
|
||||
|
||||
// Contains consecutive hyphens
|
||||
assertFalse(isValidMdnsServiceName("a--a"));
|
||||
|
||||
// Does not contain at least one letter
|
||||
assertFalse(isValidMdnsServiceName("1"));
|
||||
assertFalse(isValidMdnsServiceName("12"));
|
||||
assertFalse(isValidMdnsServiceName("1-2"));
|
||||
|
||||
// letter not within [a-zA-Z]
|
||||
assertFalse(isValidMdnsServiceName("aés"));
|
||||
|
||||
// Some valid names
|
||||
assertTrue(isValidMdnsServiceName("a"));
|
||||
assertTrue(isValidMdnsServiceName("a1"));
|
||||
assertTrue(isValidMdnsServiceName("1A"));
|
||||
assertTrue(isValidMdnsServiceName("aZ"));
|
||||
assertTrue(isValidMdnsServiceName("a-Z"));
|
||||
assertTrue(isValidMdnsServiceName("a-b-Z"));
|
||||
assertTrue(isValidMdnsServiceName("abc-def-123-456"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPairingThread_MdnsServiceName_RFC6335() {
|
||||
assertTrue(isValidMdnsServiceName(AdbDebuggingManager.PairingThread.SERVICE_PROTOCOL));
|
||||
}
|
||||
|
||||
private boolean isValidMdnsServiceName(String name) {
|
||||
// The rules for Service Names [RFC6335] state that they may be no more
|
||||
// than fifteen characters long (not counting the mandatory underscore),
|
||||
// consisting of only letters, digits, and hyphens, must begin and end
|
||||
// with a letter or digit, must not contain consecutive hyphens, and
|
||||
// must contain at least one letter.
|
||||
// No more than 15 characters long
|
||||
final int len = name.length();
|
||||
if (name.isEmpty() || len > 15) {
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean hasAtLeastOneLetter = false;
|
||||
boolean sawHyphen = false;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
// Must contain at least one letter
|
||||
// Only contains letters, digits and hyphens
|
||||
char c = name.charAt(i);
|
||||
if (c == '-') {
|
||||
// Cannot be at beginning or end
|
||||
if (i == 0 || i == len - 1) {
|
||||
return false;
|
||||
}
|
||||
if (sawHyphen) {
|
||||
// Consecutive hyphen found
|
||||
return false;
|
||||
}
|
||||
sawHyphen = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
sawHyphen = false;
|
||||
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
|
||||
hasAtLeastOneLetter = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (c >= '0' && c <= '9') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Invalid character
|
||||
return false;
|
||||
}
|
||||
|
||||
return hasAtLeastOneLetter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs an adb test with the provided configuration.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user