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

Contents of /smsdaemon/Util.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 49 - (show annotations) (download)
Wed Jun 11 10:21:47 2008 UTC (15 years, 11 months ago) by torben
Original Path: smsdaemon/util.cpp
File size: 5360 byte(s)
Make togplugin work

GsmModem.cpp - when sending SMS - truncate message body to 160 chars

1
2 #include <string>
3 #include <sstream>
4 #include <vector>
5 #include <cctype>
6
7 #include <iostream>
8 #include <fstream>
9 #include <iconv.h>
10 #include <stdexcept>
11 #include <time.h>
12
13 #include "util.h"
14
15 using namespace std;
16
17 namespace Util
18 {
19 void str_dump(const string& str)
20 {
21 for (unsigned i=0; i<str.length(); ++i)
22 {
23 cout.width(2);
24 cout.fill('0');
25 cout << hex << static_cast<int>(str.at(i)) << " ";
26 }
27 cout.width(1);
28 cout << dec << endl;
29 }
30
31
32
33 string str_replace(string str, string search, string replace)
34 {
35 unsigned int pos = 0;
36
37 while ( (pos = str.find(search,pos)) != string::npos)
38 {
39 str.replace(pos, search.size(), replace);
40 pos += replace.size();
41 }
42 return str;
43 }
44
45 std::string str_replace_char(std::string str, char search, char replace)
46 {
47 unsigned int pos = 0;
48
49 while ( (pos = str.find(search,pos)) != string::npos)
50 {
51 str.replace(pos, 1, 1, replace);
52 }
53 return str;
54 }
55
56
57
58 string str_trim(string str)
59 {
60 while (str.length() > 0 && isspace(str.at(0)))
61 str.erase(0,1);
62 while (str.length() > 0 && isspace(str.at(str.length()-1)))
63 str.erase(str.length()-1,1);
64 return str;
65 }
66
67 string str_striptags(string str)
68 {
69 unsigned int pos=0;
70
71 while ( (pos=str.find("<",pos)) != string::npos)
72 {
73 unsigned int endpos = str.find(">",pos);
74 if (endpos == string::npos)
75 break;
76 str.erase(pos, (endpos-pos)+1);
77 }
78
79 return str;
80 }
81
82 vector<string> str_split(string input, string delimiter)
83 {
84 vector<string> retval;
85
86 while ( 1 )
87 {
88 unsigned int endpos = input.find(delimiter);
89
90 string entry = input.substr(0,endpos);
91 retval.push_back( entry );
92
93
94 if (endpos == string::npos)
95 break;
96
97 endpos += delimiter.length();
98 input = input.substr(endpos, input.length() - endpos);
99 }
100
101 return retval;
102 }
103
104
105 string str_toupper(string str)
106 {
107 for (unsigned i=0; i<str.length(); ++i)
108 {
109 str.replace(i, 1 ,1, ::toupper(str.at(i)));
110 }
111 return str;
112 }
113
114 string str_tolower(string str)
115 {
116 for (unsigned i=0; i<str.length(); ++i)
117 {
118 str.replace(i, 1 ,1, ::tolower(str.at(i)));
119 }
120 return str;
121 }
122
123
124 string str_characters(string str)
125 {
126 string rep;
127 rep.append(1,197);
128 str = str_replace(str, "&#197;", rep);
129
130 rep.at(0) = 198;
131 str = str_replace(str, "&#198;", rep);
132
133 rep.at(0) = 216;
134 str = str_replace(str, "&#216;", rep);
135
136
137 rep.at(0) = 229;
138 str = str_replace(str, "&#229;", rep);
139
140 rep.at(0) = 230;
141 str = str_replace(str, "&#230;", rep);
142
143 rep.at(0) = 248;
144 str = str_replace(str, "&#248;", rep);
145
146 return str;
147 }
148
149
150 string str_gsm2latin(string str)
151 {
152 str = str_replace_char(str, 0x1c, 198); //AE
153 str = str_replace_char(str, 0x0b, 216); //OE
154 str = str_replace_char(str, 0x0e, 197); //AA
155
156 str = str_replace_char(str, 0x1d, 230); //ae
157 str = str_replace_char(str, 0x0c, 248); //oe
158 str = str_replace_char(str, 0x0f, 229); //aa
159 return str;
160 }
161
162 string str_latin2gsm(string str)
163 {
164 str = str_replace_char(str, 198, 0x1c); //AE
165 str = str_replace_char(str, 216, 0x0b); //OE
166 str = str_replace_char(str, 197, 0x0e); //AA
167
168 str = str_replace_char(str, 230, 0x1d); //ae
169 str = str_replace_char(str, 248, 0x0c); //oe
170 str = str_replace_char(str, 229, 0x0f); //aa
171 return str;
172 }
173
174 string readUrl(string url, string tempfile)
175 {
176 char buf[128000];
177 string document;
178
179 ostringstream command;
180 command << "wget -O " << tempfile << " --tries=1 --timeout=15 -o /dev/null \"" << url << "\"";
181 int res = system( command.str().c_str() );
182 if (res)
183 throw std::runtime_error("Command time out");
184
185 ifstream in( tempfile.c_str() );
186
187 if (!in)
188 return "";
189
190 while (!in.eof() )
191 {
192 in.getline(buf,128000-1);
193 document += buf;
194 document += "\n";
195 }
196 in.close();
197 unlink(tempfile.c_str());
198
199 return document;
200 }
201
202
203
204 string iconv_wrapper(string _input, string to_format, string from_format)
205 {
206 char* input,*output,*input_ptr, *output_ptr;
207 input = input_ptr = (char*) malloc(_input.size()+1);
208 strcpy(input, _input.c_str());
209
210 output = output_ptr = (char*) malloc(_input.size()*2);
211
212
213
214 unsigned int realinsize,insize,outsize,realsize;
215
216 iconv_t icv = iconv_open(to_format.c_str(), from_format.c_str());
217 if (icv == (iconv_t)-1)
218 {
219 perror(0);
220 return "";
221 }
222
223
224 realsize = outsize = _input.size()*2;
225 realinsize = insize = _input.size();
226
227 iconv(icv,
228 &input_ptr,
229 &insize,
230 &output_ptr,
231 &outsize);
232
233
234 perror(0);
235 /* cout << "len=" << len << endl;
236 cout << "outsize=" << outsize << endl;
237 cout << "realsize=" << realsize << endl;
238 cout << "insize=" << insize << endl;
239 cout << "realinsize=" << realinsize << endl;*/
240 iconv_close(icv);
241
242 string returnstr;
243 for (unsigned int i=0; i<realsize - outsize; i++)
244 {
245 //cout << i << ":" << (unsigned short) output[i] << "|" << (unsigned short) input[i];
246 //cout << " (" << output[i] << ")" << endl;
247 returnstr += output[i];
248 }
249 return returnstr;
250 }
251
252 std::string convertToUnicode(std::string str)
253 {
254 return iconv_wrapper(str, "UTF-8", "ISO8859-1");
255 }
256
257 std::string convertFromUnicode(std::string str)
258 {
259 return iconv_wrapper(str, "ISO8859-1", "UTF-8");
260 }
261
262 int uTimeDiff(const timeval& then, const timeval& now)
263 {
264 return ( (now.tv_sec - then.tv_sec)*1000000) + (now.tv_usec-then.tv_usec);
265 }
266
267 int mTimeDiff(const timeval& then, const timeval& now)
268 {
269 return uTimeDiff(then,now) / 1000;
270 }
271
272 }

  ViewVC Help
Powered by ViewVC 1.1.20