From 7da840db8519dfb702b17b9adebe346801b27acb Mon Sep 17 00:00:00 2001
From: Constantin Papizh <p.const@bk.ru>
Date: Wed, 25 Dec 2019 20:39:19 +0300
Subject: [PATCH] Attempt to resolve optional untouching Tun i-face for the
 same net config

---
 DapStreamChChainNetSrvVpn.cpp | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/DapStreamChChainNetSrvVpn.cpp b/DapStreamChChainNetSrvVpn.cpp
index cc069a85..c02463a4 100644
--- a/DapStreamChChainNetSrvVpn.cpp
+++ b/DapStreamChChainNetSrvVpn.cpp
@@ -371,10 +371,17 @@ void ChChainNetSrvVpn::onPktIn(DapChannelPacket* pkt)
             quint32 l_addr,l_gw;
             ::memcpy(&l_addr, pktSF->data,sizeof (l_addr));
             ::memcpy(&l_gw, pktSF->data+sizeof (l_addr),sizeof (l_addr));
-            m_addr = QHostAddress(  ::ntohl(l_addr) ).toString() ;
-            m_gw = QHostAddress( ::ntohl ( l_gw )).toString()  ;
-            emit netConfigReceived(m_addr,m_gw);
-        }break;
+            QString new_addr    = QHostAddress(  ::ntohl(l_addr) ).toString();
+            QString new_gw      = QHostAddress( ::ntohl ( l_gw )).toString();
+            if (m_addr == new_addr && new_gw == m_gw) {
+                qDebug() << "Net config is the same, we don't touch Tun";
+                emit netConfigReceivedSame();
+            } else {
+                m_addr = new_addr;
+                m_gw = new_gw;
+                emit netConfigReceived(m_addr,m_gw);
+            }
+        } break;
         case STREAM_SF_PACKET_OP_CODE_RAW_RECV:{
             pkt->unleashData(); // Uleash *data section from pkt object
             tun->tunWriteData(pktSF);
-- 
GitLab