Version 0.3.0 from FTP
[asterisk/asterisk.git] / asterisk.c
index 4addf88..94e6802 100755 (executable)
@@ -17,6 +17,8 @@
 #include <asterisk/options.h>
 #include <asterisk/cli.h>
 #include <asterisk/channel.h>
+#include <asterisk/ulaw.h>
+#include <asterisk/callerid.h>
 #include <stdio.h>
 #include <signal.h>
 #include <sched.h>
@@ -35,9 +37,6 @@ int fully_booted = 0;
 
 char defaultlanguage[MAX_LANGUAGE] = DEFAULT_LANGUAGE;
 
-#define HIGH_PRIORITY 1
-#define HIGH_PRIORITY_SCHED SCHED_RR
-
 static void urg_handler(int num)
 {
        /* Called by soft_hangup to interrupt the select, read, or other
@@ -48,17 +47,33 @@ static void urg_handler(int num)
        return;
 }
 
+static void set_title(char *text)
+{
+       /* Set an X-term or screen title */
+       if (getenv("TERM") && strstr(getenv("TERM"), "xterm"))
+               fprintf(stdout, "\033]2;%s\007", text);
+}
+
+static void set_icon(char *text)
+{
+       if (getenv("TERM") && strstr(getenv("TERM"), "xterm"))
+               fprintf(stdout, "\033]1;%s\007", text);
+}
+
 static int set_priority(int pri)
 {
        struct sched_param sched;
+       memset(&sched, 0, sizeof(sched));
        /* We set ourselves to a high priority, that we might pre-empt everything
           else.  If your PBX has heavy activity on it, this is a good thing.  */
        if (pri) {  
-               sched.sched_priority = HIGH_PRIORITY;
-               if (sched_setscheduler(0, HIGH_PRIORITY_SCHED, &sched)) {
+               sched.sched_priority = 10;
+               if (sched_setscheduler(0, SCHED_RR, &sched)) {
                        ast_log(LOG_WARNING, "Unable to set high priority\n");
                        return -1;
-               }
+               } else
+                       if (option_verbose)
+                               ast_verbose("Set to realtime thread\n");
        } else {
                sched.sched_priority = 0;
                if (sched_setscheduler(0, SCHED_OTHER, &sched)) {
@@ -148,6 +163,11 @@ int main(int argc, char *argv[])
        fd_set rfds;
        int res;
        char filename[80] = "";
+       char hostname[256];
+       if (gethostname(hostname, sizeof(hostname)))
+               strncpy(hostname, "<Unknown>", sizeof(hostname));
+       ast_ulaw_init();
+       callerid_init();
        if (getenv("HOME")) 
                snprintf(filename, sizeof(filename), "%s/.asterisk_history", getenv("HOME"));
        /* Check if we're root */
@@ -165,6 +185,7 @@ int main(int argc, char *argv[])
                case 'c':
                        option_console++;
                        option_nofork++;
+                       break;
                case 'p':
                        option_highpriority++;
                        break;
@@ -192,14 +213,14 @@ int main(int argc, char *argv[])
        signal(SIGINT, quit_handler);
        signal(SIGTERM, quit_handler);
        signal(SIGHUP, quit_handler);
+       if (set_priority(option_highpriority))
+               exit(1);
        if (init_logger())
                exit(1);
        if (load_pbx())
                exit(1);
        if (load_modules())
                exit(1);
-       if (set_priority(option_highpriority))
-               exit(1);
        /* We might have the option of showing a console, but for now just
           do nothing... */
        if (option_console && !option_verbose)
@@ -210,6 +231,10 @@ int main(int argc, char *argv[])
        if (option_console) {
                /* Console stuff now... */
                /* Register our quit function */
+               char title[256];
+               set_icon("Asterisk");
+               snprintf(title, sizeof(title), "Asterisk Console on '%s' (pid %d)", hostname, getpid());
+               set_title(title);
            ast_cli_register(&quit);
                consolethread = pthread_self();
                if (strlen(filename))