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

[vidalia-svn] r2639: Merge the UPnP test dialog and related files into trunk. (in vidalia: . trunk trunk/src/vidalia trunk/src/vidalia/config trunk/src/vidalia/res trunk/src/vidalia/res/48x48)



Author: edmanm
Date: 2008-06-01 19:42:57 -0400 (Sun, 01 Jun 2008)
New Revision: 2639

Added:
   vidalia/trunk/LICENSE-LGPLV3
   vidalia/trunk/src/vidalia/config/upnptestdialog.cpp
   vidalia/trunk/src/vidalia/config/upnptestdialog.h
   vidalia/trunk/src/vidalia/config/upnptestdialog.ui
   vidalia/trunk/src/vidalia/res/48x48/modem.png
Modified:
   vidalia/
   vidalia/trunk/LICENSE
   vidalia/trunk/src/vidalia/CMakeLists.txt
   vidalia/trunk/src/vidalia/res/vidalia_common.qrc
Log:
 r413@thebe:  edmanm | 2008-06-01 19:31:12 -0400
 Merge the UPnP test dialog and related files into trunk.



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

Modified: vidalia/trunk/LICENSE
===================================================================
--- vidalia/trunk/LICENSE	2008-06-01 23:42:53 UTC (rev 2638)
+++ vidalia/trunk/LICENSE	2008-06-01 23:42:57 UTC (rev 2639)
@@ -75,6 +75,33 @@
 
 ===================================================================
 
+Vidalia incorporates icons from KDE's Oxygen icon theme. It is
+licensed as follows:
+
+    Copyright (C) 2007 David Vignoni <david@xxxxxxxxxxxxx>
+    Copyright (C) 2007 Johann Ollivier Lapeyre <johann@xxxxxxxxxxxxxxxx>
+    Copyright (C) 2007 Kenneth Wimer <kwwii@xxxxxxxxxxxxxx>
+    Copyright (C) 2007 Nuno Fernades Pinheiro <nf.pinheiro@xxxxxxxxx>
+    Copyright (C) 2007 Riccardo Iaconelli <riccardo@xxxxxxxxxxxxxxxx>
+    Copyright (C) 2007 David Miller <miller@xxxxxxxxxxxxxxxx>
+
+and others
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 3 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+===================================================================
+
 Tor is distributed under this license:
 
 Copyright (c) 2001-2004, Roger Dingledine
@@ -203,3 +230,38 @@
 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 DATABASE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+===============================================================================
+
+Vidalia uses the MiniUPnPc library for UPnP support. It is licensed as
+follows:
+
+  Copyright (c) 2005-2007, Thomas BERNARD 
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials
+      provided with the distribution.
+
+    * Neither the names of the copyright owners nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+

Copied: vidalia/trunk/LICENSE-LGPLV3 (from rev 2591, vidalia/branches/upnp/LICENSE-LGPLV3)
===================================================================
--- vidalia/trunk/LICENSE-LGPLV3	                        (rev 0)
+++ vidalia/trunk/LICENSE-LGPLV3	2008-06-01 23:42:57 UTC (rev 2639)
@@ -0,0 +1,165 @@
+		   GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions. 
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version. 
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+  Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.

Modified: vidalia/trunk/src/vidalia/CMakeLists.txt
===================================================================
--- vidalia/trunk/src/vidalia/CMakeLists.txt	2008-06-01 23:42:53 UTC (rev 2638)
+++ vidalia/trunk/src/vidalia/CMakeLists.txt	2008-06-01 23:42:57 UTC (rev 2639)
@@ -94,10 +94,12 @@
   set(vidalia_SRCS ${vidalia_SRCS}
     config/upnpcontrol.cpp
     config/upnpcontrolthread.cpp
+    config/upnptestdialog.cpp
   )
   qt4_wrap_cpp(vidalia_SRCS
     config/upnpcontrol.h
     config/upnpcontrolthread.h
+    config/upnptestdialog.h
   )
 endif(USE_MINIUPNPC)
 
@@ -204,6 +206,9 @@
   log/messagelog.ui
   network/netviewer.ui
 )
