- bugfixes when user has no internet and published not turned on, do not try to do UPNP.
This commit is contained in:
parent
58faecb5d5
commit
9026ce161d
|
@ -4214,9 +4214,13 @@ void MenuStateCustomGame::updateNetworkSlots() {
|
|||
|
||||
if(hasNetworkGameSettings() == true) {
|
||||
if(hasCheckedForUPNP == false) {
|
||||
hasCheckedForUPNP = true;
|
||||
|
||||
serverInterface->getServerSocket()->NETdiscoverUPnPDevices();
|
||||
if(checkBoxPublishServer.getValue() == true ||
|
||||
this->headlessServerMode == true) {
|
||||
|
||||
hasCheckedForUPNP = true;
|
||||
serverInterface->getServerSocket()->NETdiscoverUPnPDevices();
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -53,7 +53,7 @@ const int MAX_CLIENT_PAUSE_FOR_LAG_COUNT = 3;
|
|||
const int MAX_SLOT_THREAD_WAIT_TIME_MILLISECONDS = 1500;
|
||||
const int MASTERSERVER_HEARTBEAT_GAME_STATUS_SECONDS = 30;
|
||||
|
||||
const int maxNetworkCommandListSendTimeWaitWhenAutoPaused = 4000;
|
||||
const int MAX_EMPTY_NETWORK_COMMAND_LIST_BROADCAST_INTERVAL_MILLISECONDS = 4000;
|
||||
|
||||
ServerInterface::ServerInterface(bool publishEnabled, ClientLagCallbackInterface *clientLagCallbackInterface) : GameNetworkInterface() {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",extractFileFromDirectoryPath(__FILE__).c_str(),__FUNCTION__,__LINE__);
|
||||
|
@ -1675,16 +1675,45 @@ void ServerInterface::updateKeyframe(int frameCount) {
|
|||
sendTextMessage(sMsg,-1, true,"");
|
||||
}
|
||||
|
||||
//broadcast commands
|
||||
// broadcast commands
|
||||
// If we have more than 0 commands to send, automatically broadcast them
|
||||
bool sendBroadcastMessage = (networkMessageCommandList.getCommandCount() > 0);
|
||||
if(sendBroadcastMessage == false) {
|
||||
|
||||
// Only send empty command list broadcasts when not paused
|
||||
// or auto paused due to lag AND then only every X milliseconds
|
||||
// where x = maxNetworkCommandListSendTimeWaitWhenAutoPaused
|
||||
if(this->getClientsAutoPausedDueToLag() == false ||
|
||||
(this->getClientsAutoPausedDueToLag() == true &&
|
||||
(networkMessageCommandList.getCommandCount() > 0 ||
|
||||
lastBroadcastCommandsTimer.isStarted() == false ||
|
||||
lastBroadcastCommandsTimer.getMillis() >= maxNetworkCommandListSendTimeWaitWhenAutoPaused))) {
|
||||
// Is auto pause due to lag NOT enabled
|
||||
if(this->getClientsAutoPausedDueToLag() == false) {
|
||||
|
||||
// ****NOTE:
|
||||
// We always need to broadcast when not pause as clients
|
||||
// look for broadcasts every network frame.
|
||||
sendBroadcastMessage = true;
|
||||
|
||||
// If network CRC checking enabled we turn on broadcasting always
|
||||
// bool calculateNetworkCRC = false;
|
||||
// if(isFlagType1BitEnabled(this->gameSettings.getFlagTypes1(),ft1_network_synch_checks) == true ||
|
||||
// isFlagType1BitEnabled(this->gameSettings.getFlagTypes1(),ft1_network_synch_checks_verbose) == true) {
|
||||
//
|
||||
// calculateNetworkCRC = true;
|
||||
// }
|
||||
//
|
||||
// if(calculateNetworkCRC == true ||
|
||||
// (lastBroadcastCommandsTimer.isStarted() == false ||
|
||||
// lastBroadcastCommandsTimer.getMillis() >= MAX_EMPTY_NETWORK_COMMAND_LIST_BROADCAST_INTERVAL_MILLISECONDS)) {
|
||||
//
|
||||
// sendBroadcastMessage = true;
|
||||
// }
|
||||
}
|
||||
// Auto pause is enabled due to client lagging, only send empty command
|
||||
// broadcasts every MAX_EMPTY_NETWORK_COMMAND_LIST_BROADCAST_INTERVAL_MILLISECONDS
|
||||
else if(this->getClientsAutoPausedDueToLag() == true &&
|
||||
(lastBroadcastCommandsTimer.isStarted() == false ||
|
||||
lastBroadcastCommandsTimer.getMillis() >= MAX_EMPTY_NETWORK_COMMAND_LIST_BROADCAST_INTERVAL_MILLISECONDS)) {
|
||||
|
||||
sendBroadcastMessage = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(sendBroadcastMessage == true) {
|
||||
|
||||
if(lastBroadcastCommandsTimer.isStarted() == false) {
|
||||
lastBroadcastCommandsTimer.start();
|
||||
|
@ -2366,7 +2395,10 @@ bool ServerInterface::launchGame(const GameSettings *gameSettings) {
|
|||
shutdownFTPServer();
|
||||
}
|
||||
|
||||
if(requiresUPNPTrigger == true) {
|
||||
if((needToRepublishToMasterserver == true ||
|
||||
GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) &&
|
||||
requiresUPNPTrigger == true) {
|
||||
|
||||
this->getServerSocket()->NETdiscoverUPnPDevices();
|
||||
}
|
||||
|
||||
|
|
|
@ -328,6 +328,7 @@ public:
|
|||
|
||||
static Mutex mutexUpnpdiscoverThread;
|
||||
static SDL_Thread *upnpdiscoverThread;
|
||||
static bool cancelUpnpdiscoverThread;
|
||||
};
|
||||
|
||||
// =====================================================
|
||||
|
|
|
@ -75,6 +75,7 @@ int ServerSocket::maxPlayerCount = -1;
|
|||
int ServerSocket::externalPort = Socket::broadcast_portno;
|
||||
BroadCastClientSocketThread *ClientSocket::broadCastClientThread = NULL;
|
||||
SDL_Thread *ServerSocket::upnpdiscoverThread = NULL;
|
||||
bool ServerSocket::cancelUpnpdiscoverThread = false;
|
||||
Mutex ServerSocket::mutexUpnpdiscoverThread;
|
||||
//
|
||||
// UPnP - Start
|
||||
|
@ -2183,9 +2184,6 @@ ServerSocket::ServerSocket(bool basicMode) : Socket() {
|
|||
this->basicMode = basicMode;
|
||||
this->bindSpecificAddress = "";
|
||||
//printf("SERVER SOCKET CONSTRUCTOR\n");
|
||||
//MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,CODE_AT_LINE);
|
||||
//ServerSocket::upnpdiscoverThread = NULL;
|
||||
//safeMutexUPNP.ReleaseLock();
|
||||
|
||||
boundPort = 0;
|
||||
portBound = false;
|
||||
|
@ -2205,22 +2203,17 @@ ServerSocket::~ServerSocket() {
|
|||
stopBroadCastThread();
|
||||
|
||||
if(this->basicMode == false) {
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
//printf("SERVER SOCKET DESTRUCTOR\n");
|
||||
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,CODE_AT_LINE);
|
||||
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||
|
||||
ServerSocket::cancelUpnpdiscoverThread = true;
|
||||
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||
ServerSocket::upnpdiscoverThread = NULL;
|
||||
ServerSocket::cancelUpnpdiscoverThread = false;
|
||||
}
|
||||
safeMutexUPNP.ReleaseLock();
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
|
||||
//printf("In [%s::%s] Line: %d UPNP_Tools::enabledUPNP = %d\n",__FILE__,__FUNCTION__,__LINE__,UPNP_Tools::enabledUPNP);
|
||||
if (UPNP_Tools::enabledUPNP) {
|
||||
//UPNP_Tools::NETremRedirects(ServerSocket::externalPort);
|
||||
UPNP_Tools::NETremRedirects(this->getExternalPort());
|
||||
//UPNP_Tools::enabledUPNP = false;
|
||||
}
|
||||
|
||||
MutexSafeWrapper safeMutexUPNP1(&UPNP_Tools::mutexUPNP,CODE_AT_LINE);
|
||||
|
@ -2477,12 +2470,12 @@ Socket *ServerSocket::accept(bool errorOnFail) {
|
|||
void ServerSocket::NETdiscoverUPnPDevices() {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] UPNP - Start\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
//printf("SERVER SOCKET NETdiscoverUPnPDevices - START\n");
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,CODE_AT_LINE);
|
||||
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||
ServerSocket::cancelUpnpdiscoverThread = true;
|
||||
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||
ServerSocket::upnpdiscoverThread = NULL;
|
||||
ServerSocket::cancelUpnpdiscoverThread = false;
|
||||
}
|
||||
|
||||
// WATCH OUT! Because the thread takes void * as a parameter we MUST cast to the pointer type
|
||||
|
@ -2562,7 +2555,7 @@ int UPNP_Tools::upnp_init(void *param) {
|
|||
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] isUPNP = %d callback = %p\n",__FILE__,__FUNCTION__,__LINE__,UPNP_Tools::isUPNP,callback);
|
||||
|
||||
if(UPNP_Tools::isUPNP) {
|
||||
if(UPNP_Tools::isUPNP == true) {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"Searching for UPnP devices for automatic port forwarding...\n");
|
||||
|
||||
int upnp_delay = 5000;
|
||||
|
@ -2584,6 +2577,14 @@ int UPNP_Tools::upnp_init(void *param) {
|
|||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"UPnP device search finished devlist = %p.\n",devlist);
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("UPnP device search finished devlist = %p.\n",devlist);
|
||||
|
||||
if(ServerSocket::cancelUpnpdiscoverThread == true) {
|
||||
if(devlist != NULL) {
|
||||
freeUPNPDevlist(devlist);
|
||||
}
|
||||
devlist = NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
if (devlist) {
|
||||
dev = devlist;
|
||||
while (dev) {
|
||||
|
@ -2632,6 +2633,14 @@ int UPNP_Tools::upnp_init(void *param) {
|
|||
devlist = NULL;
|
||||
}
|
||||
|
||||
if(ServerSocket::cancelUpnpdiscoverThread == true) {
|
||||
if(devlist != NULL) {
|
||||
freeUPNPDevlist(devlist);
|
||||
}
|
||||
devlist = NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!urls.controlURL || urls.controlURL[0] == '\0') {
|
||||
snprintf(buf, 255,"controlURL not available, UPnP disabled");
|
||||
if(callback) {
|
||||
|
@ -2666,6 +2675,14 @@ int UPNP_Tools::upnp_init(void *param) {
|
|||
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"No UPnP devices found.\n");
|
||||
|
||||
if(ServerSocket::cancelUpnpdiscoverThread == true) {
|
||||
if(devlist != NULL) {
|
||||
freeUPNPDevlist(devlist);
|
||||
}
|
||||
devlist = NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
if(callback) {
|
||||
safeMutexUPNP.ReleaseLock();
|
||||
callback->UPNPInitStatus(false);
|
||||
|
@ -2677,6 +2694,14 @@ int UPNP_Tools::upnp_init(void *param) {
|
|||
snprintf(buf, 255,"UPnP detection routine disabled by user.");
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"UPnP detection routine disabled by user.\n");
|
||||
|
||||
if(ServerSocket::cancelUpnpdiscoverThread == true) {
|
||||
if(devlist != NULL) {
|
||||
freeUPNPDevlist(devlist);
|
||||
}
|
||||
devlist = NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
if(callback) {
|
||||
safeMutexUPNP.ReleaseLock();
|
||||
callback->UPNPInitStatus(false);
|
||||
|
@ -2696,14 +2721,14 @@ bool UPNP_Tools::upnp_add_redirect(int ports[2],bool mutexLock) {
|
|||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] upnp_add_redir(%d : %d)\n",__FILE__,__FUNCTION__,__LINE__,ports[0],ports[1]);
|
||||
|
||||
if(mutexLock) {
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,CODE_AT_LINE);
|
||||
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||
ServerSocket::cancelUpnpdiscoverThread = true;
|
||||
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||
ServerSocket::upnpdiscoverThread = NULL;
|
||||
ServerSocket::cancelUpnpdiscoverThread = false;
|
||||
}
|
||||
safeMutexUPNP.ReleaseLock();
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
MutexSafeWrapper safeMutexUPNP(&UPNP_Tools::mutexUPNP,CODE_AT_LINE);
|
||||
|
@ -2748,18 +2773,14 @@ bool UPNP_Tools::upnp_add_redirect(int ports[2],bool mutexLock) {
|
|||
void UPNP_Tools::upnp_rem_redirect(int ext_port) {
|
||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] upnp_rem_redir(%d)\n",__FILE__,__FUNCTION__,__LINE__,ext_port);
|
||||
|
||||
//printf("SERVER SOCKET upnp_rem_redirect - START\n");
|
||||
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,CODE_AT_LINE);
|
||||
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||
ServerSocket::cancelUpnpdiscoverThread = true;
|
||||
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||
ServerSocket::upnpdiscoverThread = NULL;
|
||||
ServerSocket::cancelUpnpdiscoverThread = false;
|
||||
}
|
||||
safeMutexUPNP.ReleaseLock();
|
||||
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
//printf("In [%s::%s] Line: %d ext_port = %d urls.controlURL = [%s]\n",__FILE__,__FUNCTION__,__LINE__,ext_port,urls.controlURL);
|
||||
|
||||
MutexSafeWrapper safeMutexUPNP1(&UPNP_Tools::mutexUPNP,CODE_AT_LINE);
|
||||
if (urls.controlURL && urls.controlURL[0] != '\0') {
|
||||
|
|
Loading…
Reference in New Issue