Annotation of 43BSDReno/contrib/isode-beta/ronot/ronotbind1.c, revision 1.1.1.1

1.1       root        1: /* ronotbind1.c - RONOT: ABSTRACT-BIND mapping onto A-ASSOCIATE.REQUEST */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/ronot/RCS/ronotbind1.c,v 7.1 90/07/26 14:33:55 mrose Exp $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/ronot/RCS/ronotbind1.c,v 7.1 90/07/26 14:33:55 mrose Exp $
                      9:  *
                     10:  *
                     11:  * $Log:       ronotbind1.c,v $
                     12:  * Revision 7.1  90/07/26  14:33:55  mrose
                     13:  * template
                     14:  * 
                     15:  */
                     16: 
                     17: /*
                     18:  *                               NOTICE
                     19:  *
                     20:  *    Acquisition, use, and distribution of this module and related
                     21:  *    materials are subject to the restrictions of a license agreement.
                     22:  *    Consult the Preface in the User's Manual for the full terms of
                     23:  *    this agreement.
                     24:  *
                     25:  */
                     26: 
                     27: 
                     28: /* LINTLIBRARY */
                     29: 
                     30: #include "tailor.h"
                     31: #include "logger.h"
                     32: #include "ronot.h"
                     33: #include "RONOT-types.h"
                     34: 
                     35: 
                     36: /*    RO-BIND.REQUEST */
                     37: 
                     38: /* ARGSUSED */
                     39: 
                     40: int      RoAsynBindRequest (context, callingtitle, calledtitle,
                     41:                callingaddr, calledaddr, ctxlist, defctxname,
                     42:                prequirements, srequirements, isn, settings, ref,
                     43:                bindargpe, qos, acc, rni, async)
                     44: OID                      context;
                     45: AEI                      callingtitle;
                     46: AEI                      calledtitle;
                     47: struct PSAPaddr                * callingaddr;
                     48: struct PSAPaddr                * calledaddr;
                     49: struct PSAPctxlist     * ctxlist;
                     50: OID                      defctxname;
                     51: int                      prequirements;
                     52: int                      srequirements;
                     53: long                     isn;
                     54: int                      settings;
                     55: struct SSAPref         * ref;
                     56: PE                       bindargpe;
                     57: struct QOStype         * qos;
                     58: struct AcSAPconnect    * acc;
                     59: struct RoNOTindication * rni;
                     60: int                      async;
                     61: {
                     62:        int                       result;
                     63:        PE                        user_data;
                     64:        PE                      * user_data_p = &(user_data);
                     65:        int                       ndata;
                     66:        struct AcSAPindication    aci_s;
                     67:        struct AcSAPindication  * aci = &(aci_s);
                     68:        struct AcSAPabort       * aca = &(aci->aci_abort);
                     69: 
                     70: 
                     71:        /* Wrap the user data with the remote operations BIND ARGUMENT tag */
                     72: 
                     73:        if (bindargpe != NULLPE)
                     74:        {
                     75:                if (encode_RONOT_BindArgumentValue (user_data_p, 1, 0, NULLCP, bindargpe) == NOTOK)
                     76:                { 
                     77:                        LLOG (rosap_log, LLOG_NOTICE, ("RO-BIND.REQUEST : encode_RONOT_BindArgumentValue failed"));
                     78:                        return (ronotlose (rni, RBI_ENC_BIND_ARG, NULLCP, NULLCP));
                     79:                }
                     80: 
                     81:                /*
                     82:                * Set the context of the user data presentation element
                     83:                * from the context of the bind argument presentation element
                     84:                */
                     85:                (*user_data_p)->pe_context = bindargpe->pe_context;
                     86:                ndata = 1;
                     87:        }
                     88:        else
                     89:        {
                     90:                (*user_data_p) = NULLPE;
                     91:                ndata = 0;
                     92:        }
                     93: 
                     94:        result = AcAsynAssocRequest (context, callingtitle, calledtitle,
                     95:            callingaddr, calledaddr, ctxlist, defctxname,
                     96:            prequirements, srequirements, isn, settings, ref,
                     97:            user_data_p, ndata, qos, acc, aci, async);
                     98: 
                     99:        if ((*user_data_p) != NULLPE)
                    100:        {
                    101:                pe_free ((*user_data_p));
                    102:        }
                    103: 
                    104:        if (result == NOTOK)
                    105:        {
                    106:                LLOG (rosap_log, LLOG_NOTICE, ("RO-BIND.REQUEST : RoAsynBindRequest failed"));
                    107:                /* Have an AcSAPindication, need to return RoNOTindication */
                    108:                (void) acs2ronotlose (rni, "RO-BIND.REQUEST", aca);
                    109:                ACAFREE (aca);
                    110:                return (NOTOK);
                    111:        }
                    112:        else
                    113:        {
                    114:                struct RoSAPindication    roi_s;
                    115: 
                    116:                if (RoSetService (acc->acc_sd, RoPService, &(roi_s)) == NOTOK)
                    117:                {
                    118:                        LLOG (rosap_log, LLOG_NOTICE, ("RO-BIND.REQUEST : RoSetService failed"));
                    119:                        return (ronotlose (rni, RBI_SET_ROSE_PRES, NULLCP, NULLCP));
                    120:                }
                    121:        }
                    122: 
                    123:        if (((!async) && (result == OK)) || (async && (result == DONE)))
                    124:        {
                    125:                if (ParseRoBindResponse (acc, rni) != OK)
                    126:                {
                    127:                        LLOG (rosap_log, LLOG_NOTICE, ("RO-BIND.REQUEST : ParseRoBindResponse failed"));
                    128:                        ACCFREE (acc);
                    129:                        return (NOTOK);
                    130:                }
                    131:        }
                    132: 
                    133:        return (result);
                    134: }
                    135: 
                    136: /*    RO-BIND.RETRY */
                    137: 
                    138: /* ARGSUSED */
                    139: 
                    140: int      RoAsynBindRetry (ad, do_next_nsap, acc, rni)
                    141: int                      ad;
                    142: int                      do_next_nsap;
                    143: struct AcSAPconnect    * acc;
                    144: struct RoNOTindication * rni;
                    145: {
                    146:        int                       result;
                    147:        struct AcSAPindication    aci_s;
                    148:        struct AcSAPindication  * aci = &aci_s;
                    149:        struct AcSAPabort       * aca = &(aci->aci_abort);
                    150: 
                    151:        if (do_next_nsap)
                    152:        {
                    153:                result = AcAsynNextRequest (ad, acc, aci);
                    154:        }
                    155:        else
                    156:        {
                    157:                result = AcAsynRetryRequest (ad, acc, aci);
                    158:        }
                    159: 
                    160:        if (result == NOTOK)
                    161:        {
                    162:                LLOG (rosap_log, LLOG_NOTICE, ("RO-BIND.RETRY : AcAsynRetryRequest failed"));
                    163:                (void) acs2ronotlose (rni, "RO-BIND.RETRY", aca);
                    164:                ACAFREE (aca);
                    165:                return (NOTOK);
                    166:        }
                    167: 
                    168:        if (result == DONE)
                    169:        {
                    170:                if (ParseRoBindResponse (acc, rni) != OK)
                    171:                {
                    172:                        LLOG (rosap_log, LLOG_NOTICE, ("RO-BIND.RETRY : ParseRoBindResponse failed"));
                    173:                        ACCFREE (acc);
                    174:                        return (NOTOK);
                    175:                }
                    176:        }
                    177: 
                    178:        return (result);
                    179: }
                    180: 
                    181: int      ParseRoBindResponse (acc, rni)
                    182: struct AcSAPconnect *acc;
                    183: struct RoNOTindication * rni;
                    184: {
                    185:        PE        pe;
                    186: 
                    187:        if (acc->acc_ninfo == 0)
                    188:                return (OK);
                    189: 
                    190:        if (acc->acc_ninfo != 1)
                    191:                return (ronotlose (rni, RBI_DEC_NINFO, NULLCP, NULLCP));
                    192: 
                    193:        if (acc->acc_info[0] == NULLPE)
                    194:                return (ronotlose (rni, RBI_DEC_NINFO, NULLCP, NULLCP));
                    195: 
                    196:        pe = acc->acc_info[0];
                    197:        acc->acc_info[0] = NULLPE;
                    198:        if (acc->acc_result == ACS_ACCEPT)
                    199:        {
                    200:                if (decode_RONOT_BindResultValue (pe, 1, NULLIP, NULLVP, &acc->acc_info[0]) != OK)
                    201:                {
                    202:                        /* ADT: Should end association here !?! */
                    203:                        LLOG (rosap_log, LLOG_EXCEPTIONS, ("ParseRoBindResponse: decode_RONOT_BindResultValue failed"));
                    204:                        acc->acc_ninfo = 0;
                    205:                        pe_free (pe);
                    206:                        return (ronotlose (rni, RBI_DEC_BIND_RES, NULLCP, NULLCP));
                    207:                }
                    208:        }
                    209:        else
                    210:        {
                    211:                if (decode_RONOT_BindErrorValue (pe, 1, NULLIP, NULLVP, &acc->acc_info[0]) != OK)
                    212:                {
                    213:                        LLOG (rosap_log, LLOG_EXCEPTIONS, ("ParseRoBindResponse: decode_RONOT_BindErrorValue failed"));
                    214:                        acc->acc_ninfo = 0;
                    215:                        pe_free (pe);
                    216:                        return (ronotlose (rni, RBI_DEC_BIND_ERR, NULLCP, NULLCP));
                    217:                }
                    218:        }
                    219:        pe_free (pe);
                    220: 
                    221:        return (OK);
                    222: }
                    223: 

unix.superglobalmegacorp.com

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