8b0c79a96b3c575e39cec12c73e9db994afe7788
[openvpnui.git] / src / vpncontrol.cpp
1 #include "vpncontrol.h"
2 #include "stdio.h"
3
4 VPNControl::VPNControl(QObject *parent) :
5 QObject(parent),
6 vpnProcess(NULL),
7 vpnStatus(VPNSTATUS_INVALID)
8 {
9 }
10
11 void VPNControl::initialise()
12 {
13 setStatus(VPNSTATUS_UNINITIALISED);
14 }
15
16 void VPNControl::setStatus(VPNSTATUS newStatus)
17 {
18 if (vpnStatus != newStatus) {
19 vpnStatus = newStatus;
20 emit statusChanged(newStatus);
21 printf ("Emitting status %d\n", newStatus);
22 }
23 }
24
25 void VPNControl::vpnConnect() {
26 if (vpnProcess != NULL) {
27 printf ("Process already running.\n");
28 }
29 else {
30 printf ("Connect\n");
31
32 vpnProcess = new QProcess();
33 //QString program = "/home/nemo/Documents/Development/Projects/Stooge/stooge";
34 QString program = "openvpn";
35 QStringList arguments;
36 arguments << "/home/nemo/Documents/Configure/OpenVPN/client.ovpn";
37
38 vpnProcess->setReadChannel(QProcess::StandardOutput);
39 connect(vpnProcess, SIGNAL(error(QProcess::ProcessError)), this, SLOT(readError(QProcess::ProcessError)));
40 connect(vpnProcess, SIGNAL(readyRead()), this, SLOT(readData()));
41 connect(vpnProcess, SIGNAL(started()), this, SLOT(started()));
42 connect(vpnProcess, SIGNAL(finished(int)), this, SLOT(finished(int)));
43
44 vpnProcess->start(program, arguments);
45 vpnProcess->closeWriteChannel();
46 setStatus(VPNSTATUS_INITIALISING);
47 }
48 }
49
50 void VPNControl::vpnDisconnect() {
51 if (vpnProcess != NULL) {
52 printf ("Disconnect\n");
53
54 vpnProcess->terminate();
55 setStatus(VPNSTATUS_DISCONNECTING);
56 }
57 }
58
59 void VPNControl::readData() {
60 while (vpnProcess->canReadLine()) {
61 QByteArray read = vpnProcess->readLine();
62 printf ("Output: %s", read.data());
63 if (read.endsWith("Initialization Sequence Completed\n")) {
64 printf ("We're connected!\n");
65 setStatus(VPNSTATUS_CONNECTED);
66 }
67 }
68 }
69
70 void VPNControl::started() {
71 printf ("Started\n");
72 setStatus(VPNSTATUS_CONNECTING);
73 }
74
75 void VPNControl::finished(int code) {
76 printf ("Finished with code %d\n", code);
77 if (vpnProcess != NULL) {
78 //delete vpnProcess;
79 vpnProcess = NULL;
80 }
81 setStatus(VPNSTATUS_UNINITIALISED);
82 }
83
84 void VPNControl::readError(QProcess::ProcessError error)
85 {
86 printf ("Error: %d\n", error);
87 if (vpnProcess != NULL) {
88 QByteArray dataOut = vpnProcess->readAllStandardOutput();
89 QByteArray errorOut = vpnProcess->readAllStandardError();
90
91 printf ("Output text: %s\n", dataOut.data());
92 printf ("Error text: %s\n", errorOut.data());
93 }
94
95 // Disconnect
96 vpnDisconnect();
97 }