aboutsummaryrefslogtreecommitdiffstats
path: root/libasn1fix/asn1fix_export.c
blob: ee39afbe759987d816845d509425e9e1683b5695 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "asn1fix_internal.h"
#include "asn1fix_export.h"

extern arg_t a1f_replace_me_with_proper_interface_arg;

static asn1p_t *asn1f_ssn_asn_;

static void
_add_standard_namespaces(asn1_namespace_t *ns) {
    asn1p_oid_t *uioc_oid;
    asn1p_oid_arc_t arcs[] = {{1, "iso"},           {3, "org"},
                              {6, "dod"},           {1, "internet"},
                              {4, "private"},       {1, "enterprise"},
                              {9363, "spelio"},     {1, "software"},
                              {5, "asn1c"},         {3, "standard-modules"},
                              {0, "auto-imported"}, {1, 0}};

    uioc_oid = asn1p_oid_construct(arcs, sizeof(arcs) / sizeof(arcs[0]));

    asn1p_module_t *module = asn1f_lookup_module_ex(
        asn1f_ssn_asn_, "ASN1C-UsefulInformationObjectClasses", uioc_oid);
    asn1p_oid_free(uioc_oid);

    if(module) {
        asn1_namespace_add_module(ns, module, 0);
    }
}

void
asn1f_use_standard_namespaces(asn1p_t *asn) {
    asn1f_ssn_asn_ = asn;
    asn1_namespace_add_standard_namespaces_callback(_add_standard_namespaces);
}

asn1p_module_t *
asn1f_lookup_module_ex(asn1p_t *asn, const char *module_name,
                       const asn1p_oid_t *oid) {
    arg_t arg;

    memset(&arg, 0, sizeof(arg));

    arg.asn = asn;
    arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
    arg.debug = a1f_replace_me_with_proper_interface_arg.debug;
    return asn1f_lookup_module(&arg, module_name, oid);
}

asn1p_expr_t *
asn1f_lookup_symbol_ex(asn1p_t *asn, asn1_namespace_t *ns, asn1p_expr_t *expr,
                       const asn1p_ref_t *ref) {
    arg_t arg;

    memset(&arg, 0, sizeof(arg));

    arg.asn = asn;
    arg.ns = ns;
    arg.mod = expr->module;
    arg.expr = expr;
    arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
    arg.debug = a1f_replace_me_with_proper_interface_arg.debug;

    return asn1f_lookup_symbol(&arg, expr->rhs_pspecs, ref);
}

asn1p_expr_t *
asn1f_class_access_ex(asn1p_t *asn,
		asn1p_module_t *mod,
		asn1_namespace_t *ns,
		asn1p_expr_t *expr,
		asn1p_expr_t *rhs_pspecs,
		const asn1p_ref_t *ref) {
	arg_t arg;

	memset(&arg, 0, sizeof(arg));

	arg.asn = asn;
	arg.mod = mod;
	arg.ns = ns;
	arg.expr = expr;
	arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
	arg.debug = a1f_replace_me_with_proper_interface_arg.debug;

    return asn1f_class_access(&arg, rhs_pspecs, ref);
}

asn1p_expr_t *
asn1f_find_terminal_type_ex(asn1p_t *asn, asn1_namespace_t *ns,
                            asn1p_expr_t *expr) {
    arg_t arg;

    memset(&arg, 0, sizeof(arg));

    arg.asn = asn;
    arg.ns = ns;
    arg.mod = expr->module;
    arg.expr = expr;
    arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
    arg.debug = a1f_replace_me_with_proper_interface_arg.debug;

    return asn1f_find_terminal_type(&arg, expr);
}

asn1p_expr_t *
asn1f_find_ancestor_type_with_PER_constraint_ex(asn1p_t *asn, asn1p_expr_t *expr) {
	arg_t arg;

	memset(&arg, 0, sizeof(arg));

	arg.asn = asn;
	arg.mod = expr->module;
	arg.expr = expr;
	arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
	arg.debug = a1f_replace_me_with_proper_interface_arg.debug;

	return asn1f_find_ancestor_type_with_PER_constraint(&arg, expr);
}

int
asn1f_fix_dereference_values_ex(asn1p_t *asn, asn1p_module_t *mod,
        asn1p_expr_t *expr) {
	arg_t arg;

	memset(&arg, 0, sizeof(arg));

	arg.asn = asn;
	arg.mod = mod;
	arg.expr = expr;
	arg.eh = a1f_replace_me_with_proper_interface_arg.eh;
	arg.debug = a1f_replace_me_with_proper_interface_arg.debug;

	return asn1f_fix_dereference_values(&arg);
}