mirror of
https://github.com/glest/glest-source.git
synced 2025-08-11 19:04:00 +02:00
fixed horrible UPNP bugs related to timing, where ports would be either NOT properly opened or not closed due to thread timing and no thread protection.
This commit is contained in:
@@ -207,6 +207,8 @@ void Game::endGame() {
|
|||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
quitGame();
|
||||||
|
|
||||||
Object::setStateCallback(NULL);
|
Object::setStateCallback(NULL);
|
||||||
thisGamePtr = NULL;
|
thisGamePtr = NULL;
|
||||||
if(originalDisplayMsgCallback != NULL) {
|
if(originalDisplayMsgCallback != NULL) {
|
||||||
@@ -268,6 +270,8 @@ Game::~Game() {
|
|||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
quitGame();
|
||||||
|
|
||||||
Object::setStateCallback(NULL);
|
Object::setStateCallback(NULL);
|
||||||
thisGamePtr = NULL;
|
thisGamePtr = NULL;
|
||||||
if(originalDisplayMsgCallback != NULL) {
|
if(originalDisplayMsgCallback != NULL) {
|
||||||
@@ -2519,6 +2523,7 @@ Stats Game::quitGame() {
|
|||||||
|
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugSystem).enabled) SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
//printf("In [%s::%s] Line: %d\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
NetworkManager::getInstance().end();
|
NetworkManager::getInstance().end();
|
||||||
//sleep(0);
|
//sleep(0);
|
||||||
|
|
||||||
|
@@ -61,7 +61,7 @@ void NetworkManager::init(NetworkRole networkRole, bool publishEnabled) {
|
|||||||
void NetworkManager::end() {
|
void NetworkManager::end() {
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] this->networkRole = %d gameNetworkInterface [%p]\n",__FILE__,__FUNCTION__,__LINE__,this->networkRole,gameNetworkInterface);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] this->networkRole = %d gameNetworkInterface [%p]\n",__FILE__,__FUNCTION__,__LINE__,this->networkRole,gameNetworkInterface);
|
||||||
|
//printf("In [%s::%s] Line: %d gameNetworkInterface = %p\n",__FILE__,__FUNCTION__,__LINE__,gameNetworkInterface);
|
||||||
//printf("==========] DELETING gameNetworkInterface [%p]\n",gameNetworkInterface);
|
//printf("==========] DELETING gameNetworkInterface [%p]\n",gameNetworkInterface);
|
||||||
|
|
||||||
delete gameNetworkInterface;
|
delete gameNetworkInterface;
|
||||||
|
@@ -142,6 +142,7 @@ ServerInterface::ServerInterface(bool publishEnabled) :GameNetworkInterface() {
|
|||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
int portNumber = Config::getInstance().getInt("FTPServerPort",intToStr(ServerSocket::getFTPServerPort()).c_str());
|
int portNumber = Config::getInstance().getInt("FTPServerPort",intToStr(ServerSocket::getFTPServerPort()).c_str());
|
||||||
ServerSocket::setFTPServerPort(portNumber);
|
ServerSocket::setFTPServerPort(portNumber);
|
||||||
|
printf("In [%s::%s] portNumber = %d ServerSocket::getFTPServerPort() = %d\n",__FILE__,__FUNCTION__,__LINE__,portNumber,ServerSocket::getFTPServerPort());
|
||||||
|
|
||||||
bool allowInternetTilesetFileTransfers = Config::getInstance().getBool("EnableFTPServerInternetTilesetXfer","true");
|
bool allowInternetTilesetFileTransfers = Config::getInstance().getBool("EnableFTPServerInternetTilesetXfer","true");
|
||||||
bool allowInternetTechtreeFileTransfers = Config::getInstance().getBool("EnableFTPServerInternetTechtreeXfer","true");
|
bool allowInternetTechtreeFileTransfers = Config::getInstance().getBool("EnableFTPServerInternetTechtreeXfer","true");
|
||||||
|
@@ -223,7 +223,6 @@ protected:
|
|||||||
|
|
||||||
static int externalPort;
|
static int externalPort;
|
||||||
static int ftpServerPort;
|
static int ftpServerPort;
|
||||||
SDL_Thread *upnpdiscoverThread;
|
|
||||||
|
|
||||||
static int maxPlayerCount;
|
static int maxPlayerCount;
|
||||||
|
|
||||||
@@ -262,6 +261,9 @@ public:
|
|||||||
void NETdiscoverUPnPDevices();
|
void NETdiscoverUPnPDevices();
|
||||||
|
|
||||||
static void setMaxPlayerCount(int value) { maxPlayerCount=value; }
|
static void setMaxPlayerCount(int value) { maxPlayerCount=value; }
|
||||||
|
|
||||||
|
static Mutex mutexUpnpdiscoverThread;
|
||||||
|
static SDL_Thread *upnpdiscoverThread;
|
||||||
};
|
};
|
||||||
|
|
||||||
// =====================================================
|
// =====================================================
|
||||||
@@ -276,10 +278,10 @@ public:
|
|||||||
|
|
||||||
static int upnp_init(void *param);
|
static int upnp_init(void *param);
|
||||||
|
|
||||||
static bool upnp_add_redirect(int ports[2]);
|
static bool upnp_add_redirect(int ports[2],bool mutexLock=true);
|
||||||
static void upnp_rem_redirect(int ext_port);
|
static void upnp_rem_redirect(int ext_port);
|
||||||
|
|
||||||
static void NETaddRedirects(std::vector<int> UPNPPortForwardList);
|
static void NETaddRedirects(std::vector<int> UPNPPortForwardList, bool mutexLock=true);
|
||||||
static void NETremRedirects(int ext_port);
|
static void NETremRedirects(int ext_port);
|
||||||
|
|
||||||
static void AddUPNPPortForward(int internalPort, int externalPort);
|
static void AddUPNPPortForward(int internalPort, int externalPort);
|
||||||
|
@@ -74,8 +74,10 @@ FTPServerThread::~FTPServerThread() {
|
|||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
// Remove any UPNP port forwarded ports
|
// Remove any UPNP port forwarded ports
|
||||||
|
//printf("In [%s::%s] Line: %d ServerSocket::getFTPServerPort() = %d\n",__FILE__,__FUNCTION__,__LINE__,ServerSocket::getFTPServerPort());
|
||||||
UPNP_Tools::upnp_rem_redirect(ServerSocket::getFTPServerPort());
|
UPNP_Tools::upnp_rem_redirect(ServerSocket::getFTPServerPort());
|
||||||
for(int clientIndex = 1; clientIndex <= maxPlayers; ++clientIndex) {
|
for(int clientIndex = 1; clientIndex <= maxPlayers; ++clientIndex) {
|
||||||
|
//printf("In [%s::%s] Line: %d ServerSocket::getFTPServerPort()+ clientIndex = %d\n",__FILE__,__FUNCTION__,__LINE__,ServerSocket::getFTPServerPort()+ clientIndex);
|
||||||
UPNP_Tools::upnp_rem_redirect(ServerSocket::getFTPServerPort() + clientIndex);
|
UPNP_Tools::upnp_rem_redirect(ServerSocket::getFTPServerPort() + clientIndex);
|
||||||
}
|
}
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
@@ -67,7 +67,8 @@ int ServerSocket::ftpServerPort = 61358;
|
|||||||
int ServerSocket::maxPlayerCount = -1;
|
int ServerSocket::maxPlayerCount = -1;
|
||||||
int ServerSocket::externalPort = Socket::broadcast_portno;
|
int ServerSocket::externalPort = Socket::broadcast_portno;
|
||||||
BroadCastClientSocketThread *ClientSocket::broadCastClientThread = NULL;
|
BroadCastClientSocketThread *ClientSocket::broadCastClientThread = NULL;
|
||||||
|
SDL_Thread *ServerSocket::upnpdiscoverThread = NULL;
|
||||||
|
Mutex ServerSocket::mutexUpnpdiscoverThread;
|
||||||
//
|
//
|
||||||
// UPnP - Start
|
// UPnP - Start
|
||||||
//
|
//
|
||||||
@@ -1846,9 +1847,13 @@ void BroadCastClientSocketThread::execute() {
|
|||||||
ServerSocket::ServerSocket() : Socket() {
|
ServerSocket::ServerSocket() : Socket() {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
upnpdiscoverThread = NULL;
|
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
|
ServerSocket::upnpdiscoverThread = NULL;
|
||||||
|
safeMutexUPNP.ReleaseLock();
|
||||||
|
|
||||||
portBound = false;
|
portBound = false;
|
||||||
broadCastThread = NULL;
|
broadCastThread = NULL;
|
||||||
|
UPNP_Tools::enabledUPNP = false;
|
||||||
|
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
@@ -1856,16 +1861,23 @@ ServerSocket::ServerSocket() : Socket() {
|
|||||||
ServerSocket::~ServerSocket() {
|
ServerSocket::~ServerSocket() {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
|
//printf("In [%s::%s] Line: %d UPNP_Tools::enabledUPNP = %d\n",__FILE__,__FUNCTION__,__LINE__,UPNP_Tools::enabledUPNP);
|
||||||
|
|
||||||
stopBroadCastThread();
|
stopBroadCastThread();
|
||||||
|
|
||||||
if(upnpdiscoverThread != NULL) {
|
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
SDL_WaitThread(upnpdiscoverThread, NULL);
|
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
upnpdiscoverThread = NULL;
|
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||||
|
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||||
|
ServerSocket::upnpdiscoverThread = NULL;
|
||||||
}
|
}
|
||||||
|
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) {
|
if (UPNP_Tools::enabledUPNP) {
|
||||||
UPNP_Tools::NETremRedirects(ServerSocket::externalPort);
|
UPNP_Tools::NETremRedirects(ServerSocket::externalPort);
|
||||||
UPNP_Tools::enabledUPNP = false;
|
//UPNP_Tools::enabledUPNP = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(urls.controlURL && urls.ipcondescURL && urls.controlURL_CIF) {
|
if(urls.controlURL && urls.ipcondescURL && urls.controlURL_CIF) {
|
||||||
@@ -2068,14 +2080,18 @@ Socket *ServerSocket::accept() {
|
|||||||
void ServerSocket::NETdiscoverUPnPDevices() {
|
void ServerSocket::NETdiscoverUPnPDevices() {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] UPNP - Start\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] UPNP - Start\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
if(upnpdiscoverThread != NULL) {
|
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
SDL_WaitThread(upnpdiscoverThread, NULL);
|
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
upnpdiscoverThread = NULL;
|
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||||
|
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||||
|
ServerSocket::upnpdiscoverThread = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// WATCH OUT! Because the thread takes void * as a parameter we MUST cast to the pointer type
|
// WATCH OUT! Because the thread takes void * as a parameter we MUST cast to the pointer type
|
||||||
// used on the other side (inside the thread)
|
// used on the other side (inside the thread)
|
||||||
upnpdiscoverThread = SDL_CreateThread(&UPNP_Tools::upnp_init, dynamic_cast<UPNPInitInterface *>(this));
|
ServerSocket::upnpdiscoverThread = SDL_CreateThread(&UPNP_Tools::upnp_init, dynamic_cast<UPNPInitInterface *>(this));
|
||||||
|
safeMutexUPNP.ReleaseLock();
|
||||||
|
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerSocket::UPNPInitStatus(bool result) {
|
void ServerSocket::UPNPInitStatus(bool result) {
|
||||||
@@ -2099,7 +2115,7 @@ void ServerSocket::UPNPInitStatus(bool result) {
|
|||||||
UPNPPortForwardList.push_back(this->getFTPServerPort() + clientIndex);
|
UPNPPortForwardList.push_back(this->getFTPServerPort() + clientIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
UPNP_Tools::NETaddRedirects(UPNPPortForwardList);
|
UPNP_Tools::NETaddRedirects(UPNPPortForwardList,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2246,7 +2262,7 @@ int UPNP_Tools::upnp_init(void *param) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UPNP_Tools::upnp_add_redirect(int ports[2]) {
|
bool UPNP_Tools::upnp_add_redirect(int ports[2],bool mutexLock) {
|
||||||
char externalIP[16] = "";
|
char externalIP[16] = "";
|
||||||
char ext_port_str[16] = "";
|
char ext_port_str[16] = "";
|
||||||
char int_port_str[16] = "";
|
char int_port_str[16] = "";
|
||||||
@@ -2254,6 +2270,17 @@ bool UPNP_Tools::upnp_add_redirect(int ports[2]) {
|
|||||||
|
|
||||||
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(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,string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
|
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||||
|
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||||
|
ServerSocket::upnpdiscoverThread = NULL;
|
||||||
|
}
|
||||||
|
safeMutexUPNP.ReleaseLock();
|
||||||
|
//printf("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
}
|
||||||
|
|
||||||
if (!urls.controlURL || urls.controlURL[0] == '\0') {
|
if (!urls.controlURL || urls.controlURL[0] == '\0') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -2287,24 +2314,38 @@ bool UPNP_Tools::upnp_add_redirect(int ports[2]) {
|
|||||||
void UPNP_Tools::upnp_rem_redirect(int ext_port) {
|
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);
|
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("In [%s::%s] Line: %d safeMutexUPNP\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
MutexSafeWrapper safeMutexUPNP(&ServerSocket::mutexUpnpdiscoverThread,string(__FILE__) + "_" + intToStr(__LINE__));
|
||||||
|
if(ServerSocket::upnpdiscoverThread != NULL) {
|
||||||
|
SDL_WaitThread(ServerSocket::upnpdiscoverThread, NULL);
|
||||||
|
ServerSocket::upnpdiscoverThread = NULL;
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
|
||||||
if (urls.controlURL && urls.controlURL[0] != '\0') {
|
if (urls.controlURL && urls.controlURL[0] != '\0') {
|
||||||
char ext_port_str[16]="";
|
char ext_port_str[16]="";
|
||||||
sprintf(ext_port_str, "%d", ext_port);
|
sprintf(ext_port_str, "%d", ext_port);
|
||||||
|
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#1 DEBUGGUNG urls.controlURL [%s]\n",urls.controlURL);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#1 DEBUGGING urls.controlURL [%s]\n",urls.controlURL);
|
||||||
|
|
||||||
|
int result = 0;
|
||||||
#ifndef MINIUPNPC_VERSION_PRE1_5
|
#ifndef MINIUPNPC_VERSION_PRE1_5
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#1 DEBUGGUNG data.first.servicetype [%s]\n",data.first.servicetype);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#1 DEBUGGING data.first.servicetype [%s]\n",data.first.servicetype);
|
||||||
UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, ext_port_str, "TCP", 0);
|
result = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, ext_port_str, "TCP", 0);
|
||||||
#else
|
#else
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#1 DEBUGGUNG data.servicetype [%s]\n",data.servicetype);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#1 DEBUGGING data.servicetype [%s]\n",data.servicetype);
|
||||||
UPNP_DeletePortMapping(urls.controlURL, data.servicetype, ext_port_str, "TCP", 0);
|
result = UPNP_DeletePortMapping(urls.controlURL, data.servicetype, ext_port_str, "TCP", 0);
|
||||||
#endif
|
#endif
|
||||||
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\nresult = %d\n",result);
|
||||||
|
//printf("\n\nresult = %d\n",result);
|
||||||
}
|
}
|
||||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#2 DEBUGGUNG urls.controlURL [%s]\n",urls.controlURL);
|
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\n#2 DEBUGGING urls.controlURL [%s]\n",urls.controlURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UPNP_Tools::NETaddRedirects(std::vector<int> UPNPPortForwardList) {
|
void UPNP_Tools::NETaddRedirects(std::vector<int> UPNPPortForwardList,bool mutexLock) {
|
||||||
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] upnp_rem_redir(%d)\n",__FILE__,__FUNCTION__,__LINE__);
|
if(SystemFlags::getSystemSettingType(SystemFlags::debugNetwork).enabled) SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d] upnp_rem_redir(%d)\n",__FILE__,__FUNCTION__,__LINE__);
|
||||||
|
|
||||||
if(UPNPPortForwardList.size() % 2 != 0) {
|
if(UPNPPortForwardList.size() % 2 != 0) {
|
||||||
@@ -2314,7 +2355,7 @@ void UPNP_Tools::NETaddRedirects(std::vector<int> UPNPPortForwardList) {
|
|||||||
|
|
||||||
for(unsigned int clientIndex = 0; clientIndex < UPNPPortForwardList.size(); clientIndex += 2) {
|
for(unsigned int clientIndex = 0; clientIndex < UPNPPortForwardList.size(); clientIndex += 2) {
|
||||||
int ports[2] = { UPNPPortForwardList[clientIndex], UPNPPortForwardList[clientIndex+1] };
|
int ports[2] = { UPNPPortForwardList[clientIndex], UPNPPortForwardList[clientIndex+1] };
|
||||||
upnp_add_redirect(ports);
|
upnp_add_redirect(ports,mutexLock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user