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

[or-cvs] r13266: Patch to Vidalia for starting and stopping Polipo along with (torbrowser/trunk/src/current-patches)



Author: sjm217
Date: 2008-01-24 18:59:31 -0500 (Thu, 24 Jan 2008)
New Revision: 13266

Added:
   torbrowser/trunk/src/current-patches/vidalia-startproxy.patch
Log:
Patch to Vidalia for starting and stopping Polipo along with Vidalia (ProxyExecutable option)

Added: torbrowser/trunk/src/current-patches/vidalia-startproxy.patch
===================================================================
--- torbrowser/trunk/src/current-patches/vidalia-startproxy.patch	                        (rev 0)
+++ torbrowser/trunk/src/current-patches/vidalia-startproxy.patch	2008-01-24 23:59:31 UTC (rev 13266)
@@ -0,0 +1,429 @@
+Index: src/vidalia/browserprocess.cpp
+===================================================================
+--- src/vidalia/browserprocess.cpp	(revision 2320)
++++ src/vidalia/browserprocess.cpp	(working copy)
+@@ -1,63 +0,0 @@
+-/****************************************************************
+- *  This file was originally written by Steven J. Murdoch, and 
+- *  modified by Matt Edman. It is distributed under the following
+- *  license:
+- *
+- *  Copyright (C) 2007, Matt Edman
+- *  Copyright (C) 2007, Steven J. Murdoch 
+- *                      <http://www.cl.cam.ac.uk/users/sjm217/>
+- *
+- *  This program is free software; you can redistribute it and/or
+- *  modify it under the terms of the GNU General Public License
+- *  as published by the Free Software Foundation; either version 2
+- *  of the License, or (at your option) any later version.
+- *
+- *  This program 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 General Public License for more details.
+- *
+- *  You should have received a copy of the GNU General Public License
+- *  along with this program; if not, write to the Free Software
+- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- *  Boston, MA  02110-1301, USA.
+- ****************************************************************/
+-
+-/**
+- * \file browserprocess.cpp
+- * \version $Id$
+- * \brief Invokes a web browser process (originally by Steven. J. Murdoch)
+- */
+-
+-#include <QString>
+-  
+-#include "browserprocess.h"
+-
+-
+-/** Default constructor */
+-BrowserProcess::BrowserProcess(QObject *parent)
+-: QProcess(parent)
+-{
+-  // Call error handling routine on errors
+-  QObject::connect(this, SIGNAL(error(QProcess::ProcessError)),
+-                   this, SLOT(onError(QProcess::ProcessError)));
+-}
+-
+-/** Start the specified application. */
+-void
+-BrowserProcess::start(const QString &app, const QStringList &args) 
+-{
+-  // Start the specified application
+-  QProcess::start(app, args, QIODevice::ReadOnly | QIODevice::Text);
+-}
+-
+-/** Invoked when underlying QProcess fails. */
+-void
+-BrowserProcess::onError(QProcess::ProcessError error)
+-{
+-  // Pass up error messages on startup, but ignore the rest
+-  if (error == QProcess::FailedToStart) {
+-    emit startFailed(errorString());
+-  }
+-}
+-
+Index: src/vidalia/browserprocess.h
+===================================================================
+--- src/vidalia/browserprocess.h	(revision 2320)
++++ src/vidalia/browserprocess.h	(working copy)
+@@ -1,57 +0,0 @@
+-/****************************************************************
+- *  This file was originally written by Steven J. Murdoch, and 
+- *  modified by Matt Edman. It is distributed under the following
+- *  license:
+- * 
+- *  Copyright (C) 2007, Matt Edman
+- *  Copyright (C) 2007, Steven J. Murdoch 
+- *                      <http://www.cl.cam.ac.uk/users/sjm217/>
+- *
+- *  This program is free software; you can redistribute it and/or
+- *  modify it under the terms of the GNU General Public License
+- *  as published by the Free Software Foundation; either version 2
+- *  of the License, or (at your option) any later version.
+- *
+- *  This program 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 General Public License for more details.
+- *
+- *  You should have received a copy of the GNU General Public License
+- *  along with this program; if not, write to the Free Software
+- *  Foundation, Inc., 51 Franklin Street, Fifth Floor, 
+- *  Boston, MA  02110-1301, USA.
+- ****************************************************************/
+-
+-/**
+- * \file browserprocess.cpp
+- * \version $Id$ 
+- * \brief Invokes a web browser process (originally by Steven. J. Murdoch)
+- */
+-
+-#ifndef _BROWSERPROCESS_H
+-#define _BROWSERPROCESS_H
+-
+-#include <QProcess>
+-
+-
+-class BrowserProcess : public QProcess
+-{
+-  Q_OBJECT
+-
+-public:
+-  /** Default constructor */
+-  BrowserProcess(QObject *parent = 0);
+-  /** Start the specified application. */
+-  void start(const QString &app, const QStringList &args);
+-
+-private slots:
+-  /** Invoked when underlying QProcess fails. */
+-  void onError(QProcess::ProcessError error);
+-
+-signals:
+-  /** Invoked when start() fails. */
+-  void startFailed(const QString &errorMessage);
+-};
+-
+-#endif
+Index: src/vidalia/CMakeLists.txt
+===================================================================
+--- src/vidalia/CMakeLists.txt	(revision 2320)
++++ src/vidalia/CMakeLists.txt	(working copy)
+@@ -182,7 +182,7 @@
+   vclicklabel.cpp
+   vidaliawindow.cpp
+   vmessagebox.cpp
+-  browserprocess.cpp
++  helperprocess.cpp
+ )
+ qt4_wrap_cpp(vidalia_SRCS
+   vidalia.h
+@@ -191,7 +191,7 @@
+   vclicklabel.h
+   vidaliawindow.h
+   vmessagebox.h
+-  browserprocess.h
++  helperprocess.h
+ )
+ 
+ ## Specify all the Qt Designer .ui files
+@@ -288,3 +288,4 @@
+   install(FILES vidalia.desktop DESTINATION share/applications)
+ endif(NOT WIN32 AND NOT APPLE)
+ 
++
+Index: src/vidalia/config/vidaliasettings.cpp
+===================================================================
+--- src/vidalia/config/vidaliasettings.cpp	(revision 2320)
++++ src/vidalia/config/vidaliasettings.cpp	(working copy)
+@@ -43,6 +43,7 @@
+ #define SETTING_DATA_DIRECTORY      "DataDirectory"
+ #define SETTING_SHOW_MAINWINDOW_AT_START  "ShowMainWindowAtStart"
+ #define SETTING_BROWSER_EXECUTABLE  "BrowserExecutable"
++#define SETTING_PROXY_EXECUTABLE  "ProxyExecutable"
+ 
+ #if defined(Q_OS_WIN32)
+ #define STARTUP_REG_KEY        "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
+@@ -74,6 +75,7 @@
+   setDefault(SETTING_RUN_TOR_AT_START, true);
+   setDefault(SETTING_SHOW_MAINWINDOW_AT_START, true);
+   setDefault(SETTING_BROWSER_EXECUTABLE, "");
++  setDefault(SETTING_PROXY_EXECUTABLE, "");
+ }
+ 
+ /** Gets the currently preferred language code for Vidalia. */
+@@ -186,3 +188,18 @@
+   setValue(SETTING_BROWSER_EXECUTABLE, browserExecutable);
+ }
+ 
++/** Returns a fully-qualified path to the proxy server, including the
++ * executable name. */
++QString
++VidaliaSettings::getProxyExecutable() const
++{
++  return QDir::convertSeparators(value(SETTING_PROXY_EXECUTABLE).toString());
++}
++
++/** Sets the location and name of the proxy server executable to the given string.
++ * If set to the empty string, the proxy will not be started. */
++void
++VidaliaSettings::setProxyExecutable(const QString &proxyExecutable)
++{
++  setValue(SETTING_PROXY_EXECUTABLE, proxyExecutable);
++}
+Index: src/vidalia/config/vidaliasettings.h
+===================================================================
+--- src/vidalia/config/vidaliasettings.h	(revision 2320)
++++ src/vidalia/config/vidaliasettings.h	(working copy)
+@@ -78,6 +78,14 @@
+   /** Sets the location and name of the web browser executable to the given string.
+    * If set to the empty string, the browser will not be started. */
+   void setBrowserExecutable(const QString &browserExecutable);
++
++  /** Returns a fully-qualified path to the proxy server, including the
++   * executable name. */
++  QString getProxyExecutable() const;
++
++  /** Sets the location and name of the proxy server executable to the given string.
++   * If set to the empty string, the proxy will not be started. */
++  void setProxyExecutable(const QString &proxyExecutable);
+ };
+ 
+ #endif
+Index: src/vidalia/helperprocess.cpp
+===================================================================
+--- src/vidalia/helperprocess.cpp	(revision 2320)
++++ src/vidalia/helperprocess.cpp	(working copy)
+@@ -24,18 +24,18 @@
+  ****************************************************************/
+ 
+ /**
+- * \file browserprocess.cpp
++ * \file helperprocess.cpp
+  * \version $Id$
+  * \brief Invokes a web browser process (originally by Steven. J. Murdoch)
+  */
+ 
+ #include <QString>
+   
+-#include "browserprocess.h"
++#include "helperprocess.h"
+ 
+ 
+ /** Default constructor */
+-BrowserProcess::BrowserProcess(QObject *parent)
++HelperProcess::HelperProcess(QObject *parent)
+ : QProcess(parent)
+ {
+   // Call error handling routine on errors
+@@ -45,7 +45,7 @@
+ 
+ /** Start the specified application. */
+ void
+-BrowserProcess::start(const QString &app, const QStringList &args) 
++HelperProcess::start(const QString &app, const QStringList &args) 
+ {
+   // Start the specified application
+   QProcess::start(app, args, QIODevice::ReadOnly | QIODevice::Text);
+@@ -53,7 +53,7 @@
+ 
+ /** Invoked when underlying QProcess fails. */
+ void
+-BrowserProcess::onError(QProcess::ProcessError error)
++HelperProcess::onError(QProcess::ProcessError error)
+ {
+   // Pass up error messages on startup, but ignore the rest
+   if (error == QProcess::FailedToStart) {
+@@ -61,3 +61,4 @@
+   }
+ }
+ 
++
+Index: src/vidalia/helperprocess.h
+===================================================================
+--- src/vidalia/helperprocess.h	(revision 2320)
++++ src/vidalia/helperprocess.h	(working copy)
+@@ -24,24 +24,24 @@
+  ****************************************************************/
+ 
+ /**
+- * \file browserprocess.cpp
++ * \file helperprocess.cpp
+  * \version $Id$ 
+  * \brief Invokes a web browser process (originally by Steven. J. Murdoch)
+  */
+ 
+-#ifndef _BROWSERPROCESS_H
+-#define _BROWSERPROCESS_H
++#ifndef _HELPERPROCESS_H
++#define _HELPERPROCESS_H
+ 
+ #include <QProcess>
+ 
+ 
+-class BrowserProcess : public QProcess
++class HelperProcess : public QProcess
+ {
+   Q_OBJECT
+ 
+ public:
+   /** Default constructor */
+-  BrowserProcess(QObject *parent = 0);
++  HelperProcess(QObject *parent = 0);
+   /** Start the specified application. */
+   void start(const QString &app, const QStringList &args);
+ 
+Index: src/vidalia/mainwindow.cpp
+===================================================================
+--- src/vidalia/mainwindow.cpp	(revision 2320)
++++ src/vidalia/mainwindow.cpp	(working copy)
+@@ -147,13 +147,18 @@
+   _torControl->setEvent(TorEvents::ClientStatus,  this, true);
+   _torControl->setEvent(TorEvents::GeneralStatus, this, true);
+ 
+-  /* Create a new BrowserProcess object, used to start the web browser */
+-  _browserProcess = new BrowserProcess(this);
++  /* Create a new HelperProcess object, used to start the web browser */
++  _browserProcess = new HelperProcess(this);
+   connect(_browserProcess, SIGNAL(finished(int, QProcess::ExitStatus)),
+            this, SLOT(onBrowserFinished(int, QProcess::ExitStatus)));
+   connect(_browserProcess, SIGNAL(startFailed(QString)),
+            this, SLOT(onBrowserFailed(QString)));
+ 
++  /* Create a new HelperProcess object, used to start the proxy server */
++  _proxyProcess = new HelperProcess(this);
++  connect(_proxyProcess, SIGNAL(startFailed(QString)),
++           this, SLOT(onProxyFailed(QString)));
++
+   /* Catch signals when the application is running or shutting down */
+   connect(vApp, SIGNAL(running()), this, SLOT(running()));
+   connect(vApp, SIGNAL(shutdown()), this, SLOT(shutdown()));
+@@ -226,6 +231,9 @@
+     /* If we're supposed to start Tor when Vidalia starts, then do it now */
+     start();
+   }
++
++  /* Start the proxy server, if configured */
++  startProxy();
+ }
+ 
+ /** Terminate the Tor process if it is being run under Vidalia, disconnect all
+@@ -238,6 +246,11 @@
+     _torControl->stop();
+   }
+ 
++  if (_proxyProcess->state() != QProcess::NotRunning) {
++    /* Close the proxy server (Polipo ignores the WM_CLOSE event sent by terminate() so we have to kill() it) */
++    _proxyProcess->kill();
++  }
++
+   /* Disconnect all of the TorControl object's signals */
+   QObject::disconnect(_torControl, 0, 0, 0);
+ 
+@@ -438,6 +451,29 @@
+               VMessageBox::Ok|VMessageBox::Default|VMessageBox::Escape);
+ }
+ 
++/** Starts the proxy server, if appropriately configured */
++void MainWindow::startProxy()
++{
++  VidaliaSettings settings;
++  QString executable = settings.getProxyExecutable();
++  
++  if (!executable.isEmpty())
++    _proxyProcess->start(executable, QStringList());
++}
++
++/** Called when the proxy server fails to start, for example, because
++ * the path specified didn't lead to an executable. */
++void
++MainWindow::onProxyFailed(QString errmsg)
++{
++  Q_UNUSED(errmsg);
++ 
++  /* Display an error message and see if the user wants some help */
++  VMessageBox::warning(this, tr("Error starting proxy server"),
++              tr("Vidalia was unable to start the configured proxy server"),
++              VMessageBox::Ok|VMessageBox::Default|VMessageBox::Escape);
++}
++
+ /** Updates the UI to reflect Tor's current <b>status</b>. Returns the
+  * previously set TorStatus value.*/
+ MainWindow::TorStatus
+@@ -1151,3 +1187,4 @@
+   return "Unknown";
+ }
+ 
++
+Index: src/vidalia/mainwindow.h
+===================================================================
+--- src/vidalia/mainwindow.h	(revision 2320)
++++ src/vidalia/mainwindow.h	(working copy)
+@@ -40,7 +40,7 @@
+ #include "help/browser/helpbrowser.h"
+ #include "network/netviewer.h"
+ #include "ui_mainwindow.h"
+-#include "browserprocess.h"
++#include "helperprocess.h"
+ 
+ 
+ class MainWindow : public VidaliaWindow
+@@ -112,6 +112,8 @@
+   void onBrowserFinished(int exitCode, QProcess::ExitStatus exitStatus);
+   /** Called web the web browser failed to start */
+   void onBrowserFailed(QString errmsg);
++  /** Called when the proxy server fails to start */
++  void onProxyFailed(QString errmsg);
+   
+ private:
+   enum TorStatus {
+@@ -138,6 +140,8 @@
+   TorStatus updateTorStatus(TorStatus status);
+   /** Starts the web browser, if appropriately configured */
+   void startBrowser();
++  /** Starts the proxy server, if appropriately configured */
++  void startProxy();
+   /** Converts a TorStatus enum value to a string for debug logging purposes. */
+   QString toString(TorStatus status);
+   /** Authenticates Vidalia to Tor's control port. */
+@@ -175,8 +179,10 @@
+   ConfigDialog* _configDialog;
+   /** A TorControl object that handles communication with Tor */
+   TorControl* _torControl;
+-  /** A BrowserProcess object that manages the web browser */
+-  BrowserProcess* _browserProcess;
++  /** A HelperProcess object that manages the web browser */
++  HelperProcess* _browserProcess;
++  /** A HelperProcess object that manages the proxy server */
++  HelperProcess* _proxyProcess;
+   /** Remembers the control password between when we start Tor with a hash of
+    * the password and when we need to provide the password itself. */
+   QString _controlPassword;
+@@ -200,3 +206,4 @@
+ 
+ #endif
+ 
++