千家信息网

什么是白话彩信协议

发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,本篇内容介绍了"什么是白话彩信协议"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通知第一步既然也是短
千家信息网最后更新 2024年12月13日什么是白话彩信协议

本篇内容介绍了"什么是白话彩信协议"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

通知

第一步既然也是短信协议,我们先回顾一下短信协议的组成,是这个样子的:

包含UDH和UD,那彩信通知中UDH和UD的值是什么呢?

先说UDH,其包含2个端口信息(wap-push:2948,wap-wsp:9200),这两个端口是IANA注册的端口,我们后面说,现在我们只需要知道,要存下这两个端口需要4个字节(每个端口2字节),我们正好有IEI为0x05(Application port addressing scheme, 16 bit address),表示IED包含的是16位的端口信息,那我们通知的UDH是这样的:

2948的16进制为0x0B84,9200的16进制为0x23F0,所以最后UDH就是:0x05 0x04 0x0B 0x84 0x23 0xF0

接着我们再来说UD,我们前面提到了,我们通知中会带上彩信文件的地址,当手机收到通知时,会去该地址下载彩信文件,所以,彩信的地址必然在我们UD中,哪还有哪些东西需要包含在UD中呢?

不知道大家有没有注意过彩信在手机中展示是什么样的呢?彩信肯定会有图片、视频这些主要信息,不过还会发送人、主题、彩信大小这些信息。那在我们通知中需要包含上面哪些信息呢,实际上以上就是我们彩信文件所包含的全部信息,不过通知中是不需要图片、视频这些主要信息的,不然还要通知干什么呢,那剩下的就是通知中需要带上的信息了,包括发送人、主题、彩信大小。

好了,我们知道了UD中需要存哪些信息,接下来,我们就来看下UD的具体组成

老规矩,在这之前,介绍个概念

WSP(Wireless Session Protocol): 这是一种基于HTTP1.1的一种协议,有自己的编码方式

我们前面说UDH的时候提到,有2个端口信息(wap-push, wap-wsp),这俩个端口恰好对应我们彩信的两个过程,可以把它们当做目的地和源地,我们UD也正是用WSP编码方式存储的,这里简单的说一下WSP是怎么编码的

WSP编码其实可以看做key-value编码,key的编码又有2种,一种可以当做是内置的key,一种是自定义的key

内置key的有对应的一个字节内容代表,自定义key会用专门的字符串编码方式进行编码,value和自定义key一样,如果是字符串会用专门的字符串编码方式进行编码,数字则会用专门的数字编码方式进行编码

我们UD组成也包含信息头和信息体,这个信息头和信息体就不是短信中的UDH和UD了,而是WSP的信息头和信息体

信息头

WSP信息头很简单,包含一个TID和一个PDU TYPE,各占一个字节,TID不用去关心它,我们只需要关心当pdu_type=6时,就表示这是一个wap-push就OK了

比如,我们假设TID=0那么WSP头就为:0x00 0x06

信息体

这里我们再介绍一个概念

MMSEP(Multimedia Messaging Service Encapsulation Protocol): 彩信封装协议,是基于WSP协议

MMSEP也包含信息头和信息体,还记得我们之前说通知和彩信文件的内容差不多吗?其实彩信文件和通知相同的部分就是MMSEP的信息头,多出来的图片、视频就是MMSEP的信息体了,其实通知就是一个信息体为空的MMSEP

MMSEP信息头会指定一个content_type,content_type也是根据专门的字符串编码方式进行编码,比如彩信通知的content_type为:application/vnd.wap.mms-message,MMSEP的content_type和普通content_type不太一样,MMSEP的content_type能带参数,并一起参与编码,彩信通知的content_type就带有一个参数X-Wap-Application-ID=x-wap-application:mms.ua

这里我们简单看一下content_type结果:0x22 0x61 ... 0x00 0xAF 0x84

我们大概解释一下这串编码,还记得前面说的WSP编码方式吗?X-Wap-Application-ID这个key是内置的,用0xAF表示,x-wap-application:mms.ua同样,用0x84表示。那再来看前面的,因为application/vnd.wap.mms-message不是内置的key,所以得按照特殊字符串编码方式编码,第一位表示长度0x22,后面0x61 ... 0x00 就是编码内容了(这里就省略了)

我们接着看,MMSEP信息头里面除了我们之前提到的发送人、主题、彩信大小外,还会有一些其它信息,我们挨个介绍一下

version: 表示使用的WSP编码版本

message_type: 表示彩信类型

transaction_id: 表示事物ID

message_class_id: 表示彩信分类ID

expiry: 表示彩信有效期

subject: 表示标题

location: 表示彩信文件地址(我们前面提到,WSP是基于HTTP的协议,这里可以是一个HTTP地址)

from: 表示发送人

这里我们特别解释一下message_type,message_type代表了这个是一种什么类型的彩信,比如message_type=2表示这是一个通知,message_type=4表示这是一个彩信文件

那到这里,我们的通知UD剩下的部分也知道了,就是这个样子:

这里大多数key都是内置的,我举几个例子,比如

0x8D90 0x80表示这是version,0x90表示值为1.0;

0x8A80表示msg_class_id=personal;

0x8C82表示message_type=2;

0x98表示transaction_id,0x88 表示expiry,0x89表示from,0x8E表示size,0x83表示location,0x96表示subject;

这里没有例出的值的key,它们的值就需要用特殊的字符串或者数字编码了

到这里,我们通知的部分就介绍完了,整个通知大概就是:0x05 0x04 0x0B 0x84 0x23 0xF0 0x00 0x06 0x22 0x61 ... 0x00 0xAF 0x84 0x8D90 0x8A80 0x8C82 0x98 ... 0x88 ... 0x89 ... 0x8E ... 0x83 ... 0x96 ...

这里补充一点,可能你也注意到了,从最终结果来看,既然我们彩信通知和普通文本短信一样,而且我们编码出来的东西很可能超过了短信字节的限制,那同样也会有可能出现一个通知分为多条发送的情况,这种情况下,我们不能省略必要的信息,能做的可能就是将location(uri)缩短了

最后,我们从协议的层面来看下通知是什么样子的:

彩信文件

前面我们说通知的时候提到了,彩信文件其实就是比彩信通知多了图片、视频的信息,从协议来看就是比彩信通知(信息部分MMSEP header)多了信息体,其实信息体里就是放的图片、视频,彩信文件就是这个样子:

前面我们已经介绍过了MMSEP header,那我们彩信文件里只是部分header的值不同,其它都与通知时一样的,下面我把不同的取值给你列出来

content_type: application/vnd.wap.multipart.relatedapplication/vnd.wap.multipart.mixed

message_type: 之前也提到过,如果是彩信文件message_type=4

date: 表示彩信生成时间,不同于通知的expiry,彩信文件中是date

"什么是白话彩信协议"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0