mirror of https://gerrit.osmocom.org/asn1c
134 lines
3.5 KiB
C
134 lines
3.5 KiB
C
#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);
|
|
}
|
|
|