Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit be49d8a2 authored by Lingfeng Yang's avatar Lingfeng Yang Committed by Joshua Duong
Browse files

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
parent e6f2b7d8
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -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
+21 −12
Original line number Diff line number Diff line
@@ -32,8 +32,8 @@ using namespace std::chrono_literals;

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 @@ static void setup_mdns_thread() {
    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,
    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;
            LOG(ERROR) << "Could not register mDNS service " << kADBDNSServices[i] << ", error ("
                       << error << ").";
            mdns_registered[i] = false;
        }

    mdns_registered = true;
        mdns_registered[i] = 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]);
        }
    }
}