From 8fac1e425eca9487dda5465b74de84a2df8edddd Mon Sep 17 00:00:00 2001 From: Sebastian Schmelzer Date: Thu, 1 Sep 2011 19:27:46 +0200 Subject: fix message loss --- UnixDomainSocketServer/Makefile | 5 +++++ UnixDomainSocketServer/server | Bin 7638 -> 11967 bytes UnixDomainSocketServer/server.c | 18 ++++++++++++------ common/fbgui.h | 7 +++++++ customdhcpcd/src/customdhcpcd | Bin 175292 -> 195074 bytes customdhcpcd/src/logwriter.c | 24 ++++++++++++++++++------ customdhcpcd/src/logwriter.h | 2 +- 7 files changed, 43 insertions(+), 13 deletions(-) create mode 100644 UnixDomainSocketServer/Makefile create mode 100644 common/fbgui.h diff --git a/UnixDomainSocketServer/Makefile b/UnixDomainSocketServer/Makefile new file mode 100644 index 0000000..373b23f --- /dev/null +++ b/UnixDomainSocketServer/Makefile @@ -0,0 +1,5 @@ +all: + gcc -g -Wall server.c -o server + +clean: + rm -f server diff --git a/UnixDomainSocketServer/server b/UnixDomainSocketServer/server index 05ff3ec..d76bb91 100755 Binary files a/UnixDomainSocketServer/server and b/UnixDomainSocketServer/server differ diff --git a/UnixDomainSocketServer/server.c b/UnixDomainSocketServer/server.c index 1faf499..28de223 100644 --- a/UnixDomainSocketServer/server.c +++ b/UnixDomainSocketServer/server.c @@ -8,6 +8,8 @@ #include #include +#include "../common/fbgui.h" + void error(const char *msg) { perror(msg); exit(1); @@ -16,8 +18,8 @@ void error(const char *msg) { int main(int argc, char *argv[]) { int sockfd, newsockfd; socklen_t clilen; - char buffer[1024]; - const char ack[4] = "ACK"; + char buffer[DHCP_MESSAGE_SIZE]; + const char ack[ACK_SIZE] = "ACK"; struct sockaddr_un serv_addr, cli_addr; int n; @@ -51,16 +53,20 @@ int main(int argc, char *argv[]) { done = 0; do { - bzero(buffer, 2048); - n = read(newsockfd, buffer, 2048); + bzero(buffer, DHCP_MESSAGE_SIZE); + n = read(newsockfd, buffer, DHCP_MESSAGE_SIZE); if (n <= 0) { if (n<0) error("ERROR reading from socket"); done = 1; } + // search for last newline and replace it with a null + char * pch; + pch=strrchr(buffer,'\n'); + buffer[pch-buffer] = '\0'; printf("Here is the message: \"%s\"\n", buffer); if(!done) { - printf("send ACK"); - if (send(newsockfd, ack, sizeof(ack), 0) < 0) { + printf("send ACK\n"); + if (send(newsockfd, ack, ACK_SIZE, 0) < 0) { error("ERROR on send"); done = 1; } diff --git a/common/fbgui.h b/common/fbgui.h new file mode 100644 index 0000000..7a0faf5 --- /dev/null +++ b/common/fbgui.h @@ -0,0 +1,7 @@ +#ifndef FBGUI_H +#define FBGUI_H + +#define DHCP_MESSAGE_SIZE 2048 +#define ACK_SIZE 4 + +#endif // FBGUI_H diff --git a/customdhcpcd/src/customdhcpcd b/customdhcpcd/src/customdhcpcd index 65aedd0..80fec08 100755 Binary files a/customdhcpcd/src/customdhcpcd and b/customdhcpcd/src/customdhcpcd differ diff --git a/customdhcpcd/src/logwriter.c b/customdhcpcd/src/logwriter.c index 378d805..6a04821 100644 --- a/customdhcpcd/src/logwriter.c +++ b/customdhcpcd/src/logwriter.c @@ -18,6 +18,8 @@ #include "logwriter.h" #include "status.h" +#include "../../common/fbgui.h" // for constants + /*sockets for the logger and the qt-reader */ int sockfd, ns; int retval = -1; @@ -80,9 +82,11 @@ void logToQt(char * status, char * substatus, char * msg) { void sendToQt(log_msg * msg) { int n = -1; int t; + int ret; const char *tpl = "%s;%d;%d;%s\n"; - char *outbuf; - char ack[8]; + char outbuf[DHCP_MESSAGE_SIZE]; + char ack[ACK_SIZE]; + /* size_t outbuf_size = sizeof(char) * 4 + // ";" *3 + newline sizeof(int) * 2 + // status, substatus sizeof(msg->device) + // devicename @@ -92,10 +96,18 @@ void sendToQt(log_msg * msg) { snprintf(outbuf, sizeof(char) * 3 + sizeof(int) * 2 + sizeof(msg->device) + sizeof(msg->msg), tpl, msg->device, msg->status, msg->substatus, msg->msg); + */ + memset(outbuf, '\0', DHCP_MESSAGE_SIZE); + ret = snprintf(outbuf, DHCP_MESSAGE_SIZE, tpl, msg->device, msg->status, msg->substatus, + msg->msg); + if (ret < 1) { + syslog(LOG_INFO, "[fbgui] ERROR filling message buffer"); + return; + } if (outbuf != NULL) { - n = send(sockfd, outbuf, outbuf_size, 0); + n = send(sockfd, outbuf, DHCP_MESSAGE_SIZE, 0); } - free(outbuf); + //free(outbuf); syslog(LOG_INFO, "[fbgui] INFO writing to socket: [%d:%d] %s (%s)", msg->status, msg->substatus, msg->msg, msg->device); // fflush(sockfd); @@ -104,8 +116,8 @@ void sendToQt(log_msg * msg) { msg->status, msg->substatus, msg->msg, msg->device); // fprintf(stdout, "ERROR writing to socket: %s", msg); } - memset(ack,0,sizeof(ack)); - if ((t = recv(sockfd, ack, sizeof(ack), 0)) > 0) { + memset(ack,0,ACK_SIZE); + if ((t = recv(sockfd, ack, ACK_SIZE, 0)) > 0) { syslog(LOG_ERR, "[fbgui] recv ack echo> %s", ack); printf("received: %s\n", ack); } else { diff --git a/customdhcpcd/src/logwriter.h b/customdhcpcd/src/logwriter.h index 11693e5..1e4184d 100644 --- a/customdhcpcd/src/logwriter.h +++ b/customdhcpcd/src/logwriter.h @@ -32,6 +32,6 @@ void logToQt(int status, int substatus, const char * msg); void logSendToQt(int type); void logLoggerToQt(int level, const char *fmt, va_list args); //void logToQt(char * status, char * substatus, char * msg); -void logGatewayToFile(const interface_t *iface, const dhcp_t *dhcp); +//void logGatewayToFile(const interface_t iface, const dhcp_t dhcp); #endif /* LOGWRITER_H_ */ -- cgit v1.2.3-55-g7522