-rw-r--r-- | noncore/net/wellenreiter/daemon/source/daemon.cc | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/noncore/net/wellenreiter/daemon/source/daemon.cc b/noncore/net/wellenreiter/daemon/source/daemon.cc index 51c2194..d6e8f6b 100644 --- a/noncore/net/wellenreiter/daemon/source/daemon.cc +++ b/noncore/net/wellenreiter/daemon/source/daemon.cc | |||
@@ -2,34 +2,51 @@ | |||
2 | * Startup functions of wellenreiter | 2 | * Startup functions of wellenreiter |
3 | * | 3 | * |
4 | * $Id$ | 4 | * $Id$ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #include "config.hh" | 7 | #include "config.hh" |
8 | #include "daemon.hh" | 8 | #include "daemon.hh" |
9 | 9 | ||
10 | // temporary solution, will be removed soon | ||
11 | #define MAXCHANNEL 13 | ||
12 | char sniffer_device[6]; | ||
13 | int channel=0; | ||
14 | int timedout=1; | ||
15 | |||
16 | static int chanswitch() | ||
17 | { | ||
18 | if(channel >= MAXCHANNEL) | ||
19 | channel=1 | ||
20 | card_set_channel(sniffer_device, channel, card_type); | ||
21 | timedout=0; | ||
22 | } | ||
23 | |||
10 | /* Main function of wellenreiterd */ | 24 | /* Main function of wellenreiterd */ |
11 | int main(int argc, char **argv) | 25 | int main(int argc, char **argv) |
12 | { | 26 | { |
13 | int sock, maxfd, retval, card_type; | 27 | int sock, maxfd, retval, card_type; |
14 | char buffer[WL_SOCKBUF], sniffer_device[6]; | 28 | char buffer[WL_SOCKBUF]; |
15 | struct pcap_pkthdr header; | 29 | struct pcap_pkthdr header; |
16 | struct sockaddr_in saddr; | 30 | struct sockaddr_in saddr; |
17 | pcap_t *handletopcap; | 31 | pcap_t *handletopcap; |
18 | const unsigned char *packet; | 32 | const unsigned char *packet; |
19 | 33 | ||
20 | fd_set rset; | 34 | fd_set rset; |
21 | 35 | ||
22 | fprintf(stderr, "wellenreiterd %s\n\n", VERSION); | 36 | fprintf(stderr, "wellenreiterd %s\n\n", VERSION); |
23 | fprintf(stderr, "(c) 2002 by M-M-M\n\n"); | 37 | fprintf(stderr, "(c) 2002 by M-M-M\n\n"); |
24 | 38 | ||
25 | if(argc < 3) | 39 | if(argc < 3) |
26 | usage(); | 40 | usage(); |
27 | 41 | ||
42 | // removed soon, see above | ||
43 | SIGNAL(SIGALRM, chanswitch); | ||
44 | |||
28 | /* Set sniffer device */ | 45 | /* Set sniffer device */ |
29 | memset(sniffer_device, 0, sizeof(sniffer_device)); | 46 | memset(sniffer_device, 0, sizeof(sniffer_device)); |
30 | strncpy(sniffer_device, (char *)argv[1], sizeof(sniffer_device) - 1); | 47 | strncpy(sniffer_device, (char *)argv[1], sizeof(sniffer_device) - 1); |
31 | 48 | ||
32 | /* Set card type */ | 49 | /* Set card type */ |
33 | card_type = atoi(argv[2]); | 50 | card_type = atoi(argv[2]); |
34 | if(card_type < 1 || card_type > 3) | 51 | if(card_type < 1 || card_type > 3) |
35 | usage(); | 52 | usage(); |
@@ -67,30 +84,34 @@ int main(int argc, char **argv) | |||
67 | /* Start main loop */ | 84 | /* Start main loop */ |
68 | wl_loginfo("Starting main loop"); | 85 | wl_loginfo("Starting main loop"); |
69 | while(1) | 86 | while(1) |
70 | { | 87 | { |
71 | 88 | ||
72 | FD_SET(sock, &rset); | 89 | FD_SET(sock, &rset); |
73 | FD_SET(pcap_fileno(handletopcap), &rset); | 90 | FD_SET(pcap_fileno(handletopcap), &rset); |
74 | 91 | ||
92 | // blah | ||
93 | timedout=1; | ||
94 | alarm(1); | ||
95 | |||
75 | /* socket or pcap handle bigger? Will be cleaned up, have to check pcap */ | 96 | /* socket or pcap handle bigger? Will be cleaned up, have to check pcap */ |
76 | maxfd = (sock > pcap_fileno(handletopcap) ? sock : pcap_fileno(handletopcap)) + 1; | 97 | maxfd = (sock > pcap_fileno(handletopcap) ? sock : pcap_fileno(handletopcap)) + 1; |
77 | 98 | ||
78 | if(select(maxfd, &rset, NULL, NULL, NULL) < 0) | 99 | if(select(maxfd, &rset, NULL, NULL, NULL) < 0 && timedout) |
79 | { | 100 | { |
80 | wl_logerr("Error calling select: %s", strerror(errno)); | 101 | wl_logerr("Error calling select: %s", strerror(errno)); |
81 | break; | 102 | break; |
82 | } | 103 | } |
83 | 104 | ||
84 | /* Got data on local socket from GUI */ | 105 | /* Got data on local socket from GUI */ |
85 | if(FD_ISSET(sock, &rset)) | 106 | if(FD_ISSET(sock, &rset)) |
86 | { | 107 | { |
87 | /* Receive data from socket */ | 108 | /* Receive data from socket */ |
88 | if((retval=wl_recv(&sock, saddr, buffer, sizeof(buffer))) < 0) | 109 | if((retval=wl_recv(&sock, saddr, buffer, sizeof(buffer))) < 0 && timedout) |
89 | { | 110 | { |
90 | wl_logerr("Error trying to read: %s", strerror(errno)); | 111 | wl_logerr("Error trying to read: %s", strerror(errno)); |
91 | break; | 112 | break; |
92 | } | 113 | } |
93 | else | 114 | else |
94 | { | 115 | { |
95 | /* check type of packet and start function according to it */ | 116 | /* check type of packet and start function according to it */ |
96 | switch(retval) | 117 | switch(retval) |