[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r2632: Use UPNPControl::setState() to update the progress of the UP (in vidalia: . branches/upnp/src/vidalia/config)



Author: edmanm
Date: 2008-05-31 20:52:09 -0400 (Sat, 31 May 2008)
New Revision: 2632

Modified:
   vidalia/
   vidalia/branches/upnp/src/vidalia/config/upnpcontrolthread.cpp
Log:
 r398@thebe:  edmanm | 2008-05-31 20:46:15 -0400
 Use UPNPControl::setState() to update the progress of the UPnP control thread,
 and fix a bug that meant failures while forwarding DirPort were always
 ignored. Also a few trivial whitespace fixes.



Property changes on: vidalia
___________________________________________________________________
 svk:merge ticket from /local/vidalia [r398] on 45a62a8a-8088-484c-baad-c7b3e776dd32

Modified: vidalia/branches/upnp/src/vidalia/config/upnpcontrolthread.cpp
===================================================================
--- vidalia/branches/upnp/src/vidalia/config/upnpcontrolthread.cpp	2008-06-01 00:52:06 UTC (rev 2631)
+++ vidalia/branches/upnp/src/vidalia/config/upnpcontrolthread.cpp	2008-06-01 00:52:09 UTC (rev 2632)
@@ -70,14 +70,16 @@
   forever {
     /* TODO: Check for switching OR/Dir port */
     /* TODO: Check for router losing state */
-    
+
     configurePorts();
 
     /* Wait for something to happen */
     _waitMutex->lock();
     if (_keepRunning) {
-      /* We should continue */ 
+      /* We should continue */
+      UPNPControl::Instance()->setState(UPNPControl::IdleState);
       _waitCondition->wait(_waitMutex, UPNPCONTROL_MAX_WAIT_MSEC);
+
       /* Maybe we were asked to exit while waiting */
       shouldExit = !_keepRunning;
       _waitMutex->unlock();
@@ -105,8 +107,6 @@
   bool force_init = false;
   UPNPControl::UPNPError retval = UPNPControl::Success;
 
-  vDebug("configurePorts()");
-
   /* Get desired state */
   _control->getDesiredState(&desiredDirPort, &desiredOrPort);
 
@@ -120,36 +120,49 @@
     _upnpInitialized = QTime();
     force_init = true;
   }
-  
+
   if (!force_init) {
     /* Configure DirPort */
     if (desiredDirPort != _dirPort) {
+      UPNPControl::Instance()->setState(UPNPControl::UpdatingDirPortState);
       retval = updatePort(_dirPort, desiredDirPort);
       if (retval == UPNPControl::Success)
         _dirPort = desiredDirPort;
+      else
+        goto err;
     }
-    
+
     /* Configure ORPort */
     if (desiredOrPort != _orPort) {
+      UPNPControl::Instance()->setState(UPNPControl::UpdatingORPortState);
       retval = updatePort(_orPort, desiredOrPort);
       if (retval == UPNPControl::Success)
         _orPort = desiredOrPort;
+      else
+        goto err;
     }
   } else {
     /* Add the mapping even if they exist already */
+    UPNPControl::Instance()->setState(UPNPControl::UpdatingDirPortState);
     retval = updatePort(0, desiredDirPort);
     if (retval == UPNPControl::Success)
       _dirPort = desiredDirPort;
-    
+    else
+      goto err;
+
+    UPNPControl::Instance()->setState(UPNPControl::UpdatingORPortState);
     retval = updatePort(0, desiredOrPort);
     if (retval == UPNPControl::Success)
       _orPort = desiredOrPort;
+    else goto err;
   }
 
-  vInfo("configurePorts() result: %1").arg(retval);
+  UPNPControl::Instance()->setState(UPNPControl::ForwardingCompleteState);
+  return;
 
-  if (retval != UPNPControl::Success)
-    UPNPControl::Instance()->setError(retval);
+err:
+  UPNPControl::Instance()->setError(retval);
+  UPNPControl::Instance()->setState(UPNPControl::ErrorState);
 }
 
 /** Terminates the UPnP control thread's run() loop.
@@ -236,6 +249,8 @@
   memset(&urls, 0, sizeof(struct UPNPUrls));
   memset(&data, 0, sizeof(struct IGDdatas));
 
+  UPNPControl::Instance()->setState(UPNPControl::DiscoverState);
+
   devlist = upnpDiscover(UPNPCONTROL_DISCOVER_TIMEOUT, NULL, NULL);
   if (NULL == devlist) {
     vWarn("upnpDiscover returned: NULL");
@@ -260,9 +275,9 @@
 UPNPControlThread::forwardPort(quint16 port)
 {
   int retval;
-  
+
   char sPort[6];
-  
+
   char intClient[16];
   char intPort[6];
 
@@ -277,7 +292,7 @@
             .arg(sPort).arg(sPort).arg(lanaddr).arg(retval);
     return UPNPControl::AddPortMappingFailed;
   }
-  
+
   // Check if the port mapping was accepted
   retval = UPNP_GetSpecificPortMappingEntry(urls.controlURL, data.servicetype,
                                             sPort, "TCP", intClient, intPort);
@@ -285,12 +300,12 @@
     vWarn("GetSpecificPortMappingEntry() failed with code %1").arg(retval);
     return UPNPControl::GetPortMappingFailed;
   }
-  
+
   if(! intClient[0]) {
     vWarn("GetSpecificPortMappingEntry failed.");
     return UPNPControl::GetPortMappingFailed;
   }
-  
+
   // Output the mapping
   vInfo("(external):%1 -> %2:%3").arg(sPort).arg(intClient).arg(intPort);
 
@@ -303,10 +318,10 @@
 UPNPControlThread::disablePort(quint16 port)
 {
   char sPort[6];
-  
+
   // Convert the port number to a string
   snprintf(sPort, sizeof(sPort), "%d", port);
-  
+
   // Remove the mapping
   int retval = UPNP_DeletePortMapping(urls.controlURL, data.servicetype,
                                       sPort, "TCP");
@@ -314,10 +329,10 @@
     vWarn("DeletePortMapping() failed with code %1").arg(retval);
     return UPNPControl::DeletePortMappingFailed;
   }
-  
+
   // Output the cancelled mapping
   vInfo("(external):%1 -> <>").arg(sPort);
-  
+
   return UPNPControl::Success;
 }