backup
[lcr.git] / main.c
diff --git a/main.c b/main.c
index 19d2c8d..d0c39e1 100644 (file)
--- a/main.c
+++ b/main.c
@@ -46,7 +46,7 @@ int global_debug = 0;
 int quit=0;
 
 pthread_mutex_t mutexd; // debug output mutex
-pthread_mutex_t mutexl; // log output mutex
+//pthread_mutex_t mutext; // trace output mutex
 pthread_mutex_t mutexe; // error output mutex
 
 int memuse = 0;
@@ -66,7 +66,7 @@ int last_debug = 0;
 int debug_newline = 1;
 int nooutput = 0;
 
-static void debug(const char *function, int line, char *prefix, char *buffer)
+void debug(const char *function, int line, char *prefix, char *buffer)
 {
        /* if we have a new debug count, we add a mark */
        if (last_debug != debug_count)
@@ -105,35 +105,6 @@ static void debug(const char *function, int line, char *prefix, char *buffer)
                        debug_newline = 1;
 }
 
-void printlog(const char *fmt, ...)
-{
-       char buffer[4096];
-       va_list args;
-       FILE *fp;
-
-       pthread_mutex_lock(&mutexl);
-
-       va_start(args,fmt);
-       VUNPRINT(buffer,sizeof(buffer)-1,fmt,args);
-       buffer[sizeof(buffer)-1]=0;
-       va_end(args);
-
-       if (options.log[0])
-       {
-               if (options.deb & DEBUG_LOG)
-                       debug(NULL, 0, "LOG ->", buffer);
-
-               if ((fp = fopen(options.log, "a")))
-               {
-                       fduse++;
-                       fprintf(fp, "%04d.%02d.%02d %02d:%02d:%02d %s", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, buffer);
-                       fclose(fp);
-                       fduse--;
-               }
-       }
-
-       pthread_mutex_unlock(&mutexl);
-}
 
 void _printdebug(const char *function, int line, unsigned long mask, const char *fmt, ...)
 {
@@ -198,7 +169,7 @@ void sighandler(int sigset)
                        schedp.sched_priority = 0;
                        sched_setscheduler(0, SCHED_OTHER, &schedp);
                }
-               fprintf(stderr, "PBX: Signal received: %d\n", sigset);
+               fprintf(stderr, "LCR: Signal received: %d\n", sigset);
                PERROR("Signal received: %d\n", sigset);
        }
 }
@@ -207,18 +178,8 @@ void sighandler(int sigset)
 /*
  * the main
  */
