Add mDNS services for pairing and connect
- ADB Secure Pairing
- ADB Secure Connect
Nothing else is implemented.
Bug: 111434128, 119490749
Test: N/A
Exempt-From-Owner-Approval: already approved
Change-Id: I2e7873b62a3c7631451e47f6a301f8c4a5ffa2e2
diff --git a/adb/adb_mdns.h b/adb/adb_mdns.h
index 2e544d7..33e2e08 100644
--- a/adb/adb_mdns.h
+++ b/adb/adb_mdns.h
@@ -17,6 +17,18 @@
#ifndef _ADB_MDNS_H_
#define _ADB_MDNS_H_
+#include <android-base/macros.h>
+
const char* kADBServiceType = "_adb._tcp";
+const char* kADBSecurePairingServiceType = "_adb_secure_pairing._tcp";
+const char* kADBSecureConnectServiceType = "_adb_secure_connect._tcp";
+
+const char* kADBDNSServices[] = {
+ kADBServiceType,
+ kADBSecurePairingServiceType,
+ kADBSecureConnectServiceType,
+};
+
+const int kNumADBDNSServices = arraysize(kADBDNSServices);
#endif
diff --git a/adb/daemon/mdns.cpp b/adb/daemon/mdns.cpp
index 3530f48..c8faab4 100644
--- a/adb/daemon/mdns.cpp
+++ b/adb/daemon/mdns.cpp
@@ -32,8 +32,8 @@
static std::mutex& mdns_lock = *new std::mutex();
static int port;
-static DNSServiceRef mdns_ref;
-static bool mdns_registered = false;
+static DNSServiceRef mdns_refs[kNumADBDNSServices];
+static bool mdns_registered[kNumADBDNSServices];
static void start_mdns() {
if (android::base::GetProperty("init.svc.mdnsd", "") == "running") {
@@ -67,24 +67,33 @@
std::string hostname = "adb-";
hostname += android::base::GetProperty("ro.serialno", "unidentified");
- auto error = DNSServiceRegister(&mdns_ref, 0, 0, hostname.c_str(),
- kADBServiceType, nullptr, nullptr,
- htobe16((uint16_t)port), 0, nullptr,
- mdns_callback, nullptr);
+ for (int i = 0; i < kNumADBDNSServices; i++) {
+ auto error = DNSServiceRegister(&mdns_refs[i], 0, 0, hostname.c_str(), kADBDNSServices[i],
+ nullptr, nullptr, htobe16((uint16_t)port), 0, nullptr,
+ mdns_callback, nullptr);
- if (error != kDNSServiceErr_NoError) {
- LOG(ERROR) << "Could not register mDNS service (" << error << ").";
- return;
+ if (error != kDNSServiceErr_NoError) {
+ LOG(ERROR) << "Could not register mDNS service " << kADBDNSServices[i] << ", error ("
+ << error << ").";
+ mdns_registered[i] = false;
+ }
+
+ mdns_registered[i] = true;
}
- mdns_registered = true;
+ for (int i = 0; i < kNumADBDNSServices; i++) {
+ LOG(INFO) << "adbd mDNS service " << kADBDNSServices[i]
+ << " registered: " << mdns_registered[i];
+ }
}
static void teardown_mdns() {
std::lock_guard<std::mutex> lock(mdns_lock);
- if (mdns_registered) {
- DNSServiceRefDeallocate(mdns_ref);
+ for (int i = 0; i < kNumADBDNSServices; ++i) {
+ if (mdns_registered[i]) {
+ DNSServiceRefDeallocate(mdns_refs[i]);
+ }
}
}