mirror of https://gerrit.osmocom.org/asn1c
104 lines
1.9 KiB
C
104 lines
1.9 KiB
C
/*
|
|
* A Module definition structure used by the ASN.1 parser.
|
|
*/
|
|
#ifndef ASN1_PARSER_MODULE_H
|
|
#define ASN1_PARSER_MODULE_H
|
|
|
|
struct asn1p_module_s;
|
|
|
|
/*
|
|
* A simple container for several modules.
|
|
*/
|
|
typedef struct asn1p_s {
|
|
TQ_HEAD(struct asn1p_module_s) modules;
|
|
} asn1p_t;
|
|
|
|
asn1p_t *asn1p_new(void);
|
|
void asn1p_delete(asn1p_t *asn);
|
|
|
|
/*
|
|
* Flags specific to a module.
|
|
*/
|
|
typedef enum asn1p_module_flags {
|
|
MSF_NOFLAGS,
|
|
MSF_unk_INSTRUCTIONS = 0x001,
|
|
MSF_TAG_INSTRUCTIONS = 0x002,
|
|
MSF_XER_INSTRUCTIONS = 0x004,
|
|
MSF_EXPLICIT_TAGS = 0x010,
|
|
MSF_IMPLICIT_TAGS = 0x020,
|
|
MSF_AUTOMATIC_TAGS = 0x040,
|
|
MSF_EXTENSIBILITY_IMPLIED = 0x100,
|
|
} asn1p_module_flags_e;
|
|
#define MSF_MASK_INSTRUCTIONS 0x0f
|
|
#define MSF_MASK_TAGS 0xf0
|
|
|
|
/*
|
|
* === EXAMPLE ===
|
|
* MySyntax DEFINITIONS AUTOMATIC TAGS ::=
|
|
* BEGIN
|
|
* ...
|
|
* END
|
|
* === EOF ===
|
|
*/
|
|
typedef struct asn1p_module_s {
|
|
|
|
/*
|
|
* Human-readable module reference.
|
|
*/
|
|
char *ModuleName; /* Must be the first field */
|
|
|
|
/*
|
|
* Name of the source file.
|
|
*/
|
|
char *source_file_name;
|
|
|
|
/*
|
|
* Unique module identifier, OID.
|
|
*/
|
|
asn1p_oid_t *module_oid; /* Optional OID of the module */
|
|
|
|
/*
|
|
* Module flags.
|
|
*/
|
|
asn1p_module_flags_e module_flags; /* AUTOMATIC TAGS? */
|
|
|
|
/*
|
|
* List of everything that this module EXPORTS.
|
|
*/
|
|
TQ_HEAD(struct asn1p_xports_s) exports;
|
|
|
|
/*
|
|
* List of everything that this module IMPORTS.
|
|
*/
|
|
TQ_HEAD(struct asn1p_xports_s) imports;
|
|
|
|
/*
|
|
* List of everything that this module defines itself.
|
|
*/
|
|
TQ_HEAD(struct asn1p_expr_s) members;
|
|
|
|
/*
|
|
* Next module in the list.
|
|
*/
|
|
TQ_ENTRY(struct asn1p_module_s)
|
|
mod_next;
|
|
|
|
/* All modules */
|
|
asn1p_t *asn1p;
|
|
|
|
/*
|
|
* Internally useful properties.
|
|
*/
|
|
enum {
|
|
MT_STANDARD_MODULE = 0x01, /* Module came from standard-modules */
|
|
} _tags;
|
|
} asn1p_module_t;
|
|
|
|
/*
|
|
* Constructor and destructor.
|
|
*/
|
|
asn1p_module_t *asn1p_module_new(void);
|
|
void asn1p_module_free(asn1p_module_t *mod);
|
|
|
|
#endif /* ASN1_PARSER_MODULE_H */
|