]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
formatting and comments. More to come.
authorMichael Jerris <mike@jerris.com>
Mon, 30 Oct 2006 01:36:51 +0000 (01:36 +0000)
committerMichael Jerris <mike@jerris.com>
Mon, 30 Oct 2006 01:36:51 +0000 (01:36 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3233 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/switch.c

index 5f89d8f8dd16c552f3c2b71b15e55bef552663f9..34659a8daee9c141ea963ed32a564ce1c13bf05d 100644 (file)
 
 #include <switch.h>
 
+//pid filename: Stores the process id of the freeswitch process
 #define PIDFILE "freeswitch.pid"
-#define LOGFILE "freeswitch.log"
+static char *pfile = PIDFILE;
 
+//log filename: Filename of the freeswitch log file to be used if we are in background mode
+#define LOGFILE "freeswitch.log"
 static char *lfile = LOGFILE;
-static char *pfile = PIDFILE;
+
+//If we are a windows service, what should we be called
 #define SERVICENAME "Freeswitch"
 
+//Picky compiler
 #ifdef __ICC
 #pragma warning (disable:167)
 #endif
 
-
 #ifdef WIN32
 #include <winsock2.h>
 #include <windows.h>
+
+//event to signal shutdown (for you unix people, this is like a pthread_cond)
 static HANDLE shutdown_event;
 #endif
 
+//signal handler for when freeswitch is running in background mode.
+//signal triggers the shutdown of freeswitch
 static void handle_SIGHUP(int sig)
 {
        uint32_t arg = 0;
        if(sig);
+       //send shutdown signal to the freeswitch core
        switch_core_session_ctl(SCSC_SHUTDOWN, &arg);
        return;
 }
 
-
+//kill a freeswitch process running in background mode
 static int freeswitch_kill_background()
 {
-       FILE *f;
-       char path[256] = "";
-       pid_t pid = 0;
+       FILE *f;                                //FILE handle to open the pid file
+       char path[256] = "";    //full path of the PID file
+       pid_t pid = 0;                  //pid from the pid file 
+
+       //set the globals so we can use the global paths.
        switch_core_set_globals();
+
+       //get the full path of the pid file.
        snprintf(path, sizeof(path), "%s%s%s", SWITCH_GLOBAL_dirs.log_dir, SWITCH_PATH_SEPARATOR, pfile);
+
+       //open the pid file
        if ((f = fopen(path, "r")) == 0) {
+               //pid file does not exist
                fprintf(stderr, "Cannot open pid file %s.\n", path);
                return 255;
        }
+
+       //pull the pid from the file
        fscanf(f, "%d", &pid);
+
+       //if we have a valid pid
        if (pid > 0) {
+
+               //kill the freeswitch running at the pid we found
                fprintf(stderr, "Killing: %d\n", (int) pid);
 #ifdef WIN32
+               //for windows we need the event to signal for shutting down a background freewitc
                snprintf(path, sizeof(path), "Global\\Freeswitch.%d", pid);
+
+               //open the event so we can signal it
                shutdown_event = OpenEvent(EVENT_MODIFY_STATE, FALSE, path);
+
+               //did we sucessfully open the event
                if (!shutdown_event) {
                        /* we can't get the event, so we can't signal the process to shutdown */
                        fprintf(stderr, "ERROR: Can't Shutdown: %d\n", (int) pid);
                } else {
+                       //signal the event to shutdown
                        SetEvent(shutdown_event);
                }
+               //cleanup
                CloseHandle(shutdown_event);
 #else
+               //for unix, send the signal to kill.
                kill(pid, SIGTERM);
 #endif
        }
 
+       //be nice and close the file handle to the pid file
        fclose(f);
+
        return 0;
 }
 
 #ifdef WIN32
+
+//we need these vars to handle the service
 SERVICE_STATUS_HANDLE hStatus;
 SERVICE_STATUS status;
 
+//Handler function for service start/stop from the service 
 void WINAPI ServiceCtrlHandler( DWORD control )
 {
-    switch( control )
-    {
-    case SERVICE_CONTROL_SHUTDOWN:
-    case SERVICE_CONTROL_STOP:
-        // do shutdown stuff here
+       switch( control )
+       {
+       case SERVICE_CONTROL_SHUTDOWN:
+       case SERVICE_CONTROL_STOP:
+               // do shutdown stuff here
                switch_core_destroy();
-        status.dwCurrentState = SERVICE_STOPPED;
-        status.dwWin32ExitCode = 0;
-        status.dwCheckPoint = 0;
-        status.dwWaitHint = 0;
-        break;
-    case SERVICE_CONTROL_INTERROGATE:
-        // just set the current state to whatever it is...
-        break;
-    }
-
-    SetServiceStatus( hStatus, &status );
+               status.dwCurrentState = SERVICE_STOPPED;
+               status.dwWin32ExitCode = 0;
+               status.dwCheckPoint = 0;
+               status.dwWaitHint = 0;
+               break;
+       case SERVICE_CONTROL_INTERROGATE:
+               // just set the current state to whatever it is...
+               break;
+       }
+
+       SetServiceStatus( hStatus, &status );
 }
 
 void WINAPI service_main( DWORD numArgs, char **args )
 {
        const char *err = NULL;
-    // we have to initialize the service-specific stuff
-    memset( &status, 0, sizeof(SERVICE_STATUS) );
-    status.dwServiceType = SERVICE_WIN32;
-    status.dwCurrentState = SERVICE_START_PENDING;
-    status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
+       // we have to initialize the service-specific stuff
+       memset( &status, 0, sizeof(SERVICE_STATUS) );
+       status.dwServiceType = SERVICE_WIN32;
+       status.dwCurrentState = SERVICE_START_PENDING;
+       status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
 
-    hStatus = RegisterServiceCtrlHandler( SERVICENAME, &ServiceCtrlHandler );
+       hStatus = RegisterServiceCtrlHandler( SERVICENAME, &ServiceCtrlHandler );
 
-    SetServiceStatus( hStatus, &status );
+       SetServiceStatus( hStatus, &status );
        set_high_priority();
        if (switch_core_init_and_modload(lfile, &err) != SWITCH_STATUS_SUCCESS) {
-           status.dwCurrentState = SERVICE_STOPPED;
+               status.dwCurrentState = SERVICE_STOPPED;
        } else {
                status.dwCurrentState = SERVICE_RUNNING;
        }
 
-    SetServiceStatus( hStatus, &status );
+       SetServiceStatus( hStatus, &status );
 }
 
 #endif
@@ -153,23 +188,22 @@ int main(int argc, char *argv[])
        int x, die = 0;
 
 #ifdef WIN32
-    SERVICE_TABLE_ENTRY dispatchTable[] =
-    {
-        { SERVICENAME, &service_main },
-        { NULL, NULL }
-    };
+       SERVICE_TABLE_ENTRY dispatchTable[] =
+       {
+               { SERVICENAME, &service_main },
+               { NULL, NULL }
+       };
 #endif
 
        for (x = 1; x < argc; x++) {
 #ifdef WIN32
                if (x == 1) {
                        if (argv[x] && !strcmp(argv[x], "-service")) {
-                               if(StartServiceCtrlDispatcher( dispatchTable ) == 0 )
-                                       {
-                                               //Not loaded as a service
-                                               fprintf(stderr, "Error Freeswitch loaded as a console app with -service option\n");
-                                               fprintf(stderr, "To install the service load freeswitch with -install\n");
-                                       }
+                               if(StartServiceCtrlDispatcher( dispatchTable ) == 0 ) {
+                                       //Not loaded as a service
+                                       fprintf(stderr, "Error Freeswitch loaded as a console app with -service option\n");
+                                       fprintf(stderr, "To install the service load freeswitch with -install\n");
+                               }
                                exit(0);
                        }
                        if (argv[x] && !strcmp(argv[x], "-install")) {
@@ -180,30 +214,29 @@ int main(int argc, char *argv[])
                                GetModuleFileName( NULL, exePath, 1024 );
                                snprintf(servicePath, sizeof(servicePath), "%s -service", exePath);
                                CreateService(
-                                                         handle,
-                                                         SERVICENAME,
-                                                         SERVICENAME,
-                                                         GENERIC_READ | GENERIC_EXECUTE,
-                                                         SERVICE_WIN32_OWN_PROCESS,
-                                                         SERVICE_AUTO_START,
-                                                         SERVICE_ERROR_IGNORE,
-                                                         servicePath,
-                                                         NULL,
-                                                         NULL,
-                                                         NULL,
-                                                         NULL,
-                                                         NULL
-                                                         );
+                                       handle,
+                                       SERVICENAME,
+                                       SERVICENAME,
+                                       GENERIC_READ | GENERIC_EXECUTE,
+                                       SERVICE_WIN32_OWN_PROCESS,
+                                       SERVICE_AUTO_START,
+                                       SERVICE_ERROR_IGNORE,
+                                       servicePath,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL,
+                                       NULL
+                                       );
                                exit(0);
                        }
                        if (argv[x] && !strcmp(argv[x], "-uninstall")) {
                                SC_HANDLE handle = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
                                SC_HANDLE service = OpenService( handle, SERVICENAME, DELETE );
-                               if( service != NULL )
-                                       {
-                                               // remove the service!
-                                               DeleteService( service );
-                                       }
+                               if( service != NULL ) {
+                                       // remove the service!
+                                       DeleteService( service );
+                               }
                                exit(0);
                        }
                }
@@ -211,7 +244,7 @@ int main(int argc, char *argv[])
                if (argv[x] && !strcmp(argv[x], "-hp")) {
                        set_high_priority();
                }
-               
+
                if (argv[x] && !strcmp(argv[x], "-stop")) {
                        die++;
                }