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