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

Annotation of /smsdaemon/main.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 211 - (hide annotations) (download)
Sun Dec 21 22:08:20 2008 UTC (15 years, 5 months ago) by torben
File size: 2759 byte(s)
Add a Proxy Transceiver to enforce requirements on outgoing messages

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

  ViewVC Help
Powered by ViewVC 1.1.20