From 87dc3eae8eeb774aecf005465ddd9eecdd829b8a Mon Sep 17 00:00:00 2001 From: Niklas Date: Thu, 28 Jul 2011 16:00:49 +0200 Subject: better version of the logwriter.c and started to devide gui and logic --- workspace/customdhcpcd/src/logwriter.c | 77 ++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 36 deletions(-) (limited to 'workspace/customdhcpcd/src/logwriter.c') diff --git a/workspace/customdhcpcd/src/logwriter.c b/workspace/customdhcpcd/src/logwriter.c index 8b6d6dc..be8ee26 100644 --- a/workspace/customdhcpcd/src/logwriter.c +++ b/workspace/customdhcpcd/src/logwriter.c @@ -11,23 +11,24 @@ #include "common.h" #include "dhcp.h" +#include "dhcpcd.h" #include "logger.h" #include "logwriter.h" #include "status.h" /*sockets for the logger and the qt-reader */ int sockfd, ns; -int retval; -char *socketName; -char *interfaceName; +int retval = -1; +char socketName[QTSOCKETADDRESSLENGTH]; +char interfaceName[IF_NAMESIZE]; char mesg[256] = {0}; -void setSocketName(char * sn) { - socketName = sn; +void setSocketName(const char * sn) { + snprintf(socketName, sizeof(socketName), "%s", sn); } void setInterfaceName(const char * in){ - interfaceName = in; + snprintf(interfaceName, sizeof(interfaceName), "%s", in); } int initQtLoggerSocket() { @@ -74,62 +75,66 @@ void logToQt(char * status, char * substatus, char * msg) { */ -void sendToQt(char *msg) { - int n = write(sockfd, msg, strlen(msg)); +void sendToQt(log_msg * msg) { + int n = -1; + const char *tpl = "%s;%d;%d;%s\n"; + char *outbuf; + size_t outbuf_size = + sizeof(char)*4 + // ";" *3 + newline + sizeof(int)*2 + // status, substatus + sizeof(msg->device) + // devicename + sizeof(msg->msg); // msg + outbuf = malloc(outbuf_size); + memset(outbuf,0,outbuf_size); + snprintf(outbuf, sizeof(char)*3 + sizeof(int)*2 + sizeof(msg->device) + sizeof(msg->msg), tpl, msg->device, msg->status, msg->substatus, msg->msg); + if (outbuf != NULL){ + n = write(sockfd, outbuf, outbuf_size); + } + free(outbuf); + syslog (LOG_INFO, "[fbgui] INFO writing to socket: [%d:%d] %s (%s)", msg->status, msg->substatus, msg->msg, msg->device); // fflush(sockfd); - if (n < 0) - syslog (LOG_ERR, sprintf("[fbgui] ERROR writing to socket: %s", msg)); + if (n < 0) { + syslog (LOG_ERR, "[fbgui] ERROR writing to socket: [%d:%d] %s (%s)", msg->status, msg->substatus, msg->msg, msg->device); // fprintf(stdout, "ERROR writing to socket: %s", msg); + } } void logToQt(int status, int substatus, const char * msg) { if (retval >= 0) { - char * st = (char *) malloc(sizeof(int) * 4 + 1); - char * sst = (char *) malloc(sizeof(int) * 4 + 1); - sprintf(st, "%d", status); - sprintf(sst, "%d", substatus); - char * m = (char *) malloc(strlen(interfaceName) + strlen(st) + strlen( - sst) + strlen(msg) + 4); - strcpy(m, interfaceName); - strcat(m, ";"); - strcat(m, st); - strcat(m, ";"); - strcat(m, sst); - strcat(m, ";"); - strcat(m, msg); - sendToQt(m); - - free(st); - free(sst); - free(m); + log_msg lm; + lm.status = status; + lm.substatus = substatus; + snprintf(lm.msg, sizeof(lm.msg), "%s", msg); + snprintf(lm.device, sizeof(lm.device), "%s", interfaceName); + sendToQt(&lm); } } void logSendToQt(int type) { switch(type) { case DHCP_DISCOVER: - logToQt(LOG_INFO, DHCP_DISCOVER, ""); + logToQt(LOG_INFO, DHCP_DISCOVER, "send discover"); break; case DHCP_OFFER: - logToQt(LOG_INFO, DHCP_OFFER, ""); + logToQt(LOG_INFO, DHCP_OFFER, "send offer"); break; case DHCP_REQUEST: - logToQt(LOG_INFO, DHCP_REQUEST, ""); + logToQt(LOG_INFO, DHCP_REQUEST, "send request"); break; case DHCP_DECLINE: - logToQt(LOG_INFO, DHCP_DECLINE, ""); + logToQt(LOG_INFO, DHCP_DECLINE, "send decline"); break; case DHCP_ACK: - logToQt(LOG_INFO, DHCP_ACK, ""); + logToQt(LOG_INFO, DHCP_ACK, "send ack"); break; case DHCP_NAK: - logToQt(LOG_INFO, DHCP_NAK, ""); + logToQt(LOG_INFO, DHCP_NAK, "send nak"); break; case DHCP_RELEASE: - logToQt(LOG_INFO, DHCP_RELEASE, ""); + logToQt(LOG_INFO, DHCP_RELEASE, "send release"); break; case DHCP_INFORM: - logToQt(LOG_INFO, DHCP_INFORM, ""); + logToQt(LOG_INFO, DHCP_INFORM, "send inform"); break; default : break; -- cgit v1.2.3-55-g7522