Annotation of 43BSDReno/contrib/isode-beta/others/lookup/ryinitiator.c, revision 1.1

1.1     ! root        1: /* ryinitiator.c - generic interactive initiator */
        !             2: 
        !             3: #ifndef        lint
        !             4: static char *rcsid = "$Header: /f/osi/others/lookup/RCS/ryinitiator.c,v 7.2 90/07/09 14:39:53 mrose Exp $";
        !             5: #endif
        !             6: 
        !             7: /* 
        !             8:  * $Header: /f/osi/others/lookup/RCS/ryinitiator.c,v 7.2 90/07/09 14:39:53 mrose Exp $
        !             9:  *
        !            10:  *
        !            11:  * $Log:       ryinitiator.c,v $
        !            12:  * Revision 7.2  90/07/09  14:39:53  mrose
        !            13:  * sync
        !            14:  * 
        !            15:  * Revision 7.1  90/07/01  21:04:28  mrose
        !            16:  * pepsy
        !            17:  * 
        !            18:  * Revision 7.0  89/11/23  22:56:41  mrose
        !            19:  * Release 6.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: #include <stdio.h>
        !            35: #include <varargs.h>
        !            36: #include "PasswordLookup-types.h"
        !            37: #include "ryinitiator.h"
        !            38: 
        !            39: /*    DATA */
        !            40: 
        !            41: static char *myname = "ryinitiator";
        !            42: 
        !            43: 
        !            44: extern char *isodeversion;
        !            45: 
        !            46: /*    INITIATOR */
        !            47: 
        !            48: ryinitiator (argc, argv, myservice, mycontext, mypci, ops, dispatches, quit)
        !            49: int    argc;
        !            50: char  **argv,
        !            51:        *myservice,
        !            52:        *mycontext,
        !            53:        *mypci;
        !            54: struct RyOperation ops[];
        !            55: struct dispatch *dispatches;
        !            56: IFP    quit;
        !            57: {
        !            58:     int            iloop,
        !            59:            sd;
        !            60:     char    buffer[BUFSIZ],
        !            61:           *vec[NVEC + 1];
        !            62:     register struct dispatch   *ds;
        !            63:     struct SSAPref sfs;
        !            64:     register struct SSAPref *sf;
        !            65:     register struct PSAPaddr *pa;
        !            66:     struct AcSAPconnect accs;
        !            67:     register struct AcSAPconnect   *acc = &accs;
        !            68:     struct AcSAPindication  acis;
        !            69:     register struct AcSAPindication *aci = &acis;
        !            70:     register struct AcSAPabort *aca = &aci -> aci_abort;
        !            71:     AEI            aei;
        !            72:     OID            ctx,
        !            73:            pci;
        !            74:     struct PSAPctxlist pcs;
        !            75:     register struct PSAPctxlist *pc = &pcs;
        !            76:     struct RoSAPindication rois;
        !            77:     register struct RoSAPindication *roi = &rois;
        !            78:     register struct RoSAPpreject *rop = &roi -> roi_preject;
        !            79: 
        !            80:     if (myname = rindex (argv[0], '/'))
        !            81:        myname++;
        !            82:     if (myname == NULL || *myname == NULL)
        !            83:        myname = argv[0];
        !            84: 
        !            85:     if (argc < 2)
        !            86:        adios (NULLCP, "usage: %s host [operation [ arguments ... ]]", myname);
        !            87: 
        !            88:     if ((aei = _str2aei (argv[1], myservice, mycontext, 0)) == NULLAEI)
        !            89:        adios (NULLCP, "unable to resolve service: %s", PY_pepy);
        !            90:     if ((pa = aei2addr (aei)) == NULLPA)
        !            91:        adios (NULLCP, "address translation failed");
        !            92: 
        !            93:     if ((ctx = ode2oid (mycontext)) == NULLOID)
        !            94:        adios (NULLCP, "%s: unknown object descriptor", mycontext);
        !            95:     if ((ctx = oid_cpy (ctx)) == NULLOID)
        !            96:        adios (NULLCP, "out of memory");
        !            97:     if ((pci = ode2oid (mypci)) == NULLOID)
        !            98:        adios (NULLCP, "%s: unknown object descriptor", mypci);
        !            99:     if ((pci = oid_cpy (pci)) == NULLOID)
        !           100:        adios (NULLCP, "out of memory");
        !           101:     pc -> pc_nctx = 1;
        !           102:     pc -> pc_ctx[0].pc_id = 1;
        !           103:     pc -> pc_ctx[0].pc_asn = pci;
        !           104:     pc -> pc_ctx[0].pc_atn = NULLOID;
        !           105: 
        !           106:     if ((sf = addr2ref (PLocalHostName ())) == NULL) {
        !           107:        sf = &sfs;
        !           108:        (void) bzero ((char *) sf, sizeof *sf);
        !           109:     }
        !           110: 
        !           111:     if (argc < 3) {
        !           112:        printf ("%s", myname);
        !           113:        if (sf -> sr_ulen > 2)
        !           114:            printf (" running on host %s", sf -> sr_udata + 2);
        !           115:        if (sf -> sr_clen > 2)
        !           116:            printf (" at %s", sf -> sr_cdata + 2);
        !           117:        printf (" [%s, ", oid2ode (ctx));
        !           118:        printf ("%s]\n", oid2ode (pci));
        !           119:        printf ("using %s\n", isodeversion);
        !           120: 
        !           121:        printf ("%s... ", argv[1]);
        !           122:        (void) fflush (stdout);
        !           123:     
        !           124:        iloop = 1;
        !           125:     }
        !           126:     else {
        !           127:        for (ds = dispatches; ds -> ds_name; ds++)
        !           128:            if (strcmp (ds -> ds_name, argv[2]) == 0)
        !           129:                break;
        !           130:        if (ds -> ds_name == NULL)
        !           131:            adios (NULLCP, "unknown operation \"%s\"", argv[2]);
        !           132: 
        !           133:        iloop = 0;
        !           134:     }
        !           135: 
        !           136:     if (AcAssocRequest (ctx, NULLAEI, aei, NULLPA, pa, pc, NULLOID,
        !           137:                0, ROS_MYREQUIRE, SERIAL_NONE, 0, sf, NULLPEP, 0, NULLQOS,
        !           138:                acc, aci)
        !           139:            == NOTOK)
        !           140:        acs_adios (aca, "A-ASSOCIATE.REQUEST");
        !           141: 
        !           142:     if (acc -> acc_result != ACS_ACCEPT) {
        !           143:        if (iloop)
        !           144:            printf ("failed\n");
        !           145: 
        !           146:        adios (NULLCP, "association rejected: [%s]",
        !           147:                AcErrString (acc -> acc_result));
        !           148:     }
        !           149:     if (iloop) {
        !           150:        printf ("connected\n");
        !           151:        (void) fflush (stdout);
        !           152:     }
        !           153: 
        !           154:     sd = acc -> acc_sd;
        !           155:     ACCFREE (acc);
        !           156: 
        !           157:     if (RoSetService (sd, RoPService, roi) == NOTOK)
        !           158:        ros_adios (rop, "set RO/PS fails");
        !           159: 
        !           160:     if (iloop) {
        !           161:        for (;;) {
        !           162:            if (getline (buffer) == NOTOK)
        !           163:                break;
        !           164: 
        !           165:            if (str2vec (buffer, vec) < 1)
        !           166:                continue;
        !           167: 
        !           168:            for (ds = dispatches; ds -> ds_name; ds++)
        !           169:                if (strcmp (ds -> ds_name, vec[0]) == 0)
        !           170:                    break;
        !           171:            if (ds -> ds_name == NULL) {
        !           172:                advise (NULLCP, "unknown operation \"%s\"", vec[0]);
        !           173:                continue;
        !           174:            }
        !           175: 
        !           176:            invoke (sd, ops, ds, vec + 1);
        !           177:        }
        !           178:     }
        !           179:     else
        !           180:        invoke (sd, ops, ds, argv + 3);
        !           181: 
        !           182:     (*quit) (sd, (struct dispatch *) NULL, (char **) NULL, (caddr_t *) NULL);
        !           183: }
        !           184: 
        !           185: /*  */
        !           186: 
        !           187: static invoke (sd, ops, ds, args)
        !           188: int    sd;
        !           189: struct RyOperation ops[];
        !           190: register struct dispatch *ds;
        !           191: char  **args;
        !           192: {
        !           193:     int            result;
        !           194:     caddr_t in;
        !           195:     struct RoSAPindication  rois;
        !           196:     register struct RoSAPindication *roi = &rois;
        !           197:     register struct RoSAPpreject   *rop = &roi -> roi_preject;
        !           198: 
        !           199:     in = NULL;
        !           200:     if (ds -> ds_argument && (*ds -> ds_argument) (sd, ds, args, &in) == NOTOK)
        !           201:        return;
        !           202: 
        !           203:     switch (result = RyStub (sd, ops, ds -> ds_operation, RyGenID (sd), NULLIP,
        !           204:                             in, ds -> ds_result, ds -> ds_error, ROS_SYNC,
        !           205:                             roi)) {
        !           206:        case NOTOK:             /* failure */
        !           207:            if (ROS_FATAL (rop -> rop_reason))
        !           208:                ros_adios (rop, "STUB");
        !           209:            ros_advise (rop, "STUB");
        !           210:            break;
        !           211: 
        !           212:        case OK:                /* got a result/error response */
        !           213:            break;
        !           214: 
        !           215:        case DONE:              /* got RO-END? */
        !           216:            adios (NULLCP, "got RO-END.INDICATION");
        !           217:            /* NOTREACHED */
        !           218: 
        !           219:        default:
        !           220:            adios (NULLCP, "unknown return from RyStub=%d", result);
        !           221:            /* NOTREACHED */
        !           222:     }
        !           223: 
        !           224:     if (ds -> ds_mod && ds -> ds_ind >= 0 && in)
        !           225:        (void)fre_obj(in, ds->ds_mod->md_dtab[ds->ds_ind], ds->ds_mod);
        !           226: }
        !           227: 
        !           228: /*  */
        !           229: 
        !           230: static int  getline (buffer)
        !           231: char   *buffer;
        !           232: {
        !           233:     register int    i;
        !           234:     register char  *cp,
        !           235:                    *ep;
        !           236:     static int  sticky = 0;
        !           237: 
        !           238:     if (sticky) {
        !           239:        sticky = 0;
        !           240:        return NOTOK;
        !           241:     }
        !           242: 
        !           243:     printf ("%s> ", myname);
        !           244:     (void) fflush (stdout);
        !           245: 
        !           246:     for (ep = (cp = buffer) + BUFSIZ - 1; (i = getchar ()) != '\n';) {
        !           247:        if (i == EOF) {
        !           248:            printf ("\n");
        !           249:            clearerr (stdin);
        !           250:            if (cp != buffer) {
        !           251:                sticky++;
        !           252:                break;
        !           253:            }
        !           254: 
        !           255:            return NOTOK;
        !           256:        }
        !           257: 
        !           258:        if (cp < ep)
        !           259:            *cp++ = i;
        !           260:     }
        !           261:     *cp = NULL;
        !           262: 
        !           263:     return OK;
        !           264: }
        !           265: 
        !           266: /*  */
        !           267: 
        !           268: void   ros_adios (rop, event)
        !           269: register struct RoSAPpreject *rop;
        !           270: char   *event;
        !           271: {
        !           272:     ros_advise (rop, event);
        !           273: 
        !           274:     _exit (1);
        !           275: }
        !           276: 
        !           277: 
        !           278: void   ros_advise (rop, event)
        !           279: register struct RoSAPpreject *rop;
        !           280: char   *event;
        !           281: {
        !           282:     char    buffer[BUFSIZ];
        !           283: 
        !           284:     if (rop -> rop_cc > 0)
        !           285:        (void) sprintf (buffer, "[%s] %*.*s", RoErrString (rop -> rop_reason),
        !           286:                rop -> rop_cc, rop -> rop_cc, rop -> rop_data);
        !           287:     else
        !           288:        (void) sprintf (buffer, "[%s]", RoErrString (rop -> rop_reason));
        !           289: 
        !           290:     advise (NULLCP, "%s: %s", event, buffer);
        !           291: }
        !           292: 
        !           293: /*  */
        !           294: 
        !           295: void   acs_adios (aca, event)
        !           296: register struct AcSAPabort *aca;
        !           297: char   *event;
        !           298: {
        !           299:     acs_advise (aca, event);
        !           300: 
        !           301:     _exit (1);
        !           302: }
        !           303: 
        !           304: 
        !           305: void   acs_advise (aca, event)
        !           306: register struct AcSAPabort *aca;
        !           307: char   *event;
        !           308: {
        !           309:     char    buffer[BUFSIZ];
        !           310: 
        !           311:     if (aca -> aca_cc > 0)
        !           312:        (void) sprintf (buffer, "[%s] %*.*s",
        !           313:                AcErrString (aca -> aca_reason),
        !           314:                aca -> aca_cc, aca -> aca_cc, aca -> aca_data);
        !           315:     else
        !           316:        (void) sprintf (buffer, "[%s]", AcErrString (aca -> aca_reason));
        !           317: 
        !           318:        advise (NULLCP, "%s: %s (source %d)", event, buffer,
        !           319:                aca -> aca_source);
        !           320: }
        !           321: 
        !           322: /*  */
        !           323: 
        !           324: #ifndef        lint
        !           325: void   _advise ();
        !           326: 
        !           327: 
        !           328: void   adios (va_alist)
        !           329: va_dcl
        !           330: {
        !           331:     va_list ap;
        !           332: 
        !           333:     va_start (ap);
        !           334: 
        !           335:     _advise (ap);
        !           336: 
        !           337:     va_end (ap);
        !           338: 
        !           339:     _exit (1);
        !           340: }
        !           341: #else
        !           342: /* VARARGS */
        !           343: 
        !           344: void   adios (what, fmt)
        !           345: char   *what,
        !           346:        *fmt;
        !           347: {
        !           348:     adios (what, fmt);
        !           349: }
        !           350: #endif
        !           351: 
        !           352: 
        !           353: #ifndef        lint
        !           354: void   advise (va_alist)
        !           355: va_dcl
        !           356: {
        !           357:     va_list ap;
        !           358: 
        !           359:     va_start (ap);
        !           360: 
        !           361:     _advise (ap);
        !           362: 
        !           363:     va_end (ap);
        !           364: }
        !           365: 
        !           366: 
        !           367: static void  _advise (ap)
        !           368: va_list        ap;
        !           369: {
        !           370:     char    buffer[BUFSIZ];
        !           371: 
        !           372:     asprintf (buffer, ap);
        !           373: 
        !           374:     (void) fflush (stdout);
        !           375: 
        !           376:     fprintf (stderr, "%s: ", myname);
        !           377:     (void) fputs (buffer, stderr);
        !           378:     (void) fputc ('\n', stderr);
        !           379: 
        !           380:     (void) fflush (stderr);
        !           381: }
        !           382: #else
        !           383: /* VARARGS */
        !           384: 
        !           385: void   advise (what, fmt)
        !           386: char   *what,
        !           387:        *fmt;
        !           388: {
        !           389:     advise (what, fmt);
        !           390: }
        !           391: #endif
        !           392: 
        !           393: 
        !           394: #ifndef        lint
        !           395: void   ryr_advise (va_alist)
        !           396: va_dcl
        !           397: {
        !           398:     va_list ap;
        !           399: 
        !           400:     va_start (ap);
        !           401: 
        !           402:     _advise (ap);
        !           403: 
        !           404:     va_end (ap);
        !           405: }
        !           406: #else
        !           407: /* VARARGS */
        !           408: 
        !           409: void   ryr_advise (what, fmt)
        !           410: char   *what,
        !           411:        *fmt;
        !           412: {
        !           413:     ryr_advise (what, fmt);
        !           414: }
        !           415: #endif

unix.superglobalmegacorp.com

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