From 5c815484e63280f9fdbe167149a5f693a29945b9 Mon Sep 17 00:00:00 2001 From: Niklas Date: Wed, 13 Jul 2011 17:03:29 +0200 Subject: multiple clients possible. inserted something into _send_message --- workspace/LogReceiver/LogReceiver | Bin 35241 -> 35272 bytes workspace/LogReceiver/logreceiver.cpp | 83 +++++++++++++++++++++------------ workspace/LogReceiver/logreceiver.h | 2 +- workspace/LogReceiver/logreceiver.ui | 9 +++- workspace/customdhcpcd/src/client.c | 11 ++++- workspace/customdhcpcd/src/dhcpcd.c | 17 ++++++- workspace/customdhcpcd/src/logwriter.c | 36 +++++++++++++- workspace/customdhcpcd/src/logwriter.h | 3 +- 8 files changed, 123 insertions(+), 38 deletions(-) diff --git a/workspace/LogReceiver/LogReceiver b/workspace/LogReceiver/LogReceiver index 0a4b640..4c9ccec 100755 Binary files a/workspace/LogReceiver/LogReceiver and b/workspace/LogReceiver/LogReceiver 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 #include +#include #include #include @@ -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::sender()); + QLocalSocket* socket = static_cast (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 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 @@ 0 0 - 400 - 300 + 572 + 385 LogReceiver + + #LogReceiverClass{ +background:grey; +} + 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 #include - #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 (); -- cgit v1.2.3-55-g7522