Files
amnezia-client/service/server/localserver.cpp
T

73 lines
1.9 KiB
C++
Raw Normal View History

2020-12-26 15:03:51 +03:00
#include <QCoreApplication>
#include <QFileInfo>
#include <QLocalServer>
#include <QLocalSocket>
2021-02-02 01:47:40 +03:00
#include "ipc.h"
2020-12-26 15:03:51 +03:00
#include "localserver.h"
#include "utilities.h"
2020-12-26 15:03:51 +03:00
2021-01-26 15:01:15 +03:00
#include "router.h"
2023-07-15 14:19:48 -07:00
#include "logger.h"
2021-01-26 15:01:15 +03:00
#ifdef Q_OS_WIN
#include "tapcontroller_win.h"
#endif
2023-07-15 14:19:48 -07:00
namespace {
Logger logger("WgDaemonServer");
2023-07-15 14:19:48 -07:00
}
2020-12-26 23:17:20 +03:00
LocalServer::LocalServer(QObject *parent) : QObject(parent),
2021-02-02 01:47:40 +03:00
m_ipcServer(this)
2020-12-26 15:03:51 +03:00
{
2021-02-03 15:42:36 +03:00
// Create the server and listen outside of QtRO
m_server = QSharedPointer<QLocalServer>(new QLocalServer(this));
m_server->setSocketOptions(QLocalServer::WorldAccessOption);
2020-12-26 15:03:51 +03:00
2021-02-03 15:42:36 +03:00
if (!m_server->listen(amnezia::getIpcServiceUrl())) {
qDebug() << QString("Unable to start the server: %1.").arg(m_server->errorString());
return;
}
2021-02-02 01:47:40 +03:00
2021-02-03 15:42:36 +03:00
QObject::connect(m_server.data(), &QLocalServer::newConnection, this, [this]() {
qDebug() << "LocalServer new connection";
m_serverNode.addHostSideConnection(m_server->nextPendingConnection());
if (!m_isRemotingEnabled) {
m_isRemotingEnabled = true;
m_serverNode.enableRemoting(&m_ipcServer);
}
});
2023-07-15 14:19:48 -07:00
// Init Mozilla Wireguard Daemon
if (!server.initialize()) {
logger.error() << "Failed to initialize the server";
return;
}
2023-09-17 17:06:24 -04:00
#ifdef Q_OS_LINUX
// Signal handling for a proper shutdown.
QObject::connect(qApp, &QCoreApplication::aboutToQuit,
[]() { LinuxDaemon::instance()->deactivate(); });
#endif
2023-07-15 14:19:48 -07:00
#ifdef Q_OS_MAC
2023-07-15 14:19:48 -07:00
// Signal handling for a proper shutdown.
QObject::connect(qApp, &QCoreApplication::aboutToQuit,
[]() { MacOSDaemon::instance()->deactivate(); });
#endif
#ifdef Q_OS_WIN
// Signal handling for a proper shutdown.
QObject::connect(qApp, &QCoreApplication::aboutToQuit,
[]() { WindowsDaemon::instance()->deactivate(); });
#endif
2020-12-26 15:03:51 +03:00
}
LocalServer::~LocalServer()
{
qDebug() << "Local server stopped";
}