X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fservices%2Ftcpsvcs%2Ftcpsvcs.c;h=809cc05724dc969e1e94c6d2499b9017288ef32d;hp=c0c667431d3ce3bb1c54f92f20aab5d04a377dc6;hb=6ae404c48035d780ee563c2bee5c0ac6e31822e6;hpb=50d1415ee42aedc1150030feae5c662ecae8319d diff --git a/reactos/services/tcpsvcs/tcpsvcs.c b/reactos/services/tcpsvcs/tcpsvcs.c index c0c667431d3..809cc05724d 100644 --- a/reactos/services/tcpsvcs/tcpsvcs.c +++ b/reactos/services/tcpsvcs/tcpsvcs.c @@ -13,11 +13,10 @@ */ /* * TODO: - * - Start tcpsvcs as a service. - * - write debugging function and print all dbg info via that. - * - change 'temp' to something meaningfull + * - fix bug when terminating chargen server + * - log info in the event logger (when it's implemented) */ - + #include "tcpsvcs.h" @@ -34,8 +33,8 @@ static SERVICE_STATUS hServStatus; static SERVICE_STATUS_HANDLE hSStat; FILE *hLogFile; -BOOL bShutDownFlag = FALSE; -BOOL bPauseFlag = FALSE; +BOOL bShutDown = FALSE; +BOOL bPause = FALSE; LPCTSTR LogFileName = "\\tcpsvcs_log.log"; LPTSTR ServiceName = _T("Simp Tcp"); @@ -53,14 +52,14 @@ Services[NUM_SERVICES] = int -main(int argc, char *argv[]) +main(void) { SERVICE_TABLE_ENTRY ServiceTable[] = { {ServiceName, ServiceMain}, {NULL, NULL} }; - + //DPRINT("Starting tcpsvcs service. See \system32%s for logs\n", LogFileName); if (! StartServiceCtrlDispatcher(ServiceTable)) @@ -75,24 +74,25 @@ main(int argc, char *argv[]) VOID WINAPI ServiceMain(DWORD argc, LPTSTR argv[]) { - TCHAR LogFilePath[MAX_PATH]; + TCHAR LogFilePath[MAX_PATH]; if(! GetSystemDirectory(LogFilePath, MAX_PATH)) return; - + _tcscat(LogFilePath, LogFileName); - hLogFile = fopen(LogFilePath, _T("w")); + hLogFile = fopen(LogFilePath, _T("a+")); if (hLogFile == NULL) { - TCHAR *temp = NULL; - - _stprintf(temp, _T("Could not open log file: %s"), LogFilePath); - MessageBox(NULL, temp, NULL, MB_OK); + TCHAR buf[50]; + + _stprintf(buf, _T("Could not open log file: %s\n"), LogFilePath); + MessageBox(NULL, buf, NULL, MB_OK); return; } - - LogEvent(_T("Entering ServiceMain"), 0, FALSE); + + + LogEvent(_T("Entering ServiceMain\n"), 0, FALSE); hServStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; hServStatus.dwCurrentState = SERVICE_START_PENDING; @@ -102,14 +102,14 @@ ServiceMain(DWORD argc, LPTSTR argv[]) hServStatus.dwServiceSpecificExitCode = NO_ERROR; hServStatus.dwCheckPoint = 0; hServStatus.dwWaitHint = 2*CS_TIMEOUT; - + hSStat = RegisterServiceCtrlHandler(ServiceName, ServerCtrlHandler); if (hSStat == 0) LogEvent(_T("Failed to register service\n"), -1, TRUE); - LogEvent(_T("Control handler registered successfully"), 0, FALSE); + LogEvent(_T("Control handler registered successfully\n"), 0, FALSE); SetServiceStatus (hSStat, &hServStatus); - LogEvent(_T("Service status set to SERVICE_START_PENDING"), 0, FALSE); + LogEvent(_T("Service status set to SERVICE_START_PENDING\n"), 0, FALSE); if (CreateServers() != 0) { @@ -118,14 +118,16 @@ ServiceMain(DWORD argc, LPTSTR argv[]) SetServiceStatus(hSStat, &hServStatus); return; } - - LogEvent(_T("Service threads shut down. Set SERVICE_STOPPED status"), 0, FALSE); + + LogEvent(_T("Service threads shut down. Set SERVICE_STOPPED status\n"), 0, FALSE); /* We will only return here when the ServiceSpecific function completes, indicating system shutdown. */ UpdateStatus (SERVICE_STOPPED, 0); - LogEvent(_T("Service status set to SERVICE_STOPPED"), 0, FALSE); - LogEvent(_T("Leaving ServiceMain"), 0, FALSE); - fclose(hLogFile); /* Clean up everything, in general */ + LogEvent(_T("Service status set to SERVICE_STOPPED\n"), 0, FALSE); + LogEvent(_T("Leaving ServiceMain\n"), 0, FALSE); + + fclose(hLogFile); + return; } @@ -137,14 +139,17 @@ ServerCtrlHandler(DWORD Control) { case SERVICE_CONTROL_SHUTDOWN: /* fall through */ case SERVICE_CONTROL_STOP: - bShutDownFlag = TRUE; + LogEvent(_T("stopping service\n"), 0, FALSE); + InterlockedExchange((LONG *)&bShutDown, TRUE); UpdateStatus(SERVICE_STOP_PENDING, -1); break; - case SERVICE_CONTROL_PAUSE: - bPauseFlag = TRUE; + case SERVICE_CONTROL_PAUSE: /* not yet implemented */ + LogEvent(_T("pausing service\n"), 0, FALSE); + InterlockedExchange((LONG *)&bPause, TRUE); break; case SERVICE_CONTROL_CONTINUE: - bPauseFlag = FALSE; + LogEvent(_T("continuing service\n"), 0, FALSE); + InterlockedExchange((LONG *)&bPause, FALSE); break; case SERVICE_CONTROL_INTERROGATE: break; @@ -164,13 +169,13 @@ void UpdateStatus (int NewStatus, int Check) hServStatus.dwCheckPoint++; else hServStatus.dwCheckPoint = Check; - + if (NewStatus >= 0) hServStatus.dwCurrentState = NewStatus; - + if (! SetServiceStatus (hSStat, &hServStatus)) - LogEvent(_T("Cannot set service status"), -1, TRUE); - + LogEvent(_T("Cannot set service status\n"), -1, TRUE); + return; } @@ -180,17 +185,17 @@ CreateServers() DWORD dwThreadId[NUM_SERVICES]; HANDLE hThread[NUM_SERVICES]; WSADATA wsaData; - TCHAR temp[512]; // temp for holding LogEvent text + TCHAR buf[256]; INT i; DWORD RetVal; - + if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0) { - _stprintf(temp, _T("WSAStartup() failed : %lu\n"), RetVal); - LogEvent(temp, RetVal, TRUE); + _stprintf(buf, _T("WSAStartup() failed : %lu\n"), RetVal); + LogEvent(buf, RetVal, TRUE); return -1; } - + UpdateStatus(-1, -1); /* increment checkpoint */ LogEvent(_T("Creating server Threads\n"), 0, FALSE); @@ -198,8 +203,8 @@ CreateServers() /* Create MAX_THREADS worker threads. */ for( i=0; i