[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r2449: * ensure that additional service options like excludenodes a (vidalia/branches/hidden-services/src/vidalia/config)
Author: borkdomenik
Date: 2008-03-23 13:59:21 -0400 (Sun, 23 Mar 2008)
New Revision: 2449
Modified:
vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp
Log:
* ensure that additional service options like excludenodes are still set after configuring service with Vidalia
* [Directory not found] if the dir of a disabled service has been removed/deleted
Modified: vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp
===================================================================
--- vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp 2008-03-23 17:42:51 UTC (rev 2448)
+++ vidalia/branches/hidden-services/src/vidalia/config/servicepage.cpp 2008-03-23 17:59:21 UTC (rev 2449)
@@ -74,6 +74,7 @@
QString directoryPath = ui.serviceWidget->item(index,3)->text();
bool enabled = _services->value(index).enabled();
Service temp(address, virtualPort, physicalAddress, directoryPath, enabled);
+ temp.setAdditionalServiceOptions(_services->value(ui.serviceWidget->currentRow()).additionalServiceOptions());
serviceList.push_back(temp);
if(enabled) {
publishedServices.push_back(temp);
@@ -132,8 +133,7 @@
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. */
+ serviceConfString.append(" "+ temp.additionalServiceOptions());
}
_serviceSettings->apply(serviceConfString, &errmsg);
}
@@ -195,6 +195,31 @@
Service
ServicePage::generateService(QString s)
{
+ QString additionalOptions = s;
+ // remove directory
+ int index = additionalOptions.indexOf("250",1);
+ additionalOptions.remove(0, index+4);
+ // remove the first appearance of the port
+ int startindex = additionalOptions.indexOf("hiddenserviceport", 0, Qt::CaseInsensitive);
+ int endindex = additionalOptions.indexOf("250", startindex)+4;
+ additionalOptions.remove(startindex, (endindex-startindex));
+ //remove all appearances of "250"
+ while(additionalOptions.contains("250")) {
+ int i = additionalOptions.indexOf("250", 0);
+ additionalOptions.remove(i, 4);
+ }
+ //quote the values
+ int j = additionalOptions.indexOf("=", 0);
+ while(j != -1) {
+ additionalOptions.insert(j+1, "\"");
+ int end = additionalOptions.indexOf("\n", j);
+ additionalOptions.insert(end, "\"");
+ j = additionalOptions.indexOf("=", end);
+ }
+ additionalOptions.insert(additionalOptions.length(), "\"");
+ //replace the line brakes with a space and create one single line
+ additionalOptions.replace(QString("\n"), QString(" "));
+
QString address, virtualPort, physAddressPort, serviceDir;
// service directory
QStringList strList = s.split("\n");
@@ -233,6 +258,7 @@
address = hostname;
}
Service service(address, virtualPort, physAddressPort, serviceDir, true);
+ service.setAdditionalServiceOptions(additionalOptions);
return service;
}
@@ -269,7 +295,25 @@
cboxitem->setFlags(Qt::ItemIsSelectable);
QTableWidgetItem *addressitem = new QTableWidgetItem();
addressitem->setFlags(Qt::ItemIsSelectable);
- addressitem->setText(tempService.serviceAddress());
+ if(tempService.serviceAddress().length() < 0) {
+ addressitem->setText(tempService.serviceAddress());
+ } else {
+ QString serviceHostnameDir = tempService.serviceDirectory();
+ serviceHostnameDir.append("/");
+ serviceHostnameDir.append("hostname");
+ QFile file(serviceHostnameDir);
+ if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ addressitem->setText("[Directory not found]");
+ } else {
+ QTextStream in(&file);
+ QString hostname;
+ while (!in.atEnd()) {
+ hostname.append(in.readLine());
+ }
+ addressitem->setText(hostname);
+ tempService.setServiceAddress(hostname);
+ }
+ }
QTableWidgetItem *serviceDir = new QTableWidgetItem(tempService.serviceDirectory(),0);
if(tempService.enabled()) {
cboxitem->setCheckState(Qt::Checked);