blob: db1f1cf04c26c456e30b45345cd6b411b9e2c9b5 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001/*
2 * A Module definition structure used by the ASN.1 parser.
3 */
4#ifndef ASN1_PARSER_MODULE_H
5#define ASN1_PARSER_MODULE_H
6
Lev Walkina9532f42006-09-17 04:52:50 +00007struct asn1p_module_s;
8
9/*
10 * A simple container for several modules.
11 */
12typedef struct asn1p_s {
13 TQ_HEAD(struct asn1p_module_s) modules;
14} asn1p_t;
15
16asn1p_t *asn1p_new(void);
17void asn1p_delete(asn1p_t *asn);
18
Lev Walkinf15320b2004-06-03 03:38:44 +000019/*
20 * Flags specific to a module.
21 */
22typedef enum asn1p_module_flags {
23 MSF_NOFLAGS,
Lev Walkinf59d0752004-08-18 04:59:12 +000024 MSF_unk_INSTRUCTIONS = 0x001,
25 MSF_TAG_INSTRUCTIONS = 0x002,
26 MSF_XER_INSTRUCTIONS = 0x004,
27 MSF_EXPLICIT_TAGS = 0x010,
28 MSF_IMPLICIT_TAGS = 0x020,
29 MSF_AUTOMATIC_TAGS = 0x040,
30 MSF_EXTENSIBILITY_IMPLIED = 0x100,
Lev Walkinf15320b2004-06-03 03:38:44 +000031} asn1p_module_flags_e;
Lev Walkinf59d0752004-08-18 04:59:12 +000032#define MSF_MASK_INSTRUCTIONS 0x0f
33#define MSF_MASK_TAGS 0xf0
Lev Walkinf15320b2004-06-03 03:38:44 +000034
35/*
36 * === EXAMPLE ===
37 * MySyntax DEFINITIONS AUTOMATIC TAGS ::=
38 * BEGIN
39 * ...
40 * END
41 * === EOF ===
42 */
43typedef struct asn1p_module_s {
44
45 /*
Lev Walkinc0e03b92017-08-22 01:48:23 -070046 * Human-readable module reference.
47 */
48 char *ModuleName; /* Must be the first field */
49
50 /*
Lev Walkinf15320b2004-06-03 03:38:44 +000051 * Name of the source file.
52 */
53 char *source_file_name;
54
55 /*
Lev Walkinf15320b2004-06-03 03:38:44 +000056 * Unique module identifier, OID.
57 */
58 asn1p_oid_t *module_oid; /* Optional OID of the module */
59
60 /*
61 * Module flags.
62 */
63 asn1p_module_flags_e module_flags; /* AUTOMATIC TAGS? */
64
65 /*
Lev Walkinf15320b2004-06-03 03:38:44 +000066 * List of everything that this module EXPORTS.
67 */
68 TQ_HEAD(struct asn1p_xports_s) exports;
69
70 /*
Lev Walkin866bd7f2006-09-14 10:35:20 +000071 * List of everything that this module IMPORTS.
72 */
73 TQ_HEAD(struct asn1p_xports_s) imports;
74
75 /*
Lev Walkinf15320b2004-06-03 03:38:44 +000076 * List of everything that this module defines itself.
77 */
78 TQ_HEAD(struct asn1p_expr_s) members;
79
80 /*
81 * Next module in the list.
82 */
83 TQ_ENTRY(struct asn1p_module_s)
84 mod_next;
85
Lev Walkina9532f42006-09-17 04:52:50 +000086 /* All modules */
87 asn1p_t *asn1p;
88
Lev Walkin46499872006-03-06 13:05:34 +000089 /*
90 * Internally useful properties.
91 */
92 enum {
93 MT_STANDARD_MODULE = 0x01, /* Module came from standard-modules */
94 } _tags;
Lev Walkinf15320b2004-06-03 03:38:44 +000095} asn1p_module_t;
96
97/*
98 * Constructor and destructor.
99 */
100asn1p_module_t *asn1p_module_new(void);
101void asn1p_module_free(asn1p_module_t *mod);
102
Lev Walkinf15320b2004-06-03 03:38:44 +0000103#endif /* ASN1_PARSER_MODULE_H */