new meaning of life

git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@169 59561ff5-6e30-0410-9f3c-9617f08c8826
This commit is contained in:
vlm 2004-08-20 13:36:32 +00:00
parent d8d9035270
commit 21e4600d0f
10 changed files with 812 additions and 652 deletions

View File

@ -25,6 +25,7 @@ BEGIN
Name ::= SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF IA5String
RelativeDistinguishedName ::= SET SIZE (1..MAX) OF
IA5String (FROM("A".."Z"|"a".."z"|"0-9"|",-."))
END

View File

@ -29,46 +29,54 @@ typedef struct T {
/*** <<< STAT-DEFS [T] >>> ***/
static asn1_SET_OF_element_t asn1_DEF_collection_elements[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
(void *)&asn1_DEF_T2 },
};
static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
sizeof(struct collection),
offsetof(struct collection, _ber_dec_ctx),
asn1_DEF_collection_elements
};
asn1_TYPE_descriptor_t asn1_DEF_collection = {
"collection",
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_collection_tags,
sizeof(asn1_DEF_collection_tags)
/sizeof(asn1_DEF_collection_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_collection_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
{ offsetof(struct T, int), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"int"
static asn1_TYPE_member_t asn1_MBR_collection[] = {
{ 0, 0,
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_T2,
.memb_constraints = 0, /* Defer to actual type */
.name = ""
},
{ offsetof(struct T, collection), 0,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_collection,
"collection"
};
static ber_tlv_tag_t asn1_DEF_collection_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_collection_specs = {
sizeof(struct collection),
offsetof(struct collection, _ber_dec_ctx),
};
asn1_TYPE_descriptor_t asn1_DEF_collection = {
"collection",
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_collection_tags,
sizeof(asn1_DEF_collection_tags)
/sizeof(asn1_DEF_collection_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_collection,
1, /* Single element */
&asn1_DEF_collection_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_T[] = {
{ 0, offsetof(struct T, int),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "int"
},
{ 0, offsetof(struct T, collection),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_collection,
.memb_constraints = 0, /* Defer to actual type */
.name = "collection"
},
};
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@ -81,8 +89,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_T_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
sizeof(struct T),
offsetof(struct T, _ber_dec_ctx),
asn1_DEF_T_elements,
2, /* Elements count */
asn1_DEF_T_tag2el,
2, /* Count of tags in the map */
-1, /* Start extensions */
@ -101,6 +107,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T = {
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T,
2, /* Elements count */
&asn1_DEF_T_specs /* Additional specs */
};
@ -128,18 +136,20 @@ typedef struct T2 {
/*** <<< STAT-DEFS [T2] >>> ***/
static asn1_SEQUENCE_element_t asn1_DEF_T2_elements[] = {
{ offsetof(struct T2, flag), 0,
(ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
0,
(void *)&asn1_DEF_BOOLEAN,
"flag"
static asn1_TYPE_member_t asn1_MBR_T2[] = {
{ 0, offsetof(struct T2, flag),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_BOOLEAN,
.memb_constraints = 0, /* Defer to actual type */
.name = "flag"
},
{ offsetof(struct T2, str), 0,
(ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
0,
(void *)&asn1_DEF_UTF8String,
"str"
{ 0, offsetof(struct T2, str),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (12 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_UTF8String,
.memb_constraints = 0, /* Defer to actual type */
.name = "str"
},
};
static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
@ -152,8 +162,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_T2_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_T2_specs = {
sizeof(struct T2),
offsetof(struct T2, _ber_dec_ctx),
asn1_DEF_T2_elements,
2, /* Elements count */
asn1_DEF_T2_tag2el,
2, /* Count of tags in the map */
-1, /* Start extensions */
@ -172,6 +180,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T2 = {
/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T2,
2, /* Elements count */
&asn1_DEF_T2_specs /* Additional specs */
};

View File

@ -21,7 +21,7 @@ BEGIN
*/
LogLine ::= SEQUENCE {
line-digest IA5String, -- Log line normal form
varsets SEQUENCE (1..MAX) OF VariablePartSet
varsets SEQUENCE SIZE(1..MAX) OF VariablePartSet
}
/*
@ -30,7 +30,7 @@ BEGIN
* or a range between two samples.
*/
VariablePartSet ::= SEQUENCE {
vparts SEQUENCE (0..MAX) OF VariablePart, -- {123,321}
vparts SEQUENCE SIZE(0..MAX) OF VariablePart, -- {123,321}
resolution ActionItem
}
@ -39,7 +39,7 @@ BEGIN
*/
VariablePart ::= CHOICE {
-- A set of acceptable values
vset SET (1..MAX) OF VisibleString,
vset SET SIZE(1..MAX) OF VisibleString,
-- A range of acceptable values
vrange SEQUENCE {
from VisibleString,

View File

@ -7,18 +7,18 @@ BEGIN
LogLine ::= SEQUENCE {
line-digest IA5String,
varsets SEQUENCE OF VariablePartSet,
varsets SEQUENCE SIZE(1..MAX) OF VariablePartSet,
...
}
VariablePartSet ::= SEQUENCE {
vparts SEQUENCE OF VariablePart,
vparts SEQUENCE SIZE(0..MAX) OF VariablePart,
resolution ActionItem,
...
}
VariablePart ::= CHOICE {
vset SET OF VisibleString,
vset SET SIZE(1..MAX) OF VisibleString,
vrange SEQUENCE {
from VisibleString,
to VisibleString,

View File

@ -31,48 +31,86 @@ typedef struct LogLine {
ber_dec_ctx_t _ber_dec_ctx;
} LogLine_t;
/*** <<< CODE [LogLine] >>> ***/
static int
memb_varsets_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
size_t size;
if(!sptr) {
_ASN_ERRLOG(app_errlog, app_key,
"%s: value not given", td->name);
return -1;
}
{ /* Determine the number of elements */
const A_SEQUENCE_OF(void) *list;
(const void *)list = sptr;
size = list->count;
}
if((size >= 1)) {
/* Constraint check succeeded */
return 1;
} else {
_ASN_ERRLOG(app_errlog, app_key,
"%s: constraint failed", td->name);
return -1;
}
}
/*** <<< STAT-DEFS [LogLine] >>> ***/
static asn1_SET_OF_element_t asn1_DEF_varsets_elements[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
(void *)&asn1_DEF_VariablePartSet },
};
static ber_tlv_tag_t asn1_DEF_varsets_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_varsets_specs = {
sizeof(struct varsets),
offsetof(struct varsets, _ber_dec_ctx),
asn1_DEF_varsets_elements
};
asn1_TYPE_descriptor_t asn1_DEF_varsets = {
"varsets",
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_varsets_tags,
sizeof(asn1_DEF_varsets_tags)
/sizeof(asn1_DEF_varsets_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_varsets_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_LogLine_elements[] = {
{ offsetof(struct LogLine, line_digest), 0,
(ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
0,
(void *)&asn1_DEF_IA5String,
"line-digest"
static asn1_TYPE_member_t asn1_MBR_varsets[] = {
{ 0, 0,
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_VariablePartSet,
.memb_constraints = 0, /* Defer to actual type */
.name = ""
},
{ offsetof(struct LogLine, varsets), 0,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_varsets,
"varsets"
};
static ber_tlv_tag_t asn1_DEF_varsets_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_varsets_specs = {
sizeof(struct varsets),
offsetof(struct varsets, _ber_dec_ctx),
};
asn1_TYPE_descriptor_t asn1_DEF_varsets = {
"varsets",
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_varsets_tags,
sizeof(asn1_DEF_varsets_tags)
/sizeof(asn1_DEF_varsets_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_varsets,
1, /* Single element */
&asn1_DEF_varsets_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_LogLine[] = {
{ 0, offsetof(struct LogLine, line_digest),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (22 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_IA5String,
.memb_constraints = 0, /* Defer to actual type */
.name = "line-digest"
},
{ 0, offsetof(struct LogLine, varsets),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_varsets,
.memb_constraints = memb_varsets_constraint,
.name = "varsets"
},
};
static ber_tlv_tag_t asn1_DEF_LogLine_tags[] = {
@ -85,8 +123,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_LogLine_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_LogLine_specs = {
sizeof(struct LogLine),
offsetof(struct LogLine, _ber_dec_ctx),
asn1_DEF_LogLine_elements,
2, /* Elements count */
asn1_DEF_LogLine_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
@ -105,6 +141,8 @@ asn1_TYPE_descriptor_t asn1_DEF_LogLine = {
/sizeof(asn1_DEF_LogLine_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_LogLine,
2, /* Elements count */
&asn1_DEF_LogLine_specs /* Additional specs */
};
@ -141,48 +179,78 @@ typedef struct VariablePartSet {
ber_dec_ctx_t _ber_dec_ctx;
} VariablePartSet_t;
/*** <<< CODE [VariablePartSet] >>> ***/
static int
memb_vparts_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
if(!sptr) {
_ASN_ERRLOG(app_errlog, app_key,
"%s: value not given", td->name);
return -1;
}
if(1 /* No applicable constraints whatsoever */) {
/* Nothing is here. See below */
}
return td->check_constraints
(td, sptr, app_errlog, app_key);
}
/*** <<< STAT-DEFS [VariablePartSet] >>> ***/
static asn1_SET_OF_element_t asn1_DEF_vparts_elements[] = {
{ -1 /* Ambiguous tag (CHOICE?) */,
(void *)&asn1_DEF_VariablePart },
};
static ber_tlv_tag_t asn1_DEF_vparts_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_vparts_specs = {
sizeof(struct vparts),
offsetof(struct vparts, _ber_dec_ctx),
asn1_DEF_vparts_elements
};
asn1_TYPE_descriptor_t asn1_DEF_vparts = {
"vparts",
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_vparts_tags,
sizeof(asn1_DEF_vparts_tags)
/sizeof(asn1_DEF_vparts_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_vparts_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_VariablePartSet_elements[] = {
{ offsetof(struct VariablePartSet, vparts), 0,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_vparts,
"vparts"
static asn1_TYPE_member_t asn1_MBR_vparts[] = {
{ 0, 0,
.tag = -1 /* Ambiguous tag (CHOICE?) */,
.tag_mode = 0,
.type = (void *)&asn1_DEF_VariablePart,
.memb_constraints = 0, /* Defer to actual type */
.name = ""
},
{ offsetof(struct VariablePartSet, resolution), 0,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_ActionItem,
"resolution"
};
static ber_tlv_tag_t asn1_DEF_vparts_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_vparts_specs = {
sizeof(struct vparts),
offsetof(struct vparts, _ber_dec_ctx),
};
asn1_TYPE_descriptor_t asn1_DEF_vparts = {
"vparts",
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_vparts_tags,
sizeof(asn1_DEF_vparts_tags)
/sizeof(asn1_DEF_vparts_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_vparts,
1, /* Single element */
&asn1_DEF_vparts_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_VariablePartSet[] = {
{ 0, offsetof(struct VariablePartSet, vparts),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_vparts,
.memb_constraints = memb_vparts_constraint,
.name = "vparts"
},
{ 0, offsetof(struct VariablePartSet, resolution),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_ActionItem,
.memb_constraints = 0, /* Defer to actual type */
.name = "resolution"
},
};
static ber_tlv_tag_t asn1_DEF_VariablePartSet_tags[] = {
@ -195,8 +263,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_VariablePartSet_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_VariablePartSet_specs = {
sizeof(struct VariablePartSet),
offsetof(struct VariablePartSet, _ber_dec_ctx),
asn1_DEF_VariablePartSet_elements,
2, /* Elements count */
asn1_DEF_VariablePartSet_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
@ -215,6 +281,8 @@ asn1_TYPE_descriptor_t asn1_DEF_VariablePartSet = {
/sizeof(asn1_DEF_VariablePartSet_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_VariablePartSet,
2, /* Elements count */
&asn1_DEF_VariablePartSet_specs /* Additional specs */
};
@ -270,95 +338,135 @@ typedef struct VariablePart {
ber_dec_ctx_t _ber_dec_ctx;
} VariablePart_t;
/*** <<< CODE [VariablePart] >>> ***/
static int
memb_vset_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
size_t size;
if(!sptr) {
_ASN_ERRLOG(app_errlog, app_key,
"%s: value not given", td->name);
return -1;
}
{ /* Determine the number of elements */
const A_SET_OF(void) *list;
(const void *)list = sptr;
size = list->count;
}
if((size >= 1)) {
/* Constraint check succeeded */
return 1;
} else {
_ASN_ERRLOG(app_errlog, app_key,
"%s: constraint failed", td->name);
return -1;
}
}
/*** <<< STAT-DEFS [VariablePart] >>> ***/
static asn1_SET_OF_element_t asn1_DEF_vset_elements[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
(void *)&asn1_DEF_VisibleString },
};
static ber_tlv_tag_t asn1_DEF_vset_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_vset_specs = {
sizeof(struct vset),
offsetof(struct vset, _ber_dec_ctx),
asn1_DEF_vset_elements
};
asn1_TYPE_descriptor_t asn1_DEF_vset = {
"vset",
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_vset_tags,
sizeof(asn1_DEF_vset_tags)
/sizeof(asn1_DEF_vset_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_vset_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_vrange_elements[] = {
{ offsetof(struct vrange, from), 0,
(ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
0,
(void *)&asn1_DEF_VisibleString,
"from"
},
{ offsetof(struct vrange, to), 0,
(ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
0,
(void *)&asn1_DEF_VisibleString,
"to"
},
};
static ber_tlv_tag_t asn1_DEF_vrange_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_TYPE_tag2member_t asn1_DEF_vrange_tag2el[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from at 45 */
{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 }, /* to at 46 */
};
static asn1_SEQUENCE_specifics_t asn1_DEF_vrange_specs = {
sizeof(struct vrange),
offsetof(struct vrange, _ber_dec_ctx),
asn1_DEF_vrange_elements,
2, /* Elements count */
asn1_DEF_vrange_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
3 /* Stop extensions */
};
asn1_TYPE_descriptor_t asn1_DEF_vrange = {
"vrange",
SEQUENCE_constraint,
SEQUENCE_decode_ber,
SEQUENCE_encode_der,
SEQUENCE_print,
SEQUENCE_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_vrange_tags,
sizeof(asn1_DEF_vrange_tags)
/sizeof(asn1_DEF_vrange_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_vrange_specs /* Additional specs */
};
static asn1_CHOICE_element_t asn1_DEF_VariablePart_elements[] = {
{ offsetof(struct VariablePart, choice.vset), 0,
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
0,
(void *)&asn1_DEF_vset,
"vset"
static asn1_TYPE_member_t asn1_MBR_vset[] = {
{ 0, 0,
.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_VisibleString,
.memb_constraints = 0, /* Defer to actual type */
.name = ""
},
{ offsetof(struct VariablePart, choice.vrange), 0,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_vrange,
"vrange"
};
static ber_tlv_tag_t asn1_DEF_vset_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_vset_specs = {
sizeof(struct vset),
offsetof(struct vset, _ber_dec_ctx),
};
asn1_TYPE_descriptor_t asn1_DEF_vset = {
"vset",
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_vset_tags,
sizeof(asn1_DEF_vset_tags)
/sizeof(asn1_DEF_vset_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_vset,
1, /* Single element */
&asn1_DEF_vset_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_vrange[] = {
{ 0, offsetof(struct vrange, from),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_VisibleString,
.memb_constraints = 0, /* Defer to actual type */
.name = "from"
},
{ 0, offsetof(struct vrange, to),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_VisibleString,
.memb_constraints = 0, /* Defer to actual type */
.name = "to"
},
};
static ber_tlv_tag_t asn1_DEF_vrange_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_TYPE_tag2member_t asn1_DEF_vrange_tag2el[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 0, 0, 1 }, /* from at 45 */
{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)), 1, -1, 0 }, /* to at 46 */
};
static asn1_SEQUENCE_specifics_t asn1_DEF_vrange_specs = {
sizeof(struct vrange),
offsetof(struct vrange, _ber_dec_ctx),
asn1_DEF_vrange_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
3 /* Stop extensions */
};
asn1_TYPE_descriptor_t asn1_DEF_vrange = {
"vrange",
SEQUENCE_constraint,
SEQUENCE_decode_ber,
SEQUENCE_encode_der,
SEQUENCE_print,
SEQUENCE_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_vrange_tags,
sizeof(asn1_DEF_vrange_tags)
/sizeof(asn1_DEF_vrange_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_vrange,
2, /* Elements count */
&asn1_DEF_vrange_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_VariablePart[] = {
{ 0, offsetof(struct VariablePart, choice.vset),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_vset,
.memb_constraints = memb_vset_constraint,
.name = "vset"
},
{ 0, offsetof(struct VariablePart, choice.vrange),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_vrange,
.memb_constraints = 0, /* Defer to actual type */
.name = "vrange"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_VariablePart_tag2el[] = {
@ -370,8 +478,6 @@ static asn1_CHOICE_specifics_t asn1_DEF_VariablePart_specs = {
offsetof(struct VariablePart, _ber_dec_ctx),
offsetof(struct VariablePart, present),
sizeof(((struct VariablePart *)0)->present),
asn1_DEF_VariablePart_elements,
2, /* Elements count */
asn1_DEF_VariablePart_tag2el,
2, /* Count of tags in the map */
1 /* Whether extensible */
@ -388,6 +494,8 @@ asn1_TYPE_descriptor_t asn1_DEF_VariablePart = {
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_VariablePart,
2, /* Elements count */
&asn1_DEF_VariablePart_specs /* Additional specs */
};
@ -403,14 +511,14 @@ asn1_TYPE_descriptor_t asn1_DEF_VariablePart = {
/*** <<< DEPS [ActionItem] >>> ***/
typedef enum accept_as {
accept_as_unknown = 0,
accept_as_safe = 1,
accept_as_unsafe = 2,
/*
* Enumeration is extensible
*/
} accept_as_e;
typedef enum accept_as {
accept_as_unknown = 0,
accept_as_safe = 1,
accept_as_unsafe = 2,
/*
* Enumeration is extensible
*/
} accept_as_e;
extern asn1_TYPE_descriptor_t asn1_DEF_ActionItem;
/*** <<< TYPE-DECLS [ActionItem] >>> ***/
@ -445,93 +553,103 @@ typedef struct ActionItem {
/*** <<< STAT-DEFS [ActionItem] >>> ***/
static asn1_SET_OF_element_t asn1_DEF_email_elements[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
(void *)&asn1_DEF_VisibleString },
};
static ber_tlv_tag_t asn1_DEF_email_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_email_specs = {
sizeof(struct email),
offsetof(struct email, _ber_dec_ctx),
asn1_DEF_email_elements
};
asn1_TYPE_descriptor_t asn1_DEF_email = {
"email",
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_email_tags,
sizeof(asn1_DEF_email_tags)
/sizeof(asn1_DEF_email_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_email_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_notify_elements[] = {
{ offsetof(struct notify, critical), 0,
(ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
0,
(void *)&asn1_DEF_BOOLEAN,
"critical"
},
{ offsetof(struct notify, email), 0,
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
0,
(void *)&asn1_DEF_email,
"email"
},
};
static ber_tlv_tag_t asn1_DEF_notify_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_TYPE_tag2member_t asn1_DEF_notify_tag2el[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical at 61 */
{ (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 }, /* email at 62 */
};
static asn1_SEQUENCE_specifics_t asn1_DEF_notify_specs = {
sizeof(struct notify),
offsetof(struct notify, _ber_dec_ctx),
asn1_DEF_notify_elements,
2, /* Elements count */
asn1_DEF_notify_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
3 /* Stop extensions */
};
asn1_TYPE_descriptor_t asn1_DEF_notify = {
"notify",
SEQUENCE_constraint,
SEQUENCE_decode_ber,
SEQUENCE_encode_der,
SEQUENCE_print,
SEQUENCE_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_notify_tags,
sizeof(asn1_DEF_notify_tags)
/sizeof(asn1_DEF_notify_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
&asn1_DEF_notify_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_ActionItem_elements[] = {
{ offsetof(struct ActionItem, accept_as), 0,
(ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
0,
(void *)&asn1_DEF_ENUMERATED,
"accept-as"
static asn1_TYPE_member_t asn1_MBR_email[] = {
{ 0, 0,
.tag = (ASN_TAG_CLASS_UNIVERSAL | (26 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_VisibleString,
.memb_constraints = 0, /* Defer to actual type */
.name = ""
},
{ offsetof(struct ActionItem, notify), 1,
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
0,
(void *)&asn1_DEF_notify,
"notify"
};
static ber_tlv_tag_t asn1_DEF_email_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (17 << 2))
};
static asn1_SET_OF_specifics_t asn1_DEF_email_specs = {
sizeof(struct email),
offsetof(struct email, _ber_dec_ctx),
};
asn1_TYPE_descriptor_t asn1_DEF_email = {
"email",
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_email_tags,
sizeof(asn1_DEF_email_tags)
/sizeof(asn1_DEF_email_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_email,
1, /* Single element */
&asn1_DEF_email_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_notify[] = {
{ 0, offsetof(struct notify, critical),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_BOOLEAN,
.memb_constraints = 0, /* Defer to actual type */
.name = "critical"
},
{ 0, offsetof(struct notify, email),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_email,
.memb_constraints = 0, /* Defer to actual type */
.name = "email"
},
};
static ber_tlv_tag_t asn1_DEF_notify_tags[] = {
(ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
};
static asn1_TYPE_tag2member_t asn1_DEF_notify_tag2el[] = {
{ (ASN_TAG_CLASS_UNIVERSAL | (1 << 2)), 0, 0, 0 }, /* critical at 61 */
{ (ASN_TAG_CLASS_UNIVERSAL | (17 << 2)), 1, 0, 0 }, /* email at 62 */
};
static asn1_SEQUENCE_specifics_t asn1_DEF_notify_specs = {
sizeof(struct notify),
offsetof(struct notify, _ber_dec_ctx),
asn1_DEF_notify_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
3 /* Stop extensions */
};
asn1_TYPE_descriptor_t asn1_DEF_notify = {
"notify",
SEQUENCE_constraint,
SEQUENCE_decode_ber,
SEQUENCE_encode_der,
SEQUENCE_print,
SEQUENCE_free,
0, /* Use generic outmost tag fetcher */
asn1_DEF_notify_tags,
sizeof(asn1_DEF_notify_tags)
/sizeof(asn1_DEF_notify_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_notify,
2, /* Elements count */
&asn1_DEF_notify_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_ActionItem[] = {
{ 0, offsetof(struct ActionItem, accept_as),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (10 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_ENUMERATED,
.memb_constraints = 0, /* Defer to actual type */
.name = "accept-as"
},
{ 1, offsetof(struct ActionItem, notify),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (16 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_notify,
.memb_constraints = 0, /* Defer to actual type */
.name = "notify"
},
};
static ber_tlv_tag_t asn1_DEF_ActionItem_tags[] = {
@ -544,8 +662,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_ActionItem_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_ActionItem_specs = {
sizeof(struct ActionItem),
offsetof(struct ActionItem, _ber_dec_ctx),
asn1_DEF_ActionItem_elements,
2, /* Elements count */
asn1_DEF_ActionItem_tag2el,
2, /* Count of tags in the map */
1, /* Start extensions */
@ -564,6 +680,8 @@ asn1_TYPE_descriptor_t asn1_DEF_ActionItem = {
/sizeof(asn1_DEF_ActionItem_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_ActionItem,
2, /* Elements count */
&asn1_DEF_ActionItem_specs /* Additional specs */
};

View File

@ -7,23 +7,23 @@
/*** <<< DEPS [T] >>> ***/
typedef enum b_PR {
b_PR_NOTHING, /* No components present */
b_PR_c,
b_PR_d,
b_PR_e,
b_PR_h,
} b_PR;
typedef enum e_PR {
e_PR_NOTHING, /* No components present */
e_PR_f,
e_PR_g,
} e_PR;
typedef enum h_PR {
h_PR_NOTHING, /* No components present */
h_PR_i,
h_PR_j,
} h_PR;
typedef enum b_PR {
b_PR_NOTHING, /* No components present */
b_PR_c,
b_PR_d,
b_PR_e,
b_PR_h,
} b_PR;
typedef enum e_PR {
e_PR_NOTHING, /* No components present */
e_PR_f,
e_PR_g,
} e_PR;
typedef enum h_PR {
h_PR_NOTHING, /* No components present */
h_PR_i,
h_PR_j,
} h_PR;
extern asn1_TYPE_descriptor_t asn1_DEF_T;
/*** <<< TYPE-DECLS [T] >>> ***/
@ -68,165 +68,175 @@ typedef struct T {
/*** <<< STAT-DEFS [T] >>> ***/
static asn1_CHOICE_element_t asn1_DEF_e_elements[] = {
{ offsetof(struct e, choice.f), 0,
(ASN_TAG_CLASS_PRIVATE | (7 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"f"
},
{ offsetof(struct e, choice.g), 0,
(ASN_TAG_CLASS_PRIVATE | (8 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"g"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_e_tag2el[] = {
{ (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
{ (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
};
static asn1_CHOICE_specifics_t asn1_DEF_e_specs = {
sizeof(struct e),
offsetof(struct e, _ber_dec_ctx),
offsetof(struct e, present),
sizeof(((struct e *)0)->present),
asn1_DEF_e_elements,
2, /* Elements count */
asn1_DEF_e_tag2el,
2, /* Count of tags in the map */
0 /* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_e = {
"e",
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_DEF_e_specs /* Additional specs */
};
static asn1_CHOICE_element_t asn1_DEF_h_elements[] = {
{ offsetof(struct h, choice.i), 0,
(ASN_TAG_CLASS_PRIVATE | (1 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"i"
},
{ offsetof(struct h, choice.j), 0,
(ASN_TAG_CLASS_PRIVATE | (2 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"j"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_h_tag2el[] = {
{ (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
{ (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 }, /* j at 25 */
};
static asn1_CHOICE_specifics_t asn1_DEF_h_specs = {
sizeof(struct h),
offsetof(struct h, _ber_dec_ctx),
offsetof(struct h, present),
sizeof(((struct h *)0)->present),
asn1_DEF_h_elements,
2, /* Elements count */
asn1_DEF_h_tag2el,
2, /* Count of tags in the map */
0 /* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_h = {
"h",
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_DEF_h_specs /* Additional specs */
};
static asn1_CHOICE_element_t asn1_DEF_b_elements[] = {
{ offsetof(struct b, choice.c), 0,
(ASN_TAG_CLASS_PRIVATE | (5 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"c"
},
{ offsetof(struct b, choice.d), 0,
(ASN_TAG_CLASS_PRIVATE | (6 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"d"
},
{ offsetof(struct b, choice.e), 0,
-1 /* Ambiguous tag (CHOICE?) */,
0,
(void *)&asn1_DEF_e,
"e"
},
{ offsetof(struct b, choice.h), 0,
(ASN_TAG_CLASS_PRIVATE | (9 << 2)),
+1, /* EXPLICIT tag at current level */
(void *)&asn1_DEF_h,
"h"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_b_tag2el[] = {
{ (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
{ (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
{ (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
{ (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
{ (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 }, /* h at 24 */
};
static asn1_CHOICE_specifics_t asn1_DEF_b_specs = {
sizeof(struct b),
offsetof(struct b, _ber_dec_ctx),
offsetof(struct b, present),
sizeof(((struct b *)0)->present),
asn1_DEF_b_elements,
4, /* Elements count */
asn1_DEF_b_tag2el,
5, /* Count of tags in the map */
0 /* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_b = {
"b",
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_DEF_b_specs /* Additional specs */
};
static asn1_SEQUENCE_element_t asn1_DEF_T_elements[] = {
{ offsetof(struct T, a), 0,
(ASN_TAG_CLASS_PRIVATE | (2 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_NULL,
"a"
static asn1_TYPE_member_t asn1_MBR_e[] = {
{ 0, offsetof(struct e, choice.f),
.tag = (ASN_TAG_CLASS_PRIVATE | (7 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "f"
},
{ offsetof(struct T, b), 0,
-1 /* Ambiguous tag (CHOICE?) */,
0,
(void *)&asn1_DEF_b,
"b"
{ 0, offsetof(struct e, choice.g),
.tag = (ASN_TAG_CLASS_PRIVATE | (8 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "g"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_e_tag2el[] = {
{ (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 0, 0, 0 }, /* f at 20 */
{ (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 1, 0, 0 }, /* g at 21 */
};
static asn1_CHOICE_specifics_t asn1_DEF_e_specs = {
sizeof(struct e),
offsetof(struct e, _ber_dec_ctx),
offsetof(struct e, present),
sizeof(((struct e *)0)->present),
asn1_DEF_e_tag2el,
2, /* Count of tags in the map */
0 /* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_e = {
"e",
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_e,
2, /* Elements count */
&asn1_DEF_e_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_h[] = {
{ 0, offsetof(struct h, choice.i),
.tag = (ASN_TAG_CLASS_PRIVATE | (1 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
{ 0, offsetof(struct h, choice.j),
.tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "j"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_h_tag2el[] = {
{ (ASN_TAG_CLASS_PRIVATE | (1 << 2)), 0, 0, 0 }, /* i at 24 */
{ (ASN_TAG_CLASS_PRIVATE | (2 << 2)), 1, 0, 0 }, /* j at 25 */
};
static asn1_CHOICE_specifics_t asn1_DEF_h_specs = {
sizeof(struct h),
offsetof(struct h, _ber_dec_ctx),
offsetof(struct h, present),
sizeof(((struct h *)0)->present),
asn1_DEF_h_tag2el,
2, /* Count of tags in the map */
0 /* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_h = {
"h",
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_h,
2, /* Elements count */
&asn1_DEF_h_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_b[] = {
{ 0, offsetof(struct b, choice.c),
.tag = (ASN_TAG_CLASS_PRIVATE | (5 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "c"
},
{ 0, offsetof(struct b, choice.d),
.tag = (ASN_TAG_CLASS_PRIVATE | (6 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "d"
},
{ 0, offsetof(struct b, choice.e),
.tag = -1 /* Ambiguous tag (CHOICE?) */,
.tag_mode = 0,
.type = (void *)&asn1_DEF_e,
.memb_constraints = 0, /* Defer to actual type */
.name = "e"
},
{ 0, offsetof(struct b, choice.h),
.tag = (ASN_TAG_CLASS_PRIVATE | (9 << 2)),
.tag_mode = +1, /* EXPLICIT tag at current level */
.type = (void *)&asn1_DEF_h,
.memb_constraints = 0, /* Defer to actual type */
.name = "h"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_b_tag2el[] = {
{ (ASN_TAG_CLASS_PRIVATE | (5 << 2)), 0, 0, 0 }, /* c at 17 */
{ (ASN_TAG_CLASS_PRIVATE | (6 << 2)), 1, 0, 0 }, /* d at 18 */
{ (ASN_TAG_CLASS_PRIVATE | (7 << 2)), 2, 0, 0 }, /* f at 20 */
{ (ASN_TAG_CLASS_PRIVATE | (8 << 2)), 2, 0, 0 }, /* g at 21 */
{ (ASN_TAG_CLASS_PRIVATE | (9 << 2)), 3, 0, 0 }, /* h at 24 */
};
static asn1_CHOICE_specifics_t asn1_DEF_b_specs = {
sizeof(struct b),
offsetof(struct b, _ber_dec_ctx),
offsetof(struct b, present),
sizeof(((struct b *)0)->present),
asn1_DEF_b_tag2el,
5, /* Count of tags in the map */
0 /* Whether extensible */
};
asn1_TYPE_descriptor_t asn1_DEF_b = {
"b",
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_b,
4, /* Elements count */
&asn1_DEF_b_specs /* Additional specs */
};
static asn1_TYPE_member_t asn1_MBR_T[] = {
{ 0, offsetof(struct T, a),
.tag = (ASN_TAG_CLASS_PRIVATE | (2 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_NULL,
.memb_constraints = 0, /* Defer to actual type */
.name = "a"
},
{ 0, offsetof(struct T, b),
.tag = -1 /* Ambiguous tag (CHOICE?) */,
.tag_mode = 0,
.type = (void *)&asn1_DEF_b,
.memb_constraints = 0, /* Defer to actual type */
.name = "b"
},
};
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@ -243,8 +253,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_T_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_T_specs = {
sizeof(struct T),
offsetof(struct T, _ber_dec_ctx),
asn1_DEF_T_elements,
2, /* Elements count */
asn1_DEF_T_tag2el,
6, /* Count of tags in the map */
-1, /* Start extensions */
@ -263,6 +271,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T = {
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T,
2, /* Elements count */
&asn1_DEF_T_specs /* Additional specs */
};

View File

@ -18,6 +18,65 @@ der_type_encoder_f PrimitiveType_encode_der;
asn_struct_print_f PrimitiveType_print;
asn_struct_free_f PrimitiveType_free;
/*** <<< CODE [PrimitiveType] >>> ***/
int
PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
/* Make the underlying type checker permanent */
td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
return td->check_constraints
(td, sptr, app_errlog, app_key);
}
/*
* This type is implemented using OCTET_STRING,
* so adjust the DEF appropriately.
*/
static void
PrimitiveType_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
td->elements = asn1_DEF_OCTET_STRING.elements;
td->elements_count = asn1_DEF_OCTET_STRING.elements_count;
td->specifics = asn1_DEF_OCTET_STRING.specifics;
}
ber_dec_rval_t
PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
void **structure, void *bufptr, size_t size, int tag_mode) {
PrimitiveType_inherit_TYPE_descriptor(td);
return td->ber_decoder(td, structure,
bufptr, size, tag_mode);
}
der_enc_rval_t
PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
void *structure, int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
PrimitiveType_inherit_TYPE_descriptor(td);
return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
}
int
PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
PrimitiveType_inherit_TYPE_descriptor(td);
return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
}
void
PrimitiveType_free(asn1_TYPE_descriptor_t *td,
void *struct_ptr, int contents_only) {
PrimitiveType_inherit_TYPE_descriptor(td);
td->free_struct(td, struct_ptr, contents_only);
}
/*** <<< STAT-DEFS [PrimitiveType] >>> ***/
static ber_tlv_tag_t asn1_DEF_PrimitiveType_tags[] = {
@ -36,63 +95,10 @@ asn1_TYPE_descriptor_t asn1_DEF_PrimitiveType = {
/sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
0, 0, /* No members */
0 /* No specifics */
};
int
PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
/* Make the underlying type checker permanent */
td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
return td->check_constraints
(td, sptr, app_errlog, app_key);
}
/*
* This type is implemented using OCTET_STRING,
* so adjust the DEF appropriately.
*/
static void
inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
td->specifics = asn1_DEF_OCTET_STRING.specifics;
}
ber_dec_rval_t
PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
void **structure, void *bufptr, size_t size, int tag_mode) {
inherit_TYPE_descriptor(td);
return td->ber_decoder(td, structure,
bufptr, size, tag_mode);
}
der_enc_rval_t
PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
void *structure, int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
}
int
PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
}
void
PrimitiveType_free(asn1_TYPE_descriptor_t *td,
void *struct_ptr, int contents_only) {
inherit_TYPE_descriptor(td);
td->free_struct(td, struct_ptr, contents_only);
}
/*** <<< INCLUDES [ConstructedType] >>> ***/
@ -115,12 +121,13 @@ typedef struct ConstructedType {
/*** <<< STAT-DEFS [ConstructedType] >>> ***/
static asn1_SEQUENCE_element_t asn1_DEF_ConstructedType_elements[] = {
{ offsetof(struct ConstructedType, field), 0,
(ASN_TAG_CLASS_CONTEXT | (5 << 2)),
-1, /* IMPLICIT tag at current level */
(void *)&asn1_DEF_PrimitiveType,
"field"
static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
{ 0, offsetof(struct ConstructedType, field),
.tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
.tag_mode = -1, /* IMPLICIT tag at current level */
.type = (void *)&asn1_DEF_PrimitiveType,
.memb_constraints = 0, /* Defer to actual type */
.name = "field"
},
};
static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
@ -132,8 +139,6 @@ static asn1_TYPE_tag2member_t asn1_DEF_ConstructedType_tag2el[] = {
static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
sizeof(struct ConstructedType),
offsetof(struct ConstructedType, _ber_dec_ctx),
asn1_DEF_ConstructedType_elements,
1, /* Elements count */
asn1_DEF_ConstructedType_tag2el,
1, /* Count of tags in the map */
-1, /* Start extensions */
@ -152,6 +157,8 @@ asn1_TYPE_descriptor_t asn1_DEF_ConstructedType = {
/sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_ConstructedType,
1, /* Elements count */
&asn1_DEF_ConstructedType_specs /* Additional specs */
};
@ -175,6 +182,65 @@ der_type_encoder_f T_encode_der;
asn_struct_print_f T_print;
asn_struct_free_f T_free;
/*** <<< CODE [T] >>> ***/
int
T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
/* Make the underlying type checker permanent */
td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
return td->check_constraints
(td, sptr, app_errlog, app_key);
}
/*
* This type is implemented using ConstructedType,
* so adjust the DEF appropriately.
*/
static void
T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
td->free_struct = asn1_DEF_ConstructedType.free_struct;
td->print_struct = asn1_DEF_ConstructedType.print_struct;
td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
td->elements = asn1_DEF_ConstructedType.elements;
td->elements_count = asn1_DEF_ConstructedType.elements_count;
td->specifics = asn1_DEF_ConstructedType.specifics;
}
ber_dec_rval_t
T_decode_ber(asn1_TYPE_descriptor_t *td,
void **structure, void *bufptr, size_t size, int tag_mode) {
T_inherit_TYPE_descriptor(td);
return td->ber_decoder(td, structure,
bufptr, size, tag_mode);
}
der_enc_rval_t
T_encode_der(asn1_TYPE_descriptor_t *td,
void *structure, int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
T_inherit_TYPE_descriptor(td);
return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
}
int
T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
T_inherit_TYPE_descriptor(td);
return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
}
void
T_free(asn1_TYPE_descriptor_t *td,
void *struct_ptr, int contents_only) {
T_inherit_TYPE_descriptor(td);
td->free_struct(td, struct_ptr, contents_only);
}
/*** <<< STAT-DEFS [T] >>> ***/
static ber_tlv_tag_t asn1_DEF_T_tags[] = {
@ -193,60 +259,7 @@ asn1_TYPE_descriptor_t asn1_DEF_T = {
/sizeof(asn1_DEF_T_tags[0]), /* 1 */
1, /* Tags to skip */
-0, /* Unknown yet */
0, 0, /* Defined elsewhere */
0 /* No specifics */
};
int
T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *app_errlog, void *app_key) {
/* Make the underlying type checker permanent */
td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
return td->check_constraints
(td, sptr, app_errlog, app_key);
}
/*
* This type is implemented using ConstructedType,
* so adjust the DEF appropriately.
*/
static void
inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
td->free_struct = asn1_DEF_ConstructedType.free_struct;
td->print_struct = asn1_DEF_ConstructedType.print_struct;
td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
td->specifics = asn1_DEF_ConstructedType.specifics;
}
ber_dec_rval_t
T_decode_ber(asn1_TYPE_descriptor_t *td,
void **structure, void *bufptr, size_t size, int tag_mode) {
inherit_TYPE_descriptor(td);
return td->ber_decoder(td, structure,
bufptr, size, tag_mode);
}
der_enc_rval_t
T_encode_der(asn1_TYPE_descriptor_t *td,
void *structure, int tag_mode, ber_tlv_tag_t tag,
asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
}
int
T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
inherit_TYPE_descriptor(td);
return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
}
void
T_free(asn1_TYPE_descriptor_t *td,
void *struct_ptr, int contents_only) {
inherit_TYPE_descriptor(td);
td->free_struct(td, struct_ptr, contents_only);
}

View File

@ -35,12 +35,13 @@ typedef struct T1 {
/*** <<< STAT-DEFS [T1] >>> ***/
static asn1_SET_element_t asn1_DEF_T1_elements[] = {
{ offsetof(struct T1, i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T1[] = {
{ 0, offsetof(struct T1, i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static ber_tlv_tag_t asn1_DEF_T1_tags[] = {
@ -56,8 +57,6 @@ static asn1_SET_specifics_t asn1_DEF_T1_specs = {
sizeof(struct T1),
offsetof(struct T1, _ber_dec_ctx),
offsetof(struct T1, _presence_map),
asn1_DEF_T1_elements,
1, /* Elements count */
asn1_DEF_T1_tag2el,
1, /* Count of tags in the map */
1, /* Whether extensible */
@ -76,6 +75,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T1 = {
/sizeof(asn1_DEF_T1_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T1,
1, /* Elements count */
&asn1_DEF_T1_specs /* Additional specs */
};
@ -116,12 +117,13 @@ typedef struct T2 {
/*** <<< STAT-DEFS [T2] >>> ***/
static asn1_SET_element_t asn1_DEF_T2_elements[] = {
{ offsetof(struct T2, i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T2[] = {
{ 0, offsetof(struct T2, i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static ber_tlv_tag_t asn1_DEF_T2_tags[] = {
@ -137,8 +139,6 @@ static asn1_SET_specifics_t asn1_DEF_T2_specs = {
sizeof(struct T2),
offsetof(struct T2, _ber_dec_ctx),
offsetof(struct T2, _presence_map),
asn1_DEF_T2_elements,
1, /* Elements count */
asn1_DEF_T2_tag2el,
1, /* Count of tags in the map */
1, /* Whether extensible */
@ -157,6 +157,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T2 = {
/sizeof(asn1_DEF_T2_tags[0]), /* 1 */
1, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T2,
1, /* Elements count */
&asn1_DEF_T2_specs /* Additional specs */
};
@ -194,12 +196,13 @@ typedef struct T3 {
/*** <<< STAT-DEFS [T3] >>> ***/
static asn1_CHOICE_element_t asn1_DEF_T3_elements[] = {
{ offsetof(struct T3, choice.i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T3[] = {
{ 0, offsetof(struct T3, choice.i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_T3_tag2el[] = {
@ -210,8 +213,6 @@ static asn1_CHOICE_specifics_t asn1_DEF_T3_specs = {
offsetof(struct T3, _ber_dec_ctx),
offsetof(struct T3, present),
sizeof(((struct T3 *)0)->present),
asn1_DEF_T3_elements,
1, /* Elements count */
asn1_DEF_T3_tag2el,
1, /* Count of tags in the map */
1 /* Whether extensible */
@ -228,6 +229,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T3 = {
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T3,
1, /* Elements count */
&asn1_DEF_T3_specs /* Additional specs */
};
@ -265,12 +268,13 @@ typedef struct T4 {
/*** <<< STAT-DEFS [T4] >>> ***/
static asn1_CHOICE_element_t asn1_DEF_T4_elements[] = {
{ offsetof(struct T4, choice.i), 0,
(ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
0,
(void *)&asn1_DEF_INTEGER,
"i"
static asn1_TYPE_member_t asn1_MBR_T4[] = {
{ 0, offsetof(struct T4, choice.i),
.tag = (ASN_TAG_CLASS_UNIVERSAL | (2 << 2)),
.tag_mode = 0,
.type = (void *)&asn1_DEF_INTEGER,
.memb_constraints = 0, /* Defer to actual type */
.name = "i"
},
};
static asn1_TYPE_tag2member_t asn1_DEF_T4_tag2el[] = {
@ -281,8 +285,6 @@ static asn1_CHOICE_specifics_t asn1_DEF_T4_specs = {
offsetof(struct T4, _ber_dec_ctx),
offsetof(struct T4, present),
sizeof(((struct T4 *)0)->present),
asn1_DEF_T4_elements,
1, /* Elements count */
asn1_DEF_T4_tag2el,
1, /* Count of tags in the map */
1 /* Whether extensible */
@ -299,6 +301,8 @@ asn1_TYPE_descriptor_t asn1_DEF_T4 = {
0, /* No explicit tags (count) */
0, /* Tags to skip */
1, /* Whether CONSTRUCTED */
asn1_MBR_T4,
1, /* Elements count */
&asn1_DEF_T4_specs /* Additional specs */
};

View File

@ -39,4 +39,8 @@ BEGIN
SIZE-and-FROM ::= PER-Visible (SIZE(1..4) ^ FROM("ABCD"))
Neither-SIZE-nor-FROM ::= PER-Visible (SIZE(1..4) | FROM("ABCD",...))
Utf8-3 ::= Utf8-2 (FROM("A".."Z"|"a".."z"))
Utf8-2 ::= Utf8-1 (SIZE(1..2))
Utf8-1 ::= UTF8String
END