summaryrefslogblamecommitdiffstats
path: root/workspace/LogReceiver/logreceiver.cpp
blob: 5c695e5cb396994ef127e0ddfea6fe450e986211 (plain) (tree)
1
2
3
4
5
6
7
8
                 
                
                     

                    
 

                    




                          
                    



                                           
                           





                                                 
                                                              





























                                                                                                

                                             
 














                                                                             



                                                       

                           
 
                        
 

                                     



                                               


























                                   






                                                  
 


                                     











































                                                                                              
 #include <QtGui>
 #include <QMap>
 #include <QtNetwork>
 #include <QProcess>


 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>

 #include "logreceiver.h"
 #include <qlocalserver.h>
 #include <qlocalsocket.h>
 #include "status.h"


LogReceiver::LogReceiver(QWidget *parent) :
	QDialog(parent) {
	//ui.setupUi(this);

	statusLabel = new QLabel;
	quitButton = new QPushButton(tr("Quit"));
	quitButton->setAutoDefault(false);

	server = new QLocalServer(this);
	if (!server->listen("/var/tmp/qt_c_socket_default")) {
		QMessageBox::critical(this, tr("LogReceiver"), tr(
				"Unable to start the server: %1.") .arg(server->errorString()));
		close();
		return;
	}

	statusLabel->setText(tr("The server is running.\n"
		"Run the C Client example now."));

	connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
	connect(server, SIGNAL(newConnection()), this, SLOT(handleNewConnection()));

	QHBoxLayout *buttonLayout = new QHBoxLayout;
	buttonLayout->addStretch(1);
	buttonLayout->addWidget(quitButton);
	buttonLayout->addStretch(1);

	QVBoxLayout *mainLayout = new QVBoxLayout;
	mainLayout->addWidget(statusLabel);
	mainLayout->addLayout(buttonLayout);
	setLayout(mainLayout);

	setWindowTitle(tr("Fortune Server"));
}

LogReceiver::~LogReceiver() {

}


void LogReceiver::handleNewConnection() {
	qDebug() << "New Connection arrived";

	QLocalSocket * client = server ->nextPendingConnection();
	clients.insert(client, client);
	connect(client, SIGNAL(disconnected()), client, SLOT(deleteLater()));
	connect(client, SIGNAL(readyRead()), this, SLOT(handleNewInput()));
}

void LogReceiver::handleNewInput() {

	QObject* sender = const_cast<QObject*> (QObject::sender());
	QLocalSocket* socket = static_cast<QLocalSocket*> (sender);

	QLocalSocket * client = clients.value(socket);

	QByteArray data = client->readAll();
	QString logMsg(data);
	QString interface = logMsg.section(";",0,0);
	QString s_state = logMsg.section(";", 1, 1);
	QString s_subState = logMsg.section(";", 2, 2);
	QString msg = logMsg.section(";", 3, 3);

	qDebug() << logMsg;

	qDebug() << msg;

	int st = s_state.toInt();
	int sst = s_subState.toInt();

	switch (st) {
	case STAT_OK:
		qDebug() << "received stat_ok";
		switch (sst) {
		case DHCP_DISCOVER:
			break;
		case DHCP_OFFER:

			break;
		case DHCP_REQUEST:

			break;
		case DHCP_DECLINE:

			break;
		case DHCP_ACK:

			break;
		case DHCP_NAK:

			break;
		case DHCP_RELEASE:

			break;
		case DHCP_INFORM:

			break;
		default:
			break;
		}
		break;
	case STAT_ERROR:
		qDebug() << "received stat_error";
		break;
	default:
		qDebug() << "undefined status";
	}

	statusLabel->setText(logMsg);
}

QList<QNetworkInterface> LogReceiver::getListOfNetworkInterfaces() {
	QList<QNetworkInterface> nIList = QNetworkInterface::allInterfaces();
	QList<QNetworkInterface> result;
	foreach(QNetworkInterface nI, nIList) {
		if (((!(nI.flags() & QNetworkInterface::CanBroadcast)||
				nI.flags() & QNetworkInterface::IsLoopBack) ||
				nI.flags() & QNetworkInterface::IsPointToPoint))
		{
			continue;
		}
	   	qDebug() << nI.humanReadableName();
	   	result.append(nI);
	}
	return result;
}

void LogReceiver::runDHCPCD(QList<QNetworkInterface> &interfaces) {
	foreach(QNetworkInterface ni, interfaces) {
		QProcess * p = new QProcess(this);
        clientProcesses.insert(p->pid(),p);
		p->start(pathToDhcpcdExe,dhcpcdArguments);
		connect(p, SIGNAL(started()), this, SLOT(handleProcessStarted()));
		connect(p, SIGNAL(finished(int, QProcess::ExitStatus)),
				this, SLOT(handleProcessFinished(int, QProcess::ExitStatus)));
	}
}

void LogReceiver::handleProcessFinished(int exitCode,
		QProcess::ExitStatus exitStatus) {

	QObject* sender = const_cast<QObject*> (QObject::sender());
	QProcess* process = static_cast<QProcess*> (sender);

	QProcess * client = clientProcesses.value(process->pid());
}

void LogReceiver::handleProcessStarted() {

	QObject* sender = const_cast<QObject*> (QObject::sender());
	QProcess* process = static_cast<QProcess*> (sender);

	QProcess * client = clientProcesses.value(process->pid());
}