
* cherry-pick 4dfcad96506fb5b88c5bb27342b6d9413fc361c9 from mozilla upstream * cherry-pick a95fa8c088b9edaff2de18751336942c2d145a9a from mozilla * cherry-pick commit 4fc1ebbad86a9abcafdc761725a7afd811c8d2d3 from mozilla * cherry-pick 4dfcad96506fb5b88c5bb27342b6d9413fc361c9 from mozilla upstream * cherry-pick 22de4fcbd454c64ff496c3380eeaeeb6afff4d64 from mozilla upstream * cherry-pick 649673be561b66c96367adf379da1545f8838763 from mozilla upstream * cherry-pick 41bdad34517d0ddaef32139482e5505d92e4b533 from mozilla upstream * cherry-pick f6e49a85538eaa230d3a8634fa7600966132ccab from mozilla upstream * cherry-pick 86c585387efa0a09c7937dfe799a90a666404fcd from mozilla upstream * cherry-pick a18c1fac740469ca3566751b74a16227518630c4 from mozilla upstream * fixed missing ; * added excludeLocalNetworks() for linux * build fixes on windows after cherry-picks * Add rules for excluded sites splittunell mode * Fix app splittunell when ipv6 is not setup * Fix Linux build --------- Co-authored-by: Mykola Baibuz <mykola.baibuz@gmail.com>
93 lines
2.6 KiB
C++
93 lines
2.6 KiB
C++
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef DAEMON_H
|
|
#define DAEMON_H
|
|
|
|
#include <QDateTime>
|
|
#include <QTimer>
|
|
|
|
#include "daemon/daemonerrors.h"
|
|
#include "daemonerrors.h"
|
|
#include "dnsutils.h"
|
|
#include "interfaceconfig.h"
|
|
#include "iputils.h"
|
|
#include "wireguardutils.h"
|
|
|
|
class Daemon : public QObject {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum Op {
|
|
Up,
|
|
Down,
|
|
Switch,
|
|
};
|
|
|
|
explicit Daemon(QObject* parent);
|
|
~Daemon();
|
|
|
|
static Daemon* instance();
|
|
|
|
static bool parseConfig(const QJsonObject& obj, InterfaceConfig& config);
|
|
|
|
virtual bool activate(const InterfaceConfig& config);
|
|
virtual bool deactivate(bool emitSignals = true);
|
|
virtual QJsonObject getStatus();
|
|
|
|
// Callback before any Activating measure is done
|
|
virtual void prepareActivation(const InterfaceConfig& config, int inetAdapterIndex = 0) {
|
|
Q_UNUSED(config) };
|
|
virtual void activateSplitTunnel(const InterfaceConfig& config, int vpnAdapterIndex = 0) {
|
|
Q_UNUSED(config) };
|
|
|
|
QString logs();
|
|
void cleanLogs();
|
|
|
|
signals:
|
|
void connected(const QString& pubkey);
|
|
/**
|
|
* Can be fired if a call to activate() was unsucessfull
|
|
* and connected systems should rollback
|
|
*/
|
|
void activationFailure();
|
|
void disconnected();
|
|
void backendFailure(DaemonError reason = DaemonError::ERROR_FATAL);
|
|
|
|
private:
|
|
bool maybeUpdateResolvers(const InterfaceConfig& config);
|
|
bool addExclusionRoute(const IPAddress& address);
|
|
bool delExclusionRoute(const IPAddress& address);
|
|
|
|
protected:
|
|
virtual bool run(Op op, const InterfaceConfig& config) {
|
|
Q_UNUSED(op);
|
|
Q_UNUSED(config);
|
|
return true;
|
|
}
|
|
virtual bool supportServerSwitching(const InterfaceConfig& config) const;
|
|
virtual bool switchServer(const InterfaceConfig& config);
|
|
virtual WireguardUtils* wgutils() const = 0;
|
|
virtual bool supportIPUtils() const { return false; }
|
|
virtual IPUtils* iputils() { return nullptr; }
|
|
virtual DnsUtils* dnsutils() { return nullptr; }
|
|
|
|
static bool parseStringList(const QJsonObject& obj, const QString& name,
|
|
QStringList& list);
|
|
|
|
void checkHandshake();
|
|
|
|
class ConnectionState {
|
|
public:
|
|
ConnectionState(){};
|
|
ConnectionState(const InterfaceConfig& config) { m_config = config; }
|
|
QDateTime m_date;
|
|
InterfaceConfig m_config;
|
|
};
|
|
QMap<InterfaceConfig::HopType, ConnectionState> m_connections;
|
|
QHash<IPAddress, int> m_excludedAddrSet;
|
|
QTimer m_handshakeTimer;
|
|
};
|
|
|
|
#endif // DAEMON_H
|