#include #include #include #include #include #include #include #include #include #include #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); }