在编写解码函数的程序时,由于SCCP协议最底层的解码单位是参数级别,即像Message type,Source local reference和Protocol class等参数,各自都有对应的参数解码函数,因此对于消息类型参数,必选固定部分参数,必选可变部分参数,只要按照顺序调用参数解码函数就可以完成解码,真正复杂的是对可选参数的处理,因为消息定义中的可选参数在实际消息中是否出现以及参数出现的顺序是不固定的,唯一确定的是,可以通过可选部分参数指针找到可选部分参数开始的位置,然后通过消息总长度减去固定部分长度得到可选部分长度,最后再根据可选参数部分的结构通过循环处理的方式进行解码,每次循环处理的过程是先判断可选参数的类型,然后调用相应的参数解码函数。下面用一个流程图来说明CR消息的解码过程,此过程可以推广到所有其他SCCP消息的解码,如图4所示。
在SCCP协议的消息中,绝大部分都包含data或longdata参数,这2个参数表示SCCP的用户数据(service data unit,SDU),也叫做SCCP上层协议的协议数据单元(protocol olata unit,PDU)。SCCP的大多数消息都包含数据参数,从而加大了获取PDU的难度,另外,消息类型的不同导致获取的方法也不同,包含Data参数的消息分类如表3所示。
根据获取Data数据的复杂程度,把相应函数分为4类。每类函数根据处理的复杂程度,都需要辅助函数的支持,例如,类型2中对DT1和DT2的处理,这2条消息中都有参数包含more data indicator字段,其作用是指示本条数据消息后面是否有属于同一个SDU的数据,因此该参数是DT1和DT2消息获取数据的重要操作依据。对于其他类型的函数,辅助参数起着同样的作用,另外个别辅助参数本身是可选的,如类型4函数中的辅助参数segments,因此在类型4函数处理时需要判断的条件就很多,首先需要知道segments参数是否存在,存在的话才有组装的可能,不存在的话说明数据不需要组装。4类函数对参数的需要性如表5所示。
第1个参数(Message type)表示消息类型,根据消息类型表格可知,DT1消息类型为OX0000 0110即6;第2个参数(Destination local reference)是目的地本地参考,表示目的地地址信息;第3个参数(Segmenting/reassembling)叫做分割/组装,长度是1个字节,格式如图5所示。