• 2007-12-27

    通信技术-push over sms - [原创]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://huwenshu.blogbus.com/logs/12781860.html

    自从有了WAP业务,就开始了PUSH over sms的研究,按照GSM03.40协议,特殊短信规定,通过PUSH over sms可实现如下功能
    1、wap push 及超长push,单条短信的push最多支持32个汉字+20个字符的URL,减少一个汉字可增加 3个URL字符。超长PUSH可以显示更多的汉字和URL。 Long push message
    2、可自动删除的wap push,可以在指定的时间自动删除用户手机上的PUSH消息Auto delete push message
    3、自动打开的wap push,可以无需用户确定自动连接GPRS,打开URL 。Auto open push message
    4、自定义彩信中心 彩信特服号码。无需通过运营商即可实现彩信 彩E的发送。通过短信来实现服务,大大降低服务成本。 Send MMS By Sms
    5、重新定义用户手机的主页,把用户一键上网的页面指定为你的页面。change wap homepage
    6、添加书签。 add bookmark
    7、强制用户访问指定的WAP页面,让用户手机自动访问制定的URL并不显示的前台。
    8、通过梦网访问的用户同时获得其MID和真实手机号码。可以放在任意页面上。
    编码实现:
    普通PUSH编码(VC实现函数打包SUBMIT数据体):
    CString CEsmeThread::GetPushCode(CString strName ,CString strUrl )
    {
    CString strByte ;
    CString utfName,utfUrl;
    BYTE bBuf[256];
    char szNameHex[256];
    strByte = "0B05040B8423F0000303010129060603AE81EA8DCA";
    strByte = strByte + "02";
    strByte = strByte + "05";
    strByte = strByte + "6A";
    strByte = strByte + "00";

    strByte = strByte + "45" ;//
    strByte = strByte + "C6" ;//
    strByte = strByte + "08" ;//
    strByte = strByte + "0C" ;//href="http:'"
    strByte = strByte + "03" ;//字符串开始
    strByte = strByte + StrToHex((LPSTR)(LPCTSTR)strUrl);
    strByte = strByte + "00" ;//URL 字符串结束
    strByte = strByte + "01" ;//>
    strByte = strByte + "03" ;//内容描述字符串开始
    GB2312ToUTF_8(utfName,(LPSTR)(LPCTSTR)strName,strlen(strName));
    ByteAryToHex((unsigned char * )(LPSTR)(LPCTSTR)utfName, utfName.GetLength(), szNameHex);
    strByte = strByte + szNameHex;
    strByte = strByte + "00" ;//内容描述字符串结束
    strByte = strByte + "01" ;//
    strByte = strByte + "01" ;//

    return strByte;

    }
    同时置编码格式=4 //CMPP_DC_BIN
    TP_udhi = 1//表示有信息头
    对于多于32个汉字+20个字符的URL的PUSH,按超过短信再加信息头,更改实现自动删除,自动打开等功能
    OTA编码:
    Layerbinary解释
    WDP0BUser-Data-Header (UDHL) Length = 11
    05UDH IE identifier: Port numbers
    04UDH port number IE length
    C3这四个数字定义了一个端口号:49999
    4F
    C0
    02
    00UDH IE identifier: SAR
    03UDH SAR IE length
    04Datagram ref no.
    01这两个只有当OTA内容过长时,短信会被拆分为两条或多条,这时候第1个字节表明OTA短信共有几个数据包,也就是共被拆分为几条短信;第2个字节表明当前数据包是第几个数据包。默认情况下,我们只有一个数据包,并且当前包是第一个数据包。所以就是0x01 0x01了。
    01
    接下来是WSP
    Layerbinary解释
    WSP01Transaction ID / Push ID WSP layer
    06PDU type (push)
    2CHeader length (content type+headers)
    1Fvalue length quote length greater than 30
    2Avalue length (value name not used)
    61,70,70,6C,69,63,61,74,69,6F,6E,2F,78,2D,77,61,70,2D,70,72,6F,76,2E,62,72,6F,77,73,65,72,2D,73,65,74,74,69,6E,67,73就是ASCII字符串:'a','p','p','l','i','c','a','t','i','o','n','/','x','-','w','a','p','-','p','r','o','v','.','b','r','o','w','s','e','r','-','s','e','t','t','i','n','g','s',MIME-Type =browser settings
    00Null termination of content type string
    81charset (well known PARM.(shortinteger))
    EAUTF-8 (using short integer) WSP layer (end WSPheaders)
    然后是WBXML
    Layerbinary解释
    WBXML01Version WBXML 1.1
    01Unknown public identifier
    06Charset UTF-8
    00string table length
    45CHARACTERISTIC_LIST with content tag
    C6CHARACTERISTIC with content andattributestag
    7F书签属性。在规范8.2章节定义的TYPE=BOOKMARK对应的binary7F
    01属性定义结束
    87PARM with attributes
    15NAME=NAME
    11VALUE
    03Inline string
    E68891E79A84574150“我的WAP”所对应的binary
    00End inline string
    01End(PARM)
    87PARM with attributes
    17NAME=URL
    11VALUE
    03Inline string
    687474703A2F2F6D797761702E636F6D“http://mywap.com”所对应的binary
    00End inline string
    01End(PARM)
    01end (CHARACTERISTIC)
    01end (CHARACTERISTIC_LIST)
    CString CEsmeThread::GetOTACode(CString strName ,CString strUrl )
    {
    CString strByte ;
    CString utfName,utfUrl;
    BYTE bBuf[256];
    char szNameHex[256];
    strByte = "0B0504C34FC0020003040101";//WDP headers,最后的0101表示此信息就一条
    strByte = strByte + "01062C1F2A6170706C69636174696F6E2F782D7761702D70726F762E62726F777365722D73657474696E67730081EA";
    //WSP headers
    strByte = strByte + "01016A0045C67F0187151103";//WAP描述字符开始
    GB2312ToUTF_8(utfName,(LPSTR)(LPCTSTR)strName,strlen(strName));
    ByteAryToHex((unsigned char * )(LPSTR)(LPCTSTR)utfName, utfName.GetLength(), szNameHex);
    strByte = strByte + szNameHex;
    strByte = strByte + "00" ;//内容描述字符串结束
    strByte = strByte + "01" ;//end parm
    strByte = strByte + "87171103" ;//URL 字符串开始
    strByte = strByte + StrToHex((LPSTR)(LPCTSTR)strUrl);
    strByte = strByte + "00" ;//URL 字符串结束
    strByte = strByte + "01" ;//end parm
    strByte = strByte + "01" ;// end (CHARACTERISTIC)
    strByte = strByte + "01" ;// end (CHARACTERISTIC__LIST)
    return strByte;

    }
    通过更改书签属性实现主页等功能

    收藏到:Del.icio.us




发表评论

您将收到博主的回复邮件
记住我