added sceNetRecvfrom

This commit is contained in:
georgemoralis 2025-01-20 20:38:21 +02:00
parent 92d5999f7b
commit 4cf5c0dc8b
4 changed files with 29 additions and 2 deletions

View File

@ -946,8 +946,14 @@ int PS4_SYSV_ABI sceNetRecv() {
int PS4_SYSV_ABI sceNetRecvfrom(OrbisNetId s, void* buf, size_t len, int flags,
OrbisNetSockaddr* addr, u32* paddrlen) {
LOG_ERROR(Lib_Net, "(STUBBED) called");
return ORBIS_OK;
auto* netcall = Common::Singleton<NetInternal>::Instance();
auto sock = netcall->FindSocket(s);
if (!sock) {
net_errno = ORBIS_NET_EBADF;
LOG_ERROR(Lib_Net, "socket id is invalid = {}", s);
return ORBIS_NET_ERROR_EBADF;
}
return sock->ReceivePacket(buf, len, flags, addr, paddrlen);
}
int PS4_SYSV_ABI sceNetRecvmsg() {

View File

@ -24,6 +24,10 @@ int P2PSocket::SendPacket(const void* msg, u32 len, int flags, const OrbisNetSoc
return -1; // fake value makes peggle2 work
}
int P2PSocket::ReceivePacket(void* buf, u32 len, int flags, OrbisNetSockaddr* from, u32* fromlen) {
return -1; // fake it
}
SocketPtr P2PSocket::Accept(OrbisNetSockaddr* addr, u32* addrlen) {
return nullptr;
}

View File

@ -148,6 +148,19 @@ int PosixSocket::SendPacket(const void* msg, u32 len, int flags, const OrbisNetS
}
}
int PosixSocket::ReceivePacket(void* buf, u32 len, int flags, OrbisNetSockaddr* from,
u32* fromlen) {
if (from != nullptr) {
sockaddr addr;
int res = recvfrom(sock, (char*)buf, len, flags, &addr, (socklen_t*)fromlen);
convertPosixSockaddrToOrbis(&addr, from);
*fromlen = sizeof(OrbisNetSockaddrIn);
return ConvertReturnErrorCode(res);
} else {
return ConvertReturnErrorCode(recv(sock, (char*)buf, len, flags));
}
}
SocketPtr PosixSocket::Accept(OrbisNetSockaddr* addr, u32* addrlen) {
sockaddr addr2;
net_socket new_socket = ::accept(sock, &addr2, (socklen_t*)addrlen);

View File

@ -41,6 +41,8 @@ struct Socket {
virtual int SendPacket(const void* msg, u32 len, int flags, const OrbisNetSockaddr* to,
u32 tolen) = 0;
virtual SocketPtr Accept(OrbisNetSockaddr* addr, u32* addrlen) = 0;
virtual int ReceivePacket(void* buf, u32 len, int flags, OrbisNetSockaddr* from,
u32* fromlen) = 0;
};
struct PosixSocket : public Socket {
@ -55,6 +57,7 @@ struct PosixSocket : public Socket {
int Listen(int backlog) override;
int SendPacket(const void* msg, u32 len, int flags, const OrbisNetSockaddr* to,
u32 tolen) override;
int ReceivePacket(void* buf, u32 len, int flags, OrbisNetSockaddr* from, u32* fromlen) override;
SocketPtr Accept(OrbisNetSockaddr* addr, u32* addrlen) override;
};
@ -65,6 +68,7 @@ struct P2PSocket : public Socket {
int Listen(int backlog) override;
int SendPacket(const void* msg, u32 len, int flags, const OrbisNetSockaddr* to,
u32 tolen) override;
int ReceivePacket(void* buf, u32 len, int flags, OrbisNetSockaddr* from, u32* fromlen) override;
SocketPtr Accept(OrbisNetSockaddr* addr, u32* addrlen) override;
};