diff options
author | Lev Walkin <vlm@lionet.info> | 2004-09-08 00:26:56 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2004-09-08 00:26:56 +0000 |
commit | 67ec2091cd6cc6127acf7435ee55fbc0de47f675 (patch) | |
tree | 9c52942dc61f0e896c32157f7e80ae90f555d124 /tests/43-recursion-OK.asn1.-P | |
parent | 0ede18cbaac796adf4a0dc0696b36e956ac8ff2e (diff) |
tests for recursive definitions
Diffstat (limited to 'tests/43-recursion-OK.asn1.-P')
-rw-r--r-- | tests/43-recursion-OK.asn1.-P | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/tests/43-recursion-OK.asn1.-P b/tests/43-recursion-OK.asn1.-P new file mode 100644 index 00000000..a38cd02b --- /dev/null +++ b/tests/43-recursion-OK.asn1.-P @@ -0,0 +1,315 @@ + +/*** <<< INCLUDES [Test-structure-1] >>> ***/ + +#include <Test-structure-1.h> +#include <INTEGER.h> +#include <asn_SET_OF.h> +#include <constr_SET_OF.h> +#include <asn_SEQUENCE_OF.h> +#include <constr_SEQUENCE_OF.h> +#include <constr_SEQUENCE.h> + +/*** <<< DEPS [Test-structure-1] >>> ***/ + +extern asn1_TYPE_descriptor_t asn1_DEF_Test_structure_1; + +/*** <<< TYPE-DECLS [Test-structure-1] >>> ***/ + + +typedef struct Test_structure_1 { + struct t_member1 { + A_SET_OF(struct Test_structure_1) list; + + /* Context for parsing across buffer boundaries */ + ber_dec_ctx_t _ber_dec_ctx; + } t_member1; + struct t_member2 { + A_SEQUENCE_OF(struct Test_structure_1) list; + + /* Context for parsing across buffer boundaries */ + ber_dec_ctx_t _ber_dec_ctx; + } t_member2; + struct Test_structure_1 *t_member3 /* OPTIONAL */; + INTEGER_t t_member4; + + /* Context for parsing across buffer boundaries */ + ber_dec_ctx_t _ber_dec_ctx; +} Test_structure_1_t; + +/*** <<< STAT-DEFS [Test-structure-1] >>> ***/ + +static asn1_TYPE_member_t asn1_MBR_t_member1[] = { + { 0, 0, + .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + .tag_mode = 0, + .type = (void *)&asn1_DEF_Test_structure_1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "" + }, +}; +static ber_tlv_tag_t asn1_DEF_t_member1_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)) +}; +static asn1_SET_OF_specifics_t asn1_DEF_t_member1_specs = { + sizeof(struct t_member1), + offsetof(struct t_member1, _ber_dec_ctx), +}; +static /* Use -fall-defs-global to expose */ +asn1_TYPE_descriptor_t asn1_DEF_t_member1 = { + "t-member1", + SET_OF_constraint, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_print, + SET_OF_free, + 0, /* Use generic outmost tag fetcher */ + asn1_DEF_t_member1_tags, + sizeof(asn1_DEF_t_member1_tags) + /sizeof(asn1_DEF_t_member1_tags[0]), /* 1 */ + 1, /* Tags to skip */ + 1, /* Whether CONSTRUCTED */ + asn1_MBR_t_member1, + 1, /* Single element */ + &asn1_DEF_t_member1_specs /* Additional specs */ +}; + +static asn1_TYPE_member_t asn1_MBR_t_member2[] = { + { 0, 0, + .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + .tag_mode = 0, + .type = (void *)&asn1_DEF_Test_structure_1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "" + }, +}; +static ber_tlv_tag_t asn1_DEF_t_member2_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn1_SET_OF_specifics_t asn1_DEF_t_member2_specs = { + sizeof(struct t_member2), + offsetof(struct t_member2, _ber_dec_ctx), +}; +static /* Use -fall-defs-global to expose */ +asn1_TYPE_descriptor_t asn1_DEF_t_member2 = { + "t-member2", + SEQUENCE_OF_constraint, + SEQUENCE_OF_decode_ber, + SEQUENCE_OF_encode_der, + SEQUENCE_OF_print, + SEQUENCE_OF_free, + 0, /* Use generic outmost tag fetcher */ + asn1_DEF_t_member2_tags, + sizeof(asn1_DEF_t_member2_tags) + /sizeof(asn1_DEF_t_member2_tags[0]), /* 1 */ + 1, /* Tags to skip */ + 1, /* Whether CONSTRUCTED */ + asn1_MBR_t_member2, + 1, /* Single element */ + &asn1_DEF_t_member2_specs /* Additional specs */ +}; + +static asn1_TYPE_member_t asn1_MBR_Test_structure_1[] = { + { 0, offsetof(struct Test_structure_1, t_member1), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), + .tag_mode = 0, + .type = (void *)&asn1_DEF_t_member1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "t-member1" + }, + { 0, offsetof(struct Test_structure_1, t_member2), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + .tag_mode = 0, + .type = (void *)&asn1_DEF_t_member2, + .memb_constraints = 0, /* Defer to actual type */ + .name = "t-member2" + }, + { 1, offsetof(struct Test_structure_1, t_member3), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), + .tag_mode = 0, + .type = (void *)&asn1_DEF_Test_structure_1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "t-member3" + }, + { 0, offsetof(struct Test_structure_1, t_member4), + .tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), + .tag_mode = 0, + .type = (void *)&asn1_DEF_INTEGER, + .memb_constraints = 0, /* Defer to actual type */ + .name = "t-member4" + }, +}; +static ber_tlv_tag_t asn1_DEF_Test_structure_1_tags[] = { + (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)) +}; +static asn1_TYPE_tag2member_t asn1_DEF_Test_structure_1_tag2el[] = { + { (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)), 3, 0, 0 }, /* t-member4 at 19 */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 1, 0, 1 }, /* t-member2 at 16 */ + { (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)), 2, -1, 0 }, /* t-member3 at 17 */ + { (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 0, 0, 0 }, /* t-member1 at 15 */ +}; +static asn1_SEQUENCE_specifics_t asn1_DEF_Test_structure_1_specs = { + sizeof(struct Test_structure_1), + offsetof(struct Test_structure_1, _ber_dec_ctx), + asn1_DEF_Test_structure_1_tag2el, + 4, /* Count of tags in the map */ + -1, /* Start extensions */ + -1 /* Stop extensions */ +}; +asn1_TYPE_descriptor_t asn1_DEF_Test_structure_1 = { + "Test-structure-1", + SEQUENCE_constraint, + SEQUENCE_decode_ber, + SEQUENCE_encode_der, + SEQUENCE_print, + SEQUENCE_free, + 0, /* Use generic outmost tag fetcher */ + asn1_DEF_Test_structure_1_tags, + sizeof(asn1_DEF_Test_structure_1_tags) + /sizeof(asn1_DEF_Test_structure_1_tags[0]), /* 1 */ + 1, /* Tags to skip */ + 1, /* Whether CONSTRUCTED */ + asn1_MBR_Test_structure_1, + 4, /* Elements count */ + &asn1_DEF_Test_structure_1_specs /* Additional specs */ +}; + + +/*** <<< INCLUDES [Choice-1] >>> ***/ + +#include <Choice-1.h> +#include <INTEGER.h> +#include <asn_SET_OF.h> +#include <constr_SET_OF.h> +#include <constr_CHOICE.h> + +/*** <<< DEPS [Choice-1] >>> ***/ + +typedef enum Choice_1_PR { + Choice_1_PR_NOTHING, /* No components present */ + Choice_1_PR_and, + Choice_1_PR_or, + Choice_1_PR_not, + Choice_1_PR_other, +} Choice_1_PR; +extern asn1_TYPE_descriptor_t asn1_DEF_Choice_1; + +/*** <<< TYPE-DECLS [Choice-1] >>> ***/ + + +typedef struct Choice_1 { + Choice_1_PR present; + union { + struct Choice_1 and; + struct or { + A_SET_OF(struct Choice_1) list; + + /* Context for parsing across buffer boundaries */ + ber_dec_ctx_t _ber_dec_ctx; + } or; + struct Choice_1 not; + INTEGER_t other; + } choice; + + /* Context for parsing across buffer boundaries */ + ber_dec_ctx_t _ber_dec_ctx; +} Choice_1_t; + +/*** <<< STAT-DEFS [Choice-1] >>> ***/ + +static asn1_TYPE_member_t asn1_MBR_or[] = { + { 0, 0, + .tag = -1 /* Ambiguous tag (CHOICE|ANY?) */, + .tag_mode = 0, + .type = (void *)&asn1_DEF_Choice_1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "" + }, +}; +static ber_tlv_tag_t asn1_DEF_or_tags[] = { + (ASN_TAG_CLASS_CONTEXT | (2 << 2)) +}; +static asn1_SET_OF_specifics_t asn1_DEF_or_specs = { + sizeof(struct or), + offsetof(struct or, _ber_dec_ctx), +}; +static /* Use -fall-defs-global to expose */ +asn1_TYPE_descriptor_t asn1_DEF_or = { + "or", + SET_OF_constraint, + SET_OF_decode_ber, + SET_OF_encode_der, + SET_OF_print, + SET_OF_free, + 0, /* Use generic outmost tag fetcher */ + asn1_DEF_or_tags, + sizeof(asn1_DEF_or_tags) + /sizeof(asn1_DEF_or_tags[0]), /* 1 */ + 1, /* Tags to skip */ + 1, /* Whether CONSTRUCTED */ + asn1_MBR_or, + 1, /* Single element */ + &asn1_DEF_or_specs /* Additional specs */ +}; + +static asn1_TYPE_member_t asn1_MBR_Choice_1[] = { + { 0, offsetof(struct Choice_1, choice.and), + .tag = (ASN_TAG_CLASS_CONTEXT | (1 << 2)), + .tag_mode = +1, /* EXPLICIT tag at current level */ + .type = (void *)&asn1_DEF_Choice_1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "and" + }, + { 0, offsetof(struct Choice_1, choice.or), + .tag = (ASN_TAG_CLASS_CONTEXT | (2 << 2)), + .tag_mode = -1, /* IMPLICIT tag at current level */ + .type = (void *)&asn1_DEF_or, + .memb_constraints = 0, /* Defer to actual type */ + .name = "or" + }, + { 0, offsetof(struct Choice_1, choice.not), + .tag = (ASN_TAG_CLASS_CONTEXT | (3 << 2)), + .tag_mode = +1, /* EXPLICIT tag at current level */ + .type = (void *)&asn1_DEF_Choice_1, + .memb_constraints = 0, /* Defer to actual type */ + .name = "not" + }, + { 0, offsetof(struct Choice_1, choice.other), + .tag = (ASN_TAG_CLASS_CONTEXT | (4 << 2)), + .tag_mode = +1, /* EXPLICIT tag at current level */ + .type = (void *)&asn1_DEF_INTEGER, + .memb_constraints = 0, /* Defer to actual type */ + .name = "other" + }, +}; +static asn1_TYPE_tag2member_t asn1_DEF_Choice_1_tag2el[] = { + { (ASN_TAG_CLASS_CONTEXT | (1 << 2)), 0, 0, 0 }, /* and at 22 */ + { (ASN_TAG_CLASS_CONTEXT | (2 << 2)), 1, 0, 0 }, /* or at 23 */ + { (ASN_TAG_CLASS_CONTEXT | (3 << 2)), 2, 0, 0 }, /* not at 24 */ + { (ASN_TAG_CLASS_CONTEXT | (4 << 2)), 3, 0, 0 }, /* other at 26 */ +}; +static asn1_CHOICE_specifics_t asn1_DEF_Choice_1_specs = { + sizeof(struct Choice_1), + offsetof(struct Choice_1, _ber_dec_ctx), + offsetof(struct Choice_1, present), + sizeof(((struct Choice_1 *)0)->present), + asn1_DEF_Choice_1_tag2el, + 4, /* Count of tags in the map */ + 0 /* Whether extensible */ +}; +asn1_TYPE_descriptor_t asn1_DEF_Choice_1 = { + "Choice-1", + CHOICE_constraint, + CHOICE_decode_ber, + CHOICE_encode_der, + CHOICE_print, + CHOICE_free, + CHOICE_outmost_tag, + 0, /* No explicit tags (pointer) */ + 0, /* No explicit tags (count) */ + 0, /* Tags to skip */ + 1, /* Whether CONSTRUCTED */ + asn1_MBR_Choice_1, + 4, /* Elements count */ + &asn1_DEF_Choice_1_specs /* Additional specs */ +}; + |