1、背景
通过CMPP协议和移动网关连接,通过sumbit包进行提交短信(SP->ISMG),Submit包的对消息内容长度(Msg_Length)的规定为一个字节,当消息格式(Msg_FMT)为0时,<=160 ,其它时为<=140,发送包含汉字的短信基本上就是超过140字节(甚至更少)就切分,然后分几条发给客户,而且也不能保证顺序,用户体验不好,于是长短信的支持就成为必须的事情了。
2、原理
2.1、长短信的协议和普通短信的协议稍有不同
2.1.1 TP_udhi=1
在Msg_content中加入6个字节或者7个字节的udhi头做为前缀,当6字节时,每条短信最多67字,7时为66字。
2.1.2 6个字节的TP_udhi协议头
05 00 03 XX MM NN
byte 1 : 05, 表示剩余协议头的长度
byte 2 : 00, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为1(格式中的XX值)。
byte 3 : 03, 这个值表示剩下短信标识的长度
byte 4 : XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很 重要。
byte 5 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 6 : NN, 这批短信的数量