From f5d275bd2b87381ab5984fc2ef7552194d99c9dc Mon Sep 17 00:00:00 2001 From: Suhas Shankar Date: Thu, 23 May 2024 13:19:45 +0530 Subject: [PATCH] Updated as per new review feedback --- src/lib/dnssd/Discovery_ImplPlatform.cpp | 19 +++++++++-------- src/lib/shell/commands/Dns.cpp | 6 ++++++ src/platform/Darwin/DnssdContexts.cpp | 12 ++++++++++- src/platform/Linux/DnssdImpl.cpp | 27 ++++++++++++------------ 4 files changed, 41 insertions(+), 23 deletions(-) diff --git a/src/lib/dnssd/Discovery_ImplPlatform.cpp b/src/lib/dnssd/Discovery_ImplPlatform.cpp index 6947172364312d..e21c3236e684fb 100644 --- a/src/lib/dnssd/Discovery_ImplPlatform.cpp +++ b/src/lib/dnssd/Discovery_ImplPlatform.cpp @@ -94,20 +94,21 @@ static void HandleNodeBrowse(void * context, DnssdService * services, size_t ser // For some platforms browsed services are already resolved, so verify if resolve is really needed or call resolve callback auto & ipAddress = services[i].mAddress; - bool isOperationalBrowse = (strncmp(services[i].mType, kOperationalServiceName, sizeof(kOperationalServiceName)) == 0 && + + // mType(service name) exactly matches with operational service name + bool isOperationalBrowse = (strncmp(services[i].mType, kOperationalServiceName, sizeof(services[i].mType)) == 0 && strlen(services[i].mType) == strlen(kOperationalServiceName)); - // if SRV, TXT and AAAA records were received in DNS responses, also for operational browse result we currently - // don't need IP address hence skip resolution. - if (!isOperationalBrowse && - (strlen(services[i].mHostName) == 0 || services[i].mTextEntrySize == 0 || !ipAddress.has_value())) + + // For operational browse result we currently don't need IP address hence skip resolution and handle differently. + if (isOperationalBrowse) { - ChipDnssdResolve(&services[i], services[i].mInterface, HandleNodeResolve, context); + HandleNodeOperationalBrowse(context, &services[i], error); } - else if (isOperationalBrowse) + // if SRV, TXT and AAAA records were received in DNS responses + else if (strlen(services[i].mHostName) == 0 || services[i].mTextEntrySize == 0 || !ipAddress.has_value()) { - // Operational browse currently doesn't need IP info, so handle differently - HandleNodeOperationalBrowse(context, &services[i], error); + ChipDnssdResolve(&services[i], services[i].mInterface, HandleNodeResolve, context); } else { diff --git a/src/lib/shell/commands/Dns.cpp b/src/lib/shell/commands/Dns.cpp index a9af20d3857a20..7b71a5a2f3ffcf 100644 --- a/src/lib/shell/commands/Dns.cpp +++ b/src/lib/shell/commands/Dns.cpp @@ -285,6 +285,12 @@ void RegisterDnsCommands() { &ResolveHandler, "resolve", "Resolve Matter operational service. Usage: dns resolve fabricid nodeid (e.g. dns resolve 5544332211 1)" }, { &SubShellCommand, "browse", "Browse Matter DNS services" }, + }; static constexpr Command dnsCommand = { &SubShellCommand, "dns", "DNS client commands" }; + + Engine::Root().RegisterCommands(&dnsCommand, 1); +} + +} // namespace Shell } // namespace chip diff --git a/src/platform/Darwin/DnssdContexts.cpp b/src/platform/Darwin/DnssdContexts.cpp index 8eb199a45d6822..8da2f2f8d182f2 100644 --- a/src/platform/Darwin/DnssdContexts.cpp +++ b/src/platform/Darwin/DnssdContexts.cpp @@ -607,7 +607,17 @@ bool ResolveContext::TryReportingResultsForInterfaceIndex(uint32_t interfaceInde { auto delegate = static_cast(context); DiscoveredNodeData nodeData; - service.ToDiscoveredCommissionNodeData(addresses, nodeData); + + // mType(service name) exactly matches with operational service name + if (strncmp(services[i].mType, kOperationalServiceName, sizeof(services[i].mType)) == 0 && + strlen(services[i].mType) == strlen(kOperationalServiceName)) + { + service.ToDiscoveredOperationalNodeBrowseData(nodeData); + } + else + { + service.ToDiscoveredCommissionNodeData(addresses, nodeData); + } delegate->OnNodeDiscovered(nodeData); } else diff --git a/src/platform/Linux/DnssdImpl.cpp b/src/platform/Linux/DnssdImpl.cpp index 9d6f3f7c19c2b9..40b7c89812d251 100644 --- a/src/platform/Linux/DnssdImpl.cpp +++ b/src/platform/Linux/DnssdImpl.cpp @@ -770,21 +770,22 @@ void MdnsAvahi::HandleBrowse(AvahiServiceBrowser * browser, AvahiIfIndex interfa })); } - DnssdService service = {}; - - Platform::CopyString(service.mName, name); - CopyTypeWithoutProtocol(service.mType, type); - service.mProtocol = GetProtocolInType(type); - service.mAddressType = context->mAddressType; - service.mTransportType = ToAddressType(protocol); - service.mInterface = Inet::InterfaceId::Null(); - if (interface != AVAHI_IF_UNSPEC) - { - service.mInterface = static_cast(interface); - } - service.mTtlSeconds = 0; if (context->mReceivedAllCached) { + DnssdService service = {}; + + Platform::CopyString(service.mName, name); + CopyTypeWithoutProtocol(service.mType, type); + service.mProtocol = GetProtocolInType(type); + service.mAddressType = context->mAddressType; + service.mTransportType = ToAddressType(protocol); + service.mInterface = Inet::InterfaceId::Null(); + if (interface != AVAHI_IF_UNSPEC) + { + service.mInterface = static_cast(interface); + } + service.mTtlSeconds = 0; + context->mServices.push_back(service); InvokeDelegateOrCleanUp(context, browser); }