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

Diff of /smsdaemon/SmsPdu.cpp

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

revision 70 by torben, Fri Jun 13 07:56:57 2008 UTC revision 78 by torben, Sat Jun 14 08:39:40 2008 UTC
# Line 13  Line 13 
13  #include "common.h"  #include "common.h"
14  #include "util.h"  #include "util.h"
15    
 #include <iostream>  
16    
17  using namespace std;  using namespace std;
18    
   
19  namespace SmsPdu  namespace SmsPdu
20  {  {
21    
# Line 36  namespace SmsPdu Line 34  namespace SmsPdu
34    
35          string EncodePhonenr(string input)          string EncodePhonenr(string input)
36          {          {
37                    if ( input.at(0) == '+' )
38                            input.erase(0,1);
39    
40                  if ( (input.length() % 2) == 1)                  if ( (input.length() % 2) == 1)
41                          input.append("F");                          input.append("F");
42                  return SwitchChars(input);                  return SwitchChars(input);
# Line 78  namespace SmsPdu Line 79  namespace SmsPdu
79                  return vec;                  return vec;
80          }          }
81    
82          std::string Decode8to7bit(vector<unsigned char> input, int shift_start = 0)          std::string Decode8to7bit(vector<unsigned char> input, int shift_start)
83          {          {
84                  string result;                  string result;
85    
# Line 110  namespace SmsPdu Line 111  namespace SmsPdu
111    
112    
113    
114          vector<unsigned char> Encode7to8bit(std::string str)          vector<unsigned char> Encode7to8bit(std::string str, int shift_start)
115          {          {
116                  vector<unsigned char> buf;                  vector<unsigned char> buf;
117    
118                  int shift = 0;                  int shift = shift_start;
119                  for (unsigned int i=0; i<str.size(); ++i)                  for (unsigned int i=0; i<str.size(); ++i)
120                  {                  {
121                          unsigned char current = str.at(i) & 0x7F;                          unsigned char current = str.at(i) & 0x7F;
# Line 178  namespace SmsPdu Line 179  namespace SmsPdu
179                          pdu.push_back(to.length() ); //length of phone nr                          pdu.push_back(to.length() ); //length of phone nr
180                          pdu.push_back(0x81); // type of address (international nr  + ISDN/telephone range) - else try 0x81                          pdu.push_back(0x81); // type of address (international nr  + ISDN/telephone range) - else try 0x81
181    
182                    
183                          string phone = EncodePhonenr(to);                          vector<unsigned char> phone = HexDecodeString( EncodePhonenr(to ));
184                          pdu.insert( pdu.end(), phone.begin(), phone.end());                          pdu.insert( pdu.end(), phone.begin(), phone.end());
185    
186                          pdu.push_back(0x00); // Protocol identifier                          pdu.push_back(0x00); // Protocol identifier
187                          pdu.push_back(0x00); // Data coding scheme                          pdu.push_back(0x00); // Data coding scheme
188    
189                            int shift_start = 0;
190                          string message_part;                          string message_part;
191                          if (multipart)                          if (multipart)
192                          {                          {
# Line 199  namespace SmsPdu Line 201  namespace SmsPdu
201                                  pdu.push_back( part_count );                                  pdu.push_back( part_count );
202                                  pdu.push_back( partnr+1 );                                  pdu.push_back( partnr+1 );
203                                  pdu.push_back( 0x00);                                  pdu.push_back( 0x00);
204                                    //shift_start = 6;
205                          }                          }
206                          else                          else
207                          {                          {
# Line 216  namespace SmsPdu Line 218  namespace SmsPdu
218                                  pdu.push_back( message_part.length() ); //UserDataLength                                  pdu.push_back( message_part.length() ); //UserDataLength
219                          }                          }
220    
221                          vector<unsigned char> userData = Encode7to8bit(message_part);                          vector<unsigned char> userData = Encode7to8bit(message_part, shift_start);
222    
223                          pdu.insert( pdu.end(), userData.begin(), userData.end());                          pdu.insert( pdu.end(), userData.begin(), userData.end());
224    
# Line 309  namespace SmsPdu Line 311  namespace SmsPdu
311                  if (UDHI)                  if (UDHI)
312                  {                  {
313                          int udh_len = (*it++);                          int udh_len = (*it++);
                         cout << "UDH_LEN:" << udh_len << endl;  
314                          it += udh_len; //just ignore the User Data Header                          it += udh_len; //just ignore the User Data Header
315                          data_len -= udh_len;                          data_len -= udh_len;
316    
317                          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
318                  }                  }
                 cout << hex<< (int)(*it) << endl;;  
319    
320    
321                  vector<unsigned char> user_data;                  vector<unsigned char> user_data;
322                  user_data.insert(user_data.end(), it, it+data_len);                  user_data.insert(user_data.end(), it, it+data_len);
323                                    
324                  result.message = Decode8to7bit(user_data, shift_start);                  result.message = Decode8to7bit(user_data, shift_start).substr(0,data_len);
325    
326                    result.message = Util::str_trim(result.message);
327                                    
328    
329                  return result;                  return result;

Legend:
Removed from v.70  
changed lines
  Added in v.78

  ViewVC Help
Powered by ViewVC 1.1.20