shadowsocks impl
This commit is contained in:
parent
95cbb07cbb
commit
ec9ae0ef4f
20 changed files with 380 additions and 117 deletions
|
|
@ -19,7 +19,8 @@ OpenVpnProtocol::OpenVpnProtocol(const QString& args, QObject* parent) :
|
|||
|
||||
OpenVpnProtocol::~OpenVpnProtocol()
|
||||
{
|
||||
stop();
|
||||
qDebug() << "OpenVpnProtocol::stop()";
|
||||
OpenVpnProtocol::stop();
|
||||
}
|
||||
|
||||
void OpenVpnProtocol::onMessageReceived(const Message& message)
|
||||
|
|
@ -120,7 +121,7 @@ ErrorCode OpenVpnProtocol::start()
|
|||
|
||||
m_requestFromUserToStop = false;
|
||||
m_openVpnStateSigTermHandlerTimer.stop();
|
||||
stop();
|
||||
OpenVpnProtocol::stop();
|
||||
|
||||
if (communicator() && !communicator()->isConnected()) {
|
||||
setLastError(ErrorCode::AmneziaServiceConnectionFailed);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class OpenVpnProtocol : public VpnProtocol
|
|||
|
||||
public:
|
||||
explicit OpenVpnProtocol(const QString& args = QString(), QObject* parent = nullptr);
|
||||
~OpenVpnProtocol() override;
|
||||
virtual ~OpenVpnProtocol() override;
|
||||
|
||||
ErrorCode start() override;
|
||||
void stop() override;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,68 @@
|
|||
#include "shadowsocksvpnprotocol.h"
|
||||
#include "core/servercontroller.h"
|
||||
|
||||
ShadowSocksVpnProtocol::ShadowSocksVpnProtocol()
|
||||
#include "communicator.h"
|
||||
#include "debug.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
|
||||
ShadowSocksVpnProtocol::ShadowSocksVpnProtocol(const QString &args, QObject *parent):
|
||||
OpenVpnProtocol(args, parent)
|
||||
{
|
||||
|
||||
m_shadowSocksConfig = args;
|
||||
}
|
||||
|
||||
ErrorCode ShadowSocksVpnProtocol::start()
|
||||
{
|
||||
qDebug() << "ShadowSocksVpnProtocol::start()";
|
||||
QJsonObject config = QJsonDocument::fromJson(m_shadowSocksConfig.toUtf8()).object();
|
||||
|
||||
ssProcess.setProcessChannelMode(QProcess::MergedChannels);
|
||||
|
||||
ssProcess.setProgram(shadowSocksExecPath());
|
||||
ssProcess.setArguments(QStringList() << "-s" << config.value("server").toString()
|
||||
<< "-p" << QString::number(config.value("server_port").toInt())
|
||||
<< "-l" << QString::number(config.value("local_port").toInt())
|
||||
<< "-m" << config.value("method").toString()
|
||||
<< "-k" << config.value("password").toString()
|
||||
);
|
||||
|
||||
ssProcess.start();
|
||||
ssProcess.waitForStarted();
|
||||
|
||||
if (ssProcess.state() == QProcess::ProcessState::Running) {
|
||||
setConnectionState(ConnectionState::Connecting);
|
||||
|
||||
return OpenVpnProtocol::start();
|
||||
}
|
||||
else return ErrorCode::FailedToStartRemoteProcessError;
|
||||
}
|
||||
|
||||
void ShadowSocksVpnProtocol::stop()
|
||||
{
|
||||
qDebug() << "ShadowSocksVpnProtocol::stop()";
|
||||
ssProcess.kill();
|
||||
}
|
||||
|
||||
QString ShadowSocksVpnProtocol::shadowSocksExecPath() const
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
return Utils::executable(QString("ss/ss-local"), true);
|
||||
#else
|
||||
return Utils::executable(QString("/ss-local"), true);
|
||||
#endif
|
||||
}
|
||||
|
||||
QString ShadowSocksVpnProtocol::genShadowSocksConfig(const ServerCredentials &credentials, Protocol proto)
|
||||
{
|
||||
QJsonObject ssConfig;
|
||||
ssConfig.insert("server", credentials.hostName);
|
||||
ssConfig.insert("server_port", ServerController::ssRemotePort());
|
||||
ssConfig.insert("local_port", ServerController::ssContainerPort());
|
||||
ssConfig.insert("password", credentials.password);
|
||||
ssConfig.insert("timeout", 60);
|
||||
ssConfig.insert("method", ServerController::ssEncryption());
|
||||
return QJsonDocument(ssConfig).toJson();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,11 +2,26 @@
|
|||
#define SHADOWSOCKSVPNPROTOCOL_H
|
||||
|
||||
#include "openvpnprotocol.h"
|
||||
#include "QProcess"
|
||||
|
||||
class ShadowSocksVpnProtocol : public OpenVpnProtocol
|
||||
{
|
||||
public:
|
||||
ShadowSocksVpnProtocol();
|
||||
ShadowSocksVpnProtocol(const QString& args = QString(), QObject* parent = nullptr);
|
||||
|
||||
ErrorCode start() override;
|
||||
void stop() override;
|
||||
|
||||
static QString genShadowSocksConfig(const ServerCredentials &credentials, Protocol proto = Protocol::ShadowSocks);
|
||||
|
||||
protected:
|
||||
QString shadowSocksExecPath() const;
|
||||
|
||||
protected:
|
||||
QString m_shadowSocksConfig;
|
||||
|
||||
private:
|
||||
QProcess ssProcess;
|
||||
};
|
||||
|
||||
#endif // SHADOWSOCKSVPNPROTOCOL_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue