www.pudn.com > pdulib_src.zip > PDU.h
/******************************************************************** created: 2006/11/22 created: 22:11:2006 10:04 author: Louis huangpurpose: GSM SMS PDU format manipulate class Copyright (C) 2006-2008 Louis hunag This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. *********************************************************************/ /************************************************************************ PDU FORMAT BRIEFING :) Send pdu message: + + SMSC: Message service center number part PHONE: The destination phone number part USERDATA: The message need to send [one octet indicate the message length] + [data] ************************************************************************/ #pragma once #include #include #include // Use some alt classes #include class CPDUException { public: explicit CPDUException(std::tstring msg, DWORD dwError) : m_msg(msg), m_dwError(dwError) { return; } std::tstring GetMessage() { return m_msg; } DWORD GetCode() { return m_dwError; } protected: std::tstring m_msg; DWORD m_dwError; }; #define COUNTRY_NUMBER "86" // So here is china:) class CPDU { public: // Predefine data: typedef std::string pdudata; // PDU string type typedef enum { EEncode_UNKNOW = -1, EEncode_7bit = 0x00, EEncode_8bit = 0x04, EEncodeUCS2 = 0x08 } EEncodeMethod; // User data encoding method typedef enum { ESMSWay_DELIVER = 0, // I am the callee/receiver ESMSWay_SUBMIT, // I am the caller/sender ESMSWay_UNKNOW } ESMSWay; public: CPDU(void); public: ~CPDU(void); public: /** * Set the message service center number * @para string szNum: the new message number * * @return void */ void SetMSCNumber (std::tstring szNum); /** * Set the send message validity period time * @para long days: max 441 day * @para int hours, mins * * @return void */ void SetValidityPeriod(long days, int hours, int mins); /** * Compose a shot message * @para pdudata pdu: [out] The pdu result * @para string msg: data need to be sent * @para string phone: the destination phone number * @para string msc: message center number, if null, use the preset number * @para EEncodeMethod eMethod: the encode method, default is UCS2 * * @return the data length without the SMSC part[you need it in AT+CMGS command] */ int Compose (pdudata& pdu, std::tstring msg, std::tstring phone, std::tstring msc = _T(""), EEncodeMethod eMethod = EEncodeUCS2) throw(...); /** * Fetch data form a pdu format data * only return the message part(USERDATA), use other member function to fetch information * @para pdudata pdu: the source data * * @return The nomral message */ std::tstring Fetch(pdudata pdu) throw(...); /** * Fetch Data */ std::tstring GetCaller() { return m_szCaller; } std::tstring GetCallee() { return m_szCallee; } std::tstring GetTimeStamp() { return m_szTimeStamp; } protected: std::tstring m_szMSC; // Message center number pdudata m_pduMSC; // PDU format MSC part std::tstring m_szCaller; // The caller/sender number std::tstring m_szCallee; // The callee/receiver number EEncodeMethod m_eMethod; // Data encoding method CTimeSpan m_tpvp; // Message validity period int m_pduTpvp; // Above data pdu format CTime m_timeStamp; // Time stamp // Received paras: bool m_bTP_RP; // Reply path. Parameter indicating that reply path exists. bool m_bTP_UDHI; // User data header indicator. This bit is set to 1 if the User Data field starts with a header bool m_bTP_SRI; // Status report indication. This bit is set to 1 if a status report is going to be returned to the SME bool m_bTP_MMS; // More messages to send. This bit is set to 0 if there are more messages to send ESMSWay m_wayTP_MMI; // The message direction std::tstring m_szTimeStamp; // The message time stamp protected: /** * Encode USERDATA to pdu format by 7bit method * The input pdu data is with length info (length is two bytes long) * @para [out]pdudata pdu: output the final data * @para [in]tstring message: the message need to be encoded * * @return pdu length, if failed, return 0 */ int Encode7bit(pdudata& pdu, const std::tstring message); /** * Decode USERDATA from pdu format by 7bit method * The output pdu data is length+data (length is two bytes long) * @para [in]pdudata pdu: pdu data need to decode * @para [out]tstring message: the output message * * @return the data length */ int Decode7bit(const pdudata pdu, std::tstring& message); /** * Encode USERDATA to pdu format by UCS2 method * The input pdu data is with length info (length is two bytes long) * @para [out]pdudata pdu: output the final data * @para [in]tstring message: the message need to be encoded * * @return pdu length, if failed, return 0 */ int EncodeUCS2(pdudata& pdu, std::tstring message); /** * Decode USERDATA from pdu format by UCS2 method * The output pdu data is length+data (length is two bytes long) * @para [in]pdudata pdu: pdu data need to decode * @para [out]tstring message: the output message * * @return the data length */ int DecodeUCS2(const pdudata pdu, std::tstring& message); /** * Encode a normal phone number to PDU format number * @para string number: number need to encode * @para pdudata pduNum: PDU format number * * @return The number real length. */ int EncodePDUNumber(std::tstring number, pdudata& pduNum); /** * Decode the PDU format number to normal number * This function will automatic ignore the "91" prefix * @para pdudata pNumber: The number need to decode * * @return string, normal number, if failed ,return null. */ std::tstring DecodePDUNumber(pdudata pNumber); /** * Parse the given parameter to the class attributes * @para long iPara: the parameter * * @return void */ void ParseSMSPara(long iPara); /** * Create the SMS parameter according the class attributes * * @return The parameter */ long CreateSMSPara(); /** * Parse the time stamp pdu part * @para pdudata pdu: the time stamp pdu part * * @return tstring of the time */ std::tstring ParseTimeStamp(pdudata pdu); };