#include "sysinfo.h" // ------------------------------------------------------------------------------------------------ SysInfo::SysInfo(){} // ------------------------------------------------------------------------------------------------ SysInfo::~SysInfo(){} // ------------------------------------------------------------------------------------------------ const QString SysInfo::getInfo(const QString& 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"; } // ------------------------------------------------------------------------------------------------ const QString SysInfo::getMACAddress(){ // Returns MAC address of eth0 for now QNetworkInterface qni = QNetworkInterface::interfaceFromName(QString("eth0")); if (!qni.isValid()){ qxtLog->debug() << "[sysinfo] MAC Address: No interface matching \"eth0\" found."; return "no_eth0"; } //eth0_index = qni.index(); return qni.hardwareAddress(); } // ------------------------------------------------------------------------------------------------ const QString SysInfo::getIPAddress(){ // Again for eth0 only at the moment. // TODO: this doesn't quite work yet... QNetworkInterface qni = QNetworkInterface::interfaceFromName(QString("eth0")); QList addrlist = qni.allAddresses(); // This is does not return the right IP atm... foreach(QHostAddress addr, addrlist){ if (addr.protocol() == QAbstractSocket::IPv4Protocol && addr != QHostAddress::LocalHost){ return addr.toString(); } } // still here? qxtLog->debug() << "[sysinfo] IP Address: ip_error"; return "ip_error"; } // ------------------------------------------------------------------------------------------------ const QByteArray SysInfo::getNames(){ QVariantMap foo; foo.insert("name", "foo"); foo.insert("type", 123); QVariantMap fooo; fooo.insert("name", "boo"); fooo.insert("type", 321); QVariantList jsonV; jsonV << foo << fooo; QJson::Serializer serializer; QByteArray json = serializer.serialize(jsonV); qxtLog->debug() << json; return json; } // ------------------------------------------------------------------------------------------------ QString SysInfo::getAllInfos(){ QVariantMap infos; infos.insert("mac", getMACAddress()); infos.insert("ip", getIPAddress()); infos.insert("whoami", getScriptOutput("whoami")); //infos.insert("pwd", getScriptOutput("pwd")); //QJson::Serializer serializer; QByteArray json = serializer.serialize(infos); 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(); qxtLog->debug()<<"[sysinfo] Script Output: try to open: "<start(cmd, QIODevice::ReadOnly); if (!process->waitForStarted() ) qxtLog->debug()<<"[sysinfo] Script Output: process couldn't get opened"; QString output; process->waitForFinished(); QTextStream *txt_stream = new QTextStream(process); while(!txt_stream->atEnd() ) { qxtLog->debug()<<"[sysinfo] Script Output: read output: "; QString tmp_str = txt_stream->readLine(); output += tmp_str; qxtLog->debug()<< "[sysinfo] Script Output: " <debug()<<"[sysinfo] Script Output: process finished: "; return output; }