How do I work with OPTIONAL and DEFAULT components?

A structure which has OPTIONAL and DEFAULT components in it has a bit_mask field generated for it along with #define constants for each non-pointer optional field. For example,

Module DEFINITIONS ::= BEGIN
DataCard ::= SEQUENCE {
a [0] BOOLEAN OPTIONAL,
b [1] BOOLEAN OPTIONAL,
c [2] BOOLEAN
}
END

After passing the above notation through the ASN.1 compiler, the following is generated in the header file:

typedef struct DataCard {
unsigned char bit_mask;
# define a_present 0x80
# define b_present 0x40
ossBoolean a; 
ossBoolean b; 
ossBoolean c;
} DataCard;

To indicate the presence of one particular field, you simply set the bit_mask field equal to the corresponding #define constant. To indicate the presence of more than one optional field, you simply perform a logical OR with the #define constants corresponding to the desired optional fields and assign the result to the bit_mask field. Sample code to illustrate:

DataCard myData;
myData.bit_mask &= a_present;

In the case of pointered elements, a value of NULL indicates absence of the optional fields while a non-NULL value indicates presence. For a practical example on how to select OPTIONAL and DEFAULT components, please refer to the example in the OSS ASN.1/C API Reference Manual (section 10.2 of the April 2011 edition).

 


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.



Contact Support
contact Our office hours
24 hours/day, 7 days/week

  • Phone: 1-888-OSS-2761 (USA and Canada)
  • Phone: 1-732-302-9669 (International)
  • Fax: 1-732-302-0023
  • Email: support@oss.com
Free Trial
download

Test drive the OSS Nokalva ASN.1, 4G and XML Tools now! Your trial includes complete software, documentation, sample programs, free 24x7 technical support and more.




Learn ASN.1
Learn ASN.1

Our expert personnel can help you learn ASN.1!

We offer 4-day ASN.1 courses at our headquarters or your premises.