Annotation of 43BSDReno/contrib/isode-beta/acsap/acsapreleas2.c, revision 1.1

1.1     ! root        1: /* acsapreleas2.c - ACPM: respond to release */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/acsap/RCS/acsapreleas2.c,v 7.1 90/07/01 21:02:04 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/acsap/RCS/acsapreleas2.c,v 7.1 90/07/01 21:02:04 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       acsapreleas2.c,v $
        !            12:  * Revision 7.1  90/07/01  21:02:04  mrose
        !            13:  * pepsy
        !            14:  * 
        !            15:  * Revision 7.0  89/11/23  21:21:55  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 <signal.h>
        !            35: #include "ACS-types.h"
        !            36: #define        ACSE
        !            37: #include "acpkt.h"
        !            38: #include "tailor.h"
        !            39: 
        !            40: /*    A-RELEASE.RESPONSE */
        !            41: 
        !            42: int    AcRelResponse (sd, status, reason, data, ndata, aci)
        !            43: int    sd;
        !            44: int    status,
        !            45:        reason;
        !            46: PE     *data;
        !            47: int    ndata;
        !            48: struct AcSAPindication *aci;
        !            49: {
        !            50:     SBV            smask;
        !            51:     int     code,
        !            52:             result;
        !            53:     register struct assocblk   *acb;
        !            54:     PE     pe;
        !            55:     struct PSAPindication pis;
        !            56:     register struct PSAPabort  *pa = &pis.pi_abort;
        !            57:     register struct type_ACS_RLRE__apdu *pdu;
        !            58: 
        !            59:     switch (status) {
        !            60:        case ACS_ACCEPT: 
        !            61:            code = SC_ACCEPT;
        !            62:            break;
        !            63: 
        !            64:        case ACS_REJECT: 
        !            65:            code = SC_REJECTED;
        !            66:            break;
        !            67: 
        !            68:        default: 
        !            69:            return acsaplose (aci, ACS_PARAMETER, NULLCP,
        !            70:                    "invalid value for status parameter");
        !            71:     }
        !            72:     switch (reason) {
        !            73:        case ACR_NORMAL: 
        !            74:        case ACR_NOTFINISHED: 
        !            75:        case ACR_USERDEFINED: 
        !            76:            break;
        !            77: 
        !            78:        default: 
        !            79:            return acsaplose (aci, ACS_PARAMETER, NULLCP,
        !            80:                    "invalid value for reason parameter");
        !            81:     }
        !            82:     toomuchP (data, ndata, NACDATA, "release");
        !            83:     if (data) {            /* XXX: probably should have a more intensive check... */
        !            84:        register int    i;
        !            85:        register PE    *pep;
        !            86: 
        !            87:        for (pep = data, i = ndata; i > 0; pep++, i--)
        !            88:            if ((*pep) -> pe_context == PE_DFLT_CTX)
        !            89:                return acsaplose (aci, ACS_PARAMETER, NULLCP,
        !            90:                        "default context not allowed for user-data at slot %d",
        !            91:                                  pep - data);
        !            92:     }
        !            93:     missingP (aci);
        !            94: 
        !            95:     smask = sigioblock ();
        !            96: 
        !            97:     acsapFsig (acb, sd);
        !            98: 
        !            99:     pe = NULLPE;
        !           100:     if ((pdu = (struct type_ACS_RLRE__apdu *) calloc (1, sizeof *pdu))
        !           101:            == NULL) {
        !           102:        (void) acsaplose (aci, ACS_CONGEST, NULLCP, "out of memory");
        !           103:        goto out2;
        !           104:     }
        !           105:     pdu -> optionals |= opt_ACS_RLRE__apdu_reason;
        !           106:     pdu -> reason = reason;
        !           107:     if (data
        !           108:            && ndata > 0
        !           109:            && (pdu -> user__information = info2apdu (acb, aci, data, ndata))
        !           110:                    == NULL)
        !           111:        goto out2;
        !           112: 
        !           113:     result = encode_ACS_RLRE__apdu (&pe, 1, 0, NULLCP, pdu);
        !           114: 
        !           115:     free_ACS_RLRE__apdu (pdu);
        !           116:     pdu = NULL;
        !           117: 
        !           118:     if (result == NOTOK) {
        !           119:        (void) acsaplose (aci, ACS_CONGEST, NULLCP, "error encoding PDU: %s",
        !           120:                          PY_pepy);
        !           121:        goto out2;
        !           122:     }
        !           123:     pe -> pe_context = acb -> acb_id;
        !           124: 
        !           125:     PLOGP (acsap_log,ACS_ACSE__apdu, pe, "RLRE-apdu", 0);
        !           126: 
        !           127:     if ((result = PRelResponse (acb -> acb_fd, code, &pe, 1, &pis)) == NOTOK) {
        !           128:        (void) ps2acslose (acb, aci, "PRelResponse", pa);
        !           129:        if (PC_FATAL (pa -> pa_reason))
        !           130:            goto out2;
        !           131:        else
        !           132:            goto out1;
        !           133:     }
        !           134: 
        !           135:     if (status == ACS_ACCEPT)
        !           136:        acb -> acb_fd = NOTOK;
        !           137:     else
        !           138:        acb -> acb_flags &= ~ACB_FINN;
        !           139: 
        !           140:     result = OK;
        !           141: 
        !           142: out2: ;
        !           143:     if (result == NOTOK || status == ACS_ACCEPT)
        !           144:        freeacblk (acb);
        !           145: out1: ;
        !           146:     if (pe)
        !           147:        pe_free (pe);
        !           148:     if (pdu)
        !           149:        free_ACS_RLRE__apdu (pdu);
        !           150: 
        !           151:     (void) sigiomask (smask);
        !           152: 
        !           153:     return result;
        !           154: }

unix.superglobalmegacorp.com

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