Add nymea-data package and install mac-addresses.db

This commit is contained in:
Simon Stürz 2021-06-06 00:06:51 +02:00
parent 9b65f6a41e
commit aaa09162a5
5 changed files with 51 additions and 18 deletions

19
debian/control vendored
View File

@ -70,7 +70,8 @@ Depends: libqt5network5,
libnymea1 (= ${binary:Version}),
${shlibs:Depends},
${misc:Depends}
Recommends: nymea-cli,
Recommends: nymea-cli,
nymea-data,
network-manager,
nymea-update-plugin-impl,
nymea-system-plugin-impl,
@ -86,6 +87,22 @@ Description: An open source IoT server - daemon
This package will install the daemon.
Package: nymea-data
Section: misc
Architecture: all
Depends: ${misc:Depends}
Recommends: nymea
Description: Optional data for extending functionality in nymea daemon
The nymea daemon is a plugin based IoT (Internet of Things) server. The
server works like a translator for devices, things and services and
allows them to interact.
With the powerful rule engine you are able to connect any device available
in the system and create individual scenes and behaviors for your environment.
.
This package provides the MAC address database for nymead and for the plugins in
order to get the manufacturer name for a given MAC address.
Package: nymea-doc
Section: doc
Architecture: all

2
debian/nymea-data.install vendored Normal file
View File

@ -0,0 +1,2 @@
data/mac-database/mac-addresses.db usr/share/nymea/

View File

@ -189,7 +189,7 @@ QString MacAddressDatabase::lookupMacAddressVendorInternal(const QString &macAdd
// Found to many results, lets add a value until we find the matching vendor
length += 1;
if (length > fullMacAddressString)
if (length > fullMacAddressString.length())
break;
// Search with one addition digit

View File

@ -43,7 +43,6 @@
#include <netdb.h>
#include <QtEndian>
#include <QHostInfo>
NYMEA_LOGGING_CATEGORY(dcPing, "Ping")
NYMEA_LOGGING_CATEGORY(dcPingTraffic, "PingTraffic")
@ -350,23 +349,15 @@ void Ping::onSocketReadyRead(int socketDescriptor)
timeValueSubtract(&receiveTimeValue, &reply->m_startTime);
reply->m_duration = qRound((receiveTimeValue.tv_sec * 1000 + (double)receiveTimeValue.tv_usec / 1000) * 100) / 100.0;
QHostInfo::lookupHost(senderAddress.toString(), this, [=](const QHostInfo &info){
if (info.error() != QHostInfo::NoError) {
qCWarning(dcPing()) << "Failed to look up hostname after successfull ping" << senderAddress.toString() << info.error();
} else {
qCDebug(dcPing()) << "********Looked up hostname after successfull ping" << senderAddress.toString() << info.hostName();
if (info.hostName() != senderAddress.toString()) {
reply->m_hostName = info.hostName();
}
}
// Note: due to a Qt bug < 5.9 we need to use old SLOT style and cannot make use of lambda here
int lookupId = QHostInfo::lookupHost(senderAddress.toString(), this, SLOT(onHostLookupFinished(const QHostInfo &info)));
m_pendingHostLookups.insert(lookupId, reply);
qCDebug(dcPingTraffic()) << "Received ICMP response" << reply->targetHostAddress().toString() << ICMP_PACKET_SIZE << "[Bytes]"
<< "ID:" << QString("0x%1").arg(responsePacket->icmp_id, 4, 16, QChar('0'))
<< "Sequence:" << htons(responsePacket->icmp_seq)
<< "Time:" << reply->duration() << "[ms]" << info.hostName();
qCDebug(dcPingTraffic()) << "Received ICMP response" << reply->targetHostAddress().toString() << ICMP_PACKET_SIZE << "[Bytes]"
<< "ID:" << QString("0x%1").arg(responsePacket->icmp_id, 4, 16, QChar('0'))
<< "Sequence:" << htons(responsePacket->icmp_seq)
<< "Time:" << reply->duration() << "[ms]";
finishReply(reply, PingReply::ErrorNoError);
});
} else if (responsePacket->icmp_type == ICMP_DEST_UNREACH) {
// Get the sending package
@ -409,3 +400,23 @@ void Ping::onSocketReadyRead(int socketDescriptor)
}
}
void Ping::onHostLookupFinished(const QHostInfo &info)
{
PingReply *reply = m_pendingHostLookups.value(info.lookupId());
if (!reply) {
qCWarning(dcPing()) << "Could not find reply after host lookup.";
return;
}
if (info.error() != QHostInfo::NoError) {
qCWarning(dcPing()) << "Failed to look up hostname after successfull ping" << reply->targetHostAddress().toString() << info.error();
} else {
qCDebug(dcPing()) << "********Looked up hostname after successfull ping" << reply->targetHostAddress().toString() << info.hostName();
if (info.hostName() != reply->targetHostAddress().toString()) {
reply->m_hostName = info.hostName();
}
}
finishReply(reply, PingReply::ErrorNoError);
}

View File

@ -35,6 +35,7 @@
#include <QQueue>
#include <QTimer>
#include <QObject>
#include <QHostInfo>
#include <QHostAddress>
#include <QSocketNotifier>
#include <QLoggingCategory>
@ -88,6 +89,7 @@ private:
QQueue<PingReply *> m_replyQueue;
QTimer *m_queueTimer = nullptr;
void sendNextReply();
QHash<int, PingReply *> m_pendingHostLookups;
//Error performPing(const QString &address);
void performPing(PingReply *reply);
@ -103,6 +105,7 @@ private:
private slots:
void onSocketReadyRead(int socketDescriptor);
void onHostLookupFinished(const QHostInfo &info);
};