[or-cvs] r14275: Move UPnP code into a singleton UPNPControl object (torbrowser/trunk/src/current-patches)

sjm217 at seul.org sjm217 at seul.org
Tue Apr 1 16:09:31 UTC 2008


Author: sjm217
Date: 2008-04-01 12:09:31 -0400 (Tue, 01 Apr 2008)
New Revision: 14275

Modified:
   torbrowser/trunk/src/current-patches/vidalia-miniupnp.patch
Log:
Move UPnP code into a singleton UPNPControl object

Modified: torbrowser/trunk/src/current-patches/vidalia-miniupnp.patch
===================================================================
--- torbrowser/trunk/src/current-patches/vidalia-miniupnp.patch	2008-04-01 15:57:58 UTC (rev 14274)
+++ torbrowser/trunk/src/current-patches/vidalia-miniupnp.patch	2008-04-01 16:09:31 UTC (rev 14275)
@@ -1,20 +1,7 @@
-Index: INSTALL
+Index: CMakeLists.txt
 ===================================================================
---- INSTALL	(revision 2465)
-+++ INSTALL	(working copy)
-@@ -206,3 +206,8 @@
- 'cmake --help' or 'man cmake' (on non-Windows platforms) for more information
- about supported generators and configuration options.
- 
-+Including UPnP support
-+----------------------
-+
-+cmake -G "MSYS Makefiles" -DMINIUPNPC_LIBRARY_DIR="/usr/local/lib" -DMINIUPNPC_INCLUDE_DIR="/usr/local/include" .
-+
-Index: src/vidalia/CMakeLists.txt
-===================================================================
---- src/vidalia/CMakeLists.txt	(revision 2465)
-+++ src/vidalia/CMakeLists.txt	(working copy)
+--- CMakeLists.txt	(revision 2473)
++++ CMakeLists.txt	(working copy)
 @@ -16,6 +16,7 @@
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/config
@@ -23,7 +10,23 @@
  )
  configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/res/vidalia_win.rc.in
-@@ -234,9 +235,16 @@
+@@ -61,6 +62,7 @@
+   config/portvalidator.cpp
+   config/serverpage.cpp
+   config/serversettings.cpp
++  config/upnpcontrol.cpp
+   config/torsettings.cpp
+   config/vidaliasettings.cpp
+   config/vsettings.cpp
+@@ -80,6 +82,7 @@
+   config/portvalidator.h
+   config/serverpage.h
+   config/serversettings.h
++  config/upnpcontrol.h
+   config/torsettings.h
+   config/vidaliasettings.h
+   config/vsettings.h
+@@ -234,9 +237,16 @@
  endif(APPLE)
  add_dependencies(${vidalia_BIN} translations)
  
@@ -40,16 +43,19 @@
    torcontrol
    util
  )
-@@ -268,3 +276,4 @@
- endif(NOT WIN32 AND NOT APPLE)
+Index: config/serversettings.cpp
+===================================================================
+--- config/serversettings.cpp	(revision 2473)
++++ config/serversettings.cpp	(working copy)
+@@ -20,6 +20,7 @@
  
+ #include "serversettings.h"
+ #include "torsettings.h"
++#include "upnpcontrol.h"
  
-+
-Index: src/vidalia/config/serversettings.cpp
-===================================================================
---- src/vidalia/config/serversettings.cpp	(revision 2465)
-+++ src/vidalia/config/serversettings.cpp	(working copy)
-@@ -130,6 +130,9 @@
+ /** Define the set of characters that are valid in a nickname. */
+ #define VALID_NICKNAME_CHARS \
+@@ -130,6 +131,9 @@
    bool rc;
  
    if (isServerEnabled()) {
@@ -59,14 +65,83 @@
      rc = torControl()->setConf(confValues(), errmsg);
    } else { 
      QStringList resetKeys;
-@@ -152,6 +155,72 @@
+@@ -152,6 +156,17 @@
    return rc;
  }
  
