From cf373334a43903b54752282a05e01c2809fbb4ca Mon Sep 17 00:00:00 2001 From: zeph Date: Wed, 10 Dec 2025 18:36:24 +0100 Subject: [PATCH] Clans: clean-up - Switched from `vm::ptr` to `handle` downcasted to a u32 for immutability - Using a single `atomic_t` instead of a mutex combination for ticket requesting Signed-off-by: zeph --- rpcs3/Emu/Cell/Modules/sceNpClans.cpp | 171 +++++++++----------------- rpcs3/Emu/Cell/Modules/sceNpClans.h | 3 +- rpcs3/Emu/NP/clans_client.cpp | 51 ++++---- rpcs3/Emu/NP/clans_client.h | 50 ++++---- rpcs3/Emu/NP/np_handler.cpp | 10 +- rpcs3/Emu/NP/np_handler.h | 4 +- rpcs3/Emu/NP/np_requests.cpp | 6 +- 7 files changed, 123 insertions(+), 172 deletions(-) diff --git a/rpcs3/Emu/Cell/Modules/sceNpClans.cpp b/rpcs3/Emu/Cell/Modules/sceNpClans.cpp index 1d0d6e84a4..69204af8d6 100644 --- a/rpcs3/Emu/Cell/Modules/sceNpClans.cpp +++ b/rpcs3/Emu/Cell/Modules/sceNpClans.cpp @@ -151,7 +151,7 @@ error_code sceNpClansCreateRequest(vm::ptr handle, u64 return CELL_OK; } -error_code sceNpClansDestroyRequest(vm::ptr handle) +error_code sceNpClansDestroyRequest(SceNpClansRequestHandle handle) { if (!g_fxo->get().is_initialized) { @@ -160,9 +160,7 @@ error_code sceNpClansDestroyRequest(vm::ptr handle) auto& clans_manager = g_fxo->get(); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError res = clans_manager.client->destroyRequest(reqId); + SceNpClansError res = clans_manager.client->destroyRequest(handle); if (res != SCE_NP_CLANS_SUCCESS) { return res; @@ -171,7 +169,7 @@ error_code sceNpClansDestroyRequest(vm::ptr handle) return CELL_OK; } -error_code sceNpClansAbortRequest(vm::ptr handle) +error_code sceNpClansAbortRequest(SceNpClansRequestHandle handle) { if (!g_fxo->get().is_initialized) { @@ -179,16 +177,13 @@ error_code sceNpClansAbortRequest(vm::ptr handle) } auto& clans_manager = g_fxo->get(); - - s32 reqId = static_cast(handle.addr()); - - clans_manager.client->destroyRequest(reqId); + clans_manager.client->destroyRequest(handle); return CELL_OK; } // TODO: requires NpCommerce2 -error_code sceNpClansCreateClan(vm::ptr handle, vm::cptr name, vm::cptr tag, vm::ptr clanId) +error_code sceNpClansCreateClan(SceNpClansRequestHandle handle, vm::cptr name, vm::cptr tag, vm::ptr clanId) { sceNpClans.todo("sceNpClansCreateClan(handle=*0x%x, name=%s, tag=%s, clanId=*0x%x)", handle, name, tag, clanId); @@ -212,7 +207,7 @@ error_code sceNpClansCreateClan(vm::ptr handle, vm::cpt // TODO: should probably not be implemented on RPCS3 until `CreateClan` is, // to not let people disband a clan by accident -error_code sceNpClansDisbandClan(vm::ptr handle, SceNpClanId clanId) +error_code sceNpClansDisbandClan(SceNpClansRequestHandle handle, SceNpClanId clanId) { sceNpClans.todo("sceNpClansDisbandClan(handle=*0x%x, clanId=*0x%x)", handle, clanId); @@ -227,7 +222,7 @@ error_code sceNpClansDisbandClan(vm::ptr handle, SceNpC // return CELL_OK; } -error_code sceNpClansGetClanList(vm::ptr handle, vm::cptr paging, vm::ptr clanList, vm::ptr pageResult) +error_code sceNpClansGetClanList(SceNpClansRequestHandle handle, vm::cptr paging, vm::ptr clanList, vm::ptr pageResult) { if (!g_fxo->get().is_initialized) { @@ -264,9 +259,7 @@ error_code sceNpClansGetClanList(vm::ptr handle, vm::cp SceNpClansEntry host_clanList[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX] = {}; SceNpClansPagingResult host_pageResult = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->getClanList(nph, reqId, &host_paging, host_clanList, &host_pageResult); + SceNpClansError ret = clans_manager.client->getClanList(nph, handle, &host_paging, host_clanList, &host_pageResult); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -282,7 +275,7 @@ error_code sceNpClansGetClanList(vm::ptr handle, vm::cp } // TODO: seems to not be needed, even by the PS3..? -error_code sceNpClansGetClanListByNpId(vm::ptr handle, vm::cptr paging, vm::cptr npid, vm::ptr clanList, vm::ptr pageResult) +error_code sceNpClansGetClanListByNpId(SceNpClansRequestHandle handle, vm::cptr paging, vm::cptr npid, vm::ptr clanList, vm::ptr pageResult) { sceNpClans.todo("sceNpClansGetClanListByNpId(handle=*0x%x, paging=*0x%x, npid=*0x%x, clanList=*0x%x, pageResult=*0x%x)", handle, paging, npid, clanList, pageResult); @@ -308,7 +301,7 @@ error_code sceNpClansGetClanListByNpId(vm::ptr handle, } // TODO: seems to not be needed, even by the PS3..? -error_code sceNpClansSearchByProfile(vm::ptr handle, vm::cptr paging, vm::cptr search, vm::ptr results, vm::ptr pageResult) +error_code sceNpClansSearchByProfile(SceNpClansRequestHandle handle, vm::cptr paging, vm::cptr search, vm::ptr results, vm::ptr pageResult) { sceNpClans.todo("sceNpClansSearchByProfile(handle=*0x%x, paging=*0x%x, search=*0x%x, results=*0x%x, pageResult=*0x%x)", handle, paging, search, results, pageResult); @@ -333,7 +326,7 @@ error_code sceNpClansSearchByProfile(vm::ptr handle, vm return CELL_OK; } -error_code sceNpClansSearchByName(vm::ptr handle, vm::cptr paging, vm::cptr search, vm::ptr results, vm::ptr pageResult) +error_code sceNpClansSearchByName(SceNpClansRequestHandle handle, vm::cptr paging, vm::cptr search, vm::ptr results, vm::ptr pageResult) { if (!g_fxo->get().is_initialized) { @@ -372,9 +365,7 @@ error_code sceNpClansSearchByName(vm::ptr handle, vm::c SceNpClansClanBasicInfo host_results[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX] = {}; SceNpClansPagingResult host_pageResult = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->clanSearch(reqId, &host_paging, &host_search, host_results, &host_pageResult); + SceNpClansError ret = clans_manager.client->clanSearch(handle, &host_paging, &host_search, host_results, &host_pageResult); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -389,7 +380,7 @@ error_code sceNpClansSearchByName(vm::ptr handle, vm::c return CELL_OK; } -error_code sceNpClansGetClanInfo(vm::ptr handle, SceNpClanId clanId, vm::ptr info) +error_code sceNpClansGetClanInfo(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::ptr info) { if (!g_fxo->get().is_initialized) { @@ -406,9 +397,7 @@ error_code sceNpClansGetClanInfo(vm::ptr handle, SceNpC SceNpClansClanInfo host_info = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->getClanInfo(reqId, clanId, &host_info); + SceNpClansError ret = clans_manager.client->getClanInfo(handle, clanId, &host_info); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -419,7 +408,7 @@ error_code sceNpClansGetClanInfo(vm::ptr handle, SceNpC return CELL_OK; } -error_code sceNpClansUpdateClanInfo(vm::ptr handle, SceNpClanId clanId, vm::cptr info) +error_code sceNpClansUpdateClanInfo(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr info) { if (!g_fxo->get().is_initialized) { @@ -438,9 +427,7 @@ error_code sceNpClansUpdateClanInfo(vm::ptr handle, Sce SceNpClansUpdatableClanInfo host_info = {}; std::memcpy(&host_info, info.get_ptr(), sizeof(SceNpClansUpdatableClanInfo)); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->updateClanInfo(nph, reqId, clanId, &host_info); + SceNpClansError ret = clans_manager.client->updateClanInfo(nph, handle, clanId, &host_info); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -449,7 +436,7 @@ error_code sceNpClansUpdateClanInfo(vm::ptr handle, Sce return CELL_OK; } -error_code sceNpClansGetMemberList(vm::ptr handle, SceNpClanId clanId, vm::cptr paging, SceNpClansMemberStatus status, vm::ptr memList, vm::ptr pageResult) +error_code sceNpClansGetMemberList(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr paging, SceNpClansMemberStatus status, vm::ptr memList, vm::ptr pageResult) { if (!g_fxo->get().is_initialized) { @@ -486,9 +473,7 @@ error_code sceNpClansGetMemberList(vm::ptr handle, SceN SceNpClansMemberEntry* host_memList_addr = new SceNpClansMemberEntry[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX]; SceNpClansPagingResult host_pageResult = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->getMemberList(nph, reqId, clanId, &host_paging, status, host_memList_addr, &host_pageResult); + SceNpClansError ret = clans_manager.client->getMemberList(nph, handle, clanId, &host_paging, status, host_memList_addr, &host_pageResult); if (ret != SCE_NP_CLANS_SUCCESS) { delete[] host_memList_addr; @@ -505,7 +490,7 @@ error_code sceNpClansGetMemberList(vm::ptr handle, SceN return CELL_OK; } -error_code sceNpClansGetMemberInfo(vm::ptr handle, SceNpClanId clanId, vm::cptr npid, vm::ptr memInfo) +error_code sceNpClansGetMemberInfo(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr npid, vm::ptr memInfo) { if (!g_fxo->get().is_initialized) { @@ -525,9 +510,7 @@ error_code sceNpClansGetMemberInfo(vm::ptr handle, SceN SceNpClansMemberEntry host_memInfo = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->getMemberInfo(nph, reqId, clanId, host_npid, &host_memInfo); + SceNpClansError ret = clans_manager.client->getMemberInfo(nph, handle, clanId, host_npid, &host_memInfo); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -538,7 +521,7 @@ error_code sceNpClansGetMemberInfo(vm::ptr handle, SceN return CELL_OK; } -error_code sceNpClansUpdateMemberInfo(vm::ptr handle, SceNpClanId clanId, vm::cptr info) +error_code sceNpClansUpdateMemberInfo(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr info) { if (!g_fxo->get().is_initialized) { @@ -556,9 +539,7 @@ error_code sceNpClansUpdateMemberInfo(vm::ptr handle, S SceNpClansUpdatableMemberInfo host_info = {}; std::memcpy(&host_info, info.get_ptr(), sizeof(SceNpClansUpdatableMemberInfo)); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->updateMemberInfo(nph, reqId, clanId, &host_info); + SceNpClansError ret = clans_manager.client->updateMemberInfo(nph, handle, clanId, &host_info); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -567,7 +548,7 @@ error_code sceNpClansUpdateMemberInfo(vm::ptr handle, S return CELL_OK; } -error_code sceNpClansChangeMemberRole(vm::ptr handle, SceNpClanId clanId, vm::cptr npid, u32 role) +error_code sceNpClansChangeMemberRole(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr npid, u32 role) { if (!g_fxo->get().is_initialized) { @@ -585,9 +566,7 @@ error_code sceNpClansChangeMemberRole(vm::ptr handle, S SceNpId host_npid = {}; std::memcpy(&host_npid, npid.get_ptr(), sizeof(SceNpId)); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->changeMemberRole(nph, reqId, clanId, host_npid, static_cast(role)); + SceNpClansError ret = clans_manager.client->changeMemberRole(nph, handle, clanId, host_npid, static_cast(role)); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -597,7 +576,7 @@ error_code sceNpClansChangeMemberRole(vm::ptr handle, S } // TODO: no struct currently implements `autoAccept` as a field -error_code sceNpClansGetAutoAcceptStatus(vm::ptr handle, SceNpClanId clanId, vm::ptr enable) +error_code sceNpClansGetAutoAcceptStatus(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::ptr enable) { sceNpClans.todo("sceNpClansGetAutoAcceptStatus(handle=*0x%x, clanId=%d, enable=*0x%x)", handle, clanId, enable); @@ -615,7 +594,7 @@ error_code sceNpClansGetAutoAcceptStatus(vm::ptr handle } // TODO: no struct currently implements `autoAccept` as a field -error_code sceNpClansUpdateAutoAcceptStatus(vm::ptr handle, SceNpClanId clanId, b8 enable) +error_code sceNpClansUpdateAutoAcceptStatus(SceNpClansRequestHandle handle, SceNpClanId clanId, b8 enable) { sceNpClans.todo("sceNpClansUpdateAutoAcceptStatus(handle=*0x%x, clanId=%d, enable=%d)", handle, clanId, enable); @@ -627,7 +606,7 @@ error_code sceNpClansUpdateAutoAcceptStatus(vm::ptr han return CELL_OK; } -error_code sceNpClansJoinClan(vm::ptr handle, SceNpClanId clanId) +error_code sceNpClansJoinClan(SceNpClansRequestHandle handle, SceNpClanId clanId) { if (!g_fxo->get().is_initialized) { @@ -637,9 +616,7 @@ error_code sceNpClansJoinClan(vm::ptr handle, SceNpClan auto& nph = g_fxo->get>(); auto& clans_manager = g_fxo->get(); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->joinClan(nph, reqId, clanId); + SceNpClansError ret = clans_manager.client->joinClan(nph, handle, clanId); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -648,7 +625,7 @@ error_code sceNpClansJoinClan(vm::ptr handle, SceNpClan return CELL_OK; } -error_code sceNpClansLeaveClan(vm::ptr handle, SceNpClanId clanId) +error_code sceNpClansLeaveClan(SceNpClansRequestHandle handle, SceNpClanId clanId) { if (!g_fxo->get().is_initialized) { @@ -658,9 +635,7 @@ error_code sceNpClansLeaveClan(vm::ptr handle, SceNpCla auto& nph = g_fxo->get>(); auto& clans_manager = g_fxo->get(); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->leaveClan(nph, reqId, clanId); + SceNpClansError ret = clans_manager.client->leaveClan(nph, handle, clanId); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -669,7 +644,7 @@ error_code sceNpClansLeaveClan(vm::ptr handle, SceNpCla return CELL_OK; } -error_code sceNpClansKickMember(vm::ptr handle, SceNpClanId clanId, vm::cptr npid, vm::cptr message) +error_code sceNpClansKickMember(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr npid, vm::cptr message) { if (!g_fxo->get().is_initialized) { @@ -701,9 +676,7 @@ error_code sceNpClansKickMember(vm::ptr handle, SceNpCl std::memcpy(&host_message, message.get_ptr(), sizeof(SceNpClansMessage)); } - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->kickMember(nph, reqId, clanId, host_npid, &host_message); + SceNpClansError ret = clans_manager.client->kickMember(nph, handle, clanId, host_npid, &host_message); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -712,7 +685,7 @@ error_code sceNpClansKickMember(vm::ptr handle, SceNpCl return CELL_OK; } -error_code sceNpClansSendInvitation(vm::ptr handle, SceNpClanId clanId, vm::cptr npid, vm::cptr message) +error_code sceNpClansSendInvitation(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr npid, vm::cptr message) { if (!g_fxo->get().is_initialized) { @@ -744,9 +717,7 @@ error_code sceNpClansSendInvitation(vm::ptr handle, Sce std::memcpy(&host_message, message.get_ptr(), sizeof(SceNpClansMessage)); } - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->sendInvitation(nph, reqId, clanId, host_npid, &host_message); + SceNpClansError ret = clans_manager.client->sendInvitation(nph, handle, clanId, host_npid, &host_message); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -755,7 +726,7 @@ error_code sceNpClansSendInvitation(vm::ptr handle, Sce return CELL_OK; } -error_code sceNpClansCancelInvitation(vm::ptr handle, SceNpClanId clanId, vm::cptr npid) +error_code sceNpClansCancelInvitation(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr npid) { if (!g_fxo->get().is_initialized) { @@ -773,9 +744,7 @@ error_code sceNpClansCancelInvitation(vm::ptr handle, S SceNpId host_npid = {}; std::memcpy(&host_npid, npid.get_ptr(), sizeof(SceNpId)); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->cancelInvitation(nph, reqId, clanId, host_npid); + SceNpClansError ret = clans_manager.client->cancelInvitation(nph, handle, clanId, host_npid); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -784,7 +753,7 @@ error_code sceNpClansCancelInvitation(vm::ptr handle, S return CELL_OK; } -error_code sceNpClansSendInvitationResponse(vm::ptr handle, SceNpClanId clanId, vm::cptr message, b8 accept) +error_code sceNpClansSendInvitationResponse(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr message, b8 accept) { if (!g_fxo->get().is_initialized) { @@ -813,9 +782,7 @@ error_code sceNpClansSendInvitationResponse(vm::ptr han std::memcpy(&host_message, message.get_ptr(), sizeof(SceNpClansMessage)); } - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->sendInvitationResponse(nph, reqId, clanId, &host_message, accept); + SceNpClansError ret = clans_manager.client->sendInvitationResponse(nph, handle, clanId, &host_message, accept); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -824,7 +791,7 @@ error_code sceNpClansSendInvitationResponse(vm::ptr han return CELL_OK; } -error_code sceNpClansSendMembershipRequest(vm::ptr handle, u32 clanId, vm::cptr message) +error_code sceNpClansSendMembershipRequest(SceNpClansRequestHandle handle, u32 clanId, vm::cptr message) { if (!g_fxo->get().is_initialized) { @@ -848,9 +815,7 @@ error_code sceNpClansSendMembershipRequest(vm::ptr hand std::memcpy(&host_message, message.get_ptr(), sizeof(SceNpClansMessage)); } - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->requestMembership(nph, reqId, clanId, &host_message); + SceNpClansError ret = clans_manager.client->requestMembership(nph, handle, clanId, &host_message); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -859,7 +824,7 @@ error_code sceNpClansSendMembershipRequest(vm::ptr hand return CELL_OK; } -error_code sceNpClansCancelMembershipRequest(vm::ptr handle, SceNpClanId clanId) +error_code sceNpClansCancelMembershipRequest(SceNpClansRequestHandle handle, SceNpClanId clanId) { if (!g_fxo->get().is_initialized) { @@ -869,9 +834,7 @@ error_code sceNpClansCancelMembershipRequest(vm::ptr ha auto& nph = g_fxo->get>(); auto& clans_manager = g_fxo->get(); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->cancelRequestMembership(nph, reqId, clanId); + SceNpClansError ret = clans_manager.client->cancelRequestMembership(nph, handle, clanId); if (ret != SCE_NP_CLANS_SUCCESS) { @@ -881,7 +844,7 @@ error_code sceNpClansCancelMembershipRequest(vm::ptr ha return CELL_OK; } -error_code sceNpClansSendMembershipResponse(vm::ptr handle, SceNpClanId clanId, vm::cptr npid, vm::cptr message, b8 allow) +error_code sceNpClansSendMembershipResponse(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr npid, vm::cptr message, b8 allow) { if (!g_fxo->get().is_initialized) { @@ -913,9 +876,7 @@ error_code sceNpClansSendMembershipResponse(vm::ptr han std::memcpy(&host_message, message.get_ptr(), sizeof(SceNpClansMessage)); } - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->sendMembershipResponse(nph, reqId, clanId, host_npid, &host_message, allow); + SceNpClansError ret = clans_manager.client->sendMembershipResponse(nph, handle, clanId, host_npid, &host_message, allow); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -924,7 +885,7 @@ error_code sceNpClansSendMembershipResponse(vm::ptr han return CELL_OK; } -error_code sceNpClansGetBlacklist(vm::ptr handle, SceNpClanId clanId, vm::cptr paging, vm::ptr bl, vm::ptr pageResult) +error_code sceNpClansGetBlacklist(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr paging, vm::ptr bl, vm::ptr pageResult) { if (!g_fxo->get().is_initialized) { @@ -961,9 +922,7 @@ error_code sceNpClansGetBlacklist(vm::ptr handle, SceNp SceNpClansBlacklistEntry host_blacklist[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX] = {}; SceNpClansPagingResult host_pageResult = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->getBlacklist(nph, reqId, clanId, &host_paging, host_blacklist, &host_pageResult); + SceNpClansError ret = clans_manager.client->getBlacklist(nph, handle, clanId, &host_paging, host_blacklist, &host_pageResult); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -978,7 +937,7 @@ error_code sceNpClansGetBlacklist(vm::ptr handle, SceNp return CELL_OK; } -error_code sceNpClansAddBlacklistEntry(vm::ptr handle, SceNpClanId clanId, vm::cptr member) +error_code sceNpClansAddBlacklistEntry(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr member) { if (!g_fxo->get().is_initialized) { @@ -996,9 +955,7 @@ error_code sceNpClansAddBlacklistEntry(vm::ptr handle, SceNpId host_member = {}; std::memcpy(&host_member, member.get_ptr(), sizeof(SceNpId)); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->addBlacklistEntry(nph, reqId, clanId, host_member); + SceNpClansError ret = clans_manager.client->addBlacklistEntry(nph, handle, clanId, host_member); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -1007,7 +964,7 @@ error_code sceNpClansAddBlacklistEntry(vm::ptr handle, return CELL_OK; } -error_code sceNpClansRemoveBlacklistEntry(vm::ptr handle, SceNpClanId clanId, vm::cptr member) +error_code sceNpClansRemoveBlacklistEntry(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr member) { if (!g_fxo->get().is_initialized) { @@ -1025,9 +982,7 @@ error_code sceNpClansRemoveBlacklistEntry(vm::ptr handl SceNpId host_member = {}; std::memcpy(&host_member, member.get_ptr(), sizeof(SceNpId)); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->removeBlacklistEntry(nph, reqId, clanId, host_member); + SceNpClansError ret = clans_manager.client->removeBlacklistEntry(nph, handle, clanId, host_member); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -1036,7 +991,7 @@ error_code sceNpClansRemoveBlacklistEntry(vm::ptr handl return CELL_OK; } -error_code sceNpClansRetrieveAnnouncements(vm::ptr handle, SceNpClanId clanId, vm::cptr paging, vm::ptr mlist, vm::ptr pageResult) +error_code sceNpClansRetrieveAnnouncements(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr paging, vm::ptr mlist, vm::ptr pageResult) { if (!g_fxo->get().is_initialized) { @@ -1073,9 +1028,7 @@ error_code sceNpClansRetrieveAnnouncements(vm::ptr hand SceNpClansMessageEntry host_announcements[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX] = {}; SceNpClansPagingResult host_pageResult = {}; - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->retrieveAnnouncements(nph, reqId, clanId, &host_paging, host_announcements, &host_pageResult); + SceNpClansError ret = clans_manager.client->retrieveAnnouncements(nph, handle, clanId, &host_paging, host_announcements, &host_pageResult); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -1090,7 +1043,7 @@ error_code sceNpClansRetrieveAnnouncements(vm::ptr hand return CELL_OK; } -error_code sceNpClansPostAnnouncement(vm::ptr handle, SceNpClanId clanId, vm::cptr message, vm::cptr data, u32 duration, vm::ptr mId) +error_code sceNpClansPostAnnouncement(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr message, vm::cptr data, u32 duration, vm::ptr mId) { if (!g_fxo->get().is_initialized) { @@ -1119,10 +1072,8 @@ error_code sceNpClansPostAnnouncement(vm::ptr handle, S std::memcpy(&host_data, data.get_ptr(), sizeof(SceNpClansMessageData)); } - s32 reqId = static_cast(handle.addr()); - SceNpClansMessageId host_announcementId = 0; - SceNpClansError ret = clans_manager.client->postAnnouncement(nph, reqId, clanId, &host_announcement, &host_data, duration, &host_announcementId); + SceNpClansError ret = clans_manager.client->postAnnouncement(nph, handle, clanId, &host_announcement, &host_data, duration, &host_announcementId); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -1133,7 +1084,7 @@ error_code sceNpClansPostAnnouncement(vm::ptr handle, S return CELL_OK; } -error_code sceNpClansRemoveAnnouncement(vm::ptr handle, SceNpClanId clanId, SceNpClansMessageId mId) +error_code sceNpClansRemoveAnnouncement(SceNpClansRequestHandle handle, SceNpClanId clanId, SceNpClansMessageId mId) { if (!g_fxo->get().is_initialized) { @@ -1143,9 +1094,7 @@ error_code sceNpClansRemoveAnnouncement(vm::ptr handle, auto& clans_manager = g_fxo->get(); auto& nph = g_fxo->get>(); - s32 reqId = static_cast(handle.addr()); - - SceNpClansError ret = clans_manager.client->deleteAnnouncement(nph, reqId, clanId, mId); + SceNpClansError ret = clans_manager.client->deleteAnnouncement(nph, handle, clanId, mId); if (ret != SCE_NP_CLANS_SUCCESS) { return ret; @@ -1154,7 +1103,7 @@ error_code sceNpClansRemoveAnnouncement(vm::ptr handle, return CELL_OK; } -error_code sceNpClansPostChallenge(vm::ptr handle, SceNpClanId clanId, SceNpClanId targetClan, vm::cptr message, vm::cptr data, u32 duration, vm::ptr mId) +error_code sceNpClansPostChallenge(SceNpClansRequestHandle handle, SceNpClanId clanId, SceNpClanId targetClan, vm::cptr message, vm::cptr data, u32 duration, vm::ptr mId) { sceNpClans.todo("sceNpClansPostChallenge(handle=*0x%x, clanId=%d, targetClan=%d, message=*0x%x, data=*0x%x, duration=%d, mId=*0x%x)", handle, clanId, targetClan, message, data, duration, mId); @@ -1181,7 +1130,7 @@ error_code sceNpClansPostChallenge(vm::ptr handle, SceN return CELL_OK; } -error_code sceNpClansRetrievePostedChallenges(vm::ptr handle, SceNpClanId clanId, SceNpClanId targetClan, vm::cptr paging, vm::ptr mList, vm::ptr pageResult) +error_code sceNpClansRetrievePostedChallenges(SceNpClansRequestHandle handle, SceNpClanId clanId, SceNpClanId targetClan, vm::cptr paging, vm::ptr mList, vm::ptr pageResult) { sceNpClans.todo("sceNpClansRetrievePostedChallenges(handle=*0x%x, clanId=%d, targetClan=%d, paging=*0x%x, mList=*0x%x, pageResult=*0x%x)", handle, clanId, targetClan, paging, mList, pageResult); @@ -1206,7 +1155,7 @@ error_code sceNpClansRetrievePostedChallenges(vm::ptr h return CELL_OK; } -error_code sceNpClansRemovePostedChallenge(vm::ptr handle, SceNpClanId clanId, SceNpClanId targetClan, SceNpClansMessageId mId) +error_code sceNpClansRemovePostedChallenge(SceNpClansRequestHandle handle, SceNpClanId clanId, SceNpClanId targetClan, SceNpClansMessageId mId) { sceNpClans.todo("sceNpClansRemovePostedChallenge(handle=*0x%x, clanId=%d, targetClan=%d, mId=%d)", handle, clanId, targetClan, mId); @@ -1218,7 +1167,7 @@ error_code sceNpClansRemovePostedChallenge(vm::ptr hand return CELL_OK; } -error_code sceNpClansRetrieveChallenges(vm::ptr handle, SceNpClanId clanId, vm::cptr paging, vm::ptr mList, vm::ptr pageResult) +error_code sceNpClansRetrieveChallenges(SceNpClansRequestHandle handle, SceNpClanId clanId, vm::cptr paging, vm::ptr mList, vm::ptr pageResult) { sceNpClans.todo("sceNpClansRetrieveChallenges(handle=*0x%x, clanId=%d, paging=*0x%x, mList=*0x%x, pageResult=*0x%x)", handle, clanId, paging, mList, pageResult); diff --git a/rpcs3/Emu/Cell/Modules/sceNpClans.h b/rpcs3/Emu/Cell/Modules/sceNpClans.h index 6e4585ed43..9b31c87d25 100644 --- a/rpcs3/Emu/Cell/Modules/sceNpClans.h +++ b/rpcs3/Emu/Cell/Modules/sceNpClans.h @@ -140,8 +140,7 @@ enum }; // Request handle for clan API -struct SceNpClansRequest {}; -using SceNpClansRequestHandle = vm::ptr; +using SceNpClansRequestHandle = u32; // Paging request structure struct SceNpClansPagingRequest diff --git a/rpcs3/Emu/NP/clans_client.cpp b/rpcs3/Emu/NP/clans_client.cpp index 09fc012a04..f416142d22 100644 --- a/rpcs3/Emu/NP/clans_client.cpp +++ b/rpcs3/Emu/NP/clans_client.cpp @@ -202,7 +202,7 @@ namespace clan return SceNpClansError::SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::destroyRequest(s32 reqId) + SceNpClansError clans_client::destroyRequest(u32 reqId) { if (idm::remove(reqId)) return SceNpClansError::SCE_NP_CLANS_SUCCESS; @@ -210,7 +210,7 @@ namespace clan return SceNpClansError::SCE_NP_CLANS_ERROR_INVALID_ARGUMENT; } - SceNpClansError clans_client::sendRequest(s32 reqId, ClanRequestAction action, ClanManagerOperationType opType, pugi::xml_document* xmlBody, pugi::xml_document* outResponse) + SceNpClansError clans_client::sendRequest(u32 reqId, ClanRequestAction action, ClanManagerOperationType opType, pugi::xml_document* xmlBody, pugi::xml_document* outResponse) { auto ctx = idm::get_unlocked(reqId); @@ -296,7 +296,6 @@ namespace clan nph.req_ticket(0x00020001, &npid, service_id, cookie, cookie_size, entitlement_id, consumed_count); np::ticket ticket = nph.get_clan_ticket(); - if (ticket.empty()) { clan_log.error("Failed to get clan ticket"); @@ -313,7 +312,7 @@ namespace clan } #pragma region Outgoing API Requests - SceNpClansError clans_client::getClanList(np::np_handler& nph, s32 reqId, SceNpClansPagingRequest* paging, SceNpClansEntry* clanList, SceNpClansPagingResult* pageResult) + SceNpClansError clans_client::getClanList(np::np_handler& nph, u32 reqId, SceNpClansPagingRequest* paging, SceNpClansEntry* clanList, SceNpClansPagingResult* pageResult) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -390,7 +389,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::getClanInfo(s32 reqId, SceNpClanId clanId, SceNpClansClanInfo* clanInfo) + SceNpClansError clans_client::getClanInfo(u32 reqId, SceNpClanId clanId, SceNpClansClanInfo* clanInfo) { pugi::xml_document doc = pugi::xml_document(); pugi::xml_node clan = doc.append_child("clan"); @@ -429,7 +428,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::getMemberInfo(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberEntry* memInfo) + SceNpClansError clans_client::getMemberInfo(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberEntry* memInfo) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -499,7 +498,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::getMemberList(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMemberStatus /*status*/, SceNpClansMemberEntry* memList, SceNpClansPagingResult* pageResult) + SceNpClansError clans_client::getMemberList(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMemberStatus /*status*/, SceNpClansMemberEntry* memList, SceNpClansPagingResult* pageResult) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -577,7 +576,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::getBlacklist(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansBlacklistEntry* bl, SceNpClansPagingResult* pageResult) + SceNpClansError clans_client::getBlacklist(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansBlacklistEntry* bl, SceNpClansPagingResult* pageResult) { std::string ticket = getClanTicket(nph); @@ -641,7 +640,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::addBlacklistEntry(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId) + SceNpClansError clans_client::addBlacklistEntry(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -659,7 +658,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::RecordBlacklistEntry, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::removeBlacklistEntry(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId) + SceNpClansError clans_client::removeBlacklistEntry(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -677,7 +676,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::DeleteBlacklistEntry, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::clanSearch(s32 reqId, SceNpClansPagingRequest* paging, SceNpClansSearchableName* search, SceNpClansClanBasicInfo* clanList, SceNpClansPagingResult* pageResult) + SceNpClansError clans_client::clanSearch(u32 reqId, SceNpClansPagingRequest* paging, SceNpClansSearchableName* search, SceNpClansClanBasicInfo* clanList, SceNpClansPagingResult* pageResult) { pugi::xml_document doc = pugi::xml_document(); pugi::xml_node clan = doc.append_child("clan"); @@ -739,7 +738,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::requestMembership(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessage* /*message*/) + SceNpClansError clans_client::requestMembership(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessage* /*message*/) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -754,7 +753,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::RequestMembership, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::cancelRequestMembership(np::np_handler& nph, s32 reqId, SceNpClanId clanId) + SceNpClansError clans_client::cancelRequestMembership(np::np_handler& nph, u32 reqId, SceNpClanId clanId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -769,7 +768,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::CancelRequestMembership, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::sendMembershipResponse(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* /*message*/, b8 allow) + SceNpClansError clans_client::sendMembershipResponse(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* /*message*/, b8 allow) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -787,7 +786,7 @@ namespace clan return sendRequest(reqId, allow ? ClanRequestAction::AcceptMembershipRequest : ClanRequestAction::DeclineMembershipRequest, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::sendInvitation(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* /*message*/) + SceNpClansError clans_client::sendInvitation(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* /*message*/) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -805,7 +804,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::SendInvitation, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::cancelInvitation(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId) + SceNpClansError clans_client::cancelInvitation(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -823,7 +822,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::CancelInvitation, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::sendInvitationResponse(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessage* /*message*/, b8 accept) + SceNpClansError clans_client::sendInvitationResponse(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessage* /*message*/, b8 accept) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -838,7 +837,7 @@ namespace clan return sendRequest(reqId, accept ? ClanRequestAction::AcceptInvitation : ClanRequestAction::DeclineInvitation, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::updateMemberInfo(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansUpdatableMemberInfo* info) + SceNpClansError clans_client::updateMemberInfo(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansUpdatableMemberInfo* info) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -877,7 +876,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::UpdateMemberInfo, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::updateClanInfo(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansUpdatableClanInfo* info) + SceNpClansError clans_client::updateClanInfo(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansUpdatableClanInfo* info) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -897,7 +896,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::UpdateClanInfo, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::joinClan(np::np_handler& nph, s32 reqId, SceNpClanId clanId) + SceNpClansError clans_client::joinClan(np::np_handler& nph, u32 reqId, SceNpClanId clanId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -912,7 +911,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::JoinClan, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::leaveClan(np::np_handler& nph, s32 reqId, SceNpClanId clanId) + SceNpClansError clans_client::leaveClan(np::np_handler& nph, u32 reqId, SceNpClanId clanId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -927,7 +926,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::LeaveClan, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::kickMember(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* /*message*/) + SceNpClansError clans_client::kickMember(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* /*message*/) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -945,7 +944,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::KickMember, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::changeMemberRole(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberRole role) + SceNpClansError clans_client::changeMemberRole(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberRole role) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -966,7 +965,7 @@ namespace clan return sendRequest(reqId, ClanRequestAction::ChangeMemberRole, ClanManagerOperationType::UPDATE, &doc, &response); } - SceNpClansError clans_client::retrieveAnnouncements(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMessageEntry* announcements, SceNpClansPagingResult* pageResult) + SceNpClansError clans_client::retrieveAnnouncements(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMessageEntry* announcements, SceNpClansPagingResult* pageResult) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -1049,7 +1048,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::postAnnouncement(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessage* announcement, SceNpClansMessageData* /*data*/, u32 duration, SceNpClansMessageId* msgId) + SceNpClansError clans_client::postAnnouncement(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessage* announcement, SceNpClansMessageData* /*data*/, u32 duration, SceNpClansMessageId* msgId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) @@ -1082,7 +1081,7 @@ namespace clan return SCE_NP_CLANS_SUCCESS; } - SceNpClansError clans_client::deleteAnnouncement(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessageId announcementId) + SceNpClansError clans_client::deleteAnnouncement(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessageId announcementId) { std::string ticket = getClanTicket(nph); if (ticket.empty()) diff --git a/rpcs3/Emu/NP/clans_client.h b/rpcs3/Emu/NP/clans_client.h index 776ec17365..15238c4caf 100644 --- a/rpcs3/Emu/NP/clans_client.h +++ b/rpcs3/Emu/NP/clans_client.h @@ -70,7 +70,7 @@ namespace clan static size_t curlWriteCallback(void* data, size_t size, size_t nmemb, void* clientp); - SceNpClansError sendRequest(s32 reqId, ClanRequestAction action, ClanManagerOperationType type, pugi::xml_document* xmlBody, pugi::xml_document* outResponse); + SceNpClansError sendRequest(u32 reqId, ClanRequestAction action, ClanManagerOperationType type, pugi::xml_document* xmlBody, pugi::xml_document* outResponse); /// @brief Forge and get a V2.1 Ticket for clan operations std::string getClanTicket(np::np_handler& nph); @@ -80,40 +80,40 @@ namespace clan ~clans_client(); SceNpClansError createRequest(s32* reqId); - SceNpClansError destroyRequest(s32 reqId); + SceNpClansError destroyRequest(u32 reqId); - SceNpClansError clanSearch(s32 reqId, SceNpClansPagingRequest* paging, SceNpClansSearchableName* search, SceNpClansClanBasicInfo* clanList, SceNpClansPagingResult* pageResult); + SceNpClansError clanSearch(u32 reqId, SceNpClansPagingRequest* paging, SceNpClansSearchableName* search, SceNpClansClanBasicInfo* clanList, SceNpClansPagingResult* pageResult); - SceNpClansError getClanList(np::np_handler& nph, s32 reqId, SceNpClansPagingRequest* paging, SceNpClansEntry* clanList, SceNpClansPagingResult* pageResult); - SceNpClansError getClanInfo(s32 reqId, SceNpClanId clanId, SceNpClansClanInfo* clanInfo); + SceNpClansError getClanList(np::np_handler& nph, u32 reqId, SceNpClansPagingRequest* paging, SceNpClansEntry* clanList, SceNpClansPagingResult* pageResult); + SceNpClansError getClanInfo(u32 reqId, SceNpClanId clanId, SceNpClansClanInfo* clanInfo); - SceNpClansError getMemberInfo(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberEntry* memInfo); - SceNpClansError getMemberList(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMemberStatus status, SceNpClansMemberEntry* memList, SceNpClansPagingResult* pageResult); + SceNpClansError getMemberInfo(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberEntry* memInfo); + SceNpClansError getMemberList(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMemberStatus status, SceNpClansMemberEntry* memList, SceNpClansPagingResult* pageResult); - SceNpClansError getBlacklist(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansBlacklistEntry* bl, SceNpClansPagingResult* pageResult); - SceNpClansError addBlacklistEntry(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId); - SceNpClansError removeBlacklistEntry(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId); + SceNpClansError getBlacklist(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansBlacklistEntry* bl, SceNpClansPagingResult* pageResult); + SceNpClansError addBlacklistEntry(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId); + SceNpClansError removeBlacklistEntry(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId); - SceNpClansError requestMembership(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessage* message); - SceNpClansError cancelRequestMembership(np::np_handler& nph, s32 reqId, SceNpClanId clanId); - SceNpClansError sendMembershipResponse(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* message, b8 allow); + SceNpClansError requestMembership(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessage* message); + SceNpClansError cancelRequestMembership(np::np_handler& nph, u32 reqId, SceNpClanId clanId); + SceNpClansError sendMembershipResponse(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* message, b8 allow); - SceNpClansError sendInvitation(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* message); - SceNpClansError cancelInvitation(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId); - SceNpClansError sendInvitationResponse(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessage* message, b8 accept); + SceNpClansError sendInvitation(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* message); + SceNpClansError cancelInvitation(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId); + SceNpClansError sendInvitationResponse(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessage* message, b8 accept); - SceNpClansError joinClan(np::np_handler& nph, s32 reqId, SceNpClanId clanId); - SceNpClansError leaveClan(np::np_handler& nph, s32 reqId, SceNpClanId clanId); + SceNpClansError joinClan(np::np_handler& nph, u32 reqId, SceNpClanId clanId); + SceNpClansError leaveClan(np::np_handler& nph, u32 reqId, SceNpClanId clanId); - SceNpClansError updateMemberInfo(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansUpdatableMemberInfo* info); - SceNpClansError updateClanInfo(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansUpdatableClanInfo* info); + SceNpClansError updateMemberInfo(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansUpdatableMemberInfo* info); + SceNpClansError updateClanInfo(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansUpdatableClanInfo* info); - SceNpClansError kickMember(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* message); - SceNpClansError changeMemberRole(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberRole role); + SceNpClansError kickMember(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMessage* message); + SceNpClansError changeMemberRole(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpId npId, SceNpClansMemberRole role); - SceNpClansError retrieveAnnouncements(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMessageEntry* announcements, SceNpClansPagingResult* pageResult); - SceNpClansError postAnnouncement(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessage* announcement, SceNpClansMessageData* data, u32 duration, SceNpClansMessageId* announcementId); - SceNpClansError deleteAnnouncement(np::np_handler& nph, s32 reqId, SceNpClanId clanId, SceNpClansMessageId announcementId); + SceNpClansError retrieveAnnouncements(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansPagingRequest* paging, SceNpClansMessageEntry* announcements, SceNpClansPagingResult* pageResult); + SceNpClansError postAnnouncement(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessage* announcement, SceNpClansMessageData* data, u32 duration, SceNpClansMessageId* announcementId); + SceNpClansError deleteAnnouncement(np::np_handler& nph, u32 reqId, SceNpClanId clanId, SceNpClansMessageId announcementId); }; } // namespace clan diff --git a/rpcs3/Emu/NP/np_handler.cpp b/rpcs3/Emu/NP/np_handler.cpp index 099f5c5b93..4aa24a954d 100644 --- a/rpcs3/Emu/NP/np_handler.cpp +++ b/rpcs3/Emu/NP/np_handler.cpp @@ -1366,8 +1366,14 @@ namespace np ticket np_handler::get_clan_ticket() { - std::unique_lock lock(mutex_clan_ticket); - cv_clan_ticket.wait(lock, [this] { return clan_ticket_ready.load(); }); + clan_ticket_ready.wait(false, atomic_wait_timeout{60'000'000'000}); // 60 seconds + + if (!clan_ticket_ready.load()) + { + rpcn_log.error("Failed to get clan ticket within timeout."); + return ticket{}; + } + return clan_ticket; } diff --git a/rpcs3/Emu/NP/np_handler.h b/rpcs3/Emu/NP/np_handler.h index 5b8e841961..d2113688ce 100644 --- a/rpcs3/Emu/NP/np_handler.h +++ b/rpcs3/Emu/NP/np_handler.h @@ -419,9 +419,7 @@ namespace np ticket current_ticket; // Clan ticket - std::mutex mutex_clan_ticket; - std::condition_variable_any cv_clan_ticket; - atomic_t clan_ticket_ready = false; + atomic_t clan_ticket_ready = 0; ticket clan_ticket; // IP & DNS info diff --git a/rpcs3/Emu/NP/np_requests.cpp b/rpcs3/Emu/NP/np_requests.cpp index a52d807de5..ce66c23b30 100644 --- a/rpcs3/Emu/NP/np_requests.cpp +++ b/rpcs3/Emu/NP/np_requests.cpp @@ -871,10 +871,10 @@ namespace np // Clans: check if ticket belongs to the clan service. If so, store it. if (current_ticket.get_service_id() == CLANS_SERVICE_ID) { - std::lock_guard lock(mutex_clan_ticket); clan_ticket = current_ticket; - clan_ticket_ready = true; - cv_clan_ticket.notify_all(); + clan_ticket_ready.store(true); + clan_ticket_ready.notify_all(); + return; }