X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=main.c;h=1f5872a12491597ee93e1d031e4e7309fac1e6b4;hp=6e912077f442af350c0459f42cd6403a84d244f5;hb=5463e1b62a39ce417b610584e3d34a8bc30ac15e;hpb=2106a9212ce6610b01f7019d5acf92ee1af5c8d8 diff --git a/main.c b/main.c index 6e91207..1f5872a 100644 --- a/main.c +++ b/main.c @@ -53,7 +53,7 @@ int last_debug = 0; int debug_newline = 1; int nooutput = 0; -void debug(const char *function, int line, const char *prefix, char *buffer) +void debug(const char *file, const char *function, int line, const char *prefix, char *buffer) { time_t now; struct tm *now_tm; @@ -73,7 +73,7 @@ void debug(const char *function, int line, const char *prefix, char *buffer) if (debug_newline) printf("\033[32m%06d %s\033[37m%s", debug_count%1000000, prefix?prefix:"", prefix?" ":""); if (function) - printf("(in %s() line %d): %s", function, line, buffer); + printf("(in %s/%s() line %d): %s", file, function, line, buffer); else printf("%s", buffer); } @@ -95,7 +95,7 @@ void debug(const char *function, int line, const char *prefix, char *buffer) } -void _printdebug(const char *function, int line, unsigned int mask, const char *fmt, ...) +void _printdebug(const char *file, const char *function, int line, unsigned int mask, const char *fmt, ...) { char buffer[4096]; va_list args; @@ -109,12 +109,12 @@ void _printdebug(const char *function, int line, unsigned int mask, const char * buffer[sizeof(buffer)-1]=0; va_end(args); - debug(function, line, "DEBUG", buffer); + debug(file, function, line, "DEBUG", buffer); pthread_mutex_unlock(&mutexd); } -void _printerror(const char *function, int line, const char *fmt, ...) +void _printerror(const char *file, const char *function, int line, const char *fmt, ...) { char buffer[4096]; va_list args; @@ -127,7 +127,7 @@ void _printerror(const char *function, int line, const char *fmt, ...) va_end(args); if (options.deb) - debug(function, line, "ERROR", buffer); + debug(file, function, line, "ERROR", buffer); else { /* only if we do not debug */ if (function) fprintf(stderr, "ERROR (in %s() line %d) %s", function, line, buffer); @@ -149,6 +149,11 @@ void sighandler(int sigset) return; fprintf(stderr, "LCR: Signal received: %d\n", sigset); PDEBUG(DEBUG_LOG, "Signal received: %d\n", sigset); + /* reset signals */ + signal(SIGINT,SIG_DFL); + signal(SIGHUP,SIG_DFL); + signal(SIGTERM,SIG_DFL); + signal(SIGPIPE,SIG_DFL); if (!quit) { quit = sigset; /* set scheduler & priority */ @@ -177,9 +182,10 @@ int main(int argc, char *argv[]) struct sched_param schedp; int created_mutexd = 0,/* created_mutext = 0,*/ created_mutexe = 0, created_lock = 0, created_signal = 0, created_debug = 0, - created_misdn = 0; + created_misdn = 0, created_message = 0; char tracetext[256], lock[128]; char options_error[256]; + int polling = 0; #if 0 /* init fdset */ @@ -260,6 +266,7 @@ int main(int argc, char *argv[]) PERROR("%s", options_error); goto free; } + polling = options.polling; /* init mISDN */ if (mISDN_initialize() < 0) @@ -355,6 +362,12 @@ int main(int argc, char *argv[]) /* generate alaw / ulaw tables */ generate_tables(options.law); +#ifdef WITH_SIP + /* init SIP globals */ + sip_init(); + polling = 1; /* must poll, because of SIP events */ +#endif + #ifdef WITH_SS5 /* init ss5 sine tables */ ss5_sine_generate(); @@ -444,6 +457,7 @@ init is done when interface is up /* init message */ init_message(); + created_message = 1; /*** main loop ***/ SPRINT(tracetext, "%s %s started, waiting for calls...", NAME, VERSION_STRING); @@ -472,8 +486,13 @@ init is done when interface is up } #else if (options.polling) { - if (!select_main(1, NULL, NULL, NULL)) + if (!select_main(1, NULL, NULL, NULL)) { +#ifdef WITH_SIP + /* FIXME: check if work was done */ + sip_handle(); +#endif usleep(10000); + } } else select_main(0, NULL, NULL, NULL); #endif @@ -488,9 +507,6 @@ init is done when interface is up end_trace(); ret=0; - /* clean messacleane */ - cleanup_message(); - /* free all */ free: @@ -510,7 +526,6 @@ free: } /* destroy objects */ - while(port_first) { debug_count++; delete port_first; @@ -542,6 +557,10 @@ free: PDEBUG(DEBUG_MSG, "freed %d pending messages\n", i); } + /* clean messages */ + if (created_message) + cleanup_message(); + /* free tones */ if (toneset_first) free_tones(); @@ -592,6 +611,11 @@ exit is done when interface is down gsm_exit(0); #endif +#ifdef WITH_SIP + /* cleanup SIP globals */ + sip_exit(); +#endif + /* close loopback, if used by GSM or remote */ if (mISDNloop.sock > -1) mISDNloop_close();