X-Git-Url: https://www.flypig.org.uk/git/?a=blobdiff_plain;f=src%2Fvpncontrol.cpp;h=057cb365941c81d4dccc66446c8689e77db0b71f;hb=e24363e314aca32e7bee952f02f517a04a8dc5f2;hp=a519dce1f29d799ab4e16ac995d447a440d967b9;hpb=2e0816fb79e6c696ada4fe098ba006fca2741a1f;p=openvpnui.git diff --git a/src/vpncontrol.cpp b/src/vpncontrol.cpp index a519dce..057cb36 100644 --- a/src/vpncontrol.cpp +++ b/src/vpncontrol.cpp @@ -1,16 +1,27 @@ #include "vpncontrol.h" #include "stdio.h" +#include + VPNControl::VPNControl(QObject *parent) : QObject(parent), vpnProcess(NULL), vpnStatus(VPNSTATUS_INVALID), server(""), - port(1174), + port(1194), compressed(true), useTLS(true), tlsDirection(1) { + // Read in the settings + QSettings settings; + + server = settings.value("server", "127.0.0.1").toString(); + port = settings.value("port", 1194).toInt(); + compressed = settings.value("compressed", true).toBool(); + useTLS = settings.value("useTLS", true).toBool(); + tlsDirection = settings.value("tlsDirection", 1).toInt(); + settings.setValue("showAll", false); } void VPNControl::initialise() @@ -23,7 +34,6 @@ void VPNControl::setStatus(VPNSTATUS newStatus) if (vpnStatus != newStatus) { vpnStatus = newStatus; emit statusChanged(newStatus); - printf ("Emitting status %d\n", newStatus); } } int VPNControl::getTlsDirection() const @@ -33,9 +43,11 @@ int VPNControl::getTlsDirection() const void VPNControl::setTlsDirection(int value) { - printf ("TLS direction set to %d\n", value); - tlsDirection = value; - emit tlsDirectionChanged (value); + if (value != tlsDirection) { + tlsDirection = value; + settingsSetValue("tlsDirection", value); + emit tlsDirectionChanged (value); + } } bool VPNControl::getUseTLS() const @@ -45,9 +57,11 @@ bool VPNControl::getUseTLS() const void VPNControl::setUseTLS(bool value) { - printf ("Use TLS set to %d\n", value); - useTLS = value; - emit useTLSChanged(useTLS); + if (value != useTLS) { + useTLS = value; + settingsSetValue("useTLS", value); + emit useTLSChanged(useTLS); + } } bool VPNControl::getCompressed() const @@ -57,9 +71,11 @@ bool VPNControl::getCompressed() const void VPNControl::setCompressed(bool value) { - printf ("Use compression set to %d\n", value); - compressed = value; - emit compressedChanged(compressed); + if (value != compressed) { + compressed = value; + settingsSetValue("compressed", value); + emit compressedChanged(compressed); + } } unsigned int VPNControl::getPort() const @@ -69,9 +85,11 @@ unsigned int VPNControl::getPort() const void VPNControl::setPort(unsigned int value) { - printf ("Port set to %d\n", value); - port = value; - emit portChanged(port); + if (value != port) { + port = value; + settingsSetValue("port", value); + emit portChanged(port); + } } QString VPNControl::getServer() const @@ -81,25 +99,44 @@ QString VPNControl::getServer() const void VPNControl::setServer(const QString &value) { - printf ("Server set to %s\n", value.toUtf8().constData()); - server = value; - emit serverChanged(server); + if (value != server) { + server = value; + settingsSetValue("server", value); + emit serverChanged(server); + } +} + +QString VPNControl::getLogText() const +{ + return logText; } +void VPNControl::setLogText(const QString &value) +{ + logText = value; + emit logTextChanged(value); +} + +void VPNControl::settingsSetValue (QString key, QString value) { + QSettings settings; + + settings.setValue(key, value); +} + +void VPNControl::settingsSetValue (QString key, int value) { + QSettings settings; + + settings.setValue(key, value); +} void VPNControl::vpnConnect() { if (vpnProcess != NULL) { printf ("Process already running.\n"); } else { - printf ("Connect\n"); - vpnProcess = new QProcess(); - //QString program = "/home/nemo/Documents/Development/Projects/Stooge/stooge"; QString program = "openvpn"; - QStringList arguments; - arguments << "/home/nemo/Documents/Configure/OpenVPN/client.ovpn"; - + collectArguments (); vpnProcess->setReadChannel(QProcess::StandardOutput); connect(vpnProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(readError(QProcess::ProcessError))); connect(vpnProcess, SIGNAL(readyRead()), this, SLOT(readData())); @@ -109,12 +146,55 @@ void VPNControl::vpnConnect() { vpnProcess->start(program, arguments); vpnProcess->closeWriteChannel(); setStatus(VPNSTATUS_INITIALISING); + arguments.clear(); } } +void VPNControl::collectArguments () { + arguments.clear(); + + addArgument("config", "/home/nemo/Documents/Configure/OpenVPN/config.ovpn"); + addArgument("remote", server); + addArgument("port", QString::number(port)); + addOption("comp-lzo", compressed); + if (useTLS) { + addArgument("tls-auth", "/home/nemo/Documents/Configure/OpenVPN/ta.key"); + addValue(QString::number(tlsDirection)); + } + addArgument("ca", "/home/nemo/Documents/Configure/OpenVPN/ca.crt"); + addArgument("cert", "/home/nemo/Documents/Configure/OpenVPN/Jolla.crt"); + addArgument("key", "/home/nemo/Documents/Configure/OpenVPN/Jolla.key"); +} + +void VPNControl::addArgument (QString key, QString value) { + QString argument; + + argument = "--" + key; + arguments.append(argument); + if (value != "") { + arguments.append(value); + } +} + +void VPNControl::addArgument (QString key) { + QString argument; + + argument = "--" + key; + arguments.append(argument); +} + +void VPNControl::addOption (QString key, bool add) { + if (add) { + addArgument (key); + } +} + +void VPNControl::addValue (QString key) { + arguments.append(key); +} + void VPNControl::vpnDisconnect() { if (vpnProcess != NULL) { - printf ("Disconnect\n"); vpnProcess->terminate(); setStatus(VPNSTATUS_DISCONNECTING); @@ -124,21 +204,21 @@ void VPNControl::vpnDisconnect() { void VPNControl::readData() { while (vpnProcess->canReadLine()) { QByteArray read = vpnProcess->readLine(); - printf ("Output: %s", read.data()); + //printf ("Output: %s", read.data()); + + logAppend(read); + if (read.endsWith("Initialization Sequence Completed\n")) { - printf ("We're connected!\n"); setStatus(VPNSTATUS_CONNECTED); } } } void VPNControl::started() { - printf ("Started\n"); setStatus(VPNSTATUS_CONNECTING); } void VPNControl::finished(int code) { - printf ("Finished with code %d\n", code); if (vpnProcess != NULL) { //delete vpnProcess; vpnProcess = NULL; @@ -165,3 +245,26 @@ void VPNControl::updateConfiguration() { printf ("Update configuration\n"); } + +void VPNControl::logAppend(const QString &text) +{ + if (!text.isEmpty()) { + // How many lines to add + int newLines = text.count('\n'); + int currentLines = logText.count('\n'); + int removeLines = currentLines + newLines - 18; + + // Remove excess lines + while (removeLines > 0) { + int nextLine = logText.lastIndexOf('\n'); + if (nextLine > 0) { + logText = logText.left(nextLine); + } + removeLines--; + } + + // Add new lines + logText.prepend(text); + emit logTextChanged(logText); + } +}