我需要解码一些很长的BER消息,我有两种不同的情况。一个有一些没有特定标签的强制参数,还有许多带隐式标签的可选参数。另一个只有可选的隐式标签,例如:
案例1:
MySeq ::= SEQUENCE
{
a TYPE1,
b TYPE1,
C TYPE1,
-- first 3 elements have same type
d IMPLICT [1] TYPEd OPTIONAL,
e IMPLICT [1] TYPEe OPTIONAL,
等,以及更多参数,大约40个,其中一些参数构建,内部也构造了参数。
案例2:
MySeq ::= SEQUENCE
{
a IMPLICT [1] TYPEa OPTIONAL,
b IMPLICT [2] TYPEb OPTIONAL,
c IMPLICT [3] TYPEc OPTIONAL,
d IMPLICT [4] TYPEd OPTIONAL,
e IMPLICT [5] TYPEe OPTIONAL,
etc
关键是,我真的需要这些消息中的3或4个参数
我不关心其余的事情。如果我不需要,我不希望我的解码器花费如此多的处理时间来解码完整的消息。有没有标准的方法来做到这一点?
在第二种情况下,我提出了一个想法,将ASN.1定义从SEQUENCE更改为SET,如:
MySeq ::= SET
{
a IMPLICT [1] TYPEa OPTIONAL,
a20 IMPLICT [20] TYPEa OPTIONAL,
a40 IMPLICT [40] TYPEa OPTIONAL,
...
}
我的意思是,解析只会将这3个参数解码为SET。当然,我必须在接收时修改二进制消息,将其从SEQUENCE转换为SET(只有一位)。但是我不能用第一个SEQUENCE做到这一点
有没有办法表明"忽略未知标签" ?
我已经读过关于"可扩展性的内容"但我无法理解这是否是我需要的,或者它只是意味着在SEQUENCE结束时的可扩展性,就像我使用的是可扩展性标记& #34; ..."
提前致谢,
路易斯
答案 0 :(得分:0)
尝试使用SEQUENCE标记将其更改为SET标记是危险的,因为序列可以多次包含相同的标记,只要它们之间存在非可选组件即可。 SET无法处理此问题。此外,解码SET本质上比以健壮的方式解码SEQUENCE更复杂,因为解码器必须能够以任何顺序处理组件。
关于可扩展性,你是正确的,它相当于在每个SEQUENCE,SET和CHOICE类型的末尾添加...扩展标记,所以我不确定这会对你有所帮助。如果不是每个SEQUENCE的末尾都需要扩展标记,这可能对您没用。
另一种方法是尝试使用OSS ASN.1工具(http://www.oss.com)的“部分解码”功能,该功能允许您选择您感兴趣的消息的特定组件并跳过其他组件。
披露:我为OSS Nokalva,Inc。工作。