Diffstat (limited to 'noncore/net/wellenreiter/daemon/source/daemon.cc') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/net/wellenreiter/daemon/source/daemon.cc | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/noncore/net/wellenreiter/daemon/source/daemon.cc b/noncore/net/wellenreiter/daemon/source/daemon.cc index 3a28217..b840f17 100644 --- a/noncore/net/wellenreiter/daemon/source/daemon.cc +++ b/noncore/net/wellenreiter/daemon/source/daemon.cc | |||
@@ -1,86 +1,75 @@ | |||
1 | /* | 1 | /* |
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 | /* should be parsed from cfg-file */ | 10 | /* should be parsed from cfg-file */ |
11 | #define MAXCHANNEL 13 | 11 | #define MAXCHANNEL 13 |
12 | #define CHANINTERVAL 500000 | 12 | #define CHANINTERVAL 500000 |
13 | 13 | ||
14 | |||
14 | /* Main function of wellenreiterd */ | 15 | /* Main function of wellenreiterd */ |
15 | int main(int argc, char **argv) | 16 | int main(int argc, char **argv) |
16 | { | 17 | { |
17 | int sock, maxfd, retval; | 18 | int sock, maxfd, retval; |
18 | char buffer[WL_SOCKBUF]; | 19 | char buffer[WL_SOCKBUF]; |
19 | struct pcap_pkthdr header; | 20 | struct pcap_pkthdr header; |
20 | struct sockaddr_in saddr; | 21 | struct sockaddr_in saddr; |
21 | pcap_t *handletopcap; | 22 | // pcap_t *handletopcap; |
22 | wl_cardtype_t cardtype; | 23 | wl_cardtype_t cardtype; |
23 | pthread_t sub; | 24 | pthread_t sub; |
24 | const unsigned char *packet; | 25 | const unsigned char *packet; |
25 | 26 | ||
26 | fd_set rset; | 27 | fd_set rset; |
27 | 28 | ||
28 | fprintf(stderr, "wellenreiterd %s\n\n", VERSION); | 29 | fprintf(stderr, "wellenreiterd %s\n\n", VERSION); |
29 | fprintf(stderr, "(c) 2002 by M-M-M\n\n"); | 30 | fprintf(stderr, "(c) 2002 by M-M-M\n\n"); |
30 | 31 | ||
31 | if(argc < 3) | 32 | if(argc < 3) |
32 | usage(); | 33 | usage(); |
33 | 34 | ||
34 | /* Set sniffer device */ | 35 | /* Set sniffer device */ |
35 | memset(cardtype.iface, 0, sizeof(cardtype.iface)); | 36 | memset(cardtype.iface, 0, sizeof(cardtype.iface)); |
36 | strncpy(cardtype.iface, (char *)argv[1], sizeof(cardtype.iface) - 1); | 37 | strncpy(cardtype.iface, (char *)argv[1], sizeof(cardtype.iface) - 1); |
37 | 38 | ||
38 | /* Set card type */ | 39 | /* Set card type */ |
39 | cardtype.type = atoi(argv[2]); | 40 | cardtype.type = atoi(argv[2]); |
40 | if(cardtype.type < 1 || cardtype.type > 4) | 41 | if(cardtype.type < 1 || cardtype.type > 4) |
41 | usage(); | 42 | usage(); |
42 | 43 | ||
43 | /* set card into monitor mode */ | 44 | /* Until we do not act as a read daemon, it starts the sniffer |
44 | if(!card_into_monitormode(&handletopcap, cardtype.iface, | 45 | right after startup */ |
45 | cardtype.type)) | 46 | if (!start_sniffer(cardtype.iface,cardtype.type)) |
46 | { | 47 | { |
47 | wl_logerr("Cannot initialize the wireless-card, aborting"); | 48 | wl_logerr("daemon, start_sniff did not return proper, aborting"); |
48 | exit(EXIT_FAILURE); | 49 | exit(EXIT_FAILURE); |
49 | } | 50 | } |
50 | wl_loginfo("Set card into monitor mode"); | 51 | wl_loginfo ("daemon, wireless card prepared for sniffing"); |
51 | |||
52 | /* setup pcap */ | ||
53 | if((handletopcap = pcap_open_live(cardtype.iface, | ||
54 | BUFSIZ, 1, 0, NULL)) == NULL) | ||
55 | { | ||
56 | wl_logerr("pcap_open_live() failed: %s", strerror(errno)); | ||
57 | exit(EXIT_FAILURE); | ||
58 | } | ||
59 | |||
60 | #ifdef HAVE_PCAP_NONBLOCK | ||
61 | pcap_setnonblock(handletopcap, 1, NULL); | ||
62 | #endif | ||
63 | 52 | ||
64 | /* Setup socket for incoming commands */ | 53 | /* Setup socket for incoming commands */ |
65 | if((sock=wl_setupsock(DAEMONADDR, DAEMONPORT, saddr)) < 0) | 54 | if((sock=wl_setupsock(DAEMONADDR, DAEMONPORT, saddr)) < 0) |
66 | { | 55 | { |
67 | wl_logerr("Cannot setup socket"); | 56 | wl_logerr("Cannot setup socket"); |
68 | exit(EXIT_FAILURE); | 57 | exit(EXIT_FAILURE); |
69 | } | 58 | } |
70 | wl_loginfo("Set up socket '%d' for GUI communication", sock); | 59 | wl_loginfo("Set up socket '%d' for GUI communication", sock); |
71 | 60 | ||
72 | /* Create channelswitching thread */ | 61 | /* Create channelswitching thread */ |
73 | if(pthread_create(&sub, NULL, channel_switcher, | 62 | if(pthread_create(&sub, NULL, channel_switcher, |
74 | (void *)&cardtype) != 0) | 63 | (void *)&cardtype) != 0) |
75 | { | 64 | { |
76 | wl_logerr("Cannot create thread: %s", strerror(errno)); | 65 | wl_logerr("Cannot create thread: %s", strerror(errno)); |
77 | close(sock); | 66 | close(sock); |
78 | exit(EXIT_FAILURE); | 67 | exit(EXIT_FAILURE); |
79 | } | 68 | } |
80 | if(pthread_detach(sub)) | 69 | if(pthread_detach(sub)) |
81 | { | 70 | { |
82 | wl_logerr("Error detaching thread"); | 71 | wl_logerr("Error detaching thread"); |
83 | close(sock); | 72 | close(sock); |
84 | pthread_exit((pthread_t *)sub); | 73 | pthread_exit((pthread_t *)sub); |
85 | exit(EXIT_FAILURE); | 74 | exit(EXIT_FAILURE); |
86 | } | 75 | } |