summaryrefslogtreecommitdiffstats
path: root/src/networksettings/connman/qnetworksettingsmanager_p.cpp
diff options
context:
space:
mode:
authorRami Potinkara <rami.potinkara@qt.io>2020-05-25 18:52:09 +0300
committerRami Potinkara <rami.potinkara@qt.io>2020-07-15 13:29:12 +0000
commit714e5dadf2d6064aaddd7d4e0abd55af332b9448 (patch)
tree0eb645a417ff8987849d094090c3cf5b4a47727f /src/networksettings/connman/qnetworksettingsmanager_p.cpp
parentbdbef030c3f81bd06fa1f69b4981d6b60634f913 (diff)
new menu item for usb ethernet protocol selection5.15
Task-number: QTBUG-83011 Change-Id: I8098ef26c9fa42cdf301145937eca011365d6f19 Pick-to: 5.15 Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
Diffstat (limited to 'src/networksettings/connman/qnetworksettingsmanager_p.cpp')
-rw-r--r--src/networksettings/connman/qnetworksettingsmanager_p.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/networksettings/connman/qnetworksettingsmanager_p.cpp b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
index 5bea9e2..a56edca 100644
--- a/src/networksettings/connman/qnetworksettingsmanager_p.cpp
+++ b/src/networksettings/connman/qnetworksettingsmanager_p.cpp
@@ -33,10 +33,14 @@
#include "qnetworksettingsinterface_p.h"
#include "qnetworksettingsservicemodel.h"
#include "qnetworksettingsuseragent.h"
+#include <QFile>
+#include <QNetworkInterface>
QT_BEGIN_NAMESPACE
const QString ConnManServiceName(QStringLiteral("net.connman"));
+const QString QdbdFileName(QStringLiteral("/etc/default/qdbd"));
+const char* SearchKeyword("USB_ETHERNET_PROTOCOL=");
QNetworkSettingsManagerPrivate::QNetworkSettingsManagerPrivate(QNetworkSettingsManager *parent)
:QObject(parent)
@@ -254,6 +258,7 @@ void QNetworkSettingsManagerPrivate::onServicesChanged(ConnmanMapStructList chan
foreach (QString newService, newServices) {
handleNewService(newService);
}
+
}
void QNetworkSettingsManagerPrivate::handleNewService(const QString &servicePath)
@@ -316,7 +321,88 @@ void QNetworkSettingsManagerPrivate::serviceReady()
technology->setState(technology->state());
}
}
+ }
+}
+
+QString QNetworkSettingsManagerPrivate::usbEthernetInternetProtocolAddress()
+{
+ QString usbEthernetIp = QLatin1String("Not connected");
+ QNetworkInterface interface = QNetworkInterface::interfaceFromName(QLatin1String("usb0"));
+ if (interface.flags().testFlag(QNetworkInterface::IsUp)) {
+ for (QNetworkAddressEntry &entry:interface.addressEntries()) {
+ if (entry.ip().protocol() == QAbstractSocket::IPv4Protocol){
+ usbEthernetIp = entry.ip().toString();
+ break;
+ }
+ }
+ }
+ return usbEthernetIp;
+}
+
+QString QNetworkSettingsManagerPrivate::usbVirtualEthernetLinkProtocol()
+{
+ QByteArray line(QNetworkSettingsManagerPrivate::readUsbEthernetProtocolLine());
+ QString protocol;
+ if (line.size()) {
+ int keywordStartIndex(line.indexOf("="));
+ line = line.trimmed();
+ protocol = QString::fromLatin1( line.mid(keywordStartIndex + 1, (line.length() - 1)).toUpper() );
+ }
+ return protocol;
+}
+bool QNetworkSettingsManagerPrivate::hasUsbEthernetProtocolConfiguration()
+{
+ return !(QNetworkSettingsManagerPrivate::readUsbEthernetProtocolLine().isEmpty());
+}
+
+void QNetworkSettingsManagerPrivate::setUsbVirtualEthernetLinkProtocol(const QString &protocol)
+{
+ if (QLatin1String("RNDIS") == protocol || QLatin1String("CDCECM") == protocol) {
+ QByteArray fileContent(QNetworkSettingsManagerPrivate::readQdbdFileContent());
+ writeUsbEthernetProtocolToFileContent(fileContent, protocol);
+ } else{
+ qWarning("Unsupported USB Ethernet protocol");
+ }
+}
+
+QByteArray QNetworkSettingsManagerPrivate::readQdbdFileContent()
+{
+ QFile qdbdFile(QdbdFileName);
+ QByteArray fileContent;
+ if (qdbdFile.open(QIODevice::ReadOnly | QIODevice::Text))
+ fileContent = qdbdFile.readAll();
+
+ return fileContent;
+}
+
+QByteArray QNetworkSettingsManagerPrivate::readUsbEthernetProtocolLine()
+{
+ QByteArray fileContent(QNetworkSettingsManagerPrivate::readQdbdFileContent());
+ int keywordStartIndex(fileContent.indexOf(SearchKeyword, 0));
+ int keywordLineEndIndex(fileContent.indexOf("\n", keywordStartIndex));
+ QByteArray keywordLine = fileContent.mid(keywordStartIndex, keywordLineEndIndex);
+ return keywordLine;
+}
+
+void QNetworkSettingsManagerPrivate::writeUsbEthernetProtocolToFileContent(QByteArray &fileContent, const QString &protocol)
+{
+ int keywordStartIndex(fileContent.indexOf(SearchKeyword));
+ QByteArray previousLines = fileContent.mid(0, keywordStartIndex);
+ int keywordLineEndIndex(fileContent.indexOf("\n", keywordStartIndex));
+ QByteArray keywordLine = fileContent.mid(keywordStartIndex, keywordLineEndIndex);
+ QByteArray followingLines = fileContent.mid((keywordLineEndIndex), (fileContent.length() - 1));
+ QByteArray updatedLines = previousLines.append(SearchKeyword);
+ updatedLines.append(protocol.toLatin1().toLower());
+ updatedLines.append(followingLines);
+ QFile qdbdFile(QdbdFileName);
+ if (qdbdFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
+ int result = qdbdFile.write(updatedLines);
+ if (-1 == result)
+ qDebug("USB Ethernet protocol write to file failed");
+
+ } else {
+ qDebug("USB Ethernet protocol file open failed");
}
}