Skip to content

Add addresses of resolvers to the information on a network. #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions networkinterface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#define NETWORKINTERFACE_HPP

#include <string>
#include <vector>

class NetworkInterface
{
Expand All @@ -24,6 +25,7 @@ class NetworkInterface
virtual bool is_wireless() const = 0;

virtual std::string ssid() const = 0;
virtual std::vector<std::string> resolvers() const = 0;
};

#endif
4 changes: 4 additions & 0 deletions networkmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,7 @@ int NetworkMgr::getState(bool reportNoChange)
std::vector<std::string> NetworkMgr::getRunningNetworks() {
return getNetworks();
}

std::vector<std::string> NetworkMgr::getNetworkResolvers(const std::string& network) {
return getResolvers(network);
}
2 changes: 2 additions & 0 deletions networkmanager.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ class NetworkMgr : public QObject
int getState(bool reportNoChange);
virtual int testQuery() = 0;
std::vector<std::string> getRunningNetworks();
std::vector<std::string> getNetworkResolvers(const std::string& network);

signals:
void networkConfigChanged();
Expand All @@ -49,6 +50,7 @@ class NetworkMgr : public QObject
virtual int unsetLocalhostDNS() = 0;
virtual int getStateDNS(bool reportNoChange) = 0;
virtual std::vector<std::string> getNetworks() = 0;
virtual std::vector<std::string> getResolvers(const std::string& network) = 0;

MainWindow *m_mainwindow;
NetworkState m_networkState;
Expand Down
10 changes: 8 additions & 2 deletions os/windows/networkinterface_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ NetworkInterfaceWindows::NetworkInterfaceWindows(
const std::string& description,
const std::string& dns_suffix,
const std::string& ssid,
const std::vector<std::string>& resolvers,
bool is_resolver_loopback,
bool is_running,
DWORD if_type,
IF_OPER_STATUS oper_status)
: name_(name), adapter_name_(adapter_name),
description_(description), dns_suffix_(dns_suffix), ssid_(ssid),
description_(description), dns_suffix_(dns_suffix),
ssid_(ssid), resolvers_(resolvers),
is_resolver_loopback_(is_resolver_loopback),
is_running_(is_running),
if_type_(if_type),
Expand Down Expand Up @@ -55,8 +57,12 @@ bool NetworkInterfaceWindows::is_wireless() const
return if_type_ == IF_TYPE_IEEE80211;
}


std::string NetworkInterfaceWindows::ssid() const
{
return ssid_;
}

std::vector<std::string> NetworkInterfaceWindows::resolvers() const
{
return resolvers_;
}
3 changes: 3 additions & 0 deletions os/windows/networkinterface_windows.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class NetworkInterfaceWindows : public NetworkInterface
const std::string& descripton,
const std::string& dns_suffix,
const std::string& ssid,
const std::vector<std::string>& resolvers,
bool is_resolver_loopback,
bool is_running,
DWORD if_type,
Expand All @@ -37,13 +38,15 @@ class NetworkInterfaceWindows : public NetworkInterface
bool is_wireless() const override;

virtual std::string ssid() const override;
virtual std::vector<std::string> resolvers() const override;

private:
std::string name_;
std::string adapter_name_;
std::string description_;
std::string dns_suffix_;
std::string ssid_;
std::vector<std::string> resolvers_;
bool is_resolver_loopback_;
bool is_running_;
DWORD if_type_;
Expand Down
24 changes: 22 additions & 2 deletions os/windows/networkmanager_windows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ int NetworkMgrWindows::getStateDNS(bool reportNoChange)
m_networkState = NotLocalhost;
if (oldNetworkState != m_networkState || reportNoChange == true)
m_mainwindow->statusMsg("Status: DNS settings NOT using localhost.");
emit networkStateChanged(NotLocalhost);
emit networkStateChanged(NotLocalhost);
}
return 0;
}
Expand Down Expand Up @@ -358,6 +358,7 @@ void NetworkMgrWindows::reload()

bool resolver_loopback = true;
bool running = false;
std::vector<std::string> resolvers;

// We consider the interface up if it is reported as
// up AND there is a non-link-local address allocated.
Expand All @@ -384,7 +385,11 @@ void NetworkMgrWindows::reload()
if ( !dns_addr.isLoopback() )
{
resolver_loopback = false;
break;

// Resolver addresses can be duplicated.
std::string resolver = dns_addr.toString();
if ( std::find(resolvers.begin(), resolvers.end(), resolver) == resolvers.end() )
resolvers.push_back(resolver);
}
}

Expand All @@ -405,6 +410,7 @@ void NetworkMgrWindows::reload()
description,
dns_suffix,
ssid,
resolvers,
resolver_loopback,
running,
adapter->IfType,
Expand Down Expand Up @@ -485,6 +491,20 @@ std::vector<std::string> NetworkMgrWindows::getNetworks()
return res;
}

std::vector<std::string> NetworkMgrWindows::getResolvers(const std::string& network)
{
std::vector<std::string> res;

for ( const auto& i: interfaces )
if ( i.name() == network )
{
res = i.resolvers();
break;
}

return res;
}

int NetworkMgrWindows::testQuery() {
m_testQuery->start();
return 0;
Expand Down
1 change: 1 addition & 0 deletions os/windows/networkmanager_windows.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class NetworkMgrWindows : public NetworkMgr
int getStateDNS(bool reportChange);
int testQuery() override;
std::vector<std::string> getNetworks();
std::vector<std::string> getResolvers(const std::string& network);

private slots:
void on_testQuery_finished(int exitCode, QProcess::ExitStatus exitStatus);
Expand Down