Skip to content

Commit 14f0650

Browse files
committed
PortMapper now respects use Firewall port override setting
1 parent abac2c8 commit 14f0650

4 files changed

Lines changed: 65 additions & 9 deletions

File tree

GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/PortMapper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ enum ECapabilityState : uint8_t
1515
{
1616
UNDETERMINED,
1717
UNSUPPORTED,
18-
SUPPORTED
18+
SUPPORTED,
19+
OVERRIDDEN
1920
};
2021

2122
class PortMapper

GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLWelcomeMenu.cpp

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -291,18 +291,56 @@ static void updateNumPlayersOnline(void)
291291

292292

293293
//<hexcol>%hs for colors
294-
ECapabilityState NATDirectConnect = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().HasDirectConnect();
295294
ECapabilityState capUPnP = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().HasUPnP();
296295
ECapabilityState capNATPMP = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().HasNATPMP();
296+
297+
std::string strUPnPState;
298+
if (capUPnP == ECapabilityState::UNDETERMINED)
299+
{
300+
strUPnPState = "Still Determining...";
301+
}
302+
else if (capUPnP == ECapabilityState::SUPPORTED)
303+
{
304+
strUPnPState = "Supported";
305+
}
306+
else if (capUPnP == ECapabilityState::UNSUPPORTED)
307+
{
308+
strUPnPState = "Unsupported";
309+
}
310+
else
311+
{
312+
strUPnPState = "User Overridden";
313+
}
314+
315+
std::string strNATPMPState;
316+
if (capNATPMP == ECapabilityState::UNDETERMINED)
317+
{
318+
strNATPMPState = "Still Determining...";
319+
}
320+
else if (capNATPMP == ECapabilityState::SUPPORTED)
321+
{
322+
strNATPMPState = "Supported";
323+
}
324+
else if (capNATPMP == ECapabilityState::UNSUPPORTED)
325+
{
326+
strNATPMPState = "Unsupported";
327+
}
328+
else
329+
{
330+
strNATPMPState = "User Overridden";
331+
}
332+
333+
ECapabilityState NATDirectConnect = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().HasDirectConnect();
297334
bool bHasPortMapped = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().HasPortOpen();
298335
bool bHasPortMappedUPnP = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().HasPortOpenUPnP();
299336
int preferredPort = NGMP_OnlineServicesManager::GetInstance()->GetPortMapper().GetOpenPort();
300-
headingStr.format(L"Welcome to Generals Online for Zero Hour.\n \nNetwork Capabilities:\n\tUPnP: %hs\n\tNAT-PMP: %hs\n\tPort Mapped: %hs\n\tNetwork Port: %d\n\tDirect Connect: %hs",
301-
capUPnP == ECapabilityState::UNDETERMINED ? "Still Determining..." : capUPnP == ECapabilityState::SUPPORTED ? "Supported" : "Unsupported",
302-
capNATPMP == ECapabilityState::UNDETERMINED ? "Still Determining..." : capNATPMP == ECapabilityState::SUPPORTED ? "Supported" : "Unsupported",
337+
headingStr.format(L"Welcome to Generals Online for Zero Hour.\n \nNetwork Capabilities:\n\tUPnP: %hs\n\tNAT-PMP: %hs\n\tPort Mapped: %hs\n\tNetwork Port: %d\n\tDirect Connect: %hs%hs",
338+
strUPnPState.c_str(),
339+
strNATPMPState.c_str(),
303340
bHasPortMapped ? (bHasPortMappedUPnP ? "Yes (UPnP)" : "Yes (NAT-PMP)") : "No",
304341
preferredPort,
305-
NATDirectConnect == ECapabilityState::UNDETERMINED ? "Still Determining..." : NATDirectConnect == ECapabilityState::SUPPORTED ? "Supported" : "Unsupported"
342+
NATDirectConnect == ECapabilityState::UNDETERMINED ? "Still Determining..." : NATDirectConnect == ECapabilityState::SUPPORTED ? "Supported" : "Unsupported",
343+
capUPnP == ECapabilityState::OVERRIDDEN ? "\n\tWARNING: You have manually set a firewall port which does not appear to be open. Direct connectivity may not work." : ""
306344
);
307345

308346
while (headingStr.nextToken(&line, UnicodeString(L"\n")))

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NGMPGame.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -342,9 +342,11 @@ AsciiString NGMPGame::generateLadderGameResultsPacket(void)
342342
void NGMPGame::launchGame(void)
343343
{
344344
// TODO_NGMP: Better way of doing this, plus maybe load from file?
345-
//TheWritableGlobalData->m_benchmarkTimer = 999999999;
346-
//TheWritableGlobalData->m_debugShowGraphicalFramerate = true;
345+
#if defined(_DEBUG)
346+
TheWritableGlobalData->m_benchmarkTimer = 999999999;
347+
TheWritableGlobalData->m_debugShowGraphicalFramerate = true;
347348
TheWritableGlobalData->m_showMetrics = true;
349+
#endif
348350

349351
setGameInProgress(TRUE);
350352

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/PortMapper.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,25 @@ void PortMapper::BackgroundThreadRun()
248248

249249
void PortMapper::DetermineLocalNetworkCapabilities(std::function<void(void)> callbackDeterminedCaps)
250250
{
251-
NetworkLog("[PortMapper] Start DetermineLocalNetworkCapabilities");
252251
// store callback
253252
m_callbackDeterminedCaps = callbackDeterminedCaps;
254253

254+
if (TheGlobalData->m_firewallPortOverride != 0)
255+
{
256+
m_capUPnP = ECapabilityState::OVERRIDDEN;
257+
m_capNATPMP = ECapabilityState::OVERRIDDEN;
258+
m_PreferredPort = TheGlobalData->m_firewallPortOverride;
259+
260+
NetworkLog("[PortMapper] Firewall port override is set (%d), skipping port mapping and going straight to connection check", m_PreferredPort);
261+
m_bPortMapperWorkComplete.store(true);
262+
263+
// dont trigger callbakc, just say we did the mapping, so we'll continue with direct connect check - this is still valid
264+
265+
return;
266+
}
267+
NetworkLog("[PortMapper] Start DetermineLocalNetworkCapabilities");
268+
269+
255270
// reset status
256271
m_bPortMapperWorkComplete.store(false);
257272

0 commit comments

Comments
 (0)