#include #include #include #include "daemon.h" #include "common.h" #include "GsmModem.h" #include "SerialPort.h" #include "Plugin.h" #include "kbhit.h" #include "util.h" using namespace std; using namespace Util; void create_log_message(SMS& sms,bool hasPlugin) { ostringstream os; os << "Recieved sms from " << sms.sender << " ; command=" << GetSmsCommand(sms); if (!hasPlugin) os << " -- PLUGIN NOT FOUND"; Common::instance()->logMessage(os.str()); } void main_loop(GsmModem& modem) { Common* cmn = Common::instance(); volatile bool& mainContinue = cmn->mainContinue; PluginManager& manager = cmn->pluginManager; mainContinue = true; while (mainContinue) { vector sms = modem.ReadSms(); for (unsigned int i=0; iExecute(modem, sms[i]); } else { modem.SendSms(sms[i].sender, "Unknown command!", false); } modem.DeleteSms(sms[i].sms_index); cmn->smsCounter.incomming++; } cmn->taskManager.ExecuteTasks(); if (cmn->isDebug && kbhit()) break; Util::Sleep(10); } } bool sms_exit(int exitcode) { if (Common::instance()->isDaemon) daemonCleanup(); exit(exitcode); } int main(int argc, char* argv[]) { Common* cmn = Common::instance(); //Set default values cmn->setLogfile( "/var/log/smsdaemon.log"); cmn->pidfile = "/var/run/smsdaemon.pid"; cmn->spooldir = "/var/spool/smsdaemon"; cmn->uid = 1000; cmn->gid = 1000; cmn->loadConfig(argc,argv); cmn->daemonStart = time(0); ///////////////////// //Write a delimiter line in the logfile to seperate sessions if (Common::instance()->isDaemon) daemonize(); cmn->logMessage("--------------------------------"); cmn->taskManager.LoadTasks(); cmn->pluginManager.LoadPlugins(); SerialPort port("/dev/ttyS1" ); try { port.Open( SerialPort::BAUD_9600, SerialPort::CHAR_SIZE_8, SerialPort::PARITY_NONE, SerialPort::STOP_BITS_1, SerialPort::FLOW_CONTROL_HARD ); } catch(std::exception &e) { cmn->logMessage( string("PortOpen Exception: ") + e.what() ); sms_exit(1); } GsmModem modem(port); try { modem.Init(); } catch (std::exception& e) { cmn->logMessage( string("GsmModem Exception: ") + e.what() ); sms_exit(2); } ////////////////////////////////// cmn->logMessage("SMS daemon started"); modem.DeleteAllSms(); main_loop(modem); cmn->logMessage( cmn->getStatusMessage() ); if (cmn->isDaemon) daemonCleanup(); return 0; }