Annotation of 43BSDReno/contrib/isode-beta/rtsap/test/rtsresp.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * this is the example use of rtsap taken from the manual
        !             3:  */
        !             4: #include <stdio.h>
        !             5: #include <isode/rtsap.h>
        !             6: #include "support.h"
        !             7: 
        !             8: int    rts_indication();
        !             9: 
        !            10: FILE   *errfp;
        !            11: main(argc, argv, envp)
        !            12: int    argc;
        !            13: char   **argv, **envp;
        !            14: {
        !            15:     int        result, sd;
        !            16:     int        res;
        !            17: 
        !            18:     struct RtSAPstart  rtss;
        !            19:     register struct RtSAPstart *rts = &rtss;
        !            20:     struct RtSAPindication     rtis;
        !            21:     register struct RtSAPindication    *rti = &rtis;
        !            22:     register struct AcSAPstart  *acs = &rts->rts_start;
        !            23:     register struct PSAPstart *ps = &acs->acs_start;
        !            24:     register struct RtSAPabort *rta = &rti -> rti_abort;
        !            25: 
        !            26:     errfp = freopen("/dev/console", "w", stdout);
        !            27:     fprintf(errfp, "Got to here\n");
        !            28: 
        !            29:     if (RtInit(argc, argv, rts, rti) == NOTOK)
        !            30:        fprintf(errfp, "initialisation fails: %s",
        !            31:            RtErrString(rta->rta_reason));
        !            32: 
        !            33:     sd = rts->rts_sd;
        !            34:     RTSFREE(rts);
        !            35: 
        !            36:     /* would have read command line arguments here */
        !            37: 
        !            38:     if (RtOpenResponse(sd, ACS_ACCEPT, NULLOID, NULLAEI,
        !            39:                 &ps->ps_called, NULLPC, ps->ps_defctxresult,
        !            40:                NULLPE, rti) == NOTOK)
        !            41:        fprintf(errfp, "RT-OPEN.RESPONSE: %s",
        !            42:            RtErrString(rti->rti_abort.rta_reason));
        !            43:     
        !            44: #ifdef DO_ASYNC
        !            45:     if (RtSetIndications(sd, rts_indication, rti) == NOTOK)
        !            46:        fprintf(stderr, "RoSetIndications: %s",
        !            47:            RtErrString(rti->rti_abort.rta_reason));
        !            48:     for(;;)
        !            49:        pause();
        !            50: #else
        !            51:     
        !            52:     oper(sd, SIMP_RCV);
        !            53: 
        !            54:     oper(sd, CPLX_RCV);
        !            55: 
        !            56:     oper(sd, SEND_PLS);
        !            57: 
        !            58:     oper(sd, RCV_GIVE);
        !            59: 
        !            60:     oper(sd, SIMP_SEND);
        !            61: 
        !            62:     oper(sd, CPLX_SEND);
        !            63: 
        !            64:     oper(sd, RCV_PLS);
        !            65: 
        !            66:     oper(sd, SEND_GIVE);
        !            67: 
        !            68:     oper(sd, CPLX_RCV);
        !            69: 
        !            70:     oper(sd, RCV_CLOSE);
        !            71: 
        !            72: #endif
        !            73:     fprintf(errfp, "Finished\n");
        !            74:    
        !            75: }
        !            76: #if 0
        !            77: /*
        !            78:  * Request/Reply loop of ROS server. Called when data arrives like a signal
        !            79:  * handler routine
        !            80:  */
        !            81: static int
        !            82: rts_indication(sd, rti)
        !            83: int    sd;
        !            84: register struct RtSAPindication        *rti;
        !            85: {
        !            86: 
        !            87:     fprintf(errfp, "rts_indication got called\n");
        !            88:     switch (rti->roi_type) {
        !            89:     case ROI_INVOKE:
        !            90:        rts_invoke(sd, &rti->roi_invoke);
        !            91:        break;
        !            92: 
        !            93:     case ROI_RESULT:
        !            94:        rts_result(sd, &rti->roi_result);
        !            95:        break;
        !            96: 
        !            97:     case ROI_ERROR:
        !            98:        rts_error(sd, &rti->roi_error);
        !            99:        break;
        !           100: 
        !           101: 
        !           102:     case ROI_UREJECT:
        !           103:        rts_ureject(sd, &rti->roi_ureject);
        !           104:        break;
        !           105: 
        !           106:     case ROI_PREJECT:
        !           107:        rts_preject(sd, &rti->roi_preject);
        !           108:        break;
        !           109: 
        !           110:     case ROI_FINISH:
        !           111:        rts_finish(sd, &rti->roi_finish);
        !           112:        break;
        !           113: 
        !           114:     default:
        !           115:        fprintf(errfp, "unknown indication type=%d", rti->roi_type);
        !           116:     }
        !           117: }
        !           118: 
        !           119: extern int     OP1();
        !           120: 
        !           121: 
        !           122: 
        !           123: /* OPERATIONS are numbered APDU_OPx, where each is a unique integer.  Further,
        !           124:    APDU_UNKNOWN is used as a tag different than any valid operation.
        !           125: 
        !           126:    ERRORS are numbered ERROR_xyz, where each is a unique integer.
        !           127:    ERROR_MISTYPED is used to signal an argument fprintf to an operation.
        !           128:    Further, ERROR_UNKNOWN is used as a tag to indicate that the operation
        !           129:    succeeded.
        !           130: 
        !           131:    Finally, note that rox -> rox_args is updated in place by these routines.
        !           132:    If the routine returns ERROR_UNKNOWN, then rox_args contains the results
        !           133:    of the operation.  If the routine returns ERROR_MISTYPED, then rox_args is
        !           134:    untouched.  Otherwise, if the routine returns any other value, then
        !           135:    rox_args contains the parameters of the fprintf which occurred.  Obviously,
        !           136:    each routine calls ROXFREE prior to setting rox_args to a new value.
        !           137:  */
        !           138: 
        !           139: static struct dispatch {
        !           140:     int     ds_operation;
        !           141:     IFP     ds_vector;
        !           142: }       dispatches[] = {
        !           143:     APDU_OP1,   OP1,
        !           144:     APDU_ERR,   OP1,
        !           145:     APDU_URJ,   OP1,
        !           146: 
        !           147:     /* APDU_OPn,   OPn, */
        !           148: 
        !           149:     APDU_UNKNOWN
        !           150: };
        !           151: 
        !           152: 
        !           153: static int  rts_invoke (sd, rox)
        !           154: int     sd;
        !           155: register struct RoSAPinvoke *rox;
        !           156: {
        !           157:     int     result;
        !           158:     register struct dispatch   *ds;
        !           159:     struct RoSAPindication  rois;
        !           160:     register struct RoSAPindication *rti = &rois;
        !           161:     register struct RoSAPpreject   *rop = &rti -> roi_preject;
        !           162: 
        !           163:     for (ds = dispatches; ds -> ds_operation != APDU_UNKNOWN; ds++)
        !           164:        if (ds -> ds_operation == rox -> rox_op)
        !           165:            break;
        !           166: 
        !           167:     if (ds -> ds_operation == APDU_UNKNOWN) {
        !           168:        if (RoURejectRequest (sd, &rox -> rox_id, ROS_IP_UNRECOG,
        !           169:                    ROS_NOPRIO, rti) == NOTOK)
        !           170:            fprintf (errfp, "RO-U-REJECT.REQUEST: %s", RoErrString (rop -> rop_reason));
        !           171:        goto out;
        !           172:     }
        !           173: 
        !           174:     if (rox -> rox_nolinked == 0) {
        !           175:        if (RoURejectRequest (sd, &rox -> rox_id, ROS_IP_LINKED,
        !           176:                    ROS_NOPRIO, rti) == NOTOK)
        !           177:            fprintf (errfp, "RO-U-REJECT.REQUEST: %s", RoErrString (rop -> rop_reason));
        !           178:        goto out;
        !           179:     }
        !           180: 
        !           181:     switch (result = (*ds -> ds_vector) (rox)) {
        !           182:        case ERROR_UNKNOWN: 
        !           183:            if (RoResultRequest (sd, rox -> rox_id, rox -> rox_op,
        !           184:                        rox -> rox_args, ROS_NOPRIO, rti) == NOTOK)
        !           185:                fprintf (errfp, "RO-RESULT.REQUEST: %s",
        !           186:                        RoErrString (rop -> rop_reason));
        !           187:            break;
        !           188: 
        !           189:        default: 
        !           190:            if (RoErrorRequest (sd, rox -> rox_id, result, rox -> rox_args,
        !           191:                        ROS_NOPRIO, rti) == NOTOK)
        !           192:                fprintf (errfp, "RO-ERROR.REQUEST: %s",
        !           193:                        RoErrString (rop -> rop_reason));
        !           194:            break;
        !           195: 
        !           196:        case ERROR_MISTYPED: 
        !           197:            if (RoURejectRequest (sd, &rox -> rox_id, ROS_IP_MISTYPED,
        !           198:                        ROS_NOPRIO, rti) == NOTOK)
        !           199:                fprintf (errfp, "RO-U-REJECT.REQUEST: %s",
        !           200:                        RoErrString (rop -> rop_reason));
        !           201:            break;
        !           202:     }
        !           203: 
        !           204: out: ;
        !           205:     ROXFREE (rox);
        !           206: }
        !           207: 
        !           208: 
        !           209: static int  rts_result (sd, ror)
        !           210: int     sd;
        !           211: register struct RoSAPresult *ror;
        !           212: {
        !           213:     struct RoSAPindication  rois;
        !           214:     register struct RoSAPindication *rti = &rois;
        !           215:     register struct RoSAPpreject   *rop = &rti -> roi_preject;
        !           216: 
        !           217:     if (RoURejectRequest (sd, &ror -> ror_id, ROS_RRP_UNRECOG, ROS_NOPRIO, rti)
        !           218:            == NOTOK)
        !           219:        fprintf (errfp, "RO-U-REJECT.REQUEST: %s", RoErrString (rop -> rop_reason));
        !           220: 
        !           221:     RORFREE (ror);
        !           222: }
        !           223: 
        !           224: 
        !           225: static int  rts_error (sd, roe)
        !           226: int     sd;
        !           227: register struct RoSAPerror *roe;
        !           228: {
        !           229:     struct RoSAPindication  rois;
        !           230:     register struct RoSAPindication *rti = &rois;
        !           231:     register struct RoSAPpreject   *rop = &rti -> roi_preject;
        !           232: 
        !           233:     if (RoURejectRequest (sd, &roe -> roe_id, ROS_REP_UNRECOG, ROS_NOPRIO, rti)
        !           234:            == NOTOK)
        !           235:        fprintf (errfp, "RO-U-REJECT.REQUEST: %s", RoErrString (rop -> rop_reason));
        !           236: 
        !           237:     ROEFREE (roe);
        !           238: }
        !           239: 
        !           240: 
        !           241: static int  rts_ureject (sd, rou)
        !           242: int     sd;
        !           243: register struct RoSAPureject *rou;
        !           244: {
        !           245: /* handle rejection here... */
        !           246: }
        !           247: 
        !           248: 
        !           249: static int  rts_preject (sd, rop)
        !           250: int     sd;
        !           251: register struct RoSAPpreject *rop;
        !           252: {
        !           253:     if (ROS_FATAL (rop -> rop_reason))
        !           254:        fprintf (errfp, "RO-REJECT-P.INDICATION: %s", RoErrString (rop -> rop_reason));
        !           255: 
        !           256: /* handle temporary failure here... */
        !           257: }
        !           258: 
        !           259: static int  rts_finish (sd, acf)
        !           260: int     sd;
        !           261: struct AcSAPfinish *acf;
        !           262: {
        !           263:     struct AcSAPindication  acis;
        !           264:     register struct AcSAPabort *aca = &acis.aci_abort;
        !           265: 
        !           266:     ACFFREE (acf);
        !           267: 
        !           268:     if (AcRelResponse (sd, ACS_ACCEPT, ACR_NORMAL, NULLPEP, 0, &acis) == NOTOK)
        !           269:        fprintf (errfp, "A-RELEASE.RESPONSE: %s", AcErrString (aca -> aca_reason));
        !           270: 
        !           271:     fprintf (errfp, "association released");
        !           272: 
        !           273:     exit(0);
        !           274: }
        !           275: 
        !           276: OP1(rox)
        !           277: register struct RoSAPinvoke *rox;
        !           278: {
        !           279:     fprintf(errfp, "Invocation\nid %d", rox->rox_id);
        !           280:     if (!rox->rox_nolinked)
        !           281:        fprintf(errfp, " linked to %d", rox->rox_linkid);
        !           282:     fprintf(errfp, " operation %d\n", rox->rox_op);
        !           283:     /* print the pe */
        !           284: 
        !           285:     switch (rox->rox_op) {
        !           286:     case APDU_OP1:
        !           287:        return (ERROR_UNKNOWN);
        !           288: 
        !           289:     case APDU_ERR:
        !           290:        return (ERROR_ERROR);
        !           291: 
        !           292:     case APDU_URJ:
        !           293:        return (ERROR_MISTYPED);
        !           294: 
        !           295:     default:
        !           296:        fprintf(errfp, "\nunknown operation %d\n", rox->rox_op);
        !           297:     }
        !           298:     return (ERROR_ERROR);
        !           299: }
        !           300: #endif

unix.superglobalmegacorp.com

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