From 915c8f46c54f127157ce80c030863f650b9853aa Mon Sep 17 00:00:00 2001 From: Cyril Anisimov Date: Sat, 8 Feb 2025 16:34:04 +0100 Subject: [PATCH 1/5] add timeouts in ipc client init --- client/core/ipcclient.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/client/core/ipcclient.cpp b/client/core/ipcclient.cpp index b44da1bf..8a316df9 100644 --- a/client/core/ipcclient.cpp +++ b/client/core/ipcclient.cpp @@ -1,5 +1,8 @@ #include "ipcclient.h" #include +#include +#include + IpcClient *IpcClient::m_instance = nullptr; @@ -44,6 +47,12 @@ bool IpcClient::init(IpcClient *instance) Instance()->m_ClientNode.addClientSideConnection(Instance()->m_localSocket.data()); Instance()->m_ipcClient.reset(Instance()->m_ClientNode.acquire()); + std::this_thread::sleep_for(std::chrono::seconds(2)); //< wait until client is ready + + if (!Instance()->m_ipcClient) { + qFatal() << "IpcClient is not ready!"; + } + Instance()->m_ipcClient->waitForSource(1000); if (!Instance()->m_ipcClient->isReplicaValid()) { @@ -51,6 +60,12 @@ bool IpcClient::init(IpcClient *instance) } Instance()->m_Tun2SocksClient.reset(Instance()->m_ClientNode.acquire()); + std::this_thread::sleep_for(std::chrono::seconds(5)); //< wait until client is ready + + if (!Instance()->m_Tun2SocksClient) { + qFatal() << "IpcClient::m_Tun2SocksClient is not ready!"; + } + Instance()->m_Tun2SocksClient->waitForSource(1000); if (!Instance()->m_Tun2SocksClient->isReplicaValid()) { From 9398e0e6950e635a6737ac8091b73e0b37a8f681 Mon Sep 17 00:00:00 2001 From: Cyril Anisimov Date: Sat, 8 Feb 2025 20:30:29 +0100 Subject: [PATCH 2/5] apply timeouts only for Windows --- client/core/ipcclient.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/client/core/ipcclient.cpp b/client/core/ipcclient.cpp index 8a316df9..cfd6af12 100644 --- a/client/core/ipcclient.cpp +++ b/client/core/ipcclient.cpp @@ -47,7 +47,9 @@ bool IpcClient::init(IpcClient *instance) Instance()->m_ClientNode.addClientSideConnection(Instance()->m_localSocket.data()); Instance()->m_ipcClient.reset(Instance()->m_ClientNode.acquire()); +#ifdef Q_OS_WIN std::this_thread::sleep_for(std::chrono::seconds(2)); //< wait until client is ready +#endif if (!Instance()->m_ipcClient) { qFatal() << "IpcClient is not ready!"; @@ -60,8 +62,11 @@ bool IpcClient::init(IpcClient *instance) } Instance()->m_Tun2SocksClient.reset(Instance()->m_ClientNode.acquire()); + +#ifdef Q_OS_WIN std::this_thread::sleep_for(std::chrono::seconds(5)); //< wait until client is ready - +#endif + if (!Instance()->m_Tun2SocksClient) { qFatal() << "IpcClient::m_Tun2SocksClient is not ready!"; } From eb83086d5cd16a423c2c3abde9ceafb4a20ab2fc Mon Sep 17 00:00:00 2001 From: Cyril Anisimov Date: Sat, 8 Feb 2025 20:30:54 +0100 Subject: [PATCH 3/5] apply format to file --- client/core/ipcclient.cpp | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/client/core/ipcclient.cpp b/client/core/ipcclient.cpp index cfd6af12..7b13ba07 100644 --- a/client/core/ipcclient.cpp +++ b/client/core/ipcclient.cpp @@ -3,17 +3,16 @@ #include #include - IpcClient *IpcClient::m_instance = nullptr; IpcClient::IpcClient(QObject *parent) : QObject(parent) { - } IpcClient::~IpcClient() { - if (m_localSocket) m_localSocket->close(); + if (m_localSocket) + m_localSocket->close(); } bool IpcClient::isSocketConnected() const @@ -28,13 +27,15 @@ IpcClient *IpcClient::Instance() QSharedPointer IpcClient::Interface() { - if (!Instance()) return nullptr; + if (!Instance()) + return nullptr; return Instance()->m_ipcClient; } QSharedPointer IpcClient::InterfaceTun2Socks() { - if (!Instance()) return nullptr; + if (!Instance()) + return nullptr; return Instance()->m_Tun2SocksClient; } @@ -78,9 +79,8 @@ bool IpcClient::init(IpcClient *instance) } }); - connect(Instance()->m_localSocket, &QLocalSocket::disconnected, [instance](){ - instance->m_isSocketConnected = false; - }); + connect(Instance()->m_localSocket, &QLocalSocket::disconnected, + [instance]() { instance->m_isSocketConnected = false; }); Instance()->m_localSocket->connectToServer(amnezia::getIpcServiceUrl()); Instance()->m_localSocket->waitForConnected(); @@ -97,7 +97,7 @@ bool IpcClient::init(IpcClient *instance) QSharedPointer IpcClient::CreatePrivilegedProcess() { - if (! Instance()->m_ipcClient || ! Instance()->m_ipcClient->isReplicaValid()) { + if (!Instance()->m_ipcClient || !Instance()->m_ipcClient->isReplicaValid()) { qWarning() << "IpcClient::createPrivilegedProcess : IpcClient IpcClient replica is not valid"; return nullptr; } @@ -120,18 +120,15 @@ QSharedPointer IpcClient::CreatePrivilegedProcess() pd->ipcProcess.reset(priv); if (!pd->ipcProcess) { qWarning() << "Acquire PrivilegedProcess failed"; - } - else { + } else { pd->ipcProcess->waitForSource(1000); if (!pd->ipcProcess->isReplicaValid()) { qWarning() << "PrivilegedProcess replica is not connected!"; } - QObject::connect(pd->ipcProcess.data(), &PrivilegedProcess::destroyed, pd->ipcProcess.data(), [pd](){ - pd->replicaNode->deleteLater(); - }); + QObject::connect(pd->ipcProcess.data(), &PrivilegedProcess::destroyed, pd->ipcProcess.data(), + [pd]() { pd->replicaNode->deleteLater(); }); } - }); pd->localSocket->connectToServer(amnezia::getIpcProcessUrl(pid)); pd->localSocket->waitForConnected(); @@ -139,5 +136,3 @@ QSharedPointer IpcClient::CreatePrivilegedProcess() auto processReplica = QSharedPointer(pd->ipcProcess); return processReplica; } - - From 35e0e146e616484fa592705894337f71fb5fb745 Mon Sep 17 00:00:00 2001 From: Mykola Baibuz Date: Wed, 19 Feb 2025 14:34:26 +0200 Subject: [PATCH 4/5] Rewrite timeouts using waitForSource --- client/core/ipcclient.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/client/core/ipcclient.cpp b/client/core/ipcclient.cpp index 7b13ba07..da08ea04 100644 --- a/client/core/ipcclient.cpp +++ b/client/core/ipcclient.cpp @@ -1,7 +1,5 @@ #include "ipcclient.h" #include -#include -#include IpcClient *IpcClient::m_instance = nullptr; @@ -46,14 +44,12 @@ bool IpcClient::init(IpcClient *instance) Instance()->m_localSocket = new QLocalSocket(Instance()); connect(Instance()->m_localSocket.data(), &QLocalSocket::connected, &Instance()->m_ClientNode, []() { Instance()->m_ClientNode.addClientSideConnection(Instance()->m_localSocket.data()); - - Instance()->m_ipcClient.reset(Instance()->m_ClientNode.acquire()); -#ifdef Q_OS_WIN - std::this_thread::sleep_for(std::chrono::seconds(2)); //< wait until client is ready -#endif + auto cliNode = Instance()->m_ClientNode.acquire(); + cliNode->waitForSource(5000); + Instance()->m_ipcClient.reset(cliNode); if (!Instance()->m_ipcClient) { - qFatal() << "IpcClient is not ready!"; + qWarning() << "IpcClient is not ready!"; } Instance()->m_ipcClient->waitForSource(1000); @@ -64,12 +60,12 @@ bool IpcClient::init(IpcClient *instance) Instance()->m_Tun2SocksClient.reset(Instance()->m_ClientNode.acquire()); -#ifdef Q_OS_WIN - std::this_thread::sleep_for(std::chrono::seconds(5)); //< wait until client is ready -#endif + auto t2sNode = Instance()->m_ClientNode.acquire(); + t2sNode->waitForSource(5000); + Instance()->m_ipcClient.reset(t2sNode); if (!Instance()->m_Tun2SocksClient) { - qFatal() << "IpcClient::m_Tun2SocksClient is not ready!"; + qWarning() << "IpcClient::m_Tun2SocksClient is not ready!"; } Instance()->m_Tun2SocksClient->waitForSource(1000); From 46536bc60ab15fd8ed4c84d2d63ad53cce34d751 Mon Sep 17 00:00:00 2001 From: Mykola Baibuz Date: Fri, 21 Feb 2025 09:31:10 +0200 Subject: [PATCH 5/5] change node to IpcProcessTun2SocksReplica --- client/core/ipcclient.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/client/core/ipcclient.cpp b/client/core/ipcclient.cpp index da08ea04..69edcd15 100644 --- a/client/core/ipcclient.cpp +++ b/client/core/ipcclient.cpp @@ -58,11 +58,9 @@ bool IpcClient::init(IpcClient *instance) qWarning() << "IpcClient replica is not connected!"; } - Instance()->m_Tun2SocksClient.reset(Instance()->m_ClientNode.acquire()); - - auto t2sNode = Instance()->m_ClientNode.acquire(); + auto t2sNode = Instance()->m_ClientNode.acquire(); t2sNode->waitForSource(5000); - Instance()->m_ipcClient.reset(t2sNode); + Instance()->m_Tun2SocksClient.reset(t2sNode); if (!Instance()->m_Tun2SocksClient) { qWarning() << "IpcClient::m_Tun2SocksClient is not ready!";