@@ -368,10 +368,14 @@ void BrowseContext::DispatchSuccess()
368
368
void BrowseContext::DispatchPartialSuccess ()
369
369
{
370
370
sContextDispatchingSuccess = this ;
371
- callback (context, services.data (), services.size (), false , CHIP_NO_ERROR);
371
+ std::vector<DnssdService> dnsServices;
372
+ for (auto iter : services)
373
+ {
374
+ dnsServices.push_back (std::move (iter.first ));
375
+ }
376
+ callback (context, dnsServices.data (), dnsServices.size (), false , CHIP_NO_ERROR);
372
377
sContextDispatchingSuccess = nullptr ;
373
378
services.clear ();
374
- domainNames.clear ();
375
379
}
376
380
377
381
void BrowseContext::OnBrowse (DNSServiceFlags flags, const char * name, const char * type, const char * domain, uint32_t interfaceId)
@@ -391,8 +395,7 @@ void BrowseContext::OnBrowseAdd(const char * name, const char * type, const char
391
395
392
396
VerifyOrReturn (IsLocalDomain (domain));
393
397
auto service = GetService (name, type, protocol, interfaceId);
394
- services.push_back (service);
395
- domainNames.push_back (std::make_pair (service, std::string (domain)));
398
+ services.push_back (std::make_pair (std::move (service), std::string (domain)));
396
399
}
397
400
398
401
void BrowseContext::OnBrowseRemove (const char * name, const char * type, const char * domain, uint32_t interfaceId)
@@ -403,17 +406,10 @@ void BrowseContext::OnBrowseRemove(const char * name, const char * type, const c
403
406
VerifyOrReturn (name != nullptr );
404
407
VerifyOrReturn (IsLocalDomain (domain));
405
408
406
- domainNames.erase (std::remove_if (domainNames.begin (), domainNames.end (),
407
- [name, type, interfaceId](const auto & domainName) {
408
- return strcmp (domainName.first .mName , name) == 0 && domainName.first .mType == type &&
409
- domainName.first .mInterface == chip::Inet::InterfaceId (interfaceId);
410
- }),
411
- domainNames.end ());
412
-
413
409
services.erase (std::remove_if (services.begin (), services.end (),
414
- [name, type, interfaceId](const DnssdService & service) {
415
- return strcmp (name, service.mName ) == 0 && type == GetFullType (&service) &&
416
- service.mInterface == chip::Inet::InterfaceId (interfaceId);
410
+ [name, type, interfaceId, domain ](const auto & service) {
411
+ return strcmp (name, service.first . mName ) == 0 && type == GetFullType (&service. first ) &&
412
+ service.first . mInterface == chip::Inet::InterfaceId (interfaceId) && strcmp (domain, service. second . c_str ()) == 0 ;
417
413
}),
418
414
services.end ());
419
415
}
0 commit comments