]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
mess around on win32 a little
authorAnthony Minessale <anthony.minessale@gmail.com>
Sun, 26 Feb 2006 03:13:01 +0000 (03:13 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Sun, 26 Feb 2006 03:13:01 +0000 (03:13 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@675 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/include/switch_core.h
src/switch.c
src/switch_core.c

index 6ff20b410fc25397250ba083ece40fd41631d049..fb0039067bd2c1b000b8a1c6af44ad581ebc2659 100644 (file)
@@ -106,7 +106,7 @@ struct switch_core_runtime;
   \param console optional FILE stream for output
   \note to be called at application startup
 */
-SWITCH_DECLARE(switch_status) switch_core_init(FILE *console);
+SWITCH_DECLARE(switch_status) switch_core_init(char *console);
 
 /*! 
   \brief Destroy the core
index 50acc1bb0a3072cb66ac98e1dfc984cd46378f7f..b20ebd02ac8e15fc03cc089cb9b077b0b54cabfa 100644 (file)
  *
  */
 #include <switch.h>
+#ifndef SWITCH_LOG_DIR
+#ifdef WIN32
+#define SWITCH_LOG_DIR ".\\log"
+#else
+#define SWITCH_LOG_DIR "/usr/local/freeswitch/log"
+#endif
+#endif
 
 static int RUNNING = 0;
 
+static int handle_SIGPIPE(int sig)
+{
+       switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Sig Pipe!\n");
+       return 0;
+}
+#ifdef TRAP_BUS
+static int handle_SIGBUS(int sig)
+{
+       switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Sig BUS!\n");
+       return 0;
+}
+#endif
+
+/* no ctl-c mofo */
+static int handle_SIGINT(int sig)
+{
+       return 0;
+}
+
+
 static int handle_SIGHUP(int sig)
 {
        RUNNING = 0;
@@ -41,30 +68,54 @@ static int handle_SIGHUP(int sig)
 
 int main(int argc, char *argv[])
 {
+       char *lfile = "freeswitch.log";
+       char *pfile = "freeswitch.pid";
+       char path[256] = "";
        char *err = NULL;
        switch_event *event;
        int bg = 0;
-       FILE *out = NULL;
+       FILE *f;
+#ifdef WIN32
+       char sep = '\\';
+#else
+       char sep = '/';
+       int pid;
+       nice(-20);
+
+       if (argv[1] && !strcmp(argv[1], "-stop")) {
+               pid_t pid = 0;
+               snprintf(path, sizeof(path), "%s%c%s", SWITCH_LOG_DIR, sep, pfile);
+               if ((f = fopen(path, "r")) == 0) {
+                       fprintf(stderr, "Cannot open pid file %s.\n", path);
+                       return 255;
+               }
+               fscanf(f, "%d", &pid);
+               if (pid > 0) {
+                       kill(pid, SIGTERM);
+               }
 
-       if (argv[1] && !strcmp(argv[1], "-nc")) {
-               bg++;
+               fclose(f);
+               return 0;
        }
+#endif
 
-       if (bg) {
-#ifdef WIN32
-               char *path = ".\\freeswitch.log";
-#else
-               int pid;
-               char *path = "/var/log/freeswitch.log";
-               nice(-20);
+       /* set signal handlers */
+       (void) signal(SIGINT, (void *) handle_SIGINT);
+#ifdef SIGPIPE
+       (void) signal(SIGPIPE, (void *) handle_SIGPIPE);
+#endif
+#ifdef TRAP_BUS
+       (void) signal(SIGBUS, (void *) handle_SIGBUS);
 #endif
 
-               if ((out = fopen(path, "a")) == 0) {
-                       fprintf(stderr, "Cannot open output file.\n");
-                       return 255;
-               }
 
+       if (argv[1] && !strcmp(argv[1], "-nc")) {
+               bg++;
+       }
+
+       if (bg) {
                (void) signal(SIGHUP, (void *) handle_SIGHUP);
+               (void) signal(SIGTERM, (void *) handle_SIGHUP);
 
 #ifdef WIN32
                FreeConsole();
@@ -76,7 +127,20 @@ int main(int argc, char *argv[])
 #endif
        }
 
-       if (switch_core_init(out) != SWITCH_STATUS_SUCCESS) {
+       snprintf(path, sizeof(path), "%s%c%s", SWITCH_LOG_DIR, sep, pfile);
+       if ((f = fopen(path, "w")) == 0) {
+               fprintf(stderr, "Cannot open pid file %s.\n", path);
+               return 255;
+       }
+
+       fprintf(f, "%d", getpid());
+       fclose(f);
+
+       if (bg) {
+               snprintf(path, sizeof(path), "%s%c%s", SWITCH_LOG_DIR, sep, lfile);
+       }
+
+       if (switch_core_init(bg ? path : NULL) != SWITCH_STATUS_SUCCESS) {
                err = "Cannot Initilize\n";
        }
 
@@ -99,10 +163,22 @@ int main(int argc, char *argv[])
        }
 
        switch_console_printf(SWITCH_CHANNEL_CONSOLE, "freeswitch Version %s Started\n\n", SWITCH_VERSION_FULL);
+       snprintf(path, sizeof(path), "%s%c%s", SWITCH_LOG_DIR, sep, pfile);
 
        if (bg) {
+               bg = 0;
                RUNNING = 1;
                while(RUNNING) {
+#ifdef WIN32
+               bg++;
+               if(bg == 100) {
+                       if ((f = fopen(path, "r")) == 0) {
+                               break;
+                       }
+                       fclose(f);
+                       bg = 0;
+               }
+#endif
                        switch_yield(10000);
                }
        }  else {
@@ -118,8 +194,7 @@ int main(int argc, char *argv[])
        switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Clean up modules.\n");
        switch_loadable_module_shutdown();
        switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Tearing down environment.\n");
-       switch_core_destroy();
        switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Exiting Now.\n");
+       switch_core_destroy();
        return 0;
-
 }
index 008b8b53e6894bc57ec59cbdb18cf5fbbd58103e..0caf5bc188833cb178d33186470f63106e81c3cc 100644 (file)
@@ -100,8 +100,6 @@ struct switch_core_runtime {
 };
 
 /* Prototypes */
-static int handle_SIGINT(int sig);
-static int handle_SIGPIPE(int sig);
 static void *SWITCH_THREAD_FUNC switch_core_session_thread(switch_thread *thread, void *obj);
 static void switch_core_standard_on_init(switch_core_session *session);
 static void switch_core_standard_on_hangup(switch_core_session *session);
@@ -114,24 +112,6 @@ static void switch_core_standard_on_transmit(switch_core_session *session);
 /* The main runtime obj we keep this hidden for ourselves */
 static struct switch_core_runtime runtime;
 
-static int handle_SIGPIPE(int sig)
-{
-       switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Sig Pipe!\n");
-       return 0;
-}
-#ifdef TRAP_BUS
-static int handle_SIGBUS(int sig)
-{
-       switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Sig BUS!\n");
-       return 0;
-}
-#endif
-
-/* no ctl-c mofo */
-static int handle_SIGINT(int sig)
-{
-       return 0;
-}
 static void db_pick_path(char *dbname, char *buf, size_t size)
 {
 
@@ -2195,13 +2175,19 @@ static void core_event_handler(switch_event *event)
        }
 }
 
-SWITCH_DECLARE(switch_status) switch_core_init(FILE *console)
+SWITCH_DECLARE(switch_status) switch_core_init(char *console)
 {
 #ifdef EMBED_PERL
        PerlInterpreter *my_perl;
 #endif
-
-       runtime.console = console ? console : stdout;
+       if(console) {
+               if ((runtime.console = fopen(console, "a")) == 0) {
+                       fprintf(stderr, "Cannot open output file %s.\n", console);
+                       return SWITCH_STATUS_FALSE;
+               }
+       } else {
+               runtime.console = stdout;
+       }
 
        /* INIT APR and Create the pool context */
        if (apr_initialize() != APR_SUCCESS) {
@@ -2252,14 +2238,6 @@ SWITCH_DECLARE(switch_status) switch_core_init(FILE *console)
 
        switch_core_hash_init(&runtime.session_table, runtime.memory_pool);
 
-       /* set signal handlers and startup time */
-       (void) signal(SIGINT, (void *) handle_SIGINT);
-#ifdef SIGPIPE
-       (void) signal(SIGPIPE, (void *) handle_SIGPIPE);
-#endif
-#ifdef TRAP_BUS
-       (void) signal(SIGBUS, (void *) handle_SIGBUS);
-#endif
        time(&runtime.initiated);
 
        return SWITCH_STATUS_SUCCESS;
@@ -2289,6 +2267,11 @@ SWITCH_DECLARE(switch_status) switch_core_destroy(void)
                apr_pool_destroy(runtime.memory_pool);
                apr_terminate();
        }
+       
+       if(runtime.console != stdout && runtime.console != stderr) {
+               fclose(runtime.console);
+               runtime.console = NULL;
+       }
 
        return SWITCH_STATUS_SUCCESS;
 }