[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r2424: * changed communication to Tor controller so that it works w (in vidalia/branches/hidden-services/src: torcontrol vidalia/config)
Author: borkdomenik
Date: 2008-03-20 11:40:47 -0400 (Thu, 20 Mar 2008)
New Revision: 2424
Modified:
vidalia/branches/hidden-services/src/torcontrol/torcontrol.cpp
vidalia/branches/hidden-services/src/torcontrol/torcontrol.h
vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp
vidalia/branches/hidden-services/src/vidalia/config/servicepage.h
vidalia/branches/hidden-services/src/vidalia/config/servicesettings.cpp
Log:
* changed communication to Tor controller so that it works with the newest Trunk version of Tor.
* added a getConf function to torControl.h/.cpp for the hiddenserviceoptions
* some bugfixes (servicesettings)
* get services now by calling the Tor Controller, not anymore by parsing the Torrc file
* modified the parser
Modified: vidalia/branches/hidden-services/src/torcontrol/torcontrol.cpp
===================================================================
--- vidalia/branches/hidden-services/src/torcontrol/torcontrol.cpp 2008-03-19 03:52:17 UTC (rev 2423)
+++ vidalia/branches/hidden-services/src/torcontrol/torcontrol.cpp 2008-03-20 15:40:47 UTC (rev 2424)
@@ -668,6 +668,15 @@
return setConf(map, errmsg);
}
+/** Sets a single configuration string that is formatted <key=escaped value>. */
+bool
+TorControl::setConf(QString keyAndValue, QString *errmsg)
+{
+ QHash<QString,QString> map;
+ map.insert(keyAndValue, "");
+ return setConf(map, errmsg);
+}
+
/** Gets values for a set of configuration keys, each of which has a single
* value. */
bool
@@ -802,6 +811,22 @@
return send(cmd, errmsg);
}
+QString
+TorControl::getHiddenServiceConf(const QString &key, QString *errmsg)
+{
+ ControlCommand cmd("GETCONF");
+ ControlReply reply;
+ QVariantMap confMap;
+
+ cmd.addArgument(key);
+ if (!send(cmd, reply, errmsg))
+ return "";
+
+ return reply.toString();
+
+}
+
+
/** Tells Tor to reset the given configuration keys back to defaults. */
bool
TorControl::resetConf(QStringList keys, QString *errmsg)
Modified: vidalia/branches/hidden-services/src/torcontrol/torcontrol.h
===================================================================
--- vidalia/branches/hidden-services/src/torcontrol/torcontrol.h 2008-03-19 03:52:17 UTC (rev 2423)
+++ vidalia/branches/hidden-services/src/torcontrol/torcontrol.h 2008-03-20 15:40:47 UTC (rev 2424)
@@ -124,6 +124,8 @@
bool setConf(QHash<QString,QString> map, QString *errmsg = 0);
/** Sets a single configuration key to the given value. */
bool setConf(QString key, QString value, QString *errmsg = 0);
+ /** Sets a single configuration string that is formatted <key=escaped value>. */
+ bool setConf(QString keyAndValue, QString *errmsg = 0);
/** Gets values for a set of configuration keys, each of which has a single
* value. */
bool getConf(QHash<QString,QString> &map, QString *errmsg = 0);
@@ -142,6 +144,9 @@
* QVariant containing the value returned by Tor. Returns a default
* constructed QVariant on failure. */
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 */
+ QString getHiddenServiceConf(const QString &key, QString *errmsg);
/** Asks Tor to save the current configuration to its torrc */
bool saveConf(QString *errmsg = 0);
Modified: vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp
===================================================================
--- vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp 2008-03-19 03:52:17 UTC (rev 2423)
+++ vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp 2008-03-20 15:40:47 UTC (rev 2424)
@@ -130,29 +130,18 @@
QString serviceConfString;
QString errmsg = "Error while trying to publish services.";
QListIterator<Service> it(services);
+ bool first = true;
while(it.hasNext()) {
- Service temp = it.next();
- serviceConfString.append(createServiceConfString(temp));
- }
+ Service temp = it.next();
+ serviceConfString.append("hiddenservicedir=" + string_escape(temp.serviceDirectory()) + " ");
+ serviceConfString.append("hiddenserviceport=" + string_escape(temp.virtualPort() +
+ (temp.physicalAddressPort().isEmpty() ? "" : " " + temp.physicalAddressPort()) + " "));
+ /* TODO we promised to _not_ destroy existing advanced configurations
+ * or multiple port configurations. we should better keep that promise. */
+ }
_serviceSettings->apply(serviceConfString, &errmsg);
}
-/** this method generates the configuration string for a service */
-QString
-ServicePage::createServiceConfString(Service temp)
-{
- QString s;
- s.append(temp.serviceDirectory()+"\n");
- s.append("hiddenserviceport "+temp.virtualPort());
- if(temp.physicalAddressPort().isEmpty() == false) {
- s.append(" "+temp.physicalAddressPort());
- }
- s.append("\n");
- s.append("hiddenservicedir ");
- return s;
-}
-
-
/** Loads previously saved settings */
void
ServicePage::load()
@@ -163,19 +152,8 @@
// get all services
_services = new QMap<int, Service>();
QList<Service> _torServices;
- QString conf = "";
- QString directory = _torSettings->getTorrc();
- QFile file(directory);
- if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
- VMessageBox::warning(this, tr("Error"), tr("Trying to read torrc file failed."), VMessageBox::Ok);
- } else {
- QTextStream in(&file);
- while (!in.atEnd()) {
- QString line = in.readLine();
- conf.append(line+"\n");
- }
- }
- _torServices = extractSingleServices(conf);
+ QString torConfigurationString = _serviceSettings->getHiddenServiceDirectories();
+ _torServices = extractSingleServices(torConfigurationString);
QList<Service> completeList = _torServices;
// the services stored with vidalia
ServiceList serviceList = _serviceSettings->getServices();
@@ -224,19 +202,25 @@
QString address, virtualPort, physAddressPort, serviceDir;
// service directory
QStringList strList = s.split("\n");
- serviceDir = strList.first().trimmed();
+ QString tempServiceDir = strList.first().trimmed();
+ serviceDir = tempServiceDir.remove(0, 1);
//virtual port
QStringList strList2 = s.split("HiddenServicePort");
strList2.removeFirst();
- QStringList strList3 = strList2.first().split("\n");
+ QStringList strList3 = strList2.first().split("\n");
QStringList strList4 = strList3.first().split(" ");
- strList4.removeFirst();
- virtualPort = strList4.first().trimmed();
- strList4.removeFirst();
- //physical address:port
- if(!strList4.isEmpty()) {
- physAddressPort = strList4.first().trimmed();
- }
+ if(strList4.size() > 0) {
+ QString tempVirtualPort = strList4.first();
+ virtualPort = tempVirtualPort.remove(0, 1);
+ strList4.removeFirst();
+ //physical address:port
+ if(!strList4.isEmpty()) {
+ physAddressPort = strList4.first().trimmed();
+ }
+ } else {
+ QString tempVirtualPort = strList3.first();
+ virtualPort = tempVirtualPort.remove(0, 1);
+ }
//get .onion address
QString serviceHostnameDir = serviceDir;
serviceHostnameDir.append("/");
Modified: vidalia/branches/hidden-services/src/vidalia/config/servicepage.h
===================================================================
--- vidalia/branches/hidden-services/src/vidalia/config/servicepage.h 2008-03-19 03:52:17 UTC (rev 2423)
+++ vidalia/branches/hidden-services/src/vidalia/config/servicepage.h 2008-03-20 15:40:47 UTC (rev 2424)
@@ -55,8 +55,6 @@
void startServicesInTor(QList<Service> services);
- QString createServiceConfString(Service temp);
-
bool isServicePublished(Service service, QList<Service> _torServices);
bool checkBeforeSaving(QList<Service> services);
Modified: vidalia/branches/hidden-services/src/vidalia/config/servicesettings.cpp
===================================================================
--- vidalia/branches/hidden-services/src/vidalia/config/servicesettings.cpp 2008-03-19 03:52:17 UTC (rev 2423)
+++ vidalia/branches/hidden-services/src/vidalia/config/servicesettings.cpp 2008-03-20 15:40:47 UTC (rev 2424)
@@ -109,7 +109,7 @@
void
ServiceSettings::apply(QString value, QString *errmsg)
{
- _torControl->setConf("HiddenServiceDir", value, errmsg);
+ _torControl->setConf(value, errmsg);
_torControl->saveConf(errmsg);
}
@@ -117,15 +117,15 @@
QString
ServiceSettings::getHiddenServiceDirectories()
{
- QString value;
- _torControl->getConf("hiddenserviceoptions", value);
+ QString *errmsg;
+ QString value = _torControl->getHiddenServiceConf("hiddenserviceoptions", errmsg);
return value;
}
void
ServiceSettings::applyServices(QString value, QString *errmsg)
{
- _torControl->setConf("HiddenServiceDir", value, errmsg);
+ _torControl->setConf(value, errmsg);
_torControl->saveConf(errmsg);
}