关于外部编解码器(Exteranl Codecs,简称CD)
许多协议和软件系统采用自己专有的方式编码信息,TTCN-3工具提供商没有为这些协议和系统提供编解实现,用户需要自己根据协议或者软件系统的编码规则来开发编解码实现。例如,DNS和SIP协议都用专有的编码规则,因此需要用户定义编解码。只有当待测系统通信完全采用标准的编码规则如ASN.1的BERs或者PERs,TTCN-3工具提供商有可能提供现成可用的编解码器。一般来讲,是外部的编解码(External Codecs)负责执行value representation used in the TE和待测系统(SUT)可识别值间的编码,以及反过来的解码执行。
访问TTCN-3 Values
values的编码和解码,外部编解码器都必须处理TTCN-3 values。在编码过程中,a value需要被检查和仔细解析,依据编码规则生成二进制表示(binary representation)。在解码过程中,依据待测发过来的编码值解码生成一个新的TTCN-3值。这就要求外部编解码器可以处理TE内部的值。显然,不同TTCN-3工具TE内部值的表达会有变化。TCI标准定义了抽象的类型和值的界面,弱化了不同TTCN-3供应商对编解码器值得影响。有了这些标准界面,编解码器实现(甚至是编解码生成工具)可以独立于TTCN-3工具实现。
编码器实现
一个编码操作的实现实际是非常简单的。检查过要编码的TTCN-3 value的类型后,一个合适的编码机制将被唤起,这个编码机制根据选定的编码规则构建和返回编码的二进制字符串。当然,取决于编码机制,需要或多或少的努力来实际生成这个编码形式。编码一个值通常需要系统的遍历值的结构(这个结构可以被认为是一个标记的树),以及恰当的装配构成值的子树的编码。
遍历和检查TTCN-3 value tree通过TCI Value界面完成, TCI Value界面提供了若干访问TTCN-3值得操作,包括所有基础类型和用户定义TTCN-3类型。例如,GetField操作检索record或者set类型特定字段的值,getBoolean返回实际分配给TTCN-3布尔变量的值,依此类推。对于编码数据的构造,也就是encode操作返回值,TCI仅指定具体值的结构,这和TriMessageType type用的是同样的。TRI和TCI都没有为构造这样的值指定操作,因此外部编解码器必须自己实现这样的操作。
在我们的DNS消息的例子情况下,我们正在处理下边表展示的类型和值。在编码时,TE调用外部编解码器中的encode操作,传递模版a_NokiaQuestion作为要编码的DnsMessage值,编码这个值,encolder首先应用getField操作检索DnsMessage值的identifier字段,然后用getInt提取这个字段的值,这个值就是12345。DNS标准强制编码identifier字段为16 bit以网络字节顺序。因此,encoder将以字节0X3039开始消息编码。接着开始访问这个record类型的messagekind字段,提取e_question枚举类型,新增一个zero bit到编码数据,然后继续处理消息的其余部分。
Type integer Identification (0.. 65535) ;
Type enumerated MessageKind { e_question, e_answer } ;
Type charstring Question ;
Type charstring Answer ;
Type record DnsMessage {
Identification identification ,
MessageKind messageKind ,
Question question ,
Answer answer optional
}
Template DNSMessage a_NokiaQuestion := {
Identification :=12345
messageKind :=e_question ,
question := “ www.nokia.com” ,
answer :=omit
解码器实现
依据预期的消息类型及编码的数据,Decode操作实现试图构建一个TTCN-3的值。第一项任务因此通常是检测预期的消息类型,选择解码器负责这个特定类型解码的解码器实现。在详细的检查这个编码的数据时,解码器试图构建值的结构。构造值再次使用抽象的TCI Value界面。
在我们的DNS例子里,当调用解码器时假设消息是DnsMessage,解码器在Type 界面调用newInstance操作开始建造一个空的DnsMessage值。解码器然后开始检测接收的数据,试图以”network byte order”整数解码开始的16 bit。解码的结果应用setInt操作存储在一个新建实例(instance)Identifier里边。最终,采用setField操作,这个值会被设定为DnsMessage的identifier域。应用同样的方式,编码消息的其余部分将被检测,填进DnsMessage的其它域。一旦编码的消息完全被检测,DnsMessage的所有值域都被设定,解码完成。
解码器在构造值时会碰到一些不合法的编码或者编码数据的信息丢失情况,这是一个解码错误,解码操作返回给TE一个空的解码值来报告错误。否则,成功解码的结果传递给TE.
TTCN-3测试系统外部编解码器文档下载
下载信息 [文件大小:466.83 KB 下载次数: 次] |
![]() |