1052 lines
33 KiB
Diff
1052 lines
33 KiB
Diff
diff -urN kismet-2005-04-R1.old/Makefile.in kismet-2005-04-R1.dev/Makefile.in
|
|
--- kismet-2005-04-R1.old/Makefile.in 2005-05-04 21:09:18.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/Makefile.in 2005-05-04 21:19:26.000000000 +0200
|
|
@@ -39,7 +39,7 @@
|
|
DEPEND = .depend
|
|
|
|
# Objects
|
|
-PSO = util.o ringbuf.o configfile.o speech.o ifcontrol.o iwcontrol.o packet.o \
|
|
+PSO = util.o ringbuf.o configfile.o ifcontrol.o iwcontrol.o packet.o \
|
|
pcapsource.o wtapfilesource.o \
|
|
dronesource.o packetsourcetracker.o kis_packsources.o \
|
|
wtapdump.o wtaplocaldump.o gpsdump.o airsnortdump.o fifodump.o \
|
|
@@ -55,7 +55,7 @@
|
|
timetracker.o gpsd.o server_globals.o kismet_drone.o
|
|
DRONE = kismet_drone
|
|
|
|
-NCO = util.o configfile.o speech.o manuf.o tcpclient.o \
|
|
+NCO = util.o configfile.o manuf.o tcpclient.o \
|
|
frontend.o cursesfront.o \
|
|
panelfront.o panelfront_display.o panelfront_input.o \
|
|
gpsd.o getopt.o kismet_client.o
|
|
diff -urN kismet-2005-04-R1.old/kismet_client.cc kismet-2005-04-R1.dev/kismet_client.cc
|
|
--- kismet-2005-04-R1.old/kismet_client.cc 2005-04-03 07:33:42.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/kismet_client.cc 2005-05-04 21:23:14.000000000 +0200
|
|
@@ -28,7 +28,6 @@
|
|
#include "cursesfront.h"
|
|
#include "panelfront.h"
|
|
#include "configfile.h"
|
|
-#include "speech.h"
|
|
|
|
#ifndef exec_name
|
|
char *exec_name;
|
|
@@ -47,10 +46,6 @@
|
|
char *configfile;
|
|
char *uiconfigfile;
|
|
char *server = NULL;
|
|
-int sound = -1;
|
|
-int speech = -1;
|
|
-int speech_encoding = 0;
|
|
-string speech_sentence_encrypted, speech_sentence_unencrypted;
|
|
unsigned int metric = 0;
|
|
unsigned int reconnect = 0;
|
|
|
|
@@ -58,20 +53,9 @@
|
|
string configdir, groupfile;
|
|
FILE *group_file = NULL;
|
|
|
|
-// Pipe file descriptor pairs and fd's
|
|
-int soundpair[2];
|
|
-int speechpair[2];
|
|
-pid_t soundpid = -1, speechpid = -1;
|
|
-
|
|
// Catch our interrupt
|
|
void CatchShutdown(int sig) {
|
|
|
|
- // Kill our sound players
|
|
- if (soundpid > 0)
|
|
- kill(soundpid, 9);
|
|
- if (speechpid > 0)
|
|
- kill(speechpid, 9);
|
|
-
|
|
if (group_track) {
|
|
if ((group_file = fopen(groupfile.c_str(), "w")) == NULL) {
|
|
fprintf(stderr, "WARNING: Unable to open '%s' for writing, groups will not be saved.\n",
|
|
@@ -115,215 +99,6 @@
|
|
exit(0);
|
|
}
|
|
|
|
-// Subprocess sound handler
|
|
-void SoundHandler(int *fds, const char *player, map<string, string> soundmap) {
|
|
- int read_sock = fds[0];
|
|
-
|
|
- close(fds[1]);
|
|
-
|
|
- signal(SIGPIPE, PipeHandler);
|
|
-
|
|
- fd_set rset;
|
|
-
|
|
- char data[1024];
|
|
-
|
|
- pid_t sndpid = -1;
|
|
- int harvested = 1;
|
|
-
|
|
- while (1) {
|
|
- FD_ZERO(&rset);
|
|
- FD_SET(read_sock, &rset);
|
|
- char *end;
|
|
-
|
|
- memset(data, 0, 1024);
|
|
-
|
|
- if (harvested == 0) {
|
|
- // We consider a wait error to be a sign that the child pid died
|
|
- // so we flag it as harvested and keep on going
|
|
- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
|
|
- if (harvestpid == -1 || harvestpid == sndpid)
|
|
- harvested = 1;
|
|
- }
|
|
-
|
|
- struct timeval tim;
|
|
- tim.tv_sec = 1;
|
|
- tim.tv_usec = 0;
|
|
-
|
|
- if (select(read_sock + 1, &rset, NULL, NULL, &tim) < 0) {
|
|
- if (errno != EINTR) {
|
|
- exit(1);
|
|
- }
|
|
- }
|
|
-
|
|
- if (FD_ISSET(read_sock, &rset)) {
|
|
- int ret;
|
|
- ret = read(read_sock, data, 1024);
|
|
-
|
|
- // We'll die off if we get a read error, and we'll let kismet on the
|
|
- // other side detact that it died
|
|
- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
|
|
- exit(1);
|
|
-
|
|
- if ((end = strstr(data, "\n")) == NULL)
|
|
- continue;
|
|
-
|
|
- end[0] = '\0';
|
|
- }
|
|
-
|
|
- if (data[0] == '\0')
|
|
- continue;
|
|
-
|
|
- // If we've harvested the process, spawn a new one and watch it
|
|
- // instead. Otherwise, we just let go of the data we read
|
|
- if (harvested == 1) {
|
|
- // Only take the first line
|
|
- char *nl;
|
|
- if ((nl = strchr(data, '\n')) != NULL)
|
|
- *nl = '\0';
|
|
-
|
|
- char snd[1024];
|
|
-
|
|
- if (soundmap.size() == 0)
|
|
- snprintf(snd, 1024, "%s", data);
|
|
- if (soundmap.find(data) != soundmap.end())
|
|
- snprintf(snd, 1024, "%s", soundmap[data].c_str());
|
|
- else
|
|
- continue;
|
|
-
|
|
- char plr[1024];
|
|
- snprintf(plr, 1024, "%s", player);
|
|
-
|
|
- harvested = 0;
|
|
- if ((sndpid = fork()) == 0) {
|
|
- // Suppress errors
|
|
- int nulfd = open("/dev/null", O_RDWR);
|
|
- dup2(nulfd, 1);
|
|
- dup2(nulfd, 2);
|
|
-
|
|
- char * const echoarg[] = { plr, snd, NULL };
|
|
- execve(echoarg[0], echoarg, NULL);
|
|
- }
|
|
- }
|
|
-
|
|
- data[0] = '\0';
|
|
- }
|
|
-}
|
|
-
|
|
-// Subprocess speech handler
|
|
-void SpeechHandler(int *fds, const char *player) {
|
|
- int read_sock = fds[0];
|
|
- close(fds[1]);
|
|
-
|
|
- fd_set rset;
|
|
-
|
|
- char data[1024];
|
|
-
|
|
- pid_t sndpid = -1;
|
|
- int harvested = 1;
|
|
-
|
|
- while (1) {
|
|
- FD_ZERO(&rset);
|
|
- FD_SET(read_sock, &rset);
|
|
- //char *end;
|
|
-
|
|
- memset(data, 0, 1024);
|
|
-
|
|
- struct timeval tim;
|
|
- tim.tv_sec = 1;
|
|
- tim.tv_usec = 0;
|
|
-
|
|
- if (select(read_sock + 1, &rset, NULL, NULL, &tim) < 0) {
|
|
- if (errno != EINTR) {
|
|
- exit(1);
|
|
- }
|
|
- }
|
|
-
|
|
- if (harvested == 0) {
|
|
- // We consider a wait error to be a sign that the child pid died
|
|
- // so we flag it as harvested and keep on going
|
|
- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
|
|
- if (harvestpid == -1 || harvestpid == sndpid)
|
|
- harvested = 1;
|
|
- }
|
|
-
|
|
- if (FD_ISSET(read_sock, &rset)) {
|
|
- int ret;
|
|
- ret = read(read_sock, data, 1024);
|
|
-
|
|
- // We'll die off if we get a read error, and we'll let kismet on the
|
|
- // other side detact that it died
|
|
- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
|
|
- exit(1);
|
|
-
|
|
- data[ret] = '\0';
|
|
-
|
|
- }
|
|
-
|
|
- if (data[0] == '\0')
|
|
- continue;
|
|
-
|
|
- // If we've harvested the process, spawn a new one and watch it
|
|
- // instead. Otherwise, we just let go of the data we read
|
|
- if (harvested == 1) {
|
|
- harvested = 0;
|
|
- if ((sndpid = fork()) == 0) {
|
|
- // Only take the first line
|
|
- char *nl;
|
|
- if ((nl = strchr(data, '\n')) != NULL)
|
|
- *nl = '\0';
|
|
-
|
|
- // Make sure it's shell-clean
|
|
- MungeToShell(data, strlen(data));
|
|
- char spk_call[1024];
|
|
- snprintf(spk_call, 1024, "echo \"(SayText \\\"%s\\\")\" | %s >/dev/null 2>/dev/null",
|
|
- data, player);
|
|
-
|
|
- system(spk_call);
|
|
-
|
|
- exit(0);
|
|
- }
|
|
- }
|
|
-
|
|
- data[0] = '\0';
|
|
- }
|
|
-}
|
|
-
|
|
-
|
|
-int PlaySound(string in_sound) {
|
|
-
|
|
- char snd[1024];
|
|
-
|
|
- snprintf(snd, 1024, "%s\n", in_sound.c_str());
|
|
-
|
|
- if (write(soundpair[1], snd, strlen(snd)) < 0) {
|
|
- char status[STATUS_MAX];
|
|
- snprintf(status, STATUS_MAX,
|
|
- "ERROR: Could not write to sound pipe. Stopping sound.");
|
|
- gui->WriteStatus(status);
|
|
-
|
|
- return 0;
|
|
- }
|
|
-
|
|
- return 1;
|
|
-}
|
|
-
|
|
-int SayText(string in_text) {
|
|
- char snd[1024];
|
|
-
|
|
- snprintf(snd, 1024, "%s\n", in_text.c_str());
|
|
-
|
|
- if (write(speechpair[1], snd, strlen(snd)) < 0) {
|
|
- char status[STATUS_MAX];
|
|
- snprintf(status, STATUS_MAX,
|
|
- "ERROR: Could not write to speech pipe. Stopping speech.");
|
|
- gui->WriteStatus(status);
|
|
-
|
|
- return 0;
|
|
- }
|
|
-
|
|
- return 1;
|
|
-}
|
|
-
|
|
int main(int argc, char *argv[]) {
|
|
exec_name = argv[0];
|
|
|
|
@@ -332,9 +107,6 @@
|
|
|
|
char *reqgui = NULL;
|
|
|
|
- string sndplay;
|
|
- const char *festival = NULL;
|
|
-
|
|
char *columns = NULL;
|
|
char *clientcolumns = NULL;
|
|
|
|
@@ -389,7 +161,6 @@
|
|
fprintf(stderr, "Using alternate UI config file: %s\n", uiconfigfile);
|
|
break;
|
|
case 'q':
|
|
- sound = 0;
|
|
break;
|
|
case 'g':
|
|
reqgui = strdup(optarg);
|
|
@@ -513,67 +284,6 @@
|
|
server = strdup(gui_conf->FetchOpt("host").c_str());
|
|
}
|
|
|
|
- if (gui_conf->FetchOpt("sound") == "true" && sound == -1) {
|
|
- if (gui_conf->FetchOpt("soundplay") != "") {
|
|
- sndplay = gui_conf->FetchOpt("soundplay");
|
|
- sound = 1;
|
|
-
|
|
- if (gui_conf->FetchOpt("soundopts") != "")
|
|
- sndplay += " " + gui_conf->FetchOpt("soundopts");
|
|
-
|
|
- if (gui_conf->FetchOpt("sound_new") != "")
|
|
- wav_map["new"] = gui_conf->FetchOpt("sound_new");
|
|
- if (gui_conf->FetchOpt("sound_new_wep") != "")
|
|
- wav_map["new_wep"] = gui_conf->FetchOpt("sound_new_wep");
|
|
- if (gui_conf->FetchOpt("sound_traffic") != "")
|
|
- wav_map["traffic"] = gui_conf->FetchOpt("sound_traffic");
|
|
- if (gui_conf->FetchOpt("sound_junktraffic") != "")
|
|
- wav_map["junktraffic"] = gui_conf->FetchOpt("sound_junktraffic");
|
|
- if (gui_conf->FetchOpt("sound_gpslock") != "")
|
|
- wav_map["gpslock"] = gui_conf->FetchOpt("sound_gpslock");
|
|
- if (gui_conf->FetchOpt("sound_gpslost") != "")
|
|
- wav_map["gpslost"] = gui_conf->FetchOpt("sound_gpslost");
|
|
- if (gui_conf->FetchOpt("sound_alert") != "")
|
|
- wav_map["alert"] = gui_conf->FetchOpt("sound_alert");
|
|
-
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: Sound alerts enabled but no sound playing binary specified.\n");
|
|
- sound = 0;
|
|
- }
|
|
- } else if (sound == -1)
|
|
- sound = 0;
|
|
-
|
|
- /* Added by Shaw Innes 17/2/02 */
|
|
- if (gui_conf->FetchOpt("speech") == "true" && speech == -1) {
|
|
- if (gui_conf->FetchOpt("festival") != "") {
|
|
- festival = strdup(gui_conf->FetchOpt("festival").c_str());
|
|
- speech = 1;
|
|
-
|
|
- string speechtype = gui_conf->FetchOpt("speech_type");
|
|
-
|
|
- if (!strcasecmp(speechtype.c_str(), "nato"))
|
|
- speech_encoding = SPEECH_ENCODING_NATO;
|
|
- else if (!strcasecmp(speechtype.c_str(), "spell"))
|
|
- speech_encoding = SPEECH_ENCODING_SPELL;
|
|
- else
|
|
- speech_encoding = SPEECH_ENCODING_NORMAL;
|
|
-
|
|
- // Make sure we have encrypted text lines
|
|
- if (gui_conf->FetchOpt("speech_encrypted") == "" || gui_conf->FetchOpt("speech_unencrypted") == "") {
|
|
- fprintf(stderr, "ERROR: Speech request but speech_encrypted or speech_unencrypted line missing.\n");
|
|
- speech = 0;
|
|
- }
|
|
-
|
|
- speech_sentence_encrypted = gui_conf->FetchOpt("speech_encrypted");
|
|
- speech_sentence_unencrypted = gui_conf->FetchOpt("speech_unencrypted");
|
|
-
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: Speech alerts enabled but no path to festival has been specified.\n");
|
|
- speech = 0;
|
|
- }
|
|
- } else if (speech == -1)
|
|
- speech = 0;
|
|
-
|
|
if (gui_conf->FetchOpt("decay") != "") {
|
|
if (sscanf(gui_conf->FetchOpt("decay").c_str(), "%d", &decay) != 1) {
|
|
fprintf(stderr, "FATAL: Illegal config file value for decay.\n");
|
|
@@ -631,45 +341,6 @@
|
|
}
|
|
}
|
|
|
|
- // Fork and find the sound options
|
|
- if (sound) {
|
|
- if (pipe(soundpair) == -1) {
|
|
- fprintf(stderr, "WARNING: Unable to create pipe for audio. Disabling sound.\n");
|
|
- sound = 0;
|
|
- } else {
|
|
- soundpid = fork();
|
|
-
|
|
- if (soundpid < 0) {
|
|
- fprintf(stderr, "WARNING: Unable to fork for audio. Disabling sound.\n");
|
|
- sound = 0;
|
|
- } else if (soundpid == 0) {
|
|
- SoundHandler(soundpair, sndplay.c_str(), wav_map);
|
|
- exit(0);
|
|
- }
|
|
-
|
|
- close(soundpair[0]);
|
|
- }
|
|
- }
|
|
-
|
|
- if (speech) {
|
|
- if (pipe(speechpair) == -1) {
|
|
- fprintf(stderr, "WARNING: Unable to create pipe for speech. Disabling speech.\n");
|
|
- speech = 0;
|
|
- } else {
|
|
- speechpid = fork();
|
|
-
|
|
- if (speechpid < 0) {
|
|
- fprintf(stderr, "WARNING: Unable to fork for speech. Disabling speech.\n");
|
|
- speech = 0;
|
|
- } else if (speechpid == 0) {
|
|
- SpeechHandler(speechpair, festival);
|
|
- exit(0);
|
|
- }
|
|
-
|
|
- close(speechpair[0]);
|
|
- }
|
|
- }
|
|
-
|
|
if (kismet_serv.Connect(guiport, guihost) < 0) {
|
|
fprintf(stderr, "FATAL: Could not connect to %s:%d.\n", guihost, guiport);
|
|
CatchShutdown(-1);
|
|
@@ -793,8 +464,6 @@
|
|
|
|
int num_networks = 0, num_packets = 0, num_noise = 0, num_dropped = 0;
|
|
|
|
- time_t last_click = time(0);
|
|
-
|
|
fd_set read_set;
|
|
FD_ZERO(&read_set);
|
|
|
|
@@ -876,10 +545,6 @@
|
|
}
|
|
|
|
if (pollret != 0) {
|
|
- if (pollret == CLIENT_ALERT)
|
|
- if (sound == 1)
|
|
- sound = PlaySound("alert");
|
|
-
|
|
if (strlen(tcpcli->FetchStatus()) != 0) {
|
|
gui->WriteStatus(tcpcli->FetchStatus());
|
|
// gui->DrawDisplay();
|
|
@@ -888,12 +553,8 @@
|
|
// The GPS only gets updated for the primary client
|
|
if (tcpcli == primary_client) {
|
|
if (tcpcli->FetchMode() == 0 && gpsmode != 0) {
|
|
- if (sound == 1 && gpsmode != -1)
|
|
- sound = PlaySound("gpslost");
|
|
gpsmode = 0;
|
|
} else if (tcpcli->FetchMode() != 0 && gpsmode == 0) {
|
|
- if (sound == 1 && gpsmode != -1)
|
|
- sound = PlaySound("gpslock");
|
|
gpsmode = 1;
|
|
}
|
|
}
|
|
@@ -901,28 +562,6 @@
|
|
if (tcpcli->FetchDeltaNumNetworks() > 0) {
|
|
wireless_network *newnet = tcpcli->FetchLastNewNetwork();
|
|
|
|
- if (sound == 1 && newnet != lastspoken) {
|
|
- if (newnet->crypt_set &&
|
|
- wav_map.find("new_wep") != wav_map.end())
|
|
- sound = PlaySound("new_wep");
|
|
- else
|
|
- sound = PlaySound("new");
|
|
- }
|
|
-
|
|
- if (speech == 1 && newnet != lastspoken) {
|
|
- string text;
|
|
-
|
|
- if (newnet != NULL) {
|
|
- if (newnet->crypt_set)
|
|
- text = ExpandSpeechString(speech_sentence_encrypted, newnet, speech_encoding);
|
|
- else
|
|
- text = ExpandSpeechString(speech_sentence_unencrypted, newnet, speech_encoding);
|
|
-
|
|
- speech = SayText(text.c_str());
|
|
- }
|
|
- }
|
|
-
|
|
- lastspoken = newnet;
|
|
}
|
|
|
|
num_networks += tcpcli->FetchNumNetworks();
|
|
@@ -930,17 +569,6 @@
|
|
num_noise += tcpcli->FetchNumNoise();
|
|
num_dropped += tcpcli->FetchNumDropped();
|
|
|
|
- if (tcpcli->FetchDeltaNumPackets() != 0) {
|
|
- if (time(0) - last_click >= decay && sound == 1) {
|
|
- if (tcpcli->FetchDeltaNumPackets() > tcpcli->FetchDeltaNumDropped()) {
|
|
- sound = PlaySound("traffic");
|
|
- } else {
|
|
- sound = PlaySound("junktraffic");
|
|
- }
|
|
-
|
|
- last_click = time(0);
|
|
- }
|
|
- }
|
|
}
|
|
}
|
|
} else {
|
|
diff -urN kismet-2005-04-R1.old/kismet_server.cc kismet-2005-04-R1.dev/kismet_server.cc
|
|
--- kismet-2005-04-R1.old/kismet_server.cc 2005-05-04 21:09:18.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/kismet_server.cc 2005-05-04 21:23:01.000000000 +0200
|
|
@@ -56,7 +56,6 @@
|
|
#include "timetracker.h"
|
|
#include "alertracker.h"
|
|
|
|
-#include "speech.h"
|
|
#include "tcpserver.h"
|
|
#include "server_globals.h"
|
|
#include "kismet_server.h"
|
|
@@ -98,7 +97,6 @@
|
|
|
|
FifoDumpFile fifodump;
|
|
TcpServer ui_server;
|
|
-int sound = -1;
|
|
packet_info last_info;
|
|
int decay;
|
|
channel_power channel_graph[CHANNEL_MAX];
|
|
@@ -112,10 +110,8 @@
|
|
macmap<wep_key_info *> bssid_wep_map;
|
|
|
|
// Pipe file descriptor pairs and fd's
|
|
-int soundpair[2];
|
|
-int speechpair[2];
|
|
int chanpair[2];
|
|
-pid_t soundpid = -1, speechpid = -1, chanpid = -1;
|
|
+pid_t chanpid = -1;
|
|
|
|
// Past alerts
|
|
unsigned int max_alerts = 50;
|
|
@@ -177,16 +173,6 @@
|
|
int tcpport = -1;
|
|
int tcpmax;
|
|
|
|
-//const char *sndplay = NULL;
|
|
-string sndplay;
|
|
-
|
|
-const char *festival = NULL;
|
|
-int speech = -1;
|
|
-int speech_encoding = 0;
|
|
-string speech_sentence_encrypted, speech_sentence_unencrypted;
|
|
-
|
|
-map<string, string> wav_map;
|
|
-
|
|
int beacon_log = 1;
|
|
int phy_log = 1;
|
|
int mangle_log = 0;
|
|
@@ -349,12 +335,6 @@
|
|
|
|
#endif
|
|
|
|
- // Kill our sound players
|
|
- if (soundpid > 0)
|
|
- kill(soundpid, 9);
|
|
- if (speechpid > 0)
|
|
- kill(speechpid, 9);
|
|
-
|
|
// Shut down the packet sources
|
|
sourcetracker.CloseSources();
|
|
|
|
@@ -365,227 +345,10 @@
|
|
exit(0);
|
|
}
|
|
|
|
-// Subprocess sound handler
|
|
-void SoundHandler(int *fds, const char *player, map<string, string> soundmap) {
|
|
- int read_sock = fds[0];
|
|
- close(fds[1]);
|
|
-
|
|
- fd_set rset;
|
|
-
|
|
- char data[1024];
|
|
-
|
|
- pid_t sndpid = -1;
|
|
- int harvested = 1;
|
|
-
|
|
- while (1) {
|
|
- FD_ZERO(&rset);
|
|
- FD_SET(read_sock, &rset);
|
|
- char *end;
|
|
-
|
|
- memset(data, 0, 1024);
|
|
-
|
|
- struct timeval tm;
|
|
- tm.tv_sec = 1;
|
|
- tm.tv_usec = 0;
|
|
-
|
|
- if (select(read_sock + 1, &rset, NULL, NULL, &tm) < 0) {
|
|
- if (errno != EINTR) {
|
|
- exit(1);
|
|
- }
|
|
- }
|
|
-
|
|
- if (harvested == 0) {
|
|
- // We consider a wait error to be a sign that the child pid died
|
|
- // so we flag it as harvested and keep on going
|
|
- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
|
|
- if (harvestpid == -1 || harvestpid == sndpid)
|
|
- harvested = 1;
|
|
- }
|
|
-
|
|
- if (FD_ISSET(read_sock, &rset)) {
|
|
- int ret;
|
|
- ret = read(read_sock, data, 1024);
|
|
-
|
|
- // We'll die off if we get a read error, and we'll let kismet on the
|
|
- // other side detact that it died
|
|
- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
|
|
- exit(1);
|
|
-
|
|
- if ((end = strstr(data, "\n")) == NULL)
|
|
- continue;
|
|
-
|
|
- end[0] = '\0';
|
|
- }
|
|
-
|
|
- if (data[0] == '\0')
|
|
- continue;
|
|
-
|
|
-
|
|
- // If we've harvested the process, spawn a new one and watch it
|
|
- // instead. Otherwise, we just let go of the data we read
|
|
- if (harvested == 1) {
|
|
- // Only take the first line
|
|
- char *nl;
|
|
- if ((nl = strchr(data, '\n')) != NULL)
|
|
- *nl = '\0';
|
|
-
|
|
- // Make sure it's shell-clean
|
|
-
|
|
- char snd[1024];
|
|
-
|
|
- if (soundmap.size() == 0)
|
|
- snprintf(snd, 1024, "%s", data);
|
|
- if (soundmap.find(data) != soundmap.end())
|
|
- snprintf(snd, 1024, "%s", soundmap[data].c_str());
|
|
- else
|
|
- continue;
|
|
-
|
|
- char plr[1024];
|
|
- snprintf(plr, 1024, "%s", player);
|
|
-
|
|
- harvested = 0;
|
|
- if ((sndpid = fork()) == 0) {
|
|
- // Suppress errors
|
|
- if (silent) {
|
|
- int nulfd = open("/dev/null", O_RDWR);
|
|
- dup2(nulfd, 1);
|
|
- dup2(nulfd, 2);
|
|
- }
|
|
-
|
|
- char * const echoarg[] = { plr, snd, NULL };
|
|
- execve(echoarg[0], echoarg, NULL);
|
|
- }
|
|
- }
|
|
- data[0] = '\0';
|
|
- }
|
|
-}
|
|
-
|
|
-// Subprocess speech handler
|
|
-void SpeechHandler(int *fds, const char *player) {
|
|
- int read_sock = fds[0];
|
|
- close(fds[1]);
|
|
-
|
|
- fd_set rset;
|
|
-
|
|
- char data[1024];
|
|
-
|
|
- pid_t sndpid = -1;
|
|
- int harvested = 1;
|
|
-
|
|
- while (1) {
|
|
- FD_ZERO(&rset);
|
|
- FD_SET(read_sock, &rset);
|
|
- //char *end;
|
|
-
|
|
- memset(data, 0, 1024);
|
|
-
|
|
- if (harvested == 0) {
|
|
- // We consider a wait error to be a sign that the child pid died
|
|
- // so we flag it as harvested and keep on going
|
|
- pid_t harvestpid = waitpid(sndpid, NULL, WNOHANG);
|
|
- if (harvestpid == -1 || harvestpid == sndpid)
|
|
- harvested = 1;
|
|
- }
|
|
-
|
|
- struct timeval tm;
|
|
- tm.tv_sec = 1;
|
|
- tm.tv_usec = 0;
|
|
-
|
|
- if (select(read_sock + 1, &rset, NULL, NULL, &tm) < 0) {
|
|
- if (errno != EINTR) {
|
|
- exit(1);
|
|
- }
|
|
- }
|
|
-
|
|
- if (FD_ISSET(read_sock, &rset)) {
|
|
- int ret;
|
|
- ret = read(read_sock, data, 1024);
|
|
-
|
|
- // We'll die off if we get a read error, and we'll let kismet on the
|
|
- // other side detact that it died
|
|
- if (ret <= 0 && (errno != EAGAIN && errno != EPIPE))
|
|
- exit(1);
|
|
-
|
|
- data[ret] = '\0';
|
|
- }
|
|
-
|
|
- if (data[0] == '\0')
|
|
- continue;
|
|
-
|
|
- // If we've harvested the process, spawn a new one and watch it
|
|
- // instead. Otherwise, we just let go of the data we read
|
|
- if (harvested == 1) {
|
|
- harvested = 0;
|
|
- if ((sndpid = fork()) == 0) {
|
|
- // Only take the first line
|
|
- char *nl;
|
|
- if ((nl = strchr(data, '\n')) != NULL)
|
|
- *nl = '\0';
|
|
-
|
|
- // Make sure it's shell-clean
|
|
- MungeToShell(data, strlen(data));
|
|
- char spk_call[1024];
|
|
- snprintf(spk_call, 1024, "echo \"(SayText \\\"%s\\\")\" | %s >/dev/null 2>/dev/null",
|
|
- data, player);
|
|
- system(spk_call);
|
|
-
|
|
- exit(0);
|
|
- }
|
|
- }
|
|
-
|
|
- data[0] = '\0';
|
|
- }
|
|
-}
|
|
-
|
|
-
|
|
-// Fork and run a system call to play a sound
|
|
-int PlaySound(string in_sound) {
|
|
-
|
|
- char snd[1024];
|
|
-
|
|
- snprintf(snd, 1024, "%s\n", in_sound.c_str());
|
|
-
|
|
- if (write(soundpair[1], snd, strlen(snd)) < 0) {
|
|
- char status[STATUS_MAX];
|
|
- if (!silent)
|
|
- fprintf(stderr, "ERROR: Write error, closing sound pipe.\n");
|
|
- snprintf(status, STATUS_MAX, "ERROR: Write error on sound pipe, closing sound connection");
|
|
- NetWriteStatus(status);
|
|
-
|
|
- return 0;
|
|
- }
|
|
-
|
|
- return 1;
|
|
-}
|
|
-
|
|
-int SayText(string in_text) {
|
|
-
|
|
- char snd[1024];
|
|
-
|
|
- snprintf(snd, 1024, "%s\n", in_text.c_str());
|
|
- MungeToShell(snd, 1024);
|
|
-
|
|
- if (write(speechpair[1], snd, strlen(snd)) < 0) {
|
|
- char status[STATUS_MAX];
|
|
- if (!silent)
|
|
- fprintf(stderr, "ERROR: Write error, closing speech pipe.\n");
|
|
- snprintf(status, STATUS_MAX, "ERROR: Write error on speech pipe, closing speech connection");
|
|
- NetWriteStatus(status);
|
|
-
|
|
- return 0;
|
|
- }
|
|
-
|
|
- return 1;
|
|
-}
|
|
-
|
|
void KisLocalAlert(const char *in_text) {
|
|
time_t now = time(0);
|
|
if (!silent)
|
|
fprintf(stderr, "ALERT %.24s %s\n", ctime(&now), in_text);
|
|
-
|
|
- if (sound == 1)
|
|
- sound = PlaySound("alert");
|
|
-
|
|
}
|
|
|
|
void KisLocalStatus(const char *in_status) {
|
|
@@ -842,15 +605,11 @@
|
|
if (gpsret == 0 && gpsmode != 0) {
|
|
if (!silent || NetWriteStatus("Lost GPS signal.") == 0)
|
|
fprintf(stderr, "Lost GPS signal.\n");
|
|
- if (sound == 1)
|
|
- sound = PlaySound("gpslost");
|
|
|
|
gpsmode = 0;
|
|
} else if (gpsret != 0 && gpsmode == 0) {
|
|
if (!silent || NetWriteStatus("Acquired GPS signal.") == 0)
|
|
fprintf(stderr, "Acquired GPS signal.\n");
|
|
- if (sound == 1)
|
|
- sound = PlaySound("gpslock");
|
|
|
|
gpsmode = 1;
|
|
}
|
|
@@ -1533,69 +1292,6 @@
|
|
legal_ipblock_vec.push_back(ipb);
|
|
}
|
|
|
|
- // Process sound stuff
|
|
- if (conf->FetchOpt("sound") == "true" && sound == -1) {
|
|
- if (conf->FetchOpt("soundplay") != "") {
|
|
- sndplay = conf->FetchOpt("soundplay");
|
|
-
|
|
- if (conf->FetchOpt("soundopts") != "")
|
|
- sndplay += " " + conf->FetchOpt("soundopts");
|
|
-
|
|
- sound = 1;
|
|
-
|
|
- if (conf->FetchOpt("sound_new") != "")
|
|
- wav_map["new"] = conf->FetchOpt("sound_new");
|
|
- if (conf->FetchOpt("sound_new_wep") != "")
|
|
- wav_map["new_wep"] = conf->FetchOpt("sound_new_wep");
|
|
- if (conf->FetchOpt("sound_traffic") != "")
|
|
- wav_map["traffic"] = conf->FetchOpt("sound_traffic");
|
|
- if (conf->FetchOpt("sound_junktraffic") != "")
|
|
- wav_map["junktraffic"] = conf->FetchOpt("sound_traffic");
|
|
- if (conf->FetchOpt("sound_gpslock") != "")
|
|
- wav_map["gpslock"] = conf->FetchOpt("sound_gpslock");
|
|
- if (conf->FetchOpt("sound_gpslost") != "")
|
|
- wav_map["gpslost"] = conf->FetchOpt("sound_gpslost");
|
|
- if (conf->FetchOpt("sound_alert") != "")
|
|
- wav_map["alert"] = conf->FetchOpt("sound_alert");
|
|
-
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: Sound alerts enabled but no sound playing binary specified.\n");
|
|
- sound = 0;
|
|
- }
|
|
- } else if (sound == -1)
|
|
- sound = 0;
|
|
-
|
|
- /* Added by Shaw Innes 17/2/02 */
|
|
- /* Modified by Andrew Etter 15/9/02 */
|
|
- if (conf->FetchOpt("speech") == "true" && speech == -1) {
|
|
- if (conf->FetchOpt("festival") != "") {
|
|
- festival = strdup(conf->FetchOpt("festival").c_str());
|
|
- speech = 1;
|
|
-
|
|
- string speechtype = conf->FetchOpt("speech_type");
|
|
-
|
|
- if (!strcasecmp(speechtype.c_str(), "nato"))
|
|
- speech_encoding = SPEECH_ENCODING_NATO;
|
|
- else if (!strcasecmp(speechtype.c_str(), "spell"))
|
|
- speech_encoding = SPEECH_ENCODING_SPELL;
|
|
- else
|
|
- speech_encoding = SPEECH_ENCODING_NORMAL;
|
|
-
|
|
- // Make sure we have encrypted text lines
|
|
- if (conf->FetchOpt("speech_encrypted") == "" || conf->FetchOpt("speech_unencrypted") == "") {
|
|
- fprintf(stderr, "ERROR: Speech request but speech_encrypted or speech_unencrypted line missing.\n");
|
|
- speech = 0;
|
|
- }
|
|
-
|
|
- speech_sentence_encrypted = conf->FetchOpt("speech_encrypted");
|
|
- speech_sentence_unencrypted = conf->FetchOpt("speech_unencrypted");
|
|
- } else {
|
|
- fprintf(stderr, "ERROR: Speech alerts enabled but no path to festival has been specified.\n");
|
|
- speech = 0;
|
|
- }
|
|
- } else if (speech == -1)
|
|
- speech = 0;
|
|
-
|
|
if (conf->FetchOpt("writeinterval") != "") {
|
|
if (sscanf(conf->FetchOpt("writeinterval").c_str(), "%d", &datainterval) != 1) {
|
|
fprintf(stderr, "FATAL: Illegal config file value for data interval.\n");
|
|
@@ -1615,45 +1311,6 @@
|
|
fprintf(stderr, "WARNING: No client_manuf file specified. Client manufacturers will not be detected.\n");
|
|
}
|
|
|
|
- // Fork and find the sound options
|
|
- if (sound) {
|
|
- if (pipe(soundpair) == -1) {
|
|
- fprintf(stderr, "WARNING: Unable to create pipe for audio. Disabling sound.\n");
|
|
- sound = 0;
|
|
- } else {
|
|
- soundpid = fork();
|
|
-
|
|
- if (soundpid < 0) {
|
|
- fprintf(stderr, "WARNING: Unable to fork for audio. Disabling sound.\n");
|
|
- sound = 0;
|
|
- } else if (soundpid == 0) {
|
|
- SoundHandler(soundpair, sndplay.c_str(), wav_map);
|
|
- exit(0);
|
|
- }
|
|
-
|
|
- close(soundpair[0]);
|
|
- }
|
|
- }
|
|
-
|
|
- if (speech) {
|
|
- if (pipe(speechpair) == -1) {
|
|
- fprintf(stderr, "WARNING: Unable to create pipe for speech. Disabling speech.\n");
|
|
- speech = 0;
|
|
- } else {
|
|
- speechpid = fork();
|
|
-
|
|
- if (speechpid < 0) {
|
|
- fprintf(stderr, "WARNING: Unable to fork for speech. Disabling speech.\n");
|
|
- speech = 0;
|
|
- } else if (speechpid == 0) {
|
|
- SpeechHandler(speechpair, festival);
|
|
- exit(0);
|
|
- }
|
|
-
|
|
- close(speechpair[0]);
|
|
- }
|
|
- }
|
|
-
|
|
// Grab the filtering
|
|
string filter_bit;
|
|
|
|
@@ -2172,7 +1829,6 @@
|
|
break;
|
|
case 'q':
|
|
// Quiet
|
|
- sound = 0;
|
|
break;
|
|
case 'v':
|
|
// version
|
|
@@ -2781,7 +2437,6 @@
|
|
snprintf(status, 1024, "%s", TIMESTAMP);
|
|
kdata.timestamp = status;
|
|
|
|
- time_t last_click = 0;
|
|
int num_networks = 0, num_packets = 0, num_noise = 0, num_dropped = 0;
|
|
|
|
|
|
@@ -2944,38 +2599,9 @@
|
|
|
|
tracker.ProcessPacket(info);
|
|
|
|
- if (tracker.FetchNumNetworks() > num_networks) {
|
|
- if (sound == 1)
|
|
- if (info.wep && wav_map.find("new_wep") != wav_map.end())
|
|
- sound = PlaySound("new_wep");
|
|
- else
|
|
- sound = PlaySound("new");
|
|
- if (speech == 1) {
|
|
- string text;
|
|
-
|
|
- if (info.wep)
|
|
- text = ExpandSpeechString(speech_sentence_encrypted, &info,
|
|
- speech_encoding);
|
|
- else
|
|
- text = ExpandSpeechString(speech_sentence_unencrypted,
|
|
- &info, speech_encoding);
|
|
-
|
|
- speech = SayText(MungeToShell(text).c_str());
|
|
- }
|
|
- }
|
|
num_networks = tracker.FetchNumNetworks();
|
|
|
|
if (tracker.FetchNumPackets() != num_packets) {
|
|
- if (cur_time - last_click >= decay && sound == 1) {
|
|
- if (tracker.FetchNumPackets() - num_packets >
|
|
- tracker.FetchNumDropped() + localdropnum - num_dropped) {
|
|
- sound = PlaySound("traffic");
|
|
- } else {
|
|
- sound = PlaySound("junktraffic");
|
|
- }
|
|
-
|
|
- last_click = cur_time;
|
|
- }
|
|
|
|
num_packets = tracker.FetchNumPackets();
|
|
num_noise = tracker.FetchNumNoise();
|
|
diff -urN kismet-2005-04-R1.old/kismet_server.h kismet-2005-04-R1.dev/kismet_server.h
|
|
--- kismet-2005-04-R1.old/kismet_server.h 2005-04-03 07:33:42.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/kismet_server.h 2005-05-04 21:17:50.000000000 +0200
|
|
@@ -33,10 +33,6 @@
|
|
void handle_command(TcpServer *tcps, client_command *cc);
|
|
int NetWriteStatus(const char *in_status);
|
|
void NetWriteInfo();
|
|
-int SayText(string in_text);
|
|
-int PlaySound(string in_sound);
|
|
-void SpeechHandler(int *fds, const char *player);
|
|
-void SoundHandler(int *fds, const char *player, map<string, string> soundmap);
|
|
void ProtocolAlertEnable(int in_fd);
|
|
void ProtocolNetworkEnable(int in_fd);
|
|
void ProtocolClientEnable(int in_fd);
|
|
diff -urN kismet-2005-04-R1.old/panelfront.cc kismet-2005-04-R1.dev/panelfront.cc
|
|
--- kismet-2005-04-R1.old/panelfront.cc 2005-04-03 07:33:42.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/panelfront.cc 2005-05-04 21:19:03.000000000 +0200
|
|
@@ -420,8 +420,6 @@
|
|
|
|
//cutoff = 0;
|
|
|
|
- muted = 0;
|
|
-
|
|
// Push blanks into the RRD history vector
|
|
packet_history.reserve(60 * 5);
|
|
for (unsigned int x = 0; x < (60 * 5); x++)
|
|
@@ -678,8 +676,6 @@
|
|
|
|
zoomed = 0;
|
|
|
|
- muted = 0;
|
|
-
|
|
if (colorkilled)
|
|
WriteStatus("Terminal cannot support colors, turning off color options.");
|
|
|
|
diff -urN kismet-2005-04-R1.old/panelfront.h kismet-2005-04-R1.dev/panelfront.h
|
|
--- kismet-2005-04-R1.old/panelfront.h 2005-04-03 07:33:42.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/panelfront.h 2005-05-04 21:18:48.000000000 +0200
|
|
@@ -81,8 +81,6 @@
|
|
extern char *KismetIntroText[];
|
|
|
|
// These are in the kismet_curses.cc main code
|
|
-extern int sound;
|
|
-extern int speech;
|
|
extern unsigned int metric;
|
|
|
|
class PanelFront : public Frontend {
|
|
@@ -383,10 +381,6 @@
|
|
|
|
int hsize, vsize;
|
|
|
|
- int old_sound;
|
|
- int old_speech;
|
|
- int muted;
|
|
-
|
|
vector<int> packet_history;
|
|
|
|
float lat, lon, spd, alt, heading;
|
|
diff -urN kismet-2005-04-R1.old/panelfront_input.cc kismet-2005-04-R1.dev/panelfront_input.cc
|
|
--- kismet-2005-04-R1.old/panelfront_input.cc 2005-04-03 07:33:42.000000000 +0200
|
|
+++ kismet-2005-04-R1.dev/panelfront_input.cc 2005-05-04 21:18:19.000000000 +0200
|
|
@@ -639,21 +639,6 @@
|
|
}
|
|
|
|
void PanelFront::MuteToggle() {
|
|
- if (muted) {
|
|
- speech = old_speech;
|
|
- sound = old_sound;
|
|
- muted = 0;
|
|
- WriteStatus("Restoring sound");
|
|
- } else if (sound != 0 || speech != 0) {
|
|
- old_speech = speech;
|
|
- old_sound = sound;
|
|
- sound = 0;
|
|
- speech = 0;
|
|
- muted = 1;
|
|
- WriteStatus("Muting sound");
|
|
- } else if (sound == 0 && speech == 0) {
|
|
- WriteStatus("Sound not enabled.");
|
|
- }
|
|
}
|
|
|
|
int PanelFront::AlertInput(void *in_window, int in_chr) {
|