mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-12-16 04:09:07 +00:00
Clans: polishing
- Removed usage of raw pointers with `new` - `clans_client::getClanTicket` now _actually_ uses the cached ticket if available. - Avoid setting `current_ticket` and instead hijack it if it's the Clans ticket - Refusing to get a ticket if emulator is not connected to RPCN Signed-off-by: zeph <zephyrzefa15@gmail.com>
This commit is contained in:
parent
19e9dcbbef
commit
e6e745fec6
@ -475,13 +475,12 @@ error_code sceNpClansGetMemberList(SceNpClansRequestHandle handle, SceNpClanId c
|
||||
std::memcpy(&host_paging, paging.get_ptr(), sizeof(SceNpClansPagingRequest));
|
||||
}
|
||||
|
||||
SceNpClansMemberEntry* host_memList_addr = new SceNpClansMemberEntry[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX];
|
||||
SceNpClansMemberEntry host_memList_addr[SCE_NP_CLANS_PAGING_REQUEST_PAGE_MAX] = {};
|
||||
SceNpClansPagingResult 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;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -491,7 +490,6 @@ error_code sceNpClansGetMemberList(SceNpClansRequestHandle handle, SceNpClanId c
|
||||
}
|
||||
std::memcpy(pageResult.get_ptr(), &host_pageResult, sizeof(SceNpClansPagingResult));
|
||||
|
||||
delete[] host_memList_addr;
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
#include "Emu/Cell/Modules/sceNp.h"
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <util/types.hpp>
|
||||
@ -286,6 +287,11 @@ namespace clan
|
||||
|
||||
std::string clans_client::getClanTicket(np::np_handler& nph)
|
||||
{
|
||||
// Pretend we failed to get a ticket if the emulator isn't
|
||||
// connected to RPCN.
|
||||
if (nph.get_psn_status() != SCE_NP_MANAGER_STATUS_ONLINE)
|
||||
return "";
|
||||
|
||||
const auto& npid = nph.get_npid();
|
||||
|
||||
const char* service_id = CLANS_SERVICE_ID;
|
||||
@ -294,13 +300,20 @@ namespace clan
|
||||
const char* entitlement_id = CLANS_ENTITLEMENT_ID;
|
||||
const u32 consumed_count = 0;
|
||||
|
||||
nph.req_ticket(0x00020001, &npid, service_id, cookie, cookie_size, entitlement_id, consumed_count);
|
||||
|
||||
// Use the cached ticket if available
|
||||
np::ticket ticket = nph.get_clan_ticket();
|
||||
if (ticket.empty())
|
||||
{
|
||||
clan_log.error("Failed to get clan ticket");
|
||||
return "";
|
||||
// If not cached, request a new ticket
|
||||
nph.req_ticket(0x00020001, &npid, service_id, cookie, cookie_size, entitlement_id, consumed_count);
|
||||
ticket = nph.get_clan_ticket();
|
||||
|
||||
// If still empty, return error
|
||||
if (ticket.empty())
|
||||
{
|
||||
clan_log.error("Failed to get clan ticket");
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<byte> ticket_bytes(1024);
|
||||
|
||||
@ -864,20 +864,22 @@ namespace np
|
||||
auto ticket_raw = reply.get_rawdata();
|
||||
ensure(!reply.is_error(), "Malformed reply to RequestTicket command");
|
||||
|
||||
current_ticket = ticket(std::move(ticket_raw));
|
||||
auto ticket_size = static_cast<s32>(current_ticket.size());
|
||||
|
||||
|
||||
// Clans: check if ticket belongs to the clan service. If so, store it.
|
||||
if (current_ticket.get_service_id() == CLANS_SERVICE_ID)
|
||||
auto incoming_ticket = ticket(std::move(ticket_raw));
|
||||
|
||||
// Clans: check if ticket belongs to the clan service.
|
||||
// If so, hijack the ticket and cache it for future use.
|
||||
if (incoming_ticket.get_service_id() == CLANS_SERVICE_ID)
|
||||
{
|
||||
clan_ticket = current_ticket;
|
||||
clan_ticket = incoming_ticket;
|
||||
clan_ticket_ready.store(true);
|
||||
clan_ticket_ready.notify_all();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
current_ticket = incoming_ticket;
|
||||
auto ticket_size = static_cast<s32>(current_ticket.size());
|
||||
|
||||
if (manager_cb)
|
||||
{
|
||||
sysutil_register_cb([manager_cb = this->manager_cb, ticket_size, manager_cb_arg = this->manager_cb_arg](ppu_thread& cb_ppu) -> s32
|
||||
|
||||
Loading…
Reference in New Issue
Block a user