asn_ext.c
来自「ftam等标准协议服务器和客户端的源代码。」· C语言 代码 · 共 1,278 行 · 第 1/3 页
C
1,278 行
#ifdef DEBUG (void) testdebug (p116, "type");#endif if (decode_IF_AttributeType (p116, 1, (int *)0, NULLVP, &subs_next->fi_sub_type) == NOTOK) return NOTOK; } } else { advise (NULLCP, "substrings %stype element", PEPY_ERR_MISSING); return NOTOK; } } { register PE p117; if ((p117 = (p113 != p115 ? next_member (p113, p115) : first_member (p113))) != NULLPE) { p115 = p117; { /* strings */ register PE p118;#ifdef DEBUG (void) testdebug (p117, "strings");#endif if (p117 -> pe_class != PE_CLASS_UNIV || p117 -> pe_form != PE_FORM_CONS || p117 -> pe_id != PE_CONS_SEQ) { advise (NULLCP, "strings bad class/form/id: %s/%d/0x%x", pe_classlist[p117 -> pe_class], p117 -> pe_form, p117 -> pe_id); return NOTOK; } if ((p118 = prim2seq (p117)) == NULLPE) { advise (NULLCP, "strings %s%s", PEPY_ERR_BAD_SEQ, pe_error (p117 -> pe_errno)); return NOTOK; } p117 = p118; for (p118 = first_member (p117); p118; p118 = next_member (p117, p118)) { {#ifdef DEBUG (void) testdebug (p118, "element");#endif av_next = AttrV_alloc(); av_next->av_syntax = 0; switch (PE_ID (p118 -> pe_class, p118 -> pe_id)) { case PE_ID (PE_CLASS_CONT, 0): /* initial */ { register PE p119 = p118; { /* initial TAG PULLUP */ register PE p120; if ((p120 = prim2set (p119)) == NULLPE) { advise (NULLCP, "initial %sinitial: %s", PEPY_ERR_BAD, pe_error (p119 -> pe_errno)); return NOTOK; } if (p120 -> pe_cardinal != 1) { advise (NULLCP, "initial %s initial: %d", PEPY_ERR_TOO_MANY_TAGGED, p120 -> pe_cardinal); return NOTOK; } p119 = first_member (p120); } {#ifdef DEBUG (void) testdebug (p119, "initial");#endif/* if (decode_IF_AttributeValue (p119, 1, NULLINTP, NULLVP, &av_next) == NOTOK) return NOTOK;*/ av_next->av_struct = (caddr_t)p119; p119->pe_refcnt++; { if (AttrV_decode (subs_next->fi_sub_type,av_next) != OK) { LLOG (log_dsap,LLOG_EXCEPTIONS,("invalid initial value")); return NOTOK; } (*avs_initial) = avs_comp_new(av_next); avs_initial = &((*avs_initial)->avseq_next); (*avs_initial) = NULLAV; } } } break; case PE_ID (PE_CLASS_CONT, 1): /* any */ { register PE p121 = p118; { /* any TAG PULLUP */ register PE p122; if ((p122 = prim2set (p121)) == NULLPE) { advise (NULLCP, "any %sany: %s", PEPY_ERR_BAD, pe_error (p121 -> pe_errno)); return NOTOK; } if (p122 -> pe_cardinal != 1) { advise (NULLCP, "any %s any: %d", PEPY_ERR_TOO_MANY_TAGGED, p122 -> pe_cardinal); return NOTOK; } p121 = first_member (p122); } {#ifdef DEBUG (void) testdebug (p121, "any");#endif/* if (decode_IF_AttributeValue (p121, 1, NULLINTP, NULLVP, &av_next) == NOTOK) return NOTOK;*/ av_next->av_struct = (caddr_t)p121; p121->pe_refcnt++; { if (AttrV_decode (subs_next->fi_sub_type,av_next) != OK) { LLOG (log_dsap,LLOG_EXCEPTIONS,("invalid any value")); return NOTOK; } (*avs_any) = avs_comp_new(av_next); avs_any = &((*avs_any)->avseq_next); (*avs_any) = NULLAV; } } } break; case PE_ID (PE_CLASS_CONT, 2): /* final */ { register PE p123 = p118; { /* final TAG PULLUP */ register PE p124; if ((p124 = prim2set (p123)) == NULLPE) { advise (NULLCP, "final %sfinal: %s", PEPY_ERR_BAD, pe_error (p123 -> pe_errno)); return NOTOK; } if (p124 -> pe_cardinal != 1) { advise (NULLCP, "final %s final: %d", PEPY_ERR_TOO_MANY_TAGGED, p124 -> pe_cardinal); return NOTOK; } p123 = first_member (p124); } {#ifdef DEBUG (void) testdebug (p123, "final");#endif/* if (decode_IF_AttributeValue (p123, 1, NULLINTP, NULLVP, &av_next) == NOTOK) return NOTOK;*/ av_next->av_struct = (caddr_t)p123; p123->pe_refcnt++; { if (AttrV_decode (subs_next->fi_sub_type,av_next) != OK) { LLOG (log_dsap,LLOG_EXCEPTIONS,("invalid final value")); return NOTOK; } (*avs_final) = avs_comp_new(av_next); avs_final = &((*avs_final)->avseq_next); (*avs_final) = NULLAV; } } } break; default: advise (NULLCP, "element %s%s/%d/0x%x", PEPY_ERR_UNKNOWN_CHOICE, pe_classlist[p118 -> pe_class], p118 -> pe_form, p118 -> pe_id); return NOTOK; } } } } } else { advise (NULLCP, "substrings %sstrings element", PEPY_ERR_MISSING); return NOTOK; } } if (p113 -> pe_cardinal > 2) { advise (NULLCP, "substrings %s(2): %d", PEPY_ERR_TOO_MANY_ELEMENTS, p113 -> pe_cardinal); return NOTOK; }} return OK;}substring_free (parm)struct filter_item *parm;{ avs_free (parm->UNSUB.fi_sub_initial); avs_free (parm->UNSUB.fi_sub_any); avs_free (parm->UNSUB.fi_sub_final); return OK;}/* TreeStructureSyntax encode *//* * *TreeStructureSyntax [[P struct tree_struct *]] *%{ *OID oid_tmp; *int do_once; *%} * ::= * %{ * DLOG(log_dsap, LLOG_PDUS, ("About to encode TreeStructureSyntax")); * if (parm->tree_object == NULLOBJECTCLASS) { * DLOG(log_dsap, LLOG_DEBUG, ("NULL OID in tree structure")); * oid_tmp = NULLOID; * } else { * oid_tmp = oid_cpy(parm->tree_object->oc_ot.ot_oid); * DLOG(log_dsap, LLOG_DEBUG, ("oc encodes as oid: %s", sprintoid(oid_tmp))); * } * %} * SET * { * mandatoryObjectClasses * [1] SET OF * %{ * DLOG(log_dsap, LLOG_DEBUG, ("Another mandatory oc")); * %} * <<do_once = 1; do_once != 0; do_once = 0>> * OBJECT IDENTIFIER [[O oid_tmp]] , * optionalObjectClasses * [2] SET OF * OBJECT IDENTIFIER * -- OPTIONAL <<FALSE>> , * OPTIONAL , * permittedRDNs * [3] SET OF * SET OF * AttributeType [[p NULLAttrT]] * } * %{ * if(oid_tmp != NULLOID) * oid_free (oid_tmp); * DLOG(log_dsap, LLOG_PDUS, ("Done encode TreeStructureSyntax")); * %} * */treestruct_encode (parm,pe)struct tree_struct * parm;PE * pe;{OID oid_tmp;int do_once; PE p23_z = NULLPE; register PE *p23 = &p23_z; if (((*pe) = pe_alloc (PE_CLASS_UNIV, PE_FORM_CONS, PE_CONS_SET)) == NULLPE) { advise (NULLCP, "TreeStructureSyntax: %s", PEPY_ERR_NOMEM); return NOTOK; } { if (parm->tree_object == NULLOBJECTCLASS) { DLOG(log_dsap, LLOG_DEBUG, ("NULL OID in tree structure")); oid_tmp = NULLOID; } else { oid_tmp = oid_cpy(parm->tree_object->oc_ot.ot_oid); DLOG(log_dsap, LLOG_DEBUG, ("oc encodes as oid: %s", sprintoid(oid_tmp))); } } (*p23) = NULLPE; { PE p24 = NULLPE; PE p25_z = NULLPE; register PE *p25 = &p25_z; if (((*p23) = pe_alloc (PE_CLASS_UNIV, PE_FORM_CONS, PE_CONS_SET)) == NULLPE) { advise (NULLCP, "mandatoryObjectClasses: %s", PEPY_ERR_NOMEM); return NOTOK; } for (do_once = 1; do_once != 0; do_once = 0) { { DLOG(log_dsap, LLOG_DEBUG, ("Another mandatory oc")); } { register OID p26; p26 = oid_tmp; if (p26 == NULLOID) { advise (NULLCP, "member %s", PEPY_ERR_INIT_FAILED); return NOTOK; } if (((*p25) = obj2prim (p26, PE_CLASS_UNIV, PE_PRIM_OID)) == NULLPE) { advise (NULLCP, "member: %s", PEPY_ERR_NOMEM); return NOTOK; }#ifdef DEBUG (void) testdebug ((*p25), "member");#endif } (void)set_addon ((*p23), p24, (*p25)); p24 = (*p25); }#ifdef DEBUG (void) testdebug ((*p23), "mandatoryObjectClasses");#endif { /* mandatoryObjectClasses TAG PUSHDOWN */ PE p27_z; register PE *p27 = &p27_z; if ((*p27 = pe_alloc (PE_CLASS_CONT, PE_FORM_CONS, 1)) == NULLPE) { advise (NULLCP, "mandatoryObjectClasses: %s", PEPY_ERR_NOMEM); return NOTOK; } (*p27) -> pe_cons = (*p23); (*p23) = *p27; } } if ((*p23) != NULLPE) if (set_add ((*pe), (*p23)) == NOTOK) { advise (NULLCP, "TreeStructureSyntax %s%s", PEPY_ERR_BAD_SET, pe_error ((*pe) -> pe_errno)); return NOTOK; } (*p23) = NULLPE; if ((*p23) != NULLPE) if (set_add ((*pe), (*p23)) == NOTOK) { advise (NULLCP, "TreeStructureSyntax %s%s", PEPY_ERR_BAD_SET, pe_error ((*pe) -> pe_errno)); return NOTOK; } (*p23) = NULLPE; { if (((*p23) = pe_alloc (PE_CLASS_UNIV, PE_FORM_CONS, PE_CONS_SET)) == NULLPE) { advise (NULLCP, "permittedRDNs: %s", PEPY_ERR_NOMEM); return NOTOK; }#ifdef DEBUG (void) testdebug ((*p23), "permittedRDNs");#endif { /* permittedRDNs TAG PUSHDOWN */ PE p30_z; register PE *p30 = &p30_z; if ((*p30 = pe_alloc (PE_CLASS_CONT, PE_FORM_CONS, 3)) == NULLPE) { advise (NULLCP, "permittedRDNs: %s", PEPY_ERR_NOMEM); return NOTOK; } (*p30) -> pe_cons = (*p23); (*p23) = *p30; } } if ((*p23) != NULLPE) if (set_add ((*pe), (*p23)) == NOTOK) { advise (NULLCP, "TreeStructureSyntax %s%s", PEPY_ERR_BAD_SET, pe_error ((*pe) -> pe_errno)); return NOTOK; }#ifdef DEBUG (void) testdebug ((*pe), "Quipu.TreeStructureSyntax");#endif { if(oid_tmp != NULLOID) oid_free (oid_tmp); } return OK;}/* TreeStructSyntax decode *//* * *TreeStructureSyntax [[P struct tree_struct **]] *%{ *AttributeType at_tmp; *OID oid_tmp; *int is_first; *objectclass * oc_add(); *%} * ::= * %{ * DLOG(log_dsap, LLOG_PDUS, ("About to decode TreeStructureSyntax")); * is_first = 1; * %} * SET * { * mandatoryObjectClasses
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?