Skip to content

Commit

Permalink
[Tizen] Modify dnssd resolve operation process
Browse files Browse the repository at this point in the history
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
  • Loading branch information
hyunuktak committed Feb 4, 2025
1 parent 7565353 commit 2278840
Showing 1 changed file with 26 additions and 26 deletions.
52 changes: 26 additions & 26 deletions src/platform/Tizen/DnssdImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,12 +281,7 @@ gboolean OnResolveFinalize(gpointer userData)
ChipLogDetail(DeviceLayer, "DNSsd %s", __func__);
auto rCtx = reinterpret_cast<chip::Dnssd::ResolveContext *>(userData);

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

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

CHIP_ERROR ResolveAsync(chip::Dnssd::ResolveContext * rCtx)
{
CHIP_ERROR err = CHIP_NO_ERROR;
int ret;

assertChipStackLockedByCurrentThread();

ChipLogDetail(DeviceLayer, "DNSsd %s", __func__);

int ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx);
if (rCtx->mInterfaceId == 0)
{
ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, nullptr, &rCtx->mServiceHandle);
}
else
{
char iface[IF_NAMESIZE + 1] = "";
VerifyOrExit(if_indextoname(rCtx->mInterfaceId, iface) != nullptr,
ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno));
err = CHIP_ERROR_POSIX(errno));
ret = dnssd_create_remote_service(rCtx->mType, rCtx->mName, iface, &rCtx->mServiceHandle);
}

VerifyOrExit(ret == DNSSD_ERROR_NONE,
ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret));
err = TizenToChipError(ret));

ret = dnssd_resolve_service(rCtx->mServiceHandle, OnResolve, rCtx);
VerifyOrReturnValue(ret == DNSSD_ERROR_NONE, TizenToChipError(ret),
ChipLogError(DeviceLayer, "dnssd_resolve_service() failed: %s", get_error_message(ret)));

rCtx->mIsResolving = true;
return CHIP_NO_ERROR;
exit:
return err;
}

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

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

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

if (interfaceId == 0)
{
ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, nullptr, &resolveCtx->mServiceHandle);
}
else
{
char iface[IF_NAMESIZE + 1] = "";
VerifyOrExit(if_indextoname(interfaceId, iface) != nullptr,
ChipLogError(DeviceLayer, "if_indextoname() failed: %s", strerror(errno));
err = CHIP_ERROR_POSIX(errno));
ret = dnssd_create_remote_service(fullType.c_str(), browseResult.mName, iface, &resolveCtx->mServiceHandle);
}

VerifyOrExit(ret == DNSSD_ERROR_NONE,
ChipLogError(DeviceLayer, "dnssd_create_remote_service() failed: %s", get_error_message(ret));
err = TizenToChipError(ret));

err = DeviceLayer::PlatformMgrImpl().GLibMatterContextInvokeSync(ResolveAsync, resolveCtx);
SuccessOrExit(err);

Expand Down

0 comments on commit 2278840

Please sign in to comment.