summaryrefslogtreecommitdiffstats
path: root/qdbd/handshakeexecutor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qdbd/handshakeexecutor.cpp')
-rw-r--r--qdbd/handshakeexecutor.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/qdbd/handshakeexecutor.cpp b/qdbd/handshakeexecutor.cpp
index 0ca9ec8..b5dc9cb 100644
--- a/qdbd/handshakeexecutor.cpp
+++ b/qdbd/handshakeexecutor.cpp
@@ -24,10 +24,33 @@
#include <QtCore/qdebug.h>
#include <QtCore/qfile.h>
+#include <QtNetwork/qnetworkinterface.h>
+
+const QString gadgetConfigFsPath = "/sys/kernel/config/usb_gadget/g1/";
+
+QString deviceIpAddress()
+{
+ QFile file{gadgetConfigFsPath + "functions/rndis.usb0/ifname"};
+ if (!file.open(QIODevice::ReadOnly))
+ return "";
+
+ const auto interfaceName = QString{file.readAll()}.trimmed();
+ const auto interface = QNetworkInterface::interfaceFromName(interfaceName);
+ const auto addressEntries = interface.addressEntries();
+
+ for (const auto &entry : addressEntries) {
+ const auto ip = entry.ip();
+ if (ip.protocol() == QAbstractSocket::IPv4Protocol) {
+ qDebug() << "Device IP address:" << ip.toString();
+ return ip.toString();
+ }
+ }
+ return "";
+}
QString deviceSerial()
{
- QFile file{"/sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber"};
+ QFile file{gadgetConfigFsPath + "strings/0x409/serialnumber"};
if (!file.open(QIODevice::ReadOnly))
return "";
return QString{file.readAll()}.trimmed();
@@ -35,7 +58,7 @@ QString deviceSerial()
QString hostSideMac()
{
- QFile file{"/sys/kernel/config/usb_gadget/g1/functions/rndis.usb0/host_addr"};
+ QFile file{gadgetConfigFsPath + "functions/rndis.usb0/host_addr"};
if (!file.open(QIODevice::ReadOnly))
return "";
return QString{file.readAll()}.trimmed();
@@ -56,5 +79,6 @@ void HandshakeExecutor::receive(StreamPacket packet)
StreamPacket response;
response << deviceSerial();
response << hostSideMac();
+ response << deviceIpAddress();
m_stream->write(response);
}