Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

171 lines
5.6 KiB

#include "global.h"
#include "ini.h"
// constructor
CkdMonINI::CkdMonINI() {
dwServerCount = 0;
ppszServerNameArray = NULL;
}
BOOL CkdMonINI::LoadValues(_TCHAR szINIFile[])
{
//
// Information in "Service" section of INI file
//
GetPrivateProfileString( (LPCTSTR)(_T("Service")),
(LPCTSTR)(_T("FromMailID")),
(LPCTSTR)(_T("")), // this parameter can not be NULL
(LPTSTR) szFromMailID,
sizeof(szFromMailID)/sizeof(_TCHAR), // size in _TCHARs
(LPCTSTR) szINIFile);
// return if the MailID string is not there in INI file
if ( _tcscmp(szFromMailID, _T("")) == 0 ) {
AddServiceLog(_T("Error: From Mail ID is missing in INI file\r\n"));
LogFatalEvent(_T("From Mail ID is missing in INI file"));
return FALSE;
}
GetPrivateProfileString( (LPCTSTR)(_T("Service")),
(LPCTSTR)(_T("ToMailID")),
(LPCTSTR)(_T("")), // this parameter can not be NULL
(LPTSTR) szToMailID,
sizeof(szToMailID)/sizeof(_TCHAR), // size in _TCHARs
(LPCTSTR) szINIFile);
// return if the MailID string is not there in INI file
if ( _tcscmp(szToMailID, _T("")) == 0 ) {
AddServiceLog(_T("Error: To Mail ID is missing in INI file\r\n"));
LogFatalEvent(_T("To Mail ID is missing in INI file"));
return FALSE;
}
// Time after which logfile scanning is to be repeated. This is in minutes
dwRepeatTime = (DWORD)GetPrivateProfileInt( (LPCTSTR)(_T("Service")),
(LPCTSTR)(_T("RepeatTime")),
60,
(LPCTSTR) szINIFile);
// validate dwRepeatTime
if ( dwRepeatTime < 1 ) dwRepeatTime = 60;
// Debugger log file
// It will be something like C:\Debuggers\FailedAddCrash.log
GetPrivateProfileString( (LPCTSTR)(_T("Service")),
(LPCTSTR)(_T("DebuggerLogFile")),
(LPCTSTR)(_T("C$\\Debuggers\\FailedAddCrash.log")),
(LPTSTR) szDebuggerLogFile,
sizeof(szDebuggerLogFile)/sizeof(_TCHAR), // size in _TCHARs
(LPCTSTR) szINIFile);
// Log archive
// Dir where the previous logs will be stored
GetPrivateProfileString( (LPCTSTR)(_T("Service")),
(LPCTSTR)(_T("DebuggerLogArchiveDir")),
(LPCTSTR)(_T("C:\\")),
(LPTSTR) szDebuggerLogArchiveDir,
sizeof(szDebuggerLogArchiveDir)/sizeof(_TCHAR), // size in _TCHARs
(LPCTSTR) szINIFile);
// Threshold failures per server after which alert mail is to be sent out
// This Threshold is per server basis
dwDebuggerThreshold = (DWORD)GetPrivateProfileInt( (LPCTSTR)(_T("Service")),
(LPCTSTR)(_T("DebuggerThreshold")),
10,
(LPCTSTR) szINIFile);
// validate dwDebuggerThreshold
if ( dwDebuggerThreshold < 1 ) dwDebuggerThreshold = 10;
GetPrivateProfileSection( (LPCTSTR) (_T("RPT Servers")),
(LPTSTR) szServers,
sizeof(szServers)/sizeof(_TCHAR),
(LPCTSTR) szINIFile);
BOOL bRet;
// seperate out the individual server names from szServers string
bRet = SeperateServerStrings();
if ( bRet == FALSE ) return FALSE;
return TRUE;
}
// seperate the Servers string got from INI file
// the format of the string will be tkwucdrpta01'\0'tkwucdrpta02'\0'tkwucdrpta03'\0''\0'
BOOL CkdMonINI::SeperateServerStrings()
{
// SeperateServerStrings gets called every time you read INI
// and you read INI every dwRepeatTime
// So we need to free the ppszServerNameArray out of previous execution of this
// function
for(DWORD i = 0; i < dwServerCount; i++) {
free(ppszServerNameArray[i]);
}
if ( ppszServerNameArray != NULL )
free(ppszServerNameArray);
// temperory pointer to move through the szServers string
_TCHAR* pszServers;
pszServers = szServers;
dwServerCount = 0;
ppszServerNameArray = NULL;
// the format of the szServers will be
// tkwucdrpta01'\0'tkwucdrpta02'\0'tkwucdrpta03'\0''\0'
while(1) {
if( *pszServers == _T('\0') )
break;
dwServerCount++;
// allocate memory for ppszServerNameArray
if ( ppszServerNameArray == NULL ) {
ppszServerNameArray = (_TCHAR **) malloc (dwServerCount * sizeof(_TCHAR**));
if ( ppszServerNameArray == NULL ) {
AddServiceLog(_T("Error: SeperateServerStrings->malloc: Insufficient memory available\r\n"));
LogFatalEvent(_T("SeperateServerStrings->malloc: Insufficient memory available"));
return FALSE;
}
}
else {
ppszServerNameArray = (_TCHAR **) realloc ( ppszServerNameArray,
dwServerCount * sizeof(_TCHAR**));
if ( ppszServerNameArray == NULL ) {
AddServiceLog(_T("Error: SeperateServerStrings->realloc: Insufficient memory available\r\n"));
LogFatalEvent(_T("SeperateServerStrings->realloc: Insufficient memory available"));
return FALSE;
}
}
ppszServerNameArray[dwServerCount - 1] =
(_TCHAR *) malloc ( (_tcslen(pszServers) + 1) * sizeof(_TCHAR) );
if ( ppszServerNameArray[dwServerCount - 1] == NULL ) {
AddServiceLog(_T("Error: SeperateServerStrings->malloc: Insufficient memory available\r\n"));
LogFatalEvent(_T("SeperateServerStrings->malloc: Insufficient memory available"));
return FALSE;
}
_tcscpy(ppszServerNameArray[dwServerCount - 1], pszServers);
// take pszServers one character beyond the end of the string
pszServers += _tcslen(pszServers);
// advance to the next string
pszServers++;
}
return TRUE;
}
// destructor
CkdMonINI::~CkdMonINI()
{
// free the whole ppszServerNameArray
for(DWORD i = 0; i < dwServerCount; i++) {
free(ppszServerNameArray[i]);
}
if ( ppszServerNameArray != NULL )
free(ppszServerNameArray);
}