-
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 message2、可自动删除的wap push,可以在指定的时间自动删除用户手机上的PUSH消息Auto delete push message3、自动打开的wap push,可以无需用户确定自动连接GPRS,打开URL 。Auto open push message4、自定义彩信中心 彩信特服号码。无需通过运营商即可实现彩信 彩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_BINTP_udhi = 1//表示有信息头对于多于32个汉字+20个字符的URL的PUSH,按超过短信再加信息头,更改实现自动删除,自动打开等功能OTA编码:
接下来是WSP:Layer binary 解释 WDP层 0B User-Data-Header (UDHL) Length = 11 05 UDH IE identifier: Port numbers 04 UDH port number IE length C3 这四个数字定义了一个端口号:49999 4F C0 02 00 UDH IE identifier: SAR 03 UDH SAR IE length 04 Datagram ref no. 01 这两个只有当OTA内容过长时,短信会被拆分为两条或多条,这时候第1个字节表明OTA短信共有几个数据包,也就是共被拆分为几条短信;第2个字节表明当前数据包是第几个数据包。默认情况下,我们只有一个数据包,并且当前包是第一个数据包。所以就是0x01 0x01了。 01
然后是WBXML:Layer binary 解释 WSP层 01 Transaction ID / Push ID WSP layer 06 PDU type (push) 2C Header length (content type+headers) 1F value length quote length greater than 30 2A value 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 00 Null termination of content type string 81 charset (well known PARM.(shortinteger)) EA UTF-8 (using short integer) WSP layer (end WSPheaders) Layer binary 解释 WBXML 01 Version WBXML 1.1 01 Unknown public identifier 06 Charset UTF-8 00 string table length 45 CHARACTERISTIC_LIST with content tag C6 CHARACTERISTIC with content andattributestag 7F 书签属性。在规范8.2章节定义的TYPE=BOOKMARK对应的binary是7F 01 属性定义结束 87 PARM with attributes 15 NAME=NAME 11 VALUE 03 Inline string E68891E79A84574150 “我的WAP”所对应的binary 00 End inline string 01 End(PARM) 87 PARM with attributes 17 NAME=URL 11 VALUE 03 Inline string 687474703A2F2F6D797761702E636F6D “http://mywap.com”所对应的binary 00 End inline string 01 End(PARM) 01 end (CHARACTERISTIC) 01 end (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 headersstrByte = 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 parmstrByte = 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;
}
通过更改书签属性实现主页等功能随机文章:
通信技术-超长短信编码 2007-12-27你心中的中国地图 2008-05-10莫谈国是 2008-04-22博客与图片 2008-04-14当你接到157号码手机打来的电话时 2008-03-31
收藏到:Del.icio.us





