Skip to content

Commit 66920b4

Browse files
RipleyTomelad335
authored andcommitted
Improve sceNpSignalingGetLocalNetInfo
1 parent 038ee09 commit 66920b4

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

rpcs3/Emu/Cell/Modules/sceNp.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6962,7 +6962,7 @@ error_code sceNpSignalingGetConnectionFromPeerAddress(u32 ctx_id, np_in_addr_t p
69626962
return CELL_OK;
69636963
}
69646964

6965-
error_code sceNpSignalingGetLocalNetInfo(u32 ctx_id, vm::ptr<SceNpSignalingNetInfo> info)
6965+
error_code sceNpSignalingGetLocalNetInfo(u32 ctx_id, vm::ptr<SceNpSignalingNetInfoDeprecated> info)
69666966
{
69676967
sceNp.warning("sceNpSignalingGetLocalNetInfo(ctx_id=%d, info=*0x%x)", ctx_id, info);
69686968

@@ -6973,7 +6973,8 @@ error_code sceNpSignalingGetLocalNetInfo(u32 ctx_id, vm::ptr<SceNpSignalingNetIn
69736973
return SCE_NP_SIGNALING_ERROR_NOT_INITIALIZED;
69746974
}
69756975

6976-
if (!info || info->size != sizeof(SceNpSignalingNetInfo))
6976+
// Library has backward support for a version of SceNpSignalingNetInfo without npport
6977+
if (!info || (info->size != sizeof(SceNpSignalingNetInfo) && info->size != sizeof(SceNpSignalingNetInfoDeprecated)))
69776978
{
69786979
return SCE_NP_SIGNALING_ERROR_INVALID_ARGUMENT;
69796980
}
@@ -6985,7 +6986,12 @@ error_code sceNpSignalingGetLocalNetInfo(u32 ctx_id, vm::ptr<SceNpSignalingNetIn
69856986
info->nat_status = SCE_NP_SIGNALING_NETINFO_NAT_STATUS_TYPE2;
69866987
info->upnp_status = nph.get_upnp_status();
69876988
info->npport_status = SCE_NP_SIGNALING_NETINFO_NPPORT_STATUS_OPEN;
6988-
info->npport = SCE_NP_PORT;
6989+
6990+
if (info->size == sizeof(SceNpSignalingNetInfo))
6991+
{
6992+
auto new_info = vm::unsafe_ptr_cast<SceNpSignalingNetInfo>(info);
6993+
new_info->npport = SCE_NP_PORT;
6994+
}
69896995

69906996
return CELL_OK;
69916997
}

rpcs3/Emu/Cell/Modules/sceNp.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,6 +1584,16 @@ struct SceNpSignalingNetInfo
15841584
be_t<u16> npport;
15851585
};
15861586

1587+
struct SceNpSignalingNetInfoDeprecated
1588+
{
1589+
be_t<u32> size;
1590+
be_t<u32> local_addr; // in_addr
1591+
be_t<u32> mapped_addr; // in_addr
1592+
be_t<s32> nat_status;
1593+
be_t<s32> upnp_status;
1594+
be_t<s32> npport_status;
1595+
};
1596+
15871597
struct SceNpCustomMenuAction
15881598
{
15891599
be_t<u32> options;

rpcs3/Emu/NP/np_helpers.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ namespace np
2424

2525
std::string communication_id_to_string(const SceNpCommunicationId& communicationId)
2626
{
27-
const std::string com_id_data(communicationId.data, communicationId.data + 9);
27+
std::string_view com_id_data(communicationId.data, communicationId.data + 9);
2828
return fmt::format("%s_%02d", com_id_data, communicationId.num);
2929
}
3030

0 commit comments

Comments
 (0)