- move quotes out of the rc file and read them from /system32/drivers/etc as per...
[reactos.git] / reactos / apps / utils / net / tcpsvcs / tcpsvcs.c
index 1d5cc92..014fcde 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ *  ReactOS Services
+ *  Copyright (C) 2005 ReactOS Team
+ *
+ * LICENCE:     GPL - See COPYING in the top level directory
+ * PROJECT:     ReactOS simple TCP/IP services
+ * FILE:        apps/utils/net/tcpsvcs/tcpsvcs.c
+ * PURPOSE:     Provide CharGen, Daytime, Discard, Echo, and Qotd services
+ * PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
+ * REVISIONS:
+ *   GM 04/10/05 Created
+ *
+ */
+/*
+ * TODO:
+ * - Start tcpsvcs as a service.
+ * - write debugging function and print all dbg info via that.
+ *
+ */
 #include <stdio.h>
 #include <winsock2.h>
 #include <tchar.h>
@@ -12,7 +32,7 @@ static SERVICE_STATUS_HANDLE hSStat;
 FILE *hLogFile;
 BOOL bLogEvents = TRUE;
 BOOL ShutDown, PauseFlag;
-LPTSTR LogFileName = "tcpsvcs_log.txt";
+LPCTSTR LogFileName = "tcpsvcs_log.log";
 
 static SERVICE_TABLE_ENTRY
 ServiceTable[2] =
@@ -40,7 +60,7 @@ int main(void)
     WSADATA wsaData;
     DWORD RetVal;
     INT i;
-
+    
     if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
     {
         _tprintf(_T("WSAStartup() failed : %lu\n"), RetVal);
@@ -64,7 +84,7 @@ int main(void)
         if (hThread[i] == NULL)
         {
             _tprintf(_T("Failed to start %s server....\n"), Services[i].Name);
-            ExitProcess(i);
+            //ExitProcess(i);
         }
     }
 
@@ -81,7 +101,7 @@ int main(void)
 
 
 
-/* code to run tcpsvcs as a service */
+/* code to run tcpsvcs as a service through services.msc */
 #if 0
 int
 main(int argc, char *argv[])
@@ -105,7 +125,7 @@ ServiceMain(DWORD argc, LPTSTR argv[])
     hLogFile = fopen(LogFileName, _T("w+"));
     if (hLogFile == NULL)
         return;
-
+        
     LogEvent(_T("Entering ServiceMain"), 0, FALSE);
 
     hServStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
@@ -116,14 +136,14 @@ ServiceMain(DWORD argc, LPTSTR argv[])
     hServStatus.dwServiceSpecificExitCode = 0;
     hServStatus.dwCheckPoint = 0;
     hServStatus.dwWaitHint = 2*CS_TIMEOUT;
-
+    
     hSStat = RegisterServiceCtrlHandler("tcpsvcs", ServerCtrlHandler);
     if (hSStat == 0)
         LogEvent(_T("Failed to register service\n"), 100, TRUE);
 
-    LogEvent(_T("Control handler registered successfully"), 0, FALSE);
-    SetServiceStatus (hSStat, &hServStatus);
-    LogEvent(_T("Service status set to SERVICE_START_PENDING"), 0, FALSE);
+       LogEvent(_T("Control handler registered successfully"), 0, FALSE);
+       SetServiceStatus (hSStat, &hServStatus);
+       LogEvent(_T("Service status set to SERVICE_START_PENDING"), 0, FALSE);
 
     if (CreateServers() != 0)
     {
@@ -132,14 +152,14 @@ ServiceMain(DWORD argc, LPTSTR argv[])
         SetServiceStatus(hSStat, &hServStatus);
         return;
     }
-
-    LogEvent(_T("Service threads shut down. Set SERVICE_STOPPED status"), 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);
-    fclose(hLogFile);  /*  Clean up everything, in general */
-    return;
+    
+       LogEvent(_T("Service threads shut down. Set SERVICE_STOPPED status"), 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);
+       fclose(hLogFile);  /*  Clean up everything, in general */
+       return;
 
 }
 
