|
|
1.1 root 1: /* rt2psabort.c - RTPM: user abort */
2:
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/rtsap/RCS/rt2psabort.c,v 7.2 90/07/27 08:47:43 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/rtsap/RCS/rt2psabort.c,v 7.2 90/07/27 08:47:43 mrose Exp $
9: *
10: *
11: * $Log: rt2psabort.c,v $
12: * Revision 7.2 90/07/27 08:47:43 mrose
13: * update
14: *
15: * Revision 7.1 90/07/01 21:06:51 mrose
16: * pepsy
17: *
18: * Revision 6.0 89/03/18 23:43:08 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 "RTS-types.h"
39: #include "rtpkt.h"
40: #include "tailor.h"
41: #include "logger.h"
42:
43: /* RT-U-ABORT.REQUEST */
44:
45: int RtUAbortRequest (sd, data, rti)
46: int sd;
47: PE data;
48: struct RtSAPindication *rti;
49: {
50: SBV smask;
51: int result;
52: register struct assocblk *acb;
53:
54: missingP (rti);
55:
56: smask = sigioblock ();
57:
58: rtsapPsig (acb, sd);
59:
60: result = RtUAbortRequestAux (acb, data, rti);
61:
62: (void) sigiomask (smask);
63:
64: return result;
65: }
66:
67: /* */
68:
69: static int RtUAbortRequestAux (acb, data, rti)
70: register struct assocblk *acb;
71: PE data;
72: register struct RtSAPindication *rti;
73: {
74: int result;
75: PE pe,
76: p;
77: struct AcSAPindication acis;
78: register struct AcSAPindication *aci = &acis;
79: register struct AcSAPabort *aca = &aci -> aci_abort;
80:
81: if (!(acb -> acb_flags & ACB_ACS))
82: return rtsaplose (rti, RTS_OPERATION, NULLCP,
83: "not an association descriptor for RTS");
84: /* begin RTAB APDU */
85: if ((pe = pe_alloc (PE_CLASS_UNIV, PE_FORM_CONS, 22)) == NULLPE
86: || set_add (pe, num2prim (ABORT_USER, PE_CLASS_CONT, RTAB_REASON))
87: == NOTOK
88: || (data
89: && (set_add (pe, p = pe_alloc (PE_CLASS_CONT, PE_FORM_CONS,
90: RTAB_USERDATA)) == NOTOK
91: || set_add (p, data) == NOTOK))) {
92: result = rtsaplose (rti, RTS_CONGEST, NULLCP, "out of memory");
93: (void) AcUAbortRequest (acb -> acb_fd, NULLPEP, 0, aci);
94: goto out;
95: }
96: pe -> pe_context = acb -> acb_rtsid;
97: /* end RTAB APDU */
98:
99: PLOGP (rtsap_log,RTS_RTSE__apdus, pe, "RTABapdu", 0);
100:
101: if ((result = AcUAbortRequest (acb -> acb_fd, &pe, 1, aci)) == NOTOK)
102: (void) acs2rtslose (acb, rti, "AcUAbortRequest", aca);
103: else
104: result = OK;
105:
106: out: ;
107: if (pe) {
108: if (data)
109: (void) pe_extract (pe, data);
110: pe_free (pe);
111: }
112:
113: return result;
114: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.