Skip to content

Commit 051d0f8

Browse files
committed
[Tizen] Modify dnssd resolve operation process
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
1 parent f25f635 commit 051d0f8

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

src/platform/Tizen/DnssdImpl.cpp

+26-26
Original file line numberDiff line numberDiff line change
@@ -281,12 +281,7 @@ gboolean OnResolveFinalize(gpointer userData)
281281
ChipLogDetail(DeviceLayer, "DNSsd %s", __func__);
282282
auto rCtx = reinterpret_cast<chip::Dnssd::ResolveContext *>(userData);
283283

284-
{
285-
// Lock the stack mutex when calling the callback function, so that the callback
286-
// function could safely perform message exchange (e.g. PASE session pairing).
287-
chip::DeviceLayer::StackLock lock;
288-
rCtx->Finalize(CHIP_NO_ERROR);
289-
}
284+
rCtx->Finalize(CHIP_NO_ERROR);
290285

291286
rCtx->mInstance->RemoveContext(rCtx);
292287
return G_SOURCE_REMOVE;
@@ -377,14 +372,37 @@ void OnResolve(dnssd_error_e result, dnssd_service_h service, void * userData)
377372

378373
CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx)
379374
{
375+
CHIP_ERROR err = CHIP_NO_ERROR;
376+
int ret;
377+
378+
assertChipStackLockedByCurrentThread();
379+
380380
ChipLogDetail(DeviceLayer, "DNSsd %s", __func__);
381381

382-
int ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx);
382+
if (rCtx->mInterfaceId == 0)
383+
{
384+
ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, nullptr, &rCtx->mServiceHandle);
385+
}
386+
else
387+
{
388+
char iface[IF_NAMESIZE + 1] = "";
389+
VerifyOrExit(if_indextoname(rCtx->mInterfaceId, iface) != nullptr,
390+
ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno));
391+
err = CHIP_ERROR_POSIX(errno));
392+
ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, iface, &rCtx->mServiceHandle);
393+
}
394+
395+
VerifyOrExit(ret == DNSSD_ERROR_NONE,
396+
ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret));
397+
err = TizenToChipError(ret));
398+
399+
ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx);
383400
VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, TizenToChipError(ret),
384401
ChipLogError(DeviceLayer, "dnssd_resolve_service() failed: %s", get_error_message(ret)));
385402

386403
rCtx->mIsResolving = true;
387-
return CHIP_NO_ERROR;
404+
exit:
405+
return err;
388406
}
389407

390408
} // namespace
@@ -628,30 +646,12 @@ CHIP_ERROR DnssdTizen::Resolve(const DnssdService & browseResult, chip::Inet::In
628646
std::string fullType = GetFullType(browseResult.mType, browseResult.mProtocol);
629647
auto interfaceId = interface.GetPlatformInterface();
630648
CHIP_ERROR err = CHIP_NO_ERROR;
631-
int ret;
632649

633650
ChipLogDetail(DeviceLayer, "DNSsd %s: name: %s, type: %s, interfaceId: %u", __func__, browseResult.mName, fullType.c_str(),
634651
interfaceId);
635652

636653
auto resolveCtx = CreateResolveContext(browseResult.mName, fullType.c_str(), interfaceId, callback, context);
637654

638-
if (interfaceId == 0)
639-
{
640-
ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, nullptr, &resolveCtx->mServiceHandle);
641-
}
642-
else
643-
{
644-
char iface[IF_NAMESIZE + 1] = "";
645-
VerifyOrExit(if_indextoname(interfaceId, iface) != nullptr,
646-
ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno));
647-
err = CHIP_ERROR_POSIX(errno));
648-
ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, iface, &resolveCtx->mServiceHandle);
649-
}
650-
651-
VerifyOrExit(ret == DNSSD_ERROR_NONE,
652-
ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret));
653-
err = TizenToChipError(ret));
654-
655655
err = DeviceLayer::PlatformMgrImpl().GLibMatterContextInvokeSync(ResolveAsync, resolveCtx);
656656
SuccessOrExit(err);
657657

0 commit comments

Comments
 (0)