Added GSM IMSI dialing by using dialing "imsi-<number>".
[lcr.git] / main.c
diff --git a/main.c b/main.c
index 1cb316f..522b214 100644 (file)
--- a/main.c
+++ b/main.c
@@ -268,8 +268,8 @@ int main(int argc, char *argv[])
        /* query available isdn ports */
        if (!(strcasecmp(argv[1],"query")))
        {
-               fprintf(stderr, "-> Using 'isdninfo'\n");
-               system("isdninfo");
+               fprintf(stderr, "-> Using 'misdn_info'\n");
+               system("misdn_info");
                ret = 0;
                goto free;
        }
@@ -314,6 +314,7 @@ int main(int argc, char *argv[])
        if (!(strcasecmp(argv[1],"fork")))
        {
                pid_t pid;
+               FILE *pidfile;
 
                /* do daemon fork */
                pid = fork();
@@ -344,6 +345,14 @@ int main(int argc, char *argv[])
                        exit(0);
                }
                nooutput = 1;
+
+               /* write pid file */
+               pidfile = fopen("/var/run/lcr.pid","w");
+               if (pidfile)
+               {
+                       fprintf(pidfile, "%d\n", getpid());
+                       fclose(pidfile);
+               }
        } else
        /* if not start */
        if (!!strcasecmp(argv[1],"start"))
@@ -353,7 +362,7 @@ int main(int argc, char *argv[])
 
        /* create lock and lock! */
        SPRINT(lock, "%s/lcr.lock", options.lock);
-       if ((lockfd = open(lock, O_CREAT | O_WRONLY)) < 0)
+       if ((lockfd = open(lock, O_CREAT | O_WRONLY, S_IWUSR)) < 0)
        {
                fprintf(stderr, "Cannot create lock file: %s\n", lock);
                fprintf(stderr, "Check options.conf to change to path with permissions for you.\n");
@@ -385,6 +394,21 @@ int main(int argc, char *argv[])
                goto free;
        }
 
+#ifdef WITH_GSM
+       /* handle gsm */
+       if (options.gsm && gsm_init())
+       {
+               fprintf(stderr, "GSM initialization failed.\n");
+               goto free;
+       }
+#else
+       if (options.gsm)
+       {
+               fprintf(stderr, "GSM is enabled, but not compiled. Use --with-gsm while configure!\n");
+               goto free;
+       }
+#endif
+
        /* read interfaces and open ports */
        if (!read_interfaces())
        {
@@ -410,16 +434,16 @@ int main(int argc, char *argv[])
                switch(errno)
                {
                        case ENOMEM:
-                       fprintf(stderr, "Warning: Not enough memory to lock paging, exitting...\n");
+                       fprintf(stderr, "Warning: Not enough memory to lock paging.\n");
                        break;
                        case EPERM:
-                       fprintf(stderr, "Warning: No permission to lock paging, exitting...\n");
+                       fprintf(stderr, "Warning: No permission to lock paging.\n");
                        break;
                        case EFAULT:
-                       fprintf(stderr, "Warning: 'Bad address' while locking paging, exitting...\n");
+                       fprintf(stderr, "Warning: 'Bad address' while locking paging.\n");
                        break;
                        default:
-                       fprintf(stderr, "Warning: Unknown error %d while locking paging, exitting...\n", errno);
+                       fprintf(stderr, "Warning: Unknown error %d while locking paging.\n", errno);
                }
        }
 
@@ -445,7 +469,7 @@ int main(int argc, char *argv[])
 
        /*** main loop ***/
        SPRINT(tracetext, "%s %s started, waiting for calls...", NAME, VERSION_STRING);
-       start_trace(0, NULL, NULL, NULL, 0, 0, 0, tracetext);
+       start_trace(-1, NULL, NULL, NULL, 0, 0, 0, tracetext);
        printf("%s\n", tracetext);
        end_trace();
        GET_NOW();
@@ -605,6 +629,15 @@ BUDETECT
                        all_idle = 0;
 BUDETECT
 
+#ifdef WITH_GSM
+               /* handle gsm */
+               if (options.gsm)
+                       while(handle_gsm())
+                               all_idle = 0;
+#endif
+
+BUDETECT
+
 #if 0
                /* check for child to exit (eliminate zombies) */
                if (waitpid(-1, NULL, WNOHANG) > 0)
@@ -635,7 +668,7 @@ BUDETECT
        }
        SPRINT(tracetext, "%s terminated", NAME);
        printf("%s\n", tracetext);
-       start_trace(0, NULL, NULL, NULL, 0, 0, 0, tracetext);
+       start_trace(-1, NULL, NULL, NULL, 0, 0, 0, tracetext);
        if (quit)
                add_trace((char *)"signal", NULL, "%d", quit);
        end_trace();
@@ -737,12 +770,18 @@ free:
        if (created_misdn)
                mISDN_deinitialize();
 
+#ifdef WITH_GSM
+       /* free gsm */
+       if (options.gsm)
+               gsm_exit(0);
+#endif
+
        /* display memory leak */
 #define MEMCHECK(a, b) \
        if (b) \
        { \
                SPRINT(tracetext, a, NAME); \
-               start_trace(0, NULL, NULL, NULL, 0, 0, 0, tracetext); \
+               start_trace(-1, NULL, NULL, NULL, 0, 0, 0, tracetext); \
                if (ret) add_trace("blocks", NULL, "%d", b); \
                end_trace(); \
                printf("\n******************************\n\007"); \