Skip to content

Commit a49ce7a

Browse files
wqx6PeterC1965
authored andcommitted
minimal_mdns: Fix filter for Compressed Fabric Id when browsing operational nodes (project-chip#35063)
* minimal_mdns: Fix filter for Compressed Fabric Id when browsing operational nodes * Add check for subtype number
1 parent 2d25404 commit a49ce7a

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/lib/dnssd/Resolver_ImplMinimalMdns.cpp

+11-1
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,17 @@ CHIP_ERROR MinMdnsResolver::BuildQuery(QueryBuilder & builder, const ActiveResol
544544
switch (data.type)
545545
{
546546
case DiscoveryType::kOperational:
547-
qname = CheckAndAllocateQName(kOperationalServiceName, kOperationalProtocol, kLocalDomain);
547+
if (data.filter.type == DiscoveryFilterType::kCompressedFabricId)
548+
{
549+
char subtypeStr[Common::kSubTypeMaxLength + 1];
550+
ReturnErrorOnFailure(MakeServiceSubtype(subtypeStr, sizeof(subtypeStr), data.filter));
551+
qname = CheckAndAllocateQName(subtypeStr, kSubtypeServiceNamePart, kOperationalServiceName, kOperationalProtocol,
552+
kLocalDomain);
553+
}
554+
else
555+
{
556+
qname = CheckAndAllocateQName(kOperationalServiceName, kOperationalProtocol, kLocalDomain);
557+
}
548558
break;
549559
case DiscoveryType::kCommissionableNode:
550560
if (data.filter.type == DiscoveryFilterType::kNone)

src/lib/shell/commands/Dns.cpp

+13-3
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,23 @@ bool ParseSubType(int argc, char ** argv, Dnssd::DiscoveryFilter & filter)
214214
case 'C':
215215
filterType = Dnssd::DiscoveryFilterType::kCommissioningMode;
216216
break;
217+
case 'I':
218+
filterType = Dnssd::DiscoveryFilterType::kCompressedFabricId;
219+
break;
217220
default:
218221
return false;
219222
}
220223

221-
uint16_t code;
222-
VerifyOrReturnError(ArgParser::ParseInt(subtype + 2, code), false);
223-
224+
uint64_t code = 0;
225+
if (filterType == Dnssd::DiscoveryFilterType::kCompressedFabricId)
226+
{
227+
VerifyOrReturnError(ArgParser::ParseInt(subtype + 2, code, 16), false);
228+
VerifyOrReturnValue(code != 0, false);
229+
}
230+
else
231+
{
232+
VerifyOrReturnError(ArgParser::ParseInt(subtype + 2, code), false);
233+
}
224234
filter = Dnssd::DiscoveryFilter(filterType, code);
225235
return true;
226236
}

0 commit comments

Comments
 (0)