resetIpStack added

This commit is contained in:
pokamest 2021-12-15 14:53:07 +03:00
parent 5aa47d35e7
commit 343e6a50df
8 changed files with 42 additions and 0 deletions

View file

@ -47,6 +47,7 @@ void VpnConnection::onConnectionStateChanged(VpnProtocol::VpnConnectionState sta
{ {
if (IpcClient::Interface()) { if (IpcClient::Interface()) {
if (state == VpnProtocol::Connected){ if (state == VpnProtocol::Connected){
IpcClient::Interface()->resetIpStack();
IpcClient::Interface()->flushDns(); IpcClient::Interface()->flushDns();
if (m_settings.routeMode() != Settings::VpnAllSites) { if (m_settings.routeMode() != Settings::VpnAllSites) {

View file

@ -11,6 +11,7 @@ class IpcInterface
SLOT( bool clearSavedRoutes() ); SLOT( bool clearSavedRoutes() );
SLOT( bool routeDeleteList(const QString &gw, const QStringList &ip) ); SLOT( bool routeDeleteList(const QString &gw, const QStringList &ip) );
SLOT( void flushDns() ); SLOT( void flushDns() );
SLOT( void resetIpStack() );
SLOT( bool checkAndInstallDriver() ); SLOT( bool checkAndInstallDriver() );
SLOT( QStringList getTapList() ); SLOT( QStringList getTapList() );

View file

@ -83,6 +83,11 @@ void IpcServer::flushDns()
return Router::flushDns(); return Router::flushDns();
} }
void IpcServer::resetIpStack()
{
Router::resetIpStack();
}
bool IpcServer::checkAndInstallDriver() bool IpcServer::checkAndInstallDriver()
{ {
#ifdef Q_OS_WIN #ifdef Q_OS_WIN

View file

@ -20,6 +20,7 @@ public:
virtual bool clearSavedRoutes() override; virtual bool clearSavedRoutes() override;
virtual bool routeDeleteList(const QString &gw, const QStringList &ips) override; virtual bool routeDeleteList(const QString &gw, const QStringList &ips) override;
virtual void flushDns() override; virtual void flushDns() override;
virtual void resetIpStack() override;
virtual bool checkAndInstallDriver() override; virtual bool checkAndInstallDriver() override;
virtual QStringList getTapList() override; virtual QStringList getTapList() override;

View file

@ -53,3 +53,14 @@ void Router::flushDns()
#endif #endif
} }
void Router::resetIpStack()
{
#ifdef Q_OS_WIN
RouterWin::Instance().resetIpStack();
#elif defined (Q_OS_MAC)
// todo fixme
#elif defined Q_OS_LINUX
// todo fixme
#endif
}

View file

@ -19,6 +19,7 @@ public:
static bool clearSavedRoutes(); static bool clearSavedRoutes();
static int routeDeleteList(const QString &gw, const QStringList &ips); static int routeDeleteList(const QString &gw, const QStringList &ips);
static void flushDns(); static void flushDns();
static void resetIpStack();
}; };
#endif // ROUTER_H #endif // ROUTER_H

View file

@ -289,6 +289,27 @@ void RouterWin::flushDns()
//qDebug().noquote() << "OUTPUT ipconfig /flushdns: " + p.readAll(); //qDebug().noquote() << "OUTPUT ipconfig /flushdns: " + p.readAll();
} }
void RouterWin::resetIpStack()
{
// {
// QProcess p;
// QString command = QString("ipconfig /release");
// p.start(command);
// }
{
QProcess p;
QString command = QString("netsh int ip reset");
p.start(command);
p.waitForFinished();
}
{
QProcess p;
QString command = QString("netsh winsock reset");
p.start(command);
p.waitForFinished();
}
}
void RouterWin::suspendWcmSvc(bool suspend) void RouterWin::suspendWcmSvc(bool suspend)
{ {
if (suspend == m_suspended) return; if (suspend == m_suspended) return;

View file

@ -39,6 +39,7 @@ public:
bool clearSavedRoutes(); bool clearSavedRoutes();
int routeDeleteList(const QString &gw, const QStringList &ips); int routeDeleteList(const QString &gw, const QStringList &ips);
void flushDns(); void flushDns();
void resetIpStack();
void suspendWcmSvc(bool suspend); void suspendWcmSvc(bool suspend);