Skip to content

Commit

Permalink
Updated as per new review feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
su-shanka committed May 23, 2024
1 parent 8faa9a6 commit f5d275b
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 23 deletions.
19 changes: 10 additions & 9 deletions src/lib/dnssd/Discovery_ImplPlatform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
6 changes: 6 additions & 0 deletions src/lib/shell/commands/Dns.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,12 @@ void RegisterDnsCommands()
{ &ResolveHandler, "resolve",
"Resolve Matter operational service. Usage: dns resolve fabricid nodeid (e.g. dns resolve 5544332211 1)" },
{ &SubShellCommand<ArraySize(browseSubCommands), browseSubCommands>, "browse", "Browse Matter DNS services" },
};

static constexpr Command dnsCommand = { &SubShellCommand<ArraySize(subCommands), subCommands>, "dns", "DNS client commands" };

Engine::Root().RegisterCommands(&dnsCommand, 1);
}

} // namespace Shell
} // namespace chip
12 changes: 11 additions & 1 deletion src/platform/Darwin/DnssdContexts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -607,7 +607,17 @@ bool ResolveContext::TryReportingResultsForInterfaceIndex(uint32_t interfaceInde
{
auto delegate = static_cast<DiscoverNodeDelegate *>(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
Expand Down
27 changes: 14 additions & 13 deletions src/platform/Linux/DnssdImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<chip::Inet::InterfaceId>(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<chip::Inet::InterfaceId>(interface);
}
service.mTtlSeconds = 0;

context->mServices.push_back(service);
InvokeDelegateOrCleanUp(context, browser);
}
Expand Down

0 comments on commit f5d275b

Please sign in to comment.