++/* TODO: We should call this periodically, in case the router gets rebooted or forgets its UPnP settings */
++/* TODO: Remove port forwarding when Tor is shutdown or the ORPort changes */
++/* TODO: init_upnp() will block for up to 2 seconds. We should fire off a thread */
++/** Configure UPnP device to forward DirPort and ORPort */
++void
++ServerSettings::configurePortForwarding()
++{
++  UPNPControl *pUNPControl = UPNPControl::Instance();
++  pUNPControl->forwardPort(getORPort());
++}
 +
+ /** Virtual method called when we retrieve a server-related setting from Tor.
+  * Currently this just translates BandwidthFoo to RelayBandwidthFoo when
+  * appropriate. */
+Index: config/serversettings.h
+===================================================================
+--- config/serversettings.h	(revision 2473)
++++ config/serversettings.h	(working copy)
+@@ -91,6 +91,9 @@
+ private:
+   /** Returns Tor-recognizable configuration keys and current values. */
+   QHash<QString,QString> confValues();
++
++  /** Configure UPnP device to forward DirPort and ORPort */
++  void configurePortForwarding();
+ };
+ 
+ #endif
+Index: config/upnpcontrol.cpp
+===================================================================
+--- config/upnpcontrol.cpp	(revision 0)
++++ config/upnpcontrol.cpp	(revision 0)
+@@ -0,0 +1,93 @@
++/*
++**  This file is part of Vidalia, and is subject to the license terms in the
++**  LICENSE file, found in the top level directory of this distribution. If 
++**  you did not receive the LICENSE file with this file, you may obtain it
++**  from the Vidalia source package distributed by the Vidalia Project at
++**  http://www.vidalia-project.net/. No part of Vidalia, including this file,
++**  may be copied, modified, propagated, or distributed except according to
++**  the terms described in the LICENSE file.
++*/
++
++/* 
++** \file upnpcontrol.cpp
++** \version $Id: torcontrol.h 2362 2008-02-29 04:30:11Z edmanm $
++** \brief Singleton object for interacting with UPNP device
++*/
++
++#include "upnpcontrol.h"
++
++UPNPControl* UPNPControl::pInstance = 0;
++UPNPControl* UPNPControl::Instance()
++{
++  if (0 == pInstance)
++    pInstance = new UPNPControl;
++  return pInstance;
++}
++
++UPNPControl::UPNPControl()
++{
++  init_upnp();
++}
++
++void
++UPNPControl::forwardPort(int port)
++{
++  upnp_add_redir(lanaddr, port);
++}
++
 +/** Based on http://miniupnp.free.fr/files/download.php?file=xchat-upnp20061022.patch */
 +void
-+ServerSettings::init_upnp()
++UPNPControl::init_upnp()
 +{
 +  struct UPNPDev * devlist;
 +  int retval;
@@ -85,7 +160,7 @@
 +
 +/** Based on http://miniupnp.free.fr/files/download.php?file=xchat-upnp20061022.patch */
 +void
-+ServerSettings::upnp_add_redir(const char * addr, int port)
++UPNPControl::upnp_add_redir(const char * addr, int port)
 +{
 +	char port_str[16];
 +	int r;
@@ -93,6 +168,7 @@
 +	if(urls.controlURL[0] == '\0')
 +	{
 +		printf("TB : the init was not done !\n");
++		fflush(stdout);
 +		return;
 +	}
 +	sprintf(port_str, "%d", port);
@@ -100,11 +176,12 @@
 +	                        port_str, port_str, addr, 0, "TCP");
 +	if(r==0)
 +		printf("AddPortMapping(%s, %s, %s) failed\n", port_str, port_str, addr);
++	fflush(stdout);
 +}
 +
 +/** Based on http://miniupnp.free.fr/files/download.php?file=xchat-upnp20061022.patch */
 +void
