mirror of https://gerrit.osmocom.org/asn1c
new meaning of life
This commit is contained in:
parent
5253da42fd
commit
2e3055da17
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue