2017-10-12 8 views
-1

Ich möchte CONTAINING in asn1c (http://lionet.info/asn1c/blog/) verwenden. Ich weiß nicht, wie ich Werte für die CONTAINING-Strukturen angeben kann.Wie kann ich eine Struktur in asn1c gekapselt verwenden? (mit CONTAINING)

In meinem Beispiel möchte ich Werte in der Octasd SEQUENCE für Version und Tsapolicy geben. Ich dachte, ich kann es wie alle anderen asn1-Typen machen.

Andere Typen zum Beispiel der INTGER Sie können Funktionen verwenden, um Werte zu geben. kann ich den Wert content mit asn_long2INTEGER Funktion geben:

EncapsulatedContentInfo_t *encapcontinfo; 
asn_long2INTEGER(&encapcontinfo->contentType, 32); 

Im Code zum Beispiel: EncapsulatedContentInfo-> eContent.octasd.version aber ich weiß nicht "sehen" hinter octasd.

Gibt es eine Möglichkeit, eine gekapselte Struktur zu erreichen?

Teil meiner asn1:

EncapsulatedContentInfo ::= SEQUENCE { 
    contentType INTEGER, 
    eContent [0] IMPLICIT SEQUENCE { 
     octasd Octasd 
    } 
} 

Octasd ::= OCTET STRING (CONTAINING SEQUENCE { 
    version INTEGER, 
    tsapolicy OBJECT IDENTIFIER 
}) 

Jede Beratung sehr geschätzt.

Antwort

0

Der Lev Walkin-Compiler scheint die Codegenerierung für CONTAINING-Klauseln nicht zu unterstützen (zumindest keine eingebetteten). Ich bin jedoch nicht sehr vertraut damit.

Was Sie vielleicht tun prüfen, ob Sie wirklich das CONTAINING Schlüsselwort verwenden müssen, ist die Art zu trennen, zB:

Octasd ::= OCTET STRING -- (CONTAINING OctasdSeq) 

OctasdSeq ::= SEQEUENCE { 
    version INTEGER, 
    tsapolicy OBJECT IDENTIFIER 
} 

Dies könnte alles, was Sie Octasd als einfaches Oktett String zu behandeln und ihre Bytes übergeben (der Wert Bytes, jedenfalls) zum Decoder für OctasdSeq. Ich schätze, das könnte etwas schwieriger sein, wenn Sie PER anstelle von BER/CER/DER wegen möglicher Ausrichtungsprobleme verwenden würden.

Verwandte Themen