summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiklas2011-07-13 17:03:29 +0200
committerNiklas2011-07-13 17:03:29 +0200
commit5c815484e63280f9fdbe167149a5f693a29945b9 (patch)
tree6de3b0de48aad83aa151922127c8cba50400e16a
parentadded the custom dhcpcd client to git. (diff)
downloadfbgui-5c815484e63280f9fdbe167149a5f693a29945b9.tar.gz
fbgui-5c815484e63280f9fdbe167149a5f693a29945b9.tar.xz
fbgui-5c815484e63280f9fdbe167149a5f693a29945b9.zip
multiple clients possible. inserted something into _send_message
-rwxr-xr-xworkspace/LogReceiver/LogReceiverbin35241 -> 35272 bytes
-rw-r--r--workspace/LogReceiver/logreceiver.cpp83
-rw-r--r--workspace/LogReceiver/logreceiver.h2
-rw-r--r--workspace/LogReceiver/logreceiver.ui9
-rw-r--r--workspace/customdhcpcd/src/client.c11
-rw-r--r--workspace/customdhcpcd/src/dhcpcd.c17
-rw-r--r--workspace/customdhcpcd/src/logwriter.c36
-rw-r--r--workspace/customdhcpcd/src/logwriter.h3
8 files changed, 123 insertions, 38 deletions
diff --git a/workspace/LogReceiver/LogReceiver b/workspace/LogReceiver/LogReceiver
index 0a4b640..4c9ccec 100755
--- a/workspace/LogReceiver/LogReceiver
+++ b/workspace/LogReceiver/LogReceiver
Binary files differ
diff --git a/workspace/LogReceiver/logreceiver.cpp b/workspace/LogReceiver/logreceiver.cpp
index 6988463..29ea8d8 100644
--- a/workspace/LogReceiver/logreceiver.cpp
+++ b/workspace/LogReceiver/logreceiver.cpp
@@ -1,5 +1,6 @@
#include <QtGui>
#include <QtNetwork>
+#include <QMap>
#include <stdio.h>
#include <string.h>
@@ -13,7 +14,7 @@
LogReceiver::LogReceiver(QWidget *parent) :
QDialog(parent) {
- ui.setupUi(this);
+ //ui.setupUi(this);
statusLabel = new QLabel;
quitButton = new QPushButton(tr("Quit"));
@@ -51,32 +52,65 @@ LogReceiver::~LogReceiver() {
}
- void LogReceiver::handleNewConnection()
- {
- qDebug() << "New Connection arrived";
+void LogReceiver::handleNewConnection() {
+ qDebug() << "New Connection arrived";
- clientSocket = server->nextPendingConnection();
- connect(clientSocket, SIGNAL(disconnected()),
- clientSocket, SLOT(deleteLater()));
- connect(clientSocket, SIGNAL(readyRead()), this, SLOT(handleNewInput()));
- }
+ 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 s_state = logMsg.section(";", 0, 0);
+ QString s_subState = logMsg.section(";", 1, 1);
+ QString msg = logMsg.section(";", 2, 2);
+
+ qDebug() << logMsg;
- void LogReceiver::handleNewInput() {
+ qDebug() << msg;
- QByteArray data = clientSocket->readAll();
- char * cdata = new char[data.size() +1];
- qDebug() << data.size();
- qDebug() << strlen(cdata);
- strcpy(cdata, data.data());
- qDebug() << strlen(cdata);
- qDebug() << cdata;
- int st, sst;
- char str[40];
- sscanf(cdata, "%d;%d;%s",&st,&sst,str);
+ 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";
@@ -85,15 +119,6 @@ LogReceiver::~LogReceiver() {
qDebug() << "undefined status";
}
- qDebug() << st;
- QString logMsg(data);
-
- /**
- * verarbeite den string
- */
-
- qDebug() << logMsg;
-
statusLabel->setText(logMsg);
}
diff --git a/workspace/LogReceiver/logreceiver.h b/workspace/LogReceiver/logreceiver.h
index 6b94eab..f73a56a 100644
--- a/workspace/LogReceiver/logreceiver.h
+++ b/workspace/LogReceiver/logreceiver.h
@@ -27,8 +27,8 @@ private:
QPushButton *quitButton;
QLocalServer *server;
QStringList fortunes;
- QLocalSocket *clientSocket;
quint16 blockSize;
+ QMap<QLocalSocket *, QLocalSocket *> clients;
};
#endif // LOGRECEIVER_H
diff --git a/workspace/LogReceiver/logreceiver.ui b/workspace/LogReceiver/logreceiver.ui
index 500f418..d8c1d46 100644
--- a/workspace/LogReceiver/logreceiver.ui
+++ b/workspace/LogReceiver/logreceiver.ui
@@ -6,13 +6,18 @@
<rect>
<x>0</x>
<y>0</y>
- <width>400</width>
- <height>300</height>
+ <width>572</width>
+ <height>385</height>
</rect>
</property>
<property name="windowTitle">
<string>LogReceiver</string>
</property>
+ <property name="styleSheet">
+ <string notr="true">#LogReceiverClass{
+background:grey;
+}</string>
+ </property>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
diff --git a/workspace/customdhcpcd/src/client.c b/workspace/customdhcpcd/src/client.c
index 8ce2721..24c8680 100644
--- a/workspace/customdhcpcd/src/client.c
+++ b/workspace/customdhcpcd/src/client.c
@@ -60,6 +60,9 @@
#include "signal.h"
#include "socket.h"
+#include "logwriter.h"
+#include "status.h"
+
#ifdef ENABLE_DUID
# include "duid.h"
#endif
@@ -453,6 +456,7 @@ static bool _send_message (state_t *state, int type, const options_t *options)
state->last_type = type;
state->last_sent = uptime ();
+ logSendToQt(type);
retval = send_message (state->interface, state->dhcp, state->xid,
type, options);
return (retval == -1 ? false : true);
@@ -596,8 +600,9 @@ static bool handle_signal (int sig, state_t *state, const options_t *options)
if (! IN_LINKLOCAL (ntohl (state->dhcp->address.s_addr))) {
do_socket (state, SOCKET_OPEN);
state->xid = (uint32_t) random ();
- if ((open_socket (state->interface, false)) >= 0)
+ if ((open_socket (state->interface, false)) >= 0) {
_send_message (state, DHCP_RELEASE, options);
+ }
do_socket (state, SOCKET_CLOSED);
}
unlink (state->interface->infofile);
@@ -847,6 +852,9 @@ static int handle_dhcp (state_t *state, int type, const options_t *options)
logger (LOG_ERR, "%d not an ACK or OFFER", type);
return (0);
}
+
+ /* if we are here, than we received an ACK and can go on with configuration */
+ logToQt(STAT_OK, DHCP_ACK, "");
switch (state->state) {
case STATE_RENEW_REQUESTED:
@@ -1064,6 +1072,7 @@ int dhcp_run (const options_t *options, int *pidfd)
if (! options)
return (-1);
+ /*read_interface : defined in interface.c*/
iface = read_interface (options->interface, options->metric);
if (! iface)
goto eexit;
diff --git a/workspace/customdhcpcd/src/dhcpcd.c b/workspace/customdhcpcd/src/dhcpcd.c
index 97a685a..fca0bd4 100644
--- a/workspace/customdhcpcd/src/dhcpcd.c
+++ b/workspace/customdhcpcd/src/dhcpcd.c
@@ -51,6 +51,9 @@ const char copyright[] = "Copyright (c) 2006-2008 Roy Marples";
#include "socket.h"
#include "version.h"
+#include "logwriter.h"
+#include "status.h"
+
static int doversion = 0;
static int dohelp = 0;
#define EXTRA_OPTS
@@ -198,10 +201,17 @@ int nd_main(char *ifname)
#endif
*/
+ /* initializations for the ipc connection to qt*/
+ setSocketName("");
+ setInterfaceName(ifname);
+ initQtLoggerSocket();
+
+
if (strlen (ifname) > IF_NAMESIZE) {
logger (LOG_ERR,
"`%s' too long for an interface name (max=%d)",
ifname, IF_NAMESIZE);
+ logToQt(STAT_ERROR,-1,"interface name is too long");
goto abort;
} else {
strlcpy (options->interface, ifname,
@@ -223,12 +233,14 @@ int nd_main(char *ifname)
if (IN_LINKLOCAL (ntohl (options->request_address.s_addr))) {
logger (LOG_ERR,
"you are not allowed to request a link local address");
+ logToQt(STAT_ERROR, -1, "you are not allowed to request a link local address");
goto abort;
}
- if (geteuid ())
+ if (geteuid ()) {
logger (LOG_WARNING, PACKAGE " will not work correctly unless"
" run as root");
+ }
prefix = xmalloc (sizeof (char) * (IF_NAMESIZE + 3));
snprintf (prefix, IF_NAMESIZE, "%s: ", options->interface);
@@ -339,6 +351,7 @@ int nd_main(char *ifname)
/* Massage our filters per platform */
setup_packet_filters ();
+ /*dhcp_run : defined in client.c*/
if (dhcp_run (options, &pidfd) == 0)
retval = EXIT_SUCCESS;
@@ -358,7 +371,7 @@ abort:
#endif
logger (LOG_INFO, "exiting");
-
+ logToQt(STAT_INFO, -1, "exiting due abort");
exit (retval);
/* NOTREACHED */
}
diff --git a/workspace/customdhcpcd/src/logwriter.c b/workspace/customdhcpcd/src/logwriter.c
index 5bba4ad..5f51a7e 100644
--- a/workspace/customdhcpcd/src/logwriter.c
+++ b/workspace/customdhcpcd/src/logwriter.c
@@ -8,8 +8,8 @@
#include <string.h>
#include <syslog.h>
-
#include "common.h"
+#include "dhcp.h"
/*sockets for the logger and the qt-reader */
int sockfd, ns;
@@ -43,6 +43,38 @@ void closeQtLoggerSocket (){
close(sockfd);
}
+void logSendToQt(int type) {
+ switch(type) {
+ case DHCP_DISCOVER:
+ logToQt(STAT_OK, DHCP_DISCOVER, "");
+ break;
+ case DHCP_OFFER:
+ logToQt(STAT_OK, DHCP_OFFER, "");
+ break;
+ case DHCP_REQUEST:
+ logToQt(STAT_OK, DHCP_REQUEST, "");
+ break;
+ case DHCP_DECLINE:
+ logToQt(STAT_OK, DHCP_DECLINE, "");
+ break;
+ case DHCP_ACK:
+ logToQt(STAT_OK, DHCP_ACK, "");
+ break;
+ case DHCP_NAK:
+ logToQt(STAT_OK, DHCP_NAK, "");
+ break;
+ case DHCP_RELEASE:
+ logToQt(STAT_OK, DHCP_RELEASE, "");
+ break;
+ case DHCP_INFORM:
+ logToQt(STAT_OK, DHCP_INFORM, "");
+ break;
+ default :
+ break;
+ }
+}
+
+/*
void logToQt(char * status, char * substatus, char * msg) {
char * m = malloc(strlen(interfaceName) + strlen(status) + strlen(substatus) + strlen(msg) +4 );
strcpy(m,interfaceName);
@@ -56,7 +88,7 @@ void logToQt(char * status, char * substatus, char * msg) {
free(m);
}
-
+*/
void logToQt(int status, int substatus, char * msg) {
char * st = (char *) malloc(sizeof(int)*4+1);
char * sst = (char *) malloc(sizeof(int)*4+1);
diff --git a/workspace/customdhcpcd/src/logwriter.h b/workspace/customdhcpcd/src/logwriter.h
index 7248fed..5ee7b84 100644
--- a/workspace/customdhcpcd/src/logwriter.h
+++ b/workspace/customdhcpcd/src/logwriter.h
@@ -15,7 +15,8 @@ void setSocketName(char * sn);
void setInterfaceName(char * in);
void initQtLoggerSocket ();
void closeQtLoggerSocket ();
-void logToQt(char * status, char * substatus, char * msg);
+void logSendToQt(int type);
+//void logToQt(char * status, char * substatus, char * msg);
void logToQt(int status, int substatus, char * msg);
void sendToQt ();