diff options
Diffstat (limited to 'customdhcpcd/src/logwriter.c')
-rw-r--r-- | customdhcpcd/src/logwriter.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/customdhcpcd/src/logwriter.c b/customdhcpcd/src/logwriter.c new file mode 100644 index 0000000..74c0181 --- /dev/null +++ b/customdhcpcd/src/logwriter.c @@ -0,0 +1,149 @@ +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <ctype.h> +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <syslog.h> +#include <unistd.h> + +#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 = -1; +char socketName[QTSOCKETADDRESSLENGTH]; +char interfaceName[IF_NAMESIZE]; +char mesg[1024]; + +void setSocketName(const char * sn) { + snprintf(socketName, sizeof(socketName), "%s", sn); +} + +void setInterfaceName(const char * in){ + snprintf(interfaceName, sizeof(interfaceName), "%s", in); +} + +int initQtLoggerSocket() { + /** + * new code. seems to be right. + */ + + struct sockaddr_un serv_addr; + fprintf(stdout,"start init \n"); + sockfd = socket(AF_UNIX, SOCK_STREAM, 0); + if (sockfd < 0) { + fprintf(stdout,"ERROR opening socket \n"); + retval = sockfd; + return sockfd; + } + serv_addr.sun_family = AF_UNIX; + strcpy(serv_addr.sun_path, socketName); + + retval = connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)); + if ( retval < 0) + fprintf(stdout,"ERROR connecting \n"); + fprintf(stdout,"init Qt Logger Socket done \n"); + return retval; +} + +void closeQtLoggerSocket (){ + close(sockfd); +} + +/* +void logToQt(char * status, char * substatus, char * msg) { + char * m = malloc(strlen(interfaceName) + strlen(status) + strlen(substatus) + strlen(msg) +4 ); + strcpy(m,interfaceName); + strcat(m,";"); + strcat(m,status); + strcat(m,";"); + strcat(m,substatus); + strcat(m,";"); + strcat(m,msg); + sendToQt(m); + + free(m); +} +*/ + + +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, "[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); + } + //usleep(500); +} + +void logToQt(int status, int substatus, const char * msg) { + if (retval >= 0) { + 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, "send discover"); + break; + case DHCP_OFFER: + logToQt(LOG_INFO, DHCP_OFFER, "send offer"); + break; + case DHCP_REQUEST: + logToQt(LOG_INFO, DHCP_REQUEST, "send request"); + break; + case DHCP_DECLINE: + logToQt(LOG_INFO, DHCP_DECLINE, "send decline"); + break; + case DHCP_ACK: + logToQt(LOG_INFO, DHCP_ACK, "send ack"); + break; + case DHCP_NAK: + logToQt(LOG_INFO, DHCP_NAK, "send nak"); + break; + case DHCP_RELEASE: + logToQt(LOG_INFO, DHCP_RELEASE, "send release"); + break; + case DHCP_INFORM: + logToQt(LOG_INFO, DHCP_INFORM, "send inform"); + break; + default : + break; + } +} + +void logLoggerToQt(int level, const char *fmt, va_list args) { + vsnprintf(mesg, sizeof(mesg), fmt, args); + strcat(mesg, "\n"); + logToQt(level, DHCPCD_LOG, mesg); +} |