Author: gedmurphy
Date: Mon Sep 1 07:51:49 2008
New Revision: 35854
URL:
http://svn.reactos.org/svn/reactos?rev=35854&view=rev
Log:
- Fix file logging to be asynchronous and more robust
- Convert to unicode
Modified:
trunk/reactos/base/services/tcpsvcs/chargen.c
trunk/reactos/base/services/tcpsvcs/daytime.c
trunk/reactos/base/services/tcpsvcs/discard.c
trunk/reactos/base/services/tcpsvcs/echo.c
trunk/reactos/base/services/tcpsvcs/log.c
trunk/reactos/base/services/tcpsvcs/qotd.c
trunk/reactos/base/services/tcpsvcs/skelserver.c
trunk/reactos/base/services/tcpsvcs/tcpsvcs.c
trunk/reactos/base/services/tcpsvcs/tcpsvcs.h
Modified: trunk/reactos/base/services/tcpsvcs/chargen.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/char…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/chargen.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/chargen.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -32,16 +32,16 @@
}
else
{
- LogEvent(_T("Chargen: Not sent enough bytes"), 0, 0, LOG_FILE);
+ LogEvent(L"Chargen: Not sent enough bytes", 0, 0, LOG_FILE);
}
}
else if (retVal == SOCKET_ERROR)
{
- LogEvent(_T("Chargen: Socket error\n"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"Chargen: Socket error\n", WSAGetLastError(), 0, LOG_ERROR);
}
else
{
- LogEvent(_T("Chargen: unknown error\n"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"Chargen: unknown error\n", WSAGetLastError(), 0,
LOG_ERROR);
}
return bRet;;
@@ -100,21 +100,21 @@
if (!GenerateChars(sock))
{
- LogEvent(_T("Chargen: Char generation failed"), 0, 0, LOG_FILE);
+ LogEvent(L"Chargen: Char generation failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("Chargen: Shutting connection down..."), 0, 0, LOG_FILE);
+ LogEvent(L"Chargen: Shutting connection down...", 0, 0, LOG_FILE);
if (ShutdownConnection(sock, FALSE))
{
- LogEvent(_T("Chargen: Connection is down"), 0, 0, LOG_FILE);
+ LogEvent(L"Chargen: Connection is down", 0, 0, LOG_FILE);
}
else
{
- LogEvent(_T("Chargen: Connection shutdown failed"), 0, 0, LOG_FILE);
+ LogEvent(L"Chargen: Connection shutdown failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("Chargen: Terminating thread"), 0, 0, LOG_FILE);
+ LogEvent(L"Chargen: Terminating thread", 0, 0, LOG_FILE);
ExitThread(retVal);
}
Modified: trunk/reactos/base/services/tcpsvcs/daytime.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/dayt…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/daytime.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/daytime.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -15,7 +15,7 @@
DWORD stringSize = strlen(time) + 1;
if (send(sock, time, stringSize, 0) == SOCKET_ERROR)
{
- LogEvent(_T("DayTime: Error sending data"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"DayTime: Error sending data", WSAGetLastError(), 0,
LOG_ERROR);
return FALSE;
}
@@ -41,15 +41,15 @@
retVal = 1;
}
- LogEvent(_T("DayTime: Shutting connection down"), 0, 0, LOG_FILE);
+ LogEvent(L"DayTime: Shutting connection down", 0, 0, LOG_FILE);
if (ShutdownConnection(Sock, FALSE))
- LogEvent(_T("DayTime: Connection is down"), 0, 0, LOG_FILE);
+ LogEvent(L"DayTime: Connection is down", 0, 0, LOG_FILE);
else
{
- LogEvent(_T("DayTime: Connection shutdown failed"), 0, 0, LOG_FILE);
+ LogEvent(L"DayTime: Connection shutdown failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("DayTime: Terminating thread"), 0, 0, LOG_FILE);
+ LogEvent(L"DayTime: Terminating thread", 0, 0, LOG_FILE);
ExitThread(retVal);
}
Modified: trunk/reactos/base/services/tcpsvcs/discard.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/disc…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/discard.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/discard.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -14,7 +14,7 @@
static BOOL
RecieveIncomingPackets(SOCKET sock)
{
- char readBuffer[BUFSIZE];
+ CHAR readBuffer[BUFSIZE];
INT readBytes;
do
@@ -24,18 +24,18 @@
{
TCHAR logBuf[256];
- _stprintf(logBuf, _T("Discard: Received %d bytes from client"),
readBytes);
+ _swprintf(logBuf, L"Discard: Received %d bytes from client",
readBytes);
LogEvent(logBuf, 0, 0, LOG_FILE);
}
else if (readBytes == SOCKET_ERROR)
{
- LogEvent(_T("Discard: Socket Error"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"Discard: Socket Error", WSAGetLastError(), 0,
LOG_ERROR);
return FALSE;
}
} while ((readBytes > 0) && (!bShutdown));
if (!bShutdown)
- LogEvent(_T("Discard: Connection closed by peer"), 0, 0, LOG_FILE);
+ LogEvent(L"Discard: Connection closed by peer", 0, 0, LOG_FILE);
return TRUE;
}
@@ -48,21 +48,21 @@
if (!RecieveIncomingPackets(sock))
{
- LogEvent(_T("Discard: RecieveIncomingPackets failed"), 0, 0,
LOG_FILE);
+ LogEvent(L"Discard: RecieveIncomingPackets failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("Discard: Shutting connection down"), 0, 0, LOG_FILE);
+ LogEvent(L"Discard: Shutting connection down", 0, 0, LOG_FILE);
if (ShutdownConnection(sock, TRUE))
{
- LogEvent(_T("Discard: Connection is down."), 0, 0, LOG_FILE);
+ LogEvent(L"Discard: Connection is down.", 0, 0, LOG_FILE);
}
else
{
- LogEvent(_T("Discard: Connection shutdown failed"), 0, 0, LOG_FILE);
+ LogEvent(L"Discard: Connection shutdown failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("Discard: Terminating thread"), 0, 0, LOG_FILE);
+ LogEvent(L"Discard: Terminating thread", 0, 0, LOG_FILE);
ExitThread(retVal);
}
Modified: trunk/reactos/base/services/tcpsvcs/echo.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/echo…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/echo.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/echo.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -15,7 +15,7 @@
EchoIncomingPackets(SOCKET sock)
{
CHAR readBuffer[RECV_BUF];
- TCHAR logBuf[256];
+ WCHAR logBuf[256];
INT totalSentBytes;
INT readBytes;
INT retVal;
@@ -25,7 +25,7 @@
readBytes = recv(sock, readBuffer, RECV_BUF, 0);
if (readBytes > 0)
{
- _stprintf(logBuf, _T("Received %d bytes from client"), readBytes);
+ _swprintf(logBuf, L"Received %d bytes from client", readBytes);
LogEvent(logBuf, 0, 0, LOG_FILE);
totalSentBytes = 0;
@@ -34,33 +34,33 @@
retVal = send(sock, readBuffer + totalSentBytes, readBytes -
totalSentBytes, 0);
if (retVal > 0)
{
- _stprintf(logBuf, _T("Sent %d bytes back to client"),
retVal);
+ _swprintf(logBuf, L"Sent %d bytes back to client",
retVal);
LogEvent(logBuf, 0, 0, LOG_FILE);
totalSentBytes += retVal;
}
else if (retVal == SOCKET_ERROR)
{
- LogEvent(_T("Echo: socket error"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"Echo: socket error", WSAGetLastError(), 0,
LOG_ERROR);
return FALSE;
}
else
{
/* Client closed connection before we could reply to
all the data it sent, so quit early. */
- LogEvent(_T("Peer unexpectedly dropped connection!"), 0, 0,
LOG_FILE);
+ LogEvent(L"Peer unexpectedly dropped connection!", 0, 0,
LOG_FILE);
return FALSE;
}
}
}
else if (readBytes == SOCKET_ERROR)
{
- LogEvent(_T("Echo: socket error"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"Echo: socket error", WSAGetLastError(), 0, LOG_ERROR);
return FALSE;
}
} while ((readBytes != 0) && (!bShutdown));
if (!bShutdown)
- LogEvent(_T("Echo: Connection closed by peer"), 0, 0, LOG_FILE);
+ LogEvent(L"Echo: Connection closed by peer", 0, 0, LOG_FILE);
return TRUE;
}
@@ -73,22 +73,22 @@
if (!EchoIncomingPackets(sock))
{
- LogEvent(_T("Echo: EchoIncomingPackets failed"), 0, 0, LOG_FILE);
+ LogEvent(L"Echo: EchoIncomingPackets failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("Echo: Shutting connection down"), 0, 0, LOG_FILE);
+ LogEvent(L"Echo: Shutting connection down", 0, 0, LOG_FILE);
if (ShutdownConnection(sock, TRUE))
{
- LogEvent(_T("Echo: Connection is down"), 0, 0, LOG_FILE);
+ LogEvent(L"Echo: Connection is down", 0, 0, LOG_FILE);
}
else
{
- LogEvent(_T("Echo: Connection shutdown failed"), 0, 0, LOG_FILE);
+ LogEvent(L"Echo: Connection shutdown failed", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("Echo: Terminating thread"), 0, 0, LOG_FILE);
+ LogEvent(L"Echo: Terminating thread", 0, 0, LOG_FILE);
ExitThread(retVal);
}
Modified: trunk/reactos/base/services/tcpsvcs/log.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/log.…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/log.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/log.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -11,31 +11,35 @@
#define DEBUG
-static LPTSTR lpEventSource = _T("tcpsvcs");
-static LPCTSTR lpLogFileName = _T("C:\\tcpsvcs_log.log");
-static HANDLE hLogFile;
+static LPWSTR lpEventSource = L"tcpsvcs";
+static LPCWSTR lpLogFileName = L"C:\\tcpsvcs_log.log";
+static HANDLE hLogFile = NULL;
+
+static BOOL bWaitingOnRead = FALSE;
+static OVERLAPPED olWrite;
+
// needs work
static VOID
-LogToEventLog(LPCTSTR lpMsg,
+LogToEventLog(LPCWSTR lpMsg,
DWORD errNum,
DWORD exitCode,
UINT flags)
{
HANDLE hEventLog;
- hEventLog = RegisterEventSource(NULL, lpEventSource);
+ hEventLog = RegisterEventSourceW(NULL, lpEventSource);
if (hEventLog)
{
- ReportEvent(hEventLog,
- (flags & LOG_ERROR) ? EVENTLOG_ERROR_TYPE : EVENTLOG_SUCCESS,
- 0,
- 0,
- NULL,
- 1,
- 0,
- &lpMsg,
- NULL);
+ ReportEventW(hEventLog,
+ (flags & LOG_ERROR) ? EVENTLOG_ERROR_TYPE : EVENTLOG_SUCCESS,
+ 0,
+ 0,
+ NULL,
+ 1,
+ 0,
+ &lpMsg,
+ NULL);
CloseEventLog(hEventLog);
}
@@ -44,45 +48,45 @@
static BOOL
OpenLogFile()
{
- hLogFile = CreateFile(lpLogFileName,
- GENERIC_WRITE,
- 0,
- NULL,
- OPEN_ALWAYS,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
- if (hLogFile == INVALID_HANDLE_VALUE)
+ hLogFile = CreateFileW(lpLogFileName,
+ GENERIC_WRITE,
+ 0,
+ NULL,
+ OPEN_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
+ NULL);
+ if (hLogFile == INVALID_HANDLE_VALUE)
+ {
+ hLogFile = NULL;
return FALSE;
+ }
return TRUE;
}
static VOID
-LogToFile(LPCTSTR lpMsg,
+LogToFile(LPCWSTR lpMsg,
DWORD errNum,
DWORD exitCode,
UINT flags)
{
- LPTSTR lpFullMsg = NULL;
+ LPWSTR lpFullMsg = NULL;
DWORD msgLen;
- if (!OpenLogFile())
- return;
-
- msgLen = _tcslen(lpMsg) + 1;
+ msgLen = wcslen(lpMsg) + 1;
if (flags & LOG_ERROR)
{
LPVOID lpSysMsg;
DWORD eMsgLen;
- eMsgLen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
- NULL,
- errNum,
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
- (LPTSTR)&lpSysMsg,
- 0,
- NULL);
+ eMsgLen = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM,
+ NULL,
+ errNum,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+ (LPTSTR)&lpSysMsg,
+ 0,
+ NULL);
msgLen = msgLen + eMsgLen + 40;
@@ -91,9 +95,9 @@
msgLen * sizeof(TCHAR));
if (lpFullMsg)
{
- _sntprintf(lpFullMsg,
+ _snwprintf(lpFullMsg,
msgLen,
- _T("%s : %s\tErrNum = %lu ExitCode = %lu\r\n"),
+ L"%s : %s\tErrNum = %lu ExitCode = %lu\r\n",
lpMsg,
lpSysMsg,
errNum,
@@ -112,9 +116,9 @@
msgLen * sizeof(TCHAR));
if (lpFullMsg)
{
- _sntprintf(lpFullMsg,
+ _snwprintf(lpFullMsg,
msgLen,
- _T("%s\r\n"),
+ L"%s\r\n",
lpMsg);
}
}
@@ -122,17 +126,50 @@
if (lpFullMsg)
{
DWORD bytesWritten;
-
- SetFilePointer(hLogFile, 0, NULL, FILE_END);
-
- WriteFile(hLogFile,
- lpFullMsg,
- _tcslen(lpFullMsg) * sizeof(TCHAR),
- &bytesWritten,
- NULL);
- if (bytesWritten == 0)
- {
- LogToEventLog(_T("Failed to write to log file"),
+ DWORD dwRet;
+ BOOL bRet;
+
+ bRet = WriteFile(hLogFile,
+ lpFullMsg,
+ wcslen(lpFullMsg) * sizeof(WCHAR),
+ &bytesWritten,
+ &olWrite);
+ if (!bRet)
+ {
+ if (GetLastError() != ERROR_IO_PENDING)
+ {
+ bRet = FALSE;
+ }
+ else
+ {
+ // Write is pending
+ dwRet = WaitForSingleObject(olWrite.hEvent, INFINITE);
+
+ switch (dwRet)
+ {
+ // event has been signaled
+ case WAIT_OBJECT_0:
+ {
+ bRet = GetOverlappedResult(hLogFile,
+ &olWrite,
+ &bytesWritten,
+ FALSE);
+ break;
+ }
+
+ default:
+ // An error has occurred in WaitForSingleObject.
+ // This usually indicates a problem with the
+ // OVERLAPPED structure's event handle.
+ bRet = FALSE;
+ break;
+ }
+ }
+ }
+
+ if (!bRet || bytesWritten == 0)
+ {
+ LogToEventLog(L"Failed to write to log file",
GetLastError(),
0,
LOG_EVENTLOG | LOG_ERROR);
@@ -143,8 +180,6 @@
lpFullMsg);
}
- CloseHandle(hLogFile);
-
if (exitCode > 0)
ExitProcess(exitCode);
}
@@ -152,7 +187,7 @@
VOID
-LogEvent(LPCTSTR lpMsg,
+LogEvent(LPCWSTR lpMsg,
DWORD errNum,
DWORD exitCode,
UINT flags)
@@ -165,39 +200,64 @@
LogToEventLog(lpMsg, errNum, exitCode, flags);
}
-VOID
+BOOL
InitLogging()
{
- WCHAR wcBom = 0xFEFF;
-
- DeleteFile(lpLogFileName);
-
-#ifdef _UNICODE
- if (OpenLogFile())
- {
- DWORD bytesWritten;
-
- WriteFile(hLogFile,
- &wcBom,
- sizeof(WCHAR),
- &bytesWritten,
- NULL);
- if (bytesWritten == 0)
- {
- LogToEventLog(_T("Failed to write to log file"),
- GetLastError(),
- 0,
- LOG_EVENTLOG | LOG_ERROR);
- }
-
- CloseHandle(hLogFile);
- }
+#ifdef DEBUG
+ BOOL bRet = FALSE;
+
+ ZeroMemory(&olWrite, sizeof(OVERLAPPED));
+ olWrite.Offset = 0xFFFFFFFF;
+ olWrite.OffsetHigh = 0xFFFFFFFF;
+ olWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+ if (olWrite.hEvent)
+ {
+ DeleteFileW(lpLogFileName);
+
+ if (OpenLogFile())
+ {
+ WCHAR wcBom = 0xFEFF;
+ DWORD bytesWritten;
+
+ bRet = WriteFile(hLogFile,
+ &wcBom,
+ sizeof(WCHAR),
+ &bytesWritten,
+ &olWrite);
+ if (!bRet)
+ {
+ if (GetLastError() != ERROR_IO_PENDING)
+ {
+ LogToEventLog(L"Failed to write to log file",
+ GetLastError(),
+ 0,
+ LOG_EVENTLOG | LOG_ERROR);
+ }
+ else
+ {
+ bRet = TRUE;
+ }
+ }
+ }
+ }
+
+ return bRet;
+#else
+ return TRUE;
#endif
}
VOID
UninitLogging()
{
- FlushFileBuffers(hLogFile);
- CloseHandle(hLogFile);
-}
+ if (hLogFile)
+ {
+ FlushFileBuffers(hLogFile);
+ CloseHandle(hLogFile);
+ }
+
+ if (olWrite.hEvent)
+ {
+ CloseHandle(olWrite.hEvent);
+ }
+}
Modified: trunk/reactos/base/services/tcpsvcs/qotd.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/qotd…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/qotd.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/qotd.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -9,7 +9,7 @@
#include "tcpsvcs.h"
-static LPCTSTR lpFilePath = _T("\\drivers\\etc\\quotes");
+static WCHAR szFilePath[] = L"\\drivers\\etc\\quotes";
static BOOL
SendQuote(SOCKET sock, char* Quote)
@@ -25,33 +25,33 @@
RetrieveQuote(SOCKET sock)
{
HANDLE hFile;
- TCHAR lpFullPath[MAX_PATH + 20];
+ WCHAR szFullPath[MAX_PATH + 20];
DWORD dwBytesRead;
LPSTR lpQuotes;
LPSTR lpStr;
- DWORD quoteNum;
- DWORD NumQuotes = 0;
+ INT quoteNum;
+ INT NumQuotes = 0;
INT i;
- if(!GetSystemDirectory(lpFullPath, MAX_PATH))
+ if(!GetSystemDirectoryW(szFullPath, MAX_PATH))
{
- LogEvent(_T("QOTD: Getting system path failed"), GetLastError(), 0,
LOG_FILE);
+ LogEvent(L"QOTD: Getting system path failed", GetLastError(), 0,
LOG_FILE);
return FALSE;
}
- _tcscat(lpFullPath, lpFilePath);
+ wcscat(szFullPath, szFilePath);
- LogEvent(_T("QOTD: Opening quotes file"), 0, 0, LOG_FILE);
- hFile = CreateFile(lpFullPath,
- GENERIC_READ,
- 0,
- NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- NULL);
+ LogEvent(L"QOTD: Opening quotes file", 0, 0, LOG_FILE);
+ hFile = CreateFileW(szFullPath,
+ GENERIC_READ,
+ 0,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
- LogEvent(_T("QOTD: Error opening quotes file"), GetLastError(), 0,
LOG_FILE);
+ LogEvent(L"QOTD: Error opening quotes file", GetLastError(), 0,
LOG_FILE);
}
else
{
@@ -105,7 +105,7 @@
/* send the quote */
if (!SendQuote(sock, lpStart))
- LogEvent(_T("QOTD: Error sending data"), 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Error sending data", 0, 0, LOG_FILE);
break;
}
else
@@ -133,22 +133,22 @@
if (!RetrieveQuote(sock))
{
- LogEvent(_T("QOTD: Error retrieving quote"), 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Error retrieving quote", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("QOTD: Shutting connection down"), 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Shutting connection down", 0, 0, LOG_FILE);
if (ShutdownConnection(sock, FALSE))
{
- LogEvent(_T("QOTD: Connection is down"), 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Connection is down", 0, 0, LOG_FILE);
}
else
{
- LogEvent(_T("QOTD: Connection shutdown failed"), 0, 0, LOG_FILE);
- LogEvent(_T("QOTD: Terminating thread"), 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Connection shutdown failed", 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Terminating thread", 0, 0, LOG_FILE);
retVal = 1;
}
- LogEvent(_T("QOTD: Terminating thread"), 0, 0, LOG_FILE);
+ LogEvent(L"QOTD: Terminating thread", 0, 0, LOG_FILE);
ExitThread(retVal);
}
Modified: trunk/reactos/base/services/tcpsvcs/skelserver.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/skel…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/skelserver.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/skelserver.c [iso-8859-1] Mon Sep 1 07:51:49
2008
@@ -33,17 +33,17 @@
}
else
{
- LogEvent(_T("listen() failed"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"listen() failed", WSAGetLastError(), 0, LOG_ERROR);
}
}
else
{
- LogEvent(_T("bind() failed"), WSAGetLastError(), 0, LOG_ERROR);
+ LogEvent(L"bind() failed", WSAGetLastError(), 0, LOG_ERROR);
}
}
else
{
- LogEvent(_T("socket() failed"), WSAGetLastError(), 0, LOG_ERROR);
+ LogEvent(L"socket() failed", WSAGetLastError(), 0, LOG_ERROR);
}
return bSetup ? sock : INVALID_SOCKET;
@@ -53,14 +53,14 @@
static VOID
AcceptConnections(SOCKET listeningSocket,
LPTHREAD_START_ROUTINE lpService,
- LPTSTR lpName)
+ LPWSTR lpName)
{
SOCKADDR_IN client;
SOCKET sock;
HANDLE hThread;
TIMEVAL timeVal;
FD_SET readFD;
- TCHAR logBuf[256];
+ WCHAR logBuf[256];
INT timeOut = 2000;
timeVal.tv_sec = timeOut / 1000;
@@ -83,14 +83,14 @@
sock = accept(listeningSocket, (SOCKADDR*)&client, &addrSize);
if (sock != INVALID_SOCKET)
{
- _stprintf(logBuf,
- _T("Accepted connection to %s server from
%s:%d"),
+ _swprintf(logBuf,
+ L"Accepted connection to %s server from %S:%d",
lpName,
inet_ntoa(client.sin_addr),
ntohs(client.sin_port));
LogEvent(logBuf, 0, 0, LOG_FILE);
- _stprintf(logBuf, _T("Creating worker thread for %s"),
lpName);
+ _swprintf(logBuf, L"Creating worker thread for %s",
lpName);
LogEvent(logBuf, 0, 0, LOG_FILE);
if (!bShutdown)
@@ -102,7 +102,7 @@
}
else
{
- _stprintf(logBuf, _T("Failed to start worker thread for
the %s server"),
+ _swprintf(logBuf, L"Failed to start worker thread for
the %s server",
lpName);
LogEvent(logBuf, 0, 0, LOG_FILE);
}
@@ -110,13 +110,13 @@
}
else
{
- LogEvent(_T("accept failed"), WSAGetLastError(), 0,
LOG_ERROR);
+ LogEvent(L"accept failed", WSAGetLastError(), 0,
LOG_ERROR);
}
}
}
else if (selRet == SOCKET_ERROR)
{
- LogEvent(_T("select failed"), WSAGetLastError(), 0, LOG_ERROR);
+ LogEvent(L"select failed", WSAGetLastError(), 0, LOG_ERROR);
}
}
}
@@ -125,14 +125,14 @@
ShutdownConnection(SOCKET sock,
BOOL bRec)
{
- TCHAR logBuf[256];
+ WCHAR logBuf[256];
/* Disallow any further data sends. This will tell the other side
that we want to go away now. If we skip this step, we don't
shut the connection down nicely. */
if (shutdown(sock, SD_SEND) == SOCKET_ERROR)
{
- LogEvent(_T("Error in shutdown()"), WSAGetLastError(), 0, LOG_ERROR);
+ LogEvent(L"Error in shutdown()", WSAGetLastError(), 0, LOG_ERROR);
return FALSE;
}
@@ -148,7 +148,7 @@
ret = recv(sock, readBuffer, BUF, 0);
if (ret >= 0)
{
- _stprintf(logBuf, _T("FYI, received %d unexpected bytes during
shutdown"), ret);
+ _swprintf(logBuf, L"FYI, received %d unexpected bytes during
shutdown", ret);
LogEvent(logBuf, 0, 0, LOG_FILE);
}
} while (ret > 0);
@@ -169,7 +169,7 @@
pServices = (PSERVICES)lpParam;
- _stprintf(logBuf, _T("Starting %s server"), pServices->Name);
+ _swprintf(logBuf, L"Starting %s server", pServices->lpName);
LogEvent(logBuf, 0, 0, LOG_FILE);
if (!bShutdown)
@@ -177,23 +177,23 @@
listeningSocket = SetUpListener(htons(pServices->Port));
if (!bShutdown && listeningSocket != INVALID_SOCKET)
{
- _stprintf(logBuf,
- _T("%s is waiting for connections on port %d"),
- pServices->Name,
+ _swprintf(logBuf,
+ L"%s is waiting for connections on port %d",
+ pServices->lpName,
pServices->Port);
LogEvent(logBuf, 0, 0, LOG_FILE);
- AcceptConnections(listeningSocket, pServices->Service,
pServices->Name);
+ AcceptConnections(listeningSocket, pServices->lpService,
pServices->lpName);
}
else
{
- LogEvent(_T("Socket error when setting up listener"), 0, 0,
LOG_FILE);
+ LogEvent(L"Socket error when setting up listener", 0, 0,
LOG_FILE);
}
}
- _stprintf(logBuf,
- _T("Exiting %s thread"),
- pServices->Name);
+ _swprintf(logBuf,
+ L"Exiting %s thread",
+ pServices->lpName);
LogEvent(logBuf, 0, 0, LOG_FILE);
ExitThread(0);
}
Modified: trunk/reactos/base/services/tcpsvcs/tcpsvcs.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/tcps…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/tcpsvcs.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/tcpsvcs.c [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -9,7 +9,7 @@
#include "tcpsvcs.h"
-static LPTSTR ServiceName = _T("tcpsvcs");
+static WCHAR ServiceName[] = L"tcpsvcs";
volatile BOOL bShutdown = FALSE;
volatile BOOL bPause = FALSE;
@@ -23,11 +23,11 @@
static SERVICES
Services[NUM_SERVICES] =
{
- {ECHO_PORT, _T("Echo"), EchoHandler},
- {DISCARD_PORT, _T("Discard"), DiscardHandler},
- {DAYTIME_PORT, _T("Daytime"), DaytimeHandler},
- {QOTD_PORT, _T("QOTD"), QotdHandler},
- {CHARGEN_PORT, _T("Chargen"), ChargenHandler}
+ {ECHO_PORT, L"Echo", EchoHandler},
+ {DISCARD_PORT, L"Discard", DiscardHandler},
+ {DAYTIME_PORT, L"Daytime", DaytimeHandler},
+ {QOTD_PORT, L"QOTD", QotdHandler},
+ {CHARGEN_PORT, L"Chargen", ChargenHandler}
};
@@ -36,7 +36,7 @@
DWORD NewStatus,
DWORD Check)
{
- TCHAR szSet[50];
+ WCHAR szSet[50];
if (Check > 0)
pServInfo->servStatus.dwCheckPoint += Check;
@@ -46,15 +46,15 @@
if (NewStatus > 0)
pServInfo->servStatus.dwCurrentState = NewStatus;
- _sntprintf(szSet,
+ _snwprintf(szSet,
49,
- _T("Service state 0x%lu, CheckPoint %lu"),
+ L"Service state 0x%lu, CheckPoint %lu",
pServInfo->servStatus.dwCurrentState,
pServInfo->servStatus.dwCheckPoint);
LogEvent(szSet, 0, 0, LOG_FILE);
if (!SetServiceStatus(pServInfo->hStatus, &pServInfo->servStatus))
- LogEvent(_T("Cannot set service status"), GetLastError(), 0, LOG_ALL);
+ LogEvent(L"Cannot set service status", GetLastError(), 0, LOG_ALL);
}
@@ -64,25 +64,25 @@
DWORD dwThreadId[NUM_SERVICES];
HANDLE hThread[NUM_SERVICES];
WSADATA wsaData;
- TCHAR buf[256];
+ WCHAR buf[256];
INT i;
DWORD RetVal;
if ((RetVal = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0)
{
- _stprintf(buf, _T("WSAStartup() failed : %lu\n"), RetVal);
+ _swprintf(buf, L"WSAStartup() failed : %lu\n", RetVal);
LogEvent(buf, 0, 100, LOG_ALL);
return FALSE;
}
UpdateStatus(pServInfo, 0, 1);
- LogEvent(_T("\nCreating server Threads"), 0, 0, LOG_FILE);
+ LogEvent(L"\nCreating server Threads", 0, 0, LOG_FILE);
/* Create worker threads. */
- for(i = 0; i < NUM_SERVICES; i++)
- {
- _stprintf(buf, _T("Creating thread for %s server"), Services[i].Name);
+ for (i = 0; i < NUM_SERVICES; i++)
+ {
+ _swprintf(buf, L"Creating thread for %s server", Services[i].lpName);
LogEvent(buf, 0, 0, LOG_FILE);
hThread[i] = CreateThread(NULL,
@@ -94,26 +94,26 @@
if (hThread[i] == NULL)
{
- _stprintf(buf, _T("\nFailed to start %s server\n"),
Services[i].Name);
+ _swprintf(buf, L"\nFailed to start %s server\n",
Services[i].lpName);
LogEvent(buf, GetLastError(), 0, LOG_ALL);
}
UpdateStatus(pServInfo, 0, 1);
}
- LogEvent(_T("Setting service status to running"), 0, 0, LOG_FILE);
+ LogEvent(L"Setting service status to running", 0, 0, LOG_FILE);
UpdateStatus(pServInfo, SERVICE_RUNNING, 0);
/* Wait until all threads have terminated. */
WaitForMultipleObjects(NUM_SERVICES, hThread, TRUE, INFINITE);
- for(i = 0; i < NUM_SERVICES; i++)
+ for (i = 0; i < NUM_SERVICES; i++)
{
if (hThread[i] != NULL)
CloseHandle(hThread[i]);
}
- LogEvent(_T("Detaching Winsock2"), 0, 0, LOG_FILE);
+ LogEvent(L"Detaching Winsock2", 0, 0, LOG_FILE);
WSACleanup();
return 0;
@@ -131,7 +131,7 @@
{
case SERVICE_CONTROL_SHUTDOWN:
case SERVICE_CONTROL_STOP:
- LogEvent(_T("\nSetting the service to SERVICE_STOP_PENDING"), 0, 0,
LOG_FILE);
+ LogEvent(L"\nSetting the service to SERVICE_STOP_PENDING", 0, 0,
LOG_FILE);
InterlockedExchange((LONG *)&bShutdown, TRUE);
pServInfo->servStatus.dwWin32ExitCode = 0;
pServInfo->servStatus.dwWaitHint = 0;
@@ -139,13 +139,13 @@
break;
case SERVICE_CONTROL_PAUSE: /* not yet implemented */
- LogEvent(_T("Setting the service to SERVICE_PAUSED"), 0, 0,
LOG_FILE);
+ LogEvent(L"Setting the service to SERVICE_PAUSED", 0, 0,
LOG_FILE);
InterlockedExchange((LONG *)&bPause, TRUE);
UpdateStatus(pServInfo, SERVICE_PAUSED, 0);
break;
case SERVICE_CONTROL_CONTINUE:
- LogEvent(_T("Setting the service to SERVICE_RUNNING"), 0, 0,
LOG_FILE);
+ LogEvent(L"Setting the service to SERVICE_RUNNING", 0, 0,
LOG_FILE);
InterlockedExchange((LONG *)&bPause, FALSE);
UpdateStatus(pServInfo, SERVICE_RUNNING, 0);
break;
@@ -155,19 +155,19 @@
default:
if (dwControl > 127 && dwControl < 256) /* user defined */
- LogEvent(_T("User defined control code"), 0, 0, LOG_FILE);
+ LogEvent(L"User defined control code", 0, 0, LOG_FILE);
else
- LogEvent(_T("ERROR: Bad control code"), 0, 0, LOG_FILE);
+ LogEvent(L"ERROR: Bad control code", 0, 0, LOG_FILE);
break;
}
}
VOID WINAPI
-ServiceMain(DWORD argc, LPTSTR argv[])
+ServiceMain(DWORD argc, LPWSTR argv[])
{
SERVICEINFO servInfo;
- LogEvent (_T("Entering ServiceMain."), 0, 0, LOG_FILE);
+ LogEvent(L"Entering ServiceMain.", 0, 0, LOG_FILE);
servInfo.servStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
servInfo.servStatus.dwCurrentState = SERVICE_STOPPED;
@@ -177,12 +177,12 @@
servInfo.servStatus.dwCheckPoint = 0;
servInfo.servStatus.dwWaitHint = 2 * CS_TIMEOUT;
- LogEvent(_T("Registering service control handler"), 0, 0, LOG_FILE);
- servInfo.hStatus = RegisterServiceCtrlHandlerEx(ServiceName,
-
(LPHANDLER_FUNCTION_EX)ServerCtrlHandler,
- &servInfo);
+ LogEvent(L"Registering service control handler", 0, 0, LOG_FILE);
+ servInfo.hStatus = RegisterServiceCtrlHandlerExW(ServiceName,
+
(LPHANDLER_FUNCTION_EX)ServerCtrlHandler,
+ &servInfo);
if (!servInfo.hStatus)
- LogEvent(_T("Failed to register service\n"), GetLastError(), 100,
LOG_ALL);
+ LogEvent(L"Failed to register service", GetLastError(), 100, LOG_ALL);
UpdateStatus(&servInfo, SERVICE_START_PENDING, 1);
@@ -193,27 +193,28 @@
return;
}
- LogEvent(_T("Service threads shut down. Set SERVICE_STOPPED status"), 0, 0,
LOG_FILE);
+ LogEvent(L"Service threads shut down. Set SERVICE_STOPPED status", 0, 0,
LOG_FILE);
UpdateStatus(&servInfo, SERVICE_STOPPED, 0);
- LogEvent(_T("Leaving ServiceMain\n"), 0, 0, LOG_FILE);
+ LogEvent(L"Leaving ServiceMain\n", 0, 0, LOG_FILE);
}
int _tmain (int argc, LPTSTR argv [])
{
- SERVICE_TABLE_ENTRY ServiceTable[] =
+ SERVICE_TABLE_ENTRYW ServiceTable[] =
{
{ServiceName, ServiceMain},
{NULL, NULL }
};
- InitLogging();
-
- if (!StartServiceCtrlDispatcher(ServiceTable))
- LogEvent(_T("failed to start the service control dispatcher"),
GetLastError(), 101, LOG_ALL);
-
- UninitLogging();
+ if (InitLogging())
+ {
+ if (!StartServiceCtrlDispatcherW(ServiceTable))
+ LogEvent(L"failed to start the service control dispatcher",
GetLastError(), 101, LOG_ALL);
+
+ UninitLogging();
+ }
return 0;
}
Modified: trunk/reactos/base/services/tcpsvcs/tcpsvcs.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/tcpsvcs/tcps…
==============================================================================
--- trunk/reactos/base/services/tcpsvcs/tcpsvcs.h [iso-8859-1] (original)
+++ trunk/reactos/base/services/tcpsvcs/tcpsvcs.h [iso-8859-1] Mon Sep 1 07:51:49 2008
@@ -2,6 +2,10 @@
#include <winsock2.h>
#include <tchar.h>
#include <time.h>
+
+#ifndef _MSC_VER
+#define _swprintf swprintf
+#endif
#define LOG_FILE 1
#define LOG_EVENTLOG 2
@@ -20,19 +24,20 @@
/* data structure to pass to threads */
-typedef struct _Services {
+typedef struct _Services
+{
USHORT Port;
- TCHAR *Name;
- LPTHREAD_START_ROUTINE Service;
+ LPWSTR lpName;
+ LPTHREAD_START_ROUTINE lpService;
} SERVICES, *PSERVICES;
extern volatile BOOL bShutdown;
extern volatile BOOL bPause;
/* logging functions */
-VOID InitLogging();
+BOOL InitLogging();
VOID UninitLogging();
-VOID LogEvent(LPCTSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags);
+VOID LogEvent(LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags);
/* skelserver functions */
DWORD WINAPI StartServer(LPVOID lpParam);