mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Merge pull request #21116 from Kethen/aemu_postoffice_integrate_v2
Support adhoc relay from aemu to ppsspp
This commit is contained in:
17 files changed
+1044
-130
No files matched your search
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
@@ -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>
|
||||
@@ -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
@@ -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]);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
File diff suppressed because it is too large.
Load diff
@@ -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 {
|
||||
|
||||
@@ -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)")));
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
+1
Submodule ext/aemu_postoffice added at 098039af82.
@@ -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 \
|
||||
|
||||
Reference in new issue
Block a user