Annotation of 43BSDReno/contrib/isode-beta/psap2-lpp/psaplose.c, revision 1.1.1.1

1.1       root        1: /* psaplose.c - PPM: you lose */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/psap2-lpp/RCS/psaplose.c,v 7.1 90/07/01 21:05:27 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/psap2-lpp/RCS/psaplose.c,v 7.1 90/07/01 21:05:27 mrose Exp $
                      9:  *
                     10:  * Contributed by The Wollongong Group, Inc.
                     11:  *
                     12:  *
                     13:  * $Log:       psaplose.c,v $
                     14:  * Revision 7.1  90/07/01  21:05:27  mrose
                     15:  * pepsy
                     16:  * 
                     17:  * Revision 7.0  89/11/23  22:15:55  mrose
                     18:  * Release 6.0
                     19:  * 
                     20:  */
                     21: 
                     22: /*
                     23:  *                               NOTICE
                     24:  *
                     25:  *    Acquisition, use, and distribution of this module and related
                     26:  *    materials are subject to the restrictions of a license agreement.
                     27:  *    Consult the Preface in the User's Manual for the full terms of
                     28:  *    this agreement.
                     29:  *
                     30:  */
                     31: 
                     32: 
                     33: /* LINTLIBRARY */
                     34: 
                     35: #include <stdio.h>
                     36: #include <varargs.h>
                     37: #define        LPP
                     38: #include "PS-types.h"
                     39: #include "ppkt.h"
                     40: #include "tailor.h"
                     41: 
                     42: /*  */
                     43: 
                     44: #ifndef        lint
                     45: int    ppktlose (va_alist)
                     46: va_dcl
                     47: {
                     48:     int            reason,
                     49:            result;
                     50:     PE     pe;
                     51:     register struct psapblk *pb;
                     52:     register struct PSAPindication *pi;
                     53:     register struct PSAPabort *pa;
                     54:     register struct type_PS_Abort__PDU *pdu;
                     55:     struct type_PS_SessionConnectionIdentifier *pref;
                     56:     va_list ap;
                     57: 
                     58:     va_start (ap);
                     59: 
                     60:     pb = va_arg (ap, struct psapblk *);
                     61:     pi = va_arg (ap, struct PSAPindication *);
                     62:     reason = va_arg (ap, int);
                     63:     pref = va_arg (ap, struct type_PS_SessionConnectionIdentifier *);
                     64: 
                     65:     result = _psaplose (pi, reason, ap);
                     66: 
                     67:     va_end (ap);
                     68: 
                     69:     if ((pa = &pi -> pi_abort) -> pa_cc > 0) {
                     70:        SLOG (psap2_log, LLOG_EXCEPTIONS, NULLCP,
                     71:              ("ppktlose [%s] %*.*s", PErrString (pa -> pa_reason),
                     72:               pa -> pa_cc, pa -> pa_cc, pa -> pa_data));
                     73:     }
                     74:     else
                     75:        SLOG (psap2_log, LLOG_EXCEPTIONS, NULLCP,
                     76:              ("ppktlose [%s]", PErrString (pa -> pa_reason)));
                     77: 
                     78:     if (pb -> pb_fd == NOTOK)
                     79:        return result;
                     80: 
                     81:     if (pb -> pb_reliability == LOW_QUALITY) {
                     82:        if (pref == NULLRF && (pref = pb -> pb_reference) == NULLRF)
                     83:            return result;
                     84:     }
                     85:     else
                     86:        pref = NULLRF;
                     87: 
                     88:     switch (reason) {
                     89:        case PC_NOTSPECIFIED:
                     90:        default:
                     91:            reason = int_PS_Abort__reason_reason__not__specified;
                     92:            break;
                     93: 
                     94:        case PC_UNRECOGNIZED: 
                     95:        case PC_UNEXPECTED: 
                     96:        case PC_PPPARAM1:
                     97:            reason = int_PS_Abort__reason_unrecognized__ppdu
                     98:                         + (reason - PC_UNRECOGNIZED);
                     99:            break;
                    100:            
                    101:        case PC_INVALID:
                    102:            reason = int_PS_Abort__reason_invalid__ppdu__parameter;
                    103:            break;
                    104: 
                    105:        case PC_SESSION:
                    106:            reason = int_PS_Abort__reason_reference__mismatch;
                    107:            break;
                    108:     }
                    109: 
                    110:     if ((pdu = (struct type_PS_Abort__PDU *) malloc (sizeof *pdu))
                    111:            && (pdu -> reason = (struct type_PS_Abort__reason *)
                    112:                        malloc (sizeof (struct type_PS_Abort__reason)))) {
                    113:        pdu -> reference = pref;
                    114:        pdu -> user__data = NULLPE;
                    115:        pdu -> reason -> parm = reason;
                    116: 
                    117:        pe = NULLPE;
                    118:        if (encode_PS_Abort__PDU (&pe, 1, 0, NULLCP, pdu) != NOTOK) {
                    119:            PLOGP (psap2_log,PS_PDUs, pe, "Abort-PDU", 0);
                    120: 
                    121:            (void) pe2ps (pb -> pb_stream, pe);
                    122:        }
                    123:        if (pe)
                    124:            pe_free (pe);
                    125: 
                    126:        pdu -> reference = NULL;
                    127:         free_PS_Abort__PDU (pdu);
                    128:     }
                    129: 
                    130:     return result;
                    131: }
                    132: #else
                    133: /* VARARGS6 */
                    134: 
                    135: int    ppktlose (pb, pi, reason, pref, what, fmt)
                    136: register struct psapblk *pb;
                    137: register struct PSAPindication *pi;
                    138: int    reason;
                    139: struct type_PS_SessionConnectionIdentifier *pref;
                    140: char   *what,
                    141:        *fmt;
                    142: {
                    143:     return ppktlose (pb, pi, reason, pref, what, fmt);
                    144: }
                    145: #endif
                    146: 
                    147: /*  */
                    148: 
                    149: #ifndef        lint
                    150: int    psaplose (va_alist)
                    151: va_dcl
                    152: {
                    153:     int     reason,
                    154:            result;
                    155:     struct PSAPindication *pi;
                    156:     va_list ap;
                    157: 
                    158:     va_start (ap);
                    159: 
                    160:     pi = va_arg (ap, struct PSAPindication *);
                    161:     reason = va_arg (ap, int);
                    162: 
                    163:     result = _psaplose (pi, reason, ap);
                    164: 
                    165:     va_end (ap);
                    166: 
                    167:     return result;
                    168: }
                    169: #else
                    170: /* VARARGS4 */
                    171: 
                    172: int    psaplose (pi, reason, what, fmt)
                    173: struct PSAPindication *pi;
                    174: int     reason;
                    175: char   *what,
                    176:        *fmt;
                    177: {
                    178:     return psaplose (pi, reason, what, fmt);
                    179: }
                    180: #endif
                    181: 
                    182: /*  */
                    183: 
                    184: #ifndef        lint
                    185: static int  _psaplose (pi, reason, ap) /* what, fmt, args ... */
                    186: register struct PSAPindication *pi;
                    187: int     reason;
                    188: va_list        ap;
                    189: {
                    190:     register char  *bp;
                    191:     char    buffer[BUFSIZ];
                    192:     register struct PSAPabort *pa;
                    193: 
                    194:     if (pi) {
                    195:        bzero ((char *) pi, sizeof *pi);
                    196:        pi -> pi_type = PI_ABORT;
                    197:        pa = &pi -> pi_abort;
                    198: 
                    199:        asprintf (bp = buffer, ap);
                    200:        bp += strlen (bp);
                    201: 
                    202:        pa -> pa_peer = 0;
                    203:        pa -> pa_reason = reason;
                    204:        pa -> pa_ninfo = 0;
                    205:        copyPSAPdata (buffer, bp - buffer, pa);
                    206:     }
                    207: 
                    208:     return NOTOK;
                    209: }
                    210: #endif

unix.superglobalmegacorp.com

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