[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);	
 }