Skip to content

Commit

Permalink
enumerating network interfaces the Qt 5 way
Browse files Browse the repository at this point in the history
  • Loading branch information
8bitgeek committed Mar 5, 2018
1 parent 1836184 commit a98a01e
Show file tree
Hide file tree
Showing 8 changed files with 74 additions and 110 deletions.
6 changes: 3 additions & 3 deletions server/opennicresolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -449,7 +449,7 @@ void OpenNICResolver::expired(OpenNICDnsQuery* query)
*/
void OpenNICResolver::test()
{
addToQueries(new OpenNICDnsQuery(this,hostAddress(),OpenNICSystem::randomDomain(),QDateTime::currentDateTime().addMSecs(MAX_TIMEOUT))); /* launch a new query */
addToQueries(new OpenNICDnsQuery(this,hostAddress(),OpenNICSystem::instance()->randomDomain(),QDateTime::currentDateTime().addMSecs(MAX_TIMEOUT))); /* launch a new query */
resetQueryTimer();
}

Expand All @@ -465,11 +465,11 @@ void OpenNICResolver::resetQueryTimer()
}
if (mBootstrapTicks++ < BOOTSTRAP_TIMER_TICKS)
{
mQueryIntervalTimer = startTimer(OpenNICSystem::random(RANDOM_INTERVAL_MIN/4,RANDOM_INTERVAL_MAX/8));
mQueryIntervalTimer = startTimer(OpenNICSystem::instance()->random(RANDOM_INTERVAL_MIN/4,RANDOM_INTERVAL_MAX/8));
}
else
{
mQueryIntervalTimer = startTimer(OpenNICSystem::random(RANDOM_INTERVAL_MIN,RANDOM_INTERVAL_MAX));
mQueryIntervalTimer = startTimer(OpenNICSystem::instance()->random(RANDOM_INTERVAL_MIN,RANDOM_INTERVAL_MAX));
}
}

