Merge "Comply with naming convention in RFC6335." into rvc-dev

This commit is contained in:
Joshua Duong
2020-04-18 16:41:59 +00:00
committed by Android (Google) Code Review
2 changed files with 101 additions and 1 deletions

View File

@@ -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);

View File

@@ -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.
*