-+ServerSettings::upnp_rem_redir(int port)
++UPNPControl::upnp_rem_redir(int port)
 +{
 +	char port_str[16];
 +	int t;
@@ -112,50 +189,55 @@
 +	if(urls.controlURL[0] == '\0')
 +	{
 +		printf("TB : the init was not done !\n");
++		fflush(stdout);
 +		return;
 +	}
 +	sprintf(port_str, "%d", port);
 +	UPNP_DeletePortMapping(urls.controlURL, data.servicetype, port_str, "TCP");
 +}
+Index: config/upnpcontrol.h
+===================================================================
+--- config/upnpcontrol.h	(revision 0)
++++ config/upnpcontrol.h	(revision 0)
+@@ -0,0 +1,48 @@
++/*
++**  This file is part of Vidalia, and is subject to the license terms in the
++**  LICENSE file, found in the top level directory of this distribution. If 
++**  you did not receive the LICENSE file with this file, you may obtain it
++**  from the Vidalia source package distributed by the Vidalia Project at
++**  http://www.vidalia-project.net/. No part of Vidalia, including this file,
++**  may be copied, modified, propagated, or distributed except according to
++**  the terms described in the LICENSE file.
++*/
 +
-+/* TODO: We should call this periodically, in case the router gets rebooted or forgets its UPnP settings */
-+/* TODO: Remove port forwarding when Tor is shutdown or the ORPort changes */
-+/* TODO: init_upnp() will block for up to 2 seconds. We should fire off a thread */
-+/** Configure UPnP device to forward DirPort and ORPort */
-+void
-+ServerSettings::configurePortForwarding()
-+{
-+  init_upnp();
-+  upnp_add_redir(lanaddr, getORPort());
-+}
++/* 
++** \file upnpcontrol.h
++** \version $Id: torcontrol.h 2362 2008-02-29 04:30:11Z edmanm $
++** \brief Singleton object for interacting with UPNP device
++*/
 +
- /** Virtual method called when we retrieve a server-related setting from Tor.
-  * Currently this just translates BandwidthFoo to RelayBandwidthFoo when
-  * appropriate. */
-@@ -321,3 +390,4 @@
-   setValue(SETTING_BANDWIDTH_BURST, rate);
- }
- 
++#ifndef _UPNPCONTROL_H
++#define _UPNPCONTROL_H
 +
-Index: src/vidalia/config/serversettings.h
-===================================================================
---- src/vidalia/config/serversettings.h	(revision 2465)
-+++ src/vidalia/config/serversettings.h	(working copy)
-@@ -20,6 +20,10 @@
- #include "abstracttorsettings.h"
- #include "exitpolicy.h"
- 
++#include <QObject>
++
 +#define STATICLIB
 +#include <miniupnpc/miniwget.h>
 +#include <miniupnpc/miniupnpc.h>
 +#include <miniupnpc/upnpcommands.h>
- 
- class ServerSettings : public AbstractTorSettings
- {
-@@ -89,9 +93,21 @@
-   virtual QVariant torValue(const QString &key) const;
- 
- private:
++
++class UPNPControl : public QObject
++{
++  Q_OBJECT
++
++public:
++  static UPNPControl* Instance();
++  void forwardPort(int port);
++protected:
++  UPNPControl();
++private:
++  static UPNPControl* pInstance;
++
 +  /** Used by miniupnpc library */
 +  struct UPNPUrls urls;
 +  struct IGDdatas data;
@@ -163,14 +245,6 @@
 +  void init_upnp();
 +  void upnp_add_redir (const char * addr, int port);
 +  void upnp_rem_redir(int port);
++};
 +
-   /** Returns Tor-recognizable configuration keys and current values. */
-   QHash<QString,QString> confValues();
-+
-+  /** Configure UPnP device to forward DirPort and ORPort */
-+  void configurePortForwarding();
- };
- 
- #endif
- 
-+
++#endif 



More information about the tor-commits mailing list