summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas2011-08-01 16:55:01 +0200
committerNiklas2011-08-01 16:55:01 +0200
commite0d30e3134fcbe54182d53e69f64167db408014b (patch)
treeec870362fb54c9a8ed0ea5bd815721888e356a2d
parentseperation of logic and gui completed. (diff)
downloadfbgui-e0d30e3134fcbe54182d53e69f64167db408014b.tar.gz
fbgui-e0d30e3134fcbe54182d53e69f64167db408014b.tar.xz
fbgui-e0d30e3134fcbe54182d53e69f64167db408014b.zip
added some log statements to the dhcpcd client. But unfortunately it seems that some message will not be delivered. It happens that after the process finished message, some other messages arrived
-rwxr-xr-xworkspace/LogReceiver/LogReceiverbin65367 -> 69772 bytes
-rw-r--r--workspace/LogReceiver/LogReceiver.pro1
-rw-r--r--workspace/LogReceiver/logreceiver.cpp113
-rw-r--r--workspace/LogReceiver/logreceiver.h7
-rw-r--r--workspace/LogReceiver/ndgui.cpp5
-rw-r--r--workspace/customdhcpcd/src/client.c5
-rw-r--r--workspace/customdhcpcd/src/configure.c4
-rw-r--r--workspace/customdhcpcd/src/dhcpcd.c20
-rw-r--r--workspace/customdhcpcd/src/logger.c59
-rw-r--r--workspace/customdhcpcd/src/logwriter.c2
-rw-r--r--workspace/customdhcpcd/src/status.h15
11 files changed, 128 insertions, 103 deletions
diff --git a/workspace/LogReceiver/LogReceiver b/workspace/LogReceiver/LogReceiver
index ac7b336..9119d96 100755
--- a/workspace/LogReceiver/LogReceiver
+++ b/workspace/LogReceiver/LogReceiver
Binary files differ
diff --git a/workspace/LogReceiver/LogReceiver.pro b/workspace/LogReceiver/LogReceiver.pro
index 97c9067..81c48f6 100644
--- a/workspace/LogReceiver/LogReceiver.pro
+++ b/workspace/LogReceiver/LogReceiver.pro
@@ -6,7 +6,6 @@ QT += core \
LIBS += -lsysfs
INCLUDEPATH += ../customdhcpcd/src
HEADERS += ndgui.h \
- status.h \
logreceiver.h
SOURCES += ndgui.cpp \
main.cpp \
diff --git a/workspace/LogReceiver/logreceiver.cpp b/workspace/LogReceiver/logreceiver.cpp
index 1bbdec0..60e8b5c 100644
--- a/workspace/LogReceiver/logreceiver.cpp
+++ b/workspace/LogReceiver/logreceiver.cpp
@@ -25,27 +25,36 @@ LogReceiver::~LogReceiver() {
}
-void LogReceiver::initAndRun() {
+void LogReceiver::initAndRun(QString serverPath,
+ QString pathToExe ,
+ QStringList* args ) {
- if (!server->listen("/var/tmp/qt_c_socket_default")) {
+ if (serverPath != DEFAULT_QTSOCKETADDRESS) {
+ dhcpcdArguments.append("-q");
+ dhcpcdArguments.append(serverPath);
+ }
+ if (!server->listen(serverPath)) {
/*
QMessageBox::critical(this, tr("LogReceiver"), tr(
"Unable to start the server: %1.") .arg(server->errorString()));
close();
*/
// emit signal to the gui that a critial error occoured
+ qDebug() << "--- \t [LogReceiver::initAndRun] Unable to start server:" << server->errorString();
return;
}
connect(server, SIGNAL(newConnection()), this, SLOT(handleNewConnection()));
QList<QNetworkInterface> list = getListOfNetworkInterfaces();
- //qDebug() << list.size();
//checkCarrierState(list);
- //qDebug() << list.size();
- //checkCarrierState("eth1");
- //checkCarrierState("eth0");
- pathToDhcpcdExe = "/home/niklas/fbgui/workspace/customdhcpcd/src/dhcpcd";
+ pathToDhcpcdExe = pathToExe;
+
+ if(args != NULL && ! args->isEmpty()) {
+ qDebug() << "--- \t [LogReceiver::initAndRun] added additional args";
+ dhcpcdArguments.append(*args);
+ }
+
dhcpcdArguments.append("-d");
QString ifName("eth1");
runDHCPCD(ifName);
@@ -86,50 +95,61 @@ void LogReceiver::handleNewInputLine(QString data) {
QString s_subState = logMsg.section(";", 2, 2);
QString msg = logMsg.section(";", 3, 3);
- int pBar = indexToIfaceNameMap.value(interface.trimmed());
-
- //qDebug() << logMsg;
-
- //qDebug() << msg;
-
+ int pBar = indexToIfaceNameMap.value(interface.trimmed(), -1);
+/*
+ if(pBar < 0) {
+ qDebug() << "--- \t no pBar with index: " << pBar;
+ }
+ else {
+ qDebug() << "--- \t get pBar for Interface: " << interface.trimmed() << "index: " << pBar;
+ }
+*/
int st = s_state.trimmed().toInt();
int sst = s_subState.trimmed().toInt();
-
+ qDebug() << logMsg;
switch (st) {
case LOG_INFO:
- qDebug() << "received LOG_INFO";
- qDebug() << sst;
switch (sst) {
case DHCP_DISCOVER:
- emit changeProgressBarValue(pBar,10);
+ emit changeProgressBarValue(pBar, 10);
break;
case DHCP_OFFER:
- emit changeProgressBarValue(pBar,20);
+ emit changeProgressBarValue(pBar, 20);
break;
case DHCP_REQUEST:
- emit changeProgressBarValue(pBar,30);
- break;
- case DHCP_DECLINE:
-
+ emit changeProgressBarValue(pBar, 30);
break;
case DHCP_ACK:
- emit changeProgressBarValue(pBar,100);
+ emit changeProgressBarValue(pBar, 40);
break;
case DHCP_NAK:
-
+ emit changeProgressBarValue(pBar, 40);
+ break;
+ case DHCPCD_ARP_TEST:
+ emit changeProgressBarValue(pBar, 50);
+ break;
+ case DHCP_DECLINE:
+ emit changeProgressBarValue(pBar, 60);
break;
case DHCP_RELEASE:
break;
case DHCP_INFORM:
-
break;
+ case DHCPCD_CONFIGURE:
+ emit changeProgressBarValue(pBar, 70);
+ break;
+ case DHCPCD_WRITE:
+ emit changeProgressBarValue(pBar, 80);
+ break;
+ case DHCPCD_EXIT:
+ emit changeProgressBarValue(pBar, 100);
+ break;
+ case DHCPCD_LOG:
+
default:
break;
}
-
- qDebug() << msg;
-
break;
case LOG_ERR:
qDebug() << "received stat_error";
@@ -137,8 +157,6 @@ void LogReceiver::handleNewInputLine(QString data) {
default:
qDebug() << logMsg;
}
-
- //statusLabel->setText(logMsg);
}
QList<QNetworkInterface> LogReceiver::getListOfNetworkInterfaces() {
@@ -171,6 +189,9 @@ void LogReceiver::runDHCPCD(QList<QNetworkInterface> &interfaces) {
foreach(QNetworkInterface ni, interfaces) {
dhcpcdArguments.append(ni.humanReadableName());
QProcess * p = new QProcess(this);
+
+ qDebug() << dhcpcdArguments;
+
clientProcesses.insert(p->pid(),p);
p->start(pathToDhcpcdExe,dhcpcdArguments);
connect(p, SIGNAL(started()), this, SLOT(handleProcessStarted()));
@@ -183,6 +204,9 @@ void LogReceiver::runDHCPCD(QList<QNetworkInterface> &interfaces) {
void LogReceiver::runDHCPCD(QString interface) {
dhcpcdArguments.append(interface);
QProcess * p = new QProcess(this);
+
+ qDebug() << dhcpcdArguments;
+
clientProcesses.insert(p->pid(),p);
p->start(pathToDhcpcdExe,dhcpcdArguments);
connect(p, SIGNAL(started()), this, SLOT(handleProcessStarted()));
@@ -202,10 +226,15 @@ void LogReceiver::checkCarrierState(QList<QNetworkInterface> &interfaces) {
// cable is unplugged,
// remove interface out of the list,
// remove interface out ot the index maps
- int i = indexToIfaceNameMap.value(nI.humanReadableName());
+ int i = indexToIfaceNameMap.value(nI.humanReadableName(), -1);
+ if(i < 0) {
+ qDebug() << "--- \t [LogReceiver::checkCarrierState] no interface with name:" << nI.humanReadableName();
+ }
+ else {
indexToIfaceNameMap.remove(nI.humanReadableName());
interfacesMap.remove(i);
interfaces.removeAt(i);
+ }
}
}
}
@@ -254,26 +283,18 @@ bool LogReceiver::checkCarrierState(QString interface) {
void LogReceiver::handleProcessFinished(int exitCode,
QProcess::ExitStatus exitStatus) {
-
- //QObject* sender = const_cast<QObject*> (QObject::sender());
- //QProcess* process = static_cast<QProcess*> (sender);
QProcess* p = qobject_cast<QProcess * >(QObject::sender());
- QProcess * client = clientProcesses.value(p->pid());
-
- qDebug() << "process finished: " << client->pid() << exitCode << exitStatus;
+ QProcess * client = clientProcesses.value(p->pid(),0);
+ if(client <= 0) {
+ qDebug() << "--- \t [LogReceiver::handleProcessFinished] haven't found process!";
+ }
+ else {
+ qDebug() << "process finished: " << client->pid() << exitCode << exitStatus;
+ }
}
void LogReceiver::handleProcessStarted() {
-
-/*
- //QObject* sender = const_cast<QObject*> (QObject::sender());
- QProcess* process = static_cast<QProcess*> (QObject::sender());
-*/
- //QProcess* p = qobject_cast<QProcess * >(QObject::sender());
- //QProcess * client = clientProcesses.value(process->pid());
-
-
qDebug() << "process started: ";
}
diff --git a/workspace/LogReceiver/logreceiver.h b/workspace/LogReceiver/logreceiver.h
index 26a3934..561b406 100644
--- a/workspace/LogReceiver/logreceiver.h
+++ b/workspace/LogReceiver/logreceiver.h
@@ -10,11 +10,16 @@ class QLocalSocket;
class LogReceiver: public QObject {
Q_OBJECT
+#define DEFAULT_QTSOCKETADDRESS "/var/tmp/qt_c_socket_default"
+#define DEFAULT_PATHTODHCPCDEXE "/home/niklas/fbgui/workspace/customdhcpcd/src/dhcpcd"
+
public:
LogReceiver();
~LogReceiver();
- void initAndRun();
+ void initAndRun(QString serverPath = DEFAULT_QTSOCKETADDRESS,
+ QString pathToExe = DEFAULT_PATHTODHCPCDEXE,
+ QStringList* args = NULL);
private slots:
void handleNewConnection();
diff --git a/workspace/LogReceiver/ndgui.cpp b/workspace/LogReceiver/ndgui.cpp
index e838a8c..629a8fb 100644
--- a/workspace/LogReceiver/ndgui.cpp
+++ b/workspace/LogReceiver/ndgui.cpp
@@ -10,7 +10,7 @@ ndgui::ndgui(QWidget *parent)
buildGui();
- logReceiver.initAndRun();
+ logReceiver.initAndRun("/var/tmp/qt_c_socket_custom");
setWindowTitle(tr("NetD"));
@@ -23,8 +23,6 @@ ndgui::~ndgui()
void ndgui::buildGui() {
-
-
ndStatusLabel = new QLabel(tr("test"));
ndStatusLabel->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Expanding);
@@ -86,6 +84,7 @@ void ndgui::addInterfacesToGroupBox(QList<QNetworkInterface> &interfaces) {
}
*/
void ndgui::handleProgress(int iFaceIndex, int newValue) {
+ qDebug() << "<[---]> SLOT handleProgress activated with: " << iFaceIndex << newValue;
QProgressBar * pBar = progressBars.value(iFaceIndex);
if(newValue >= pBar->value()) {
pBar->setValue(newValue);
diff --git a/workspace/customdhcpcd/src/client.c b/workspace/customdhcpcd/src/client.c
index 5a8a9e9..ba71ba4 100644
--- a/workspace/customdhcpcd/src/client.c
+++ b/workspace/customdhcpcd/src/client.c
@@ -792,6 +792,7 @@ static int handle_dhcp (state_t *state, int type, const options_t *options)
/* We should restart on a NAK */
if (type == DHCP_NAK) {
logger (LOG_INFO, "received NAK: %s", dhcp->message);
+ logToQt(LOG_INFO, DHCP_NAK, "");
state->state = STATE_INIT;
state->timeout = 0;
state->xid = 0;
@@ -827,6 +828,8 @@ static int handle_dhcp (state_t *state, int type, const options_t *options)
addr, inet_ntoa (dhcp->serveraddress));
free (addr);
+ logToQt(LOG_INFO, DHCP_OFFER, "");
+
#ifdef ENABLE_INFO
if (options->test) {
write_info (iface, dhcp, options, false);
@@ -873,6 +876,7 @@ static int handle_dhcp (state_t *state, int type, const options_t *options)
dhcp->address.s_addr)
{
errno = 0;
+ logToQt(LOG_INFO, DHCPCD_ARP_TEST, "");
if (arp_claim (iface, dhcp->address)) {
do_socket (state, SOCKET_OPEN);
_send_message (state, DHCP_DECLINE, options);
@@ -969,6 +973,7 @@ static int handle_dhcp (state_t *state, int type, const options_t *options)
state->xid = 0;
+ logToQt(LOG_INFO, DHCPCD_CONFIGURE, "");
if (configure (options, iface, dhcp, true) == -1 &&
! state->daemonised)
return (-1);
diff --git a/workspace/customdhcpcd/src/configure.c b/workspace/customdhcpcd/src/configure.c
index 0969f73..91e3c9f 100644
--- a/workspace/customdhcpcd/src/configure.c
+++ b/workspace/customdhcpcd/src/configure.c
@@ -59,6 +59,9 @@
#include "signal.h"
#include "socket.h"
+#include "status.h"
+#include "logwriter.h"
+
static int file_in_path (const char *file)
{
char *p = getenv ("PATH");
@@ -742,6 +745,7 @@ int configure (const options_t *options, interface_t *iface,
free_route (iface->previous_routes);
iface->previous_routes = new_routes;
+ logToQt(LOG_INFO, DHCPCD_WRITE, "");
if (options->dodns && dhcp->dnsservers)
make_resolv(iface->name, dhcp);
else
diff --git a/workspace/customdhcpcd/src/dhcpcd.c b/workspace/customdhcpcd/src/dhcpcd.c
index 43ce3ed..769bf39 100644
--- a/workspace/customdhcpcd/src/dhcpcd.c
+++ b/workspace/customdhcpcd/src/dhcpcd.c
@@ -197,7 +197,7 @@ int main (int argc, char **argv)
/* Don't set any optional arguments here so we retain POSIX
* compatibility with getopt */
while ((opt = getopt_long(argc, argv, EXTRA_OPTS
- "c:dh:i:kl:m:npr:s:t:u:xAEF:GHI:LMNRSTY",
+ "c:dh:i:kl:m:npq:r:s:t:u:xAEF:GHI:LMNRSTY",
longopts, &option_index)) != -1)
{
switch (opt) {
@@ -285,6 +285,14 @@ int main (int argc, char **argv)
case 'p':
options->persistent = true;
break;
+ case 'q':
+ if (strlen(optarg) > QTSOCKETADDRESSLENGTH) {
+ logger(LOG_ERR, "`%s' too long for an socket address path (max=%d)",
+ optarg, QTSOCKETADDRESSLENGTH);
+ goto abort;
+ }
+ strlcpy(options->qtsocketaddress, optarg, sizeof(options->qtsocketaddress));
+ break;
case 's':
options->doinform = true;
options->doarp = false;
@@ -323,14 +331,6 @@ int main (int argc, char **argv)
goto abort;
}
break;
- case 'q':
- if (strlen(optarg) > QTSOCKETADDRESSLENGTH) {
- logger(LOG_ERR, "`%s' too long for an socket address path (max=%d)",
- optarg, QTSOCKETADDRESSLENGTH);
- goto abort;
- }
- strlcpy(options->qtsocketaddress, optarg, sizeof(options->qtsocketaddress));
- break;
case 'u':
{
int offset = 0;
@@ -666,7 +666,7 @@ abort:
#endif
logger (LOG_INFO, "exiting");
- logToQt(LOG_INFO, 0, "exiting due abort");
+ logToQt(LOG_INFO, DHCPCD_EXIT, "exiting due abort");
exit (retval);
/* NOTREACHED */
}
diff --git a/workspace/customdhcpcd/src/logger.c b/workspace/customdhcpcd/src/logger.c
index cecd2b8..91d6cc0 100644
--- a/workspace/customdhcpcd/src/logger.c
+++ b/workspace/customdhcpcd/src/logger.c
@@ -39,30 +39,27 @@
#include <string.h>
#include <syslog.h>
-
#include "common.h"
#include "logger.h"
#include "logwriter.h"
-
static int loglevel = LOG_WARNING;
-static char logprefix[12] = {0};
+static char logprefix[12] = { 0 };
-int logtolevel (const char *priority)
-{
+int logtolevel(const char *priority) {
CODE *c;
if (isdigit ((int) *priority))
- return (atoi (priority));
+ return (atoi(priority));
for (c = prioritynames; c->c_name; c++)
- if (! strcasecmp (priority, c->c_name))
+ if (!strcasecmp(priority, c->c_name))
return (c->c_val);
return (-1);
}
-static const char *leveltolog (int level) {
+static const char *leveltolog(int level) {
CODE *c;
for (c = prioritynames; c->c_name; c++)
@@ -72,18 +69,15 @@ static const char *leveltolog (int level) {
return (NULL);
}
-void setloglevel (int level)
-{
+void setloglevel(int level) {
loglevel = level;
}
-void setlogprefix (const char *prefix)
-{
- snprintf (logprefix, sizeof (logprefix), "%s", prefix);
+void setlogprefix(const char *prefix) {
+ snprintf(logprefix, sizeof(logprefix), "%s", prefix);
}
-void logger (int level, const char *fmt, ...)
-{
+void logger(int level, const char *fmt, ...) {
va_list p;
va_list p2;
FILE *f = stderr;
@@ -92,38 +86,39 @@ void logger (int level, const char *fmt, ...)
va_copy (p2, p);
if (level <= LOG_ERR || level <= loglevel) {
- if (level == LOG_DEBUG || level == LOG_INFO)
- f = stdout;
- fprintf (f, "%s, %s", leveltolog (level), logprefix);
- vfprintf (f, fmt, p);
- fputc ('\n', f);
/* new function by Niklas Goby
* send the log message also to our Qt programm.
* implemented in logwriter.c
* */
- logLoggerToQt(level, fmt, p);
+ logLoggerToQt(level, fmt, p);
+
+ if (level == LOG_DEBUG || level == LOG_INFO)
+ f = stdout;
+ fprintf(f, "%s, %s", leveltolog(level), logprefix);
+ vfprintf(f, fmt, p);
+ fputc('\n', f);
/* stdout, stderr may be re-directed to some kind of buffer.
* So we always flush to ensure it's written. */
- fflush (f);
+ fflush(f);
}
if (level < LOG_DEBUG || level <= loglevel) {
- size_t len = strlen (logprefix);
- size_t fmt2len = strlen (fmt) + len + 1;
- char *fmt2 = malloc (sizeof (char) * fmt2len);
+ size_t len = strlen(logprefix);
+ size_t fmt2len = strlen(fmt) + len + 1;
+ char *fmt2 = malloc(sizeof(char) * fmt2len);
char *pf = fmt2;
if (fmt2) {
- memcpy (pf, logprefix, len);
+ memcpy(pf, logprefix, len);
pf += len;
- strlcpy (pf, fmt, fmt2len - len);
- vsyslog (level, fmt2, p2);
- free (fmt2);
+ strlcpy(pf, fmt, fmt2len - len);
+ vsyslog(level, fmt2, p2);
+ free(fmt2);
} else {
- vsyslog (level, fmt, p2);
- syslog (LOG_ERR, "logger: memory exhausted");
- exit (EXIT_FAILURE);
+ vsyslog(level, fmt, p2);
+ syslog(LOG_ERR, "logger: memory exhausted");
+ exit(EXIT_FAILURE);
}
}
diff --git a/workspace/customdhcpcd/src/logwriter.c b/workspace/customdhcpcd/src/logwriter.c
index be8ee26..89aadb6 100644
--- a/workspace/customdhcpcd/src/logwriter.c
+++ b/workspace/customdhcpcd/src/logwriter.c
@@ -144,5 +144,5 @@ void logSendToQt(int type) {
void logLoggerToQt(int level, const char *fmt, va_list args) {
vsnprintf(mesg, sizeof(mesg), fmt, args);
strcat(mesg, "\n");
- logToQt(level, 0, mesg);
+ logToQt(level, DHCPCD_LOG, mesg);
}
diff --git a/workspace/customdhcpcd/src/status.h b/workspace/customdhcpcd/src/status.h
index 493eea1..0a1dc8a 100644
--- a/workspace/customdhcpcd/src/status.h
+++ b/workspace/customdhcpcd/src/status.h
@@ -8,15 +8,12 @@
#ifndef STATUS_H_
#define STATUS_H_
-enum STATUS {
- STAT_OK,
- STAT_ERROR,
- STAT_INFO
-};
+#define DHCPCD_EXIT 9
+#define DHCPCD_ARP_TEST 10
+#define DHCPCD_CONFIGURE 11
+#define DHCPCD_WRITE 12
+#define DHCPCD_LOG 13
+
-enum SUBSTATUS {
- DISCOVER,
- OFFER
-};
#endif /* STATUS_H_ */