[tor-commits] [vidalia/alpha] First part of interfacing TorControl

chiiph at torproject.org chiiph at torproject.org
Sat Jul 2 21:53:47 UTC 2011


commit 2de86992bd17a018a3d6efc80944259ffb2d1885
Author: Tomas Touceda <chiiph at torproject.org>
Date:   Mon Jun 13 11:02:45 2011 -0300

    First part of interfacing TorControl
---
 .../plugin/prototypes/TorControlPrototype.cpp      |  463 ++++++++++++++++++++
 .../plugin/prototypes/TorControlPrototype.h        |  350 +++++++++++++++
 2 files changed, 813 insertions(+), 0 deletions(-)

diff --git a/src/vidalia/plugin/prototypes/TorControlPrototype.cpp b/src/vidalia/plugin/prototypes/TorControlPrototype.cpp
new file mode 100644
index 0000000..75e08d5
--- /dev/null
+++ b/src/vidalia/plugin/prototypes/TorControlPrototype.cpp
@@ -0,0 +1,463 @@
+#include "TorControlPrototype.h"
+
+TorControlPrototype::TorControlPrototype()
+  : QObject(), QScriptable() {}
+
+void 
+TorControlPrototype::start(const QString &tor, const QStringList &args)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    obj->start(tor, args);
+}
+
+bool 
+TorControlPrototype::stop(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->stop(errmsg);
+}
+
+bool 
+TorControlPrototype::isRunning()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->isRunning();
+}
+
+bool 
+TorControlPrototype::isVidaliaRunningTor()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->isVidaliaRunningTor();
+}
+
+void 
+TorControlPrototype::closeTorStdout()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    obj->closeTorStdout();
+}
+
+void 
+TorControlPrototype::connect(const QHostAddress &address, quint16 port)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    obj->connect(address, port);
+}
+
+void 
+TorControlPrototype::connect(const QString &path)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    obj->connect(path);
+}
+
+void 
+TorControlPrototype::disconnect()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    obj->disconnect();
+}
+
+bool 
+TorControlPrototype::isConnected()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->isConnected();
+}
+
+bool 
+TorControlPrototype::authenticate(const QByteArray cookie, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->authenticate(cookie, errmsg);
+}
+
+bool 
+TorControlPrototype::authenticate(const QString &password = QString(), QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->authenticate(password, errmsg);
+}
+
+ProtocolInfo 
+TorControlPrototype::protocolInfo(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->protocolInfo(errmsg);
+}
+
+BootstrapStatus 
+TorControlPrototype::bootstrapStatus(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->bootstrapStatus(errmsg);
+}
+
+bool 
+TorControlPrototype::isCircuitEstablished()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->isCircuitEstablished();
+}
+
+bool 
+TorControlPrototype::getInfo(QHash<QString,QString> &map, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getInfo(map, errmsg);
+}
+
+bool 
+TorControlPrototype::getInfo(QString key, QString &val, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getInfo(key, val, errmsg);
+}
+
+QVariantMap 
+TorControlPrototype::getInfo(const QStringList &keys, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getInfo(keys, errmsg);
+}
+
+QVariant 
+TorControlPrototype::getInfo(const QString &key, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getInfo(key, errmsg);
+}
+
+bool 
+TorControlPrototype::signal(TorSignal::Signal sig, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->signal(sig, errmsg);
+}
+
+QHostAddress 
+TorControlPrototype::getSocksAddress(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getSocksAddress(errmsg);
+}
+
+QStringList 
+TorControlPrototype::getSocksAddressList(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getSocksAddressList(errmsg);
+}
+
+quint16 
+TorControlPrototype::getSocksPort(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getSocksPort(errmsg);
+}
+
+QList
+TorControlPrototype::<quint16> getSocksPortList(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->quint16> getSocksPortList(errmsg);
+}
+
+QString 
+TorControlPrototype::getTorVersionString()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getTorVersionString();
+}
+
+quint32 
+TorControlPrototype::getTorVersion()
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getTorVersion();
+}
+
+bool 
+TorControlPrototype::setEvent(TorEvents::Event e, bool add = true, bool set = true, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->setEvent(e, add, set, errmsg);
+}
+
+bool 
+TorControlPrototype::setEvents(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->setEvents(errmsg);
+}
+
+bool 
+TorControlPrototype::setConf(QHash<QString,QString> map, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->setConf(map, errmsg);
+}
+
+bool 
+TorControlPrototype::setConf(QString key, QString value, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    returb obj->setConf(key, value, errmsg);
+}
+
+bool 
+TorControlPrototype::setConf(QString keyAndValue, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->setConf(keyAndValue, errmsg);
+}
+
+bool 
+TorControlPrototype::getConf(QHash<QString,QString> &map, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getConf(map, errmsg);
+}
+
+bool 
+TorControlPrototype::getConf(QHash<QString,QStringList> &map, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getConf(map, errmsg);
+}
+
+bool 
+TorControlPrototype::getConf(QString key, QString &value, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getConf(key, value, errmsg);
+}
+
+bool 
+TorControlPrototype::getConf(QString key, QStringList &value, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getConf(key, value, errmsg);
+}
+
+QVariantMap 
+TorControlPrototype::getConf(const QStringList &keys, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getConf(keys, errmsg);
+}
+
+QVariant 
+TorControlPrototype::getConf(const QString &key, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getConf(key, errmsg);
+}
+
+QString 
+TorControlPrototype::getHiddenServiceConf(const QString &key, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getHiddenServiceConf(key, errmsg);
+}
+
+bool 
+TorControlPrototype::saveConf(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->saveConf(errmsg);
+}
+
+bool 
+TorControlPrototype::resetConf(QStringList keys, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->resetConf(keys, errmsg);
+}
+
+bool 
+TorControlPrototype::resetConf(QString key, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->resetConf(key, errmsg);
+}
+
+QStringList 
+TorControlPrototype::getRouterDescriptorText(const QString &id, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getRouterDescriptorText(id, errmsg);
+}
+
+RouterDescriptor 
+TorControlPrototype::getRouterDescriptor(const QString &id, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getRouterDescriptor(id, errmsg);
+}
+
+RouterStatus 
+TorControlPrototype::getRouterStatus(const QString &id, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getRouterStatus(id, errmsg);
+}
+
+NetworkStatus 
+TorControlPrototype::getNetworkStatus(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getNetworkStatus(errmsg);
+}
+
+DescriptorAnnotations 
+TorControlPrototype::getDescriptorAnnotations(const QString &id, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getDescriptorAnnotations(id, errmsg);
+}
+
+CircuitList 
+TorControlPrototype::getCircuits(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getCircuits(errmsg);
+}
+
+StreamList 
+TorControlPrototype::getStreams(QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getStreams(errmsg);
+}
+
+AddressMap 
+TorControlPrototype::getAddressMap(AddressMap::AddressMapType type = AddressMap::AddressMapAll, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->getAddressMap(type, errmsg);
+}
+
+QString 
+TorControlPrototype::ipToCountry(const QHostAddress &ip, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->ipToCountry(ip, errmsg);
+}
+
+bool 
+TorControlPrototype::closeCircuit(const CircuitId &circId, bool ifUnused = false, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->closeCircuit(circId, ifUnused, errmsg);
+}
+
+bool 
+TorControlPrototype::closeStream(const StreamId &streamId, QString *errmsg = 0)
+{
+  TorControl *obj = qscriptvalue_cast<TorControl *>(thisObject());
+
+  if(obj)
+    return obj->closeStream(streamId, errmsg);
+}
diff --git a/src/vidalia/plugin/prototypes/TorControlPrototype.h b/src/vidalia/plugin/prototypes/TorControlPrototype.h
new file mode 100644
index 0000000..0327b74
--- /dev/null
+++ b/src/vidalia/plugin/prototypes/TorControlPrototype.h
@@ -0,0 +1,350 @@
+/*
+**  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.torproject.org/projects/vidalia.html. 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 TorControlPrototype.h
+** \brief Object for interacting with the Tor process and control interface
+*/
+
+#ifndef _TORCONTROLPROTO_H
+#define _TORCONTROLPROTO_H
+
+#include <QtScript>
+
+#include "TorControl.h"
+
+class TorControlPrototype : public QObject, QScriptable
+{
+  Q_OBJECT
+  
+public:
+  TorControlPrototype();
+
+  /** Start the Tor process */
+  Q_INVOKABLE void start(const QString &tor, const QStringList &args);
+  /** Stop the Tor process */
+  Q_INVOKABLE bool stop(QString *errmsg = 0);
+  /** Detect if the Tor process is running */
+  Q_INVOKABLE bool isRunning();
+  /** Detects if the Tor process is running under Vidalia. */
+  Q_INVOKABLE bool isVidaliaRunningTor();
+  /** Stops reading log messages from the Tor process's stdout. This has no
+   * effect if isVidaliaRunningTor() is false. */
+  Q_INVOKABLE void closeTorStdout();
+
+  /** Connect to Tor's control socket */
+  Q_INVOKABLE void connect(const QHostAddress &address, quint16 port);
+  Q_INVOKABLE void connect(const QString &path);
+  /** Disconnect from Tor's control socket */
+  Q_INVOKABLE void disconnect();
+  /** Check if we're connected to Tor's control socket */
+  Q_INVOKABLE bool isConnected();
+  /** Sends an authentication cookie to Tor. */
+  Q_INVOKABLE bool authenticate(const QByteArray cookie, QString *errmsg = 0);
+  /** Sends an authentication password to Tor. */
+  Q_INVOKABLE bool authenticate(const QString &password = QString(), QString *errmsg = 0);
+  
+  /** Sends a PROTOCOLINFO command to Tor and parses the response. */
+  Q_INVOKABLE ProtocolInfo protocolInfo(QString *errmsg = 0);
+
+  /** Returns the Tor software's current bootstrap phase and status. */
+  Q_INVOKABLE BootstrapStatus bootstrapStatus(QString *errmsg = 0);
+
+  /** Returns true if Tor either has an open circuit or (on Tor >= 
+   * 0.2.0.1-alpha) has previously decided it's able to establish a circuit. */
+  Q_INVOKABLE bool isCircuitEstablished();
+
+  /** Sends a GETINFO message to Tor based on the given keys */
+  Q_INVOKABLE bool getInfo(QHash<QString,QString> &map, QString *errmsg = 0);
+  /** Sends a GETINFO message for a single info value to Tor */
+  Q_INVOKABLE bool getInfo(QString key, QString &val, QString *errmsg = 0);
+
+  /** Sends a GETINFO message to Tor using the given list of <b>keys</b> and
+   * returns a QVariantMap containing the specified keys and their values as
+   * returned by Tor. Returns a default constructed QVariantMap on failure. */
+  Q_INVOKABLE QVariantMap getInfo(const QStringList &keys, QString *errmsg = 0);
+  /** Sends a GETINFO message to Tor with a single <b>key</b> and returns a
+   * QVariant containing the value returned by Tor. Returns a default
+   * constructed QVariant on failure. */
+  Q_INVOKABLE QVariant getInfo(const QString &key, QString *errmsg = 0);
+
+  /** Sends a signal to Tor */
+  Q_INVOKABLE bool signal(TorSignal::Signal sig, QString *errmsg = 0);
+ 
+  /** Returns an address on which Tor is listening for application
+   * requests. If none are available, a null QHostAddress is returned. */
+  Q_INVOKABLE QHostAddress getSocksAddress(QString *errmsg = 0);
+  /** Returns a (possibly empty) list of all currently configured 
+   * SocksListenAddress entries. */
+  Q_INVOKABLE QStringList getSocksAddressList(QString *errmsg = 0);
+  /** Returns a valid SOCKS port for Tor, or 0 if Tor is not accepting
+   * application requests. */
+  Q_INVOKABLE quint16 getSocksPort(QString *errmsg = 0);
+  /** Returns a list of all currently configured SOCKS ports. If Tor is not
+   * accepting any application connections, an empty list will be returned. */
+  Q_INVOKABLE QList<quint16> getSocksPortList(QString *errmsg = 0);
+
+  /** Returns Tor's version as a string. */
+  Q_INVOKABLE QString getTorVersionString();
+  /** Returns Tor's version as a numeric value. */
+  Q_INVOKABLE quint32 getTorVersion();
+
+  /** Sets an event and its handler. If add is true, then the event is added,
+   * otherwise it is removed. If set is true, then the given event will be
+   * registered with Tor. */
+  Q_INVOKABLE bool setEvent(TorEvents::Event e, bool add = true, bool set = true,
+                QString *errmsg = 0);
+  /** Register events of interest with Tor */
+  Q_INVOKABLE bool setEvents(QString *errmsg = 0);
+
+  /** Sets each configuration key in <b>map</b> to the value associated with its key. */
+  Q_INVOKABLE bool setConf(QHash<QString,QString> map, QString *errmsg = 0);
+  /** Sets a single configuration key to the given value. */
+  Q_INVOKABLE bool setConf(QString key, QString value, QString *errmsg = 0);
+  /** Sets a single configuration string that is formatted <key=escaped value>. */
+  Q_INVOKABLE bool setConf(QString keyAndValue, QString *errmsg = 0);
+  /** Gets values for a set of configuration keys, each of which has a single
+   * value. */
+  Q_INVOKABLE bool getConf(QHash<QString,QString> &map, QString *errmsg = 0);
+  /** Gets a set of configuration keyvalues and stores them in <b>map</b>. */
+  Q_INVOKABLE bool getConf(QHash<QString,QStringList> &map, QString *errmsg = 0);
+  /** Gets a single configuration value for <b>key</b>. */
+  Q_INVOKABLE bool getConf(QString key, QString &value, QString *errmsg = 0);
+  /** Gets a list of configuration values for <b>key</b>. */
+  Q_INVOKABLE bool getConf(QString key, QStringList &value, QString *errmsg = 0);
+
+  /** Sends a GETCONF message to Tor using the given list of <b>keys</b> and
+   * returns a QVariantMap containing the specified keys and their values as
+   * returned by Tor. Returns a default constructed QVariantMap on failure. */
+  Q_INVOKABLE QVariantMap getConf(const QStringList &keys, QString *errmsg = 0);
+  /** Sends a GETCONF message to Tor with a single <b>key</b> and returns a
+   * QVariant containing the value returned by Tor. Returns a default
+   * constructed QVariant on failure. */
+  Q_INVOKABLE QVariant getConf(const QString &key, QString *errmsg = 0);
+  /** Sends a GETCONF message to Tor with the single key and returns a QString
+   * containing the value returned by Tor */
+  Q_INVOKABLE QString getHiddenServiceConf(const QString &key, QString *errmsg = 0);
+  
+  /** Asks Tor to save the current configuration to its torrc */
+  Q_INVOKABLE bool saveConf(QString *errmsg = 0);
+  /** Tells Tor to reset the given configuration keys back to defaults. */
+  Q_INVOKABLE bool resetConf(QStringList keys, QString *errmsg = 0);
+  /** Tells Tor to reset a configuration key back to its default value. */
+  Q_INVOKABLE bool resetConf(QString key, QString *errmsg = 0);
+
+  /** Returns an unparsed router descriptor for the router whose fingerprint
+   * matches <b>id</b>. The returned text can later be parsed by the
+   * RouterDescriptor class. If <b>id</b> is invalid, then an empty
+   * QStringList is returned. */
+  Q_INVOKABLE QStringList getRouterDescriptorText(const QString &id, QString *errmsg = 0);
+  /** Returns the descriptor for the router whose fingerprint matches
+   * <b>id</b>. If <b>id</b> is invalid or the router's descriptor cannot be
+   * parsed, then an invalid RouterDescriptor is returned. */
+  Q_INVOKABLE RouterDescriptor getRouterDescriptor(const QString &id, QString *errmsg = 0);
+  /** Returns the status of the router whose fingerprint matches <b>id</b>. If
+   * <b>id</b> is invalid or the router's status cannot be parsed, then an
+   * invalid RouterStatus is returned. */
+  Q_INVOKABLE RouterStatus getRouterStatus(const QString &id, QString *errmsg = 0);
+  /** Returns a RouterStatus object for every known router in the network. If
+   * the network status document cannot be parsed, then an empty NetworkStatus
+   * is returned. */
+  Q_INVOKABLE NetworkStatus getNetworkStatus(QString *errmsg = 0);
+  /** Returns the annotations for the router whose fingerprint matches
+   * <b>id</b>. If <b>id</b> is invalid or the router's descriptor cannot be
+   * parsed, then an empty DescriptorAnnotations is returned and
+   * <b>errmsg</b> is set if it's not NULL. (Tor >= 0.2.0.13-alpha only) */
+  Q_INVOKABLE DescriptorAnnotations getDescriptorAnnotations(const QString &id,
+                                                 QString *errmsg = 0);
+
+  /** Gets a list of current circuits. */
+  Q_INVOKABLE CircuitList getCircuits(QString *errmsg = 0);
+  /** Gets a list of current streams. */
+  Q_INVOKABLE StreamList getStreams(QString *errmsg = 0);
+  
+  /** Gets a list of address mappings of the type specified by <b>type</b>
+   * (defaults to <i>AddressMapAll</i>. */
+  Q_INVOKABLE AddressMap getAddressMap(
+    AddressMap::AddressMapType type = AddressMap::AddressMapAll,
+    QString *errmsg = 0);
+
+  /** Gets the ISO-3166 two-letter country code for <b>ip</b> from Tor.
+   * Returns a default-constructed QString on failure or if a country code
+   * is not known for <b>ip</b>. On failure, <b>errmsg</b> will be set if
+   * it's not NULL. */
+  Q_INVOKABLE QString ipToCountry(const QHostAddress &ip, QString *errmsg = 0);
+
+public slots:
+  /** Closes the circuit specified by <b>circId</b>. If <b>ifUnused</b> is
+   * true, then the circuit will not be closed unless it is unused. */
+  bool closeCircuit(const CircuitId &circId, bool ifUnused = false,
+                    QString *errmsg = 0);
+  /** Closes the stream specified by <b>streamId</b>. */
+  bool closeStream(const StreamId &streamId, QString *errmsg = 0);
+
+signals:
+  /** Emitted when the Tor process has started */
+  void started();
+  /** Emitted when the Tor process fails to start. */
+  void startFailed(QString errmsg);
+  /** Emitted when the Tor process has stopped */
+  void stopped(int exitCode, QProcess::ExitStatus exitStatus);
+  /** Emitted when the Tor process has stopped. */
+  void stopped();
+  /** Emitted when the controller has connected to Tor */
+  void connected();
+  /** Emitted when the controller failed to connect to Tor. */
+  void connectFailed(QString errmsg);
+  /** Emitted when the controller has disconnected from Tor */
+  void disconnected();
+  /** Emitted when the control socket is connected and authenticated. */
+  void authenticated();
+  /** Emitted when Tor rejects our authentication attempt. */
+  void authenticationFailed(QString errmsg);
+
+  /** Emitted when Tor writes the message <b>msg</b> to the control port
+   * with message severity <b>level</b>.
+   */
+  void logMessage(tc::Severity level, const QString &msg);
+
+  /** Emitted when Tor sends a bandwidth usage update (roughly once every
+   * second). <b>bytesReceived</b> is the number of bytes read by Tor over
+   * the previous second and <b>bytesWritten</b> is the number of bytes
+   * sent over the same interval.
+   */
+  void bandwidthUpdate(quint64 bytesReceived, quint64 bytesSent);
+
+  /** Emitted when the stream status of <b>stream</b> has changed.
+   */
+  void streamStatusChanged(const Stream &stream);
+
+  /** Emitted when the circuit status of <b>circuit</b> has changed.
+   */
+  void circuitStatusChanged(const Circuit &circuit);
+
+  /** Emitted when Tor has mapped the address <b>from</b> to the address
+   * <b>to</b>. <b>expires</b> indicates the time at which when the address
+   * mapping will no longer be considered valid.
+   */
+  void addressMapped(const QString &from, const QString &to,
+                     const QDateTime &expires);
+
+  /** Emitted when Tor has received one or more new router descriptors.
+   * <b>ids</b> contains a list of digests of the new descriptors.
+   */
+  void newDescriptors(const QStringList &ids);
+
+  /** Indicates Tor has been able to successfully establish one or more
+   * circuits.
+   */
+  void circuitEstablished();
+
+  /** Indicates that Tor has decided the user's Tor software <b>version</b>
+   * is no longer recommended for some <b>reason</b>. <b>recommended</b> is
+   * a list of Tor software versions that are considered current.
+   */
+  void dangerousTorVersion(tc::TorVersionStatus reason,
+                           const QString &version,
+                           const QStringList &recommended);
+
+  /** Emitted during Tor's startup process to indicate how far in its
+   * bootstrapping process it has progressed. <b>status</b> may indicate
+   * the current bootstrapping stage or an error during bootstrapping.
+   */
+  void bootstrapStatusChanged(const BootstrapStatus &status);
+
+  /** Emitted when the user attempts to establish a connection to some
+   * destination on port <b>port</b>, which is a port known to use
+   * plaintext connections (as determined by Tor's WarnPlaintextPorts and
+   * RejectPlaintextPorts torrc options). <b>rejected</b> indicates whether
+   * Tor rejected the connection or permitted it to connect anyway.
+   */
+  void dangerousPort(quint16 port, bool rejected);
+
+  /** Emitted when Tor detects a problem with a SOCKS connection from the
+   * user, such as a bad hostname, dangerous SOCKS protocol type, or a bad
+   * hostname. <b>type</b> indicates the type of error encountered and
+   * <b>destination</b> (if non-empty) specifies the attempted connection
+   * destination address or hostname.
+   */
+  void socksError(tc::SocksError type, const QString &destination);
+
+  /** Emitted when Tor decides the client's external IP address has changed
+   * to <b>ip</b>. If <b>hostname</b> is non-empty, Tor obtained the new
+   * value for <b>ip</b> by resolving <b>hostname</b>. 
+   */
+  void externalAddressChanged(const QHostAddress &ip, const QString &hostname);
+
+  /** Indicates that Tor has determined the client's clock is potentially
+   * skewed by <b>skew</b> seconds relative to <b>source</b>.
+   */
+  void clockSkewed(int skew, const QString &source);
+
+  /** Emitted when Tor has encountered an internal bug. <b>reason</b> is
+   * Tor's description of the bug.
+   */
+  void bug(const QString &reason);
+
+  /** Emitted when Tor determines that the user's DNS provider is providing
+   * an address for non-existent domains when it should really be saying
+   * "NXDOMAIN".
+   */
+  void dnsHijacked();
+
+  /** Emitted when Tor determines that the user's DNS provider is providing
+   * a hijacked address even for well-known websites.
+   */
+  void dnsUseless();
+
+  /** Indicates Tor has started testing the reachability of its OR port 
+   * using the IP address <b>ip</b> and port <b>port</b>.
+   */
+  void checkingOrPortReachability(const QHostAddress &ip, quint16 port);
+
+  /** Tor has completed testing the reachability of its OR port using
+   * the IP address <b>ip</b> and port <b>port</b>. If the user's OR port
+   * was reachable, <b>reachable</b> will be set to true.
+   */
+  void orPortReachabilityFinished(const QHostAddress &ip, quint16 port,
+                                  bool reachable);
+
+  /** Indicates Tor has started testing the reachability of its directory
+   * port using the IP address <b>ip</b> and port <b>port</b>.
+   */
+  void checkingDirPortReachability(const QHostAddress &ip, quint16 port);
+
+  /** Tor has completed testing the reachability of its directory port using
+   * the IP address <b>ip</b> and port <b>port</b>. If the user's directory
+   * port was reachable, <b>reachable</b> will be set to true.
+   */
+  void dirPortReachabilityFinished(const QHostAddress &ip, quint16 port,
+                                   bool reachable);
+
+  /** Emitted when the directory authority with IP address <b>ip</b> and
+   * port <b>port</b> rejected the user's server descriptor. <b>reason</b>
+   * describes why the descriptor was rejected (e.g., malformed, skewed
+   * clock, etc.).
+   */
+  void serverDescriptorRejected(const QHostAddress &ip, quint16 port,
+                                const QString &reason);
+
+  /** Emitted when the directory authority with IP address <b>ip</b> and
+   * port <b>port</b> accepted the user's server descriptor.
+   */
+  void serverDescriptorAccepted(const QHostAddress &ip, quint16 port);
+
+  /** Emitted when at least one directory authority has accepted the user's
+   * server descriptor.
+   */
+  void serverDescriptorAccepted();
+};
+
+#endif
+
+





More information about the tor-commits mailing list