X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=main.c;h=35b972f30408f2d1aa1bcebe21569dc311ad5267;hp=07cfb8f235451bb107a129898af39045aa441213;hb=cde9a763b10ce9fb98be413ded983fb1816ea258;hpb=863bc6421940efe897dfd6d610e1f86ed9992cf6 diff --git a/main.c b/main.c index 07cfb8f..35b972f 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); @@ -181,11 +181,12 @@ int main(int argc, char *argv[]) int i; 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_lock = 0, created_signal = 0, created_message = 0; +#ifdef WITH_MISDN + int created_misdn = 0; +#endif char tracetext[256], lock[128]; char options_error[256]; - int polling = 0; #if 0 /* init fdset */ @@ -215,8 +216,10 @@ int main(int argc, char *argv[]) goto free; } +#ifdef WITH_CRYPT /* init crc */ crc_init(); +#endif /* the mutex init */ if (pthread_mutex_init(&mutexd, NULL)) { @@ -266,13 +269,13 @@ int main(int argc, char *argv[]) PERROR("%s", options_error); goto free; } - polling = options.polling; +#ifdef WITH_MISDN /* init mISDN */ if (mISDN_initialize() < 0) goto free; created_misdn = 1; - created_debug = 1; +#endif /* read ruleset(s) */ if (!(ruleset_first = ruleset_parse())) @@ -327,11 +330,13 @@ int main(int argc, char *argv[]) nooutput = 1; /* write pid file */ - pidfile = fopen("/var/run/lcr.pid","w"); + SPRINT(lock, "%s/lcr.pid", options.lock); + pidfile = fopen(lock,"w"); if (pidfile) { fprintf(pidfile, "%d\n", getpid()); fclose(pidfile); - } + } else + fprintf(stderr, "Failed to create PID file: %s\n", lock); } else /* if not start */ if (!!strcasecmp(argv[1],"start")) { @@ -365,7 +370,6 @@ int main(int argc, char *argv[]) #ifdef WITH_SIP /* init SIP globals */ sip_init(); - polling = 1; /* must poll, because of SIP events */ #endif #ifdef WITH_SS5 @@ -457,6 +461,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); @@ -484,7 +489,11 @@ init is done when interface is up usleep(10000); } #else +#ifdef WITH_SIP + if (options.polling || any_sip_interface) { +#else if (options.polling) { +#endif if (!select_main(1, NULL, NULL, NULL)) { #ifdef WITH_SIP /* FIXME: check if work was done */ @@ -506,9 +515,6 @@ init is done when interface is up end_trace(); ret=0; - /* clean messacleane */ - cleanup_message(); - /* free all */ free: @@ -528,7 +534,6 @@ free: } /* destroy objects */ - while(port_first) { debug_count++; delete port_first; @@ -546,8 +551,10 @@ free: free_interfaces(interface_first); interface_first = NULL; +#ifdef WITH_MISDN /* close isdn ports */ mISDNport_close_all(); +#endif /* flush messages */ debug_count++; @@ -560,6 +567,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(); @@ -571,8 +582,10 @@ free: if (created_lock) flock(lockfd, LOCK_UN); if (lockfd >= 0) { - chmod(lock, 0700); - unlink(lock); + if (created_lock) { + chmod(lock, 0700); + unlink(lock); + } close(lockfd); } @@ -592,9 +605,11 @@ free: if (pthread_mutex_destroy(&mutexd)) fprintf(stderr, "cannot destroy 'PDEBUG' mutex\n"); +#ifdef WITH_MISDN /* deinitialize mISDN */ if (created_misdn) mISDN_deinitialize(); +#endif /* free gsm */ #if 0 @@ -615,10 +630,6 @@ exit is done when interface is down sip_exit(); #endif - /* close loopback, if used by GSM or remote */ - if (mISDNloop.sock > -1) - mISDNloop_close(); - /* display memory leak */ #define MEMCHECK(a, b) \ if (b) { \