blob: 74632450e4a08c1d521ce4dd3fdc68268bb72032 [file] [log] [blame]
vlm3df79662004-06-28 21:13:22 +00001
vlm6e1b13e2004-08-11 05:25:47 +00002/*** <<< INCLUDES [PrimitiveType] >>> ***/
vlm3df79662004-06-28 21:13:22 +00003
4#include <OCTET_STRING.h>
5
6/*** <<< TYPE-DECLS [PrimitiveType] >>> ***/
7
8
9typedef OCTET_STRING_t PrimitiveType_t;
10
vlm3df79662004-06-28 21:13:22 +000011/*** <<< FUNC-DECLS [PrimitiveType] >>> ***/
12
13extern asn1_TYPE_descriptor_t asn1_DEF_PrimitiveType;
vlm39ba4c42004-09-22 16:06:28 +000014asn_struct_free_f PrimitiveType_free;
15asn_struct_print_f PrimitiveType_print;
vlm3df79662004-06-28 21:13:22 +000016asn_constr_check_f PrimitiveType_constraint;
17ber_type_decoder_f PrimitiveType_decode_ber;
18der_type_encoder_f PrimitiveType_encode_der;
vlm39ba4c42004-09-22 16:06:28 +000019xer_type_encoder_f PrimitiveType_encode_xer;
vlm3df79662004-06-28 21:13:22 +000020
vlm21e46002004-08-20 13:36:32 +000021/*** <<< CODE [PrimitiveType] >>> ***/
22
23int
24PrimitiveType_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
25 asn_app_consume_bytes_f *app_errlog, void *app_key) {
26
27 /* Make the underlying type checker permanent */
28 td->check_constraints = asn1_DEF_OCTET_STRING.check_constraints;
29 return td->check_constraints
30 (td, sptr, app_errlog, app_key);
31}
32
33/*
34 * This type is implemented using OCTET_STRING,
vlmcb0b7fc2004-09-23 22:14:58 +000035 * so here we adjust the DEF accordingly.
vlm21e46002004-08-20 13:36:32 +000036 */
37static void
38PrimitiveType_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
vlm21e46002004-08-20 13:36:32 +000039 td->free_struct = asn1_DEF_OCTET_STRING.free_struct;
40 td->print_struct = asn1_DEF_OCTET_STRING.print_struct;
vlm39ba4c42004-09-22 16:06:28 +000041 td->ber_decoder = asn1_DEF_OCTET_STRING.ber_decoder;
42 td->der_encoder = asn1_DEF_OCTET_STRING.der_encoder;
43 td->xer_decoder = asn1_DEF_OCTET_STRING.xer_decoder;
44 td->xer_encoder = asn1_DEF_OCTET_STRING.xer_encoder;
vlm21e46002004-08-20 13:36:32 +000045 td->last_tag_form = asn1_DEF_OCTET_STRING.last_tag_form;
46 td->elements = asn1_DEF_OCTET_STRING.elements;
47 td->elements_count = asn1_DEF_OCTET_STRING.elements_count;
48 td->specifics = asn1_DEF_OCTET_STRING.specifics;
49}
50
vlm39ba4c42004-09-22 16:06:28 +000051void
52PrimitiveType_free(asn1_TYPE_descriptor_t *td,
53 void *struct_ptr, int contents_only) {
vlm21e46002004-08-20 13:36:32 +000054 PrimitiveType_inherit_TYPE_descriptor(td);
vlm39ba4c42004-09-22 16:06:28 +000055 td->free_struct(td, struct_ptr, contents_only);
vlm21e46002004-08-20 13:36:32 +000056}
57
58int
59PrimitiveType_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
60 int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
61 PrimitiveType_inherit_TYPE_descriptor(td);
62 return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
63}
64
vlm39ba4c42004-09-22 16:06:28 +000065ber_dec_rval_t
66PrimitiveType_decode_ber(asn1_TYPE_descriptor_t *td,
67 void **structure, void *bufptr, size_t size, int tag_mode) {
vlm21e46002004-08-20 13:36:32 +000068 PrimitiveType_inherit_TYPE_descriptor(td);
vlm39ba4c42004-09-22 16:06:28 +000069 return td->ber_decoder(td, structure, bufptr, size, tag_mode);
70}
71
72asn_enc_rval_t
73PrimitiveType_encode_der(asn1_TYPE_descriptor_t *td,
74 void *structure, int tag_mode, ber_tlv_tag_t tag,
75 asn_app_consume_bytes_f *cb, void *app_key) {
76 PrimitiveType_inherit_TYPE_descriptor(td);
77 return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
78}
79
80asn_enc_rval_t
81PrimitiveType_encode_xer(asn1_TYPE_descriptor_t *td, void *structure,
82 int ilevel, enum xer_encoder_flags_e flags,
83 asn_app_consume_bytes_f *cb, void *app_key) {
84 PrimitiveType_inherit_TYPE_descriptor(td);
85 return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
vlm21e46002004-08-20 13:36:32 +000086}
87
88
vlm3df79662004-06-28 21:13:22 +000089/*** <<< STAT-DEFS [PrimitiveType] >>> ***/
90
91static ber_tlv_tag_t asn1_DEF_PrimitiveType_tags[] = {
92 (ASN_TAG_CLASS_UNIVERSAL | (4 << 2))
93};
94asn1_TYPE_descriptor_t asn1_DEF_PrimitiveType = {
95 "PrimitiveType",
vlm39ba4c42004-09-22 16:06:28 +000096 PrimitiveType_free,
97 PrimitiveType_print,
vlm3df79662004-06-28 21:13:22 +000098 PrimitiveType_constraint,
99 PrimitiveType_decode_ber,
100 PrimitiveType_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000101 0, /* Not implemented yet */
102 PrimitiveType_encode_xer,
vlm3df79662004-06-28 21:13:22 +0000103 0, /* Use generic outmost tag fetcher */
104 asn1_DEF_PrimitiveType_tags,
105 sizeof(asn1_DEF_PrimitiveType_tags)
vlm6e73a042004-08-11 07:17:22 +0000106 /sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
vlm72425de2004-09-13 08:31:01 +0000107 asn1_DEF_PrimitiveType_tags, /* Same as above */
108 sizeof(asn1_DEF_PrimitiveType_tags)
109 /sizeof(asn1_DEF_PrimitiveType_tags[0]), /* 1 */
vlm3df79662004-06-28 21:13:22 +0000110 -0, /* Unknown yet */
vlm21e46002004-08-20 13:36:32 +0000111 0, 0, /* No members */
vlm3df79662004-06-28 21:13:22 +0000112 0 /* No specifics */
113};
114
vlm3df79662004-06-28 21:13:22 +0000115
vlm6e1b13e2004-08-11 05:25:47 +0000116/*** <<< INCLUDES [ConstructedType] >>> ***/
vlm3df79662004-06-28 21:13:22 +0000117
vlm3df79662004-06-28 21:13:22 +0000118#include <PrimitiveType.h>
vlm3df79662004-06-28 21:13:22 +0000119#include <constr_SEQUENCE.h>
120
vlm6e1b13e2004-08-11 05:25:47 +0000121/*** <<< DEPS [ConstructedType] >>> ***/
122
vlm3df79662004-06-28 21:13:22 +0000123extern asn1_TYPE_descriptor_t asn1_DEF_ConstructedType;
124
125/*** <<< TYPE-DECLS [ConstructedType] >>> ***/
126
127
128typedef struct ConstructedType {
129 PrimitiveType_t field;
130
131 /* Context for parsing across buffer boundaries */
132 ber_dec_ctx_t _ber_dec_ctx;
133} ConstructedType_t;
134
135/*** <<< STAT-DEFS [ConstructedType] >>> ***/
136
vlm21e46002004-08-20 13:36:32 +0000137static asn1_TYPE_member_t asn1_MBR_ConstructedType[] = {
vlmddd5a7d2004-09-10 09:18:20 +0000138 { ATF_NOFLAGS, 0, offsetof(struct ConstructedType, field),
vlm21e46002004-08-20 13:36:32 +0000139 .tag = (ASN_TAG_CLASS_CONTEXT | (5 << 2)),
140 .tag_mode = -1, /* IMPLICIT tag at current level */
141 .type = (void *)&asn1_DEF_PrimitiveType,
142 .memb_constraints = 0, /* Defer to actual type */
143 .name = "field"
vlm3df79662004-06-28 21:13:22 +0000144 },
145};
146static ber_tlv_tag_t asn1_DEF_ConstructedType_tags[] = {
147 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
148};
149static asn1_TYPE_tag2member_t asn1_DEF_ConstructedType_tag2el[] = {
150 { (ASN_TAG_CLASS_CONTEXT | (5 << 2)), 0, 0, 0 }, /* field at 18 */
151};
152static asn1_SEQUENCE_specifics_t asn1_DEF_ConstructedType_specs = {
153 sizeof(struct ConstructedType),
154 offsetof(struct ConstructedType, _ber_dec_ctx),
vlm3df79662004-06-28 21:13:22 +0000155 asn1_DEF_ConstructedType_tag2el,
156 1, /* Count of tags in the map */
157 -1, /* Start extensions */
158 -1 /* Stop extensions */
159};
160asn1_TYPE_descriptor_t asn1_DEF_ConstructedType = {
161 "ConstructedType",
vlm39ba4c42004-09-22 16:06:28 +0000162 SEQUENCE_free,
163 SEQUENCE_print,
vlm3df79662004-06-28 21:13:22 +0000164 SEQUENCE_constraint,
165 SEQUENCE_decode_ber,
166 SEQUENCE_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000167 0, /* Not implemented yet */
168 SEQUENCE_encode_xer,
vlm3df79662004-06-28 21:13:22 +0000169 0, /* Use generic outmost tag fetcher */
170 asn1_DEF_ConstructedType_tags,
171 sizeof(asn1_DEF_ConstructedType_tags)
vlm6e73a042004-08-11 07:17:22 +0000172 /sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
vlm72425de2004-09-13 08:31:01 +0000173 asn1_DEF_ConstructedType_tags, /* Same as above */
174 sizeof(asn1_DEF_ConstructedType_tags)
175 /sizeof(asn1_DEF_ConstructedType_tags[0]), /* 1 */
vlm3df79662004-06-28 21:13:22 +0000176 1, /* Whether CONSTRUCTED */
vlm21e46002004-08-20 13:36:32 +0000177 asn1_MBR_ConstructedType,
178 1, /* Elements count */
vlm3df79662004-06-28 21:13:22 +0000179 &asn1_DEF_ConstructedType_specs /* Additional specs */
180};
181
182
vlm6e1b13e2004-08-11 05:25:47 +0000183/*** <<< INCLUDES [T] >>> ***/
vlm3df79662004-06-28 21:13:22 +0000184
185#include <ConstructedType.h>
186
187/*** <<< TYPE-DECLS [T] >>> ***/
188
189
190typedef ConstructedType_t T_t;
191
vlm3df79662004-06-28 21:13:22 +0000192/*** <<< FUNC-DECLS [T] >>> ***/
193
194extern asn1_TYPE_descriptor_t asn1_DEF_T;
vlm39ba4c42004-09-22 16:06:28 +0000195asn_struct_free_f T_free;
196asn_struct_print_f T_print;
vlm3df79662004-06-28 21:13:22 +0000197asn_constr_check_f T_constraint;
198ber_type_decoder_f T_decode_ber;
199der_type_encoder_f T_encode_der;
vlm39ba4c42004-09-22 16:06:28 +0000200xer_type_encoder_f T_encode_xer;
vlm3df79662004-06-28 21:13:22 +0000201
vlm21e46002004-08-20 13:36:32 +0000202/*** <<< CODE [T] >>> ***/
203
204int
205T_constraint(asn1_TYPE_descriptor_t *td, const void *sptr,
206 asn_app_consume_bytes_f *app_errlog, void *app_key) {
207
208 /* Make the underlying type checker permanent */
209 td->check_constraints = asn1_DEF_ConstructedType.check_constraints;
210 return td->check_constraints
211 (td, sptr, app_errlog, app_key);
212}
213
214/*
215 * This type is implemented using ConstructedType,
vlmcb0b7fc2004-09-23 22:14:58 +0000216 * so here we adjust the DEF accordingly.
vlm21e46002004-08-20 13:36:32 +0000217 */
218static void
219T_inherit_TYPE_descriptor(asn1_TYPE_descriptor_t *td) {
vlm21e46002004-08-20 13:36:32 +0000220 td->free_struct = asn1_DEF_ConstructedType.free_struct;
221 td->print_struct = asn1_DEF_ConstructedType.print_struct;
vlm39ba4c42004-09-22 16:06:28 +0000222 td->ber_decoder = asn1_DEF_ConstructedType.ber_decoder;
223 td->der_encoder = asn1_DEF_ConstructedType.der_encoder;
224 td->xer_decoder = asn1_DEF_ConstructedType.xer_decoder;
225 td->xer_encoder = asn1_DEF_ConstructedType.xer_encoder;
vlm21e46002004-08-20 13:36:32 +0000226 td->last_tag_form = asn1_DEF_ConstructedType.last_tag_form;
227 td->elements = asn1_DEF_ConstructedType.elements;
228 td->elements_count = asn1_DEF_ConstructedType.elements_count;
229 td->specifics = asn1_DEF_ConstructedType.specifics;
230}
231
vlm39ba4c42004-09-22 16:06:28 +0000232void
233T_free(asn1_TYPE_descriptor_t *td,
234 void *struct_ptr, int contents_only) {
vlm21e46002004-08-20 13:36:32 +0000235 T_inherit_TYPE_descriptor(td);
vlm39ba4c42004-09-22 16:06:28 +0000236 td->free_struct(td, struct_ptr, contents_only);
vlm21e46002004-08-20 13:36:32 +0000237}
238
239int
240T_print(asn1_TYPE_descriptor_t *td, const void *struct_ptr,
241 int ilevel, asn_app_consume_bytes_f *cb, void *app_key) {
242 T_inherit_TYPE_descriptor(td);
243 return td->print_struct(td, struct_ptr, ilevel, cb, app_key);
244}
245
vlm39ba4c42004-09-22 16:06:28 +0000246ber_dec_rval_t
247T_decode_ber(asn1_TYPE_descriptor_t *td,
248 void **structure, void *bufptr, size_t size, int tag_mode) {
vlm21e46002004-08-20 13:36:32 +0000249 T_inherit_TYPE_descriptor(td);
vlm39ba4c42004-09-22 16:06:28 +0000250 return td->ber_decoder(td, structure, bufptr, size, tag_mode);
251}
252
253asn_enc_rval_t
254T_encode_der(asn1_TYPE_descriptor_t *td,
255 void *structure, int tag_mode, ber_tlv_tag_t tag,
256 asn_app_consume_bytes_f *cb, void *app_key) {
257 T_inherit_TYPE_descriptor(td);
258 return td->der_encoder(td, structure, tag_mode, tag, cb, app_key);
259}
260
261asn_enc_rval_t
262T_encode_xer(asn1_TYPE_descriptor_t *td, void *structure,
263 int ilevel, enum xer_encoder_flags_e flags,
264 asn_app_consume_bytes_f *cb, void *app_key) {
265 T_inherit_TYPE_descriptor(td);
266 return td->xer_encoder(td, structure, ilevel, flags, cb, app_key);
vlm21e46002004-08-20 13:36:32 +0000267}
268
269
vlm3df79662004-06-28 21:13:22 +0000270/*** <<< STAT-DEFS [T] >>> ***/
271
272static ber_tlv_tag_t asn1_DEF_T_tags[] = {
vlm72425de2004-09-13 08:31:01 +0000273 (ASN_TAG_CLASS_CONTEXT | (3 << 2)),
274 (ASN_TAG_CLASS_UNIVERSAL | (16 << 2))
vlm3df79662004-06-28 21:13:22 +0000275};
276asn1_TYPE_descriptor_t asn1_DEF_T = {
277 "T",
vlm39ba4c42004-09-22 16:06:28 +0000278 T_free,
279 T_print,
vlm3df79662004-06-28 21:13:22 +0000280 T_constraint,
281 T_decode_ber,
282 T_encode_der,
vlm39ba4c42004-09-22 16:06:28 +0000283 0, /* Not implemented yet */
284 T_encode_xer,
vlm3df79662004-06-28 21:13:22 +0000285 0, /* Use generic outmost tag fetcher */
286 asn1_DEF_T_tags,
287 sizeof(asn1_DEF_T_tags)
vlm72425de2004-09-13 08:31:01 +0000288 /sizeof(asn1_DEF_T_tags[0]) - 1, /* 1 */
289 asn1_DEF_T_tags, /* Same as above */
290 sizeof(asn1_DEF_T_tags)
291 /sizeof(asn1_DEF_T_tags[0]), /* 2 */
vlm3df79662004-06-28 21:13:22 +0000292 -0, /* Unknown yet */
vlm21e46002004-08-20 13:36:32 +0000293 0, 0, /* Defined elsewhere */
vlm3df79662004-06-28 21:13:22 +0000294 0 /* No specifics */
295};
296