diff --git a/client/protocols/openvpnovercloakprotocol.cpp b/client/protocols/openvpnovercloakprotocol.cpp index 55939895..59152f57 100644 --- a/client/protocols/openvpnovercloakprotocol.cpp +++ b/client/protocols/openvpnovercloakprotocol.cpp @@ -52,26 +52,25 @@ ErrorCode OpenVpnOverCloakProtocol::start() args << "-u"; } - qDebug().noquote() << "OpenVpnOverCloakProtocol::start()" - << cloakExecPath() << args.join(" "); + qDebug().noquote() << "OpenVpnOverCloakProtocol::start()" << cloakExecPath() << args.join(" "); m_ckProcess.setProcessChannelMode(QProcess::MergedChannels); m_ckProcess.setProgram(cloakExecPath()); m_ckProcess.setArguments(args); - connect(&m_ckProcess, &QProcess::readyReadStandardOutput, this, [this](){ + connect(&m_ckProcess, &QProcess::readyReadStandardOutput, this, [this]() { qDebug().noquote() << "ck-client:" << m_ckProcess.readAllStandardOutput(); }); - m_errorHandlerConnection = connect(&m_ckProcess, QOverload::of(&QProcess::finished), this, [this](int exitCode, QProcess::ExitStatus exitStatus){ + m_errorHandlerConnection = connect(&m_ckProcess, QOverload::of(&QProcess::finished), this, [this](int exitCode, QProcess::ExitStatus exitStatus) { qDebug().noquote() << "OpenVpnOverCloakProtocol finished, exitCode, exiStatus" << exitCode << exitStatus; setConnectionState(VpnProtocol::Disconnected); - if (exitStatus != QProcess::NormalExit){ + if (exitStatus != QProcess::NormalExit) { emit protocolError(amnezia::ErrorCode::CloakExecutableCrashed); stop(); } - if (exitCode !=0 ){ + if (exitCode !=0 ) { emit protocolError(amnezia::ErrorCode::InternalError); stop(); } @@ -84,8 +83,9 @@ ErrorCode OpenVpnOverCloakProtocol::start() setConnectionState(VpnConnectionState::Connecting); return OpenVpnProtocol::start(); + } else { + return ErrorCode::CloakExecutableMissing; } - else return ErrorCode::CloakExecutableMissing; #endif } diff --git a/client/protocols/shadowsocksvpnprotocol.cpp b/client/protocols/shadowsocksvpnprotocol.cpp index 82ae08b8..dafb8191 100644 --- a/client/protocols/shadowsocksvpnprotocol.cpp +++ b/client/protocols/shadowsocksvpnprotocol.cpp @@ -9,7 +9,7 @@ #include ShadowSocksVpnProtocol::ShadowSocksVpnProtocol(const QJsonObject &configuration, QObject *parent): - OpenVpnProtocol(configuration, parent) + OpenVpnProtocol(configuration, parent) { readShadowSocksConfiguration(configuration); } @@ -32,7 +32,6 @@ ErrorCode ShadowSocksVpnProtocol::start() return lastError(); } - #ifndef Q_OS_IOS if (Utils::processIsRunning(Utils::executable("ss-local", false))) { Utils::killProcessByName(Utils::executable("ss-local", false)); @@ -48,30 +47,28 @@ ErrorCode ShadowSocksVpnProtocol::start() #ifdef Q_OS_LINUX QStringList args = QStringList() << "-c" << m_shadowSocksCfgFile.fileName(); #else - QStringList args = QStringList() << "-c" << m_shadowSocksCfgFile.fileName() - << "--no-delay"; + QStringList args = QStringList() << "-c" << m_shadowSocksCfgFile.fileName() << "--no-delay"; #endif - qDebug().noquote() << "ShadowSocksVpnProtocol::start()" - << shadowSocksExecPath() << args.join(" "); + qDebug().noquote() << "ShadowSocksVpnProtocol::start()" << shadowSocksExecPath() << args.join(" "); m_ssProcess.setProcessChannelMode(QProcess::MergedChannels); m_ssProcess.setProgram(shadowSocksExecPath()); m_ssProcess.setArguments(args); - connect(&m_ssProcess, &QProcess::readyReadStandardOutput, this, [this](){ + connect(&m_ssProcess, &QProcess::readyReadStandardOutput, this, [this]() { qDebug().noquote() << "ss-local:" << m_ssProcess.readAllStandardOutput(); }); - connect(&m_ssProcess, QOverload::of(&QProcess::finished), this, [this](int exitCode, QProcess::ExitStatus exitStatus){ + connect(&m_ssProcess, QOverload::of(&QProcess::finished), this, [this](int exitCode, QProcess::ExitStatus exitStatus) { qDebug().noquote() << "ShadowSocksVpnProtocol finished, exitCode, exiStatus" << exitCode << exitStatus; setConnectionState(VpnProtocol::Disconnected); - if (exitStatus != QProcess::NormalExit){ + if (exitStatus != QProcess::NormalExit) { emit protocolError(amnezia::ErrorCode::ShadowSocksExecutableCrashed); stop(); } - if (exitCode !=0 ){ + if (exitCode !=0 ) { emit protocolError(amnezia::ErrorCode::InternalError); stop(); } @@ -84,8 +81,9 @@ ErrorCode ShadowSocksVpnProtocol::start() setConnectionState(VpnConnectionState::Connecting); return OpenVpnProtocol::start(); + } else { + return ErrorCode::ShadowSocksExecutableMissing; } - else return ErrorCode::ShadowSocksExecutableMissing; #else return ErrorCode::NotImplementedError; #endif diff --git a/client/protocols/shadowsocksvpnprotocol.h b/client/protocols/shadowsocksvpnprotocol.h index e5851255..a73ffaa4 100644 --- a/client/protocols/shadowsocksvpnprotocol.h +++ b/client/protocols/shadowsocksvpnprotocol.h @@ -1,9 +1,9 @@ #ifndef SHADOWSOCKSVPNPROTOCOL_H #define SHADOWSOCKSVPNPROTOCOL_H -#include "openvpnprotocol.h" #include "QProcess" -#include "containers/containers_defs.h" + +#include "openvpnprotocol.h" class ShadowSocksVpnProtocol : public OpenVpnProtocol { @@ -14,20 +14,18 @@ public: ErrorCode start() override; void stop() override; -protected: - void readShadowSocksConfiguration(const QJsonObject &configuration); - protected: QJsonObject m_shadowSocksConfig; -private: - static QString shadowSocksExecPath(); + void readShadowSocksConfiguration(const QJsonObject &configuration); private: #ifndef Q_OS_IOS QProcess m_ssProcess; #endif QTemporaryFile m_shadowSocksCfgFile; + + static QString shadowSocksExecPath(); }; #endif // SHADOWSOCKSVPNPROTOCOL_H diff --git a/client/protocols/v2rayprotocol.cpp b/client/protocols/v2rayprotocol.cpp index 1cbaa986..385f43ea 100644 --- a/client/protocols/v2rayprotocol.cpp +++ b/client/protocols/v2rayprotocol.cpp @@ -32,22 +32,21 @@ ErrorCode V2RayProtocol::start() QStringList args = QStringList() << "-c" << m_v2RayConfigFile.fileName(); - qDebug().noquote() << "V2RayProtocol::start()" - << v2RayExecPath() << args.join(" "); + qDebug().noquote() << "V2RayProtocol::start()" << v2RayExecPath() << args.join(" "); m_v2RayProcess.setProcessChannelMode(QProcess::MergedChannels); m_v2RayProcess.setProgram(v2RayExecPath()); m_v2RayProcess.setArguments(args); - connect(&m_v2RayProcess, &QProcess::readyReadStandardOutput, this, [this](){ + connect(&m_v2RayProcess, &QProcess::readyReadStandardOutput, this, [this]() { qDebug().noquote() << "V2Ray:" << m_v2RayProcess.readAllStandardOutput(); }); connect(&m_v2RayProcess, QOverload::of(&QProcess::finished), this, [this](int exitCode, QProcess::ExitStatus exitStatus) { qDebug().noquote() << "V2RayProtocol finished, exitCode, exiStatus" << exitCode << exitStatus; setConnectionState(VpnProtocol::Disconnected); - if (exitStatus != QProcess::NormalExit){ + if (exitStatus != QProcess::NormalExit) { emit protocolError(amnezia::ErrorCode::V2RayExecutableCrashed); stop(); } @@ -64,7 +63,9 @@ ErrorCode V2RayProtocol::start() setConnectionState(VpnConnectionState::Connecting); return OpenVpnProtocol::start(); - } else return ErrorCode::V2RayExecutableMissing; + } else { + return ErrorCode::V2RayExecutableMissing; + } #else return ErrorCode::NotImplementedError; #endif diff --git a/client/ui/pages_logic/protocols/CloakLogic.cpp b/client/ui/pages_logic/protocols/CloakLogic.cpp index 6e179013..24622a85 100644 --- a/client/ui/pages_logic/protocols/CloakLogic.cpp +++ b/client/ui/pages_logic/protocols/CloakLogic.cpp @@ -112,15 +112,15 @@ void CloakLogic::onPushButtonSaveClicked() progressBarFunc.setTextVisibleFunc(true); progressBarFunc.setTextFunc(QString("Configuring...")); - ErrorCode e = uiLogic()->pageLogic()->doInstallAction([this, containerConfig, &newContainerConfig](){ + + auto installAction = [this, containerConfig, &newContainerConfig]() { return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->selectedServerIndex), - uiLogic()->selectedDockerContainer, - containerConfig, - newContainerConfig); - }, - pageFunc, progressBarFunc, - saveButtonFunc, waitInfoFunc, - busyInfoFuncy, cancelButtonFunc); + uiLogic()->selectedDockerContainer, containerConfig, newContainerConfig); + }; + + ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, + saveButtonFunc, waitInfoFunc, + busyInfoFuncy, cancelButtonFunc); if (!e) { m_settings->setContainerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, newContainerConfig); diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp index 7ed71962..89ecd929 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp @@ -162,15 +162,15 @@ void OpenVpnLogic::onPushButtonSaveClicked() progressBarFunc.setTextVisibleFunc(true); progressBarFunc.setTextFunc(QString("Configuring...")); - ErrorCode e = uiLogic()->pageLogic()->doInstallAction([this, containerConfig, &newContainerConfig](){ + + auto installAction = [this, containerConfig, &newContainerConfig]() { return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->selectedServerIndex), - uiLogic()->selectedDockerContainer, - containerConfig, - newContainerConfig); - }, - pageFunc, progressBarFunc, - saveButtonFunc, waitInfoFunc, - busyInfoFuncy, cancelButtonFunc); + uiLogic()->selectedDockerContainer, containerConfig, newContainerConfig); + }; + + ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, + saveButtonFunc, waitInfoFunc, + busyInfoFuncy, cancelButtonFunc); if (!e) { m_settings->setContainerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, newContainerConfig); diff --git a/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp b/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp index c6f22c44..66a59ff4 100644 --- a/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp +++ b/client/ui/pages_logic/protocols/ShadowSocksLogic.cpp @@ -50,6 +50,7 @@ QJsonObject ShadowSocksLogic::getProtocolConfigFromPage(QJsonObject oldConfig) void ShadowSocksLogic::onPushButtonSaveClicked() { QJsonObject protocolConfig = m_settings->protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Proto::ShadowSocks); + protocolConfig = getProtocolConfigFromPage(protocolConfig); QJsonObject containerConfig = m_settings->containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer); QJsonObject newContainerConfig = containerConfig; @@ -105,11 +106,9 @@ void ShadowSocksLogic::onPushButtonSaveClicked() progressBarFunc.setTextVisibleFunc(true); progressBarFunc.setTextFunc(QString("Configuring...")); - auto installAction = [this, containerConfig, &newContainerConfig](){ + auto installAction = [this, containerConfig, &newContainerConfig]() { return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->selectedServerIndex), - uiLogic()->selectedDockerContainer, - containerConfig, - newContainerConfig); + uiLogic()->selectedDockerContainer, containerConfig, newContainerConfig); }; ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, saveButtonFunc, waitInfoFunc, diff --git a/client/ui/pages_logic/protocols/V2RayLogic.cpp b/client/ui/pages_logic/protocols/V2RayLogic.cpp index 148a9773..d568d24f 100644 --- a/client/ui/pages_logic/protocols/V2RayLogic.cpp +++ b/client/ui/pages_logic/protocols/V2RayLogic.cpp @@ -11,14 +11,16 @@ using namespace PageEnumNS; V2RayLogic::V2RayLogic(UiLogic *logic, QObject *parent): PageProtocolLogicBase(logic, parent), - m_lineEditPortText{}, + m_lineEditServerPortText{}, m_pushButtonSaveVisible{false}, m_progressBarResetVisible{false}, - m_lineEditPortEnabled{false}, + m_lineEditServerPortEnabled{false}, m_labelInfoVisible{true}, m_labelInfoText{}, m_progressBarResetValue{0}, - m_progressBarResetMaximium{100} + m_progressBarResetMaximium{100}, + m_lineEditLocalPortEnabled{false}, + m_lineEditLocalPortText{} { } @@ -29,21 +31,25 @@ void V2RayLogic::updateProtocolPage(const QJsonObject &v2RayConfig, DockerContai set_pushButtonSaveVisible(haveAuthData); set_progressBarResetVisible(haveAuthData); - set_lineEditPortText(v2RayConfig.value(config_key::port). - toString(protocols::v2ray::defaultServerPort)); + set_lineEditServerPortText(v2RayConfig.value(config_key::port).toString(protocols::v2ray::defaultServerPort)); + set_lineEditServerPortEnabled(container == DockerContainer::V2Ray); + + set_lineEditLocalPortText(v2RayConfig.value(config_key::local_port).toString(protocols::v2ray::defaultLocalPort)); + set_lineEditLocalPortEnabled(container == DockerContainer::V2Ray); - set_lineEditPortEnabled(container == DockerContainer::V2Ray); } QJsonObject V2RayLogic::getProtocolConfigFromPage(QJsonObject oldConfig) { - oldConfig.insert(config_key::port, lineEditPortText()); + oldConfig.insert(config_key::port, lineEditServerPortText()); + oldConfig.insert(config_key::local_port, lineEditLocalPortText()); return oldConfig; } void V2RayLogic::onPushButtonSaveClicked() { QJsonObject protocolConfig = m_settings->protocolConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer, Proto::V2Ray); + protocolConfig = getProtocolConfigFromPage(protocolConfig); QJsonObject containerConfig = m_settings->containerConfig(uiLogic()->selectedServerIndex, uiLogic()->selectedDockerContainer); QJsonObject newContainerConfig = containerConfig; @@ -101,9 +107,7 @@ void V2RayLogic::onPushButtonSaveClicked() auto installAction = [this, containerConfig, &newContainerConfig]() { return m_serverController->updateContainer(m_settings->serverCredentials(uiLogic()->selectedServerIndex), - uiLogic()->selectedDockerContainer, - containerConfig, - newContainerConfig); + uiLogic()->selectedDockerContainer, containerConfig, newContainerConfig); }; ErrorCode e = uiLogic()->pageLogic()->doInstallAction(installAction, pageFunc, progressBarFunc, diff --git a/client/ui/pages_logic/protocols/V2RayLogic.h b/client/ui/pages_logic/protocols/V2RayLogic.h index 1bde8878..4f30c667 100644 --- a/client/ui/pages_logic/protocols/V2RayLogic.h +++ b/client/ui/pages_logic/protocols/V2RayLogic.h @@ -9,8 +9,11 @@ class V2RayLogic : public PageProtocolLogicBase { Q_OBJECT - AUTO_PROPERTY(bool, lineEditPortEnabled) - AUTO_PROPERTY(QString, lineEditPortText) + AUTO_PROPERTY(bool, lineEditServerPortEnabled) + AUTO_PROPERTY(QString, lineEditServerPortText) + + AUTO_PROPERTY(bool, lineEditLocalPortEnabled) + AUTO_PROPERTY(QString, lineEditLocalPortText) AUTO_PROPERTY(bool, labelInfoVisible) AUTO_PROPERTY(QString, labelInfoText) diff --git a/client/ui/qml/Pages/Protocols/PageProtoV2Ray.qml b/client/ui/qml/Pages/Protocols/PageProtoV2Ray.qml index 6d6816be..7f06c9bd 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoV2Ray.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoV2Ray.qml @@ -43,11 +43,31 @@ PageProtocolBase { TextFieldType { Layout.fillWidth: true height: 31 - text: logic.lineEditPortText + text: logic.lineEditServerPortText onEditingFinished: { - logic.lineEditPortText = text + logic.lineEditServerPortText = text } - enabled: logic.lineEditPortEnabled + enabled: logic.lineEditServerPortEnabled + } + } + + RowLayout { + Layout.fillWidth: true + + LabelType { + Layout.preferredWidth: 0.3 * root.width - 10 + height: 31 + text: qsTr("Local port") + } + + TextFieldType { + Layout.fillWidth: true + height: 31 + text: logic.lineEditLocalPortText + onEditingFinished: { + logic.lineEditLocalPortText = text + } + enabled: logic.lineEditLocalPortEnabled } }