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

1.1     ! root        1: /* rosapinvoke.c - ROPM: invoke */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/rosap/RCS/rosapinvoke.c,v 7.1 90/07/01 21:06:02 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/rosap/RCS/rosapinvoke.c,v 7.1 90/07/01 21:06:02 mrose Exp $
        !             9:  *
        !            10:  * Based on an TCP-based implementation by George Michaelson of University
        !            11:  * College London.
        !            12:  *
        !            13:  *
        !            14:  * $Log:       rosapinvoke.c,v $
        !            15:  * Revision 7.1  90/07/01  21:06:02  mrose
        !            16:  * pepsy
        !            17:  * 
        !            18:  * Revision 6.0  89/03/18  23:42:26  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-INVOKE.REQUEST */
        !            42: 
        !            43: int    RoInvokeRequest (sd, op, class, args, invokeID, linkedID, priority, roi)
        !            44: int    sd;
        !            45: int    op,
        !            46:        class,
        !            47:        invokeID,
        !            48:        *linkedID,
        !            49:        priority;
        !            50: PE     args;
        !            51: struct RoSAPindication *roi;
        !            52: {
        !            53:     SBV            smask;
        !            54:     int     result;
        !            55:     register struct assocblk   *acb;
        !            56: 
        !            57:     switch (class) {
        !            58:        case ROS_SYNC: 
        !            59:        case ROS_ASYNC: 
        !            60:            break;
        !            61: 
        !            62:        default: 
        !            63:            return rosaplose (roi, ROS_PARAMETER, NULLCP,
        !            64:                    "bad value for class parameter");
        !            65:     }
        !            66:     missingP (roi);
        !            67: 
        !            68:     smask = sigioblock ();
        !            69: 
        !            70:     rosapPsig (acb, sd);
        !            71: 
        !            72:     result = RoInvokeRequestAux (acb, op, class, args, invokeID, linkedID,
        !            73:                priority, roi);
        !            74: 
        !            75:     (void) sigiomask (smask);
        !            76: 
        !            77:     return result;
        !            78: }
        !            79: 
        !            80: /*  */
        !            81: 
        !            82: static int  RoInvokeRequestAux (acb, op, class, args, invokeID, linkedID,
        !            83:                priority, roi)
        !            84: register struct assocblk   *acb;
        !            85: int    op,
        !            86:        class,
        !            87:        invokeID,
        !            88:        *linkedID,
        !            89:        priority;
        !            90: PE     args;
        !            91: struct RoSAPindication *roi;
        !            92: {
        !            93:     PE pe;
        !            94: 
        !            95:     struct type_ROS_ROSEapdus  papdu;
        !            96:     struct type_ROS_ROIVapdu   piv;
        !            97:     struct type_ROS_InvokeIDType pidt;
        !            98:     struct type_ROS_Operation  prop;
        !            99: 
        !           100:     if (!(acb -> acb_flags & ACB_INIT) && (acb -> acb_flags & ACB_ROS))
        !           101:        return rosaplose (roi, ROS_OPERATION, NULLCP, "not initiator");
        !           102:     if (!(acb -> acb_flags & ACB_ACS)) {
        !           103:        missingP (args);
        !           104:        if (linkedID)
        !           105:            return rosaplose (roi, ROS_OPERATION, NULLCP,
        !           106:                        "linked operations not permitted");
        !           107:     }
        !           108:                    
        !           109:     if (acb -> acb_ready
        !           110:            && !(acb -> acb_flags & ACB_TURN)
        !           111:            && (*acb -> acb_ready) (acb, priority, roi) == NOTOK)
        !           112:        return NOTOK;
        !           113:        
        !           114:     if ((acb -> acb_flags & ACB_ACS) == 0) { /* want OPDU */
        !           115:         struct type_ROS_OPDU   opdu;
        !           116:        struct  type_ROS_Invoke s_invoke;
        !           117: 
        !           118:        s_invoke.invokeID = invokeID;
        !           119:        s_invoke.element_ROS_2 = &prop;
        !           120:        prop.parm = op;
        !           121:        s_invoke.argument = args;
        !           122:        opdu.offset = type_ROS_OPDU_1;  /* ROS-Invoke */
        !           123:        opdu.un.choice_ROS_8 = &s_invoke;
        !           124:        if (encode_ROS_OPDU (&pe, 1, 0, NULLCP, &opdu) == NOTOK)
        !           125:            return NOTOK;
        !           126: 
        !           127:     }
        !           128:     else {
        !           129:        if (linkedID) {
        !           130:            piv.optionals = opt_ROS_ROIVapdu_linked__ID;
        !           131:            piv.linked__ID = *linkedID;
        !           132:        } else
        !           133:            piv.optionals = 0;
        !           134: 
        !           135:        piv.invokeID = &pidt;
        !           136:        pidt.parm = invokeID;
        !           137:        piv.operation__value = &prop;
        !           138:        prop.parm = op;
        !           139:        piv.argument = args;
        !           140:        papdu.offset = type_ROS_ROSEapdus_roiv__apdu;
        !           141:        papdu.un.roiv__apdu = &piv;
        !           142: 
        !           143:        if (encode_ROS_ROSEapdus (&pe, 1, 0, NULLCP, &papdu) == NOTOK)
        !           144:            return NOTOK;
        !           145:     }
        !           146: 
        !           147:     if ((*acb -> acb_putosdu) (acb, pe, args, priority, roi) == NOTOK)
        !           148:        return NOTOK;
        !           149: 
        !           150:     return (class == ROS_SYNC
        !           151:            ? (*acb -> acb_rowaitrequest)  (acb, &invokeID, NOTOK, roi)
        !           152:            : OK);
        !           153: }

unix.superglobalmegacorp.com

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