diff options
Diffstat (limited to 'skeletons/constr_CHOICE.h')
-rw-r--r-- | skeletons/constr_CHOICE.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/skeletons/constr_CHOICE.h b/skeletons/constr_CHOICE.h new file mode 100644 index 00000000..70766e9d --- /dev/null +++ b/skeletons/constr_CHOICE.h @@ -0,0 +1,65 @@ +/*- + * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved. + * Redistribution and modifications are permitted subject to BSD license. + */ +#ifndef _CONSTR_CHOICE_H_ +#define _CONSTR_CHOICE_H_ + +#include <constr_TYPE.h> + +/* + * A single element of the CHOICE type. + */ +typedef struct asn1_CHOICE_element_s { + int memb_offset; /* Offset of the element */ + int optional; /* Whether the element is optional */ + ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ + int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ + asn1_TYPE_descriptor_t + *type; /* Member type descriptor */ + char *name; /* ASN.1 identifier of the element */ +} asn1_CHOICE_element_t; + +typedef struct asn1_CHOICE_tag2member_s { + ber_tlv_tag_t el_tag; /* Outmost tag of the member */ + int el_no; /* Index of the associated member, base 0 */ +} asn1_CHOICE_tag2member_t; + +typedef struct asn1_CHOICE_specifics_s { + /* + * Target structure description. + */ + int struct_size; /* Size of the target structure. */ + int ctx_offset; /* Offset of the ber_dec_ctx_t member */ + int pres_offset; /* Identifier of the present member */ + int pres_size; /* Size of the identifier (enum) */ + + /* + * Members of the CHOICE structure. + */ + asn1_CHOICE_element_t *elements; + int elements_count; + + /* + * Tags to members mapping table. + */ + asn1_CHOICE_tag2member_t *tag2el; + int tag2el_count; + + /* + * Extensions-related stuff. + */ + int extensible; /* Whether CHOICE is extensible */ +} asn1_CHOICE_specifics_t; + +/* + * A set specialized functions dealing with the CHOICE type. + */ +asn_constr_check_f CHOICE_constraint; +ber_type_decoder_f CHOICE_decode_ber; +der_type_encoder_f CHOICE_encode_der; +asn_outmost_tag_f CHOICE_outmost_tag; +asn_struct_print_f CHOICE_print; +asn_struct_free_f CHOICE_free; + +#endif /* _CONSTR_CHOICE_H_ */ |