fixup
[lcr.git] / main.c
diff --git a/main.c b/main.c
index 1f5872a..5c13f17 100644 (file)
--- a/main.c
+++ b/main.c
@@ -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_message = 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,16 @@ int main(int argc, char *argv[])
                goto free;
        }
 
+#ifdef WITH_CRYPT
        /* init crc */
        crc_init();
+#endif
+
+#ifdef WITH_VOOTP
+       /* init VoOTP */
+       vootp_init(stderr);
+       vootp_loglevel(VOOTP_LOGL_INFO);
+#endif
 
        /* the mutex init */
        if (pthread_mutex_init(&mutexd, NULL)) {
@@ -254,7 +263,7 @@ int main(int argc, char *argv[])
 
        /* query available isdn ports */
        if (!(strcasecmp(argv[1],"query"))) {
-               int rc;
+               int __attribute__((__unused__)) rc;
                fprintf(stderr, "-> Using 'misdn_info'\n");
                rc = system("misdn_info");
                ret = 0;
@@ -266,13 +275,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 +336,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 +376,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
@@ -387,15 +397,12 @@ int main(int argc, char *argv[])
                goto free;
        }
 #endif
-#if 0
-init is done when interface is up
 #ifdef WITH_GSM_BS
        if (gsm_bs_init()) {
                fprintf(stderr, "GSM BS initialization failed.\n");
                goto free;
        }
 #endif
-#endif
 #ifdef WITH_GSM_MS
        if (gsm_ms_init()) {
                fprintf(stderr, "GSM MS initialization failed.\n");
@@ -485,7 +492,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 */
@@ -538,14 +549,16 @@ free:
        debug_count++;
        join_free();
 
+#ifdef WITH_MISDN
+       /* close isdn ports */
+       mISDNport_close_all();
+#endif
+
        /* free interfaces */
        if (interface_first)
                free_interfaces(interface_first);
        interface_first = NULL;
 
-       /* close isdn ports */
-       mISDNport_close_all();
-
        /* flush messages */
        debug_count++;
        i = 0;
@@ -572,8 +585,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);
        }
 
@@ -593,17 +608,16 @@ 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
-exit is done when interface is down
 #ifdef WITH_GSM_BS
        gsm_bs_exit(0);
 #endif
-#endif
 #ifdef WITH_GSM_MS
        gsm_ms_exit(0);
 #endif
@@ -616,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) { \