@@ -131,12 +131,6 @@ std::shared_ptr<uint32_t> GetCounterHolder(const char * name)
131
131
return std::make_shared<uint32_t >(0 );
132
132
}
133
133
134
- bool ServicesAreEqual (DnssdService service, DnssdService other)
135
- {
136
- return strcmp (service.mName , other.mName ) == 0 && GetFullType (&service) == GetFullType (&other) &&
137
- service.mInterface == other.mInterface ;
138
- }
139
-
140
134
bool IsSRPType (const char * domain)
141
135
{
142
136
return strcmp (kSRPDot , domain) == 0 ;
@@ -233,23 +227,26 @@ static void OnBrowse(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interf
233
227
sdCtx->OnBrowse (flags, name, type, domain, interfaceId);
234
228
}
235
229
230
+ CHIP_ERROR BrowseOnDomain (BrowseHandler * sdCtx, uint32_t interfaceId, const char * type, const char * domain)
231
+ {
232
+ auto sdRef = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
233
+
234
+ auto err = DNSServiceBrowse (&sdRef, kBrowseFlags , interfaceId, type, domain, OnBrowse, sdCtx);
235
+ VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
236
+ return CHIP_NO_ERROR;
237
+ }
238
+
236
239
CHIP_ERROR Browse (BrowseHandler * sdCtx, uint32_t interfaceId, const char * type)
237
240
{
238
241
auto err = DNSServiceCreateConnection (&sdCtx->serviceRef );
239
242
VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
240
243
241
244
// We will browse on both the local domain and the SRP domain.
242
245
ChipLogProgress (Discovery, " Browsing for: %s on local domain" , StringOrNullMarker (type));
243
-
244
- auto sdRefLocal = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
245
- err = DNSServiceBrowse (&sdRefLocal, kBrowseFlags , interfaceId, type, kLocalDot , OnBrowse, sdCtx);
246
- VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
246
+ ReturnErrorOnFailure (BrowseOnDomain (sdCtx, interfaceId, type, kLocalDot ));
247
247
248
248
ChipLogProgress (Discovery, " Browsing for: %s on %s domain" , StringOrNullMarker (type), kSRPDot );
249
-
250
- auto sdRefSRP = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
251
- err = DNSServiceBrowse (&sdRefSRP, kBrowseFlags , interfaceId, type, kSRPDot , OnBrowse, sdCtx);
252
- VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
249
+ ReturnErrorOnFailure (BrowseOnDomain (sdCtx, interfaceId, type, kSRPDot ));
253
250
254
251
return MdnsContexts::GetInstance ().Add (sdCtx, sdCtx->serviceRef );
255
252
}
@@ -377,6 +374,15 @@ static void OnResolve(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t inter
377
374
}
378
375
}
379
376
377
+ static CHIP_ERROR ResolveWithContext (ResolveContext * sdCtx, uint32_t interfaceId, const char * type, const char * name, const char * domain, ResolveContextWithType * contextWithType)
378
+ {
379
+ auto sdRef = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
380
+
381
+ auto err = DNSServiceResolve (&sdRef, kResolveFlags , interfaceId, name, type, domain, OnResolve, contextWithType);
382
+ VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
383
+ return CHIP_NO_ERROR;
384
+ }
385
+
380
386
static CHIP_ERROR Resolve (ResolveContext * sdCtx, uint32_t interfaceId, chip::Inet::IPAddressType addressType, const char * type,
381
387
const char * name, const char * domain)
382
388
{
@@ -390,25 +396,14 @@ static CHIP_ERROR Resolve(ResolveContext * sdCtx, uint32_t interfaceId, chip::In
390
396
// Otherwise we will try to resolve using both the local domain and the SRP domain.
391
397
if (domain != nullptr )
392
398
{
393
- auto sdRef = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
394
-
395
- ResolveContextWithType * contextWithType =
396
- IsSRPType (domain) ? &sdCtx->resolveContextWithSRPType : &sdCtx->resolveContextWithNonSRPType ;
397
- err = DNSServiceResolve (&sdRef, kResolveFlags , interfaceId, name, type, domain, OnResolve, contextWithType);
398
- VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
399
+ ReturnErrorOnFailure (ResolveWithContext (sdCtx, interfaceId, type, name, domain, IsSRPType (domain) ? &sdCtx->resolveContextWithSRPType : &sdCtx->resolveContextWithNonSRPType ));
399
400
sdCtx->shoulStartSRPTimerForResolve = false ;
400
401
}
401
402
else
402
403
{
403
- auto sdRefLocal = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
404
- err = DNSServiceResolve (&sdRefLocal, kResolveFlags , interfaceId, name, type, kLocalDot , OnResolve,
405
- &sdCtx->resolveContextWithNonSRPType );
406
- VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
404
+ ReturnErrorOnFailure (ResolveWithContext (sdCtx, interfaceId, type, name, kLocalDot , &sdCtx->resolveContextWithNonSRPType ));
407
405
408
- auto sdRefSRP = sdCtx->serviceRef ; // Mandatory copy because of kDNSServiceFlagsShareConnection
409
- err = DNSServiceResolve (&sdRefSRP, kResolveFlags , interfaceId, name, type, kSRPDot , OnResolve,
410
- &sdCtx->resolveContextWithSRPType );
411
- VerifyOrReturnError (kDNSServiceErr_NoError == err, sdCtx->Finalize (err));
406
+ ReturnErrorOnFailure (ResolveWithContext (sdCtx, interfaceId, type, name, kSRPDot , &sdCtx->resolveContextWithNonSRPType ));
412
407
}
413
408
414
409
auto retval = MdnsContexts::GetInstance ().Add (sdCtx, sdCtx->serviceRef );
@@ -579,11 +574,10 @@ CHIP_ERROR ChipDnssdResolve(DnssdService * service, chip::Inet::InterfaceId inte
579
574
580
575
if (BrowseContext::sContextDispatchingSuccess != nullptr )
581
576
{
582
- for (auto iter : BrowseContext::sContextDispatchingSuccess ->services )
583
- {
584
- if (ServicesAreEqual (*service, iter.first ))
585
- {
586
- domain = iter.second .c_str ();
577
+ for (size_t i = 0 ; i < BrowseContext::sDispatchedServices ->size (); ++i) {
578
+ if (service == &BrowseContext::sDispatchedServices ->at (i)) {
579
+ domain = BrowseContext::sContextDispatchingSuccess ->services [i].second .c_str ();
580
+ break ;
587
581
}
588
582
}
589
583
}
0 commit comments