Annotation of 43BSDReno/contrib/isode-beta/ftam/ftamdiag.c, revision 1.1

1.1     ! root        1: /* ftamdiag.c - FPM: encode/decode diagnostics */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/ftam/RCS/ftamdiag.c,v 7.1 90/01/11 18:35:40 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/ftam/RCS/ftamdiag.c,v 7.1 90/01/11 18:35:40 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ftamdiag.c,v $
        !            12:  * Revision 7.1  90/01/11  18:35:40  mrose
        !            13:  * real-sync
        !            14:  * 
        !            15:  * Revision 7.0  89/11/23  21:53:32  mrose
        !            16:  * Release 6.0
        !            17:  * 
        !            18:  */
        !            19: 
        !            20: /*
        !            21:  *                               NOTICE
        !            22:  *
        !            23:  *    Acquisition, use, and distribution of this module and related
        !            24:  *    materials are subject to the restrictions of a license agreement.
        !            25:  *    Consult the Preface in the User's Manual for the full terms of
        !            26:  *    this agreement.
        !            27:  *
        !            28:  */
        !            29: 
        !            30: 
        !            31: /* LINTLIBRARY */
        !            32: 
        !            33: #include <stdio.h>
        !            34: #include "fpkt.h"
        !            35: 
        !            36: /*  */
        !            37: 
        !            38: struct type_FTAM_Diagnostic *diag2fpm (fsb, magic, diag, ndiag, fti)
        !            39: register struct ftamblk *fsb;
        !            40: int    magic;
        !            41: struct FTAMdiagnostic diag[];
        !            42: int    ndiag;
        !            43: struct FTAMindication *fti;
        !            44: {
        !            45:     register int    i;
        !            46:     register struct FTAMdiagnostic *dp;
        !            47:     struct type_FTAM_Diagnostic *fpmp;
        !            48:     register struct type_FTAM_Diagnostic  *fpm,
        !            49:                                         **fpc;
        !            50:     register struct diag_element *f3;
        !            51: 
        !            52:     fpmp = NULL, fpc = &fpmp;
        !            53:     for (dp = diag, i = ndiag - 1; i >= 0; dp++, i--) {
        !            54:        if ((fpm = (struct type_FTAM_Diagnostic *) calloc (1, sizeof *fpm))
        !            55:                == NULL) {
        !            56: no_mem: ;
        !            57:            (void) ftamlose (fti, FS_GEN (fsb), 1, NULLCP, "out of memory");
        !            58: out: ;
        !            59:            if (fpmp)
        !            60:                free_FTAM_Diagnostic (fpmp);
        !            61:            return NULL;
        !            62:        }
        !            63:        *fpc = fpm;
        !            64: 
        !            65:        if ((f3 = (struct diag_element *) calloc (1, sizeof *f3)) == NULL)
        !            66:            goto no_mem;
        !            67:        fpm -> diagnostic = f3;
        !            68: 
        !            69:        switch (dp -> ftd_type) {
        !            70:            case DIAG_INFORM: 
        !            71:            case DIAG_TRANS: 
        !            72:            case DIAG_PERM: 
        !            73:                break;
        !            74: 
        !            75:            default: 
        !            76:        bad_dp: ;
        !            77:                (void) ftamlose (fti, FS_GEN (fsb), 0, NULLCP,
        !            78:                        "bad diagnostic type/observer/source (%d/%d/%d) at slot %d",
        !            79:                        dp -> ftd_type, dp -> ftd_observer, dp -> ftd_source,
        !            80:                        ndiag - i - 1);
        !            81:                goto out;
        !            82:        }
        !            83:        f3 -> diagnostic__type = dp -> ftd_type;
        !            84: 
        !            85:        f3 -> error__identifier = dp -> ftd_identifier;
        !            86: 
        !            87:        switch (dp -> ftd_observer) {
        !            88:            case EREF_IFSU: 
        !            89:            case EREF_IFPM: 
        !            90:                if (!(fsb -> fsb_flags & FSB_INIT))
        !            91:                    goto bad_dp;
        !            92:                break;
        !            93: 
        !            94:            case EREF_RFSU: 
        !            95:            case EREF_RFPM: 
        !            96:                if (fsb -> fsb_flags & FSB_INIT)
        !            97:                    goto bad_dp;
        !            98:                break;
        !            99: 
        !           100:            default:
        !           101:                if (!magic)
        !           102:                    goto bad_dp;
        !           103:                break;
        !           104:        }
        !           105:        if ((f3 -> error__observer =
        !           106:                        (struct type_FTAM_Entity__Reference *)
        !           107:                                calloc (1, sizeof *f3 -> error__observer))
        !           108:                == NULL)
        !           109:            goto no_mem;
        !           110:        f3 -> error__observer -> parm = dp -> ftd_observer;
        !           111: 
        !           112:        switch (dp -> ftd_source) {
        !           113:            case EREF_NONE: 
        !           114:            case EREF_IFSU: 
        !           115:            case EREF_IFPM: 
        !           116:            case EREF_SERV: 
        !           117:            case EREF_RFPM: 
        !           118:            case EREF_RFSU: 
        !           119:                break;
        !           120: 
        !           121:            default: 
        !           122:                goto bad_dp;
        !           123:        }
        !           124:        if ((f3 -> error__source =
        !           125:                        (struct type_FTAM_Entity__Reference *)
        !           126:                                calloc (1, sizeof *f3 -> error__source))
        !           127:                == NULL)
        !           128:            goto no_mem;
        !           129:        f3 -> error__source -> parm = dp -> ftd_source;
        !           130: 
        !           131:        if (dp -> ftd_delay != DIAG_NODELAY) {
        !           132:            f3 -> optionals |= opt_FTAM_diag_element_suggested__delay;
        !           133:            f3 -> suggested__delay = dp -> ftd_delay;
        !           134:        }
        !           135: 
        !           136:        if (dp -> ftd_cc > FTD_SIZE)
        !           137:            goto bad_dp;
        !           138:        else
        !           139:            if (dp -> ftd_cc > 0
        !           140:                    && (f3 -> further__details = str2qb (dp -> ftd_data,
        !           141:                                                         dp -> ftd_cc, 1))
        !           142:                            == NULL)
        !           143:                goto no_mem;
        !           144: 
        !           145:        fpc = &fpm -> next;
        !           146:     }
        !           147: 
        !           148:     return fpmp;
        !           149: }
        !           150: 
        !           151: /*  */
        !           152: 
        !           153: int    fpm2diag (fsb, fpm, diag, ndiag, fti)
        !           154: register struct ftamblk *fsb;
        !           155: register struct type_FTAM_Diagnostic *fpm;
        !           156: struct FTAMdiagnostic diag[];
        !           157: int   *ndiag;
        !           158: struct FTAMindication *fti;
        !           159: {
        !           160:     register int    i;
        !           161:     register struct FTAMdiagnostic *dp;
        !           162:     register struct diag_element *f3;
        !           163: 
        !           164:     *ndiag = 0;
        !           165: 
        !           166:     dp = diag, i = 0;
        !           167:     for (; fpm; fpm = fpm -> next) {
        !           168:        if (i >= NFDIAG)
        !           169:            return ftamlose (fti, FS_GEN (fsb), 1, NULLCP,
        !           170:                             "too many diagnostics");
        !           171: 
        !           172:        f3 = fpm -> diagnostic;
        !           173:        dp -> ftd_type = f3 -> diagnostic__type;
        !           174:        dp -> ftd_identifier = f3 -> error__identifier;
        !           175:        dp -> ftd_observer = f3 -> error__observer -> parm;
        !           176:        dp -> ftd_source = f3 -> error__source -> parm;
        !           177:        if (f3 -> optionals & opt_FTAM_diag_element_suggested__delay)
        !           178:            dp -> ftd_delay = f3 -> suggested__delay;
        !           179:        else
        !           180:            dp -> ftd_delay = DIAG_NODELAY;
        !           181:        if (f3 -> further__details) {
        !           182:            register char   *cp;
        !           183: 
        !           184:            if ((cp = qb2str (f3 -> further__details)) == NULL)
        !           185:                return ftamlose (fti, FS_GEN (fsb), 1, NULLCP,
        !           186:                                 "out of memory");
        !           187:            (void) strncpy (dp -> ftd_data, cp, sizeof dp -> ftd_data);
        !           188:            dp -> ftd_data[sizeof dp -> ftd_data - 1] = NULL;
        !           189:            dp -> ftd_cc = strlen (dp -> ftd_data);
        !           190:            free (cp);
        !           191:        }
        !           192:        else
        !           193:            dp -> ftd_cc = 0;
        !           194: 
        !           195:        dp++, i++;
        !           196:     }
        !           197: 
        !           198:     *ndiag = i;
        !           199: 
        !           200:     return OK;
        !           201: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.