Diffstat (limited to 'noncore/net/wellenreiter/daemon/source/sendgui.cc') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/wellenreiter/daemon/source/sendgui.cc | 47 |
1 files changed, 7 insertions, 40 deletions
diff --git a/noncore/net/wellenreiter/daemon/source/sendgui.cc b/noncore/net/wellenreiter/daemon/source/sendgui.cc index 48ad5b8..9e57094 100644 --- a/noncore/net/wellenreiter/daemon/source/sendgui.cc +++ b/noncore/net/wellenreiter/daemon/source/sendgui.cc | |||
@@ -7,61 +7,29 @@ | |||
7 | #include "config.hh" | 7 | #include "config.hh" |
8 | #include "sendgui.hh" | 8 | #include "sendgui.hh" |
9 | #include "log.hh" | 9 | #include "log.hh" |
10 | 10 | ||
11 | /* Simple dummy for alarm timer */ | ||
12 | static void alarmdummy(int signo) | ||
13 | { | ||
14 | alarm (0); | ||
15 | } | ||
16 | |||
17 | /* Connect to given IP on given port */ | ||
18 | int connect_server(int *sock, unsigned int ipaddr, int port) | ||
19 | { | ||
20 | struct sockaddr_in saddr; | ||
21 | int retval=0; | ||
22 | |||
23 | *sock = socket (PF_INET, SOCK_STREAM, 0); | ||
24 | saddr.sin_family = PF_INET; | ||
25 | saddr.sin_port = htons (port); | ||
26 | saddr.sin_addr.s_addr = ipaddr; | ||
27 | |||
28 | signal (SIGALRM, alarmdummy); | ||
29 | siginterrupt (SIGALRM, 1); | ||
30 | |||
31 | alarm(5); | ||
32 | retval=connect (*sock, (struct sockaddr *) &saddr, sizeof (saddr)); | ||
33 | alarm(0); | ||
34 | |||
35 | if(retval < 0) | ||
36 | { | ||
37 | close (*sock); | ||
38 | return 0; | ||
39 | } | ||
40 | |||
41 | return 1; | ||
42 | } | ||
43 | |||
44 | /* Send a string to the GUI */ | 11 | /* Send a string to the GUI */ |
45 | int sendgui(const char *string, ...) | 12 | int sendgui(const char *string, ...) |
46 | { | 13 | { |
47 | int sock=0; | 14 | int sock=0; |
48 | char buffer[4096]; | 15 | char buffer[4096]; |
16 | struct sockaddr_in saddr; | ||
49 | va_list ap; | 17 | va_list ap; |
50 | 18 | ||
51 | /* Generate string */ | 19 | /* Generate string */ |
52 | memset(buffer, 0, sizeof(buffer)); | 20 | memset(buffer, 0, sizeof(buffer)); |
53 | va_start(ap, string); | 21 | va_start(ap, string); |
54 | vsnprintf(buffer, sizeof(buffer)-1, string, ap); | 22 | vsnprintf(buffer, sizeof(buffer)-1, string, ap); |
55 | va_end(ap); | 23 | va_end(ap); |
56 | 24 | ||
57 | if(!connect_server(&sock, inet_addr(GUIADDR), GUIPORT)) | 25 | /* Setup socket */ |
58 | { | 26 | sock = socket (AF_INET, SOCK_DGRAM, 0); |
59 | log_err("Connect to GUI at '%s' failed: %s", GUIADDR, strerror(errno)); | 27 | saddr.sin_family = AF_INET; |
60 | return 0; | 28 | saddr.sin_port = htons(GUIPORT); |
61 | } | 29 | saddr.sin_addr.s_addr = inet_addr(GUIADDR); |
62 | 30 | ||
63 | if(write(sock, buffer, sizeof(buffer)) < 0) | 31 | if(sendto(sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) |
64 | { | 32 | { |
65 | log_err("Cannot write to socket: %s", strerror(errno)); | 33 | log_err("Cannot write to socket: %s", strerror(errno)); |
66 | close(sock); | 34 | close(sock); |
67 | return 0; | 35 | return 0; |
@@ -71,5 +39,4 @@ int sendgui(const char *string, ...) | |||
71 | log_err("Cannot close socket: %s", strerror(errno)); | 39 | log_err("Cannot close socket: %s", strerror(errno)); |
72 | 40 | ||
73 | return 1; | 41 | return 1; |
74 | } | 42 | } |
75 | |||