24 #if defined (Q_OS_WIN32)
34 connect(
this, SIGNAL(readyReadStandardOutput()),
37 this, SLOT(
onError(QProcess::ProcessError)));
45 foreach (QString arg, args) {
46 out << (arg.contains(
" ") || arg.isEmpty() ?
string_escape(arg) : arg);
59 #if defined(Q_OS_WIN32)
62 exe =
"\"" + exe +
"\"";
66 QStringList env = QProcess::systemEnvironment();
67 #if !defined(Q_OS_WIN32)
71 for (
int i = 0;
i < env.size();
i++) {
72 QString envVar = env.at(
i);
73 if (envVar.startsWith(
"PATH="))
74 env.replace(
i, envVar +=
":/usr/sbin");
80 QProcess::start(exe, args, QIODevice::ReadOnly | QIODevice::Text);
89 if (state() == QProcess::NotRunning) {
95 #if defined(Q_OS_WIN32)
103 if (!waitForFinished(5000)) {
107 tr(
"Process %1 failed to stop. [%2]").
arg(
pid()).
arg(errorString());
119 #if defined(Q_OS_WIN32)
120 return (quint64)((QProcess::pid())->dwProcessId);
122 return QProcess::pid();
131 setReadChannelMode(QProcess::MergedChannels);
132 setReadChannel(QProcess::StandardOutput);
141 closeReadChannel(QProcess::StandardOutput);
153 while (canReadLine()) {
155 if (!line.isEmpty()) {
157 i = line.indexOf(
"[");
158 j = line.indexOf(
"]");
159 if (i > 0 && j > i && line.length() >= j+2) {
160 emit
log(line.mid(i+1, j-i-1), line.mid(j+2));
172 if (error == QProcess::FailedToStart) {
173 tc::error(
"The Tor process failed to start: %1").
arg(errorString());
188 tor.start(exe, QStringList() <<
"--version");
189 if (!tor.waitForStarted() || !tor.waitForFinished())
192 while (tor.canReadLine()) {
193 QString line = tor.readLine();
194 if (line.startsWith(
"Tor version", Qt::CaseInsensitive)) {
195 QStringList parts = line.split(
" ");
196 if (parts.size() >= 3)
DebugMessage error(const QString &fmt)
void onError(QProcess::ProcessError error)
QString formatArguments(const QStringList &args)
void start(const QString &app, const QStringList &args)
DebugMessage arg(const QString &a)
QString string_escape(const QString &str)
TorProcess(QObject *parent=0)
bool stop(QString *errmsg=0)
stop errmsg connect(const QHostAddress &address, quint16 port)
void log(const QString &severity, const QString &message)
void startFailed(const QString &errorMessage)
DebugMessage debug(const QString &fmt)
static QString version(const QString &exe)