The format of the name of each generated OER decode function is as follows:
OERDec_[<prefix>]<prodName>
where <prodName>
is the name of the ASN.1
production for which the function is being generated and
<prefix>
is an optional prefix that can be
set via a configuration file setting. The configuration setting used
to set the prefix is the <typePrefix> element. This element
specifies a prefix that will be applied to all generated typedef
names and function names for the production.
The calling sequence for each decode function is as follows:
status = OERDec_<name> (OSCTXT* pctxt, <name>* pvalue);
In this definition, <name> denotes the prefixed production name defined above.
The pctxt
argument is used to hold a context pointer
to keep track of decode parameters. This is a basic "handle"
variable that is used to make the function reentrant so it can be
used in an asynchronous or threaded application. The user is
required to supply a pointer to a variable of this type declared
somewhere in his or her program.
The pvalue
argument is a pointer to a variable to
hold the decoded result. This variable is of the type generated from
the ASN.1 production. The decode function will automatically
allocate dynamic memory for variable length fields within the
structure. This memory is tracked within the context structure and
is released when the context structure is freed.
The function result variable stat
returns the status
of the decode operation. Status code 0 (0) indicates the function
was successful. A negative value indicates decoding failed. Return
status values are defined in the "asn1ErrCodes.h" and
"rtxErrCodes.h" header files. The reason text and a stack trace can
be displayed using the rtxErrPrint function described later in this
document.
If the code is generated using the -coer switch, then the decoding will be canonical. If the code is generated using the -oer switch, the decoding can be made canonical by setting the appropriate flag in the context prior to calling the decode function:
rtxCtxtSetFlag(pctxt, ASN1CANON);