1 /*
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 
7 struct asn1p_module_s;
8 
9 /*
10  * A simple container for several modules.
11  */
12 typedef struct asn1p_s {
13 	TQ_HEAD(struct asn1p_module_s)	modules;
14 } asn1p_t;
15 
16 asn1p_t *asn1p_new(void);
17 void asn1p_delete(asn1p_t *asn);
18 
19 /*
20  * Flags specific to a module.
21  */
22 typedef enum asn1p_module_flags {
23 	MSF_NOFLAGS,
24 	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,
31 } asn1p_module_flags_e;
32 #define	MSF_MASK_INSTRUCTIONS		0x0f
33 #define	MSF_MASK_TAGS			0xf0
34 
35 /*
36  * === EXAMPLE ===
37  * MySyntax DEFINITIONS AUTOMATIC TAGS ::=
38  * BEGIN
39  * ...
40  * END
41  * === EOF ===
42  */
43 typedef struct asn1p_module_s {
44 
45 	/*
46 	 * Name of the source file.
47 	 */
48 	char *source_file_name;
49 
50 	/*
51 	 * Human-readable module reference.
52 	 */
53 	char *ModuleName;
54 
55 	/*
56 	 * 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 	/*
66 	 * List of everything that this module EXPORTS.
67 	 */
68 	TQ_HEAD(struct asn1p_xports_s)	exports;
69 
70 	/*
71 	 * List of everything that this module IMPORTS.
72 	 */
73 	TQ_HEAD(struct asn1p_xports_s)	imports;
74 
75 	/*
76 	 * 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 
86 	/* All modules */
87 	asn1p_t *asn1p;
88 
89 	/*
90 	 * Internally useful properties.
91 	 */
92 	enum {
93 	  MT_STANDARD_MODULE = 0x01,	/* Module came from standard-modules */
94 	} _tags;
95 } asn1p_module_t;
96 
97 /*
98  * Constructor and destructor.
99  */
100 asn1p_module_t *asn1p_module_new(void);
101 void asn1p_module_free(asn1p_module_t *mod);
102 
103 #endif	/* ASN1_PARSER_MODULE_H */
104