2021-02-02 01:47:40 +03:00
|
|
|
#ifndef IPCCLIENT_H
|
|
|
|
|
#define IPCCLIENT_H
|
|
|
|
|
|
2021-02-03 15:42:36 +03:00
|
|
|
#include <QLocalSocket>
|
2021-02-02 01:47:40 +03:00
|
|
|
#include <QObject>
|
|
|
|
|
|
|
|
|
|
#include "ipc.h"
|
2021-09-15 08:03:28 -07:00
|
|
|
#include "rep_ipc_interface_replica.h"
|
2024-09-20 04:12:22 -07:00
|
|
|
#include "rep_ipc_process_tun2socks_replica.h"
|
2021-09-15 08:03:28 -07:00
|
|
|
|
2021-11-19 19:02:39 +03:00
|
|
|
#include "privileged_process.h"
|
2021-02-02 01:47:40 +03:00
|
|
|
|
|
|
|
|
class IpcClient : public QObject
|
|
|
|
|
{
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
public:
|
2021-10-26 12:59:20 +03:00
|
|
|
explicit IpcClient(QObject *parent = nullptr);
|
|
|
|
|
|
|
|
|
|
static IpcClient *Instance();
|
|
|
|
|
static bool init(IpcClient *instance);
|
|
|
|
|
static QSharedPointer<IpcInterfaceReplica> Interface();
|
2024-09-20 04:12:22 -07:00
|
|
|
static QSharedPointer<IpcProcessTun2SocksReplica> InterfaceTun2Socks();
|
2021-11-19 19:02:39 +03:00
|
|
|
static QSharedPointer<PrivilegedProcess> CreatePrivilegedProcess();
|
2021-02-02 01:47:40 +03:00
|
|
|
|
2021-10-26 12:59:20 +03:00
|
|
|
bool isSocketConnected() const;
|
2025-12-02 11:46:24 +07:00
|
|
|
void closeAndResetInstance(bool deleteSelf = false);
|
2021-10-26 12:59:20 +03:00
|
|
|
|
2021-02-02 01:47:40 +03:00
|
|
|
signals:
|
|
|
|
|
|
|
|
|
|
private:
|
2021-10-26 12:59:20 +03:00
|
|
|
~IpcClient() override;
|
2021-02-02 01:47:40 +03:00
|
|
|
|
2021-02-18 15:00:41 +03:00
|
|
|
QRemoteObjectNode m_ClientNode;
|
2024-09-20 04:12:22 -07:00
|
|
|
QRemoteObjectNode m_Tun2SocksNode;
|
2021-02-02 01:47:40 +03:00
|
|
|
QSharedPointer<IpcInterfaceReplica> m_ipcClient;
|
2021-10-26 12:59:20 +03:00
|
|
|
QPointer<QLocalSocket> m_localSocket;
|
2024-09-20 04:12:22 -07:00
|
|
|
QPointer<QLocalSocket> m_tun2socksSocket;
|
|
|
|
|
QSharedPointer<IpcProcessTun2SocksReplica> m_Tun2SocksClient;
|
2021-02-02 01:47:40 +03:00
|
|
|
|
2021-02-18 15:00:41 +03:00
|
|
|
struct ProcessDescriptor {
|
|
|
|
|
ProcessDescriptor () {
|
|
|
|
|
replicaNode = QSharedPointer<QRemoteObjectNode>(new QRemoteObjectNode());
|
2021-11-19 19:02:39 +03:00
|
|
|
ipcProcess = QSharedPointer<PrivilegedProcess>();
|
2021-02-18 15:00:41 +03:00
|
|
|
localSocket = QSharedPointer<QLocalSocket>();
|
|
|
|
|
}
|
2021-11-19 19:02:39 +03:00
|
|
|
QSharedPointer<PrivilegedProcess> ipcProcess;
|
2021-02-18 15:00:41 +03:00
|
|
|
QSharedPointer<QRemoteObjectNode> replicaNode;
|
|
|
|
|
QSharedPointer<QLocalSocket> localSocket;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
QMap<int, QSharedPointer<ProcessDescriptor>> m_processNodes;
|
2021-10-26 12:59:20 +03:00
|
|
|
bool m_isSocketConnected {false};
|
|
|
|
|
|
|
|
|
|
static IpcClient *m_instance;
|
2021-02-02 01:47:40 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // IPCCLIENT_H
|