-#ifdef VOIP
-#define ARGC (args.GetCount()+1)
-#define ARGV(a) (args[a-1])
-void PBXMain::Main(void)
-{
-       PArgList &args = GetArguments();
-#else
-#define ARGC (argc)
-#define ARGV(a) (argv[a])
 int main(int argc, char *argv[])
 {
-#endif
        int                     ret = -1;
        int                     lockfd = -1; /* file lock */
        struct message          *message;
@@ -230,7 +191,7 @@ int main(int argc, char *argv[])
        char                    prefix_string[64];
        struct sched_param      schedp;
        char                    *debug_prefix = "alloc";
-       int                     created_mutexd = 0, created_mutexl = 0, created_mutexe = 0,
+       int                     created_mutexd = 0,/* created_mutext = 0,*/ created_mutexe = 0,
                                created_lock = 0, created_signal = 0, created_debug = 0;
 #ifdef DEBUG_DURATION
        time_t                  durationupdate;
@@ -239,6 +200,7 @@ int main(int argc, char *argv[])
 #endif
        int                     idletime = 0, idlecheck = 0;
        char                    debug_log[128];
+       char                    tracetext[256];
 
        /* current time */
        GET_NOW();
@@ -247,20 +209,20 @@ int main(int argc, char *argv[])
        printf("\n** %s  Version %s\n\n", NAME, VERSION_STRING);
 
        /* show options */
-       if (ARGC <= 1)
+       if (argc <= 1)
        {
                usage:
                printf("\n");
-               printf("Usage: pbx (query | start | fork | rules | route)\n");
+               printf("Usage: lcr (query | start | fork | rules | route)\n");
                printf("query     = Show available isdn ports.\n");
-               printf("start     = Run pbx normally, abort with CTRL+C.\n");
+               printf("start     = Run lcr normally, abort with CTRL+C.\n");
                printf("fork      = Do daemon fork and run as background process.\n");
                printf("interface = Get help of available interface syntax.\n");
                printf("rules     = Get help of available routing rule syntax.\n");
                printf("rules [action] = Get individual help for given action.\n");
 //             printf("route = Show current routing as it is parsed.\n");
                printf("\n");
-               ret = 0;
+               ret = 999;
                goto free;
        }
 
@@ -281,12 +243,12 @@ int main(int argc, char *argv[])
                goto free;
        }
        created_mutexd = 1;
-       if (pthread_mutex_init(&mutexl, NULL))
-       {
-               fprintf(stderr, "cannot create 'printlog' mutex\n");
-               goto free;
-       }
-       created_mutexl = 1;
+//     if (pthread_mutex_init(&mutext, NULL))
+//     {
+//             fprintf(stderr, "cannot create 'trace' mutex\n");
+//             goto free;
+//     }
+//     created_mutext = 1;
        if (pthread_mutex_init(&mutexe, NULL))
        {
                fprintf(stderr, "cannot create 'PERROR' mutex\n");
@@ -295,7 +257,7 @@ int main(int argc, char *argv[])
        created_mutexe = 1;
 
        /* show interface */
-       if (!(strcasecmp(ARGV(1),"interface")))
+       if (!(strcasecmp(argv[1],"interface")))
        {
                doc_interface();
                ret = 0;
@@ -303,18 +265,18 @@ int main(int argc, char *argv[])
        }
 
        /* show rules */
-       if (!(strcasecmp(ARGV(1),"rules")))
+       if (!(strcasecmp(argv[1],"rules")))
        {
-               if (ARGC <= 2)
+               if (argc <= 2)
                        doc_rules(NULL);
                else
-                       doc_rules(ARGV(2));
+                       doc_rules(argv[2]);
                ret = 0;
                goto free;
        }
 
        /* query available isdn ports */
-       if (!(strcasecmp(ARGV(1),"query")))
+       if (!(strcasecmp(argv[1],"query")))
        {
                mISDN_port_info();
                ret = 0;
@@ -356,7 +318,7 @@ int main(int argc, char *argv[])
 
 #if 0
        /* query available isdn ports */
-       if (!(strcasecmp(ARGV(1),"route")))
+       if (!(strcasecmp(argv[1],"route")))
        {
                ruleset_debug(ruleset_first);
                ret = 0;
@@ -365,7 +327,7 @@ int main(int argc, char *argv[])
 #endif
 
        /* do fork in special cases */
-       if (!(strcasecmp(ARGV(1),"fork")))
+       if (!(strcasecmp(argv[1],"fork")))
        {
                pid_t pid;
 
@@ -394,27 +356,27 @@ int main(int argc, char *argv[])
                }
                if (pid != 0)
                {
-                       printf("PBX: Starting daemon.\n");
+                       printf("LCR: Starting daemon.\n");
                        exit(0);
                }
                nooutput = 1;
        } else
        /* if not start */
-       if (!!strcasecmp(ARGV(1),"start"))
+       if (!!strcasecmp(argv[1],"start"))
        {
                goto usage;
        }
 
        /* create lock and lock! */
-       if ((lockfd = open("/var/run/pbx.lock", O_CREAT, 0)) < 0)
+       if ((lockfd = open("/var/run/lcr.lock", O_CREAT, 0)) < 0)
        {
-               fprintf(stderr, "Cannot create lock file: /var/run/pbx.lock\n");
+               fprintf(stderr, "Cannot create lock file: /var/run/lcr.lock\n");
                goto free;
        }
        if (flock(lockfd, LOCK_EX|LOCK_NB) < 0)
        {
                if (errno == EWOULDBLOCK)
-                       fprintf(stderr, "PBX: Another PBX process is running. Please kill the other one.\n");
+                       fprintf(stderr, "LCR: Another LCR process is running. Please kill the other one.\n");
                else    fprintf(stderr, "Locking process failed: errno=%d\n", errno);
                goto free;
        }
@@ -446,7 +408,6 @@ int main(int argc, char *argv[])
        }
        relink_interfaces();
        interface_first = interface_newlist;
-       free_interfaces(interface_newlist);
        interface_newlist = NULL;
        
        /* locking memory paging */
@@ -498,8 +459,10 @@ int main(int argc, char *argv[])
        created_signal = 1;
 
        /*** main loop ***/
-       printf("%s %s started, waiting for calls...\n", NAME, VERSION_STRING);
-       printlog("%s %s started, waiting for calls...\n", NAME, VERSION_STRING);
+       SPRINT(tracetext, "%s %s started, waiting for calls...", NAME, VERSION_STRING);
+       start_trace(0, NULL, NULL, NULL, 0, 0, 0, tracetext);
+       printf("%s\n", tracetext);
+       end_trace();
        GET_NOW();
 #ifdef DEBUG_DURATION
        start_d = now_d;
@@ -723,7 +686,7 @@ BUDETECT
                        idletime += 4000;
                }
        }
-       printlog("PBX terminated\n");
+       printf("LCR terminated\n");
        ret=0;
 
        /* free all */
@@ -807,9 +770,9 @@ free:
        if (created_mutexe)
                if (pthread_mutex_destroy(&mutexe))
                        fprintf(stderr, "cannot destroy 'PERROR' mutex\n");
-       if (created_mutexl)
-               if (pthread_mutex_destroy(&mutexl))
-                       fprintf(stderr, "cannot destroy 'printlog' mutex\n");
+//     if (created_mutext)
+//             if (pthread_mutex_destroy(&mutext))
+//                     fprintf(stderr, "cannot destroy 'trace' mutex\n");
        if (created_mutexd)
                if (pthread_mutex_destroy(&mutexd))
                        fprintf(stderr, "cannot destroy 'PDEBUG' mutex\n");
@@ -823,6 +786,10 @@ free:
 #define MEMCHECK(a, b) \
        if (b) \
        { \
+               SPRINT(tracetext, a, NAME); \
+               start_trace(0, NULL, NULL, NULL, 0, 0, 0, tracetext); \
+               if (ret) add_trace("blocks", NULL, "%d", b); \
+               end_trace(); \
                printf("\n******************************\n\007"); \
                printf("\nERROR: %d %s\n", b, a); \
                printf("\n******************************\n"); \
@@ -840,13 +807,15 @@ free:
        MEMCHECK("file handler(s) left",fhuse)
 
        /* take me out */
+       if (ret == 999)
+               exit(0);
+       SPRINT(tracetext, "%s exit", NAME);
+       printf("%s\n", tracetext);
+       start_trace(0, NULL, NULL, NULL, 0, 0, 0, tracetext);
        if (ret)
-               printf("PBX: Exit (code %d)\n", ret);
-#ifdef VOIP
-       return;
-#else
+               add_trace("error", NULL, "%d", ret);
+       end_trace();
        return(ret);
-#endif
 }