diff --git a/proxyobject.cpp b/proxyobject.cpp index 7adf31430caa8b248b124b8531760a0eb3fd001a..239ea8303ee3941b2bde5d7f8231db6e8077e503 100644 --- a/proxyobject.cpp +++ b/proxyobject.cpp @@ -63,10 +63,19 @@ void ProxyObject::initEngine() else engine->AddListeningAddress(keyPrefix,QHostAddress::Any,nInnerPort,false); - m_para_OuterAddress[nInnerPort] = strOuterAddress; + QHostInfo info = QHostInfo::fromName(strOuterAddress); + QList lstaddr = info.addresses(); + if (lstaddr.size()) + { + QString outerIP = lstaddr.first().toString(); + stout<AddClientTransThreads(2,false); + engine->AddClientTransThreads(4,false); } //The socket error message @@ -85,10 +94,10 @@ void ProxyObject::slot_NewClientConnected(QObject * clientHandle) QString pn = sock->peerName(); if (pn.length()) { - if (m_OurterIPLocalPort.contains(pn)) + if (m_para_IPLocalPort.contains(pn)) { qDebug()<<"Outer side " << pn<<":"<peerPort()<<",Local Port="<localPort()<<" Connected"; - int nLocalPort = m_OurterIPLocalPort[pn]; + int nLocalPort = m_para_IPLocalPort[pn]; if (m_pendingInners[nLocalPort].size()) { QObject * innerClient = m_pendingInners[nLocalPort].first(); @@ -134,20 +143,7 @@ void ProxyObject::slot_NewClientConnected(QObject * clientHandle) { qDebug()<<"Inner side "<peerAddress().toString()<<":"<peerPort()<<",Local Port="<localPort()<<" Connected"; m_pendingInners[localPort].push_back(clientHandle); - QHostInfo info = QHostInfo::fromName(m_para_OuterAddress[localPort]); - QList lstaddr = info.addresses(); - if (lstaddr.size()) - { - QString outerIP = lstaddr.first().toString(); - m_OurterIPLocalPort[outerIP] = localPort; - engine->connectTo(QHostAddress(outerIP),m_para_OuterPort[localPort],false); - } - else - { - qWarning()<<"Address Not found in DNS."; - engine->KickClients(clientHandle); - } - + engine->connectTo(QHostAddress(m_para_OuterAddress[localPort]),m_para_OuterPort[localPort],false); } else { @@ -165,6 +161,8 @@ void ProxyObject::slot_ClientDisconnected(QObject * clientHandle) penging_data.remove(clientHandle); m_hash_Inner2Outer.remove(clientHandle); m_hash_Outer2Inner.remove(clientHandle); + foreach (int k , m_pendingInners.keys()) + m_pendingInners[k].removeAll(clientHandle); } //some data arrival @@ -188,6 +186,7 @@ void ProxyObject::timerEvent(QTimerEvent *event) { if (event->timerId()==m_nTimerRefresh) { + static int counter = 0; fprintf (stdout,"Send %.2lf MB(%.2lfkbps) Rev %.2lf MB (%.2lfkbps) \r", g_bytesRecieved/1024.0/1024.0, g_secRecieved /1024.0*8, @@ -197,5 +196,40 @@ void ProxyObject::timerEvent(QTimerEvent *event) g_secRecieved = 0; g_secSent = 0; + if (++counter % 3600 == 0) + { + killTimer(m_nTimerRefresh); + m_nTimerRefresh = -1; + QTextStream stout(stdout,QIODevice::WriteOnly); + QString inidfile = QCoreApplication::applicationFilePath()+".ini"; + QSettings settings(inidfile,QSettings::IniFormat); + int nPorts = settings.value("PROXY/Ports",0).toInt(); + for (int i=0;i lstaddr = info.addresses(); + if (lstaddr.size()) + { + QString outerIP = lstaddr.first().toString(); + m_para_IPLocalPort[outerIP] = nInnerPort; + m_para_OuterAddress[nInnerPort] = outerIP; + stout< m_para_OuterPort; QMap m_para_OuterAddress; + QMap m_para_IPLocalPort; + private: int m_nTimerRefresh = -1; ZPNetwork::zp_net_Engine * engine; @@ -26,7 +28,6 @@ private: QHash m_hash_Inner2Outer; QHash m_hash_Outer2Inner; QHash > penging_data; - QMap m_OurterIPLocalPort; public slots: void slot_Message(QObject * pSource,QString ); //The socket error message