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