summaryrefslogblamecommitdiffstats
path: root/src/sysinfo.cpp
blob: e1aa88cc0c803e37a05667d7a7e84662ee9e63b8 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                                                                   
                                                         


































































































                                                                                                         
#include "sysinfo.h"


// ------------------------------------------------------------------------------------------------
SysInfo::SysInfo(){}
// ------------------------------------------------------------------------------------------------
SysInfo::~SysInfo(){}
// ------------------------------------------------------------------------------------------------
const QString SysInfo::getInfo(const QString& infoName){
	qxtLog->debug() << "[si] 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("json"))
		return getNames();
	/* unknown code */
	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() << "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<QHostAddress> 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() << "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;
}
// ------------------------------------------------------------------------------------------------
QString SysInfo::getScriptOutput(QString cmd)
{
    QProcess *process = new QProcess();
    qDebug()<<"try to open: "<<cmd;
    process->start(cmd, QIODevice::ReadOnly);

    if (!process->waitForStarted() )
        qDebug()<<"process couldn't get opened";

    QString output;
    process->waitForFinished();

    QTextStream *txt_stream = new QTextStream(process);

    while(!txt_stream->atEnd() )
    {
        qDebug()<<"read output: ";
        QString tmp_str = txt_stream->readLine();
        output += tmp_str;
        qDebug()<<tmp_str;
    }
    qDebug()<<"process finished: ";
    return output;
}