From d2fd3f58269f77ff4d2d60178ee78558d17124fa Mon Sep 17 00:00:00 2001 From: Niklas Goby Date: Sat, 9 Apr 2011 14:19:04 +0200 Subject: inserted the sysinfolibsysfs methods intho the sysinfo class added the mainboard serial number to the hardwarehash computation in the fbgui class (method generatePOSTData). just appended the serial to the mac address without separating char --- src/fbgui.cpp | 9 +++++++-- src/sysinfo.cpp | 43 +++++++++++++++++++++++++++++++++++-------- src/sysinfo.h | 11 +++++++++++ src/sysinfolibsysfs.cpp | 2 +- 4 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/fbgui.cpp b/src/fbgui.cpp index 494c4e8..e18603c 100644 --- a/src/fbgui.cpp +++ b/src/fbgui.cpp @@ -22,9 +22,12 @@ int debugMode = -1; fbgui::fbgui() { // test for libsys function - SysInfoLibsysfs* sil = new SysInfoLibsysfs(); + //SysInfoLibsysfs* sil = new SysInfoLibsysfs(); //sil->getInfoAboutNetworkInterface(); - sil->getInfoMainboardSerial(); + //sil->getInfoMainboardSerial(); + SysInfo si; + si.getInfo("mbserial"); + setupLayout(); createActions(); @@ -176,6 +179,8 @@ QByteArray fbgui::generatePOSTData() // use MAC address as base data SysInfo si; QByteArray data(si.getInfo("mac").toUtf8()); + // append mainboard serial to the mac address for more unique hardwarehash + data.append(si.getInfo("mbserial").toUtf8()); qxtLog->debug() << "[post] Hashing: " << data; // generate MD5 hash of data QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Md5); diff --git a/src/sysinfo.cpp b/src/sysinfo.cpp index e1aa88c..57703ae 100644 --- a/src/sysinfo.cpp +++ b/src/sysinfo.cpp @@ -7,16 +7,19 @@ SysInfo::SysInfo(){} SysInfo::~SysInfo(){} // ------------------------------------------------------------------------------------------------ const QString SysInfo::getInfo(const QString& infoName){ - qxtLog->debug() << "[si] requested " << infoName; + qxtLog->debug() << "[sysinfo] requested " << infoName; if (infoName == QString("mac")) return getMACAddress(); else if (infoName == QString("ip")) return getIPAddress(); else if (infoName == QString("all")) return getAllInfos(); + else if (infoName == QString("mbserial")) + return getMainboardSerial(); else if (infoName == QString("json")) return getNames(); /* unknown code */ + qxtLog->debug() << "[sysinfo] unknown requested"; return "info_error"; } // ------------------------------------------------------------------------------------------------ @@ -24,7 +27,7 @@ const QString SysInfo::getMACAddress(){ // Returns MAC address of eth0 for now QNetworkInterface qni = QNetworkInterface::interfaceFromName(QString("eth0")); if (!qni.isValid()){ - qxtLog->debug() << "No interface matching \"eth0\" found."; + qxtLog->debug() << "[sysinfo] MAC Address: No interface matching \"eth0\" found."; return "no_eth0"; } //eth0_index = qni.index(); @@ -43,7 +46,7 @@ const QString SysInfo::getIPAddress(){ } } // still here? - qxtLog->debug() << "ip_error"; + qxtLog->debug() << "[sysinfo] IP Address: ip_error"; return "ip_error"; } // ------------------------------------------------------------------------------------------------ @@ -81,15 +84,39 @@ QString SysInfo::getAllInfos(){ qxtLog->debug() << json; return json; } +// ------------------------------------------------------------------------------------------------ +const QString SysInfo::getMainboardSerial(){ + QString out = ""; + struct sysfs_class_device *class_device = sysfs_open_class_device("dmi","id"); + struct dlist *attrlist = sysfs_get_classdev_attributes(class_device); + struct sysfs_device *device = sysfs_get_classdev_device(class_device); + + if(attrlist != NULL){ + struct sysfs_attribute *attr = NULL; + dlist_for_each_data(attrlist, attr, struct sysfs_attribute) { + QVariantMap a; + if(QString(attr->name) == QString("board_serial")){ + out = QString(attr->value); + } + } + qxtLog->debug()<< "[sysinfo] Mainboard Serial: " + out; + return out; + } + qxtLog->debug()<< "[sysinfo] Mainboard Serial: attrlist is null! return: mainboard_serial_error"; + sysfs_close_class_device(class_device); + return "mainboard_serial_error"; +} + + // ------------------------------------------------------------------------------------------------ QString SysInfo::getScriptOutput(QString cmd) { QProcess *process = new QProcess(); - qDebug()<<"try to open: "<debug()<<"[sysinfo] Script Output: try to open: "<start(cmd, QIODevice::ReadOnly); if (!process->waitForStarted() ) - qDebug()<<"process couldn't get opened"; + qxtLog->debug()<<"[sysinfo] Script Output: process couldn't get opened"; QString output; process->waitForFinished(); @@ -98,12 +125,12 @@ QString SysInfo::getScriptOutput(QString cmd) while(!txt_stream->atEnd() ) { - qDebug()<<"read output: "; + qxtLog->debug()<<"[sysinfo] Script Output: read output: "; QString tmp_str = txt_stream->readLine(); output += tmp_str; - qDebug()<debug()<< "[sysinfo] Script Output: " <debug()<<"[sysinfo] Script Output: process finished: "; return output; } diff --git a/src/sysinfo.h b/src/sysinfo.h index cbb002e..d32d0f8 100644 --- a/src/sysinfo.h +++ b/src/sysinfo.h @@ -18,6 +18,15 @@ #ifndef SYSINFO_H #define SYSINFO_H +#ifdef __cplusplus +extern "C" { +#endif + +#include "libsysfs.h" +#ifdef __cplusplus +} +#endif + #include "fbgui.h" #include @@ -32,9 +41,11 @@ private: // private system information readers const QString getMACAddress(); const QString getIPAddress(); + const QString getMainboardSerial(); QString getAllInfos(); QString getScriptOutput(QString cmd); + // JSon testing QJson::Serializer serializer; const QByteArray getNames(); diff --git a/src/sysinfolibsysfs.cpp b/src/sysinfolibsysfs.cpp index d9bbac8..2c9aafc 100644 --- a/src/sysinfolibsysfs.cpp +++ b/src/sysinfolibsysfs.cpp @@ -91,7 +91,7 @@ QString SysInfoLibsysfs::getInfoMainboardSerial(){ } qDebug() << "attrlist is null!"; sysfs_close_class_device(class_device); - return null; + return NULL; } void SysInfoLibsysfs::getInfoAboutClassNet() -- cgit v1.2.3-55-g7522