/[projects]/smsdaemon/SmsDaemon.cpp
ViewVC logotype

Contents of /smsdaemon/SmsDaemon.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 216 - (show annotations) (download)
Tue Dec 23 12:09:08 2008 UTC (15 years, 4 months ago) by torben
File size: 2896 byte(s)
Added config option of privileged and blacklisted phone numbers, and applied the blacklist to
Proxy Transceiver.

Am still missing the equivalent for incomming messages (ProxyPlugin)

1 #include "SmsDaemon.h"
2
3 #include <string>
4
5 #include <sstream>
6 #include <stdlib.h>
7
8 #include "Common.h"
9
10 #include "ISmsTransceiver.h"
11
12 #include "Plugin.h"
13 #include "kbhit.h"
14
15 #include "Util.h"
16
17 #include "TaskManager.h"
18 #include "PluginManager.h"
19 #include "ConfigFile.h"
20 #include "Logger.h"
21
22 #include "version.h"
23
24 using namespace std;
25
26 void SmsDaemon::CreateLogMessage(SMS& sms,bool hasPlugin)
27 {
28 ostringstream os;
29 os << "Recieved sms from " << sms.GetSender() << " ; command=" << sms.ExtractCommand();
30 if (!hasPlugin)
31 os << " -- PLUGIN NOT FOUND";
32
33 Logger::logMessage(os.str());
34 }
35
36
37 void SmsDaemon::CheckSms()
38 {
39 const int INTERVAL = 1000; //no of milliseconds between sms checks
40 timeval now = Util::GetTimeOfDay();
41
42 if ( Util::mTimeDiff(_lastSmsCheck,now) < INTERVAL)
43 return;
44
45 _lastSmsCheck = now;
46
47 Common* cmn = Common::instance();
48
49 PluginManager* manager = cmn->GetPluginManager();
50 vector<SMS> sms = _modem.ReadSms();
51
52 for (unsigned int i=0; i<sms.size(); ++i)
53 {
54 string cmd = sms[i].ExtractCommand();
55
56 cmd = Util::str_tolower(cmd);
57
58 Plugin* pl = manager->GetPlugin(cmd);
59
60 CreateLogMessage(sms[i], pl != 0);
61
62 if (pl)
63 {
64 pl->Execute(_modem, sms[i]);
65 }
66 else
67 {
68 _modem.SendSms(sms[i].GetSender(), "Unknown command!", false);
69 }
70
71 cmn->smsCounter.incomming++;
72 }
73 }
74
75
76 void SmsDaemon::MainLoop()
77 {
78 Common* cmn = Common::instance();
79 volatile bool& mainContinue = cmn->mainContinue;
80 volatile bool& reloadConfig = cmn->reloadConfig;
81
82 mainContinue = true;
83
84 while (mainContinue)
85 {
86
87 CheckSms();
88
89 cmn->GetTaskManager()->ExecuteTasks(_modem);
90
91 if (cmn->isDebug && kbhit())
92 break;
93
94 if (reloadConfig)
95 ReloadConfig();
96
97 Util::Sleep(100);
98
99 }
100 }
101
102 void SmsDaemon::ReloadConfig()
103 {
104 Common* cmn = Common::instance();
105 cmn->reloadConfig = false;
106
107 cmn->GetConfigfile()->Reload();
108
109 cmn->GetPluginManager()->DestroyPlugins();
110 cmn->GetPluginManager()->LoadPlugins();
111
112 cmn->GetTaskManager()->DestroyTasks();
113 cmn->GetTaskManager()->LoadTasks();
114
115 cmn->LoadLists(); //reload blaclist & privileged list
116 }
117
118 void SmsDaemon::Start()
119 {
120 Common* cmn = Common::instance();
121 string transceiver = cmn->GetConfigfile()->GetValue("smsdaemon","transceiver");
122
123 srand(time(0));
124
125 cmn->daemonStart = time(0);
126 _lastSmsCheck = Util::GetTimeOfDay();
127
128 Logger::logMessage("--------------------------------");
129 Logger::logMessage( VERSION );
130 Logger::logMessage( SVNVERSION );
131 Logger::logMessage( string("Transceiver: ") + transceiver );
132
133 cmn->LoadLists(); //reload blaclist & privileged list
134 cmn->GetTaskManager()->LoadTasks();
135 cmn->GetPluginManager()->LoadPlugins();
136 Logger::logMessage("SMS daemon started");
137
138
139 try
140 {
141 MainLoop();
142 }
143 catch (std::exception& e)
144 {
145 Logger::logMessage( e.what() );
146 }
147 catch (...)
148 {
149 Logger::logMessage( "Caught unknown exception" );
150 }
151
152 cmn->GetPluginManager()->DestroyPlugins();
153
154 Logger::logMessage( cmn->getStatusMessage() );
155 }

  ViewVC Help
Powered by ViewVC 1.1.20