Merge pull request #21116 from Kethen/aemu_postoffice_integrate_v2

Support adhoc relay from aemu to ppsspp
This commit is contained in:
Henrik Rydgård authored and GitHub committed 2026-01-20 15:10:07 +01:00
commit b01001a2e0
17 files changed
+1044 -130

No files matched your search

+4
View File
@@ -65,3 +65,7 @@
[submodule "ext/nanosvg"]
path = ext/nanosvg
url = https://github.com/hrydgard/nanosvg.git
[submodule "ext/aemu_postoffice"]
path = ext/aemu_postoffice
url = https://github.com/Kethen/aemu_postoffice.git
branch = ppsspp
+22
View File
@@ -2082,6 +2082,27 @@ set(GPU_SOURCES
GPU/Software/TransformUnit.h
)
set(aemu_postoffice
ext/aemu_postoffice/client/postoffice.c
ext/aemu_postoffice/client/mutex_impl_cpp.cpp
ext/aemu_postoffice/client/delay_impl_cpp.cpp
ext/aemu_postoffice/client/log_impl_ppsspp.cpp
)
if(WIN32)
set(aemu_postoffice
${aemu_postoffice}
ext/aemu_postoffice/client/sock_impl_windows.c
)
endif()
if(LINUX OR ANDROID OR MACOSX OR IOS)
set(aemu_postoffice
${aemu_postoffice}
ext/aemu_postoffice/client/sock_impl_linux.c
)
endif()
# 'ppsspp_jni' on ANDROID, 'Core' everywhere else
# SHARED on ANDROID, STATIC everywhere else
add_library(${CoreLibName} ${CoreLinkType}
@@ -2327,6 +2348,7 @@ add_library(${CoreLibName} ${CoreLinkType}
Core/HLE/NetAdhocCommon.h
Core/HLE/sceNetAdhoc.cpp
Core/HLE/sceNetAdhoc.h
${aemu_postoffice}
Core/HLE/sceNetAdhocMatching.cpp
Core/HLE/sceNetAdhocMatching.h
Core/HLE/sceNetInet.cpp
+1
View File
@@ -1012,6 +1012,7 @@ static const ConfigSetting networkSettings[] = {
ConfigSetting("EnableWlan", SETTING(g_Config, bEnableWlan), false, CfgFlag::PER_GAME),
ConfigSetting("EnableAdhocServer", SETTING(g_Config, bEnableAdhocServer), false, CfgFlag::PER_GAME),
ConfigSetting("proAdhocServer", SETTING(g_Config, sProAdhocServer), "socom.cc", CfgFlag::PER_GAME),
ConfigSetting("ServerHasRelay", SETTING(g_Config, bServerHasRelay), true, CfgFlag::PER_GAME),
ConfigSetting("proAdhocServerList", SETTING(g_Config, proAdhocServerList), &defaultProAdhocServerList, CfgFlag::DEFAULT),
ConfigSetting("PortOffset", SETTING(g_Config, iPortOffset), 10000, CfgFlag::PER_GAME),
ConfigSetting("PrimaryDNSServer", SETTING(g_Config, sInfrastructureDNSServer), "67.222.156.250", CfgFlag::PER_GAME),
+1
View File
@@ -539,6 +539,7 @@ public:
// Networking
bool bEnableAdhocServer;
std::string sProAdhocServer;
bool bServerHasRelay;
std::vector<std::string> proAdhocServerList;
std::string sInfrastructureDNSServer;
std::string sInfrastructureUsername; // Username used for Infrastructure play. Different restrictions.
+6 -1
View File
@@ -640,6 +640,11 @@
<ClCompile Include="HLE\sceNet_lib.cpp" />
<ClCompile Include="HLE\NetAdhocCommon.cpp" />
<ClCompile Include="HLE\sceNetAdhoc.cpp" />
<ClCompile Include="..\ext\aemu_postoffice\client\postoffice.c" />
<ClCompile Include="..\ext\aemu_postoffice\client\delay_impl_cpp.cpp" />
<ClCompile Include="..\ext\aemu_postoffice\client\sock_impl_windows.c" />
<ClCompile Include="..\ext\aemu_postoffice\client\mutex_impl_cpp.cpp" />
<ClCompile Include="..\ext\aemu_postoffice\client\log_impl_ppsspp.cpp" />
<ClCompile Include="HLE\sceNetAdhocMatching.cpp" />
<ClCompile Include="HLE\sceNp.cpp" />
<ClCompile Include="HLE\sceOpenPSID.cpp" />
@@ -1352,4 +1357,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
+16 -1
View File
@@ -529,6 +529,21 @@
<ClCompile Include="HLE\sceNetAdhoc.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="..\ext\aemu_postoffice\client\postoffice.c">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="..\ext\aemu_postoffice\client\delay_impl_cpp.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="..\ext\aemu_postoffice\client\sock_impl_windows.c">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="..\ext\aemu_postoffice\client\mutex_impl_cpp.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="..\ext\aemu_postoffice\client\log_impl_ppsspp.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
<ClCompile Include="HLE\sceNetAdhocMatching.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
@@ -2290,4 +2305,4 @@
<Filter>Ext</Filter>
</Text>
</ItemGroup>
</Project>
</Project>
+34 -9
View File
@@ -57,6 +57,8 @@
#include "Core/HLE/NetAdhocCommon.h"
#include "ext/aemu_postoffice/client/postoffice_client.h"
#ifdef _WIN32
#undef errno
#define errno WSAGetLastError()
@@ -89,6 +91,7 @@ int adhocConnectionType = ADHOC_CONNECT;
int gameModeSocket = (int)INVALID_SOCKET; // UDP/PDP socket? on Master only?
int gameModeBuffSize = 0;
u8* gameModeBuffer = nullptr;
extern bool serverHasRelay;
GameModeArea masterGameModeArea;
std::vector<GameModeArea> replicaGameModeAreas;
std::vector<SceNetEtherAddr> requiredGameModeMacs;
@@ -418,17 +421,39 @@ void deleteAllAdhocSockets() {
// Active Socket
if (adhocSockets[i] != NULL) {
auto sock = adhocSockets[i];
int fd = -1;
if (sock->type == SOCK_PTP)
fd = sock->data.ptp.id;
else if (sock->type == SOCK_PDP)
fd = sock->data.pdp.id;
if (serverHasRelay) {
if (sock->type == SOCK_PTP) {
// sync
if (sock->connectThread != NULL) {
sock->connectThread->join();
delete sock->connectThread;
}
void *socket = sock->postofficeHandle;
if (socket != NULL) {
if (sock->data.ptp.state == ADHOC_PTP_STATE_LISTEN) {
ptp_listen_close(socket);
} else {
ptp_close(socket);
}
}
} else {
if (sock->postofficeHandle != NULL) {
pdp_delete(sock->postofficeHandle);
}
}
} else {
int fd = -1;
if (sock->type == SOCK_PTP)
fd = sock->data.ptp.id;
else if (sock->type == SOCK_PDP)
fd = sock->data.pdp.id;
if (fd > 0) {
// Close Socket
shutdown(fd, SD_RECEIVE);
closesocket(fd);
if (fd > 0) {
// Close Socket
shutdown(fd, SD_RECEIVE);
closesocket(fd);
}
}
// Free Memory
free(adhocSockets[i]);
+4
View File
@@ -328,6 +328,10 @@ typedef struct AdhocSocket {
SceNetAdhocPdpStat pdp;
SceNetAdhocPtpStat ptp;
} data;
void *postofficeHandle; // aemu_postoffice mode handle
std::thread *connectThread;
bool connectThreadDone;
int connectThreadResult;
} PACK AdhocSocket;
// Gamemode Optional Peer Buffer Data
+1
View File
@@ -78,6 +78,7 @@ int sceKernelGetThreadExitStatus(SceUID threadID);
u32 sceKernelGetThreadmanIdType(u32);
u32 sceKernelGetThreadmanIdList(u32 type, u32 readBufPtr, u32 readBufSize, u32 idCountPtr);
u32 sceKernelExtendThreadStack(u32 size, u32 entryAddr, u32 entryParameter);
void __KernelScheduleWakeup(SceUID threadID, s64 usFromNow);
struct SceKernelSysClock {
u32_le lo;
+913 -117
View File
File diff suppressed because it is too large. Load diff
+1
View File
@@ -42,6 +42,7 @@ struct AdhocSendTarget {
u32 ip;
u16 port; // original port
u16 portOffset; // port offset specific for this target IP
SceNetEtherAddr mac;
};
struct AdhocSendTargets {
+3
View File
@@ -1036,6 +1036,9 @@ void GameSettingsScreen::CreateNetworkingSettings(UI::ViewGroup *networkingSetti
screenManager()->push(new HostnameSelectScreen(&g_Config.sProAdhocServer, &g_Config.proAdhocServerList, n->T("proAdhocServer Address:")));
});
networkingSettings->Add(new SettingHint(n->T("Change proAdhocServer address hint")));
networkingSettings->Add(new CheckBox(&g_Config.bServerHasRelay, n->T("PRO Adhoc packet relay available", "PRO Adhoc packet relay available")))->SetEnabled(!PSP_IsInited());
networkingSettings->Add(new SettingHint(n->T("Available when PRO Adhoc server provides aemu_postoffice packet relay, such as socom.cc.")));
networkingSettings->Add(new SettingHint(n->T("Disable this if playing on LAN/VPN, see wiki for how you can setup your own packet relay.")));
networkingSettings->Add(new ItemHeader(n->T("UPnP (port-forwarding)")));
networkingSettings->Add(new CheckBox(&g_Config.bEnableUPnP, n->T("Enable UPnP", "Enable UPnP (need a few seconds to detect)")));
auto useOriPort = networkingSettings->Add(new CheckBox(&g_Config.bUPnPUseOriginalPort, n->T("UPnP use original port", "UPnP use original port (Enabled = PSP compatibility)")));
+10 -1
View File
@@ -486,6 +486,15 @@
<ClCompile Include="..\..\Core\HLE\sceNet_lib.cpp" />
<ClCompile Include="..\..\Core\HLE\NetAdhocCommon.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNetAdhoc.cpp" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\postoffice.c">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\ext\aemu_postoffice\client\delay_impl_cpp.cpp" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\sock_impl_windows.c">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\..\ext\aemu_postoffice\client\mutex_impl_cpp.cpp" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\log_impl_ppsspp.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNetAdhocMatching.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNp.cpp" />
<ClCompile Include="..\..\Core\HLE\sceOpenPSID.cpp" />
@@ -1036,4 +1045,4 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
</Project>
+6 -1
View File
@@ -129,6 +129,11 @@
<ClCompile Include="..\..\Core\HLE\sceNet_lib.cpp" />
<ClCompile Include="..\..\Core\HLE\NetAdhocCommon.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNetAdhoc.cpp" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\postoffice.c" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\delay_impl_cpp.cpp" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\sock_impl_windows.c" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\mutex_impl_cpp.cpp" />
<ClCompile Include="..\..\ext\aemu_postoffice\client\log_impl_ppsspp.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNetAdhocMatching.cpp" />
<ClCompile Include="..\..\Core\HLE\sceNp.cpp" />
<ClCompile Include="..\..\Core\HLE\sceOpenPSID.cpp" />
@@ -689,4 +694,4 @@
<ItemGroup>
<None Include="..\..\ext\gason\LICENSE" />
</ItemGroup>
</Project>
</Project>
+5
View File
@@ -714,6 +714,11 @@ EXEC_AND_LIB_FILES := \
$(SRC)/Core/HLE/proAdhocServer.cpp \
$(SRC)/Core/HLE/NetAdhocCommon.cpp \
$(SRC)/Core/HLE/sceNetAdhoc.cpp \
$(SRC)/ext/aemu_postoffice/client/postoffice.c \
$(SRC)/ext/aemu_postoffice/client/sock_impl_linux.c \
$(SRC)/ext/aemu_postoffice/client/mutex_impl_cpp.cpp \
$(SRC)/ext/aemu_postoffice/client/delay_impl_cpp.cpp \
$(SRC)/ext/aemu_postoffice/client/log_impl_ppsspp.cpp \
$(SRC)/Core/HLE/sceNetAdhocMatching.cpp \
$(SRC)/Core/HLE/sceNetApctl.cpp \
$(SRC)/Core/HLE/sceNetInet.cpp \
Submodule ext/aemu_postoffice added at 098039af82.
+16
View File
@@ -694,6 +694,22 @@ SOURCES_CXX += \
$(EXTDIR)/libadrenotools/lib/linkernsbypass/elf_soname_patcher.cpp
endif
SOURCES_C += \
$(EXTDIR)/aemu_postoffice/client/postoffice.c
SOURCES_CXX += \
$(EXTDIR)/aemu_postoffice/client/mutex_impl_cpp.cpp \
$(EXTDIR)/aemu_postoffice/client/delay_impl_cpp.cpp \
$(EXTDIR)/aemu_postoffice/client/log_impl_ppsspp.cpp \
ifeq ($(PLATFORM_EXT), win32)
SOURCES_C += \
$(EXTDIR)/aemu_postoffice/client/sock_impl_windows.c
else
SOURCES_C += \
$(EXTDIR)/aemu_postoffice/client/sock_impl_linux.c
endif
SOURCES_CXX += \
$(COMMONDIR)/Render/Text/draw_text.cpp \
$(EXTDIR)/jpge/jpgd.cpp \