114 lines
2.9 KiB
C++
114 lines
2.9 KiB
C++
#include <WatchDog/Evaluator.hpp>
|
|
|
|
void Evaluator::evaluate(void)
|
|
{
|
|
Block<String> appKeys;
|
|
Block<String> notifyKeys;
|
|
|
|
if(!getAppKeys(appKeys))return;
|
|
evaluateAppKeys(appKeys);
|
|
if(!getNotifyKeys(notifyKeys))return;
|
|
evaluateNotifyKeys(notifyKeys);
|
|
}
|
|
|
|
bool Evaluator::getAppKeys(Block<String> &keys)
|
|
{
|
|
RegKey regKey(RegKey::LocalMachine);
|
|
DWORD index=0;
|
|
String key;
|
|
String value;
|
|
|
|
keys.remove();
|
|
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Apps"))return false;
|
|
while(true)
|
|
{
|
|
if(!regKey.enumKey(index++,key))break;
|
|
keys.insert(&key);
|
|
}
|
|
return keys.size()?true:false;
|
|
}
|
|
|
|
bool Evaluator::getNotifyKeys(Block<String> &keys)
|
|
{
|
|
RegKey regKey(RegKey::LocalMachine);
|
|
DWORD index=0;
|
|
String key;
|
|
String value;
|
|
|
|
keys.remove();
|
|
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Notify"))return false;
|
|
while(true)
|
|
{
|
|
if(!regKey.enumKey(index++,key))break;
|
|
keys.insert(&key);
|
|
}
|
|
return keys.size()?true:false;
|
|
}
|
|
|
|
void Evaluator::evaluateAppKeys(Block<String> &keys)
|
|
{
|
|
String strAppPath;
|
|
String strRun;
|
|
String strStartIn;
|
|
String strArgs;
|
|
String strPause;
|
|
|
|
for(int index=0;index<keys.size();index++)
|
|
{
|
|
RegKey regKey(RegKey::LocalMachine);
|
|
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Apps\\"+keys[index]))continue;
|
|
regKey.queryValue("Run",strRun);
|
|
if(!(strRun=="true"))continue;
|
|
regKey.queryValue("AppPath",strAppPath);
|
|
regKey.queryValue("StartIn",strStartIn);
|
|
regKey.queryValue("Args",strArgs);
|
|
regKey.queryValue("Pause",strPause);
|
|
Process process;
|
|
process.createProcess(strAppPath,false,strStartIn,strArgs);
|
|
if(!strPause.isNull())::Sleep(strPause.toInt());
|
|
}
|
|
}
|
|
|
|
void Evaluator::evaluateNotifyKeys(Block<String> &keys)
|
|
{
|
|
String strEmail;
|
|
String strHost;
|
|
String strDomainSender;
|
|
String strSender;
|
|
Block<String> mailData;
|
|
|
|
RegKey regKey(RegKey::LocalMachine);
|
|
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Notify"))return;
|
|
if(!regKey.queryValue("Host",strHost))return;
|
|
if(!regKey.queryValue("Sender",strSender))return;
|
|
if(!regKey.queryValue("DomainSender",strDomainSender))return;
|
|
for(int index=0;index<keys.size();index++)
|
|
{
|
|
RegKey regKey(RegKey::LocalMachine);
|
|
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Notify\\"+keys[index]))continue;
|
|
regKey.queryValue("EMAIL",strEmail);
|
|
SMTPClient smtp;
|
|
if(!smtp.open(strHost))continue;
|
|
if(!smtp.helo(strDomainSender))
|
|
{
|
|
smtp.quit();
|
|
continue;
|
|
}
|
|
if(!smtp.mail(strSender))
|
|
{
|
|
smtp.quit();
|
|
continue;
|
|
}
|
|
smtp.rcpt(strEmail);
|
|
mailData.insert(&String(String("To: ")+strEmail));
|
|
mailData.insert(&String(String("Reply-To: ")+strSender));
|
|
mailData.insert(&String(String("From: ")+strSender));
|
|
mailData.insert(&String(String("Subject: WatchDog")));
|
|
mailData.insert(&String("\n"));
|
|
mailData.insert(&String("\n"));
|
|
mailData.insert(&String("WatchDog startup process"));
|
|
smtp.data(mailData);
|
|
smtp.quit();
|
|
smtp.close();
|
|
}
|
|
} |