summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Schmelzer2011-09-01 19:27:46 +0200
committerSebastian Schmelzer2011-09-01 19:27:46 +0200
commit8fac1e425eca9487dda5465b74de84a2df8edddd (patch)
treeac150eddef80e6bf18604e3d695f40e14dd2ef9b
parentsome comments to the LogReceiver methods (diff)
downloadfbgui-8fac1e425eca9487dda5465b74de84a2df8edddd.tar.gz
fbgui-8fac1e425eca9487dda5465b74de84a2df8edddd.tar.xz
fbgui-8fac1e425eca9487dda5465b74de84a2df8edddd.zip
fix message loss
-rw-r--r--UnixDomainSocketServer/Makefile5
-rwxr-xr-xUnixDomainSocketServer/serverbin7638 -> 11967 bytes
-rw-r--r--UnixDomainSocketServer/server.c18
-rw-r--r--common/fbgui.h7
-rwxr-xr-xcustomdhcpcd/src/customdhcpcdbin175292 -> 195074 bytes
-rw-r--r--customdhcpcd/src/logwriter.c24
-rw-r--r--customdhcpcd/src/logwriter.h2
7 files changed, 43 insertions, 13 deletions
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
--- a/UnixDomainSocketServer/server
+++ b/UnixDomainSocketServer/server
Binary files 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 <sys/socket.h>
#include <sys/un.h>
+#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
--- a/customdhcpcd/src/customdhcpcd
+++ b/customdhcpcd/src/customdhcpcd
Binary files 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_ */