386BSD 0.1 development
[unix-history] / usr / othersrc / contrib / isode / h / ssap.h
CommitLineData
2596a09e
WJ
1/* ssap.h - include file for session users (SS-USER) */
2
3/*
4 * $Header: /f/osi/h/RCS/ssap.h,v 7.2 91/02/22 09:25:09 mrose Interim $
5 *
6 *
7 * $Log: ssap.h,v $
8 * Revision 7.2 91/02/22 09:25:09 mrose
9 * Interim 6.8
10 *
11 * Revision 7.1 91/01/10 04:11:13 mrose
12 * foo
13 *
14 * Revision 7.0 89/11/23 21:56:02 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 _SSAP_
31#define _SSAP_
32
33#ifndef _MANIFEST_
34#include "manifest.h"
35#endif
36#ifndef _GENERAL_
37#include "general.h"
38#endif
39#ifndef _ISOADDRS_
40#include "isoaddrs.h"
41#endif
42
43/* \f */
44
45struct SSAPactid { /* Activity Identifier */
46#define SID_DATA_SIZE 6
47 u_char sd_len;
48 char sd_data[SID_DATA_SIZE];
49};
50
51struct SSAPref { /* SSAP reference */
52 /* USER reference */
53#define SREF_USER_SIZE 64
54 u_char sr_ulen;
55 char sr_udata[SREF_USER_SIZE];
56
57 /* COMMON reference */
58#define SREF_COMM_SIZE 64
59 u_char sr_clen;
60 char sr_cdata[SREF_COMM_SIZE];
61
62 /* ADDITIONAL reference */
63#define SREF_ADDT_SIZE 4
64 u_char sr_alen;
65 char sr_adata[SREF_ADDT_SIZE];
66
67 /* for S-ACTIVITY-RESUME */
68 u_char sr_vlen;
69 char sr_vdata[SREF_USER_SIZE];
70
71#define sr_calling sr_udata
72#define sr_calling_len sr_ulen
73#define sr_called sr_vdata
74#define sr_called_len sr_vlen
75};
76
77/* \f */
78
79struct SSAPstart { /* S-CONNECT.INDICATION */
80 int ss_sd; /* SESSION descriptor */
81
82 struct SSAPref ss_connect; /* session connection identifier */
83
84 struct SSAPaddr ss_calling; /* address of peer calling */
85 struct SSAPaddr ss_called; /* address of peer called */
86
87 int ss_requirements; /* session requirements */
88 int ss_settings; /* initial settings of tokens */
89 long ss_isn; /* initial serial number */
90
91 int ss_ssdusize; /* largest atomic SSDU */
92
93 struct QOStype ss_qos; /* quality of service */
94
95 /* initial DATA from peer */
96#define SS_SIZE 512
97 int ss_cc; /* length */
98 char *ss_data; /* data */
99};
100#define SSFREE(ss) \
101{ \
102 if ((ss) -> ss_data) \
103 free ((ss) -> ss_data), (ss) -> ss_data = NULL; \
104}
105
106
107struct SSAPconnect { /* S-CONNECT.CONFIRMATION */
108 int sc_sd; /* SESSION descriptor */
109
110 struct SSAPref sc_connect; /* session connection identifier */
111
112 struct SSAPaddr sc_responding;/* address of peer responding */
113
114 int sc_result; /* result */
115#define SC_ACCEPT (-1)
116
117#define SC_BASE 0x80 /* reject by SSAP-provider */
118#define SC_SSAPID (SC_BASE + 1) /* SSAP identifier unknown */
119#define SC_SSUSER (SC_BASE + 2) /* SS-user not attached to SSAP */
120#define SC_CONGEST (SC_BASE + 3) /* Congestion at SSAP */
121#define SC_VERSION (SC_BASE + 4) /* Proposed protocol versions not
122 supported */
123
124 /* begin UNOFFICIAL */
125#define SC_ADDRESS (SC_BASE + 5) /* Address unknown */
126#define SC_REFUSED (SC_BASE + 6) /* Connect request refused on this
127 network connection */
128#define SC_TRANSPORT (SC_BASE + 7) /* Transport disconnect */
129#define SC_ABORT (SC_BASE + 8) /* Provider-initiated abort */
130#define SC_PROTOCOL (SC_BASE + 9) /* Protocol error */
131#define SC_PARAMETER (SC_BASE + 10) /* Invalid parameter */
132#define SC_OPERATION (SC_BASE + 11) /* Invalid operation */
133#define SC_TIMER (SC_BASE + 12) /* Timer expired */
134#define SC_WAITING (SC_BASE + 13) /* Indications waiting */
135 /* end UNOFFICIAL */
136
137 /* reject by SSAP-user */
138#define SC_NOTSPECIFIED 0 /* Reason not specified */
139#define SC_CONGESTION 1 /* Temporary congestion */
140#define SC_REJECTED 2 /* Rejected */
141
142#ifdef notdef
143#define SC_FATAL(r) ((r) < SC_BASE || (r) < SC_PARAMETER)
144#define SC_OFFICIAL(r) ((r) < SC_BASE || (r) < SC_ADDRESS)
145#else
146#define SC_FATAL(r) ((r) < SC_PARAMETER)
147#define SC_OFFICIAL(r) ((r) < SC_ADDRESS)
148#endif
149
150 int sc_requirements; /* session requirements */
151 int sc_settings; /* initial assignment of tokens */
152 int sc_please; /* tokens requested by SS-user
153 (S-TOKEN-PLEASE.INDICATION) */
154 long sc_isn; /* initial serial number */
155
156 int sc_ssdusize; /* largest atomic SSDU */
157
158 struct QOStype sc_qos; /* quality of service */
159
160 /* initial DATA from peer */
161#ifdef HPUX
162#undef SC_SIZE
163#endif
164#define SC_SIZE 512
165 int sc_cc; /* length */
166 char *sc_data; /* data */
167 char *sc_realdata; /* real head of data */
168};
169#define SCFREE(sc) \
170{ \
171 if ((sc) -> sc_realdata) \
172 free ((sc) -> sc_realdata), \
173 (sc) -> sc_realdata = (sc) -> sc_data = NULL; \
174 else \
175 if ((sc) -> sc_data) \
176 free ((sc) -> sc_data), (sc) -> sc_data = NULL; \
177}
178
179
180 /* SESSION requirements */
181#define SR_HALFDUPLEX 0x0001 /* half-duplex */
182#define SR_DUPLEX 0x0002 /* full-duplex */
183#define SR_EXPEDITED 0x0004 /* expedited data transfer */
184#define SR_MINORSYNC 0x0008 /* minor synchronize */
185#define SR_MAJORSYNC 0x0010 /* major synchronize */
186#define SR_RESYNC 0x0020 /* resynchronize */
187#define SR_ACTIVITY 0x0040 /* activity management */
188#define SR_NEGOTIATED 0x0080 /* negotiated release */
189#define SR_CAPABILITY 0x0100 /* capability data transfer */
190#define SR_EXCEPTIONS 0x0200 /* exceptions reporting */
191#define SR_TYPEDATA 0x0400 /* typed data transfer */
192#define SR_SYMMETRIC 0x0800 /* symmetric synchronize */
193
194#define SR_RLS_EXISTS SR_NEGOTIATED
195#define SR_MAJ_EXISTS (SR_MAJORSYNC | SR_ACTIVITY)
196#define SR_ACT_EXISTS SR_ACTIVITY
197#define SR_MIN_EXISTS SR_MINORSYNC
198#define SR_DAT_EXISTS SR_HALFDUPLEX
199
200#define SR_TOKENS (SR_RLS_EXISTS | SR_MAJ_EXISTS | SR_ACT_EXISTS \
201 | SR_MIN_EXISTS | SR_DAT_EXISTS)
202
203#define SR_BASUBSET (SR_HALFDUPLEX | SR_TYPEDATA | SR_CAPABILITY \
204 | SR_MINORSYNC | SR_EXCEPTIONS | SR_ACTIVITY)
205#define SR_BCSUBSET (SR_HALFDUPLEX | SR_DUPLEX)
206#define SR_BSSUBSET (SR_NEGOTIATED | SR_HALFDUPLEX | SR_DUPLEX \
207 | SR_TYPEDATA | SR_MINORSYNC | SR_MAJORSYNC \
208 | SR_RESYNC)
209#define SR_MYREQUIRE (SR_BASUBSET | SR_BCSUBSET | SR_BSSUBSET \
210 | SR_EXPEDITED)
211#define SR_DEFAULT (SR_HALFDUPLEX | SR_MINORSYNC | SR_ACTIVITY \
212 | SR_CAPABILITY | SR_EXCEPTIONS)
213
214 /* SESSION tokens */
215#define ST_INIT_VALUE 0x00 /* initiator's side */
216#define ST_RESP_VALUE 0x01 /* responder's side */
217#define ST_CALL_VALUE 0x02 /* called SS-user's choice */
218#define ST_RSVD_VALUE 0x03 /* reserved */
219
220#define ST_MASK 0x03
221
222#define ST_RLS_SHIFT 6 /* release token */
223#define ST_MAJ_SHIFT 4 /* major/activity token */
224#define ST_ACT_SHIFT ST_MAJ_SHIFT
225#define ST_MIN_SHIFT 2 /* synchronize-minor token */
226#define ST_DAT_SHIFT 0 /* data token */
227
228#define dotokens() \
229{ \
230 dotoken (SR_RLS_EXISTS, ST_RLS_SHIFT, ST_RLS_TOKEN, "release"); \
231 dotoken (SR_MAJ_EXISTS, ST_MAJ_SHIFT, ST_MAJ_TOKEN, "majorsync"); \
232 dotoken (SR_MIN_EXISTS, ST_MIN_SHIFT, ST_MIN_TOKEN, "minorsync"); \
233 dotoken (SR_DAT_EXISTS, ST_DAT_SHIFT, ST_DAT_TOKEN, "data"); \
234}
235
236
237struct SSAPdata { /* S-READ.INDICATION */
238 int sx_type; /* type of indication */
239#define SX_NORMAL 0x00 /* S-DATA.INDICATION */
240#define SX_EXPEDITED 0x01 /* S-EXPEDITED-DATA.INDICATION */
241#define SX_TYPED 0x02 /* S-TYPED-DATA.INDICATION */
242#define SX_CAPDIND 0x03 /* S-CAPABILITY-DATA.INDICATION */
243#define SX_CAPDCNF 0x04 /* S-CAPABILITY-DATA.CONFIRMATION */
244
245#define SX_EXSIZE 14 /* EXPEDITED DATA (XSSDU) only */
246#define SX_CDSIZE 512 /* CAPABILITY DATA only */
247#define SX_CDASIZE 512 /* CAPABILITY DATA ACK only */
248 int sx_cc; /* total length */
249 struct qbuf sx_qbuf; /* chained data */
250};
251#define SXFREE(sx) QBFREE (&((sx) -> sx_qbuf))
252
253
254struct SSAPtoken { /* S-{TOKEN-*,GIVE-CONTROL}.INDICATION */
255 int st_type; /* type of indication */
256#define ST_GIVE 0x00 /* S-TOKEN-GIVE.INDICATION */
257#define ST_PLEASE 0x01 /* S-TOKEN-PLEASE.INDICATION */
258#define ST_CONTROL 0x02 /* S-GIVE-CONTROL.INDICATION */
259
260 u_char st_tokens; /* tokens offered/wanted */
261#define ST_RLS_TOKEN (0x01 << ST_RLS_SHIFT)
262#define ST_MAJ_TOKEN (0x01 << ST_MAJ_SHIFT)
263#define ST_ACT_TOKEN (0x01 << ST_ACT_SHIFT)
264#define ST_MIN_TOKEN (0x01 << ST_MIN_SHIFT)
265#define ST_DAT_TOKEN (0x01 << ST_DAT_SHIFT)
266
267 u_char st_owned; /* tokens owned by user */
268
269#define ST_SIZE 512 /* PLEASE TOKEN only */
270 int st_cc; /* length */
271 char *st_data; /* data */
272};
273#define STFREE(st) \
274{ \
275 if ((st) -> st_data) \
276 free ((st) -> st_data), (st) -> st_data = NULL; \
277}
278
279
280struct SSAPsync { /* S-*-SYNC.{INDICATION,CONFIRMATION} */
281 int sn_type; /* type of indication/confirmation */
282#define SN_MAJORIND 0x00 /* S-MAJOR-SYNC.INDICATION */
283#define SN_MAJORCNF 0x01 /* S-MAJOR-SYNC.CONFIRMATION */
284#define SN_MINORIND 0x02 /* S-MINOR-SYNC.INDICATION */
285#define SN_MINORCNF 0x03 /* S-MINOR-SYNC.CONFIRMATION */
286#define SN_RESETIND 0x04 /* S-RESYNCHRONIZE.INDICATION */
287#define SN_RESETCNF 0x05 /* S-RESYNCHRONIZE.CONFIRMATION */
288
289 int sn_options; /* options (!!) */
290 /* for S-MINOR-SYNC.INDICATION */
291#define SYNC_CONFIRM 1 /* wants confirmation */
292#define SYNC_NOCONFIRM 0 /* .. nope */
293 /* for S-RESYNCHRONIZE.INDICATION */
294#define SYNC_RESTART 0 /* restart */
295#define SYNC_ABANDON 1 /* abandon */
296#define SYNC_SET 2 /* set */
297
298 long sn_ssn; /* serial number */
299#define SERIAL_NONE (-1L) /* No SSN */
300#define SERIAL_MIN 000000L /* the min SSN */
301#define SERIAL_MAX 999998L /* the max SSN */
302
303 int sn_settings; /* new token settings (RESYNC only) */
304
305 /* sync data from peer */
306#define SN_SIZE 512
307 int sn_cc; /* length */
308 char *sn_data; /* data */
309};
310#define SNFREE(sn) \
311{ \
312 if ((sn) -> sn_data) \
313 free ((sn) -> sn_data), (sn) -> sn_data = NULL; \
314}
315
316
317struct SSAPactivity { /* S-ACTIVITY-*.{INDICATION,CONFIRMATION} */
318 int sv_type; /* type of indication/confirmation */
319#define SV_START 0x00 /* S-ACTIVITY-START.INDICATION */
320#define SV_RESUME 0x01 /* S-ACTIVITY-RESUME.INDICATION */
321#define SV_INTRIND 0x02 /* S-ACTIVITY-INTERRUPT.INDICATION */
322#define SV_INTRCNF 0x03 /* S-ACTIVITY-INTERRUPT.CONFIRMATION */
323#define SV_DISCIND 0x04 /* S-ACTIVITY-DISCARD.INDICATION */
324#define SV_DISCCNF 0x05 /* S-ACTIVITY-DISCARD.CONFIRMATION */
325#define SV_ENDIND 0x06 /* S-ACTIVITY-END.INDICATION */
326#define SV_ENDCNF 0x07 /* S-ACTIVITY-END.CONFIRMATION */
327
328 struct SSAPactid sv_id; /* START/RESUME activity identifier */
329
330 struct SSAPactid sv_oid; /* RESUME old activity identifier */
331 struct SSAPref sv_connect;/* old connection identifier */
332
333 long sv_ssn; /* RESUME/END Serial number */
334
335 int sv_reason; /* INTERRUPT/DISCARD */
336 /* same values as sp_reason */
337
338 /* activity DATA from peer */
339#define SV_SIZE 512
340 int sv_cc; /* length */
341 char *sv_data; /* data */
342};
343#define SVFREE(sv) \
344{ \
345 if ((sv) -> sv_data) \
346 free ((sv) -> sv_data), (sv) -> sv_data = NULL; \
347}
348
349
350struct SSAPreport { /* S-{U,P}-EXCEPTION-REPORT.INDICATION */
351 int sp_peer; /* T = S-U-EXCEPTION-REPORT.INDICATION:
352 sp_reason/sp_data both meaningful
353 NIL = S-P-EXCEPTION-REPORT.INDICATION:
354 sp_reason == SP_NOREASON, or
355 sp_reason == SP_PROTOCOL */
356 int sp_reason;
357#define SP_NOREASON 0 /* No specific reason stated */
358#define SP_JEOPARDY 1 /* User receiving ability jeopardized */
359#define SP_RSVD1 2 /* reserved */
360#define SP_SEQUENCE 3 /* User sequence error */
361#define SP_RSVD2 4 /* reserved */
362#define SP_LOCAL 5 /* Local SS-user error */
363#define SP_PROCEDURAL 6 /* Unrecoverable procedural error */
364#define SP_DEMAND 128 /* Demand data token */
365
366#define SP_PROTOCOL (-1) /* SS-provider protocol error */
367
368 /* report DATA from peer */
369#define SP_SIZE 512
370 int sp_cc; /* length */
371 char *sp_data; /* data */
372};
373#define SPFREE(sp) \
374{ \
375 if ((sp) -> sp_data) \
376 free ((sp) -> sp_data), (sp) -> sp_data = NULL; \
377}
378
379
380struct SSAPfinish { /* S-RELEASE.INDICATION */
381 /* release DATA from peer */
382#define SF_SIZE 512
383 int sf_cc; /* length */
384 char *sf_data; /* data */
385};
386#define SFFREE(sf) \
387{ \
388 if ((sf) -> sf_data) \
389 free ((sf) -> sf_data), (sf) -> sf_data = NULL; \
390}
391
392
393struct SSAPrelease { /* S-RELEASE.CONFIRMATION */
394 int sr_affirmative; /* T = connection released
395 NIL = request refused */
396
397 /* release DATA from peer */
398#define SR_SIZE 512
399 int sr_cc; /* length */
400 char *sr_data; /* data */
401};
402#define SRFREE(sr) \
403{ \
404 if ((sr) -> sr_data) \
405 free ((sr) -> sr_data), (sr) -> sr_data = NULL; \
406}
407
408
409struct SSAPabort { /* S-{U,P}-ABORT.INDICATION */
410 int sa_peer; /* T = S-U-ABORT.INDICATION:
411 sa_info/sa_cc is meaningful
412 NIL = S-P-ABORT.INDICATION:
413 sa_reason is meaningful,
414 sa_data/sa_cc contains diagnostics */
415
416 int sa_reason; /* same codes as sc_result */
417
418 /* abort DATA from peer */
419#define SA_SIZE 512 /* N.B.: the ISO DIS says 9, but we use
420 512 instead so ASE-level aborts will work
421 reasonably */
422 int sa_cc; /* length */
423 char *sa_info; /* data (from the peer) */
424 char *sa_realinfo; /* real head of data */
425 char sa_data[512]; /* data (for messages from provider) */
426};
427#define SAFREE(sa) \
428{ \
429 if ((sa) -> sa_realinfo) \
430 free ((sa) -> sa_realinfo), (sa) -> sa_realinfo = NULL; \
431}
432
433
434struct SSAPindication {
435 int si_type; /* the union element present */
436#define SI_DATA 0x00
437#define SI_TOKEN 0x01
438#define SI_SYNC 0x02
439#define SI_ACTIVITY 0x03
440#define SI_REPORT 0x04
441#define SI_FINISH 0x05
442#define SI_ABORT 0x06
443
444 union {
445 struct SSAPdata si_un_data;
446 struct SSAPtoken si_un_token;
447 struct SSAPsync si_un_sync;
448 struct SSAPactivity si_un_activity;
449 struct SSAPreport si_un_report;
450 struct SSAPfinish si_un_finish;
451 struct SSAPabort si_un_abort;
452 } si_un;
453#define si_data si_un.si_un_data
454#define si_token si_un.si_un_token
455#define si_sync si_un.si_un_sync
456#define si_activity si_un.si_un_activity
457#define si_report si_un.si_un_report
458#define si_finish si_un.si_un_finish
459#define si_abort si_un.si_un_abort
460};
461
462/* \f */
463
464extern char *ssapversion;
465
466
467int SExec (); /* SERVER only */
468int SInit (); /* S-CONNECT.INDICATION */
469
470int SConnResponse (); /* S-CONNECT.RESPONSE */
471int SConnRequest (); /* S-CONNECT.REQUEST (backwards-compatible) */
472#define SConnRequest(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11) \
473 SAsynConnRequest (a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,0)
474int SAsynConnRequest (); /* S-(ASYN-)CONNECT.REQUEST */
475int SAsynRetryRequest (); /* S-ASYN-RETRY.REQUEST (pseudo) */
476int SDataRequest (); /* S-DATA.REQUEST */
477int SSendRequest (); /* S-SEND.REQUEST (segmented) */
478int SWriteRequest (); /* S-WRITE.REQUEST (pseudo) */
479int SExpdRequest (); /* S-EXPEDITED-DATA.REQUEST */
480int STypedRequest (); /* S-TYPED-DATA.REQUEST */
481int SCapdRequest (); /* S-CAPABILITY-DATA.REQUEST */
482int SCapdResponse (); /* S-CAPABILITY-DATA.RESPONSE */
483int SReadRequest (); /* S-READ.REQUEST (pseudo) */
484int SGTokenRequest (); /* S-TOKEN-GIVE.REQUEST */
485int SPTokenRequest (); /* S-TOKEN-PLEASE.REQUEST */
486int SGControlRequest (); /* S-CONTROL-GIVE.REQUEST */
487int SMajSyncRequest (); /* S-MAJOR-SYNC.REQUEST */
488int SMajSyncResponse (); /* S-MAJOR-SYNC.RESPONSE */
489int SMinSyncRequest (); /* S-MINOR-SYNC.REQUEST */
490int SMinSyncResponse (); /* S-MINOR-SYNC.RESPONSE */
491int SReSyncRequest (); /* S-RESYNCHRONIZE.REQUEST */
492int SReSyncResponse (); /* S-RESYNCHRONIZE.RESPONSE */
493int SActStartRequest (); /* S-ACTIVITY-START.REQUEST */
494int SActResumeRequest (); /* S-ACTIVITY-RESUME.REQUEST */
495int SActIntrRequest (); /* S-ACTIVITY-INTERRUPT.REQUEST */
496int SActIntrResponse (); /* S-ACTIVITY-INTERRUPT.RESPONSE */
497int SActDiscRequest (); /* S-ACTIVITY-DISCARD.REQUEST */
498int SActDiscResponse (); /* S-ACTIVITY-DISCARD.RESPONSE */
499int SActEndRequest (); /* S-ACTIVITY-END.REQUEST */
500int SActEndResponse (); /* S-ACTIVITY-END.RESPONSE */
501int SUAbortRequest (); /* S-U-ABORT.REQUEST */
502int SUReportRequest (); /* S-U-EXCEPTION-REPORT.REQUEST */
503int SRelRequest (); /* S-RELEASE.REQUEST */
504int SRelRetryRequest (); /* S-RELEASE-RETRY.REQUEST (pseudo) */
505int SRelResponse (); /* S-RELEASE.RESPONSE */
506
507int SSetIndications (); /* define vectors for INDICATION events */
508int SSelectMask (); /* map session descriptors for select() */
509
510char *SErrString (); /* return SSAP error code in string form */
511
512#define SLocalHostName getlocalhost
513char *SLocalHostName (); /* return name of local host (sigh) */
514#endif