diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp index 23e4e36e..f571c91a 100644 --- a/client/core/errorstrings.cpp +++ b/client/core/errorstrings.cpp @@ -39,6 +39,8 @@ QString errorString(ErrorCode code){ // Distro errors case (OpenVpnExecutableMissing): return QObject::tr("OpenVPN executable missing"); + case (ShadowSocksExecutableMissing): return QObject::tr("ShadowSocks (ss-local) executable missing"); + case (CloakExecutableMissing): return QObject::tr("Cloak (ck-client) executable missing"); case (AmneziaServiceConnectionFailed): return QObject::tr("Amnezia helper service error"); case (OpenSslFailed): return QObject::tr("OpenSSL failed"); diff --git a/client/protocols/openvpnovercloakprotocol.cpp b/client/protocols/openvpnovercloakprotocol.cpp index 01afb4ca..2e9d77e8 100644 --- a/client/protocols/openvpnovercloakprotocol.cpp +++ b/client/protocols/openvpnovercloakprotocol.cpp @@ -27,6 +27,10 @@ OpenVpnOverCloakProtocol::~OpenVpnOverCloakProtocol() ErrorCode OpenVpnOverCloakProtocol::start() { + if (!QFileInfo::exists(cloakExecPath())) { + setLastError(ErrorCode::CloakExecutableMissing); + return lastError(); + } #ifndef Q_OS_IOS if (Utils::processIsRunning(Utils::executable("ck-client", false))) { Utils::killProcessByName(Utils::executable("ck-client", false)); @@ -106,6 +110,8 @@ QString OpenVpnOverCloakProtocol::cloakExecPath() { #ifdef Q_OS_WIN return Utils::executable(QString("cloak/ck-client"), true); +#elif defined Q_OS_LINUX + return Utils::usrExecutable("ck-client"); #else return Utils::executable(QString("/ck-client"), true); #endif diff --git a/client/protocols/shadowsocksvpnprotocol.cpp b/client/protocols/shadowsocksvpnprotocol.cpp index e2465c1f..bc494777 100644 --- a/client/protocols/shadowsocksvpnprotocol.cpp +++ b/client/protocols/shadowsocksvpnprotocol.cpp @@ -27,6 +27,13 @@ ShadowSocksVpnProtocol::~ShadowSocksVpnProtocol() ErrorCode ShadowSocksVpnProtocol::start() { + + if (!QFileInfo::exists(shadowSocksExecPath())) { + setLastError(ErrorCode::ShadowSocksExecutableMissing); + return lastError(); + } + + #ifndef Q_OS_IOS if (Utils::processIsRunning(Utils::executable("ss-local", false))) { Utils::killProcessByName(Utils::executable("ss-local", false));