]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - win/win32service.cpp
Add <shun:notifyuser>, default on, which notifies the user that their command was...
[user/henk/code/inspircd.git] / win / win32service.cpp
index ab1fae140a8a5a13a6a31b003dd5dc6cd1da9565..27e6d541ec920d2bc22e5c4c1107cf8605127d47 100644 (file)
@@ -27,8 +27,8 @@ static int serviceCurrentStatus;
  */
 typedef BOOL (CALLBACK* SETSERVDESC)(SC_HANDLE,DWORD,LPVOID);
 
-BOOL UpdateSCMStatus (DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServiceSpecificExitCode, DWORD dwCheckPoint, DWORD dwWaitHint);
-void terminateService (int code, int wincode);
+BOOL UpdateSCMStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServiceSpecificExitCode, DWORD dwCheckPoint, DWORD dwWaitHint);
+void terminateService(int code, int wincode);
 
 /* A commandline parameter handler for service specific commandline parameters */
 typedef void (*CommandlineParameterHandler)(void);
@@ -43,6 +43,7 @@ struct Commandline
 /* A function pointer for dynamic linking tricks */
 SETSERVDESC ChangeServiceConf;
 
+/* Returns true if this program is running as a service, false if it is running interactive */
 bool IsAService()
 {
        USEROBJECTFLAGS uoflags;
@@ -68,8 +69,8 @@ DWORD WINAPI WorkerThread(LPDWORD param)
 {
        char modname[MAX_PATH];
        GetModuleFileName(NULL, modname, sizeof(modname));
-       char* argv[] = { modname, "--nofork", "--debug" };
-       smain(3, argv);
+       char* argv[] = { modname, "--nofork" };
+       smain(2, argv);
        KillService();
        return 0;
 }
@@ -84,7 +85,7 @@ void SetServiceRunning()
        BOOL success = UpdateSCMStatus(SERVICE_RUNNING, NO_ERROR, 0, 0, 0);
        if (!success)
        {
-               terminateService(22, GetLastError());
+               terminateService(EXIT_STATUS_UPDATESCM_FAILED, GetLastError());
                return;
        }
 }
@@ -100,7 +101,7 @@ void StartServiceThread()
 /** This function updates the status of the service in the SCM
  * (service control manager, the services.msc applet)
  */
-BOOL UpdateSCMStatus (DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServiceSpecificExitCode, DWORD dwCheckPoint, DWORD dwWaitHint)
+BOOL UpdateSCMStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServiceSpecificExitCode, DWORD dwCheckPoint, DWORD dwWaitHint)
 {
        BOOL success;
        SERVICE_STATUS serviceStatus;
@@ -137,13 +138,13 @@ BOOL UpdateSCMStatus (DWORD dwCurrentState, DWORD dwWin32ExitCode, DWORD dwServi
 }
 
 /** This function is called by us when the service is being shut down or when it can't be started */
-void terminateService (int code, int wincode)
+void terminateService(int code, int wincode)
 {
        UpdateSCMStatus(SERVICE_STOPPED, wincode ? wincode : ERROR_SERVICE_SPECIFIC_ERROR, wincode ? 0 : code, 0, 0);
        return;
 }
 
-/* In windows we hook this to exit() */
+/* In windows we hook this to InspIRCd::Exit() */
 void SetServiceStopped(int status)
 {
        if (!IsAService())
@@ -156,7 +157,7 @@ void SetServiceStopped(int status)
 }
 
 /** This callback is called by windows when the state of the service has been changed */
-VOID ServiceCtrlHandler (DWORD controlCode)
+VOID ServiceCtrlHandler(DWORD controlCode)
 {
        switch(controlCode)
        {
@@ -184,14 +185,14 @@ VOID ServiceMain(DWORD argc, LPTSTR *argv)
        serviceStatusHandle = RegisterServiceCtrlHandler("InspIRCd", (LPHANDLER_FUNCTION)ServiceCtrlHandler);
        if (!serviceStatusHandle)
        {
-               terminateService(18, GetLastError());
+               terminateService(EXIT_STATUS_RSCH_FAILED, GetLastError());
                return;
        }
 
        success = UpdateSCMStatus(SERVICE_START_PENDING, NO_ERROR, 0, 1, 1000);
        if (!success)
        {
-               terminateService(19, GetLastError());
+               terminateService(EXIT_STATUS_UPDATESCM_FAILED, GetLastError());
                return;
        }
 
@@ -200,14 +201,14 @@ VOID ServiceMain(DWORD argc, LPTSTR *argv)
 
        if (!killServiceEvent || !hThreadEvent)
        {
-               terminateService(20, GetLastError());
+               terminateService(EXIT_STATUS_CREATE_EVENT_FAILED, GetLastError());
                return;
        }
 
        success = UpdateSCMStatus(SERVICE_START_PENDING, NO_ERROR, 0, 2, 1000);
        if (!success)
        {
-               terminateService(21, GetLastError());
+               terminateService(EXIT_STATUS_UPDATESCM_FAILED, GetLastError());
                return;
        }