|
|
1.1 root 1: /* acpkt.h - include file for association control providers (AcS-PROVIDER) */
2:
3: /*
4: * $Header: /f/osi/h/RCS/acpkt.h,v 7.2 90/07/01 21:03:46 mrose Exp $
5: *
6: *
7: * $Log: acpkt.h,v $
8: * Revision 7.2 90/07/01 21:03:46 mrose
9: * pepsy
10: *
11: * Revision 7.1 90/01/11 18:35:57 mrose
12: * real-sync
13: *
14: * Revision 7.0 89/11/23 21:55:37 mrose
15: * Release 6.0
16: *
17: */
18:
19: /*
20: * NOTICE
21: *
22: * Acquisition, use, and distribution of this module and related
23: * materials are subject to the restrictions of a license agreement.
24: * Consult the Preface in the User's Manual for the full terms of
25: * this agreement.
26: *
27: */
28:
29:
30: #ifndef _AcSAP_
31: #include "acsap.h" /* definitions for AcS-USERs */
32: #endif
33:
34: #ifndef _PSAP2_
35: #include "psap2.h" /* definitions for PS-USERs */
36: #endif
37:
38: /* */
39:
40: #ifdef ACSE
41:
42: #define AC_ASN "acse pci version 1"
43:
44: #define acsapPsig(acb, sd) \
45: { \
46: if ((acb = findacblk (sd)) == NULL) { \
47: (void) sigiomask (smask); \
48: return acsaplose (aci, ACS_PARAMETER, NULLCP, \
49: "invalid association descriptor"); \
50: } \
51: if (!(acb -> acb_flags & ACB_CONN)) { \
52: (void) sigiomask (smask); \
53: return acsaplose (aci, ACS_OPERATION, NULLCP, \
54: "assocation descriptor not connected"); \
55: } \
56: if (acb -> acb_flags & ACB_FINN) { \
57: (void) sigiomask (smask); \
58: return acsaplose (aci, ACS_OPERATION, NULLCP, \
59: "association descriptor finishing"); \
60: } \
61: if (acb -> acb_flags & ACB_RELEASE) { \
62: (void) sigiomask (smask); \
63: return acsaplose (aci, ACS_OPERATION, NULLCP, \
64: "release in progress"); \
65: } \
66: }
67:
68: #define acsapFsig(acb, sd) \
69: { \
70: if ((acb = findacblk (sd)) == NULL) {\
71: (void) sigiomask (smask);\
72: return acsaplose (aci, ACS_PARAMETER, NULLCP, \
73: "invalid association descriptor"); \
74: } \
75: if (!(acb -> acb_flags & ACB_CONN)) { \
76: (void) sigiomask (smask); \
77: return acsaplose (aci, ACS_OPERATION, NULLCP, \
78: "assocation descriptor not connected"); \
79: } \
80: if (!(acb -> acb_flags & ACB_FINN)) { \
81: (void) sigiomask (smask); \
82: return acsaplose (aci, ACS_OPERATION, NULLCP, \
83: "association descriptor not finishing"); \
84: } \
85: if (acb -> acb_flags & ACB_RELEASE) { \
86: (void) sigiomask (smask); \
87: return acsaplose (aci, ACS_OPERATION, NULLCP, \
88: "release in progress"); \
89: } \
90: }
91:
92: #define toomuchP(b,n,m,p) \
93: { \
94: if (b == NULL) \
95: n = 0; \
96: else \
97: if (n > m) \
98: return acsaplose (aci, ACS_PARAMETER, NULLCP, \
99: "too many %s user data elements", p); \
100: }
101:
102: #define missingP(p) \
103: { \
104: if (p == NULL) \
105: return acsaplose (aci, ACS_PARAMETER, NULLCP, \
106: "mandatory parameter \"%s\" missing", "p"); \
107: }
108:
109: #ifndef lint
110: #ifndef __STDC__
111: #define copyAcSAPdata(base,len,d) \
112: { \
113: register int i = len; \
114: if ((d -> d/* */_cc = min (i, sizeof d -> d/* */_data)) > 0) \
115: bcopy (base, d -> d/* */_data, d -> d/* */_cc); \
116: }
117: #else
118: #define copyAcSAPdata(base,len,d) \
119: { \
120: register int i = len; \
121: if ((d -> d##_cc = min (i, sizeof d -> d##_data)) > 0) \
122: bcopy (base, d -> d##_data, d -> d##_cc); \
123: }
124: #endif
125: #else
126: #define copyAcSAPdata(base,len,d) bcopy (base, (char *) d, len)
127: #endif
128:
129:
130: #define ACS_USER_BASE ACS_USER_NULL
131: #define ACS_PROV_BASE ACS_PROV_NULL
132:
133:
134: int acpktlose (), acsaplose ();
135:
136: /* */
137:
138: int ps2acslose ();
139:
140: struct type_ACS_Association__information *info2apdu ();
141: int apdu2info ();
142: #endif
143:
144: /* */
145:
146: struct assocblk {
147: struct assocblk *acb_forw; /* doubly-linked list */
148: struct assocblk *acb_back; /* .. */
149:
150: int acb_fd; /* session/presentation descriptor */
151:
152: short acb_flags; /* our state */
153: #define ACB_NULL 0x0000
154: #define ACB_CONN 0x0001 /* connected */
155: #define ACB_FINN 0x0002 /* other side wants to finish */
156: #define ACB_INIT 0x0004 /* this side initiated the association */
157: #define ACB_ASYN 0x0008 /* asynchronous */
158: #define ACB_TURN 0x0010 /* we have the turn */
159: #define ACB_TWA 0x0020 /* two-way alternate */
160: #define ACB_ACT 0x0040 /* activity in progress */
161: #define ACB_PLEASE 0x0080 /* RTS: RT-TURN-PLEASE received
162: ROS on Session: sent S-PLEASE-TOKENS */
163: #define ACB_TIMER 0x0100 /* ACTIVITY discarded due to timing
164: constraint */
165: #define ACB_ROS 0x0200 /* ROS started association */
166: #define ACB_RTS 0x0400 /* RTS .. */
167: #define ACB_ACS 0x0800 /* ACS .. */
168: #define ACB_CLOSING 0x1000 /* waiting to close */
169: #define ACB_FINISH 0x2000 /* .. */
170: #define ACB_STICKY 0x4000 /* ROS using RTS (ugh!) */
171: #define ACB_RELEASE 0x8000 /* release in progress */
172:
173: struct SSAPref acb_connect; /* session connection reference */
174:
175: int acb_requirements; /* session requirements */
176: int acb_owned; /* session tokens we own */
177: int acb_avail; /* session tokens available */
178: int acb_settings; /* initial settings */
179: int acb_ssdusize; /* largest atomic SSDU */
180:
181: IFP acb_uabort; /* disconnect underlying service */
182:
183: /* ACSE */
184: int acb_sversion; /* session service version number */
185: int acb_id; /* ACSE context id */
186: OID acb_context; /* application context name */
187: int acb_offset; /* offset to ACSE PCI */
188: /* negative means at END */
189: PE acb_retry; /* final acpkt */
190:
191: /* RTSE */
192: int acb_rtsid; /* RTSE context id */
193: int acb_ckpoint; /* checkpoint size */
194: int acb_window; /* window size */
195: int acb_actno; /* sending activity serial number */
196: long acb_ssn; /* highest serial number sent */
197: int acb_ack; /* highest serial number acknowledged */
198:
199: IFP acb_pturnrequest; /* RT-TURN-PLEASE.REQUEST */
200: IFP acb_gturnrequest; /* RT-TURN-GIVE.REQUEST */
201: IFP acb_transferequest; /* RT-TRANSER.REQUEST */
202: IFP acb_rtwaitrequest; /* RT-WAIT.REQUEST */
203: IFP acb_rtsetindications;/* define vectors for INDICATION events */
204: IFP acb_rtselectmask; /* map association descriptors for select () */
205: IFP acb_rtpktlose; /* protocol-level abort */
206:
207: int acb_priority; /* priority of please turn */
208: struct AcSAPfinish acb_finish;
209:
210: char *acb_realbase; /* APDU in transit */
211: char *acb_base; /* .. */
212: int acb_len; /* .. */
213:
214: IFP acb_uptrans; /* upcall for up-transfer */
215: IFP acb_downtrans; /* upcall for down-transfer */
216:
217: IFP acb_rtsindication; /* rts event handler */
218:
219: /* ROSE */
220: int acb_rosid; /* ROSE (SASE) context id */
221: IFP acb_putosdu; /* osdu2acb */
222: IFP acb_rowaitrequest; /* RO-WAIT.REQUEST */
223: IFP acb_ready; /* get HDX permission */
224: IFP acb_rosetindications;/* define vectors for INDICATION events */
225: IFP acb_roselectmask; /* map association descriptors for select () */
226: IFP acb_ropktlose; /* protocol-level abort */
227: PE (*acb_getosdu) (); /* for users of THORN... */
228:
229: PE acb_apdu; /* APDU buffered */
230:
231: IFP acb_rosindication; /* ros event handler */
232: };
233: #define NULLACB ((struct assocblk *) 0)
234:
235: #define FREEACB(acb) \
236: { \
237: if ((acb) -> acb_realbase) \
238: free ((acb) -> acb_realbase); \
239: else \
240: if ((acb) -> acb_base) \
241: free ((acb) -> acb_base); \
242: (acb) -> acb_realbase = (acb) -> acb_base = NULL, (acb) -> acb_len = 0; \
243: }
244:
245:
246: int freeacblk ();
247: struct assocblk *newacblk (), *findacblk ();
248:
249: /* */
250:
251: #ifndef ACSE
252:
253: /* PConnect Types */
254: #define PCONN_DTS 0 /* Data Transfer Syntax */
255: #define PCONN_DATA 1 /* User Data */
256: #define PCONN_DATA_CK 0 /* Checkpoint Size */
257: #define PCONN_CK_DFLT 0
258: #define PCONN_DATA_WD 1 /* Window Size */
259: #define PCONN_WD_DFLT 3
260: #define PCONN_DATA_DM 2 /* Dialogue-mode */
261: #define PCONN_DM_MONO 0 /* monologue */
262: #define PCONN_DM_TWA 1 /* two-way alternate */
263: #define PCONN_DM_DFLT PCONN_DM_MONO
264: #define PCONN_DATA_CN 3 /* Connection Data */
265: #define PCONN_DATA_AP 4 /* Application Protocol */
266: #define PCONN_AP_DFLT 1
267:
268:
269: /* PAccept Types */
270: #define PACC_DTS 0 /* Data Transfer Syntax */
271: #define PACC_DATA 1 /* User Data */
272: #define PACC_DATA_CK 0 /* Checkpoint Size */
273: #define PACC_CK_DFLT 0
274: #define PACC_DATA_WD 1 /* Window Size */
275: #define PACC_WD_DFLT 3
276: #define PACC_DATA_CN 2 /* Connection Data */
277:
278:
279: /* PRefuse Types */
280: #define PREF_REASON 0 /* Refuse Reason */
281:
282:
283: /* Data Transfer Syntax Types */
284: #define DTS_SYNTAX 0 /* IMPLICIT INTEGER */
285: #define SYN_X409 0 /* x.409 */
286:
287:
288: /* Connection Data Types */
289: #define CN_OPEN 0 /* Open */
290: #define CN_RECOVER 1 /* Recover */
291:
292:
293: /* Refuse codes */
294: #define REFUSE_BUSY 0 /* Busy */
295: #define REFUSE_RECOVER 1 /* Cannot recover */
296: #define REFUSE_VALIDATE 2 /* Validation failure */
297: #define REFUSE_MODE 3 /* Unacceptable dialogue mode */
298:
299:
300: /* Abort codes */
301: #define ABORT_LSP 0 /* Local system problem */
302: #define ABORT_INV 1 /* Invalid parameter */
303: #define ABORT_ACT 2 /* Unrecognized activity */
304: #define ABORT_TMP 3 /* Temporary problem */
305: #define ABORT_PROTO 4 /* Protocol error */
306: #define ABORT_PERM 5 /* Permanent problem */
307: #define ABORT_USER 6 /* User abort */
308: #define ABORT_TRANS 7 /* Transfer completed */
309: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.