--- smsdaemon/SmsToolTransceiver.cpp 2008/12/08 10:42:04 151 +++ smsdaemon/SmsToolTransceiver.cpp 2008/12/12 12:54:27 180 @@ -1,7 +1,9 @@ #include "SmsToolTransceiver.h" -#include "common.h" -#include "util.h" +#include "Logger.h" +#include "Util.h" +#include "Common.h" +#include "ConfigFile.h" #include #include @@ -18,30 +20,62 @@ using namespace std; +string appendSlash(string& str) +{ + if (str.at(str.length()-1) != '/'); + str += "/"; + return str; +} + +SmsToolTransceiver::SmsToolTransceiver() +{ + Common* cmn = Common::instance(); + + try + { + inboxdir = cmn->GetConfigfile()->GetValue("smstools","inboxdir").StringValue(); + } catch (...) { + Logger::logMessage("Config error> smstools::inboxdir not specified"); + exit(1); + } + try + { + outgoingdir = cmn->GetConfigfile()->GetValue("smstools","outgoingdir").StringValue(); + } catch (...) { + Logger::logMessage("Config error> smstools::outgoingdir not specified"); + exit(1); + } + + inboxdir = appendSlash(inboxdir); + outgoingdir = appendSlash(outgoingdir); + +} + + void SmsToolTransceiver::SendSms(std::string to, std::string message, bool allowMultipart) { std::string filename = CreateFilename(); - Common::instance()->logMessage( std::string("Sending sms to: ") + to); + Logger::logMessage( std::string("Sending sms to: ") + to); - string tempfile = "/var/spool/sms/"; - tempfile += filename; + string tempfile = outgoingdir + filename + ".LOCK"; - string destfile = "/var/spool/sms/outgoing/"; - destfile += filename; + string destfile = outgoingdir + filename; ofstream out( tempfile.c_str() ); if (!out ) { - Common::instance()->logMessage("SmsToolTransceiver:: could not create temp file"); + Logger::logMessage("SmsToolTransceiver:: could not create temp file"); return; } out << "To: " << to << "\n\n" << message ; out.close(); + + Common::instance()->smsCounter.outgoing++; int result = rename(tempfile.c_str(), destfile.c_str()); if (result) - Common::instance()->logMessage( string("SmsToolTransceiver could not spool file: ") + strerror(errno) ); + Logger::logMessage( string("SmsToolTransceiver could not spool file: ") + strerror(errno) ); } std::string SmsToolTransceiver::CreateFilename() @@ -56,9 +90,8 @@ std::vector SmsToolTransceiver::ReadSms(bool readAll) { - const std::string incoming = "/var/spool/sms/incoming/"; std::vector vec; - DIR* dir = opendir( incoming.c_str() ); + DIR* dir = opendir( inboxdir.c_str() ); if (dir != 0) { @@ -67,15 +100,16 @@ { if (entry->d_name[0] == '.') continue; - + Logger::logMessage( string("SmsTool::ReadSms >") +entry->d_name); + try { - SMS sms = ParseFile( incoming + entry->d_name); + SMS sms = ParseFile( inboxdir + entry->d_name); vec.push_back(sms); } catch (std::exception& e) { - Common::instance()->logMessage(e.what()); + Logger::logMessage(e.what()); } if (!readAll) @@ -84,15 +118,13 @@ } else { - Common::instance()->logMessage( string("SmsToolTransceiver could open incoming dir ") + strerror(errno) ); + Logger::logMessage( string("SmsToolTransceiver could open inbox dir ") + strerror(errno) ); } + closedir(dir); return vec; } -void SmsToolTransceiver::DeleteSms(std::string smsIndex) -{ -} SMS SmsToolTransceiver::ParseFile(std::string path) { @@ -134,15 +166,22 @@ for (unsigned int i=0; i ") + headers[i]); + } } }