+if (USE_MINIUPNPC)
+  qt4_wrap_ui(vidalia_SRCS config/upnptestdialog.ui)
+endif(USE_MINIUPNPC)
 
 ## Add the resource files (icons, etc.)
 qt4_add_resources(vidalia_SRCS

Copied: vidalia/trunk/src/vidalia/config/upnptestdialog.cpp (from rev 2635, vidalia/branches/upnp/src/vidalia/config/upnptestdialog.cpp)
===================================================================
--- vidalia/trunk/src/vidalia/config/upnptestdialog.cpp	                        (rev 0)
+++ vidalia/trunk/src/vidalia/config/upnptestdialog.cpp	2008-06-01 23:42:57 UTC (rev 2639)
@@ -0,0 +1,160 @@
+/*
+**  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 upnptestdialog.cpp
+** \version $Id: $
+** \brief Dialog that displays the progress of a UPnP configuration test
+*/
+
+#include "upnptestdialog.h"
+
+
+/** Default constructor. <b>orPort</b> and <b>dirPort</b> specify the ports
+ * used to test UPnP port forwarding. The original UPnP state will be restored
+ * when the test dialog is closed. */
+UPNPTestDialog::UPNPTestDialog(quint16 orPort, quint16 dirPort, QWidget *parent)
+  : QDialog(parent), _orPort(orPort), _dirPort(dirPort)
+{
+  ui.setupUi(this);
+  _upnp = UPNPControl::instance();
+
+  ui.buttonBox->setStandardButtons(QDialogButtonBox::Close);
+  
+  ui.progressBar->setValue(0);
+  ui.progressBar->setFormat("");
+  ui.progressBar->setMinimum(0);
+  ui.progressBar->setMaximum(_upnp->discoverTimeout()/500 + 4);
+
+  _discoverTimer.setInterval(500);
+  connect(&_discoverTimer, SIGNAL(timeout()), this, SLOT(discoverTimeout()));
+  connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton*)),
+          this, SLOT(clicked(QAbstractButton*)));
+
+  _upnp->getDesiredState(&_oldDirPort, &_oldOrPort);
+}
+
+/** Shows or hides the dialog based on <b>visible</b>. The UPnP test will be
+ * started when the dialog is first shown. */
+void
+UPNPTestDialog::setVisible(bool visible)
+{
+  QWidget::setVisible(visible);
+
+  if (visible)
+    startTest();
+  else
+    _upnp->setDesiredState(_oldDirPort, _oldOrPort);
+}
+
+/** Initiates a UPnP test. */
+void
+UPNPTestDialog::startTest()
+{
+  ui.buttonBox->setEnabled(false);
+  ui.progressBar->setValue(0);
+
+  connect(UPNPControl::instance(), SIGNAL(stateChanged(UPNPControl::UPNPState)),
+          this, SLOT(upnpStateChanged(UPNPControl::UPNPState)));
+  
+  UPNPControl::instance()->setDesiredState(_dirPort, _orPort);  
+}
+
+/** Called when the UPnP test successfully enables port forwarding. Enables
+ * the Close button, allowing the user to exit the test dialog. */
+void
+UPNPTestDialog::testSuccessful()
+{
+  ui.buttonBox->setEnabled(true);
+  ui.buttonBox->setStandardButtons(QDialogButtonBox::Close);
+
+  disconnect(UPNPControl::instance(), 0, this, 0);
+}
+
+/** Called when the UPnP test fails due to an error. Enables the Close and
+ * Retry buttons, allowing the user to either rerun the test or give up. */
+void
+UPNPTestDialog::testFailed()
+{
+  ui.buttonBox->setEnabled(true);
+  ui.buttonBox->setStandardButtons(QDialogButtonBox::Retry
+                                     | QDialogButtonBox::Close);
+  
+  disconnect(UPNPControl::instance(), 0, this, 0);
+}
+
+/** Updates the progress bar to indicate the device discovery portion of the
+ * test is still in progress. */
+void
+UPNPTestDialog::discoverTimeout()
+{
+  ui.progressBar->setValue(ui.progressBar->value()+1);
+}
+
+/** Updates the test UI based on the UPnP <b>state</b>. */
+void
+UPNPTestDialog::upnpStateChanged(UPNPControl::UPNPState state)
+{
+  switch (state) {
+    case UPNPControl::DiscoverState:
+      _discoverTimer.start();
+      ui.progressBar->setValue(ui.progressBar->value()+1);
+      ui.lblCurrentState->setText(tr("Discovering UPnP-enabled devices"));
+      break;
+
+    case UPNPControl::UpdatingDirPortState:
+      ui.progressBar->setValue(ui.progressBar->value()+1);
+      ui.lblCurrentState->setText(tr("Updating directory port mapping"));
+      break;
+
+    case UPNPControl::UpdatingORPortState:
+      ui.progressBar->setValue(ui.progressBar->value()+1);
+      ui.lblCurrentState->setText(tr("Updating relay port mapping"));
+      break;
+
+    case UPNPControl::ForwardingCompleteState:
+      ui.progressBar->setValue(ui.progressBar->maximum());
+      ui.lblCurrentState->setText(tr("Test completed successfully!"));
+      testSuccessful();
+      break;
+
+    case UPNPControl::ErrorState:
+      ui.progressBar->setValue(ui.progressBar->maximum());
+      ui.lblCurrentState->setText(UPNPControl::instance()->errorString());
+      testFailed();
+      break;
+
+    default:
+      break;
+  }
+  if (state != UPNPControl::DiscoverState)
+    _discoverTimer.stop();
+}
+
+/** Called when a user clicks on a button in the dialog's button box. If Retry
+ * is clicked, another UPnP test will be conducted. If Close is clicked, then
+ * the dialog is closed and the original UPnP state restored. */
+void
+UPNPTestDialog::clicked(QAbstractButton *button)
+{
+  switch (ui.buttonBox->standardButton(button)) {
+    case QDialogButtonBox::Retry:
+      startTest();
+      break;
+
+    case QDialogButtonBox::Close:
+      done(0);
+      break;
+
+    default:
+      break;
+  }
+}
+

