signaling_handler: bugfix and cleanup

This commit is contained in:
RipleyTom
2026-02-20 14:48:03 +01:00
committed by Elad
parent ff992a67c8
commit a29758de6e
7 changed files with 20 additions and 12 deletions
+2 -2
View File
@@ -377,7 +377,7 @@ namespace np
if (!rooms.contains(room_id)) if (!rooms.contains(room_id))
{ {
np_cache.error("np_cache::get_memberid cache miss room_id: room_id(%d)/npid(%s)", room_id, static_cast<const char*>(npid.handle.data)); np_cache.error("np_cache::get_memberid cache miss room_id: room_id(%d)/npid(%s)", room_id, np::npid_to_string(npid));
return std::nullopt; return std::nullopt;
} }
@@ -389,7 +389,7 @@ namespace np
return id; return id;
} }
np_cache.error("np_cache::get_memberid cache miss member_id: room_id(%d)/npid(%s)", room_id, static_cast<const char*>(npid.handle.data)); np_cache.error("np_cache::get_memberid cache miss member_id: room_id(%d)/npid(%s)", room_id, np::npid_to_string(npid));
return std::nullopt; return std::nullopt;
} }
+2 -2
View File
@@ -1361,7 +1361,7 @@ namespace np
player_history& np_handler::get_player_and_set_timestamp(const SceNpId& npid, u64 timestamp) player_history& np_handler::get_player_and_set_timestamp(const SceNpId& npid, u64 timestamp)
{ {
std::string npid_str = std::string(npid.handle.data); std::string npid_str = np::npid_to_string(npid);
if (!players_history.contains(npid_str)) if (!players_history.contains(npid_str))
{ {
@@ -1641,7 +1641,7 @@ namespace np
return SCE_NP_BASIC_ERROR_NOT_CONNECTED; return SCE_NP_BASIC_ERROR_NOT_CONNECTED;
} }
auto friend_infos = rpcn->get_friend_presence_by_npid(std::string(npid.handle.data)); auto friend_infos = rpcn->get_friend_presence_by_npid(np::npid_to_string(npid));
if (!friend_infos) if (!friend_infos)
{ {
return SCE_NP_BASIC_ERROR_INVALID_ARGUMENT; return SCE_NP_BASIC_ERROR_INVALID_ARGUMENT;
+7
View File
@@ -89,6 +89,13 @@ namespace np
// npid->reserved[0] = 1; // npid->reserved[0] = 1;
} }
std::string npid_to_string(const SceNpId& npid)
{
char npid_str[17]{};
std::memcpy(npid_str, npid.handle.data, 16);
return std::string(npid_str);
}
void string_to_online_name(std::string_view str, SceNpOnlineName& online_name) void string_to_online_name(std::string_view str, SceNpOnlineName& online_name)
{ {
memset(&online_name, 0, sizeof(online_name)); memset(&online_name, 0, sizeof(online_name));
+1
View File
@@ -13,6 +13,7 @@ namespace np
std::optional<SceNpCommunicationId> string_to_communication_id(std::string_view str); std::optional<SceNpCommunicationId> string_to_communication_id(std::string_view str);
void string_to_npid(std::string_view str, SceNpId& npid); void string_to_npid(std::string_view str, SceNpId& npid);
std::string npid_to_string(const SceNpId& npid);
void string_to_online_name(std::string_view str, SceNpOnlineName& online_name); void string_to_online_name(std::string_view str, SceNpOnlineName& online_name);
void string_to_avatar_url(std::string_view str, SceNpAvatarUrl& avatar_url); void string_to_avatar_url(std::string_view str, SceNpAvatarUrl& avatar_url);
void strings_to_userinfo(std::string_view npid, std::string_view online_name, std::string_view avatar_url, SceNpUserInfo& user_info); void strings_to_userinfo(std::string_view npid, std::string_view online_name, std::string_view avatar_url, SceNpUserInfo& user_info);
+1 -1
View File
@@ -54,7 +54,7 @@ namespace np
const u16 member_id = notif_data->roomMemberDataInternal->memberId; const u16 member_id = notif_data->roomMemberDataInternal->memberId;
const SceNpId& npid = notif_data->roomMemberDataInternal->userInfo.npId; const SceNpId& npid = notif_data->roomMemberDataInternal->userInfo.npId;
rpcn_log.notice("Join notification told to connect to member(%d=%s) of room(%d): %s:%d", member_id, reinterpret_cast<const char*>(npid.handle.data), room_id, ip_to_string(addr_p2p), port_p2p); rpcn_log.notice("Join notification told to connect to member(%d=%s) of room(%d): %s:%d", member_id, np::npid_to_string(npid), room_id, ip_to_string(addr_p2p), port_p2p);
// Attempt Signaling // Attempt Signaling
auto& sigh = g_fxo->get<named_thread<signaling_handler>>(); auto& sigh = g_fxo->get<named_thread<signaling_handler>>();
+1 -1
View File
@@ -2318,7 +2318,7 @@ namespace rpcn
{ {
np2_structs::GetScoreGameDataRequest pb_req; np2_structs::GetScoreGameDataRequest pb_req;
pb_req.set_boardid(board_id); pb_req.set_boardid(board_id);
pb_req.set_npid(reinterpret_cast<const char*>(npid.handle.data)); pb_req.set_npid(np::npid_to_string(npid));
pb_req.set_pcid(pc_id); pb_req.set_pcid(pc_id);
std::string serialized; std::string serialized;
+6 -6
View File
@@ -426,9 +426,10 @@ void signaling_handler::operator()()
if (sig.sig_info->time_last_msg_recvd < now - 60s && cmd != signal_info) if (sig.sig_info->time_last_msg_recvd < now - 60s && cmd != signal_info)
{ {
// We had no connection to opponent for 60 seconds, consider the connection dead // We had no connection to opponent for 60 seconds, consider the connection dead
auto retire_info = sig.sig_info;
sign_log.notice("Timeout disconnection"); sign_log.notice("Timeout disconnection");
update_si_status(sig.sig_info, SCE_NP_SIGNALING_CONN_STATUS_INACTIVE, SCE_NP_SIGNALING_ERROR_TIMEOUT); update_si_status(retire_info, SCE_NP_SIGNALING_CONN_STATUS_INACTIVE, SCE_NP_SIGNALING_ERROR_TIMEOUT);
retire_packet(sig.sig_info, signal_ping); // Retire ping packet if necessary retire_packet(retire_info, signal_ping); // Retire ping packet if necessary
break; // qpackets has been emptied of all packets for this user so we're requeuing break; // qpackets has been emptied of all packets for this user so we're requeuing
} }
@@ -784,7 +785,7 @@ void signaling_handler::send_information_packets(u32 addr, u16 port, const SceNp
u32 signaling_handler::get_always_conn_id(const SceNpId& npid) u32 signaling_handler::get_always_conn_id(const SceNpId& npid)
{ {
std::string npid_str(reinterpret_cast<const char*>(npid.handle.data)); std::string npid_str = np::npid_to_string(npid);
if (npid_to_conn_id.contains(npid_str)) if (npid_to_conn_id.contains(npid_str))
return ::at32(npid_to_conn_id, npid_str); return ::at32(npid_to_conn_id, npid_str);
@@ -810,9 +811,8 @@ u32 signaling_handler::init_sig1(const SceNpId& npid)
sig_peers[conn_id]->conn_status = SCE_NP_SIGNALING_CONN_STATUS_PENDING; sig_peers[conn_id]->conn_status = SCE_NP_SIGNALING_CONN_STATUS_PENDING;
// Request peer infos from RPCN // Request peer infos from RPCN
std::string npid_str(reinterpret_cast<const char*>(npid.handle.data));
auto& nph = g_fxo->get<named_thread<np::np_handler>>(); auto& nph = g_fxo->get<named_thread<np::np_handler>>();
nph.req_sign_infos(npid_str, conn_id); nph.req_sign_infos(np::npid_to_string(npid), conn_id);
} }
return conn_id; return conn_id;
@@ -839,7 +839,7 @@ std::optional<u32> signaling_handler::get_conn_id_from_npid(const SceNpId& npid)
{ {
std::lock_guard lock(data_mutex); std::lock_guard lock(data_mutex);
std::string npid_str(reinterpret_cast<const char*>(npid.handle.data)); std::string npid_str = np::npid_to_string(npid);
if (npid_to_conn_id.contains(npid_str)) if (npid_to_conn_id.contains(npid_str))
return ::at32(npid_to_conn_id, npid_str); return ::at32(npid_to_conn_id, npid_str);