@@ -173,12 +193,12 @@ ServerCtrlHandler(DWORD Control)
 void UpdateStatus (int NewStatus, int Check)
 /*  Set a new service status and checkpoint (either specific value or increment) */
 {
-    if (Check < 0 ) hServStatus.dwCheckPoint++;
-    else            hServStatus.dwCheckPoint = Check;
-    if (NewStatus >= 0) hServStatus.dwCurrentState = NewStatus;
-    if (!SetServiceStatus (hSStat, &hServStatus))
-        LogEvent (_T("Cannot set service status"), 101, TRUE);
-    return;
+       if (Check < 0 ) hServStatus.dwCheckPoint++;
+       else                    hServStatus.dwCheckPoint = Check;
+       if (NewStatus >= 0) hServStatus.dwCurrentState = NewStatus;
+       if (!SetServiceStatus (hSStat, &hServStatus))
+               LogEvent (_T("Cannot set service status"), 101, TRUE);
+       return;
 }
 
 INT
@@ -187,7 +207,7 @@ CreateServers()
     DWORD dwThreadId[NUM_SERVICES];
     HANDLE hThread[NUM_SERVICES];
     INT i;
-
+    
     UpdateStatus(-1, -1); /* increment checkpoint */
 
     /* Create MAX_THREADS worker threads. */
@@ -223,38 +243,37 @@ CreateServers()
 }
 
 
-/*  LogEvent is similar to the ReportError function used elsewhere
-    For a service, however, we ReportEvent rather than write to standard
-    error. Eventually, this function should go into the utility
-    library.  */
+/*     LogEvent is similar to the ReportError function used elsewhere
+       For a service, however, we ReportEvent rather than write to standard
+       error. Eventually, this function should go into the utility
+       library.  */
 VOID
 LogEvent (LPCTSTR UserMessage, DWORD ExitCode, BOOL PrintErrorMsg)
 {
-    DWORD eMsgLen, ErrNum = GetLastError ();
-    LPTSTR lpvSysMsg;
-    TCHAR MessageBuffer[512];
-
-    if (PrintErrorMsg) {
-        eMsgLen = FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER |
-            FORMAT_MESSAGE_FROM_SYSTEM, NULL,
-            ErrNum, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
-            (LPTSTR)&lpvSysMsg, 0, NULL);
-
-        _stprintf (MessageBuffer, _T("\n%s %s ErrNum = %d. ExitCode = %d."),
-            UserMessage, lpvSysMsg, ErrNum, ExitCode);
-        HeapFree (GetProcessHeap (), 0, lpvSysMsg);
-                /* Explained in Chapter 6. */
-    } else {
-        _stprintf (MessageBuffer, _T("\n%s ExitCode = %d."),
-            UserMessage, ExitCode);
-    }
-
-    fputs (MessageBuffer, hLogFile);
-
-    if (ExitCode > 0)
-        ExitProcess (ExitCode);
-    else
-        return;
+       DWORD eMsgLen, ErrNum = GetLastError ();
+       LPTSTR lpvSysMsg;
+       TCHAR MessageBuffer[512];
+
+       if (PrintErrorMsg) {
+               eMsgLen = FormatMessage (FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                       FORMAT_MESSAGE_FROM_SYSTEM, NULL,
+                       ErrNum, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT),
+                       (LPTSTR)&lpvSysMsg, 0, NULL);
+
+               _stprintf (MessageBuffer, _T("\n%s %s ErrNum = %d. ExitCode = %d."),
+                       UserMessage, lpvSysMsg, ErrNum, ExitCode);
+               HeapFree (GetProcessHeap (), 0, lpvSysMsg);
+       } else {
+               _stprintf (MessageBuffer, _T("\n%s ExitCode = %d."),
+                       UserMessage, ExitCode);
+       }
+
+       fputs (MessageBuffer, hLogFile);
+
+       if (ExitCode > 0)
+               ExitProcess (ExitCode);
+       else
+               return;
 }
 
 #endif