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

Annotation of /smsdaemon/main.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 214 - (hide annotations) (download)
Mon Dec 22 22:22:42 2008 UTC (15 years, 4 months ago) by torben
File size: 3011 byte(s)
Make smsdaemon less 'crashable' if a config value is not defined in the config file

1 torben 26 #include <string>
2 torben 114 #include <stdlib.h>
3 torben 175 #include <iostream>
4 torben 26
5     #include "daemon.h"
6 torben 158 #include "Common.h"
7 torben 157 #include "Logger.h"
8 torben 26
9 torben 149 #include "ModemTransceiver.h"
10 torben 151 #include "DebugTransceiver.h"
11     #include "SmsToolTransceiver.h"
12 torben 211 #include "ProxyTransceiver.h"
13 torben 151
14 torben 132 #include "serialport/SerialPort.h"
15 torben 88 #include "SmsDaemon.h"
16 torben 146 #include "ConfigFile.h"
17 torben 26
18     using namespace std;
19    
20    
21 torben 57 bool sms_exit(int exitcode)
22     {
23 torben 196 if (Common::instance()->isDaemon)
24     daemonCleanup();
25 torben 26
26 torben 57 exit(exitcode);
27     }
28    
29 torben 150 SerialPort* port = 0;
30     ISmsTransceiver* transceiver = 0;
31 torben 146
32 torben 150 void openModemPort()
33     {
34     Common* cmn = Common::instance();
35     ConfigFile* config = cmn->GetConfigfile();
36    
37 torben 214 std::string portstr = config->GetValue("gsmmodem","serialport","");
38     if (portstr == "")
39     {
40     Logger::logMessage("'serialport' not defined in config file");
41     sms_exit(2);
42     }
43    
44     port = new SerialPort ( portstr );
45 torben 150 try
46     {
47 torben 196 port->Open( SerialPort::BAUD_9600,
48     SerialPort::CHAR_SIZE_8,
49     SerialPort::PARITY_NONE,
50     SerialPort::STOP_BITS_1,
51     SerialPort::FLOW_CONTROL_HARD );
52 torben 150 }
53 torben 196 catch (std::exception &e)
54 torben 150 {
55 torben 157 Logger::logMessage( string("PortOpen Exception: ") + e.what() );
56 torben 150 sms_exit(1);
57     }
58    
59     transceiver = new ModemTransceiver(*port);
60    
61     try
62     {
63     ((ModemTransceiver*)transceiver)->Init();
64     }
65     catch (std::exception& e)
66     {
67 torben 157 Logger::logMessage( string("ModemTransceiver Exception: ") + e.what() );
68 torben 150 sms_exit(2);
69     }
70     }
71     void closeModemPort()
72     {
73     port->Close();
74     delete port;
75     delete transceiver;
76     }
77    
78 torben 26 int main(int argc, char* argv[])
79     {
80     Common* cmn = Common::instance();
81    
82     //Set default values
83    
84 torben 157 Logger::setLogfile( "/var/log/smsdaemon.log");
85 torben 26 cmn->pidfile = "/var/run/smsdaemon.pid";
86     cmn->spooldir = "/var/spool/smsdaemon";
87    
88    
89     cmn->loadConfig(argc,argv);
90 torben 36 cmn->daemonStart = time(0);
91 torben 26
92 torben 146 ConfigFile* config = cmn->GetConfigfile();
93 torben 196
94 torben 146 bool res = config->Open( cmn->configFilePath ) ;
95 torben 196 if (!res)
96     {
97 torben 175 cout << "Could not open config file:" << cmn->configFilePath << endl;
98 torben 146 return 1;
99     }
100 torben 175
101     Logger::initLog();
102 torben 146
103 torben 196
104 torben 26 /////////////////////
105 torben 214 string transconf = config->GetValue("smsdaemon", "transceiver", "");
106 torben 26
107 torben 214 if (transconf == "")
108 torben 151 {
109 torben 214 Logger::logMessage("No transceiver defined in config file");
110     exit(1);
111     }
112     else if (transconf == "internal")
113     {
114 torben 151 openModemPort();
115     closeModemPort();
116 torben 196 }
117     else if ( transconf == "debug" || transconf == "smstools")
118 torben 151 {
119     //do nothing
120     }
121     else
122     {
123 torben 157 Logger::logMessage( string("Invalid transceiver setting: ")+transconf);
124 torben 151 exit(1);
125     }
126    
127 torben 150
128 torben 196
129     if (Common::instance()->isDaemon)
130 torben 146 {
131     lookup_uid_values();
132 torben 26 daemonize();
133 torben 150 cmn->daemonized = true;
134 torben 146 }
135 torben 26
136    
137 torben 154 if (transconf == "internal")
138 torben 151 {
139     openModemPort();
140     }
141     else if (transconf =="smstools")
142     {
143     transceiver = new SmsToolTransceiver();
144 torben 196 }
145 torben 151 else if (transconf == "debug")
146     {
147     transceiver = new DebugTransceiver();
148     }
149    
150 torben 211 ProxyTransceiver proxy(*transceiver);
151    
152 torben 26 //////////////////////////////////
153    
154 torben 211 SmsDaemon daemon(proxy);
155 torben 26
156 torben 196 daemon.Start();
157 torben 88 //returns here when main-loop exits
158 torben 26
159 torben 196 if (cmn->isDaemon)
160     daemonCleanup();
161 torben 30
162 torben 151 if (transconf == "builtin")
163     {
164     closeModemPort();
165     }
166 torben 150
167 torben 30 return 0;
168 torben 26 }

  ViewVC Help
Powered by ViewVC 1.1.20