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

Diff of /smsdaemon/SmsPdu.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 177 by torben, Fri Dec 12 10:58:11 2008 UTC revision 178 by torben, Fri Dec 12 12:13:05 2008 UTC
# Line 13  Line 13 
13  #include "Logger.h"  #include "Logger.h"
14  #include "Util.h"  #include "Util.h"
15    
16    #include "Exceptions.h"
17    #include <list>
18    #include <vector>
19    #include <algorithm>
20    
21    
22  using namespace std;  using namespace std;
23    
# Line 274  namespace SmsPdu Line 279  namespace SmsPdu
279          }          }
280    
281    
282            std::list<SmsPart> partlist;
283            typedef std::list<SmsPart>::iterator iterator;
284            
285            SMS ConcatenateParts(SmsPart& part)
286            {
287                    SMS sms;
288                    if (part.group == -1)
289                    {
290                            sms.SetMessage(part.message);
291                            sms.SetSender(part.sender);
292                    }
293                    else
294                    {
295                            partlist.push_back(part);
296                            
297                            vector<SmsPart> vec;
298                            for (iterator it=partlist.begin(); it!=partlist.end(); ++it)
299                            {
300                                    SmsPart& current = *it;
301                                    if (current.sender == part.sender && current.group == part.group)
302                                            vec.push_back(current);
303                            }
304    
305                            if (vec.size() == (unsigned)part.count) //we have all parts
306                            {
307                                    sort(vec.begin(), vec.end());
308                                    string message;
309                                    for (unsigned i=0; i<vec.size(); i++)
310                                    {
311                                            partlist.remove( (vec[i]) );
312                                            message += vec[i].message;
313                                    }
314                                    sms.SetSender(part.sender);
315                                    sms.SetMessage(message);
316                            }
317                            else
318                            {
319                                    throw smsnotfoundexception(); // need more parts
320                            }
321    
322                    }
323    
324                    return sms;
325            }
326    
327    
328          SMS ParseSmsPdu(std::string pdu_str)          SMS ParseSmsPdu(std::string pdu_str)
329          {          {
330                  SmsPart part = ParseSmsPduWorker(pdu_str);                  SmsPart part = ParseSmsPduWorker(pdu_str);
331    
332                    return ConcatenateParts(part);
333    
                 SMS sms;  
                 sms.SetMessage(part.message);  
                 sms.SetSender(part.sender);  
                 return sms;  
334          }          }
335    
336          void ParseUdh(vector<unsigned char>& udh, SmsPart& part)          void ParseUdh(vector<unsigned char>& udh, SmsPart& part)

Legend:
Removed from v.177  
changed lines
  Added in v.178

  ViewVC Help
Powered by ViewVC 1.1.20