ca2737c50368df7378f05d49243e0701de67130b
[openwrt/staging/dedeckeh.git] / openwrt / package / kismet / patches / 120-remove_sound.patch
1 diff -urN kismet-2005-04-R1.old/Makefile.in kismet-2005-04-R1.dev/Makefile.in
2 --- kismet-2005-04-R1.old/Makefile.in 2005-05-04 21:09:18.000000000 +0200
3 +++ kismet-2005-04-R1.dev/Makefile.in 2005-05-04 21:19:26.000000000 +0200
4 @@ -39,7 +39,7 @@
5 DEPEND = .depend
6
7 # Objects
8 -PSO = util.o ringbuf.o configfile.o speech.o ifcontrol.o iwcontrol.o packet.o \
9 +PSO = util.o ringbuf.o configfile.o ifcontrol.o iwcontrol.o packet.o \
10 pcapsource.o wtapfilesource.o \
11 dronesource.o packetsourcetracker.o kis_packsources.o \
12 wtapdump.o wtaplocaldump.o gpsdump.o airsnortdump.o fifodump.o \
13 @@ -55,7 +55,7 @@
14 timetracker.o gpsd.o server_globals.o kismet_drone.o
15 DRONE = kismet_drone
16
17 -NCO = util.o configfile.o speech.o manuf.o tcpclient.o \
18 +NCO = util.o configfile.o manuf.o tcpclient.o \
19 frontend.o cursesfront.o \
20 panelfront.o panelfront_display.o panelfront_input.o \
21 gpsd.o getopt.o kismet_client.o
22 diff -urN kismet-2005-04-R1.old/kismet_client.cc kismet-2005-04-R1.dev/kismet_client.cc
23 --- kismet-2005-04-R1.old/kismet_client.cc 2005-04-03 07:33:42.000000000 +0200
24 +++ kismet-2005-04-R1.dev/kismet_client.cc 2005-05-04 21:23:14.000000000 +0200
25 @@ -28,7 +28,6 @@
26 #include "cursesfront.h"
27 #include "panelfront.h"
28 #include "configfile.h"
29 -#include "speech.h"
30
31 #ifndef exec_name
32 char *exec_name;
33 @@ -47,10 +46,6 @@
34 char *configfile;
35 char *uiconfigfile;
36 char *server = NULL;
37 -int sound = -1;
38 -int speech = -1;
39 -int speech_encoding = 0;
40 -string speech_sentence_encrypted, speech_sentence_unencrypted;
41 unsigned int metric = 0;
42 unsigned int reconnect = 0;
43
44 @@ -58,20 +53,9 @@
45 string configdir, groupfile;
46 FILE *group_file = NULL;
47
48 -// Pipe file descriptor pairs and fd's
49 -int soundpair[2];
50 -int speechpair[2];
51 -pid_t soundpid = -1, speechpid = -1;
52 -
53 // Catch our interrupt
54 void CatchShutdown(int sig) {
55
56 - // Kill our sound players
57 - if (soundpid > 0)
58 - kill(soundpid, 9);
59 - if (speechpid > 0)
60 - kill(speechpid, 9);
61 -
62 if (group_track) {
63 if ((group_file = fopen(groupfile.c_str(), "w")) == NULL) {
64 fprintf(stderr, "WARNING: Unable to open '%s' for writing, groups will not be saved.\n",
65 @@ -115,215 +99,6 @@
66 exit(0);
67 }
68
69 -// Subprocess sound handler
70 -void SoundHandler(int *fds, const char *player, map<string, string> soundmap) {
71 - int read_sock = fds[0];
72 -
73 - close(fds[1]);
74 -
75 - signal(SIGPIPE, PipeHandler);
76 -
77 - fd_set rset;
78 -
79 - char data[1024];
80 -
81 - pid_t sndpid = -1;
82 - int harvested = 1;
83 -
84 - while (1) {
85 - FD_ZERO(&rset);
86 - FD_SET(read_sock, &rset);
87 - char *end;
88 -
89 - memset(data, 0, 1024);
90 -
91 - if (harvested == 0) {
92 - // We consider a wait error to be a sign that the child pid died
93 - // so we flag it as harvested and keep on going
94 - pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
95 - if (harvestpid == -1 || harvestpid == sndpid)
96 - harvested = 1;
97 - }
98 -
99 - struct timeval tim;
100 - tim.tv_sec = 1;
101 - tim.tv_usec = 0;
102 -
103 - if (select(read_sock + 1, &rset, NULL, NULL, &tim) < 0) {
104 - if (errno != EINTR) {
105 - exit(1);
106 - }
107 - }
108 -
109 - if (FD_ISSET(read_sock, &rset)) {
110 - int ret;
111 - ret = read(read_sock, data, 1024);
112 -
113 - // We'll die off if we get a read error, and we'll let kismet on the
114 - // other side detact that it died
115 - if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
116 - exit(1);
117 -
118 - if ((end = strstr(data, "\n")) == NULL)
119 - continue;
120 -
121 - end[0] = '\0';
122 - }
123 -
124 - if (data[0] == '\0')
125 - continue;
126 -
127 - // If we've harvested the process, spawn a new one and watch it
128 - // instead. Otherwise, we just let go of the data we read
129 - if (harvested == 1) {
130 - // Only take the first line
131 - char *nl;
132 - if ((nl = strchr(data, '\n')) != NULL)
133 - *nl = '\0';
134 -
135 - char snd[1024];
136 -
137 - if (soundmap.size() == 0)
138 - snprintf(snd, 1024, "%s", data);
139 - if (soundmap.find(data) != soundmap.end())
140 - snprintf(snd, 1024, "%s", soundmap[data].c_str());
141 - else
142 - continue;
143 -
144 - char plr[1024];
145 - snprintf(plr, 1024, "%s", player);
146 -
147 - harvested = 0;
148 - if ((sndpid = fork()) == 0) {
149 - // Suppress errors
150 - int nulfd = open("/dev/null", O_RDWR);
151 - dup2(nulfd, 1);
152 - dup2(nulfd, 2);
153 -
154 - char * const echoarg[] = { plr, snd, NULL };
155 - execve(echoarg[0], echoarg, NULL);
156 - }
157 - }
158 -
159 - data[0] = '\0';
160 - }
161 -}
162 -
163 -// Subprocess speech handler
164 -void SpeechHandler(int *fds, const char *player) {
165 - int read_sock = fds[0];
166 - close(fds[1]);
167 -
168 - fd_set rset;
169 -
170 - char data[1024];
171 -
172 - pid_t sndpid = -1;
173 - int harvested = 1;
174 -
175 - while (1) {
176 - FD_ZERO(&rset);
177 - FD_SET(read_sock, &rset);
178 - //char *end;
179 -
180 - memset(data, 0, 1024);
181 -
182 - struct timeval tim;
183 - tim.tv_sec = 1;
184 - tim.tv_usec = 0;
185 -
186 - if (select(read_sock + 1, &rset, NULL, NULL, &tim) < 0) {
187 - if (errno != EINTR) {
188 - exit(1);
189 - }
190 - }
191 -
192 - if (harvested == 0) {
193 - // We consider a wait error to be a sign that the child pid died
194 - // so we flag it as harvested and keep on going
195 - pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
196 - if (harvestpid == -1 || harvestpid == sndpid)
197 - harvested = 1;
198 - }
199 -
200 - if (FD_ISSET(read_sock, &rset)) {
201 - int ret;
202 - ret = read(read_sock, data, 1024);
203 -
204 - // We'll die off if we get a read error, and we'll let kismet on the
205 - // other side detact that it died
206 - if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
207 - exit(1);
208 -
209 - data[ret] = '\0';
210 -
211 - }
212 -
213 - if (data[0] == '\0')
214 - continue;
215 -
216 - // If we've harvested the process, spawn a new one and watch it
217 - // instead. Otherwise, we just let go of the data we read
218 - if (harvested == 1) {
219 - harvested = 0;
220 - if ((sndpid = fork()) == 0) {
221 - // Only take the first line
222 - char *nl;
223 - if ((nl = strchr(data, '\n')) != NULL)
224 - *nl = '\0';
225 -
226 - // Make sure it's shell-clean
227 - MungeToShell(data, strlen(data));
228 - char spk_call[1024];
229 - snprintf(spk_call, 1024, "echo \"(SayText \\\"%s\\\")\" | %s >/dev/null 2>/dev/null",
230 - data, player);
231 -
232 - system(spk_call);
233 -
234 - exit(0);
235 - }
236 - }
237 -
238 - data[0] = '\0';
239 - }
240 -}
241 -
242 -
243 -int PlaySound(string in_sound) {
244 -
245 - char snd[1024];
246 -
247 - snprintf(snd, 1024, "%s\n", in_sound.c_str());
248 -
249 - if (write(soundpair[1], snd, strlen(snd)) < 0) {
250 - char status[STATUS_MAX];
251 - snprintf(status, STATUS_MAX,
252 - "ERROR: Could not write to sound pipe. Stopping sound.");
253 - gui->WriteStatus(status);
254 -
255 - return 0;
256 - }
257 -
258 - return 1;
259 -}
260 -
261 -int SayText(string in_text) {
262 - char snd[1024];
263 -
264 - snprintf(snd, 1024, "%s\n", in_text.c_str());
265 -
266 - if (write(speechpair[1], snd, strlen(snd)) < 0) {
267 - char status[STATUS_MAX];
268 - snprintf(status, STATUS_MAX,
269 - "ERROR: Could not write to speech pipe. Stopping speech.");
270 - gui->WriteStatus(status);
271 -
272 - return 0;
273 - }
274 -
275 - return 1;
276 -}
277 -
278 int main(int argc, char *argv[]) {
279 exec_name = argv[0];
280
281 @@ -332,9 +107,6 @@
282
283 char *reqgui = NULL;
284
285 - string sndplay;
286 - const char *festival = NULL;
287 -
288 char *columns = NULL;
289 char *clientcolumns = NULL;
290
291 @@ -389,7 +161,6 @@
292 fprintf(stderr, "Using alternate UI config file: %s\n", uiconfigfile);
293 break;
294 case 'q':
295 - sound = 0;
296 break;
297 case 'g':
298 reqgui = strdup(optarg);
299 @@ -513,67 +284,6 @@
300 server = strdup(gui_conf->FetchOpt("host").c_str());
301 }
302
303 - if (gui_conf->FetchOpt("sound") == "true" && sound == -1) {
304 - if (gui_conf->FetchOpt("soundplay") != "") {
305 - sndplay = gui_conf->FetchOpt("soundplay");
306 - sound = 1;
307 -
308 - if (gui_conf->FetchOpt("soundopts") != "")
309 - sndplay += " " + gui_conf->FetchOpt("soundopts");
310 -
311 - if (gui_conf->FetchOpt("sound_new") != "")
312 - wav_map["new"] = gui_conf->FetchOpt("sound_new");
313 - if (gui_conf->FetchOpt("sound_new_wep") != "")
314 - wav_map["new_wep"] = gui_conf->FetchOpt("sound_new_wep");
315 - if (gui_conf->FetchOpt("sound_traffic") != "")
316 - wav_map["traffic"] = gui_conf->FetchOpt("sound_traffic");
317 - if (gui_conf->FetchOpt("sound_junktraffic") != "")
318 - wav_map["junktraffic"] = gui_conf->FetchOpt("sound_junktraffic");
319 - if (gui_conf->FetchOpt("sound_gpslock") != "")
320 - wav_map["gpslock"] = gui_conf->FetchOpt("sound_gpslock");
321 - if (gui_conf->FetchOpt("sound_gpslost") != "")
322 - wav_map["gpslost"] = gui_conf->FetchOpt("sound_gpslost");
323 - if (gui_conf->FetchOpt("sound_alert") != "")
324 - wav_map["alert"] = gui_conf->FetchOpt("sound_alert");
325 -
326 - } else {
327 - fprintf(stderr, "ERROR: Sound alerts enabled but no sound playing binary specified.\n");
328 - sound = 0;
329 - }
330 - } else if (sound == -1)
331 - sound = 0;
332 -
333 - /* Added by Shaw Innes 17/2/02 */
334 - if (gui_conf->FetchOpt("speech") == "true" && speech == -1) {
335 - if (gui_conf->FetchOpt("festival") != "") {
336 - festival = strdup(gui_conf->FetchOpt("festival").c_str());
337 - speech = 1;
338 -
339 - string speechtype = gui_conf->FetchOpt("speech_type");
340 -
341 - if (!strcasecmp(speechtype.c_str(), "nato"))
342 - speech_encoding = SPEECH_ENCODING_NATO;
343 - else if (!strcasecmp(speechtype.c_str(), "spell"))
344 - speech_encoding = SPEECH_ENCODING_SPELL;
345 - else
346 - speech_encoding = SPEECH_ENCODING_NORMAL;
347 -
348 - // Make sure we have encrypted text lines
349 - if (gui_conf->FetchOpt("speech_encrypted") == "" || gui_conf->FetchOpt("speech_unencrypted") == "") {
350 - fprintf(stderr, "ERROR: Speech request but speech_encrypted or speech_unencrypted line missing.\n");
351 - speech = 0;
352 - }
353 -
354 - speech_sentence_encrypted = gui_conf->FetchOpt("speech_encrypted");
355 - speech_sentence_unencrypted = gui_conf->FetchOpt("speech_unencrypted");
356 -
357 - } else {
358 - fprintf(stderr, "ERROR: Speech alerts enabled but no path to festival has been specified.\n");
359 - speech = 0;
360 - }
361 - } else if (speech == -1)
362 - speech = 0;
363 -
364 if (gui_conf->FetchOpt("decay") != "") {
365 if (sscanf(gui_conf->FetchOpt("decay").c_str(), "%d", &decay) != 1) {
366 fprintf(stderr, "FATAL: Illegal config file value for decay.\n");
367 @@ -631,45 +341,6 @@
368 }
369 }
370
371 - // Fork and find the sound options
372 - if (sound) {
373 - if (pipe(soundpair) == -1) {
374 - fprintf(stderr, "WARNING: Unable to create pipe for audio. Disabling sound.\n");
375 - sound = 0;
376 - } else {
377 - soundpid = fork();
378 -
379 - if (soundpid < 0) {
380 - fprintf(stderr, "WARNING: Unable to fork for audio. Disabling sound.\n");
381 - sound = 0;
382 - } else if (soundpid == 0) {
383 - SoundHandler(soundpair, sndplay.c_str(), wav_map);
384 - exit(0);
385 - }
386 -
387 - close(soundpair[0]);
388 - }
389 - }
390 -
391 - if (speech) {
392 - if (pipe(speechpair) == -1) {
393 - fprintf(stderr, "WARNING: Unable to create pipe for speech. Disabling speech.\n");
394 - speech = 0;
395 - } else {
396 - speechpid = fork();
397 -
398 - if (speechpid < 0) {
399 - fprintf(stderr, "WARNING: Unable to fork for speech. Disabling speech.\n");
400 - speech = 0;
401 - } else if (speechpid == 0) {
402 - SpeechHandler(speechpair, festival);
403 - exit(0);
404 - }
405 -
406 - close(speechpair[0]);
407 - }
408 - }
409 -
410 if (kismet_serv.Connect(guiport, guihost) < 0) {
411 fprintf(stderr, "FATAL: Could not connect to %s:%d.\n", guihost, guiport);
412 CatchShutdown(-1);
413 @@ -793,8 +464,6 @@
414
415 int num_networks = 0, num_packets = 0, num_noise = 0, num_dropped = 0;
416
417 - time_t last_click = time(0);
418 -
419 fd_set read_set;
420 FD_ZERO(&read_set);
421
422 @@ -876,10 +545,6 @@
423 }
424
425 if (pollret != 0) {
426 - if (pollret == CLIENT_ALERT)
427 - if (sound == 1)
428 - sound = PlaySound("alert");
429 -
430 if (strlen(tcpcli->FetchStatus()) != 0) {
431 gui->WriteStatus(tcpcli->FetchStatus());
432 // gui->DrawDisplay();
433 @@ -888,12 +553,8 @@
434 // The GPS only gets updated for the primary client
435 if (tcpcli == primary_client) {
436 if (tcpcli->FetchMode() == 0 && gpsmode != 0) {
437 - if (sound == 1 && gpsmode != -1)
438 - sound = PlaySound("gpslost");
439 gpsmode = 0;
440 } else if (tcpcli->FetchMode() != 0 && gpsmode == 0) {
441 - if (sound == 1 && gpsmode != -1)
442 - sound = PlaySound("gpslock");
443 gpsmode = 1;
444 }
445 }
446 @@ -901,28 +562,6 @@
447 if (tcpcli->FetchDeltaNumNetworks() > 0) {
448 wireless_network *newnet = tcpcli->FetchLastNewNetwork();
449
450 - if (sound == 1 && newnet != lastspoken) {
451 - if (newnet->crypt_set &&
452 - wav_map.find("new_wep") != wav_map.end())
453 - sound = PlaySound("new_wep");
454 - else
455 - sound = PlaySound("new");
456 - }
457 -
458 - if (speech == 1 && newnet != lastspoken) {
459 - string text;
460 -
461 - if (newnet != NULL) {
462 - if (newnet->crypt_set)
463 - text = ExpandSpeechString(speech_sentence_encrypted, newnet, speech_encoding);
464 - else
465 - text = ExpandSpeechString(speech_sentence_unencrypted, newnet, speech_encoding);
466 -
467 - speech = SayText(text.c_str());
468 - }
469 - }
470 -
471 - lastspoken = newnet;
472 }
473
474 num_networks += tcpcli->FetchNumNetworks();
475 @@ -930,17 +569,6 @@
476 num_noise += tcpcli->FetchNumNoise();
477 num_dropped += tcpcli->FetchNumDropped();
478
479 - if (tcpcli->FetchDeltaNumPackets() != 0) {
480 - if (time(0) - last_click >= decay && sound == 1) {
481 - if (tcpcli->FetchDeltaNumPackets() > tcpcli->FetchDeltaNumDropped()) {
482 - sound = PlaySound("traffic");
483 - } else {
484 - sound = PlaySound("junktraffic");
485 - }
486 -
487 - last_click = time(0);
488 - }
489 - }
490 }
491 }
492 } else {
493 diff -urN kismet-2005-04-R1.old/kismet_server.cc kismet-2005-04-R1.dev/kismet_server.cc
494 --- kismet-2005-04-R1.old/kismet_server.cc 2005-05-04 21:09:18.000000000 +0200
495 +++ kismet-2005-04-R1.dev/kismet_server.cc 2005-05-04 21:23:01.000000000 +0200
496 @@ -56,7 +56,6 @@
497 #include "timetracker.h"
498 #include "alertracker.h"
499
500 -#include "speech.h"
501 #include "tcpserver.h"
502 #include "server_globals.h"
503 #include "kismet_server.h"
504 @@ -98,7 +97,6 @@
505
506 FifoDumpFile fifodump;
507 TcpServer ui_server;
508 -int sound = -1;
509 packet_info last_info;
510 int decay;
511 channel_power channel_graph[CHANNEL_MAX];
512 @@ -112,10 +110,8 @@
513 macmap<wep_key_info *> bssid_wep_map;
514
515 // Pipe file descriptor pairs and fd's
516 -int soundpair[2];
517 -int speechpair[2];
518 int chanpair[2];
519 -pid_t soundpid = -1, speechpid = -1, chanpid = -1;
520 +pid_t chanpid = -1;
521
522 // Past alerts
523 unsigned int max_alerts = 50;
524 @@ -177,16 +173,6 @@
525 int tcpport = -1;
526 int tcpmax;
527
528 -//const char *sndplay = NULL;
529 -string sndplay;
530 -
531 -const char *festival = NULL;
532 -int speech = -1;
533 -int speech_encoding = 0;
534 -string speech_sentence_encrypted, speech_sentence_unencrypted;
535 -
536 -map<string, string> wav_map;
537 -
538 int beacon_log = 1;
539 int phy_log = 1;
540 int mangle_log = 0;
541 @@ -349,12 +335,6 @@
542
543 #endif
544
545 - // Kill our sound players
546 - if (soundpid > 0)
547 - kill(soundpid, 9);
548 - if (speechpid > 0)
549 - kill(speechpid, 9);
550 -
551 // Shut down the packet sources
552 sourcetracker.CloseSources();
553
554 @@ -365,227 +345,10 @@
555 exit(0);
556 }
557
558 -// Subprocess sound handler
559 -void SoundHandler(int *fds, const char *player, map<string, string> soundmap) {
560 - int read_sock = fds[0];
561 - close(fds[1]);
562 -
563 - fd_set rset;
564 -
565 - char data[1024];
566 -
567 - pid_t sndpid = -1;
568 - int harvested = 1;
569 -
570 - while (1) {
571 - FD_ZERO(&rset);
572 - FD_SET(read_sock, &rset);
573 - char *end;
574 -
575 - memset(data, 0, 1024);
576 -
577 - struct timeval tm;
578 - tm.tv_sec = 1;
579 - tm.tv_usec = 0;
580 -
581 - if (select(read_sock + 1, &rset, NULL, NULL, &tm) < 0) {
582 - if (errno != EINTR) {
583 - exit(1);
584 - }
585 - }
586 -
587 - if (harvested == 0) {
588 - // We consider a wait error to be a sign that the child pid died
589 - // so we flag it as harvested and keep on going
590 - pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
591 - if (harvestpid == -1 || harvestpid == sndpid)
592 - harvested = 1;
593 - }
594 -
595 - if (FD_ISSET(read_sock, &rset)) {
596 - int ret;
597 - ret = read(read_sock, data, 1024);
598 -
599 - // We'll die off if we get a read error, and we'll let kismet on the
600 - // other side detact that it died
601 - if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
602 - exit(1);
603 -
604 - if ((end = strstr(data, "\n")) == NULL)
605 - continue;
606 -
607 - end[0] = '\0';
608 - }
609 -
610 - if (data[0] == '\0')
611 - continue;
612 -
613 -
614 - // If we've harvested the process, spawn a new one and watch it
615 - // instead. Otherwise, we just let go of the data we read
616 - if (harvested == 1) {
617 - // Only take the first line
618 - char *nl;
619 - if ((nl = strchr(data, '\n')) != NULL)
620 - *nl = '\0';
621 -
622 - // Make sure it's shell-clean
623 -
624 - char snd[1024];
625 -
626 - if (soundmap.size() == 0)
627 - snprintf(snd, 1024, "%s", data);
628 - if (soundmap.find(data) != soundmap.end())
629 - snprintf(snd, 1024, "%s", soundmap[data].c_str());
630 - else
631 - continue;
632 -
633 - char plr[1024];
634 - snprintf(plr, 1024, "%s", player);
635 -
636 - harvested = 0;
637 - if ((sndpid = fork()) == 0) {
638 - // Suppress errors
639 - if (silent) {
640 - int nulfd = open("/dev/null", O_RDWR);
641 - dup2(nulfd, 1);
642 - dup2(nulfd, 2);
643 - }
644 -
645 - char * const echoarg[] = { plr, snd, NULL };
646 - execve(echoarg[0], echoarg, NULL);
647 - }
648 - }
649 - data[0] = '\0';
650 - }
651 -}
652 -
653 -// Subprocess speech handler
654 -void SpeechHandler(int *fds, const char *player) {
655 - int read_sock = fds[0];
656 - close(fds[1]);
657 -
658 - fd_set rset;
659 -
660 - char data[1024];
661 -
662 - pid_t sndpid = -1;
663 - int harvested = 1;
664 -
665 - while (1) {
666 - FD_ZERO(&rset);
667 - FD_SET(read_sock, &rset);
668 - //char *end;
669 -
670 - memset(data, 0, 1024);
671 -
672 - if (harvested == 0) {
673 - // We consider a wait error to be a sign that the child pid died
674 - // so we flag it as harvested and keep on going
675 - pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
676 - if (harvestpid == -1 || harvestpid == sndpid)
677 - harvested = 1;
678 - }
679 -
680 - struct timeval tm;
681 - tm.tv_sec = 1;
682 - tm.tv_usec = 0;
683 -
684 - if (select(read_sock + 1, &rset, NULL, NULL, &tm) < 0) {
685 - if (errno != EINTR) {
686 - exit(1);
687 - }
688 - }
689 -
690 - if (FD_ISSET(read_sock, &rset)) {
691 - int ret;
692 - ret = read(read_sock, data, 1024);
693 -
694 - // We'll die off if we get a read error, and we'll let kismet on the
695 - // other side detact that it died
696 - if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
697 - exit(1);
698 -
699 - data[ret] = '\0';
700 - }
701 -
702 - if (data[0] == '\0')
703 - continue;
704 -
705 - // If we've harvested the process, spawn a new one and watch it
706 - // instead. Otherwise, we just let go of the data we read
707 - if (harvested == 1) {
708 - harvested = 0;
709 - if ((sndpid = fork()) == 0) {
710 - // Only take the first line
711 - char *nl;
712 - if ((nl = strchr(data, '\n')) != NULL)
713 - *nl = '\0';
714 -
715 - // Make sure it's shell-clean
716 - MungeToShell(data, strlen(data));
717 - char spk_call[1024];
718 - snprintf(spk_call, 1024, "echo \"(SayText \\\"%s\\\")\" | %s >/dev/null 2>/dev/null",
719 - data, player);
720 - system(spk_call);
721 -
722 - exit(0);
723 - }
724 - }
725 -
726 - data[0] = '\0';
727 - }
728 -}
729 -
730 -
731 -// Fork and run a system call to play a sound
732 -int PlaySound(string in_sound) {
733 -
734 - char snd[1024];
735 -
736 - snprintf(snd, 1024, "%s\n", in_sound.c_str());
737 -
738 - if (write(soundpair[1], snd, strlen(snd)) < 0) {
739 - char status[STATUS_MAX];
740 - if (!silent)
741 - fprintf(stderr, "ERROR: Write error, closing sound pipe.\n");
742 - snprintf(status, STATUS_MAX, "ERROR: Write error on sound pipe, closing sound connection");
743 - NetWriteStatus(status);
744 -
745 - return 0;
746 - }
747 -
748 - return 1;
749 -}
750 -
751 -int SayText(string in_text) {
752 -
753 - char snd[1024];
754 -
755 - snprintf(snd, 1024, "%s\n", in_text.c_str());
756 - MungeToShell(snd, 1024);
757 -
758 - if (write(speechpair[1], snd, strlen(snd)) < 0) {
759 - char status[STATUS_MAX];
760 - if (!silent)
761 - fprintf(stderr, "ERROR: Write error, closing speech pipe.\n");
762 - snprintf(status, STATUS_MAX, "ERROR: Write error on speech pipe, closing speech connection");
763 - NetWriteStatus(status);
764 -
765 - return 0;
766 - }
767 -
768 - return 1;
769 -}
770 -
771 void KisLocalAlert(const char *in_text) {
772 time_t now = time(0);
773 if (!silent)
774 fprintf(stderr, "ALERT %.24s %s\n", ctime(&now), in_text);
775 -
776 - if (sound == 1)
777 - sound = PlaySound("alert");
778 -
779 }
780
781 void KisLocalStatus(const char *in_status) {
782 @@ -842,15 +605,11 @@
783 if (gpsret == 0 && gpsmode != 0) {
784 if (!silent || NetWriteStatus("Lost GPS signal.") == 0)
785 fprintf(stderr, "Lost GPS signal.\n");
786 - if (sound == 1)
787 - sound = PlaySound("gpslost");
788
789 gpsmode = 0;
790 } else if (gpsret != 0 && gpsmode == 0) {
791 if (!silent || NetWriteStatus("Acquired GPS signal.") == 0)
792 fprintf(stderr, "Acquired GPS signal.\n");
793 - if (sound == 1)
794 - sound = PlaySound("gpslock");
795
796 gpsmode = 1;
797 }
798 @@ -1533,69 +1292,6 @@
799 legal_ipblock_vec.push_back(ipb);
800 }
801
802 - // Process sound stuff
803 - if (conf->FetchOpt("sound") == "true" && sound == -1) {
804 - if (conf->FetchOpt("soundplay") != "") {
805 - sndplay = conf->FetchOpt("soundplay");
806 -
807 - if (conf->FetchOpt("soundopts") != "")
808 - sndplay += " " + conf->FetchOpt("soundopts");
809 -
810 - sound = 1;
811 -
812 - if (conf->FetchOpt("sound_new") != "")
813 - wav_map["new"] = conf->FetchOpt("sound_new");
814 - if (conf->FetchOpt("sound_new_wep") != "")
815 - wav_map["new_wep"] = conf->FetchOpt("sound_new_wep");
816 - if (conf->FetchOpt("sound_traffic") != "")
817 - wav_map["traffic"] = conf->FetchOpt("sound_traffic");
818 - if (conf->FetchOpt("sound_junktraffic") != "")
819 - wav_map["junktraffic"] = conf->FetchOpt("sound_traffic");
820 - if (conf->FetchOpt("sound_gpslock") != "")
821 - wav_map["gpslock"] = conf->FetchOpt("sound_gpslock");
822 - if (conf->FetchOpt("sound_gpslost") != "")
823 - wav_map["gpslost"] = conf->FetchOpt("sound_gpslost");
824 - if (conf->FetchOpt("sound_alert") != "")
825 - wav_map["alert"] = conf->FetchOpt("sound_alert");
826 -
827 - } else {
828 - fprintf(stderr, "ERROR: Sound alerts enabled but no sound playing binary specified.\n");
829 - sound = 0;
830 - }
831 - } else if (sound == -1)
832 - sound = 0;
833 -
834 - /* Added by Shaw Innes 17/2/02 */
835 - /* Modified by Andrew Etter 15/9/02 */
836 - if (conf->FetchOpt("speech") == "true" && speech == -1) {
837 - if (conf->FetchOpt("festival") != "") {
838 - festival = strdup(conf->FetchOpt("festival").c_str());
839 - speech = 1;
840 -
841 - string speechtype = conf->FetchOpt("speech_type");
842 -
843 - if (!strcasecmp(speechtype.c_str(), "nato"))
844 - speech_encoding = SPEECH_ENCODING_NATO;
845 - else if (!strcasecmp(speechtype.c_str(), "spell"))
846 - speech_encoding = SPEECH_ENCODING_SPELL;
847 - else
848 - speech_encoding = SPEECH_ENCODING_NORMAL;
849 -
850 - // Make sure we have encrypted text lines
851 - if (conf->FetchOpt("speech_encrypted") == "" || conf->FetchOpt("speech_unencrypted") == "") {
852 - fprintf(stderr, "ERROR: Speech request but speech_encrypted or speech_unencrypted line missing.\n");
853 - speech = 0;
854 - }
855 -
856 - speech_sentence_encrypted = conf->FetchOpt("speech_encrypted");
857 - speech_sentence_unencrypted = conf->FetchOpt("speech_unencrypted");
858 - } else {
859 - fprintf(stderr, "ERROR: Speech alerts enabled but no path to festival has been specified.\n");
860 - speech = 0;
861 - }
862 - } else if (speech == -1)
863 - speech = 0;
864 -
865 if (conf->FetchOpt("writeinterval") != "") {
866 if (sscanf(conf->FetchOpt("writeinterval").c_str(), "%d", &datainterval) != 1) {
867 fprintf(stderr, "FATAL: Illegal config file value for data interval.\n");
868 @@ -1615,45 +1311,6 @@
869 fprintf(stderr, "WARNING: No client_manuf file specified. Client manufacturers will not be detected.\n");
870 }
871
872 - // Fork and find the sound options
873 - if (sound) {
874 - if (pipe(soundpair) == -1) {
875 - fprintf(stderr, "WARNING: Unable to create pipe for audio. Disabling sound.\n");
876 - sound = 0;
877 - } else {
878 - soundpid = fork();
879 -
880 - if (soundpid < 0) {
881 - fprintf(stderr, "WARNING: Unable to fork for audio. Disabling sound.\n");
882 - sound = 0;
883 - } else if (soundpid == 0) {
884 - SoundHandler(soundpair, sndplay.c_str(), wav_map);
885 - exit(0);
886 - }
887 -
888 - close(soundpair[0]);
889 - }
890 - }
891 -
892 - if (speech) {
893 - if (pipe(speechpair) == -1) {
894 - fprintf(stderr, "WARNING: Unable to create pipe for speech. Disabling speech.\n");
895 - speech = 0;
896 - } else {
897 - speechpid = fork();
898 -
899 - if (speechpid < 0) {
900 - fprintf(stderr, "WARNING: Unable to fork for speech. Disabling speech.\n");
901 - speech = 0;
902 - } else if (speechpid == 0) {
903 - SpeechHandler(speechpair, festival);
904 - exit(0);
905 - }
906 -
907 - close(speechpair[0]);
908 - }
909 - }
910 -
911 // Grab the filtering
912 string filter_bit;
913
914 @@ -2172,7 +1829,6 @@
915 break;
916 case 'q':
917 // Quiet
918 - sound = 0;
919 break;
920 case 'v':
921 // version
922 @@ -2781,7 +2437,6 @@
923 snprintf(status, 1024, "%s", TIMESTAMP);
924 kdata.timestamp = status;
925
926 - time_t last_click = 0;
927 int num_networks = 0, num_packets = 0, num_noise = 0, num_dropped = 0;
928
929
930 @@ -2944,38 +2599,9 @@
931
932 tracker.ProcessPacket(info);
933
934 - if (tracker.FetchNumNetworks() > num_networks) {
935 - if (sound == 1)
936 - if (info.wep && wav_map.find("new_wep") != wav_map.end())
937 - sound = PlaySound("new_wep");
938 - else
939 - sound = PlaySound("new");
940 - if (speech == 1) {
941 - string text;
942 -
943 - if (info.wep)
944 - text = ExpandSpeechString(speech_sentence_encrypted, &info,
945 - speech_encoding);
946 - else
947 - text = ExpandSpeechString(speech_sentence_unencrypted,
948 - &info, speech_encoding);
949 -
950 - speech = SayText(MungeToShell(text).c_str());
951 - }
952 - }
953 num_networks = tracker.FetchNumNetworks();
954
955 if (tracker.FetchNumPackets() != num_packets) {
956 - if (cur_time - last_click >= decay && sound == 1) {
957 - if (tracker.FetchNumPackets() - num_packets >
958 - tracker.FetchNumDropped() + localdropnum - num_dropped) {
959 - sound = PlaySound("traffic");
960 - } else {
961 - sound = PlaySound("junktraffic");
962 - }
963 -
964 - last_click = cur_time;
965 - }
966
967 num_packets = tracker.FetchNumPackets();
968 num_noise = tracker.FetchNumNoise();
969 diff -urN kismet-2005-04-R1.old/kismet_server.h kismet-2005-04-R1.dev/kismet_server.h
970 --- kismet-2005-04-R1.old/kismet_server.h 2005-04-03 07:33:42.000000000 +0200
971 +++ kismet-2005-04-R1.dev/kismet_server.h 2005-05-04 21:17:50.000000000 +0200
972 @@ -33,10 +33,6 @@
973 void handle_command(TcpServer *tcps, client_command *cc);
974 int NetWriteStatus(const char *in_status);
975 void NetWriteInfo();
976 -int SayText(string in_text);
977 -int PlaySound(string in_sound);
978 -void SpeechHandler(int *fds, const char *player);
979 -void SoundHandler(int *fds, const char *player, map<string, string> soundmap);
980 void ProtocolAlertEnable(int in_fd);
981 void ProtocolNetworkEnable(int in_fd);
982 void ProtocolClientEnable(int in_fd);
983 diff -urN kismet-2005-04-R1.old/panelfront.cc kismet-2005-04-R1.dev/panelfront.cc
984 --- kismet-2005-04-R1.old/panelfront.cc 2005-04-03 07:33:42.000000000 +0200
985 +++ kismet-2005-04-R1.dev/panelfront.cc 2005-05-04 21:19:03.000000000 +0200
986 @@ -420,8 +420,6 @@
987
988 //cutoff = 0;
989
990 - muted = 0;
991 -
992 // Push blanks into the RRD history vector
993 packet_history.reserve(60 * 5);
994 for (unsigned int x = 0; x < (60 * 5); x++)
995 @@ -678,8 +676,6 @@
996
997 zoomed = 0;
998
999 - muted = 0;
1000 -
1001 if (colorkilled)
1002 WriteStatus("Terminal cannot support colors, turning off color options.");
1003
1004 diff -urN kismet-2005-04-R1.old/panelfront.h kismet-2005-04-R1.dev/panelfront.h
1005 --- kismet-2005-04-R1.old/panelfront.h 2005-04-03 07:33:42.000000000 +0200
1006 +++ kismet-2005-04-R1.dev/panelfront.h 2005-05-04 21:18:48.000000000 +0200
1007 @@ -81,8 +81,6 @@
1008 extern char *KismetIntroText[];
1009
1010 // These are in the kismet_curses.cc main code
1011 -extern int sound;
1012 -extern int speech;
1013 extern unsigned int metric;
1014
1015 class PanelFront : public Frontend {
1016 @@ -383,10 +381,6 @@
1017
1018 int hsize, vsize;
1019
1020 - int old_sound;
1021 - int old_speech;
1022 - int muted;
1023 -
1024 vector<int> packet_history;
1025
1026 float lat, lon, spd, alt, heading;
1027 diff -urN kismet-2005-04-R1.old/panelfront_input.cc kismet-2005-04-R1.dev/panelfront_input.cc
1028 --- kismet-2005-04-R1.old/panelfront_input.cc 2005-04-03 07:33:42.000000000 +0200
1029 +++ kismet-2005-04-R1.dev/panelfront_input.cc 2005-05-04 21:18:19.000000000 +0200
1030 @@ -639,21 +639,6 @@
1031 }
1032
1033 void PanelFront::MuteToggle() {
1034 - if (muted) {
1035 - speech = old_speech;
1036 - sound = old_sound;
1037 - muted = 0;
1038 - WriteStatus("Restoring sound");
1039 - } else if (sound != 0 || speech != 0) {
1040 - old_speech = speech;
1041 - old_sound = sound;
1042 - sound = 0;
1043 - speech = 0;
1044 - muted = 1;
1045 - WriteStatus("Muting sound");
1046 - } else if (sound == 0 && speech == 0) {
1047 - WriteStatus("Sound not enabled.");
1048 - }
1049 }
1050
1051 int PanelFront::AlertInput(void *in_window, int in_chr) {