Copied: vidalia/trunk/src/vidalia/config/upnptestdialog.h (from rev 2633, vidalia/branches/upnp/src/vidalia/config/upnptestdialog.h)
===================================================================
--- vidalia/trunk/src/vidalia/config/upnptestdialog.h	                        (rev 0)
+++ vidalia/trunk/src/vidalia/config/upnptestdialog.h	2008-06-01 23:42:57 UTC (rev 2639)
@@ -0,0 +1,84 @@
+/*
+**  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 upnptestdialog.h
+** \version $Id: $
+** \brief Dialog that displays the progress of a UPnP configuration test
+*/
+
+#ifndef _UPNPTESTDIALOG_H
+#define _UPNPTESTDIALOG_H
+
+#include <QDialog>
+#include <QAbstractButton>
+#include <QTimer>
+
+#include "ui_upnptestdialog.h"
+#include "upnpcontrol.h"
+
+
+class UPNPTestDialog : public QDialog
+{
+  Q_OBJECT
+
+public:
+  /** Default constructor. <b>orPort</b> and <b>dirPort</b> specify the ports
+   * used to test UPnP port forwarding. The original UPnP state will be
+   * restored when the test dialog is closed. */
+  UPNPTestDialog(quint16 orPort, quint16 dirPort, QWidget *parent = 0);
+
+protected slots:
+  /** Shows or hides the dialog based on <b>visible</b>. The UPnP test will be
+   * started when the dialog is first shown. */
+  void setVisible(bool visible);
+
+  /** Called when a user clicks on a button in the dialog's button box. If
+   * Retry is clicked, another UPnP test will be conducted. If Close is clicked,
+   * then the dialog is closed and the original UPnP state restored. */
+  void clicked(QAbstractButton *button);
+  
+  /** Updates the test UI based on the UPnP <b>state</b>. */
+  void upnpStateChanged(UPNPControl::UPNPState state);
+
+  /** Updates the progress bar to indicate the device discovery portion of the
+   * test is still in progress. */
+  void discoverTimeout();
+
+protected:
+  /** Initiates a UPnP test. */
+  void startTest();
+
+  /** Called when the UPnP test successfully enables port forwarding. Enables
+   * the Close button, allowing the user to exit the test dialog. */
+  void testSuccessful();
+
+  /** Called when the UPnP test fails due to an error. Enables the Close and
+   * Retry buttons, allowing the user to either rerun the test or give up. */
+  void testFailed();
+
+private:
+  /** Pointer to the UPNPControl singleton instance. */
+  UPNPControl *_upnp; 
+  
+  /** Timer used to update the progress bar while during the device discovery
+   * portion of the test. */
+  QTimer _discoverTimer;
+  
+  quint16 _oldOrPort;  /**< Original (pre-test) forwarded ORPort. */
+  quint16 _oldDirPort; /**< Original (pre-test) forwarded DirPort. */
+  quint16 _orPort;     /**< ORPort used during the test. */
+  quint16 _dirPort;    /**< DirPort used during the test. */
+  
+  Ui::UPNPTestDialog ui;
+};
+
+#endif
+

