rudp status

This commit is contained in:
Matthew Biskas 2026-01-09 16:55:18 +01:00
parent 05d77da944
commit 22e805d215
3 changed files with 123 additions and 3 deletions

View File

@ -1,13 +1,33 @@
// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <atomic>
#include <cstring>
#include <mutex>
#include "common/logging/log.h"
#include "core/libraries/error_codes.h"
#include "core/libraries/libs.h"
#include "core/libraries/rudp/rudp.h"
#include "core/libraries/rudp/rudp_error.h"
namespace Libraries::Rudp {
static OrbisRudpStatus g_rudpStatusInternal = {0};
void* g_RudpContext = nullptr;
struct RudpInternalState {
std::atomic<s32> current_contexts{0};
std::atomic<s32> allocs{0};
std::atomic<s32> frees{0};
std::atomic<s32> mem_current{0};
std::atomic<s32> mem_peak{0};
};
static RudpInternalState g_state;
std::recursive_mutex g_RudpMutex;
bool g_isRudpInitialized = false;
s32 PS4_SYSV_ABI sceRudpAccept() {
LOG_ERROR(Lib_Rudp, "(STUBBED) called");
return ORBIS_OK;
@ -88,8 +108,33 @@ s32 PS4_SYSV_ABI sceRudpGetSizeWritable() {
return ORBIS_OK;
}
s32 PS4_SYSV_ABI sceRudpGetStatus() {
LOG_ERROR(Lib_Rudp, "(STUBBED) called");
s32 Rudp_GetActiveContexts() {
return g_state.current_contexts.load();
}
void Rudp_GetMemoryStats(s32* allocs, s32* frees, s32* memCurr, s32* memPeak) {
*allocs = g_state.allocs.load();
*frees = g_state.frees.load();
*memCurr = g_state.mem_current.load();
*memPeak = g_state.mem_peak.load();
}
s32 PS4_SYSV_ABI sceRudpGetStatus(OrbisRudpStatus* status, size_t statusSize) {
std::lock_guard lock(g_RudpMutex);
if (!g_isRudpInitialized) {
return ORBIS_RUDP_ERROR_UNINITIALIZED;
}
if (status == nullptr || (statusSize - 1) >= sizeof(OrbisRudpStatus)) {
return ORBIS_RUDP_ERROR_INVALID_ARGUMENT;
}
std::memcpy(status, &g_rudpStatusInternal, statusSize);
status->currentContexts = Rudp_GetActiveContexts();
Rudp_GetMemoryStats(&status->allocs, &status->frees, &status->memCurrent, &status->memPeak);
return ORBIS_OK;
}

View File

@ -4,12 +4,78 @@
#pragma once
#include "common/types.h"
#include <sys/types.h>
#include <cstddef>
namespace Core::Loader {
class SymbolsResolver;
}
namespace Libraries::Rudp {
struct OrbisRudpStatus {
s64 sentUdpBytes;
s64 rcvdUdpBytes;
s32 sentUdpPackets;
s32 rcvdUdpPackets;
s64 sentUserBytes;
s32 sentUserPackets;
s32 sentLatencyCriticalPackets;
s64 rcvdUserBytes;
s32 rcvdUserPackets;
s32 rcvdLatencyCriticalPackets;
s32 sentSynPackets;
s32 rcvdSynPackets;
s32 sentUsrPackets;
s32 rcvdUsrPackets;
s32 sentPrbPackets;
s32 rcvdPrbPackets;
s32 sentRstPackets;
s32 rcvdRstPackets;
s32 lostPackets;
s32 retransmittedPackets;
s32 reorderedPackets;
s32 currentContexts;
s64 sentQualityLevel1Bytes;
s64 rcvdQualityLevel1Bytes;
s32 sentQualityLevel1Packets;
s32 rcvdQualityLevel1Packets;
s64 sentQualityLevel2Bytes;
s64 rcvdQualityLevel2Bytes;
s32 sentQualityLevel2Packets;
s32 rcvdQualityLevel2Packets;
s64 sentQualityLevel3Bytes;
s64 rcvdQualityLevel3Bytes;
s32 sentQualityLevel3Packets;
s32 rcvdQualityLevel3Packets;
s64 sentQualityLevel4Bytes;
s64 rcvdQualityLevel4Bytes;
s32 sentQualityLevel4Packets;
s32 rcvdQualityLevel4Packets;
s32 allocs;
s32 frees;
s32 memCurrent;
s32 memPeak;
s32 establishedConnections;
s32 failedConnections;
s32 failedConnectionsReset;
s32 failedConnectionsRefused;
s32 failedConnectionsTimeout;
s32 failedConnectionsVersionMismatch;
s32 failedConnectionsTransportTypeMismatch;
s32 failedConnectionsQualityLevelMismatch;
};
s32 PS4_SYSV_ABI sceRudpAccept();
s32 PS4_SYSV_ABI sceRudpActivate();
@ -27,7 +93,7 @@ s32 PS4_SYSV_ABI sceRudpGetOption();
s32 PS4_SYSV_ABI sceRudpGetRemoteInfo();
s32 PS4_SYSV_ABI sceRudpGetSizeReadable();
s32 PS4_SYSV_ABI sceRudpGetSizeWritable();
s32 PS4_SYSV_ABI sceRudpGetStatus();
s32 PS4_SYSV_ABI sceRudpGetStatus(OrbisRudpStatus* status, size_t statusSize);
s32 PS4_SYSV_ABI sceRudpInit();
s32 PS4_SYSV_ABI sceRudpInitiate();
s32 PS4_SYSV_ABI sceRudpListen();

View File

@ -0,0 +1,9 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include "core/libraries/error_codes.h"
constexpr int ORBIS_RUDP_ERROR_UNINITIALIZED = 0x80770001;
constexpr int ORBIS_RUDP_ERROR_INVALID_ARGUMENT = 0x80770004;