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 mPairingCode;
|
||||||
private String mGuid;
|
private String mGuid;
|
||||||
private String mServiceName;
|
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 int mPort;
|
||||||
|
|
||||||
private native int native_pairing_start(String guid, String password);
|
private native int native_pairing_start(String guid, String password);
|
||||||
|
|||||||
@@ -721,6 +721,98 @@ public final class AdbDebuggingManagerTest {
|
|||||||
isKeyInFile(TEST_KEY_2, mAdbKeyFile));
|
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.
|
* Runs an adb test with the provided configuration.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user