Annotation of 43BSDReno/contrib/isode-beta/ftam/ftamdiag.c, revision 1.1.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.