summaryrefslogtreecommitdiff
path: root/noncore
Unidiff
Diffstat (limited to 'noncore') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/daemon/source/daemon.cc27
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
@@ -4,17 +4,31 @@
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
12char sniffer_device[6];
13int channel=0;
14int timedout=1;
15
16static 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 */
11int main(int argc, char **argv) 25int 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;
@@ -22,12 +36,15 @@ int main(int argc, char **argv)
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]);
@@ -69,26 +86,30 @@ int main(int argc, char **argv)
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 {