#include "SmsDaemon.h" #include #include #include #include "Common.h" #include "ISmsTransceiver.h" #include "Plugin.h" #include "kbhit.h" #include "Util.h" #include "TaskManager.h" #include "PluginManager.h" #include "ConfigFile.h" #include "Logger.h" #include "AccessManager.h" #include "version.h" using namespace std; void SmsDaemon::CreateLogMessage(SMS& sms,bool hasPlugin) { ostringstream os; os << "Recieved sms from " << sms.GetSender() << " ; command=" << sms.ExtractCommand(); if (!hasPlugin) os << " -- PLUGIN NOT FOUND"; Logger::logMessage(os.str()); } void SmsDaemon::CheckSms() { const int INTERVAL = 1000; //no of milliseconds between sms checks timeval now = Util::GetTimeOfDay(); if ( Util::mTimeDiff(_lastSmsCheck,now) < INTERVAL) return; _lastSmsCheck = now; Common* cmn = Common::instance(); PluginManager* manager = cmn->GetPluginManager(); vector sms = _modem.ReadSms(); for (unsigned int i=0; iGetPlugin(cmd); CreateLogMessage(sms[i], pl != 0); if (pl) { pl->Execute(_modem, sms[i]); } else { _modem.SendSms(sms[i].GetSender(), "Unknown command!", false); } cmn->smsCounter.incomming++; } } void SmsDaemon::MainLoop() { Common* cmn = Common::instance(); volatile bool& mainContinue = cmn->mainContinue; volatile bool& reloadConfig = cmn->reloadConfig; mainContinue = true; while (mainContinue) { CheckSms(); cmn->GetTaskManager()->ExecuteTasks(_modem); if (cmn->isDebug && kbhit()) break; if (reloadConfig) ReloadConfig(); Util::Sleep(100); } } void SmsDaemon::ReloadConfig() { Common* cmn = Common::instance(); cmn->reloadConfig = false; cmn->GetConfigfile()->Reload(); cmn->GetPluginManager()->DestroyPlugins(); cmn->GetPluginManager()->LoadPlugins(); cmn->GetTaskManager()->DestroyTasks(); cmn->GetTaskManager()->LoadTasks(); AccessManager::Load(); //reload blaclist & privileged list } void SmsDaemon::Start() { Common* cmn = Common::instance(); string transceiver = cmn->GetConfigfile()->GetValue("smsdaemon","transceiver"); srand(time(0)); cmn->daemonStart = time(0); _lastSmsCheck = Util::GetTimeOfDay(); Logger::logMessage("--------------------------------"); Logger::logMessage( VERSION ); Logger::logMessage( SVNVERSION ); Logger::logMessage( string("Transceiver: ") + transceiver ); AccessManager::Load(); //reload blaclist & privileged list cmn->GetTaskManager()->LoadTasks(); cmn->GetPluginManager()->LoadPlugins(); Logger::logMessage("SMS daemon started"); try { MainLoop(); } catch (std::exception& e) { Logger::logMessage( e.what() ); } catch (...) { Logger::logMessage( "Caught unknown exception" ); } cmn->GetPluginManager()->DestroyPlugins(); Logger::logMessage( cmn->getStatusMessage() ); }