summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--client/handshakeservice.cpp5
-rw-r--r--client/handshakeservice.h2
-rw-r--r--client/main.cpp6
-rw-r--r--qdbd/handshakeexecutor.cpp28
-rw-r--r--qdbd/qdbd.pro2
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