diff options
-rw-r--r-- | client/handshakeservice.cpp | 5 | ||||
-rw-r--r-- | client/handshakeservice.h | 2 | ||||
-rw-r--r-- | client/main.cpp | 6 | ||||
-rw-r--r-- | qdbd/handshakeexecutor.cpp | 28 | ||||
-rw-r--r-- | qdbd/qdbd.pro | 2 |
5 files changed, 35 insertions, 8 deletions
diff --git a/client/handshakeservice.cpp b/client/handshakeservice.cpp index a592a75..85498e9 100644 --- a/client/handshakeservice.cpp +++ b/client/handshakeservice.cpp @@ -70,7 +70,8 @@ void HandshakeService::receive(StreamPacket packet) { QString serial; QString macAddress; - packet >> serial >> macAddress; + QString deviceIpAddress; + packet >> serial >> macAddress >> deviceIpAddress; - emit response(serial, macAddress); + emit response(serial, macAddress, deviceIpAddress); } diff --git a/client/handshakeservice.h b/client/handshakeservice.h index 2800b74..e784aa7 100644 --- a/client/handshakeservice.h +++ b/client/handshakeservice.h @@ -40,7 +40,7 @@ public: void ask(); void close(); signals: - void response(QString serial, QString macAddress); + void response(QString serial, QString macAddress, QString ipAddress); public slots: void receive(StreamPacket packet) override; diff --git a/client/main.cpp b/client/main.cpp index 91ab3e6..e749be1 100644 --- a/client/main.cpp +++ b/client/main.cpp @@ -143,9 +143,10 @@ void setupNetworkConfiguration(Connection *connection) QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, service, &QObject::deleteLater); QObject::connect(service, &HandshakeService::response, - [](QString serial, QString mac) { + [](QString serial, QString mac, QString ip) { qDebug() << "Device serial:" << serial; qDebug() << "Host-side MAC address:" << mac; + qDebug() << "Device IP address:" << ip; configureUsbNetwork(serial, mac); QCoreApplication::quit(); }); @@ -163,9 +164,10 @@ void setupHandshakeService(Connection *connection) QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, service, &QObject::deleteLater); QObject::connect(service, &HandshakeService::response, - [](QString serial, QString mac) { + [](QString serial, QString mac, QString ip) { qDebug() << "Device serial:" << serial; qDebug() << "Host-side MAC address:" << mac; + qDebug() << "Device IP address:" << ip; QCoreApplication::quit(); }); QObject::connect(service, &Service::initialized, [=]() { 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); } diff --git a/qdbd/qdbd.pro b/qdbd/qdbd.pro index d92e05e..76ec5df 100644 --- a/qdbd/qdbd.pro +++ b/qdbd/qdbd.pro @@ -1,4 +1,4 @@ -QT += core +QT += core network QT -= gui CONFIG += c++11 |