Expand Down
4 changes: 2 additions & 2 deletions server/opennicresolverpool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -330,8 +330,8 @@ void OpenNICResolverPool::randomize()
// get un-equal a, b....
do
{
a = OpenNICSystem::random(0,count()-1);
b = OpenNICSystem::random(0,count()-1);
a = OpenNICSystem::instance()->random(0,count()-1);
b = OpenNICSystem::instance()->random(0,count()-1);
} while (a==b);
swap(a,b);
}
Expand Down
20 changes: 10 additions & 10 deletions server/opennicserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,9 @@ void OpenNICServer::pollKeyValue(QString& key, QVariant& value, bool& valid)
else if (key == OpenNICPacket::resolver_cache_size) value = resolverCacheSize();
else if (key == OpenNICPacket::resolver_pool) value = mResolverPool.toStringList();
else if (key == OpenNICPacket::resolver_cache) value = mResolverCache.toStringList();
else if (key == OpenNICPacket::bootstrap_t1_list) value = OpenNICSystem::getBootstrapT1List();
else if (key == OpenNICPacket::bootstrap_domains) value = OpenNICSystem::getTestDomains().toStringList();
else if (key == OpenNICPacket::system_text) value = OpenNICSystem::getSystemResolverList();
else if (key == OpenNICPacket::bootstrap_t1_list) value = OpenNICSystem::instance()->getBootstrapT1List();
else if (key == OpenNICPacket::bootstrap_domains) value = OpenNICSystem::instance()->getTestDomains().toStringList();
else if (key == OpenNICPacket::system_text) value = OpenNICSystem::instance()->getSystemResolverList();
else if (key == OpenNICPacket::journal_text) value = mLog;
else if (key == OpenNICPacket::async_message) value = mAsyncMessage;
else if (key == OpenNICPacket::score_rules) value = mScoreRules;
Expand Down Expand Up @@ -247,7 +247,7 @@ void OpenNICServer::dataReady(OpenNICNet* net)
}
else if ( key == OpenNICPacket::bootstrap_t1_list )
{
if ( OpenNICSystem::saveBootstrapT1List(value.toStringList()) )
if ( OpenNICSystem::instance()->saveBootstrapT1List(value.toStringList()) )
{
mAsyncMessage = tr("Bootstrap T1 List Saved");
}
Expand All @@ -258,7 +258,7 @@ void OpenNICServer::dataReady(OpenNICNet* net)
}
else if ( key == OpenNICPacket::bootstrap_domains )
{
if ( OpenNICSystem::saveTestDomains(value.toStringList()) )
if ( OpenNICSystem::instance()->saveTestDomains(value.toStringList()) )
{
mAsyncMessage = tr("Domain List Saved");
}
Expand Down Expand Up @@ -396,7 +396,7 @@ int OpenNICServer::bootstrapResolvers()
{
mResolversInitialized=false;
/** get the bootstrap resolvers... */
QStringList bootstrapList = OpenNICSystem::getBootstrapT1List();
QStringList bootstrapList = OpenNICSystem::instance()->getBootstrapT1List();
OpenNICResolverPool proposed;
mResolverPool.clear();
mResolverPool.fromIPList(bootstrapList,"T1");
Expand All @@ -421,7 +421,7 @@ int OpenNICServer::bootstrapResolvers()
bootstrapList.clear();
for(int tries=0; bootstrapList.isEmpty() && tries < 5; tries++)
{
bootstrapList = OpenNICSystem::getBootstrapT2List();
bootstrapList = OpenNICSystem::instance()->getBootstrapT2List();
}
mResolverPool.fromIPList(bootstrapList,"T2");
log(tr("Randomizing T2 Resolvers"));
Expand Down Expand Up @@ -515,13 +515,13 @@ bool OpenNICServer::replaceActiveResolvers(OpenNICResolverPool& proposed)
mResolverCache.clear();
proposed.sort();
log("Begin applying updated resolver cache of ("+QString::number(proposed.count())+") items...");
if ( OpenNICSystem::beginUpdateResolvers(output) )
if ( OpenNICSystem::instance()->beginUpdateResolvers(output) )
{
for(int n=0; n < proposed.count(); n++)
{
int exitCode;
OpenNICResolver* resolver = proposed.at(n);
if ( (exitCode=OpenNICSystem::updateResolver(resolver->hostAddress(),n,output)) == 0 )
if ( (exitCode=OpenNICSystem::instance()->updateResolver(resolver->hostAddress(),n,output)) == 0 )
{
log(" > "+resolver->toString());
mResolverCache.append(resolver);
Expand All @@ -533,7 +533,7 @@ bool OpenNICServer::replaceActiveResolvers(OpenNICResolverPool& proposed)
applied=false;
}
}
if ( !OpenNICSystem::endUpdateResolvers(output) )
if ( !OpenNICSystem::instance()->endUpdateResolvers(output) )
{
log("** Operating system failed to commit resolver cache changes **");
log(tr("** Operating syetem said: ")+output);
Expand Down
84 changes: 20 additions & 64 deletions server/opennicsystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,6 @@
* ----------------------------------------------------------------------------
*/
#include "opennicsystem.h"
#if defined(Q_OS_WIN32)
#include "opennicsystem_win.h"
#elif defined(Q_OS_LINUX)
#include "opennicsystem_linux.h"
#else
#error "Unsupported O/S"
#endif
#include <QObject>
#include <QMessageBox>
#include <QProcess>
Expand All @@ -30,8 +23,20 @@
#include <QFile>
#include <QIODevice>
#include <QDateTime>
#include <QNetworkConfigurationManager>

OpenNICDomainNamePool OpenNICSystem::mTestDomains;
OpenNICSystem* OpenNICSystem::mInstance=NULL;

OpenNICSystem::OpenNICSystem()
{
while(mInstance); /* FIXME - singleton trap */
mInstance = this;
}

OpenNICSystem::~OpenNICSystem()
{
mInstance=NULL;
}

/**
* @brief file copy
Expand Down Expand Up @@ -234,63 +239,14 @@ OpenNICDomainName OpenNICSystem::randomDomain()
}

/**
* @brief OpenNICSystem::beginUpdateResolvers perform an prepatory
* work required before updating resolvers at the O/S level.
* @param output Return for textual output from the operations.
* @return true on success, else fail.
*/
bool OpenNICSystem::beginUpdateResolvers(QString& output)
{
#if defined(Q_OS_WIN32)
return OpenNICSystem_Win::beginUpdateResolvers(output);
#elif defined(Q_OS_LINUX)
return OpenNICSystem_Linux::beginUpdateResolvers(output);
#endif
}

/**
* @brief Add a dns entry to the system's list of DNS resolvers.
* @param resolver The IP address of teh resolver to add to the system
* @param index resolver sequence (1..n)
*/
int OpenNICSystem::updateResolver(QHostAddress& resolver,int index,QString& output)
{
#if defined(Q_OS_WIN32)
return OpenNICSystem_Win::updateResolver(resolver,index,output);
#elif defined(Q_OS_LINUX)
return OpenNICSystem_Linux::updateResolver(resolver,index,output);
#endif
}

/**
* @brief OpenNICSystem::beginUpdateResolvers perform an termination
* work required before updating resolvers at the O/S level.
* @param output Return for textual output from the operations.
* @return true on success, else fail.
* @brief OpenNICSystem_Linux::interfaces
* @return List of interfaces.
*/
bool OpenNICSystem::endUpdateResolvers(QString& output)
QList<QNetworkConfiguration> OpenNICSystem::interfaces()
{
#if defined(Q_OS_WIN32)
return OpenNICSystem_Win::endUpdateResolvers(output);
#elif defined(Q_OS_LINUX)
return OpenNICSystem_Linux::endUpdateResolvers(output);
#endif
QList<QNetworkConfiguration> rc;
QNetworkConfigurationManager manager;
rc = manager.allConfigurations();
return rc;
}

/**
* @brief Get the text which will show the current DNS resolver settings.
*/
QString OpenNICSystem::getSystemResolverList()
{
#if defined(Q_OS_WIN32)
return OpenNICSystem_Win::getSystemResolverList();
#elif defined(Q_OS_LINUX)
return OpenNICSystem_Linux::getSystemResolverList();
#endif
}






46 changes: 29 additions & 17 deletions server/opennicsystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
#include <QMultiMap>
#include <QTimerEvent>
#include <QHostAddress>
#include <QNetworkConfiguration>
#include <QNetworkConfigurationManager>
#include <QList>

#include "opennicdomainname.h"
#include "opennicdomainnamepool.h"
Expand All @@ -29,23 +32,32 @@
class OpenNICSystem
{
public:
static int random(int low, int high) {return (qrand()%((high+1)-low)+low);}
static bool backup(QString filename);
static bool writeStringListToFile(QString filename,QStringList list);
static bool fileCopy(QString from, QString to);
static bool saveBootstrapT1List(QStringList tiList);
static QStringList getBootstrapT1List();
static QStringList getBootstrapT2List();
static bool saveTestDomains(QStringList domains);
static OpenNICDomainNamePool getTestDomains();
static OpenNICDomainName randomDomain();

static QString getSystemResolverList();
static bool beginUpdateResolvers(QString& output);
static int updateResolver(QHostAddress& dns,int index, QString& output);
static bool endUpdateResolvers(QString& output);
private:
static OpenNICDomainNamePool mTestDomains;

OpenNICSystem();
virtual ~OpenNICSystem();

static OpenNICSystem* instance();

int random(int low, int high) {return (qrand()%((high+1)-low)+low);}
bool backup(QString filename);
bool writeStringListToFile(QString filename,QStringList list);
bool fileCopy(QString from, QString to);
bool saveBootstrapT1List(QStringList tiList);
QStringList getBootstrapT1List();
QStringList getBootstrapT2List();
bool saveTestDomains(QStringList domains);
OpenNICDomainNamePool getTestDomains();
OpenNICDomainName randomDomain();

virtual QString getSystemResolverList();
virtual bool beginUpdateResolvers(QString& output);
virtual int updateResolver(QHostAddress& dns,int index, QString& output);
virtual bool endUpdateResolvers(QString& output);
protected:
QList<QNetworkConfiguration> interfaces();
private:
static OpenNICSystem* mInstance;
OpenNICDomainNamePool mTestDomains;
};

#endif // OPENNICSYSTEM_H
3 changes: 1 addition & 2 deletions server/opennicsystem_linux.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,12 @@
#include <QFile>
#include <QIODevice>
#include <QDateTime>
#include <QNetworkConfigurationManager>

#ifdef SIMULATE
QString sResolvConf;
#endif

QStringList OpenNICSystem_Linux::mInterfaces;

/**
* @brief OpenNICSystem_Linux::beginUpdateResolvers
* @param output
Expand Down
17 changes: 8 additions & 9 deletions server/opennicsystem_linux.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,18 @@
#define OPENNICSYSTEM_LINUX_H

#include <opennicsystem.h>
#include <QStringList>

class OpenNICSystem_Linux
class OpenNICSystem_Linux : public OpenNICSystem
{
public:
static QString getSystemResolverList();
static bool beginUpdateResolvers(QString& output);
static int updateResolver(QHostAddress& dns,int index, QString& output);
static bool endUpdateResolvers(QString& output);
private:
static QStringList interfaces();
OpenNICSystem();
virtual ~OpenNICSystem();

QStringList mInterfaces;
virtual QString getSystemResolverList();
virtual bool beginUpdateResolvers(QString& output);
virtual int updateResolver(QHostAddress& dns,int index, QString& output);
virtual bool endUpdateResolvers(QString& output);
private:
};

#endif // OPENNICSYSTEM_LINUX_H
4 changes: 1 addition & 3 deletions server/server.pro
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,7 @@ SOURCES += main.cpp\
opennicdomainname.cpp \
opennicdomainnamepool.cpp \
opennicdnsquerylistener.cpp \
opennicresolver.cpp \
opennicsystem_win.cpp \
opennicsystem_linux.cpp
opennicresolver.cpp


win32::SOURCES += qtservice_win.cpp \
Expand Down

0 comments on commit a98a01e

Please sign in to comment.