--- smsdaemon/SmsPdu.cpp 2008/12/08 21:28:40 157 +++ smsdaemon/SmsPdu.cpp 2008/12/12 10:58:11 177 @@ -11,7 +11,7 @@ #include #include "Logger.h" -#include "util.h" +#include "Util.h" using namespace std; @@ -274,8 +274,46 @@ } + SMS ParseSmsPdu(std::string pdu_str) { + SmsPart part = ParseSmsPduWorker(pdu_str); + + + SMS sms; + sms.SetMessage(part.message); + sms.SetSender(part.sender); + return sms; + } + + void ParseUdh(vector& udh, SmsPart& part) + { + if (udh.size() == 0) + { + Logger::logMessage("ParseUdh(): empty udh"); + return; + } + + if (udh[0] != 0) + { + Logger::logMessage("unknown UDH type"); + return; + } + + if (udh.size() < 5) + { + Logger::logMessage("UDH to short to be multipart"); + return; + } + + part.group = udh[2]; + part.count = udh[3]; + part.id = udh[4]; + } + + + SmsPart ParseSmsPduWorker(std::string pdu_str) + { vector pdu = HexDecodeString(pdu_str); @@ -305,11 +343,23 @@ unsigned char data_len = (*it++); + + SmsPart part; + part.group = -1; + int shift_start = 0; + if (UDHI) { int udh_len = (*it++); - it += udh_len; //just ignore the User Data Header + + vector udh; + for (int i=0; i