Fixed process shutdown, no more segfaults - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
(DIR) commit a919a76a13611af8105aff7c96fad4a714e3c6c7
(DIR) parent 969eb6e2d294f811e077e54e8607bbbd0778ec76
(HTM) Author: HD Moore <hd_moore@rapid7.com>
Date: Mon, 18 May 2009 02:48:48 +0000
Fixed process shutdown, no more segfaults
Diffstat:
M src/iaxrecord/iaxrecord.c | 34 ++++++++++++++-----------------
1 file changed, 15 insertions(+), 19 deletions(-)
---
(DIR) diff --git a/src/iaxrecord/iaxrecord.c b/src/iaxrecord/iaxrecord.c
@@ -28,6 +28,7 @@ int debug = 0;
int audio = 0;
int busy = 0;
int fail = 1;
+int done = 0;
float silence_threshold = 0.0f;
int call_state = 0;
@@ -37,22 +38,9 @@ int call_bytes = 0;
char *iax_out;
int reg_id;
-void cleanup(void) {
- if ( reg_id ) {
- iaxc_unregister(reg_id);
- reg_id = 0;
- }
- if ( initialized ) {
- iaxc_stop_processing_thread();
- iaxc_shutdown();
- initialized = 0;
- }
-}
-
void signal_handler(int signum) {
if ( signum == SIGTERM || signum == SIGINT ) {
- cleanup();
- exit(0);
+ done = 1;
}
}
@@ -185,6 +173,12 @@ int main(int argc, char **argv) {
}
}
+
+/*
+ Version 2.2.x of iaxclient has a new function called iaxc_set_test_mode(1), which disables
+ audio processing for us. This will not be backported to 2.0.x however...
+*/
+
if(! (iax_host && iax_user && iax_num && iax_out)) usage(argv);
snprintf(dest, sizeof(dest), "%s:%s@%s/%s", iax_user, iax_pass, iax_host, iax_num);
@@ -197,9 +191,6 @@ int main(int argc, char **argv) {
}
fprintf(stdout, "STARTED %s BYTES=%d FILE=%s\n", iax_num, call_bytes, iax_out);
-
- /* activate the exit handler */
- atexit(cleanup);
/* install signal handler to catch CRTL-Cs */
signal(SIGINT, signal_handler);
@@ -245,7 +236,8 @@ int main(int argc, char **argv) {
if(debug) fprintf(stderr, ">> WAITING\n");
if(call_id >= 0) {
iaxc_select_call(call_id);
- while( (unsigned int)(time(NULL))-(unsigned int)stime < iax_sec) {
+ while((unsigned int)(time(NULL))-(unsigned int)stime < iax_sec) {
+ if(done) break;
if(call_state & IAXC_CALL_STATE_COMPLETE && ! etime) etime = time(NULL);
if(call_state & IAXC_CALL_STATE_BUSY) break;
if(iaxc_first_free_call() == call_id) break;
@@ -268,7 +260,11 @@ int main(int argc, char **argv) {
(unsigned int)(etime) - (unsigned int)(stime)
);
- iaxc_dump_all_calls();
+
+ iaxc_dump_call();
+ iaxc_millisleep(500);
+ iaxc_stop_processing_thread();
+ iaxc_shutdown();
return(0);
}