#include "srvapp.h" HANDLE hLogFile; extern BOOL gbLogging; LPSTR lpszLineErrs[] = { "SUCCESS", "ALLOCATED", "BADDEVICEID", "BEARERMODEUNAVAIL", "inval err code (0x80000004)", // 0x80000004 isn't valid err code "CALLUNAVAIL", "COMPLETIONOVERRUN", "CONFERENCEFULL", "DIALBILLING", "DIALDIALTONE", "DIALPROMPT", "DIALQUIET", "INCOMPATIBLEAPIVERSION", "INCOMPATIBLEEXTVERSION", "INIFILECORRUPT", "INUSE", "INVALADDRESS", // 0x80000010 "INVALADDRESSID", "INVALADDRESSMODE", "INVALADDRESSSTATE", "INVALAPPHANDLE", "INVALAPPNAME", "INVALBEARERMODE", "INVALCALLCOMPLMODE", "INVALCALLHANDLE", "INVALCALLPARAMS", "INVALCALLPRIVILEGE", "INVALCALLSELECT", "INVALCALLSTATE", "INVALCALLSTATELIST", "INVALCARD", "INVALCOMPLETIONID", "INVALCONFCALLHANDLE", // 0x80000020 "INVALCONSULTCALLHANDLE", "INVALCOUNTRYCODE", "INVALDEVICECLASS", "INVALDEVICEHANDLE", "INVALDIALPARAMS", "INVALDIGITLIST", "INVALDIGITMODE", "INVALDIGITS", "INVALEXTVERSION", "INVALGROUPID", "INVALLINEHANDLE", "INVALLINESTATE", "INVALLOCATION", "INVALMEDIALIST", "INVALMEDIAMODE", "INVALMESSAGEID", // 0x80000030 "inval err code (0x80000031)", // 0x80000031 isn't valid err code "INVALPARAM", "INVALPARKID", "INVALPARKMODE", "INVALPOINTER", "INVALPRIVSELECT", "INVALRATE", "INVALREQUESTMODE", "INVALTERMINALID", "INVALTERMINALMODE", "INVALTIMEOUT", "INVALTONE", "INVALTONELIST", "INVALTONEMODE", "INVALTRANSFERMODE", "LINEMAPPERFAILED", // 0x80000040 "NOCONFERENCE", "NODEVICE", "NODRIVER", "NOMEM", "NOREQUEST", "NOTOWNER", "NOTREGISTERED", "OPERATIONFAILED", "OPERATIONUNAVAIL", "RATEUNAVAIL", "RESOURCEUNAVAIL", "REQUESTOVERRUN", "STRUCTURETOOSMALL", "TARGETNOTFOUND", "TARGETSELF", "UNINITIALIZED", // 0x80000050 "USERUSERINFOTOOBIG", "REINIT", "ADDRESSBLOCKED", "BILLINGREJECTED", "INVALFEATURE", "NOMULTIPLEINSTANCE" }; BOOL InitLogging(LPSTR lpszFileDirectory) { LPSTR lpszFileNameBuffer, lpszBuffer, lpszComputerNameBuffer; SYSTEMTIME st; DWORD dwSize; HANDLE hUserFile; #ifdef ENHANCE_LOG SYSTEM_INFO SysInfo; char lpszArchitecture[8]; #endif if (!gbLogging) return TRUE; lpszFileNameBuffer = (LPSTR) LocalAlloc(LPTR, MAX_PATH+1); GetSystemTime(&st); wsprintf(lpszFileNameBuffer, "%s%s%02d%02d%02d", lpszFileDirectory, "\\TAPISTRESSSRV_", st.wHour, st.wMinute, st.wSecond); hLogFile = CreateFile(lpszFileNameBuffer, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hLogFile == INVALID_HANDLE_VALUE) { hLogFile = 0; LocalFree(lpszFileNameBuffer); return FALSE; } wsprintf(lpszFileNameBuffer, "%s\\users.txt", lpszFileDirectory); hUserFile = CreateFile(lpszFileNameBuffer, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hUserFile == INVALID_HANDLE_VALUE) { return FALSE; } lpszBuffer = (LPSTR)GlobalAlloc(GPTR, 1024); lpszComputerNameBuffer = (LPSTR)GlobalAlloc(GPTR, 1024); SetFilePointer(hUserFile, 0, NULL, FILE_END); dwSize = MAX_PATH; GetUserName(lpszFileNameBuffer, &dwSize); dwSize = MAX_PATH; GetComputerName(lpszComputerNameBuffer, &dwSize); #ifdef ENHANCE_LOG GetSystemInfo(&SysInfo); switch (SysInfo.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_INTEL : wsprintf(lpszArchitecture, "INTEL "); break; case PROCESSOR_ARCHITECTURE_ALPHA : wsprintf(lpszArchitecture, "ALPHA "); break; case PROCESSOR_ARCHITECTURE_MIPS : wsprintf(lpszArchitecture, "MIPS "); break; case PROCESSOR_ARCHITECTURE_PPC : wsprintf(lpszArchitecture, "PPC "); break; case PROCESSOR_ARCHITECTURE_UNKNOWN : wsprintf(lpszArchitecture, "UNKNOWN"); break; } wsprintf(lpszBuffer, "LOGON %15s from %15s(%s) at %02d:%02d:%02d %02d-%02d-%02d\n\r", lpszFileNameBuffer, lpszComputerNameBuffer, lpszArchitecture, st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear); #else // !ENHANCE_LOG wsprintf(lpszBuffer, "NAME: %s COMPUTER: %s TIME: %02d%02d%02d DATE: %02d%02d%02d\n\r", lpszFileNameBuffer, lpszComputerNameBuffer, st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear); #endif // !ENHANCE_LOG WriteFile(hUserFile, lpszBuffer, lstrlen(lpszBuffer), &dwSize, NULL); CloseHandle(hUserFile); LocalFree(lpszFileNameBuffer); GlobalFree(lpszBuffer); GlobalFree(lpszComputerNameBuffer); return TRUE; } void LogTapiError(LPSTR lpszFunction, LONG lResult) { char szBuffer[256]; DWORD dwBytes; SYSTEMTIME st; if (!gbLogging) return; if (hLogFile == 0) return; GetSystemTime(&st); wsprintf(szBuffer, "%02d:%02d:%02d:%04d:\t%s FAILED with %s\r\n", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, lpszFunction, lpszLineErrs[LOWORD(lResult)]); WriteFile(hLogFile, szBuffer, strlen(szBuffer), &dwBytes, NULL); } void CloseLogging(LPSTR lpszFileDirectory, LONG lLineReplies) { char szBuffer[64]; DWORD dwBytes, dwSize; LPSTR lpszComputerNameBuffer, lpszNameBuffer, lpszBuffer; SYSTEMTIME st; HANDLE hUserFile; lpszComputerNameBuffer = (LPSTR)GlobalAlloc(GPTR, MAX_PATH); lpszNameBuffer = (LPSTR)GlobalAlloc(GPTR, MAX_PATH); lpszBuffer = (LPSTR)GlobalAlloc(GPTR, 1024); wsprintf(lpszNameBuffer, "%s\\users.txt", lpszFileDirectory); hUserFile = CreateFile(lpszNameBuffer, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hUserFile == INVALID_HANDLE_VALUE) { goto close_real_log; } SetFilePointer(hUserFile, 0, NULL, FILE_END); dwSize = MAX_PATH; GetUserName(lpszNameBuffer, &dwSize); dwSize = MAX_PATH; GetComputerName(lpszComputerNameBuffer, &dwSize); GetSystemTime(&st); #ifdef ENHANCE_LOG { SYSTEM_INFO SysInfo; char lpszArchitecture[8]; GetSystemInfo(&SysInfo); switch (SysInfo.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_INTEL : wsprintf(lpszArchitecture, "INTEL "); break; case PROCESSOR_ARCHITECTURE_ALPHA : wsprintf(lpszArchitecture, "ALPHA "); break; case PROCESSOR_ARCHITECTURE_MIPS : wsprintf(lpszArchitecture, "MIPS "); break; case PROCESSOR_ARCHITECTURE_PPC : wsprintf(lpszArchitecture, "PPC "); break; case PROCESSOR_ARCHITECTURE_UNKNOWN : wsprintf(lpszArchitecture, "UNKNOWN"); break; } wsprintf(lpszBuffer, "LOGOFF %15s from %15s(%s) at %02d:%02d:%02d %02d-%02d-%02d\n\r", lpszNameBuffer, lpszComputerNameBuffer, lpszArchitecture, st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear); } #else // !ENHANCE_LOG wsprintf(lpszBuffer, "LOGOFF: NAME: %s COMPUTER: %s TIME: %02d%02d%02d DATE: %02d%02d%02d\n\r", lpszNameBuffer, lpszComputerNameBuffer, st.wHour, st.wMinute, st.wSecond, st.wMonth, st.wDay, st.wYear); #endif // !ENHANCE_LOG WriteFile(hUserFile, lpszBuffer, lstrlen(lpszBuffer), &dwSize, NULL); CloseHandle(hUserFile); close_real_log: GlobalFree(lpszComputerNameBuffer); GlobalFree(lpszNameBuffer); GlobalFree(lpszBuffer); if (!gbLogging) return; wsprintf(szBuffer, "LEFT OVER LINE REPLIES %lu\r\n", lLineReplies); WriteFile(hLogFile, szBuffer, strlen(szBuffer), &dwBytes, NULL); CloseHandle(hLogFile); }