#include #include #include #include "daemon.h" #include "Common.h" #include "Logger.h" #include "ModemTransceiver.h" #include "DebugTransceiver.h" #include "SmsToolTransceiver.h" #include "serialport/SerialPort.h" #include "SmsDaemon.h" #include "ConfigFile.h" using namespace std; bool sms_exit(int exitcode) { if (Common::instance()->isDaemon) daemonCleanup(); exit(exitcode); } SerialPort* port = 0; ISmsTransceiver* transceiver = 0; void openModemPort() { Common* cmn = Common::instance(); ConfigFile* config = cmn->GetConfigfile(); port = new SerialPort ( config->GetValue("gsmmodem","serialport") ); 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) { Logger::logMessage( string("PortOpen Exception: ") + e.what() ); sms_exit(1); } transceiver = new ModemTransceiver(*port); try { ((ModemTransceiver*)transceiver)->Init(); } catch (std::exception& e) { Logger::logMessage( string("ModemTransceiver Exception: ") + e.what() ); sms_exit(2); } } void closeModemPort() { port->Close(); delete port; delete transceiver; } int main(int argc, char* argv[]) { Common* cmn = Common::instance(); //Set default values Logger::setLogfile( "/var/log/smsdaemon.log"); cmn->pidfile = "/var/run/smsdaemon.pid"; cmn->spooldir = "/var/spool/smsdaemon"; cmn->loadConfig(argc,argv); cmn->daemonStart = time(0); ConfigFile* config = cmn->GetConfigfile(); bool res = config->Open( cmn->configFilePath ) ; if (!res) { cout << "Could not open config file:" << cmn->configFilePath << endl; return 1; } Logger::initLog(); ///////////////////// string transconf = config->GetValue("smsdaemon", "transceiver"); if (transconf == "internal") { openModemPort(); closeModemPort(); } else if ( transconf == "debug" || transconf == "smstools") { //do nothing } else { Logger::logMessage( string("Invalid transceiver setting: ")+transconf); exit(1); } if (Common::instance()->isDaemon) { lookup_uid_values(); daemonize(); cmn->daemonized = true; } if (transconf == "internal") { openModemPort(); } else if (transconf =="smstools") { transceiver = new SmsToolTransceiver(); } else if (transconf == "debug") { transceiver = new DebugTransceiver(); } ////////////////////////////////// SmsDaemon daemon(*transceiver); daemon.Start(); //returns here when main-loop exits if (cmn->isDaemon) daemonCleanup(); if (transconf == "builtin") { closeModemPort(); } return 0; }