Copied: vidalia/trunk/src/vidalia/config/upnptestdialog.ui (from rev 2630, vidalia/branches/upnp/src/vidalia/config/upnptestdialog.ui)
===================================================================
--- vidalia/trunk/src/vidalia/config/upnptestdialog.ui	                        (rev 0)
+++ vidalia/trunk/src/vidalia/config/upnptestdialog.ui	2008-06-01 23:42:57 UTC (rev 2639)
@@ -0,0 +1,100 @@
+<ui version="4.0" >
+ <class>UPNPTestDialog</class>
+ <widget class="QDialog" name="UPNPTestDialog" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>389</width>
+    <height>150</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Testing UPnP Support</string>
+  </property>
+  <property name="windowIcon" >
+   <iconset resource="../res/vidalia_common.qrc" >:/images/48x48/modem.png</iconset>
+  </property>
+  <property name="modal" >
+   <bool>true</bool>
+  </property>
+  <widget class="QDialogButtonBox" name="buttonBox" >
+   <property name="geometry" >
+    <rect>
+     <x>30</x>
+     <y>110</y>
+     <width>341</width>
+     <height>32</height>
+    </rect>
+   </property>
+   <property name="orientation" >
+    <enum>Qt::Horizontal</enum>
+   </property>
+   <property name="standardButtons" >
+    <set>QDialogButtonBox::Close|QDialogButtonBox::Retry</set>
+   </property>
+   <property name="centerButtons" >
+    <bool>false</bool>
+   </property>
+  </widget>
+  <widget class="QProgressBar" name="progressBar" >
+   <property name="geometry" >
+    <rect>
+     <x>20</x>
+     <y>60</y>
+     <width>351</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <property name="value" >
+    <number>24</number>
+   </property>
+  </widget>
+  <widget class="QLabel" name="lblUpnpPixmap" >
+   <property name="geometry" >
+    <rect>
+     <x>20</x>
+     <y>10</y>
+     <width>51</width>
+     <height>48</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string/>
+   </property>
+   <property name="pixmap" >
+    <pixmap resource="../res/vidalia_common.qrc" >:/images/48x48/modem.png</pixmap>
+   </property>
+  </widget>
+  <widget class="Line" name="line" >
+   <property name="geometry" >
+    <rect>
+     <x>20</x>
+     <y>90</y>
+     <width>351</width>
+     <height>20</height>
+    </rect>
+   </property>
+   <property name="orientation" >
+    <enum>Qt::Horizontal</enum>
+   </property>
+  </widget>
+  <widget class="QLabel" name="lblCurrentState" >
+   <property name="geometry" >
+    <rect>
+     <x>80</x>
+     <y>30</y>
+     <width>291</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text" >
+    <string>Testing Universal Plug &amp; Play Support</string>
+   </property>
+  </widget>
+ </widget>
+ <resources>
+  <include location="../res/vidalia_common.qrc" />
+ </resources>
+ <connections />
+</ui>

Copied: vidalia/trunk/src/vidalia/res/48x48/modem.png (from rev 2590, vidalia/branches/upnp/src/vidalia/res/48x48/modem.png)
===================================================================
(Binary files differ)

Modified: vidalia/trunk/src/vidalia/res/vidalia_common.qrc
===================================================================
--- vidalia/trunk/src/vidalia/res/vidalia_common.qrc	2008-06-01 23:42:53 UTC (rev 2638)
+++ vidalia/trunk/src/vidalia/res/vidalia_common.qrc	2008-06-01 23:42:57 UTC (rev 2639)
@@ -83,6 +83,7 @@
     </qresource>
     <qresource prefix="/images">
         <file>48x48/applications-internet.png</file>
+        <file>48x48/modem.png</file>
         <file>48x48/network-server.png</file>
         <file>48x48/start-tor.png</file>
         <file>48x48/stop-tor.png</file>