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

Annotation of /smsdaemon/Util.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 49 - (hide 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 torben 26
2     #include <string>
3     #include <sstream>
4     #include <vector>
5 torben 38 #include <cctype>
6    
7 torben 26 #include <iostream>
8     #include <fstream>
9     #include <iconv.h>
10 torben 49 #include <stdexcept>
11 torben 26 #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 torben 38 string str_replace(string str, string search, string replace)
34 torben 26 {
35     unsigned int pos = 0;
36    
37 torben 38 while ( (pos = str.find(search,pos)) != string::npos)
38 torben 26 {
39 torben 38 str.replace(pos, search.size(), replace);
40 torben 26 pos += replace.size();
41     }
42 torben 38 return str;
43 torben 26 }
44    
45 torben 42 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 torben 38
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 torben 26 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 torben 43
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 torben 38 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 torben 42
150 torben 43 string str_gsm2latin(string str)
151 torben 42 {
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 torben 43 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 torben 26 string readUrl(string url, string tempfile)
175     {
176     char buf[128000];
177     string document;
178    
179     ostringstream command;
180 torben 49 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 torben 26
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 torben 42
203    
204     string iconv_wrapper(string _input, string to_format, string from_format)
205 torben 26 {
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 torben 42 iconv_t icv = iconv_open(to_format.c_str(), from_format.c_str());
217 torben 26 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 torben 42 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 torben 26 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