Add support for wired network configuration
This commit is contained in:
parent
6b88d72335
commit
7ae474de33
@ -40,6 +40,10 @@
|
|||||||
#include <QMetaEnum>
|
#include <QMetaEnum>
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
|
|
||||||
|
#include "logging.h"
|
||||||
|
|
||||||
|
NYMEA_LOGGING_CATEGORY(dcNetworkManagement, "NetworkManagement")
|
||||||
|
|
||||||
NetworkManager::NetworkManager(QObject *parent):
|
NetworkManager::NetworkManager(QObject *parent):
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_wiredNetworkDevices(new WiredNetworkDevices(this)),
|
m_wiredNetworkDevices(new WiredNetworkDevices(this)),
|
||||||
@ -167,6 +171,41 @@ int NetworkManager::startAccessPoint(const QString &interface, const QString &ss
|
|||||||
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.StartAccessPoint", params, this, "startAccessPointResponse");
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.StartAccessPoint", params, this, "startAccessPointResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int NetworkManager::createWiredAutoConnection(const QString &interface)
|
||||||
|
{
|
||||||
|
QVariantMap params {
|
||||||
|
{"interface", interface},
|
||||||
|
{"type", "WiredNetworkConnectionTypeDHCP"}
|
||||||
|
};
|
||||||
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.CreateWiredConnection", params, this, "createWiredAutoConnectionResponse");
|
||||||
|
}
|
||||||
|
|
||||||
|
int NetworkManager::createWiredManualConnection(const QString &interface, const QString &ip, quint8 prefix, const QString &gateway, const QString &dns)
|
||||||
|
{
|
||||||
|
qCDebug(dcNetworkManagement()) << "Creating manual connection" << interface << ip << prefix << gateway << dns;
|
||||||
|
QVariantMap params {
|
||||||
|
{"interface", interface},
|
||||||
|
{"type", "WiredNetworkConnectionTypeManual"},
|
||||||
|
{"ip", ip},
|
||||||
|
{"prefix", prefix},
|
||||||
|
{"gateway", gateway},
|
||||||
|
{"dns", dns}
|
||||||
|
};
|
||||||
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.CreateWiredConnection", params, this, "createWiredManualConnectionResponse");
|
||||||
|
}
|
||||||
|
|
||||||
|
int NetworkManager::createWiredSharedConnection(const QString &interface, const QString &ip, quint8 prefix)
|
||||||
|
{
|
||||||
|
qCDebug(dcNetworkManagement()) << "Creating shared connection" << interface << ip << prefix;
|
||||||
|
QVariantMap params {
|
||||||
|
{"interface", interface},
|
||||||
|
{"type", "WiredNetworkConnectionTypeShared"},
|
||||||
|
{"ip", ip},
|
||||||
|
{"prefix", prefix}
|
||||||
|
};
|
||||||
|
return m_engine->jsonRpcClient()->sendCommand("NetworkManager.CreateWiredConnection", params, this, "createWiredSharedConnectionResponse");
|
||||||
|
}
|
||||||
|
|
||||||
int NetworkManager::disconnectInterface(const QString &interface)
|
int NetworkManager::disconnectInterface(const QString &interface)
|
||||||
{
|
{
|
||||||
QVariantMap params;
|
QVariantMap params;
|
||||||
@ -212,7 +251,7 @@ void NetworkManager::getStatusResponse(int /*commandId*/, const QVariantMap &par
|
|||||||
|
|
||||||
void NetworkManager::getDevicesResponse(int /*commandId*/, const QVariantMap ¶ms)
|
void NetworkManager::getDevicesResponse(int /*commandId*/, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
// qDebug() << "Devices reply" << commandId << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "Devices reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
|
||||||
foreach (const QVariant &deviceVariant, params.value("wiredNetworkDevices").toList()) {
|
foreach (const QVariant &deviceVariant, params.value("wiredNetworkDevices").toList()) {
|
||||||
QVariantMap deviceMap = deviceVariant.toMap();
|
QVariantMap deviceMap = deviceVariant.toMap();
|
||||||
@ -248,7 +287,7 @@ void NetworkManager::getDevicesResponse(int /*commandId*/, const QVariantMap &pa
|
|||||||
|
|
||||||
void NetworkManager::getAccessPointsResponse(int commandId, const QVariantMap ¶ms)
|
void NetworkManager::getAccessPointsResponse(int commandId, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "Access points reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "Access points reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
|
|
||||||
if (!m_apRequests.contains(commandId)) {
|
if (!m_apRequests.contains(commandId)) {
|
||||||
qWarning() << "NetworkManager received a reply for a request we don't know!";
|
qWarning() << "NetworkManager received a reply for a request we don't know!";
|
||||||
@ -279,43 +318,87 @@ void NetworkManager::getAccessPointsResponse(int commandId, const QVariantMap &p
|
|||||||
|
|
||||||
void NetworkManager::connectToWiFiResponse(int commandId, const QVariantMap ¶ms)
|
void NetworkManager::connectToWiFiResponse(int commandId, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "connect to wifi reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "connect to wifi reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
QString status = params.value("networkManagerError").toString();
|
QString status = params.value("networkManagerError").toString();
|
||||||
emit connectToWiFiReply(commandId, status);
|
emit connectToWiFiReply(commandId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::disconnectResponse(int commandId, const QVariantMap ¶ms)
|
void NetworkManager::disconnectResponse(int commandId, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "disconnect reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "disconnect reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
QString status = params.value("networkManagerError").toString();
|
QString status = params.value("networkManagerError").toString();
|
||||||
emit disconnectReply(commandId, status);
|
emit disconnectReply(commandId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::enableNetworkingResponse(int commandId, const QVariantMap ¶ms)
|
void NetworkManager::enableNetworkingResponse(int commandId, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "enable networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "enable networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
QString status = params.value("networkManagerError").toString();
|
QString status = params.value("networkManagerError").toString();
|
||||||
emit enableNetworkingReply(commandId, status);
|
emit enableNetworkingReply(commandId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::enableWirelessNetworkingResponse(int commandId, const QVariantMap ¶ms)
|
void NetworkManager::enableWirelessNetworkingResponse(int commandId, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "enable wireless networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "enable wireless networking reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
QString status = params.value("networkManagerError").toString();
|
QString status = params.value("networkManagerError").toString();
|
||||||
emit enableWirelessNetworkingReply(commandId, status);
|
emit enableWirelessNetworkingReply(commandId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NetworkManager::startAccessPointResponse(int commandId, const QVariantMap ¶ms)
|
void NetworkManager::startAccessPointResponse(int commandId, const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
qDebug() << "Start access point reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCDebug(dcNetworkManagement) << "Start access point reply" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
QString status = params.value("networkManagerError").toString();
|
QString status = params.value("networkManagerError").toString();
|
||||||
emit startAccessPointReply(commandId, status);
|
emit startAccessPointReply(commandId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NetworkManager::createWiredAutoConnectionResponse(int commandId, const QVariantMap ¶ms)
|
||||||
|
{
|
||||||
|
QString status = params.value("networkManagerError").toString();
|
||||||
|
emit createWiredAutoConnectionReply(commandId, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkManager::createWiredManualConnectionResponse(int commandId, const QVariantMap ¶ms)
|
||||||
|
{
|
||||||
|
QString status = params.value("networkManagerError").toString();
|
||||||
|
emit createWiredManualConnectionReply(commandId, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NetworkManager::createWiredSharedConnectionResponse(int commandId, const QVariantMap ¶ms)
|
||||||
|
{
|
||||||
|
QString status = params.value("networkManagerError").toString();
|
||||||
|
emit createWiredSharedConnectionReply(commandId, status);
|
||||||
|
}
|
||||||
|
|
||||||
void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
||||||
{
|
{
|
||||||
|
qCDebug(dcNetworkManagement) << "Network management Notification:" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson());
|
||||||
|
|
||||||
QString notification = params.value("notification").toString();
|
QString notification = params.value("notification").toString();
|
||||||
if (notification == "NetworkManager.WirelessNetworkDeviceChanged") {
|
if (notification == "NetworkManager.WirelessNetworkDeviceAdded") {
|
||||||
|
QVariantMap deviceMap = params.value("params").toMap().value("wirelessNetworkDevice").toMap();
|
||||||
|
|
||||||
|
WirelessNetworkDevice *device = new WirelessNetworkDevice(deviceMap.value("macAddress").toString(), deviceMap.value("interface").toString(), this);
|
||||||
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
|
QMetaEnum modeEnum = QMetaEnum::fromType<WirelessNetworkDevice::WirelessMode>();
|
||||||
|
device->setWirelessMode(static_cast<WirelessNetworkDevice::WirelessMode>(modeEnum.keyToValue(deviceMap.value("mode").toString().toUtf8())));
|
||||||
|
|
||||||
|
QVariantMap currentApMap = deviceMap.value("currentAccessPoint").toMap();
|
||||||
|
device->currentAccessPoint()->setSsid(currentApMap.value("ssid").toString());
|
||||||
|
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
||||||
|
device->currentAccessPoint()->setProtected(currentApMap.value("protected").toBool());
|
||||||
|
device->currentAccessPoint()->setSignalStrength(currentApMap.value("signalStrength").toInt());
|
||||||
|
device->currentAccessPoint()->setFrequency(currentApMap.value("frequency").toDouble());
|
||||||
|
m_wirelessNetworkDevices->addNetworkDevice(device);
|
||||||
|
|
||||||
|
} else if (notification == "NetworkManager.WirelessNetworkDeviceRemoved") {
|
||||||
|
QString interface = params.value("params").toMap().value("interface").toString();
|
||||||
|
m_wirelessNetworkDevices->removeNetworkDevice(interface);
|
||||||
|
|
||||||
|
} else if (notification == "NetworkManager.WirelessNetworkDeviceChanged") {
|
||||||
QVariantMap deviceMap = params.value("params").toMap().value("wirelessNetworkDevice").toMap();
|
QVariantMap deviceMap = params.value("params").toMap().value("wirelessNetworkDevice").toMap();
|
||||||
WirelessNetworkDevice* device = m_wirelessNetworkDevices->getWirelessNetworkDevice(deviceMap.value("interface").toString());
|
WirelessNetworkDevice* device = m_wirelessNetworkDevices->getWirelessNetworkDevice(deviceMap.value("interface").toString());
|
||||||
if (!device) {
|
if (!device) {
|
||||||
@ -335,16 +418,33 @@ void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
|||||||
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
device->currentAccessPoint()->setMacAddress(currentApMap.value("macAddress").toString());
|
||||||
device->currentAccessPoint()->setProtected(currentApMap.value("protected").toBool());
|
device->currentAccessPoint()->setProtected(currentApMap.value("protected").toBool());
|
||||||
device->currentAccessPoint()->setSignalStrength(currentApMap.value("signalStrength").toInt());
|
device->currentAccessPoint()->setSignalStrength(currentApMap.value("signalStrength").toInt());
|
||||||
|
|
||||||
|
} else if (notification == "NetworkManager.WiredNetworkDeviceAdded") {
|
||||||
|
QVariantMap deviceMap = params.value("params").toMap().value("wiredNetworkDevice").toMap();
|
||||||
|
WiredNetworkDevice *device = new WiredNetworkDevice(deviceMap.value("macAddress").toString(), deviceMap.value("interface").toString(), this);
|
||||||
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
|
device->setPluggedIn(deviceMap.value("pluggedIn").toBool());
|
||||||
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
|
m_wiredNetworkDevices->addWiredNetworkDevice(device);
|
||||||
|
|
||||||
|
} else if (notification == "NetworkManager.WiredNetworkDeviceRemoved") {
|
||||||
|
QString interface = params.value("params").toMap().value("interface").toString();
|
||||||
|
m_wiredNetworkDevices->removeNetworkDevice(interface);
|
||||||
|
|
||||||
} else if (notification == "NetworkManager.WiredNetworkDeviceChanged") {
|
} else if (notification == "NetworkManager.WiredNetworkDeviceChanged") {
|
||||||
QVariantMap deviceMap = params.value("params").toMap().value("wiredNetworkDevice").toMap();
|
QVariantMap deviceMap = params.value("params").toMap().value("wiredNetworkDevice").toMap();
|
||||||
WiredNetworkDevice* device = m_wiredNetworkDevices->getWiredNetworkDevice(deviceMap.value("interface").toString());
|
WiredNetworkDevice* device = m_wiredNetworkDevices->getWiredNetworkDevice(deviceMap.value("interface").toString());
|
||||||
if (!device) {
|
if (!device) {
|
||||||
qWarning() << "Received a notification for a network device we don't know" << deviceMap;
|
qCWarning(dcNetworkManagement) << "Received a notification for a network device we don't know" << deviceMap;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
device->setBitRate(deviceMap.value("bitRate").toString());
|
|
||||||
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
device->setIpv4Addresses(deviceMap.value("ipv4Addresses").toStringList());
|
||||||
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
device->setIpv6Addresses(deviceMap.value("ipv6Addresses").toStringList());
|
||||||
|
device->setBitRate(deviceMap.value("bitRate").toString());
|
||||||
|
device->setPluggedIn(deviceMap.value("pluggedIn").toBool());
|
||||||
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
QMetaEnum stateEnum = QMetaEnum::fromType<NetworkDevice::NetworkDeviceState>();
|
||||||
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
device->setState(static_cast<NetworkDevice::NetworkDeviceState>(stateEnum.keyToValue(deviceMap.value("state").toString().toUtf8())));
|
||||||
} else if (notification == "NetworkManager.NetworkStatusChanged") {
|
} else if (notification == "NetworkManager.NetworkStatusChanged") {
|
||||||
@ -366,6 +466,6 @@ void NetworkManager::notificationReceived(const QVariantMap ¶ms)
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "notification received" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
qCWarning(dcNetworkManagement) << "Unhandled notification received" << qUtf8Printable(QJsonDocument::fromVariant(params).toJson(QJsonDocument::Indented));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -90,6 +90,9 @@ public:
|
|||||||
|
|
||||||
Q_INVOKABLE int connectToWiFi(const QString &interface, const QString &ssid, const QString &passphrase);
|
Q_INVOKABLE int connectToWiFi(const QString &interface, const QString &ssid, const QString &passphrase);
|
||||||
Q_INVOKABLE int startAccessPoint(const QString &interface, const QString &ssid, const QString &passphrase);
|
Q_INVOKABLE int startAccessPoint(const QString &interface, const QString &ssid, const QString &passphrase);
|
||||||
|
Q_INVOKABLE int createWiredAutoConnection(const QString &interface);
|
||||||
|
Q_INVOKABLE int createWiredManualConnection(const QString &interface, const QString &ip, quint8 prefix, const QString &gateway, const QString &dns);
|
||||||
|
Q_INVOKABLE int createWiredSharedConnection(const QString &interface, const QString &ip = QString(), quint8 prefix = 24);
|
||||||
Q_INVOKABLE int disconnectInterface(const QString &interface);
|
Q_INVOKABLE int disconnectInterface(const QString &interface);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
@ -105,6 +108,9 @@ signals:
|
|||||||
void connectToWiFiReply(int id, const QString &status);
|
void connectToWiFiReply(int id, const QString &status);
|
||||||
void disconnectReply(int id, const QString &status);
|
void disconnectReply(int id, const QString &status);
|
||||||
void startAccessPointReply(int id, const QString &status);
|
void startAccessPointReply(int id, const QString &status);
|
||||||
|
void createWiredAutoConnectionReply(int id, const QString &status);
|
||||||
|
void createWiredManualConnectionReply(int id, const QString &status);
|
||||||
|
void createWiredSharedConnectionReply(int id, const QString &status);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void init();
|
void init();
|
||||||
@ -117,6 +123,9 @@ private slots:
|
|||||||
void enableNetworkingResponse(int commandId, const QVariantMap ¶ms);
|
void enableNetworkingResponse(int commandId, const QVariantMap ¶ms);
|
||||||
void enableWirelessNetworkingResponse(int commandId, const QVariantMap ¶ms);
|
void enableWirelessNetworkingResponse(int commandId, const QVariantMap ¶ms);
|
||||||
void startAccessPointResponse(int commandId, const QVariantMap ¶ms);
|
void startAccessPointResponse(int commandId, const QVariantMap ¶ms);
|
||||||
|
void createWiredAutoConnectionResponse(int commandId, const QVariantMap ¶ms);
|
||||||
|
void createWiredManualConnectionResponse(int commandId, const QVariantMap ¶ms);
|
||||||
|
void createWiredSharedConnectionResponse(int commandId, const QVariantMap ¶ms);
|
||||||
|
|
||||||
void notificationReceived(const QVariantMap ¶ms);
|
void notificationReceived(const QVariantMap ¶ms);
|
||||||
|
|
||||||
|
|||||||
@ -151,16 +151,13 @@ QVariant WiredNetworkDevices::data(const QModelIndex &index, int role) const
|
|||||||
return NetworkDevices::data(index, role);
|
return NetworkDevices::data(index, role);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WiredNetworkDevices::addNetworkDevice(NetworkDevice *device)
|
void WiredNetworkDevices::addWiredNetworkDevice(WiredNetworkDevice *device)
|
||||||
{
|
{
|
||||||
NetworkDevices::addNetworkDevice(device);
|
NetworkDevices::addNetworkDevice(device);
|
||||||
WiredNetworkDevice *wiredDev = qobject_cast<WiredNetworkDevice*>(device);
|
connect(device, &WiredNetworkDevice::pluggedInChanged, [this, device](){
|
||||||
if (wiredDev) {
|
emit dataChanged(index(m_list.indexOf(device)), index(m_list.indexOf(device)), {RolePluggedIn});
|
||||||
connect(wiredDev, &WiredNetworkDevice::pluggedInChanged, [this, wiredDev](){
|
emit countChanged();
|
||||||
emit dataChanged(index(m_list.indexOf(wiredDev)), index(m_list.indexOf(wiredDev)), {RolePluggedIn});
|
});
|
||||||
emit countChanged();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QHash<int, QByteArray> WiredNetworkDevices::roleNames() const
|
QHash<int, QByteArray> WiredNetworkDevices::roleNames() const
|
||||||
|
|||||||
@ -48,7 +48,8 @@ public:
|
|||||||
RoleBitRate,
|
RoleBitRate,
|
||||||
RoleState,
|
RoleState,
|
||||||
RoleIpv4Addresses,
|
RoleIpv4Addresses,
|
||||||
RoleIpv6Addresses
|
RoleIpv6Addresses,
|
||||||
|
RolePluggedIn
|
||||||
};
|
};
|
||||||
Q_ENUM(Roles)
|
Q_ENUM(Roles)
|
||||||
|
|
||||||
@ -86,7 +87,7 @@ public:
|
|||||||
QVariant data(const QModelIndex &index, int role) const override;
|
QVariant data(const QModelIndex &index, int role) const override;
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
void addNetworkDevice(NetworkDevice *device) override;
|
void addWiredNetworkDevice(WiredNetworkDevice *device);
|
||||||
|
|
||||||
Q_INVOKABLE WiredNetworkDevice* getWiredNetworkDevice(const QString &interface);
|
Q_INVOKABLE WiredNetworkDevice* getWiredNetworkDevice(const QString &interface);
|
||||||
|
|
||||||
|
|||||||
@ -48,6 +48,9 @@ SettingsPageBase {
|
|||||||
onConnectToWiFiReply: handleReply(id, status)
|
onConnectToWiFiReply: handleReply(id, status)
|
||||||
onStartAccessPointReply: handleReply(id, status)
|
onStartAccessPointReply: handleReply(id, status)
|
||||||
onDisconnectReply: handleReply(id, status)
|
onDisconnectReply: handleReply(id, status)
|
||||||
|
onCreateWiredAutoConnectionReply: handleReply(id, status)
|
||||||
|
onCreateWiredManualConnectionReply: handleReply(id, status)
|
||||||
|
onCreateWiredSharedConnectionReply: handleReply(id, status)
|
||||||
|
|
||||||
function handleReply(id, status) {
|
function handleReply(id, status) {
|
||||||
if (id === d.pendingCallId) {
|
if (id === d.pendingCallId) {
|
||||||
@ -86,7 +89,7 @@ SettingsPageBase {
|
|||||||
|
|
||||||
}
|
}
|
||||||
var component = Qt.createComponent(Qt.resolvedUrl("../components/ErrorDialog.qml"))
|
var component = Qt.createComponent(Qt.resolvedUrl("../components/ErrorDialog.qml"))
|
||||||
var popup = component.createObject(root, {text: errorMessage, errorCode: stats})
|
var popup = component.createObject(root, {text: errorMessage, errorCode: status})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +157,7 @@ SettingsPageBase {
|
|||||||
visible: networkManager.available
|
visible: networkManager.available
|
||||||
}
|
}
|
||||||
|
|
||||||
NymeaSwipeDelegate {
|
NymeaItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: qsTr("Current connection state")
|
text: qsTr("Current connection state")
|
||||||
prominentSubText: false
|
prominentSubText: false
|
||||||
@ -203,7 +206,7 @@ SettingsPageBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NymeaSwipeDelegate {
|
NymeaItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: qsTr("Networking enabled")
|
text: qsTr("Networking enabled")
|
||||||
subText: qsTr("Enable or disable networking altogether")
|
subText: qsTr("Enable or disable networking altogether")
|
||||||
@ -257,7 +260,7 @@ SettingsPageBase {
|
|||||||
Repeater {
|
Repeater {
|
||||||
model: networkManager.wiredNetworkDevices
|
model: networkManager.wiredNetworkDevices
|
||||||
|
|
||||||
NymeaSwipeDelegate {
|
NymeaItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
iconName: model.pluggedIn ? "../images/connections/network-wired.svg" : "../images/connections/network-wired-offline.svg"
|
iconName: model.pluggedIn ? "../images/connections/network-wired.svg" : "../images/connections/network-wired-offline.svg"
|
||||||
text: model.interface + " (" + model.macAddress + ")"
|
text: model.interface + " (" + model.macAddress + ")"
|
||||||
@ -268,7 +271,19 @@ SettingsPageBase {
|
|||||||
ret += networkStateToString(model.state)
|
ret += networkStateToString(model.state)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
progressive: false
|
progressive: engine.jsonRpcClient.ensureServerVersion("6.2")
|
||||||
|
onClicked: {
|
||||||
|
if (!engine.jsonRpcClient.ensureServerVersion("6.2")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var wiredNetworkDevice = networkManager.wiredNetworkDevices.getWiredNetworkDevice(model.interface);
|
||||||
|
if (wiredNetworkDevice.state === NetworkDevice.NetworkDeviceStateDisconnected) {
|
||||||
|
pageStack.push(createWiredConnectionPageComponent, {wiredNetworkDevice: wiredNetworkDevice})
|
||||||
|
} else {
|
||||||
|
pageStack.push(currentEthernetConnectionPageComponent, {wiredNetworkDevice: wiredNetworkDevice})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -277,7 +292,7 @@ SettingsPageBase {
|
|||||||
visible: networkManager.available && networkManager.networkingEnabled
|
visible: networkManager.available && networkManager.networkingEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
NymeaSwipeDelegate {
|
NymeaItemDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
text: qsTr("Enabled")
|
text: qsTr("Enabled")
|
||||||
subText: qsTr("Enable or disable WiFi")
|
subText: qsTr("Enable or disable WiFi")
|
||||||
@ -464,6 +479,138 @@ SettingsPageBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: createWiredConnectionPageComponent
|
||||||
|
SettingsPageBase {
|
||||||
|
id: createWiredConnectionPage
|
||||||
|
title: qsTr("New wired connection")
|
||||||
|
|
||||||
|
property WiredNetworkDevice wiredNetworkDevice: null
|
||||||
|
|
||||||
|
SettingsPageSectionHeader {
|
||||||
|
text: qsTr("Method")
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.leftMargin: app.margins
|
||||||
|
Layout.rightMargin: app.margins
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
RadioButton {
|
||||||
|
id: dhcpClientRadioButton
|
||||||
|
Layout.fillWidth: true
|
||||||
|
checked: true
|
||||||
|
text: qsTr("Automatic (DHCP client)")
|
||||||
|
}
|
||||||
|
RadioButton {
|
||||||
|
id: manualClientRadioButton
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("Manual")
|
||||||
|
}
|
||||||
|
RadioButton {
|
||||||
|
id: dhcpServerRadioButton
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("Shared (DHCP server)")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsPageSectionHeader {
|
||||||
|
text: qsTr("Address settings")
|
||||||
|
visible: manualClientRadioButton.checked
|
||||||
|
}
|
||||||
|
|
||||||
|
GridLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.leftMargin: app.margins
|
||||||
|
Layout.rightMargin: app.margins
|
||||||
|
columns: 2
|
||||||
|
visible: manualClientRadioButton.checked
|
||||||
|
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: qsTr("IP Address")
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
TextField {
|
||||||
|
id: ipTextField
|
||||||
|
maximumLength: 32
|
||||||
|
Layout.fillWidth: true
|
||||||
|
horizontalAlignment: Text.AlignRight
|
||||||
|
validator: RegExpValidator {
|
||||||
|
regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: "/"
|
||||||
|
}
|
||||||
|
TextField {
|
||||||
|
id: prefixTextField
|
||||||
|
text: "24"
|
||||||
|
Layout.fillWidth: false
|
||||||
|
validator: IntValidator {
|
||||||
|
bottom: 8
|
||||||
|
top: 32
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: qsTr("Gateway")
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField {
|
||||||
|
id: defaultGwTextField
|
||||||
|
maximumLength: 32
|
||||||
|
Layout.fillWidth: true
|
||||||
|
validator: RegExpValidator {
|
||||||
|
regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: qsTr("DNS")
|
||||||
|
}
|
||||||
|
|
||||||
|
TextField {
|
||||||
|
id: dnsTextField
|
||||||
|
maximumLength: 32
|
||||||
|
Layout.fillWidth: true
|
||||||
|
validator: RegExpValidator {
|
||||||
|
regExp: /^((?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.){0,3}(?:[0-1]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.margins: app.margins
|
||||||
|
Layout.leftMargin: app.margins
|
||||||
|
Layout.rightMargin: app.margins
|
||||||
|
text: qsTr("Create connection")
|
||||||
|
enabled: {
|
||||||
|
if (dhcpClientRadioButton.checked || dhcpServerRadioButton.checked) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return ipTextField.acceptableInput && prefixTextField.acceptableInput
|
||||||
|
}
|
||||||
|
|
||||||
|
onClicked: {
|
||||||
|
if (dhcpClientRadioButton.checked) {
|
||||||
|
d.pendingCallId = networkManager.createWiredAutoConnection(createWiredConnectionPage.wiredNetworkDevice.interface)
|
||||||
|
} else if (manualClientRadioButton.checked) {
|
||||||
|
d.pendingCallId = networkManager.createWiredManualConnection(createWiredConnectionPage.wiredNetworkDevice.interface, ipTextField.text, prefixTextField.text, defaultGwTextField.text, dnsTextField.text)
|
||||||
|
} else if (dhcpServerRadioButton.checked) {
|
||||||
|
d.pendingCallId = networkManager.createWiredSharedConnection(createWiredConnectionPage.wiredNetworkDevice.interface)
|
||||||
|
}
|
||||||
|
|
||||||
|
pageStack.pop(root);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: authPageComponent
|
id: authPageComponent
|
||||||
@ -515,6 +662,50 @@ SettingsPageBase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component {
|
||||||
|
id: currentEthernetConnectionPageComponent
|
||||||
|
SettingsPageBase {
|
||||||
|
id: currentEthernetConnectionPage
|
||||||
|
title: qsTr("Current connection")
|
||||||
|
|
||||||
|
property WiredNetworkDevice wiredNetworkDevice: null
|
||||||
|
|
||||||
|
SettingsPageSectionHeader {
|
||||||
|
text: qsTr("Connected to")
|
||||||
|
}
|
||||||
|
|
||||||
|
NymeaItemDelegate {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("IPv4 Address")
|
||||||
|
subText: currentEthernetConnectionPage.wiredNetworkDevice.ipv4Addresses.join(", ")
|
||||||
|
progressive: false
|
||||||
|
}
|
||||||
|
NymeaItemDelegate {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("IPv6 Address")
|
||||||
|
subText: currentEthernetConnectionPage.wiredNetworkDevice.ipv6Addresses.join(", ")
|
||||||
|
visible: subText.length > 0
|
||||||
|
progressive: false
|
||||||
|
}
|
||||||
|
NymeaItemDelegate {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: qsTr("MAC Address")
|
||||||
|
subText: currentEthernetConnectionPage.wiredNetworkDevice.macAddress
|
||||||
|
progressive: false
|
||||||
|
}
|
||||||
|
|
||||||
|
Button {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.margins: app.margins
|
||||||
|
text: qsTr("Disconnect")
|
||||||
|
onClicked: {
|
||||||
|
d.pendingCallId = networkManager.disconnectInterface(currentEthernetConnectionPage.wiredNetworkDevice.interface)
|
||||||
|
pageStack.pop(root);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Component {
|
Component {
|
||||||
id: currentApPageComponent
|
id: currentApPageComponent
|
||||||
SettingsPageBase {
|
SettingsPageBase {
|
||||||
|
|||||||
Reference in New Issue
Block a user