Annotation of 43BSDReno/contrib/isode-beta/vt/actions1.c, revision 1.1.1.1

1.1       root        1: /* actions1.c - VTPM: FSM sector 1 actions */
                      2: 
                      3: #ifndef        lint
                      4: static char *rcsid = "$Header: /f/osi/vt/RCS/actions1.c,v 7.0 89/11/23 22:31:26 mrose Rel $";
                      5: #endif
                      6: 
                      7: /* 
                      8:  * $Header: /f/osi/vt/RCS/actions1.c,v 7.0 89/11/23 22:31:26 mrose Rel $
                      9:  *
                     10:  *
                     11:  * $Log:       actions1.c,v $
                     12:  * Revision 7.0  89/11/23  22:31:26  mrose
                     13:  * Release 6.0
                     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: #include "vtpm.h"
                     29: #include "sector1.h"
                     30: 
                     31: /************************************************************************/
                     32: /*     This file contains the functions that are executed when the     */
                     33: /*     VT Protocol machine is in a Sector 1 state and a protocol       */
                     34: /*     event occurs.  The state transition matrix is specified in      */
                     35: /*     Table 32 of ISO 9041 (July 1987 version).  The actions which    */
                     36: /*     this collection of functions perform are specified in Table 33  */
                     37: /*     of ISO 9041.                                                    */
                     38: /************************************************************************/
                     39: 
                     40: extern int sd;         /*Global Session Descriptor (ISODE) */
                     41: 
                     42: #define        invalid_result(str,pe) \
                     43:        adios (NULLCP, "%s: invalid result (%s)", (str), \
                     44:               pe_error ((p) -> pe_errno))
                     45: 
                     46: int
                     47: a1_0(pe)       /*NDQ-ntr in states 50B or 51Q (Release awaiting peer)*/
                     48:                /*Also RTQ in state 51T (Release awaiting peer)*/
                     49: PE pe;
                     50: {
                     51:        /*If quarantined data delivery were supported, we would do:
                     52:        /*      ++vnt;
                     53:        /*      enque(pe);
                     54:        /*For now, only supporting simple or no delivery control, so give pe
                     55:        /*to application here.
                     56:        */
                     57: 
                     58:        vdatind(SEQUENCED,pe);          /*Deliver the NDQ to application*/
                     59:        return(OK);
                     60: }
                     61: 
                     62: 
                     63: int    
                     64: a1_1(pe)               /*NDQ-tr in states 50B or 51Q (Release Awaiting Peer)*/
                     65: PE pe;
                     66: {
                     67:        /* Same comment as in a1_0 above */
                     68:        vdatind(SEQUENCED,pe);          /*Deliver the NDQ to application*/
                     69:        vnt = 0;
                     70:        return(OK);
                     71: }
                     72: 
                     73: 
                     74: int
                     75: a1_2(pe)               /*VASSreq from user in state 01 (No Association)*/
                     76: PE pe;
                     77: {
                     78:        dr_pm_st = DEFINED;     /*Draft-VTE param. status = Defined
                     79:                                /*(SetVTPmS(P) in 9041) */
                     80:        /*Set draft-VTE parameter values per profile (SetVTPmV(P) in 9041)*/
                     81: 
                     82:        asq(pe);                /*Send the ASQ PDU*/
                     83: 
                     84:        vsmd = 0;               /*Very TEMPORARY -- A-Mode only
                     85:                                  Should be done in VT-user or application call
                     86:                                */
                     87:        if(vsmd) state = S1_02S;
                     88:        else state = S1_02B;
                     89:        return(OK);
                     90: }
                     91: 
                     92: 
                     93: int
                     94: a1_3(pe)       /*VASSrsp from user in state 03B (Associate -- Awaiting user)*/
                     95: PE pe;
                     96: {
                     97:        PE p;
                     98:        vrsl = -1;
                     99:        for(p = first_member(pe); p; p = next_member(pe,p))
                    100:                /*Step through elements in sequence*/
                    101:        {
                    102:                if(PE_ID(p->pe_class,p->pe_id) == PE_ID(PE_CLASS_CONT,2) )
                    103:                        /*If the result element*/
                    104:                {
                    105:                        if( (vrsl = prim2num(p)) == NOTOK)
                    106:                            invalid_result ("a1_3", p);
                    107:                        break;
                    108:                }
                    109:        }
                    110:        if(vrsl < 0)    /*If no result field*/
                    111:                adios(NULLCP, "a1_3: no result field");
                    112:        if(vrsl == FAILURE) 
                    113:        {
                    114:                clear_vte();
                    115:                (void) asr(pe,FAILURE);
                    116:        }
                    117:        else
                    118:        {
                    119:                /*Set draft-VTE parameters according to list in primitive
                    120:                /* (SetVTPmV(L) in 9041)
                    121:                /*Set status of draft-VTE parameters above to defined
                    122:                /* (SetVTPmSDe(L)
                    123:                /*Set current VTE from draft VTE (SetCuVTE) */
                    124: 
                    125:                vena = TRUE;    /*Current VTE agreed to*/
                    126:                waca = TRUE;
                    127:                (void) asr(pe,SUCCESS);
                    128:                if(vrsl == SUCCESS)
                    129:                {
                    130:                        sector = 5;
                    131:                        state = S5_400B;
                    132:                }
                    133:                else state = S1_10B;
                    134:        }
                    135:        return(OK);
                    136: }
                    137: 
                    138: 
                    139: int
                    140: a1_4(pe)       /*VASSrsp from user in state 03S (Associate -- Awaiting user)*/
                    141: PE pe;
                    142: {
                    143:        PE p;
                    144:        vrsl = -1;
                    145:        for(p = first_member(pe); p; p = next_member(pe,p))
                    146:                /*Step through elements in sequence*/
                    147:        {
                    148:                if(PE_ID(p->pe_class,p->pe_id) == PE_ID(PE_CLASS_CONT,2) )
                    149:                        /*If the result element*/
                    150:                {
                    151:                        if( (vrsl = prim2num(p)) == NOTOK)
                    152:                            invalid_result ("a1_4", p);
                    153:                        break;
                    154:                }
                    155:        }
                    156:        if(vrsl < 0)    /*If no result field*/
                    157:                adios(NULLCP,"a1_4: no result field");
                    158:        if(vrsl == FAILURE) 
                    159:        {
                    160:                clear_vte();    /*Discard VTE (DisVTE)*/
                    161:                (void) asr(pe,FAILURE); /*Send the ASR to peer*/
                    162:        }
                    163:        else
                    164:        {
                    165:                /*Set draft-VTE parameters according to list in primitive
                    166:                /* (SetVTPmV(L) in 9041)
                    167:                /*Set status of draft-VTE parameters above to defined
                    168:                /* (SetVTPmSDe(L)
                    169:                /*Set current VTE from draft VTE (SetCuVTE) */
                    170: 
                    171:                vena = TRUE;    /*Current VTE agreed to*/
                    172:                (void) asr(pe,SUCCESS);
                    173:                if(vrsl == SUCCESS)
                    174:                {
                    175:                        sector = 5;
                    176:                        if(vtok)state = S5_40T;
                    177:                        else state = S5_40N;
                    178:                }
                    179:                else 
                    180:                {
                    181:                        if(vtok) state = S1_10T;
                    182:                        else state = S1_10N;
                    183:                }
                    184:        }
                    185:        return(OK);
                    186: }
                    187: 
                    188: 
                    189: /* ARGSUSED */
                    190: int
                    191: a1_5(pe)               /*RTQ (Token Request) in state 10B
                    192:                          (Environment not agreed)*/
                    193: PE pe;
                    194: {
                    195:        give_token();   /*Need a call to lower layer in ISODE to do this*/
                    196:        return(OK);
                    197: }
                    198: 
                    199: 
                    200: /* ARGSUSED */
                    201: int
                    202: a1_6(pe)       /*VGVTreq from user in 10T*/
                    203: PE pe;
                    204: {
                    205:        give_token();   /*Need a call to lower layer in ISODE to do this*/
                    206:        state = S1_10N;
                    207:        return(OK);
                    208: }
                    209: 
                    210: 
                    211: /* ARGSUSED */
                    212: int
                    213: a1_7(pe)       /*VRELreq from user in state 10B (Env. not agreed)*/
                    214:                /*GTQ in 50B*/
                    215: PE pe;
                    216: {
                    217:        if(vtok)
                    218:        {
                    219:                vt_disconnect();        /*May be only TEMP*/
                    220:                state = S1_51Q;
                    221:        }
                    222:        else
                    223:        {
                    224:                request_token();
                    225:                        /*Need call to ISODE to request token*/
                    226:                state = S1_50B;
                    227: 
                    228: /*Probably need to release the NULL PE for VRELreq that got us here*/
                    229: 
                    230:        }
                    231:        return(OK);
                    232: }
                    233: 
                    234: 
                    235: /* ARGSUSED */
                    236: int
                    237: a1_8(pe)       /*VRELreq in 10T*/
                    238: PE pe;
                    239: {
                    240:        vt_disconnect();        /*May be only TEMP--check function*/
                    241:        state = S1_51T;
                    242: 
                    243: /*Release NULL PE from VT USER*/
                    244: 
                    245:        return(OK);
                    246: }
                    247: 
                    248: int
                    249: a1_9(pe)       /*VRELrsp in 51R & 51N (Release -- Awaiting User)*/
                    250: PE pe;
                    251: {
                    252: 
                    253: 
                    254: /*     vrsl = -1;
                    255: /*     for(p = first_member(pe); p; p = next_member(pe,p) )
                    256: /*                     /*Get Result parameter*/
                    257: /*     {
                    258: /*             if(PE_ID(p->pe_class,p->pe_id) == PE_ID(PE_CLASS_CONT,0) )
                    259: /*             {
                    260: /*                     if( (vrsl = prim2num(p)) == NOTOK)
                    261: /*                         invalid_result ("a1_9", p);
                    262: /*                     break;
                    263: /*             }
                    264: /*     }
                    265: /*     if(vrsl < 0)
                    266: /*             adios(NULLCP,"a1_9: no result field");
                    267: /*     
                    268: /*     we should look in the pdu and see what the result is, but
                    269: /*     since we know our vt-user is an agreeable fellow, we can
                    270: /*     assume success
                    271: */
                    272: 
                    273:        vrsl = SUCCESS;
                    274:        if(vrsl == SUCCESS)
                    275:        {
                    276:                if(vns > 0)     /*If data left to send*/
                    277:                {
                    278:                        advise(LLOG_NOTICE,NULLCP, "Sending remaining data (a1_9() )");
                    279:                        send_all(); /*Send remaining data (NDQseq(Vns)-ntr)*/
                    280:                        vns = 0;
                    281:                }
                    282:                send_rlr(pe);   /*Send the RLR which User built*/
                    283:                clear_vte();    /*Erase the Environment*/
                    284:                state = S1_01;
                    285: /*             system("reset");        */
                    286:                finalbye ();
                    287:                advise(LLOG_NOTICE,NULLCP,"association released by terminal service");
                    288:                (void)fflush (stdout);
                    289:                exit(0);
                    290:        }
                    291:        else    /*Result was failure*/
                    292:        {
                    293:                send_rlr(pe);   /*Send the RLR*/
                    294:                if(vena)        /*If agreement on VTE*/
                    295:                {
                    296:                        sector = 5;
                    297:                        if(vsmd) state = S5_40N;        /*If S-Mode*/
                    298:                        else state = S5_400B;
                    299:                }
                    300:                else
                    301:                {
                    302:                        if(vsmd) state = S1_10N;
                    303:                        else state = S1_10B;
                    304:                }
                    305:        }
                    306:        return(OK);
                    307: }
                    308: 
                    309: 
                    310: /* ARGSUSED */
                    311: int
                    312: a1_10(pe)      /*VRQTreq(request token) n state 10N*/
                    313: PE pe;
                    314: {
                    315:        request_token();        /*TEMP -- Need an ISODE call to really do this
                    316:                                  since there is no VTP PDU*/
                    317: 
                    318: /*Probably need to free the NullPE that triggered this*/
                    319: 
                    320:        state = S1_10N;         /*Should be here already.  Do this to follow
                    321:                                  the spec literally*/
                    322:        return(OK);
                    323: }
                    324: 
                    325: 
                    326: /* ARGSUSED */
                    327: int
                    328: a1_11(pe)      /*VSNEGreq (User Start Negotiation)*/
                    329: PE pe;
                    330: {
                    331: 
                    332: /*MIN not implemented*/
                    333: /*Probably need to send back a negative Acknowledgement*/
                    334: 
                    335:        return(OK);
                    336: }
                    337: 
                    338: 
                    339: /* ARGSUSED */
                    340: int
                    341: a1_12(pe)      /*VSNEGreq*/
                    342: PE pe;
                    343: {
                    344: 
                    345: /*MIN not implemented*/
                    346: /*Probably need to send back a Negative Acknowledgement*/
                    347: 
                    348:        return(OK);
                    349: }
                    350: 
                    351: 
                    352: /* ARGSUSED */
                    353: int
                    354: a1_13(pe)      /*VSWPreq (User Switch profile request)*/
                    355: PE pe;
                    356: {
                    357: 
                    358:        /*Switch Profile not implemented*/
                    359:        /*Should probably send back a negative acknowledgement*/
                    360: 
                    361:        return(OK);
                    362: }
                    363: 
                    364: 
                    365: /* ARGSUSED */
                    366: int
                    367: a1_14(pe)      /*VSWPreq*/
                    368: PE pe;
                    369: {
                    370: 
                    371:        /*Switch Profile not implented*/
                    372:        /*Should Probably send back a negative acknowledgement*/
                    373: 
                    374:        return(OK);
                    375: }
                    376: 
                    377: 
                    378: int
                    379: a1_15(pe)              /*ASR in state 2B (Assoc. awaiting target) */
                    380: PE pe;
                    381: {
                    382:        PE p;
                    383: 
                    384:        vrsl = -1;
                    385:        for(p = first_member(pe); p; p = next_member(pe,p) )
                    386:        {
                    387:                if(PE_ID(p->pe_class,p->pe_id) == PE_ID(PE_CLASS_CONT,2) )
                    388:                {
                    389:                        if( (vrsl = prim2num(p)) == NOTOK)
                    390:                            invalid_result ("a1_15", p);
                    391:                        break;
                    392:                }
                    393:        }
                    394:        if(vrsl < 0)
                    395:                adios(NULLCP,"a1_15: no result field");
                    396:        if(vrsl == FAILURE)
                    397:        {
                    398:                clear_vte();
                    399:                state = S1_01;
                    400:                return(FAILURE);        /*Notify user of ASR (VASScnf)*/
                    401:        }
                    402:        else
                    403:        {
                    404: 
                    405:        /*Set draft-VTE param. according to list in primitive or protocol
                    406:        /*element (SetVTPmV(L)).
                    407:        /*Set status of draft-VTE params. listed in primitive or protocol
                    408:        /*element to defined (SetVTPmSDe(L))
                    409:        /*Set current-VTE from draft-VTE (SetCuVTE) */
                    410: 
                    411:                vena = 1;
                    412:                waci = 1;
                    413:                if(vrsl == SUCCESS)
                    414:                {
                    415:                        sector = 5;
                    416:                        state = S5_400B;
                    417:                }
                    418:                else state = S1_10B;
                    419:        }
                    420:        return(SUCCESS);        /*Notify user of ASR (VASScnf)*/
                    421: }
                    422: 
                    423: int
                    424: a1_16(pe)              /*ASR in state 2S (Assoc. awaiting target) */
                    425: PE pe;
                    426: {
                    427:        PE p;
                    428: 
                    429:        vrsl = -1;
                    430:        for(p = first_member(pe); p; p = next_member(pe,p) )
                    431:        {
                    432:                if(PE_ID(p->pe_class,p->pe_id) == PE_ID(PE_CLASS_CONT,2) )
                    433:                {
                    434:                        if( (vrsl = prim2num(p)) == NOTOK)
                    435:                            invalid_result ("a1_16", p);
                    436:                        break;
                    437:                }
                    438:        }
                    439:        if(vrsl < 0)
                    440:                adios(NULLCP,"a1_16: no result field");
                    441:        if(vrsl == FAILURE)
                    442:        {
                    443:                clear_vte();
                    444:                state = S1_01;
                    445:                return(FAILURE);        /*Notify user of ASR (VASScnf)*/
                    446:        }
                    447:        else
                    448:        {
                    449: 
                    450:        /*Set draft-VTE param. according to list in primitive or protocol
                    451:        /*element (SetVTPmV(L)).
                    452:        /*Set status of draft-VTE params. listed in primitive or protocol
                    453:        /*element to defined (SetVTPmSDe(L))
                    454:        /*Set current-VTE from draft-VTE (SetCuVTE) */
                    455: 
                    456:                vena = 1;
                    457:                if(vrsl == SUCCESS)
                    458:                {
                    459:                        sector = 5;
                    460:                        if(vtok) state = S5_40T;
                    461:                        else state = S5_40N;
                    462:                }
                    463:                else 
                    464:                {
                    465:                        if(vtok) state = S1_10T;
                    466:                        else state = S1_10N;
                    467:                }
                    468:        }
                    469:        return(SUCCESS);        /*Notify user of ASR (VASScnf) */
                    470: }
                    471: 
                    472: 
                    473: int
                    474: a1_17(pe)              /*ASQ in state 01 (No Association)*/
                    475: PE pe;
                    476: {
                    477: 
                    478:        int result;
                    479: 
                    480:        result = read_asq(pe);  /*Unpack ASQ*/
                    481:        if(result == PROFILE_NG)
                    482:        {
                    483:                (void)send_bad_asr(PROFILE_NG); /*Send Failure ASR with reason*/
                    484:                return(NOTOK);
                    485:        }
                    486:        if(result == 0)
                    487:        {
                    488:                (void)send_bad_asr(0);  /*Send failure ASR w/ no reason*/
                    489:                return(NOTOK);
                    490:        }
                    491: 
                    492:        /*SetVTPmS(P)*/
                    493:        /*SetVTPmV(P)*/
                    494:        dr_pm_st = DEFINED;
                    495:        vsmd = 0;
                    496:        vtok = 1;                       /*For Telnet & transparent profiles*/
                    497:        if(vsmd) state = S1_03S;        /*If S-Mode*/
                    498:        else state = S1_03B;
                    499:        result = vassind(pe);   /*doesn't really use pe but for consistency
                    500:                                  with version 1*/
                    501:        return(result);
                    502: }
                    503: 
                    504: 
                    505: int
                    506: a1_18(pe)      /*UDQ (uncontrolled data) in 51T (Release Awaiting Peer)*/
                    507: PE pe;
                    508: {
                    509:        vdatind(SEQUENCED,pe);  /*Want to do VDATind-h but this is all that's
                    510:                                  now available*/
                    511:        return(OK);
                    512: }
                    513: 
                    514:        
                    515: /* ARGSUSED */
                    516: int
                    517: a1_19(pe)      /*GTQ in 10N or VRTQreq in 10T*/ 
                    518: PE pe;
                    519: {
                    520:        vtok = TRUE;
                    521:        vgvt_ind();     /*VGVTind -- Tell user we have token (as if he cares)*/
                    522:        state = S1_10T;;
                    523:        return(OK);
                    524: }
                    525: 
                    526:        
                    527: int
                    528: a1_20(pe)      /*RLR (Release Response) in 51Q or 51T (Release Awaiting Peer)*/
                    529: PE pe;
                    530: {
                    531: 
                    532:        PE p;
                    533: 
                    534:        vrsl = -1;
                    535:        for(p = first_member(pe); p; p = next_member(pe,p) )
                    536:        {
                    537:                if(PE_ID(p->pe_class,p->pe_id) == PE_ID(PE_CLASS_CONT,0) )
                    538:                        /*If result element*/
                    539:                {
                    540:                        if( (vrsl = prim2num(p)) == NOTOK)
                    541:                            invalid_result ("a1_20", p);
                    542:                        break;
                    543:                }
                    544:        }
                    545:        if(vrsl < 0)    /*if no result field*/
                    546:                adios(NULLCP,"a1_20: no result field");
                    547:        if(vrsl == SUCCESS)
                    548:        {
                    549:                /*VRELcnf -- Confirm the release to user -- for now, use the
                    550:                  original mechanism (closing TELNET) -- should be changed
                    551:                  especially for forms mode*/
                    552: 
                    553:                vrelcnf();
                    554:                if(vnt > 0)
                    555:                        /*Should never happen until Quarantined Delivery
                    556:                          supported*/
                    557:                {
                    558:                        /*VDATind-n(Vnt)*/
                    559:                        vnt = 0;
                    560:                }
                    561:                clear_vte();
                    562:                state = S1_01;
                    563:        }
                    564:        else    /*Release Failed*/
                    565:        {
                    566:                if(vena)
                    567:                {
                    568:                        sector = 5;
                    569:                        if(vsmd) state = S5_40T;
                    570:                        else state = S5_400B;
                    571:                }
                    572:                else
                    573:                {
                    574:                        if(vsmd) state = S1_10T;
                    575:                        else state = S1_10B;
                    576:                }
                    577:        }
                    578:        return(OK);
                    579: }
                    580: 
                    581:                        
                    582: int
                    583: a1_21(pe)      /*DLQ (Deliver Request) in 50B or 51Q (Release Awaiting Peer)*/
                    584: PE pe;
                    585: {
                    586:        if( (vra = prim2flag(pe)) == NOTOK)
                    587:                adios(NULLCP,"a1_21: incorrect DLQ");
                    588:        if(vra)
                    589:        {
                    590:                vrsl = FAILURE;
                    591:                vrea = COLL_DET;
                    592:                /*VRELcnf required in spec but there's really nothing to tell
                    593:                  the user*/
                    594:        }
                    595:        if(vnt > 0) /*Should not happen unless Quarantine Delivery supported*/
                    596:        {
                    597:                /*VDATind-n(Vnt)*/
                    598:                vnt = 0;
                    599:        }
                    600:        vdelind(pe,vra);        /*Also irrelevant without Quarantine*/
                    601:        if(vra)
                    602:        {
                    603:                sector = 5;
                    604:                state = S5_402B;
                    605:        }
                    606:        return(OK);
                    607: }
                    608: 
                    609: 
                    610: /* ARGSUSED */
                    611: int
                    612: a1_22(pe)      /*RLQ (Release Request) in 50B*/
                    613: PE pe;
                    614: {
                    615: 
                    616:        vrsl = FAILURE;
                    617:        vrea = COLL_DET;
                    618:        /*VRELcnf -- Confirm to user telling of failure due to collision --
                    619:          but user can't do anything now anyway. */
                    620: 
                    621:        if(vnt > 0) /*Shouldn't happen without Quarantine Delivery Ctrl*/
                    622:        {
                    623:                /*VDATind-n(Vnt)*/
                    624:                vnt = 0;
                    625:        }
                    626:        (void)vrelind();        /*Tell user that peer requested release*/
                    627:        state = S1_51R;
                    628:        return(OK);
                    629: }
                    630: 
                    631: 
                    632: /* ARGSUSED */
                    633: int
                    634: a1_23(pe)      /*SNQ (Start negotiation) in 50B*/
                    635: PE pe;
                    636: {
                    637:        /*Switch Negotiation not implemented.
                    638:          Should probably send back negative acknowledgement. */
                    639: 
                    640:        return(OK);
                    641: }
                    642: 
                    643: 
                    644: /* ARGSUSED */
                    645: int
                    646: a1_24(pe)              /*SPQ (Switch Profile Request) in state 50B*/
                    647: PE pe;
                    648: {
                    649:        /*Profile Switch not implemented.
                    650:          Should probably send back negative acknowledgement. */
                    651: 
                    652:        return(OK);
                    653: }
                    654: 
                    655: 
                    656: /* ARGSUSED */
                    657: int
                    658: a1_25(pe)      /*RLQ (Release Request) in 10B (Environment not agreed) */
                    659: PE pe;
                    660: {
                    661:        (void)vrelind();
                    662:        state = S1_51R;
                    663:        return(OK);
                    664: }
                    665: 
                    666: /* ARGSUSED */
                    667: int
                    668: a1_26(pe)      /*RLQ (Release Request) in state 10N*/
                    669: PE pe;
                    670: {
                    671:        (void)vrelind();
                    672:        state = S1_51R;
                    673:        return(OK);
                    674: 
                    675: }
                    676: 
                    677: 
                    678: /* ARGSUSED */
                    679: int
                    680: a1_27(pe)      /*RTQ (Request Token) in state 10T*/
                    681: PE pe;
                    682: {
                    683:        vrtq_ind();     /*Tell Application that peer requested token*/
                    684: 
                    685:        /*Probably some ISODE call to give token directly instead of telling
                    686:          user */
                    687: 
                    688:        return(OK);
                    689: }
                    690: 
                    691: 
                    692: /* ARGSUSED */
                    693: int
                    694: a1_28(pe)      /*SNQ (Start Negotiation) in 10N*/
                    695: PE pe;
                    696: {
                    697:        /*MIN not implemented.
                    698:          Need to return NAK. */
                    699: 
                    700:        return(OK);
                    701: }
                    702: 
                    703: 
                    704: /* ARGSUSED */
                    705: int
                    706: a1_29(pe)      /*SNQ (Start Negotiation) in 10B*/
                    707: PE pe;
                    708: {
                    709:        /*MIN not implemented.
                    710:          Need to send NAK to peer. */
                    711: 
                    712:        return(OK);
                    713: }
                    714: 
                    715: 
                    716: /* ARGSUSED */
                    717: int
                    718: a1_30(pe)      /*SPQ (Switch Profile Request) in 10B & 10N*/
                    719: PE pe;
                    720: {
                    721:        /*Switch Profile not implemented.
                    722:          Should send NAK to peer. */
                    723: 
                    724:        return(OK);
                    725: }
                    726: 
                    727: 
                    728: /* ARGSUSED */
                    729: 
                    730: int
                    731: a1_100(pe)     /*APQ (VT-P-ABORT -- Abort from VTPM) in any state*/
                    732: PE pe;
                    733: {
                    734:        state = S1_01;  /*For rigor*/
                    735:        adios(NULLCP, "protocol abort -- association terminated");
                    736: }
                    737: 
                    738: 
                    739: /* ARGSUSED */
                    740: 
                    741: int
                    742: a1_101(pe)     /*AUQ (VT-U-ABORT -- Abort from VT User) in any state*/
                    743: PE pe;
                    744: {
                    745:        state = S1_01;
                    746:        adios(NULLCP,"user abort -- association terminated");
                    747: }
                    748: 
                    749: 
                    750: 
                    751: /* ARGSUSED */
                    752: int
                    753: a1_102(pe)     /*VUABreq (Abort by User) in any state*/
                    754: PE pe;
                    755: {
                    756: 
                    757:        PE pe_auq;
                    758:        char *reason = "Association Closed by User";
                    759: 
                    760:        pe_auq = str2prim(reason,strlen(reason),PE_CLASS_CONT,AUQ_PDU);
                    761:        if(pe_auq == NULLPE)
                    762:                adios(NULLCP, "a1_102: AUQ build failure (out of memory)");
                    763:        if(AcUAbortRequest(sd,&pe_auq,1,aci) == NOTOK)
                    764:            acs_adios (&aci -> aci_abort, "A-ABORT.REQUEST");
                    765:        state = S1_01;
                    766: 
                    767:        finalbye ();
                    768:        exit(1);
                    769: }
                    770: 
                    771: 
                    772: /* ARGSUSED */
                    773: int
                    774: a1_103(pe)     /*VTAB (Irrecoverable exception condition) in any state*/
                    775: PE pe;
                    776: {
                    777: 
                    778:        PE pe_apq;
                    779: 
                    780:        advise(LLOG_NOTICE,NULLCP,  "Irrecoverable Exception Condition -- Aborting\n");
                    781:        pe_apq = num2prim(1,PE_CLASS_CONT,APQ_PDU);
                    782:                        /*1 is value for Local Error.  0 if for Protocol
                    783:                          Error.  Assume 1 for now. */
                    784:        if(pe_apq == NULLPE)
                    785:                adios(NULLCP,"a1_103: APQ build failure (out of memory)");
                    786:        if(AcUAbortRequest(sd,&pe_apq,1,aci) == NOTOK)
                    787:            acs_adios (&aci -> aci_abort, "A-ABORT.REQUEST");
                    788: 
                    789:        state = S1_01;  /*For completeness*/
                    790: 
                    791:        finalbye ();
                    792:        exit(1);
                    793: }
                    794: 
                    795: 
                    796: /* ARGSUSED */
                    797: int
                    798: a1_107(pe)             /*Generic Action*/
                    799: PE pe;
                    800: {
                    801:        /*Stay in this state*/
                    802:        return(OK);
                    803: }
                    804: 

unix.superglobalmegacorp.com

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