From c712f2db76b3de9fe2524492e6ff8f6d90bcd6bb Mon Sep 17 00:00:00 2001 From: Lingfeng Yang Date: Sat, 17 Nov 2018 10:14:29 -0800 Subject: [PATCH] make the client browse for appropriate mdns services This CL makes it so the client looks for the adb secure pairing and adb secure connect services. Nothing else should happen, but this should be useful to see if the right packet traffic for discoverability is happening. Bug: 111434128, 119490749 Test: N/A Exempt-From-Owner-Approval: already approved Change-Id: I266bdb8526cf39bbfa131344dca2b1bb14c14a7b --- adb/adb_mdns.h | 1 + adb/client/transport_mdns.cpp | 40 ++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/adb/adb_mdns.h b/adb/adb_mdns.h index 33e2e0884..e223b1b2b 100644 --- a/adb/adb_mdns.h +++ b/adb/adb_mdns.h @@ -30,5 +30,6 @@ const char* kADBDNSServices[] = { }; const int kNumADBDNSServices = arraysize(kADBDNSServices); +const int kADBTransportServiceRefIndex = 0; #endif diff --git a/adb/client/transport_mdns.cpp b/adb/client/transport_mdns.cpp index 1a34384d2..20fa09efa 100644 --- a/adb/client/transport_mdns.cpp +++ b/adb/client/transport_mdns.cpp @@ -34,7 +34,7 @@ #include "fdevent/fdevent.h" #include "sysdeps.h" -static DNSServiceRef service_ref; +static DNSServiceRef service_refs[kNumADBDNSServices]; static fdevent* service_ref_fde; // Use adb_DNSServiceRefSockFD() instead of calling DNSServiceRefSockFD() @@ -239,14 +239,10 @@ static void DNSSD_API register_resolved_mdns_service(DNSServiceRef sdRef, } } -static void DNSSD_API register_mdns_transport(DNSServiceRef sdRef, - DNSServiceFlags flags, - uint32_t interfaceIndex, - DNSServiceErrorType errorCode, - const char* serviceName, - const char* regtype, - const char* domain, - void* /*context*/) { +static void DNSSD_API on_service_browsed(DNSServiceRef sdRef, DNSServiceFlags flags, + uint32_t interfaceIndex, DNSServiceErrorType errorCode, + const char* serviceName, const char* regtype, + const char* domain, void* /*context*/) { D("Registering a transport."); if (errorCode != kDNSServiceErr_NoError) { D("Got error %d during mDNS browse.", errorCode); @@ -262,19 +258,25 @@ static void DNSSD_API register_mdns_transport(DNSServiceRef sdRef, } void init_mdns_transport_discovery_thread(void) { - DNSServiceErrorType errorCode = DNSServiceBrowse(&service_ref, 0, 0, kADBServiceType, nullptr, - register_mdns_transport, nullptr); + int errorCodes[kNumADBDNSServices]; - if (errorCode != kDNSServiceErr_NoError) { - D("Got %d initiating mDNS browse.", errorCode); - return; + for (int i = 0; i < kNumADBDNSServices; ++i) { + errorCodes[i] = DNSServiceBrowse(&service_refs[i], 0, 0, kADBDNSServices[i], nullptr, + on_service_browsed, nullptr); + + if (errorCodes[i] != kDNSServiceErr_NoError) { + D("Got %d browsing for mDNS service %s.", errorCodes[i], kADBDNSServices[i]); + } } - fdevent_run_on_main_thread([]() { - service_ref_fde = - fdevent_create(adb_DNSServiceRefSockFD(service_ref), pump_service_ref, &service_ref); - fdevent_set(service_ref_fde, FDE_READ); - }); + if (errorCodes[kADBTransportServiceRefIndex] == kDNSServiceErr_NoError) { + fdevent_run_on_main_thread([]() { + service_ref_fde = fdevent_create( + adb_DNSServiceRefSockFD(service_refs[kADBTransportServiceRefIndex]), + pump_service_ref, &service_refs[kADBTransportServiceRefIndex]); + fdevent_set(service_ref_fde, FDE_READ); + }); + } } void init_mdns_transport_discovery(void) {