It is safer to always pass the PDU number of the data type desired for decoding, as it assures that the decoder will fill the correct compiler-generated structure.
However if you are decoding BER or DER encodings, the decoder can (most of the time) figure out which compiler-generated structure to fill from the encoding alone. In such a case, you could set the PDU number variable to a value of zero before calling the decoder:
int myPduNum; . . . . myPduNum = 0; rc = ossDecode(world, &myPduNum, &encodedData, &decodedDataPtr);
Before the decoder returns, it will set the passed PDU number variable equal to the #defined PDU identification macro constant of the structure which it filled. Note that the zero PDU number will only work if your ASN.1 syntax DOES NOT contain duplicate PDU tags. Otherwise, there is no way for the decoder to determine which PDU to decode. The OSS ASN.1 compiler issues warnings if the ASN.1 specification contains PDUs with duplicate tags.
If, on the other hand, you are decoding PER or UPER encodings, the decoder will not be able to figure out which compiler-generated structure to fill from the encoding alone. In such a case, you should set the PDU number variable equal to the compiler-generated #defined PDU identification macro constant corresponding to the desired type for decoding:
int myPduNum; . . . . myPduNum = MyASN1DataType_PDU; rc = ossDecode(world, &myPduNum, &encodedData, &decodedDataPtr);
where MyASN1DataType_PDU is the #defined identification macro constant of the type intended for decoding.
The samples included with some of the Knowledge Center answers are meant for your general understanding of the OSS products. Different versions of the products might produce slightly different outputs. Consult the products documentation and samples for the most up-to-date products information and code examples.
Test drive the OSS Nokalva ASN.1, LTE, and XML Tools now! Your trial includes complete software, documentation, sample programs, free 24x7 technical support and more.
Our expert personnel can help you learn ASN.1!
We offer 4-day ASN.1 courses at our headquarters or your premises.