#include #include #include #include #include #include #include #include #include #include #include "common.h" #include "dhcp.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; char mesg[256] = {0}; void setSocketName(char * sn) { socketName = sn; } void setInterfaceName(const char * in){ interfaceName = 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(char *msg) { int n = write(sockfd, msg, strlen(msg)); // fflush(sockfd); if (n < 0) syslog (LOG_ERR, sprintf("[fbgui] ERROR writing to socket: %s", msg)); // 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); } } void logSendToQt(int type) { switch(type) { case DHCP_DISCOVER: logToQt(LOG_INFO, DHCP_DISCOVER, ""); break; case DHCP_OFFER: logToQt(LOG_INFO, DHCP_OFFER, ""); break; case DHCP_REQUEST: logToQt(LOG_INFO, DHCP_REQUEST, ""); break; case DHCP_DECLINE: logToQt(LOG_INFO, DHCP_DECLINE, ""); break; case DHCP_ACK: logToQt(LOG_INFO, DHCP_ACK, ""); break; case DHCP_NAK: logToQt(LOG_INFO, DHCP_NAK, ""); break; case DHCP_RELEASE: logToQt(LOG_INFO, DHCP_RELEASE, ""); break; case DHCP_INFORM: logToQt(LOG_INFO, DHCP_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, 0, mesg); }