blob: ee39afbe759987d816845d509425e9e1683b5695 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001#include "asn1fix_internal.h"
2#include "asn1fix_export.h"
3
Lev Walkinb45e0672004-08-18 05:42:05 +00004extern arg_t a1f_replace_me_with_proper_interface_arg;
5
Lev Walkinc0e03b92017-08-22 01:48:23 -07006static asn1p_t *asn1f_ssn_asn_;
7
8static void
9_add_standard_namespaces(asn1_namespace_t *ns) {
10 asn1p_oid_t *uioc_oid;
11 asn1p_oid_arc_t arcs[] = {{1, "iso"}, {3, "org"},
12 {6, "dod"}, {1, "internet"},
13 {4, "private"}, {1, "enterprise"},
14 {9363, "spelio"}, {1, "software"},
15 {5, "asn1c"}, {3, "standard-modules"},
16 {0, "auto-imported"}, {1, 0}};
17
18 uioc_oid = asn1p_oid_construct(arcs, sizeof(arcs) / sizeof(arcs[0]));
19
20 asn1p_module_t *module = asn1f_lookup_module_ex(
21 asn1f_ssn_asn_, "ASN1C-UsefulInformationObjectClasses", uioc_oid);
22 asn1p_oid_free(uioc_oid);
23
24 if(module) {
25 asn1_namespace_add_module(ns, module, 0);
26 }
27}
28
29void
30asn1f_use_standard_namespaces(asn1p_t *asn) {
31 asn1f_ssn_asn_ = asn;
32 asn1_namespace_add_standard_namespaces_callback(_add_standard_namespaces);
33}
34
35asn1p_module_t *
36asn1f_lookup_module_ex(asn1p_t *asn, const char *module_name,
37 const asn1p_oid_t *oid) {
38 arg_t arg;
39
40 memset(&arg, 0, sizeof(arg));
41
42 arg.asn = asn;
43 arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
44 arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
45 return asn1f_lookup_module(&arg, module_name, oid);
46}
Lev Walkinb45e0672004-08-18 05:42:05 +000047
Lev Walkinf15320b2004-06-03 03:38:44 +000048asn1p_expr_t *
Lev Walkinc0e03b92017-08-22 01:48:23 -070049asn1f_lookup_symbol_ex(asn1p_t *asn, asn1_namespace_t *ns, asn1p_expr_t *expr,
50 const asn1p_ref_t *ref) {
51 arg_t arg;
Lev Walkinf15320b2004-06-03 03:38:44 +000052
Lev Walkinc0e03b92017-08-22 01:48:23 -070053 memset(&arg, 0, sizeof(arg));
Lev Walkinf15320b2004-06-03 03:38:44 +000054
Lev Walkinc0e03b92017-08-22 01:48:23 -070055 arg.asn = asn;
56 arg.ns = ns;
57 arg.mod = expr->module;
58 arg.expr = expr;
59 arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
60 arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
Lev Walkinb45e0672004-08-18 05:42:05 +000061
Lev Walkinc0e03b92017-08-22 01:48:23 -070062 return asn1f_lookup_symbol(&arg, expr->rhs_pspecs, ref);
Lev Walkinf15320b2004-06-03 03:38:44 +000063}
64
65asn1p_expr_t *
66asn1f_class_access_ex(asn1p_t *asn,
67 asn1p_module_t *mod,
Lev Walkinc0e03b92017-08-22 01:48:23 -070068 asn1_namespace_t *ns,
Lev Walkinf15320b2004-06-03 03:38:44 +000069 asn1p_expr_t *expr,
Lev Walkina00d6b32006-03-21 03:40:38 +000070 asn1p_expr_t *rhs_pspecs,
Lev Walkinea6635b2017-08-06 23:23:04 -070071 const asn1p_ref_t *ref) {
Lev Walkinb45e0672004-08-18 05:42:05 +000072 arg_t arg;
73
74 memset(&arg, 0, sizeof(arg));
Lev Walkinf15320b2004-06-03 03:38:44 +000075
76 arg.asn = asn;
77 arg.mod = mod;
Lev Walkinc0e03b92017-08-22 01:48:23 -070078 arg.ns = ns;
Lev Walkinf15320b2004-06-03 03:38:44 +000079 arg.expr = expr;
Lev Walkinb45e0672004-08-18 05:42:05 +000080 arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
81 arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
Lev Walkinf15320b2004-06-03 03:38:44 +000082
Lev Walkinc0e03b92017-08-22 01:48:23 -070083 return asn1f_class_access(&arg, rhs_pspecs, ref);
Lev Walkinf15320b2004-06-03 03:38:44 +000084}
85
86asn1p_expr_t *
Lev Walkinc0e03b92017-08-22 01:48:23 -070087asn1f_find_terminal_type_ex(asn1p_t *asn, asn1_namespace_t *ns,
88 asn1p_expr_t *expr) {
89 arg_t arg;
Lev Walkinb45e0672004-08-18 05:42:05 +000090
Lev Walkinc0e03b92017-08-22 01:48:23 -070091 memset(&arg, 0, sizeof(arg));
Lev Walkinf15320b2004-06-03 03:38:44 +000092
Lev Walkinc0e03b92017-08-22 01:48:23 -070093 arg.asn = asn;
94 arg.ns = ns;
95 arg.mod = expr->module;
96 arg.expr = expr;
97 arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
98 arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
Lev Walkinf15320b2004-06-03 03:38:44 +000099
Lev Walkinc0e03b92017-08-22 01:48:23 -0700100 return asn1f_find_terminal_type(&arg, expr);
Lev Walkinf15320b2004-06-03 03:38:44 +0000101}
Lev Walkinb45e0672004-08-18 05:42:05 +0000102
Bi-Ruei, Chiu1fa31c92016-05-16 13:50:09 +0800103asn1p_expr_t *
104asn1f_find_ancestor_type_with_PER_constraint_ex(asn1p_t *asn, asn1p_expr_t *expr) {
105 arg_t arg;
106
107 memset(&arg, 0, sizeof(arg));
108
109 arg.asn = asn;
110 arg.mod = expr->module;
111 arg.expr = expr;
112 arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
113 arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
114
115 return asn1f_find_ancestor_type_with_PER_constraint(&arg, expr);
116}
117
Lev Walkinb45e0672004-08-18 05:42:05 +0000118int
119asn1f_fix_dereference_values_ex(asn1p_t *asn, asn1p_module_t *mod,
120 asn1p_expr_t *expr) {
121 arg_t arg;
122
123 memset(&arg, 0, sizeof(arg));
124
125 arg.asn = asn;
126 arg.mod = mod;
127 arg.expr = expr;
128 arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
129 arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
130
131 return asn1f_fix_dereference_values(&arg);
132}
133