我需要解碼一些很長的BER消息,並且我有兩種不同的情況。其中一個有幾個強制參數,沒有特定的標籤,還有很多帶有隱式標籤的可選參數。另外只有可選隱含的標籤,例如:帶有未定義標籤的ASN.1 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從改變設置,如:
MySeq ::= SET
{
a IMPLICT [1] TYPEa OPTIONAL,
a20 IMPLICT [20] TYPEa OPTIONAL,
a40 IMPLICT [40] TYPEa OPTIONAL,
...
}
我的意思是,解析只會解碼的3個參數爲一組。當然,我將不得不在接收時修改二進制消息,將其從SEQUENCE轉換爲SET(僅一個位)。但是我不能用第一個SEQUENCE做到這一點。
有什麼方法可以指示「忽略未知標籤」?
我讀過關於「可擴展性隱含」的內容,但是我不明白這是否是我需要的,或者它僅僅意味着在序列結尾的可擴展性,就好像我正在使用可擴展性標記「...」。
由於提前,
路易斯
嗨,謝謝。 SET中的更改不是一個風險,因爲所有參數都具有不同的隱式標籤,如「Case 2」序列中所示。 無論如何,我正在測試OSS編譯器的「ASN1.DeferDecoding」功能;-) 似乎在這種情況下,我不'關心的所有字段只是編碼爲OpenType,只是一個沒有進一步解碼的緩衝區。我想我正在那樣。 – Kalki70