mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-05-20 07:26:58 -04:00
Improve the connect logic
This commit is contained in:
@@ -51,8 +51,8 @@ void GPService::quit()
|
||||
|
||||
void GPService::connect(QString server, QString username, QString passwd)
|
||||
{
|
||||
if (status() != QProcess::NotRunning) {
|
||||
log("Openconnect has already started on PID " + QString::number(openconnect->processId()) + ", nothing changed.");
|
||||
if (vpnStatus != GPService::VpnNotConnected) {
|
||||
log("VPN status is: " + QVariant::fromValue(vpnStatus).toString());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -67,6 +67,7 @@ void GPService::connect(QString server, QString username, QString passwd)
|
||||
<< "--protocol=gp"
|
||||
<< "-u" << username
|
||||
<< "--passwd-on-stdin"
|
||||
<< "--timestamp"
|
||||
<< server;
|
||||
|
||||
openconnect->start(bin, args);
|
||||
@@ -77,23 +78,26 @@ void GPService::connect(QString server, QString username, QString passwd)
|
||||
void GPService::disconnect()
|
||||
{
|
||||
if (openconnect->state() != QProcess::NotRunning) {
|
||||
vpnStatus = GPService::VpnDisconnecting;
|
||||
openconnect->terminate();
|
||||
}
|
||||
}
|
||||
|
||||
int GPService::status()
|
||||
{
|
||||
return openconnect->state();
|
||||
return vpnStatus;
|
||||
}
|
||||
|
||||
void GPService::onProcessStarted()
|
||||
{
|
||||
log("Openconnect started successfully, PID=" + QString::number(openconnect->processId()));
|
||||
vpnStatus = GPService::VpnConnecting;
|
||||
}
|
||||
|
||||
void GPService::onProcessError(QProcess::ProcessError error)
|
||||
{
|
||||
log("Error occurred: " + QVariant::fromValue(error).toString());
|
||||
vpnStatus = GPService::VpnNotConnected;
|
||||
emit disconnected();
|
||||
}
|
||||
|
||||
@@ -102,7 +106,8 @@ void GPService::onProcessStdout()
|
||||
QString output = openconnect->readAllStandardOutput();
|
||||
|
||||
log(output);
|
||||
if (output.startsWith("Connected as")) {
|
||||
if (output.indexOf("Connected as") >= 0) {
|
||||
vpnStatus = GPService::VpnConnected;
|
||||
emit connected();
|
||||
}
|
||||
}
|
||||
@@ -115,6 +120,7 @@ void GPService::onProcessStderr()
|
||||
void GPService::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||
{
|
||||
log("Openconnect process exited with code " + QString::number(exitCode) + " and exit status " + QVariant::fromValue(exitStatus).toString());
|
||||
vpnStatus = GPService::VpnNotConnected;
|
||||
emit disconnected();
|
||||
|
||||
if (aboutToQuit) {
|
||||
@@ -124,8 +130,6 @@ void GPService::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)
|
||||
|
||||
void GPService::log(QString msg)
|
||||
{
|
||||
// 2020-02-12 15:33:45.120: log messsage
|
||||
QString record = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz") + ": " + msg;
|
||||
qDebug() << record;
|
||||
emit logAvailable(record);
|
||||
qDebug() << msg;
|
||||
emit logAvailable(msg);
|
||||
}
|
||||
|
@@ -21,6 +21,13 @@ public:
|
||||
explicit GPService(QObject *parent = nullptr);
|
||||
~GPService();
|
||||
|
||||
enum VpnStatus {
|
||||
VpnNotConnected,
|
||||
VpnConnecting,
|
||||
VpnConnected,
|
||||
VpnDisconnecting,
|
||||
};
|
||||
|
||||
signals:
|
||||
void connected();
|
||||
void disconnected();
|
||||
@@ -42,6 +49,7 @@ private slots:
|
||||
private:
|
||||
QProcess *openconnect;
|
||||
bool aboutToQuit = false;
|
||||
int vpnStatus = GPService::VpnNotConnected;
|
||||
|
||||
void log(QString msg);
|
||||
static QString findBinary();
|
||||
|
Reference in New Issue
Block a user