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

Diff of /smsdaemon/SmsPdu.cpp

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

revision 158 by torben, Mon Dec 8 21:49:49 2008 UTC revision 176 by torben, Thu Dec 11 22:32:58 2008 UTC
# Line 274  namespace SmsPdu Line 274  namespace SmsPdu
274          }          }
275    
276    
277    
278          SMS ParseSmsPdu(std::string pdu_str)          SMS ParseSmsPdu(std::string pdu_str)
279          {          {
280                    SmsPart part = ParseSmsPduWorker(pdu_str);
281    
282    
283                    SMS sms;
284                    sms.SetMessage(part.message);
285                    sms.SetSender(part.sender);
286                    return sms;
287            }
288    
289            void ParseUdh(vector<unsigned char>& udh, SmsPart& part)
290            {
291                    if (udh.size() == 0) {
292                            Logger::logMessage("ParseUdh(): empty udh");
293                            return;
294                    }
295            
296                    if (udh[0] != 0) {
297                            Logger::logMessage("unknown UDH type");
298                            return;
299                    }
300                    
301                    part.group = udh[2];
302                    part.count = udh[3];
303                    part.id = udh[4];
304            }
305    
306    
307            SmsPart ParseSmsPduWorker(std::string pdu_str)
308            {
309    
310                  vector<unsigned char> pdu = HexDecodeString(pdu_str);                  vector<unsigned char> pdu = HexDecodeString(pdu_str);
311    
# Line 305  namespace SmsPdu Line 335  namespace SmsPdu
335    
336                  unsigned char data_len = (*it++);                  unsigned char data_len = (*it++);
337    
338    
339                    SmsPart part;
340                    part.group = -1;
341    
342                  int shift_start = 0;                  int shift_start = 0;
343    
344                  if (UDHI)                  if (UDHI)
345                  {                  {
346                          int udh_len = (*it++);                          int udh_len = (*it++);
347                          it += udh_len; //just ignore the User Data Header  
348                            vector<unsigned char> udh;
349                            for (int i=0; i<udh_len; i++)
350                            {
351                                    udh.push_back (*it++);
352                            }
353                            ParseUdh(udh,part);
354    
355                          data_len -= udh_len;                          data_len -= udh_len;
356    
357                          shift_start = udh_len+1; //make the 8to7bit decode start with the right shift level                          shift_start = udh_len+1; //make the 8to7bit decode start with the right shift level
# Line 322  namespace SmsPdu Line 364  namespace SmsPdu
364                  string message = Decode8to7bit(user_data, shift_start).substr(0,data_len);                  string message = Decode8to7bit(user_data, shift_start).substr(0,data_len);
365    
366                  message = Util::str_trim(message);                  message = Util::str_trim(message);
367    
368                                    
369                  SMS result;                  part.message = message;
370                  result.SetMessage(message);                  part.sender = sender;
                 result.SetSender(sender);  
371    
372                  return result;                  return part;
373          }          }
374    
375  }  }

Legend:
Removed from v.158  
changed lines
  Added in v.176

  ViewVC Help
Powered by ViewVC 1.1.20