00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <QDir>
00029 #include <vidalia.h>
00030
00031 #include "torsettings.h"
00032
00033
00034 #define SETTING_TOR_EXECUTABLE "Tor/TorExecutable"
00035 #define SETTING_TORRC "Tor/Torrc"
00036 #define SETTING_CONTROL_ADDR "Tor/ControlAddr"
00037 #define SETTING_CONTROL_PORT "Tor/ControlPort"
00038 #define SETTING_AUTH_TOKEN "Tor/AuthToken"
00039 #define SETTING_USE_SERVICE "Tor/UseService"
00040 #define SETTING_TOR_USER "Tor/User"
00041 #define SETTING_TOR_GROUP "Tor/Group"
00042
00043
00044 #if defined(Q_OS_WIN32)
00045 #include <util/win32.h>
00046 #define DEFAULT_TOR_EXECUTABLE (win32_program_files_folder() + "\\Tor\\tor.exe")
00047 #else
00048 #define DEFAULT_TOR_EXECUTABLE "/usr/bin/tor"
00049 #endif
00050
00051
00052 #define TOR_ARG_CONTROL_PORT "ControlPort"
00053 #define TOR_ARG_TORRC "-f"
00054 #define TOR_ARG_USER "User"
00055 #define TOR_ARG_GROUP "Group"
00056
00057
00058
00059 TorSettings::TorSettings()
00060 {
00061 setDefault(SETTING_TOR_EXECUTABLE, DEFAULT_TOR_EXECUTABLE);
00062 setDefault(SETTING_TORRC, "/etc/tor/torrc");
00063 setDefault(SETTING_CONTROL_ADDR, "127.0.0.1");
00064 setDefault(SETTING_CONTROL_PORT, 9051);
00065 setDefault(SETTING_AUTH_TOKEN, QByteArray(""));
00066 setDefault(SETTING_TOR_USER, "toruser");
00067 setDefault(SETTING_TOR_GROUP, "toruser");
00068 setDefault(SETTING_USE_SERVICE, false);
00069 }
00070
00071
00072
00073 QString
00074 TorSettings::getExecutable()
00075 {
00076 return QDir::convertSeparators(
00077 value(SETTING_TOR_EXECUTABLE).toString());
00078 }
00079
00080
00081 void
00082 TorSettings::setExecutable(QString torExecutable)
00083 {
00084 setValue(SETTING_TOR_EXECUTABLE, torExecutable);
00085 }
00086
00087
00088
00089 QString
00090 TorSettings::formatArgument(QString name, QString value)
00091 {
00092 if (value.indexOf(" ") >= 0) {
00093 value = "\"" + value + "\"";
00094 }
00095 return name + " " + value;
00096 }
00097
00098
00099
00100
00101 QString
00102 TorSettings::getArguments()
00103 {
00104 QString args;
00105
00106
00107 QString torrc = getTorrc();
00108 if (!torrc.isEmpty()) {
00109 args += formatArgument(TOR_ARG_TORRC, torrc) + " ";
00110 }
00111
00112 quint16 controlPort = getControlPort();
00113 if (controlPort) {
00114 args += formatArgument(TOR_ARG_CONTROL_PORT,
00115 QString::number(controlPort)) + " ";
00116 }
00117
00118 QString user = getUser();
00119 if (!user.isEmpty()) {
00120 args += formatArgument(TOR_ARG_USER, user) + " ";
00121 }
00122
00123 QString group = getGroup();
00124 if (!group.isEmpty()) {
00125 args += formatArgument(TOR_ARG_GROUP, group);
00126 }
00127 return args;
00128 }
00129
00130
00131 QString
00132 TorSettings::getTorrc()
00133 {
00134 return value(SETTING_TORRC).toString();
00135 }
00136
00137
00138
00139
00140 void
00141 TorSettings::setTorrc(QString torrc)
00142 {
00143 setValue(SETTING_TORRC, torrc);
00144 }
00145
00146
00147
00148 QString
00149 TorSettings::getUser()
00150 {
00151 return value(SETTING_TOR_USER).toString();
00152 }
00153
00154
00155
00156 void
00157 TorSettings::setUser(QString user)
00158 {
00159 setValue(SETTING_TOR_USER, user);
00160 }
00161
00162
00163
00164 QString
00165 TorSettings::getGroup()
00166 {
00167 return value(SETTING_TOR_GROUP).toString();
00168 }
00169
00170
00171
00172 void
00173 TorSettings::setGroup(QString group)
00174 {
00175 setValue(SETTING_TOR_GROUP, group);
00176 }
00177
00178
00179 QHostAddress
00180 TorSettings::getControlAddress()
00181 {
00182 QString addr = value(SETTING_CONTROL_ADDR).toString();
00183 return QHostAddress(addr);
00184 }
00185
00186
00187 void
00188 TorSettings::setControlAddress(QHostAddress addr)
00189 {
00190 setValue(SETTING_CONTROL_PORT, addr.toString());
00191 }
00192
00193
00194 quint16
00195 TorSettings::getControlPort()
00196 {
00197 return (quint16)value(SETTING_CONTROL_PORT).toInt();
00198 }
00199
00200
00201 void
00202 TorSettings::setControlPort(quint16 port)
00203 {
00204 setValue(SETTING_CONTROL_PORT, port);
00205 }
00206
00207
00208
00209
00210 QByteArray
00211 TorSettings::getAuthToken()
00212 {
00213 return QByteArray::fromBase64(
00214 value(SETTING_AUTH_TOKEN).toByteArray());
00215 }
00216
00217
00218 void
00219 TorSettings::setAuthToken(QByteArray token)
00220 {
00221 setValue(SETTING_AUTH_TOKEN, token.toBase64());
00222 }
00223
00224
00225 bool
00226 TorSettings::getUseService()
00227 {
00228 return value(SETTING_USE_SERVICE).toBool();
00229 }
00230
00231
00232 void
00233 TorSettings::setUseService(bool useService)
00234 {
00235 setValue(SETTING_USE_SERVICE, useService);
00236 }
00237