|
|
1.1 root 1: /* ppkt.h - include file for presentation providers (PS-PROVIDER) */
2:
3: /*
4: * $Header: /f/osi/h/RCS/ppkt.h,v 7.0 89/11/23 21:55:51 mrose Rel $
5: *
6: * RFC1085 (LPP) support contributed by the Wollongong Group, Inc.
7: *
8: *
9: * $Log: ppkt.h,v $
10: * Revision 7.0 89/11/23 21:55:51 mrose
11: * Release 6.0
12: *
13: */
14:
15: /*
16: * NOTICE
17: *
18: * Acquisition, use, and distribution of this module and related
19: * materials are subject to the restrictions of a license agreement.
20: * Consult the Preface in the User's Manual for the full terms of
21: * this agreement.
22: *
23: */
24:
25:
26: #ifndef _PSAP2_
27: #include "psap2.h" /* definitions for PS-USERs */
28: #endif
29:
30: #include "ssap.h" /* definitinos for SS-USERs */
31:
32: /* */
33:
34: #define psapPsig(pb, sd) \
35: { \
36: if ((pb = findpblk (sd)) == NULL) { \
37: (void) sigiomask (smask); \
38: return psaplose (pi, PC_PARAMETER, NULLCP, \
39: "invalid presentation descriptor"); \
40: } \
41: if (!(pb -> pb_flags & PB_CONN)) { \
42: (void) sigiomask (smask); \
43: return psaplose (pi, PC_OPERATION, NULLCP, \
44: "presentation descriptor not connected"); \
45: } \
46: if (pb -> pb_flags & PB_FINN) { \
47: (void) sigiomask (smask); \
48: return psaplose (pi, PC_OPERATION, NULLCP, \
49: "presentation descriptor finishing"); \
50: } \
51: if (pb -> pb_flags & PB_RELEASE) { \
52: (void) sigiomask (smask); \
53: return psaplose (pi, PC_OPERATION, NULLCP, \
54: "release in progress"); \
55: } \
56: }
57:
58: #define psapFsig(pb, sd) \
59: { \
60: if ((pb = findpblk (sd)) == NULL) { \
61: (void) sigiomask (smask); \
62: return psaplose (pi, PC_PARAMETER, NULLCP, \
63: "invalid presentation descriptor"); \
64: } \
65: if (!(pb -> pb_flags & PB_CONN)) { \
66: (void) sigiomask (smask); \
67: return psaplose (pi, PC_OPERATION, NULLCP, \
68: "presentation descriptor not connected"); \
69: } \
70: if (!(pb -> pb_flags & PB_FINN)) { \
71: (void) sigiomask (smask); \
72: return psaplose (pi, PC_OPERATION, NULLCP, \
73: "presentation descriptor not finishing"); \
74: } \
75: if (pb -> pb_flags & PB_RELEASE) { \
76: (void) sigiomask (smask); \
77: return psaplose (pi, PC_OPERATION, NULLCP, \
78: "release in progress"); \
79: } \
80: }
81:
82: #define toomuchP(b,n,m,p) \
83: { \
84: if (b == NULL) \
85: n = 0; \
86: else \
87: if (n > m) \
88: return psaplose (pi, PC_PARAMETER, NULLCP, \
89: "too many %s user data elements", p); \
90: }
91:
92: #define missingP(p) \
93: { \
94: if (p == NULL) \
95: return psaplose (pi, PC_PARAMETER, NULLCP, \
96: "mandatory parameter \"%s\" missing", "p"); \
97: }
98:
99: #ifndef lint
100: #ifndef __STDC__
101: #define copyPSAPdata(base,len,d) \
102: { \
103: register int i = len; \
104: if ((d -> d/* */_cc = min (i, sizeof d -> d/* */_data)) > 0) \
105: bcopy (base, d -> d/* */_data, d -> d/* */_cc); \
106: }
107: #else
108: #define copyPSAPdata(base,len,d) \
109: { \
110: register int i = len; \
111: if ((d -> d##_cc = min (i, sizeof d -> d##_data)) > 0) \
112: bcopy (base, d -> d##_data, d -> d##_cc); \
113: }
114: #endif
115: #else
116: #define copyPSAPdata(base,len,d) bcopy (base, (char *) d, len)
117: #endif
118:
119:
120: #define pylose(p) \
121: ppktlose (pb, pi, PC_UNRECOGNIZED, (p), NULLCP, "%s", PY_pepy)
122:
123:
124: int ppktlose (), psaplose ();
125:
126: /* */
127:
128: #define DFLT_ASN "iso asn.1 abstract syntax"
129: #define DFLT_ATN BER
130:
131: #define atn_is_ok(pb,atn) atn_is_ber ((pb), (atn))
132: #define atn_is_ber(pb,atn) (!oid_cmp (pb -> pb_ber, atn))
133:
134:
135: struct psapblk {
136: struct psapblk *pb_forw; /* doubly-linked list */
137: struct psapblk *pb_back; /* .. */
138:
139: int pb_fd; /* session descriptor */
140:
141: short pb_flags; /* our state */
142: #define PB_NULL 0x00
143: #define PB_CONN 0x01 /* connected */
144: #define PB_FINN 0x02 /* other side wants to finish */
145: #define PB_ASYN 0x04 /* asynchronous */
146: #define PB_DFLT 0x10 /* respond with default context result */
147: #define PB_RELEASE 0x20 /* release in progress */
148:
149: #ifndef LPP
150: char *pb_retry; /* initial/final ppkt */
151: char *pb_realbase;
152: int pb_len;
153: #else
154: PE pb_retry;
155: PE pb_response;
156:
157: struct type_PS_SessionConnectionIdentifier *pb_reference;
158:
159: PS pb_stream;
160:
161: int pb_reliability;
162:
163: int pb_maxtries;
164: int pb_tries;
165: #endif
166:
167: int pb_ncontext; /* presentation context set */
168: struct PSAPcontext pb_contexts[NPCTX];
169:
170: OID pb_asn; /* default: abstract syntax name */
171: OID pb_atn; /* .. abstract transfer name */
172: int pb_result; /* response */
173:
174: OID pb_ber; /* BER */
175:
176: int pb_prequirements; /* presentation requirements */
177:
178: int pb_srequirements; /* our session requirements */
179: int pb_urequirements; /* user's session requirements */
180: int pb_owned; /* session tokens we own */
181: int pb_avail; /* session tokens available */
182: int pb_ssdusize; /* largest atomic SSDU */
183:
184: #ifdef LPP
185: struct NSAPaddr pb_initiating; /* initiator */
186: #endif
187: struct PSAPaddr pb_responding; /* responder */
188:
189: IFP pb_DataIndication; /* INDICATION handlers */
190: IFP pb_TokenIndication; /* .. */
191: IFP pb_SyncIndication; /* .. */
192: IFP pb_ActivityIndication; /* .. */
193: IFP pb_ReportIndication; /* .. */
194: IFP pb_ReleaseIndication; /* .. */
195: IFP pb_AbortIndication; /* .. */
196:
197: #ifdef LPP
198: IFP pb_retryfnx;
199: IFP pb_closefnx;
200: IFP pb_selectfnx;
201: IFP pb_checkfnx;
202: #endif
203: };
204: #define NULLPB ((struct psapblk *) 0)
205:
206: int freepblk ();
207: struct psapblk *newpblk (), *findpblk ();
208:
209: #ifndef LPP
210: #define PC_PROV_BASE PC_NOTSPECIFIED
211: #define PC_ABORT_BASE \
212: (PC_UNRECOGNIZED - int_PS_Abort__reason_unrecognized__ppdu)
213: #define PC_REASON_BASE \
214: (PC_ABSTRACT - int_PS_provider__reason_abstract__syntax__not__supported)
215:
216:
217: struct type_PS_User__data *info2ppdu ();
218: int ppdu2info ();
219:
220: int info2ssdu (), ssdu2info (), qbuf2info ();
221:
222: struct qbuf *info2qb ();
223: int qb2info ();
224:
225: struct type_PS_Identifier__list *silly_list ();
226:
227: int ss2pslose (), ss2psabort ();
228:
229:
230: struct pair {
231: int p_mask;
232: int p_bitno;
233: };
234:
235: extern struct pair preq_pairs[], sreq_pairs[];
236: #endif
237:
238: /* */
239:
240: #define REASON_BASE PC_NOTSPECIFIED
241:
242: #ifndef LPP
243: #define PPDU_NONE (-1)
244: #define PPDU_CP 0
245: #define PPDU_CPA 1
246: #define PPDU_CPR 2
247: #define PPDU_ARU 3
248: #define PPDU_ARP 4
249: #define PPDU_TD 7
250: #define PPDU_RS 12
251: #define PPDU_RSA 13
252: #else
253: #define PR_KERNEL 0x0000 /* kernel (yuk) */
254:
255: #define NPCTX_PS 2 /* maximum number of contexts */
256: #define NPDATA_PS 1 /* maximum number of PDVs in a request */
257: #define PCI_ROSE 1 /* PCI for SASE using ROSE */
258: #define PCI_ACSE 3 /* PCI for ACSE */
259:
260: #define PT_TCP 'T' /* TCP providing backing */
261: #define PT_UDP 'U' /* UDP providing backing */
262:
263: #define NULLRF ((struct type_PS_SessionConnectionIdentifier *) 0)
264:
265:
266: #define pslose(pi,reason) \
267: (reason != PS_ERR_NONE && reason != PS_ERR_IO \
268: ? psaplose ((pi), PC_CONGEST, NULLCP, "%s", ps_error (reason)) \
269: : psaplose ((pi), PC_SESSION, NULLCP, NULLCP))
270:
271:
272: int pdu2sel (), refcmp ();
273: struct SSAPref *pdu2ref ();
274: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.