Annotation of 43BSDReno/contrib/isode-beta/rosap/rosapresult.c, revision 1.1

1.1     ! root        1: /* rosapresult.c - ROPM: result */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/rosap/RCS/rosapresult.c,v 7.1 90/07/01 21:06:04 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/rosap/RCS/rosapresult.c,v 7.1 90/07/01 21:06:04 mrose Exp $
        !             9:  *
        !            10:  * Based on an TCP-based implementation by George Michaelson of University
        !            11:  * College London.
        !            12:  *
        !            13:  *
        !            14:  * $Log:       rosapresult.c,v $
        !            15:  * Revision 7.1  90/07/01  21:06:04  mrose
        !            16:  * pepsy
        !            17:  * 
        !            18:  * Revision 6.0  89/03/18  23:42:28  mrose
        !            19:  * Release 5.0
        !            20:  * 
        !            21:  */
        !            22: 
        !            23: /*
        !            24:  *                               NOTICE
        !            25:  *
        !            26:  *    Acquisition, use, and distribution of this module and related
        !            27:  *    materials are subject to the restrictions of a license agreement.
        !            28:  *    Consult the Preface in the User's Manual for the full terms of
        !            29:  *    this agreement.
        !            30:  *
        !            31:  */
        !            32: 
        !            33: 
        !            34: /* LINTLIBRARY */
        !            35: 
        !            36: #include <stdio.h>
        !            37: #include <signal.h>
        !            38: #include "ROS-types.h"
        !            39: #include "ropkt.h"
        !            40: 
        !            41: /*    RO-RESULT.REQUEST */
        !            42: 
        !            43: int    RoResultRequest (sd, invokeID, op, result, priority, roi)
        !            44: int    sd;
        !            45: int    invokeID,
        !            46:        op,
        !            47:        priority;
        !            48: PE     result;
        !            49: struct RoSAPindication *roi;
        !            50: {
        !            51:     SBV            smask;
        !            52:     int     status;
        !            53:     register struct assocblk   *acb;
        !            54: 
        !            55:     missingP (roi);
        !            56: 
        !            57:     smask = sigioblock ();
        !            58: 
        !            59:     rosapPsig (acb, sd);
        !            60: 
        !            61:     status = RoResultRequestAux (acb, invokeID, op, result, priority, roi);
        !            62: 
        !            63:     (void) sigiomask (smask);
        !            64: 
        !            65:     return status;
        !            66: }
        !            67: 
        !            68: /*  */
        !            69: 
        !            70: static int  RoResultRequestAux (acb, invokeID, op, result, priority, roi)
        !            71: register struct assocblk   *acb;
        !            72: int    invokeID,
        !            73:        op,
        !            74:        priority;
        !            75: PE     result;
        !            76: struct RoSAPindication *roi;
        !            77: {
        !            78:     register PE pe,
        !            79:                p,
        !            80:                q;
        !            81: 
        !            82:     if ((acb -> acb_flags & ACB_INIT) && (acb -> acb_flags & ACB_ROS))
        !            83:        return rosaplose (roi, ROS_OPERATION, NULLCP, "not responder");
        !            84:     if (!(acb -> acb_flags & ACB_ACS)) {
        !            85:        missingP (result);
        !            86:     }
        !            87: 
        !            88:     if (acb -> acb_ready
        !            89:            && !(acb -> acb_flags & ACB_TURN)
        !            90:            && (*acb -> acb_ready) (acb, priority, roi) == NOTOK)
        !            91:        return NOTOK;
        !            92: 
        !            93: #ifdef notyet
        !            94:     if (!(acb -> acb_flags & ACB_ACS)) { /* want OPDU */
        !            95:        struct type_ROS_OPDU opdu;
        !            96:        struct type_ROS_ReturnResult rrs;
        !            97:        struct type_ROS_InvokeIDType idtyp;
        !            98: 
        !            99:        opdu.offset = type_ROS_OPDU_2; 
        !           100:        opdu.un.choice_ROS_9 = &rrs;
        !           101:        rrs.invokeID = &idtyp;
        !           102:        rrs.result = result;
        !           103:        idtyp.parm = invokeID;
        !           104: 
        !           105:         if (encode_ROS_OPDU(&pe, 1, 0, NULL, &opdu) == NOTOK) {
        !           106:            abort();
        !           107:            goto fail;
        !           108:        }
        !           109:     } else {
        !           110:        struct type_ROS_ROSEapdus apdu;
        !           111:        struct type_ROS_RORSapdu ras;
        !           112:        struct type_ROS_InvokeIDType idtyp;
        !           113:        struct element_ROS_1 el1;
        !           114:        struct type_ROS_Operation ops;
        !           115: 
        !           116:        apdu.offset = type_ROS_ROSEapdus_rors__apdu;
        !           117:        apdu.un.rors__apdu = &ras;
        !           118:        idtyp.parm = invokeID;
        !           119:        ras.invokeID = &idtyp;
        !           120:        if (result) {
        !           121:            ras.element_ROS_0 = &el1;
        !           122:            el1.operation__value = &ops;
        !           123:            ops.parm = op;
        !           124:            el1.result = result;
        !           125:        } else
        !           126:            ras.element_ROS_0 = (struct element_ROS_1 *)0;
        !           127: 
        !           128:        if (encode_ROS_ROSEapdus(&pe, 1, 0, NULL, &apdu) == NOTOK) {
        !           129:        fail:
        !           130:            if (pe) {
        !           131:                (void) pe_extract (pe, result);
        !           132:                pe_free (pe);
        !           133:            }
        !           134:            freeacblk (acb);
        !           135:            return rosaplose (roi, ROS_CONGEST, NULLCP, "out of memory");
        !           136:        }
        !           137:     }
        !           138: 
        !           139: #endif
        !           140: 
        !           141: /* begin Result APDU */
        !           142:     if ((pe = pe_alloc (PE_CLASS_CONT, PE_FORM_CONS, APDU_RESULT)) == NULLPE
        !           143:            || ((acb -> acb_flags & ACB_ACS)
        !           144:                    ? (p = pe, 0)
        !           145:                    : set_add (pe, p = pe_alloc (PE_CLASS_UNIV, PE_FORM_CONS,
        !           146:                        PE_CONS_SEQ)) == NOTOK)
        !           147:            || seq_add (p, int2prim (invokeID), -1) == NOTOK
        !           148:            || ((acb -> acb_flags & ACB_ACS)
        !           149:                    ? (result
        !           150:                           && (seq_add (p, q = pe_alloc (PE_CLASS_UNIV,
        !           151:                                                         PE_FORM_CONS,
        !           152:                                                         PE_CONS_SEQ),
        !           153:                                        -1) == NOTOK
        !           154:                                   || seq_add (q, int2prim (op), -1) == NOTOK
        !           155:                                   || seq_add (q, result, -1) == NOTOK))
        !           156:                    : seq_add (p, result, -1) == NOTOK)) {
        !           157:        if (pe) {
        !           158:            (void) pe_extract (pe, result);
        !           159:            pe_free (pe);
        !           160:        }
        !           161:        freeacblk (acb);
        !           162:        return rosaplose (roi, ROS_CONGEST, NULLCP, "out of memory");
        !           163:     }
        !           164: /* end Result APDU */
        !           165: 
        !           166:     return (*acb -> acb_putosdu) (acb, pe, result, priority, roi);
        !           167: }

unix.superglobalmegacorp.com

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