1121936Sharti/* This file was created automatically
2121936Sharti * Source file: $Begemot: libunimsg/atm/msg/msg.def,v 1.3 2003/09/19 11:58:15 hbb Exp $
3121936Sharti * $FreeBSD$
4121936Sharti */
5121936Sharti
6121936Sharti#include <sys/types.h>
7121936Sharti#include <sys/param.h>
8121936Sharti
9121936Sharti#ifdef _KERNEL
10121936Sharti#include <sys/libkern.h>
11121936Sharti#else
12121936Sharti#include <string.h>
13121936Sharti#endif
14121936Sharti#include <netnatm/unimsg.h>
15121936Sharti#include <netnatm/msg/unistruct.h>
16121936Sharti#include <netnatm/msg/unimsglib.h>
17121936Sharti#include <netnatm/msg/priv.h>
18121936Sharti#include <netnatm/msg/privmsg.c>
19121936Sharti
20121936Shartistatic void
21121936Shartiprint_alerting(struct uni_alerting *msg, struct unicx *cx)
22121936Sharti{
23121936Sharti	u_int i;
24121936Sharti
25121936Sharti	if(msg->connid.h.present & UNI_IE_PRESENT)
26121936Sharti		uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
27121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
28121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
29121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
30121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
31121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
32121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
33121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
34121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
35121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
36121936Sharti	if(msg->report.h.present & UNI_IE_PRESENT)
37121936Sharti		uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
38121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
39121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
40121936Sharti}
41121936Sharti
42121936Shartistatic int
43121936Sharticheck_alerting(struct uni_alerting *m, struct unicx *cx)
44121936Sharti{
45121936Sharti	int ret = 0;
46121936Sharti	u_int i;
47121936Sharti
48121936Sharti	if(!(!cx->pnni))
49121936Sharti		ret |= IE_ISPRESENT(m->connid);
50121936Sharti	else
51121936Sharti		ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
52121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
53121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
54121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
55121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
56121936Sharti	}
57121936Sharti	if(!(!cx->pnni))
58121936Sharti		ret |= IE_ISPRESENT(m->uu);
59121936Sharti	else
60121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
61121936Sharti	if(!(!cx->pnni))
62121936Sharti		ret |= IE_ISPRESENT(m->report);
63121936Sharti	else
64121936Sharti		ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
65121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
66121936Sharti
67121936Sharti	return ret;
68121936Sharti}
69121936Sharti
70121936Shartistatic int
71121936Shartiencode_alerting(struct uni_msg *msg, struct uni_alerting *p, struct unicx *cx)
72121936Sharti{
73121936Sharti	u_int mlen;
74121936Sharti	u_int i;
75121936Sharti
76121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ALERTING, cx, &mlen))
77121936Sharti		return (-2);
78121936Sharti
79121936Sharti	if((p->connid.h.present & UNI_IE_PRESENT) &&
80121936Sharti	   uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
81121936Sharti		return (UNI_IE_CONNID);
82121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
83121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
84121936Sharti		return (UNI_IE_EPREF);
85121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
86121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
87121936Sharti		return (UNI_IE_NOTIFY);
88121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
89121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
90121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
91121936Sharti		return ((i << 16) + UNI_IE_GIT);
92121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
93121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
94121936Sharti		return (UNI_IE_UU);
95121936Sharti	if((p->report.h.present & UNI_IE_PRESENT) &&
96121936Sharti	   uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
97121936Sharti		return (UNI_IE_REPORT);
98121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
99121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
100121936Sharti		return (UNI_IE_UNREC);
101121936Sharti
102121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
103121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
104121936Sharti
105121936Sharti	return (0);
106121936Sharti}
107121936Sharti
108121936Shartistatic int
109121936Shartidecode_alerting(struct uni_alerting *out, struct uni_msg *msg,
110121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
111121936Sharti    struct unicx *cx)
112121936Sharti{
113121936Sharti	u_int i;
114121936Sharti
115121936Sharti	switch (ie) {
116121936Sharti
117121936Sharti	  case UNI_IE_CONNID:
118121936Sharti		if (!(!cx->pnni))
119121936Sharti			return (DEC_ILL);
120121936Sharti		out->connid.h = *hdr;
121121936Sharti		if (hdr->present & UNI_IE_ERROR)
122121936Sharti			return (DEC_ERR);
123121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
124121936Sharti			return (DEC_ERR);
125121936Sharti		break;
126121936Sharti
127121936Sharti	  case UNI_IE_EPREF:
128121936Sharti		out->epref.h = *hdr;
129121936Sharti		if (hdr->present & UNI_IE_ERROR)
130121936Sharti			return (DEC_ERR);
131121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
132121936Sharti			return (DEC_ERR);
133121936Sharti		break;
134121936Sharti
135121936Sharti	  case UNI_IE_NOTIFY:
136121936Sharti		out->notify.h = *hdr;
137121936Sharti		if (hdr->present & UNI_IE_ERROR)
138121936Sharti			return (DEC_ERR);
139121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
140121936Sharti			return (DEC_ERR);
141121936Sharti		break;
142121936Sharti
143121936Sharti	  case UNI_IE_GIT:
144121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
145121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
146121936Sharti				out->git[i].h = *hdr;
147121936Sharti				if (hdr->present & UNI_IE_ERROR)
148121936Sharti					return (DEC_ERR);
149121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
150121936Sharti					return (DEC_ERR);
151121936Sharti				break;
152121936Sharti			}
153121936Sharti		break;
154121936Sharti
155121936Sharti	  case UNI_IE_UU:
156121936Sharti		if (!(!cx->pnni))
157121936Sharti			return (DEC_ILL);
158121936Sharti		out->uu.h = *hdr;
159121936Sharti		if (hdr->present & UNI_IE_ERROR)
160121936Sharti			return (DEC_ERR);
161121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
162121936Sharti			return (DEC_ERR);
163121936Sharti		break;
164121936Sharti
165121936Sharti	  case UNI_IE_REPORT:
166121936Sharti		if (!(!cx->pnni))
167121936Sharti			return (DEC_ILL);
168121936Sharti		out->report.h = *hdr;
169121936Sharti		if (hdr->present & UNI_IE_ERROR)
170121936Sharti			return (DEC_ERR);
171121936Sharti		if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
172121936Sharti			return (DEC_ERR);
173121936Sharti		break;
174121936Sharti
175121936Sharti	  case UNI_IE_UNREC:
176121936Sharti		out->unrec.h = *hdr;
177121936Sharti		if (hdr->present & UNI_IE_ERROR)
178121936Sharti			return (DEC_ERR);
179121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
180121936Sharti			return (DEC_ERR);
181121936Sharti		break;
182121936Sharti
183121936Sharti	  default:
184121936Sharti		return (DEC_ILL);
185121936Sharti	}
186121936Sharti	return (DEC_OK);
187121936Sharti}
188121936Sharti
189121936Shartistatic const struct msgdecl decl_alerting = {
190121936Sharti	0,
191121936Sharti	"alerting",
192121936Sharti	(uni_msg_print_f)print_alerting,
193121936Sharti	(uni_msg_check_f)check_alerting,
194121936Sharti	(uni_msg_encode_f)encode_alerting,
195121936Sharti	(uni_msg_decode_f)decode_alerting
196121936Sharti};
197121936Sharti
198121936Shartistatic void
199121936Shartiprint_call_proc(struct uni_call_proc *msg, struct unicx *cx)
200121936Sharti{
201121936Sharti	if(msg->connid.h.present & UNI_IE_PRESENT)
202121936Sharti		uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
203121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
204121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
205121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
206121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
207121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
208121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
209121936Sharti}
210121936Sharti
211121936Shartistatic int
212121936Sharticheck_call_proc(struct uni_call_proc *m, struct unicx *cx)
213121936Sharti{
214121936Sharti	int ret = 0;
215121936Sharti
216121936Sharti	ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
217121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
218121936Sharti	if(!(!cx->pnni))
219121936Sharti		ret |= IE_ISPRESENT(m->notify);
220121936Sharti	else
221121936Sharti		ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
222121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
223121936Sharti
224121936Sharti	return ret;
225121936Sharti}
226121936Sharti
227121936Shartistatic int
228121936Shartiencode_call_proc(struct uni_msg *msg, struct uni_call_proc *p, struct unicx *cx)
229121936Sharti{
230121936Sharti	u_int mlen;
231121936Sharti
232121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CALL_PROC, cx, &mlen))
233121936Sharti		return (-2);
234121936Sharti
235121936Sharti	if((p->connid.h.present & UNI_IE_PRESENT) &&
236121936Sharti	   uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
237121936Sharti		return (UNI_IE_CONNID);
238121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
239121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
240121936Sharti		return (UNI_IE_EPREF);
241121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
242121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
243121936Sharti		return (UNI_IE_NOTIFY);
244121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
245121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
246121936Sharti		return (UNI_IE_UNREC);
247121936Sharti
248121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
249121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
250121936Sharti
251121936Sharti	return (0);
252121936Sharti}
253121936Sharti
254121936Shartistatic int
255121936Shartidecode_call_proc(struct uni_call_proc *out, struct uni_msg *msg,
256121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
257121936Sharti    struct unicx *cx)
258121936Sharti{
259121936Sharti	switch (ie) {
260121936Sharti
261121936Sharti	  case UNI_IE_CONNID:
262121936Sharti		out->connid.h = *hdr;
263121936Sharti		if (hdr->present & UNI_IE_ERROR)
264121936Sharti			return (DEC_ERR);
265121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
266121936Sharti			return (DEC_ERR);
267121936Sharti		break;
268121936Sharti
269121936Sharti	  case UNI_IE_EPREF:
270121936Sharti		out->epref.h = *hdr;
271121936Sharti		if (hdr->present & UNI_IE_ERROR)
272121936Sharti			return (DEC_ERR);
273121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
274121936Sharti			return (DEC_ERR);
275121936Sharti		break;
276121936Sharti
277121936Sharti	  case UNI_IE_NOTIFY:
278121936Sharti		if (!(!cx->pnni))
279121936Sharti			return (DEC_ILL);
280121936Sharti		out->notify.h = *hdr;
281121936Sharti		if (hdr->present & UNI_IE_ERROR)
282121936Sharti			return (DEC_ERR);
283121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
284121936Sharti			return (DEC_ERR);
285121936Sharti		break;
286121936Sharti
287121936Sharti	  case UNI_IE_UNREC:
288121936Sharti		out->unrec.h = *hdr;
289121936Sharti		if (hdr->present & UNI_IE_ERROR)
290121936Sharti			return (DEC_ERR);
291121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
292121936Sharti			return (DEC_ERR);
293121936Sharti		break;
294121936Sharti
295121936Sharti	  default:
296121936Sharti		return (DEC_ILL);
297121936Sharti	}
298121936Sharti	return (DEC_OK);
299121936Sharti}
300121936Sharti
301121936Shartistatic const struct msgdecl decl_call_proc = {
302121936Sharti	0,
303121936Sharti	"call_proc",
304121936Sharti	(uni_msg_print_f)print_call_proc,
305121936Sharti	(uni_msg_check_f)check_call_proc,
306121936Sharti	(uni_msg_encode_f)encode_call_proc,
307121936Sharti	(uni_msg_decode_f)decode_call_proc
308121936Sharti};
309121936Sharti
310121936Shartistatic void
311121936Shartiprint_connect(struct uni_connect *msg, struct unicx *cx)
312121936Sharti{
313121936Sharti	u_int i;
314121936Sharti
315121936Sharti	if(msg->aal.h.present & UNI_IE_PRESENT)
316121936Sharti		uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
317121936Sharti	if(msg->blli.h.present & UNI_IE_PRESENT)
318121936Sharti		uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli, cx);
319121936Sharti	if(msg->connid.h.present & UNI_IE_PRESENT)
320121936Sharti		uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
321121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
322121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
323121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
324121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
325121936Sharti	if(msg->conned.h.present & UNI_IE_PRESENT)
326121936Sharti		uni_print_ie_internal(UNI_IE_CONNED, (union uni_ieall *)&msg->conned, cx);
327121936Sharti	if(msg->connedsub.h.present & UNI_IE_PRESENT)
328121936Sharti		uni_print_ie_internal(UNI_IE_CONNEDSUB, (union uni_ieall *)&msg->connedsub, cx);
329121936Sharti	if(msg->eetd.h.present & UNI_IE_PRESENT)
330121936Sharti		uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
331121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
332121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
333121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
334121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
335121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
336121936Sharti	if(msg->traffic.h.present & UNI_IE_PRESENT)
337121936Sharti		uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
338121936Sharti	if(msg->exqos.h.present & UNI_IE_PRESENT)
339121936Sharti		uni_print_ie_internal(UNI_IE_EXQOS, (union uni_ieall *)&msg->exqos, cx);
340121936Sharti	if(msg->facility.h.present & UNI_IE_PRESENT)
341121936Sharti		uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
342121936Sharti	if(msg->abrsetup.h.present & UNI_IE_PRESENT)
343121936Sharti		uni_print_ie_internal(UNI_IE_ABRSETUP, (union uni_ieall *)&msg->abrsetup, cx);
344121936Sharti	if(msg->abradd.h.present & UNI_IE_PRESENT)
345121936Sharti		uni_print_ie_internal(UNI_IE_ABRADD, (union uni_ieall *)&msg->abradd, cx);
346121936Sharti	if(msg->called_soft.h.present & UNI_IE_PRESENT)
347121936Sharti		uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
348121936Sharti	if(msg->report.h.present & UNI_IE_PRESENT)
349121936Sharti		uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
350121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
351121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
352121936Sharti}
353121936Sharti
354121936Shartistatic int
355121936Sharticheck_connect(struct uni_connect *m, struct unicx *cx)
356121936Sharti{
357121936Sharti	int ret = 0;
358121936Sharti	u_int i;
359121936Sharti
360121936Sharti	ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
361121936Sharti	ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli, cx);
362121936Sharti	if(!(!cx->pnni))
363121936Sharti		ret |= IE_ISPRESENT(m->connid);
364121936Sharti	else
365121936Sharti		ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
366121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
367121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
368121936Sharti	ret |= uni_check_ie(UNI_IE_CONNED, (union uni_ieall *)&m->conned, cx);
369121936Sharti	ret |= uni_check_ie(UNI_IE_CONNEDSUB, (union uni_ieall *)&m->connedsub, cx);
370121936Sharti	ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
371121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
372121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
373121936Sharti	}
374121936Sharti	if(!(!cx->pnni))
375121936Sharti		ret |= IE_ISPRESENT(m->uu);
376121936Sharti	else
377121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
378121936Sharti	ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
379121936Sharti	ret |= uni_check_ie(UNI_IE_EXQOS, (union uni_ieall *)&m->exqos, cx);
380121936Sharti	if(!(cx->q2932))
381121936Sharti		ret |= IE_ISPRESENT(m->facility);
382121936Sharti	else
383121936Sharti		ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
384121936Sharti	ret |= uni_check_ie(UNI_IE_ABRSETUP, (union uni_ieall *)&m->abrsetup, cx);
385121936Sharti	ret |= uni_check_ie(UNI_IE_ABRADD, (union uni_ieall *)&m->abradd, cx);
386121936Sharti	if(!(cx->pnni))
387121936Sharti		ret |= IE_ISPRESENT(m->called_soft);
388121936Sharti	else
389121936Sharti		ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
390121936Sharti	if(!(!cx->pnni))
391121936Sharti		ret |= IE_ISPRESENT(m->report);
392121936Sharti	else
393121936Sharti		ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
394121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
395121936Sharti
396121936Sharti	return ret;
397121936Sharti}
398121936Sharti
399121936Shartistatic int
400121936Shartiencode_connect(struct uni_msg *msg, struct uni_connect *p, struct unicx *cx)
401121936Sharti{
402121936Sharti	u_int mlen;
403121936Sharti	u_int i;
404121936Sharti
405121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CONNECT, cx, &mlen))
406121936Sharti		return (-2);
407121936Sharti
408121936Sharti	if((p->aal.h.present & UNI_IE_PRESENT) &&
409121936Sharti	   uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
410121936Sharti		return (UNI_IE_AAL);
411121936Sharti	if((p->blli.h.present & UNI_IE_PRESENT) &&
412121936Sharti	   uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli, cx))
413121936Sharti		return (UNI_IE_BLLI);
414121936Sharti	if((p->connid.h.present & UNI_IE_PRESENT) &&
415121936Sharti	   uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
416121936Sharti		return (UNI_IE_CONNID);
417121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
418121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
419121936Sharti		return (UNI_IE_EPREF);
420121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
421121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
422121936Sharti		return (UNI_IE_NOTIFY);
423121936Sharti	if((p->conned.h.present & UNI_IE_PRESENT) &&
424121936Sharti	   uni_encode_ie(UNI_IE_CONNED, msg, (union uni_ieall *)&p->conned, cx))
425121936Sharti		return (UNI_IE_CONNED);
426121936Sharti	if((p->connedsub.h.present & UNI_IE_PRESENT) &&
427121936Sharti	   uni_encode_ie(UNI_IE_CONNEDSUB, msg, (union uni_ieall *)&p->connedsub, cx))
428121936Sharti		return (UNI_IE_CONNEDSUB);
429121936Sharti	if((p->eetd.h.present & UNI_IE_PRESENT) &&
430121936Sharti	   uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
431121936Sharti		return (UNI_IE_EETD);
432121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
433121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
434121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
435121936Sharti		return ((i << 16) + UNI_IE_GIT);
436121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
437121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
438121936Sharti		return (UNI_IE_UU);
439121936Sharti	if((p->traffic.h.present & UNI_IE_PRESENT) &&
440121936Sharti	   uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
441121936Sharti		return (UNI_IE_TRAFFIC);
442121936Sharti	if((p->exqos.h.present & UNI_IE_PRESENT) &&
443121936Sharti	   uni_encode_ie(UNI_IE_EXQOS, msg, (union uni_ieall *)&p->exqos, cx))
444121936Sharti		return (UNI_IE_EXQOS);
445121936Sharti	if((p->facility.h.present & UNI_IE_PRESENT) &&
446121936Sharti	   uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
447121936Sharti		return (UNI_IE_FACILITY);
448121936Sharti	if((p->abrsetup.h.present & UNI_IE_PRESENT) &&
449121936Sharti	   uni_encode_ie(UNI_IE_ABRSETUP, msg, (union uni_ieall *)&p->abrsetup, cx))
450121936Sharti		return (UNI_IE_ABRSETUP);
451121936Sharti	if((p->abradd.h.present & UNI_IE_PRESENT) &&
452121936Sharti	   uni_encode_ie(UNI_IE_ABRADD, msg, (union uni_ieall *)&p->abradd, cx))
453121936Sharti		return (UNI_IE_ABRADD);
454121936Sharti	if((p->called_soft.h.present & UNI_IE_PRESENT) &&
455121936Sharti	   uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
456121936Sharti		return (UNI_IE_CALLED_SOFT);
457121936Sharti	if((p->report.h.present & UNI_IE_PRESENT) &&
458121936Sharti	   uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
459121936Sharti		return (UNI_IE_REPORT);
460121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
461121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
462121936Sharti		return (UNI_IE_UNREC);
463121936Sharti
464121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
465121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
466121936Sharti
467121936Sharti	return (0);
468121936Sharti}
469121936Sharti
470121936Shartistatic int
471121936Shartidecode_connect(struct uni_connect *out, struct uni_msg *msg,
472121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
473121936Sharti    struct unicx *cx)
474121936Sharti{
475121936Sharti	u_int i;
476121936Sharti
477121936Sharti	switch (ie) {
478121936Sharti
479121936Sharti	  case UNI_IE_AAL:
480121936Sharti		out->aal.h = *hdr;
481121936Sharti		if (hdr->present & UNI_IE_ERROR)
482121936Sharti			return (DEC_ERR);
483121936Sharti		if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
484121936Sharti			return (DEC_ERR);
485121936Sharti		break;
486121936Sharti
487121936Sharti	  case UNI_IE_BLLI:
488121936Sharti		out->blli.h = *hdr;
489121936Sharti		if (hdr->present & UNI_IE_ERROR)
490121936Sharti			return (DEC_ERR);
491121936Sharti		if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli, msg, ielen, cx))
492121936Sharti			return (DEC_ERR);
493121936Sharti		break;
494121936Sharti
495121936Sharti	  case UNI_IE_CONNID:
496121936Sharti		if (!(!cx->pnni))
497121936Sharti			return (DEC_ILL);
498121936Sharti		out->connid.h = *hdr;
499121936Sharti		if (hdr->present & UNI_IE_ERROR)
500121936Sharti			return (DEC_ERR);
501121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
502121936Sharti			return (DEC_ERR);
503121936Sharti		break;
504121936Sharti
505121936Sharti	  case UNI_IE_EPREF:
506121936Sharti		out->epref.h = *hdr;
507121936Sharti		if (hdr->present & UNI_IE_ERROR)
508121936Sharti			return (DEC_ERR);
509121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
510121936Sharti			return (DEC_ERR);
511121936Sharti		break;
512121936Sharti
513121936Sharti	  case UNI_IE_NOTIFY:
514121936Sharti		out->notify.h = *hdr;
515121936Sharti		if (hdr->present & UNI_IE_ERROR)
516121936Sharti			return (DEC_ERR);
517121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
518121936Sharti			return (DEC_ERR);
519121936Sharti		break;
520121936Sharti
521121936Sharti	  case UNI_IE_CONNED:
522121936Sharti		out->conned.h = *hdr;
523121936Sharti		if (hdr->present & UNI_IE_ERROR)
524121936Sharti			return (DEC_ERR);
525121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNED, (union uni_ieall *)&out->conned, msg, ielen, cx))
526121936Sharti			return (DEC_ERR);
527121936Sharti		break;
528121936Sharti
529121936Sharti	  case UNI_IE_CONNEDSUB:
530121936Sharti		out->connedsub.h = *hdr;
531121936Sharti		if (hdr->present & UNI_IE_ERROR)
532121936Sharti			return (DEC_ERR);
533121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNEDSUB, (union uni_ieall *)&out->connedsub, msg, ielen, cx))
534121936Sharti			return (DEC_ERR);
535121936Sharti		break;
536121936Sharti
537121936Sharti	  case UNI_IE_EETD:
538121936Sharti		out->eetd.h = *hdr;
539121936Sharti		if (hdr->present & UNI_IE_ERROR)
540121936Sharti			return (DEC_ERR);
541121936Sharti		if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
542121936Sharti			return (DEC_ERR);
543121936Sharti		break;
544121936Sharti
545121936Sharti	  case UNI_IE_GIT:
546121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
547121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
548121936Sharti				out->git[i].h = *hdr;
549121936Sharti				if (hdr->present & UNI_IE_ERROR)
550121936Sharti					return (DEC_ERR);
551121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
552121936Sharti					return (DEC_ERR);
553121936Sharti				break;
554121936Sharti			}
555121936Sharti		break;
556121936Sharti
557121936Sharti	  case UNI_IE_UU:
558121936Sharti		if (!(!cx->pnni))
559121936Sharti			return (DEC_ILL);
560121936Sharti		out->uu.h = *hdr;
561121936Sharti		if (hdr->present & UNI_IE_ERROR)
562121936Sharti			return (DEC_ERR);
563121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
564121936Sharti			return (DEC_ERR);
565121936Sharti		break;
566121936Sharti
567121936Sharti	  case UNI_IE_TRAFFIC:
568121936Sharti		out->traffic.h = *hdr;
569121936Sharti		if (hdr->present & UNI_IE_ERROR)
570121936Sharti			return (DEC_ERR);
571121936Sharti		if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
572121936Sharti			return (DEC_ERR);
573121936Sharti		break;
574121936Sharti
575121936Sharti	  case UNI_IE_EXQOS:
576121936Sharti		out->exqos.h = *hdr;
577121936Sharti		if (hdr->present & UNI_IE_ERROR)
578121936Sharti			return (DEC_ERR);
579121936Sharti		if(uni_decode_ie_body(UNI_IE_EXQOS, (union uni_ieall *)&out->exqos, msg, ielen, cx))
580121936Sharti			return (DEC_ERR);
581121936Sharti		break;
582121936Sharti
583121936Sharti	  case UNI_IE_FACILITY:
584121936Sharti		if (!(cx->q2932))
585121936Sharti			return (DEC_ILL);
586121936Sharti		out->facility.h = *hdr;
587121936Sharti		if (hdr->present & UNI_IE_ERROR)
588121936Sharti			return (DEC_ERR);
589121936Sharti		if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
590121936Sharti			return (DEC_ERR);
591121936Sharti		break;
592121936Sharti
593121936Sharti	  case UNI_IE_ABRSETUP:
594121936Sharti		out->abrsetup.h = *hdr;
595121936Sharti		if (hdr->present & UNI_IE_ERROR)
596121936Sharti			return (DEC_ERR);
597121936Sharti		if(uni_decode_ie_body(UNI_IE_ABRSETUP, (union uni_ieall *)&out->abrsetup, msg, ielen, cx))
598121936Sharti			return (DEC_ERR);
599121936Sharti		break;
600121936Sharti
601121936Sharti	  case UNI_IE_ABRADD:
602121936Sharti		out->abradd.h = *hdr;
603121936Sharti		if (hdr->present & UNI_IE_ERROR)
604121936Sharti			return (DEC_ERR);
605121936Sharti		if(uni_decode_ie_body(UNI_IE_ABRADD, (union uni_ieall *)&out->abradd, msg, ielen, cx))
606121936Sharti			return (DEC_ERR);
607121936Sharti		break;
608121936Sharti
609121936Sharti	  case UNI_IE_CALLED_SOFT:
610121936Sharti		if (!(cx->pnni))
611121936Sharti			return (DEC_ILL);
612121936Sharti		out->called_soft.h = *hdr;
613121936Sharti		if (hdr->present & UNI_IE_ERROR)
614121936Sharti			return (DEC_ERR);
615121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
616121936Sharti			return (DEC_ERR);
617121936Sharti		break;
618121936Sharti
619121936Sharti	  case UNI_IE_REPORT:
620121936Sharti		if (!(!cx->pnni))
621121936Sharti			return (DEC_ILL);
622121936Sharti		out->report.h = *hdr;
623121936Sharti		if (hdr->present & UNI_IE_ERROR)
624121936Sharti			return (DEC_ERR);
625121936Sharti		if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
626121936Sharti			return (DEC_ERR);
627121936Sharti		break;
628121936Sharti
629121936Sharti	  case UNI_IE_UNREC:
630121936Sharti		out->unrec.h = *hdr;
631121936Sharti		if (hdr->present & UNI_IE_ERROR)
632121936Sharti			return (DEC_ERR);
633121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
634121936Sharti			return (DEC_ERR);
635121936Sharti		break;
636121936Sharti
637121936Sharti	  default:
638121936Sharti		return (DEC_ILL);
639121936Sharti	}
640121936Sharti	return (DEC_OK);
641121936Sharti}
642121936Sharti
643121936Shartistatic const struct msgdecl decl_connect = {
644121936Sharti	0,
645121936Sharti	"connect",
646121936Sharti	(uni_msg_print_f)print_connect,
647121936Sharti	(uni_msg_check_f)check_connect,
648121936Sharti	(uni_msg_encode_f)encode_connect,
649121936Sharti	(uni_msg_decode_f)decode_connect
650121936Sharti};
651121936Sharti
652121936Shartistatic void
653121936Shartiprint_connect_ack(struct uni_connect_ack *msg, struct unicx *cx)
654121936Sharti{
655121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
656121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
657121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
658121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
659121936Sharti}
660121936Sharti
661121936Shartistatic int
662121936Sharticheck_connect_ack(struct uni_connect_ack *m, struct unicx *cx)
663121936Sharti{
664121936Sharti	int ret = 0;
665121936Sharti
666121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
667121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
668121936Sharti
669121936Sharti	return ret;
670121936Sharti}
671121936Sharti
672121936Shartistatic int
673121936Shartiencode_connect_ack(struct uni_msg *msg, struct uni_connect_ack *p, struct unicx *cx)
674121936Sharti{
675121936Sharti	u_int mlen;
676121936Sharti
677121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CONNECT_ACK, cx, &mlen))
678121936Sharti		return (-2);
679121936Sharti
680121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
681121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
682121936Sharti		return (UNI_IE_NOTIFY);
683121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
684121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
685121936Sharti		return (UNI_IE_UNREC);
686121936Sharti
687121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
688121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
689121936Sharti
690121936Sharti	return (0);
691121936Sharti}
692121936Sharti
693121936Shartistatic int
694121936Shartidecode_connect_ack(struct uni_connect_ack *out, struct uni_msg *msg,
695121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
696121936Sharti    struct unicx *cx)
697121936Sharti{
698121936Sharti	switch (ie) {
699121936Sharti
700121936Sharti	  case UNI_IE_NOTIFY:
701121936Sharti		out->notify.h = *hdr;
702121936Sharti		if (hdr->present & UNI_IE_ERROR)
703121936Sharti			return (DEC_ERR);
704121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
705121936Sharti			return (DEC_ERR);
706121936Sharti		break;
707121936Sharti
708121936Sharti	  case UNI_IE_UNREC:
709121936Sharti		out->unrec.h = *hdr;
710121936Sharti		if (hdr->present & UNI_IE_ERROR)
711121936Sharti			return (DEC_ERR);
712121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
713121936Sharti			return (DEC_ERR);
714121936Sharti		break;
715121936Sharti
716121936Sharti	  default:
717121936Sharti		return (DEC_ILL);
718121936Sharti	}
719121936Sharti	return (DEC_OK);
720121936Sharti}
721121936Sharti
722121936Shartistatic const struct msgdecl decl_connect_ack = {
723121936Sharti	0,
724121936Sharti	"connect_ack",
725121936Sharti	(uni_msg_print_f)print_connect_ack,
726121936Sharti	(uni_msg_check_f)check_connect_ack,
727121936Sharti	(uni_msg_encode_f)encode_connect_ack,
728121936Sharti	(uni_msg_decode_f)decode_connect_ack
729121936Sharti};
730121936Sharti
731121936Shartistatic void
732121936Shartiprint_release(struct uni_release *msg, struct unicx *cx)
733121936Sharti{
734121936Sharti	u_int i;
735121936Sharti
736121936Sharti	for(i = 0; i < 2; i++)
737121936Sharti		if(msg->cause[i].h.present & UNI_IE_PRESENT)
738121936Sharti			uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause[i], cx);
739121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
740121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
741121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
742121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
743121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
744121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
745121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
746121936Sharti	if(msg->facility.h.present & UNI_IE_PRESENT)
747121936Sharti		uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
748121936Sharti	if(msg->crankback.h.present & UNI_IE_PRESENT)
749121936Sharti		uni_print_ie_internal(UNI_IE_CRANKBACK, (union uni_ieall *)&msg->crankback, cx);
750121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
751121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
752121936Sharti}
753121936Sharti
754121936Shartistatic int
755121936Sharticheck_release(struct uni_release *m, struct unicx *cx)
756121936Sharti{
757121936Sharti	int ret = 0;
758121936Sharti	u_int i;
759121936Sharti
760121936Sharti	for(i = 0; i < 2 ; i++) {
761121936Sharti		ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause[i], cx);
762121936Sharti	}
763121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
764121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
765121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
766121936Sharti	}
767121936Sharti	if(!(!cx->pnni))
768121936Sharti		ret |= IE_ISPRESENT(m->uu);
769121936Sharti	else
770121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
771121936Sharti	if(!(cx->q2932))
772121936Sharti		ret |= IE_ISPRESENT(m->facility);
773121936Sharti	else
774121936Sharti		ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
775121936Sharti	if(!(cx->pnni))
776121936Sharti		ret |= IE_ISPRESENT(m->crankback);
777121936Sharti	else
778121936Sharti		ret |= uni_check_ie(UNI_IE_CRANKBACK, (union uni_ieall *)&m->crankback, cx);
779121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
780121936Sharti
781121936Sharti	return ret;
782121936Sharti}
783121936Sharti
784121936Shartistatic int
785121936Shartiencode_release(struct uni_msg *msg, struct uni_release *p, struct unicx *cx)
786121936Sharti{
787121936Sharti	u_int mlen;
788121936Sharti	u_int i;
789121936Sharti
790121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RELEASE, cx, &mlen))
791121936Sharti		return (-2);
792121936Sharti
793121936Sharti	for(i = 0; i < 2; i++)
794121936Sharti		if((p->cause[i].h.present & UNI_IE_PRESENT) &&
795121936Sharti		   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause[i], cx))
796121936Sharti		return ((i << 16) + UNI_IE_CAUSE);
797121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
798121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
799121936Sharti		return (UNI_IE_NOTIFY);
800121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
801121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
802121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
803121936Sharti		return ((i << 16) + UNI_IE_GIT);
804121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
805121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
806121936Sharti		return (UNI_IE_UU);
807121936Sharti	if((p->facility.h.present & UNI_IE_PRESENT) &&
808121936Sharti	   uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
809121936Sharti		return (UNI_IE_FACILITY);
810121936Sharti	if((p->crankback.h.present & UNI_IE_PRESENT) &&
811121936Sharti	   uni_encode_ie(UNI_IE_CRANKBACK, msg, (union uni_ieall *)&p->crankback, cx))
812121936Sharti		return (UNI_IE_CRANKBACK);
813121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
814121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
815121936Sharti		return (UNI_IE_UNREC);
816121936Sharti
817121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
818121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
819121936Sharti
820121936Sharti	return (0);
821121936Sharti}
822121936Sharti
823121936Shartistatic int
824121936Shartidecode_release(struct uni_release *out, struct uni_msg *msg,
825121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
826121936Sharti    struct unicx *cx)
827121936Sharti{
828121936Sharti	u_int i;
829121936Sharti
830121936Sharti	switch (ie) {
831121936Sharti
832121936Sharti	  case UNI_IE_CAUSE:
833121936Sharti		for(i = 0; i < 2; i++)
834121936Sharti			if (!IE_ISPRESENT(out->cause[i])) {
835121936Sharti				out->cause[i].h = *hdr;
836121936Sharti				if (hdr->present & UNI_IE_ERROR)
837121936Sharti					return (DEC_ERR);
838121936Sharti				if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause[i], msg, ielen, cx))
839121936Sharti					return (DEC_ERR);
840121936Sharti				break;
841121936Sharti			}
842121936Sharti		break;
843121936Sharti
844121936Sharti	  case UNI_IE_NOTIFY:
845121936Sharti		out->notify.h = *hdr;
846121936Sharti		if (hdr->present & UNI_IE_ERROR)
847121936Sharti			return (DEC_ERR);
848121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
849121936Sharti			return (DEC_ERR);
850121936Sharti		break;
851121936Sharti
852121936Sharti	  case UNI_IE_GIT:
853121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
854121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
855121936Sharti				out->git[i].h = *hdr;
856121936Sharti				if (hdr->present & UNI_IE_ERROR)
857121936Sharti					return (DEC_ERR);
858121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
859121936Sharti					return (DEC_ERR);
860121936Sharti				break;
861121936Sharti			}
862121936Sharti		break;
863121936Sharti
864121936Sharti	  case UNI_IE_UU:
865121936Sharti		if (!(!cx->pnni))
866121936Sharti			return (DEC_ILL);
867121936Sharti		out->uu.h = *hdr;
868121936Sharti		if (hdr->present & UNI_IE_ERROR)
869121936Sharti			return (DEC_ERR);
870121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
871121936Sharti			return (DEC_ERR);
872121936Sharti		break;
873121936Sharti
874121936Sharti	  case UNI_IE_FACILITY:
875121936Sharti		if (!(cx->q2932))
876121936Sharti			return (DEC_ILL);
877121936Sharti		out->facility.h = *hdr;
878121936Sharti		if (hdr->present & UNI_IE_ERROR)
879121936Sharti			return (DEC_ERR);
880121936Sharti		if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
881121936Sharti			return (DEC_ERR);
882121936Sharti		break;
883121936Sharti
884121936Sharti	  case UNI_IE_CRANKBACK:
885121936Sharti		if (!(cx->pnni))
886121936Sharti			return (DEC_ILL);
887121936Sharti		out->crankback.h = *hdr;
888121936Sharti		if (hdr->present & UNI_IE_ERROR)
889121936Sharti			return (DEC_ERR);
890121936Sharti		if(uni_decode_ie_body(UNI_IE_CRANKBACK, (union uni_ieall *)&out->crankback, msg, ielen, cx))
891121936Sharti			return (DEC_ERR);
892121936Sharti		break;
893121936Sharti
894121936Sharti	  case UNI_IE_UNREC:
895121936Sharti		out->unrec.h = *hdr;
896121936Sharti		if (hdr->present & UNI_IE_ERROR)
897121936Sharti			return (DEC_ERR);
898121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
899121936Sharti			return (DEC_ERR);
900121936Sharti		break;
901121936Sharti
902121936Sharti	  default:
903121936Sharti		return (DEC_ILL);
904121936Sharti	}
905121936Sharti	return (DEC_OK);
906121936Sharti}
907121936Sharti
908121936Shartistatic const struct msgdecl decl_release = {
909121936Sharti	0,
910121936Sharti	"release",
911121936Sharti	(uni_msg_print_f)print_release,
912121936Sharti	(uni_msg_check_f)check_release,
913121936Sharti	(uni_msg_encode_f)encode_release,
914121936Sharti	(uni_msg_decode_f)decode_release
915121936Sharti};
916121936Sharti
917121936Shartistatic void
918121936Shartiprint_release_compl(struct uni_release_compl *msg, struct unicx *cx)
919121936Sharti{
920121936Sharti	u_int i;
921121936Sharti
922121936Sharti	for(i = 0; i < 2; i++)
923121936Sharti		if(msg->cause[i].h.present & UNI_IE_PRESENT)
924121936Sharti			uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause[i], cx);
925121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
926121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
927121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
928121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
929121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
930121936Sharti	if(msg->crankback.h.present & UNI_IE_PRESENT)
931121936Sharti		uni_print_ie_internal(UNI_IE_CRANKBACK, (union uni_ieall *)&msg->crankback, cx);
932121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
933121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
934121936Sharti}
935121936Sharti
936121936Shartistatic int
937121936Sharticheck_release_compl(struct uni_release_compl *m, struct unicx *cx)
938121936Sharti{
939121936Sharti	int ret = 0;
940121936Sharti	u_int i;
941121936Sharti
942121936Sharti	for(i = 0; i < 2 ; i++) {
943121936Sharti		ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause[i], cx);
944121936Sharti	}
945121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
946121936Sharti		if(!(!cx->pnni))
947121936Sharti			ret |= IE_ISPRESENT(m->git[i]);
948121936Sharti		else
949121936Sharti			ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
950121936Sharti	}
951121936Sharti	if(!(!cx->pnni))
952121936Sharti		ret |= IE_ISPRESENT(m->uu);
953121936Sharti	else
954121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
955121936Sharti	if(!(cx->pnni))
956121936Sharti		ret |= IE_ISPRESENT(m->crankback);
957121936Sharti	else
958121936Sharti		ret |= uni_check_ie(UNI_IE_CRANKBACK, (union uni_ieall *)&m->crankback, cx);
959121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
960121936Sharti
961121936Sharti	return ret;
962121936Sharti}
963121936Sharti
964121936Shartistatic int
965121936Shartiencode_release_compl(struct uni_msg *msg, struct uni_release_compl *p, struct unicx *cx)
966121936Sharti{
967121936Sharti	u_int mlen;
968121936Sharti	u_int i;
969121936Sharti
970121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RELEASE_COMPL, cx, &mlen))
971121936Sharti		return (-2);
972121936Sharti
973121936Sharti	for(i = 0; i < 2; i++)
974121936Sharti		if((p->cause[i].h.present & UNI_IE_PRESENT) &&
975121936Sharti		   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause[i], cx))
976121936Sharti		return ((i << 16) + UNI_IE_CAUSE);
977121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
978121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
979121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
980121936Sharti		return ((i << 16) + UNI_IE_GIT);
981121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
982121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
983121936Sharti		return (UNI_IE_UU);
984121936Sharti	if((p->crankback.h.present & UNI_IE_PRESENT) &&
985121936Sharti	   uni_encode_ie(UNI_IE_CRANKBACK, msg, (union uni_ieall *)&p->crankback, cx))
986121936Sharti		return (UNI_IE_CRANKBACK);
987121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
988121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
989121936Sharti		return (UNI_IE_UNREC);
990121936Sharti
991121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
992121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
993121936Sharti
994121936Sharti	return (0);
995121936Sharti}
996121936Sharti
997121936Shartistatic int
998121936Shartidecode_release_compl(struct uni_release_compl *out, struct uni_msg *msg,
999121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1000121936Sharti    struct unicx *cx)
1001121936Sharti{
1002121936Sharti	u_int i;
1003121936Sharti
1004121936Sharti	switch (ie) {
1005121936Sharti
1006121936Sharti	  case UNI_IE_CAUSE:
1007121936Sharti		for(i = 0; i < 2; i++)
1008121936Sharti			if (!IE_ISPRESENT(out->cause[i])) {
1009121936Sharti				out->cause[i].h = *hdr;
1010121936Sharti				if (hdr->present & UNI_IE_ERROR)
1011121936Sharti					return (DEC_ERR);
1012121936Sharti				if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause[i], msg, ielen, cx))
1013121936Sharti					return (DEC_ERR);
1014121936Sharti				break;
1015121936Sharti			}
1016121936Sharti		break;
1017121936Sharti
1018121936Sharti	  case UNI_IE_GIT:
1019121936Sharti		if (!(!cx->pnni))
1020121936Sharti			return (DEC_ILL);
1021121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
1022121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
1023121936Sharti				out->git[i].h = *hdr;
1024121936Sharti				if (hdr->present & UNI_IE_ERROR)
1025121936Sharti					return (DEC_ERR);
1026121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
1027121936Sharti					return (DEC_ERR);
1028121936Sharti				break;
1029121936Sharti			}
1030121936Sharti		break;
1031121936Sharti
1032121936Sharti	  case UNI_IE_UU:
1033121936Sharti		if (!(!cx->pnni))
1034121936Sharti			return (DEC_ILL);
1035121936Sharti		out->uu.h = *hdr;
1036121936Sharti		if (hdr->present & UNI_IE_ERROR)
1037121936Sharti			return (DEC_ERR);
1038121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
1039121936Sharti			return (DEC_ERR);
1040121936Sharti		break;
1041121936Sharti
1042121936Sharti	  case UNI_IE_CRANKBACK:
1043121936Sharti		if (!(cx->pnni))
1044121936Sharti			return (DEC_ILL);
1045121936Sharti		out->crankback.h = *hdr;
1046121936Sharti		if (hdr->present & UNI_IE_ERROR)
1047121936Sharti			return (DEC_ERR);
1048121936Sharti		if(uni_decode_ie_body(UNI_IE_CRANKBACK, (union uni_ieall *)&out->crankback, msg, ielen, cx))
1049121936Sharti			return (DEC_ERR);
1050121936Sharti		break;
1051121936Sharti
1052121936Sharti	  case UNI_IE_UNREC:
1053121936Sharti		out->unrec.h = *hdr;
1054121936Sharti		if (hdr->present & UNI_IE_ERROR)
1055121936Sharti			return (DEC_ERR);
1056121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1057121936Sharti			return (DEC_ERR);
1058121936Sharti		break;
1059121936Sharti
1060121936Sharti	  default:
1061121936Sharti		return (DEC_ILL);
1062121936Sharti	}
1063121936Sharti	return (DEC_OK);
1064121936Sharti}
1065121936Sharti
1066121936Shartistatic const struct msgdecl decl_release_compl = {
1067121936Sharti	0,
1068121936Sharti	"release_compl",
1069121936Sharti	(uni_msg_print_f)print_release_compl,
1070121936Sharti	(uni_msg_check_f)check_release_compl,
1071121936Sharti	(uni_msg_encode_f)encode_release_compl,
1072121936Sharti	(uni_msg_decode_f)decode_release_compl
1073121936Sharti};
1074121936Sharti
1075121936Shartistatic void
1076121936Shartiprint_setup(struct uni_setup *msg, struct unicx *cx)
1077121936Sharti{
1078121936Sharti	u_int i;
1079121936Sharti
1080121936Sharti	if(msg->aal.h.present & UNI_IE_PRESENT)
1081121936Sharti		uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
1082121936Sharti	if(msg->traffic.h.present & UNI_IE_PRESENT)
1083121936Sharti		uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
1084121936Sharti	if(msg->bearer.h.present & UNI_IE_PRESENT)
1085121936Sharti		uni_print_ie_internal(UNI_IE_BEARER, (union uni_ieall *)&msg->bearer, cx);
1086121936Sharti	if(msg->bhli.h.present & UNI_IE_PRESENT)
1087121936Sharti		uni_print_ie_internal(UNI_IE_BHLI, (union uni_ieall *)&msg->bhli, cx);
1088121936Sharti	if(msg->blli_repeat.h.present & UNI_IE_PRESENT)
1089121936Sharti		uni_print_ie_internal(UNI_IE_REPEAT, (union uni_ieall *)&msg->blli_repeat, cx);
1090121936Sharti	for(i = 0; i < UNI_NUM_IE_BLLI; i++)
1091121936Sharti		if(msg->blli[i].h.present & UNI_IE_PRESENT)
1092121936Sharti			uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli[i], cx);
1093121936Sharti	if(msg->called.h.present & UNI_IE_PRESENT)
1094121936Sharti		uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
1095121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
1096121936Sharti		if(msg->calledsub[i].h.present & UNI_IE_PRESENT)
1097121936Sharti			uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub[i], cx);
1098121936Sharti	if(msg->calling.h.present & UNI_IE_PRESENT)
1099121936Sharti		uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
1100121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
1101121936Sharti		if(msg->callingsub[i].h.present & UNI_IE_PRESENT)
1102121936Sharti			uni_print_ie_internal(UNI_IE_CALLINGSUB, (union uni_ieall *)&msg->callingsub[i], cx);
1103121936Sharti	if(msg->connid.h.present & UNI_IE_PRESENT)
1104121936Sharti		uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
1105121936Sharti	if(msg->qos.h.present & UNI_IE_PRESENT)
1106121936Sharti		uni_print_ie_internal(UNI_IE_QOS, (union uni_ieall *)&msg->qos, cx);
1107121936Sharti	if(msg->eetd.h.present & UNI_IE_PRESENT)
1108121936Sharti		uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
1109121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
1110121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
1111121936Sharti	if(msg->scompl.h.present & UNI_IE_PRESENT)
1112121936Sharti		uni_print_ie_internal(UNI_IE_SCOMPL, (union uni_ieall *)&msg->scompl, cx);
1113121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
1114121936Sharti		if(msg->tns[i].h.present & UNI_IE_PRESENT)
1115121936Sharti			uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
1116121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
1117121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1118121936Sharti	if(msg->atraffic.h.present & UNI_IE_PRESENT)
1119121936Sharti		uni_print_ie_internal(UNI_IE_ATRAFFIC, (union uni_ieall *)&msg->atraffic, cx);
1120121936Sharti	if(msg->mintraffic.h.present & UNI_IE_PRESENT)
1121121936Sharti		uni_print_ie_internal(UNI_IE_MINTRAFFIC, (union uni_ieall *)&msg->mintraffic, cx);
1122121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
1123121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
1124121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
1125121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
1126121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
1127121936Sharti	if(msg->lij_callid.h.present & UNI_IE_PRESENT)
1128121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_CALLID, (union uni_ieall *)&msg->lij_callid, cx);
1129121936Sharti	if(msg->lij_param.h.present & UNI_IE_PRESENT)
1130121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_PARAM, (union uni_ieall *)&msg->lij_param, cx);
1131121936Sharti	if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
1132121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
1133121936Sharti	if(msg->exqos.h.present & UNI_IE_PRESENT)
1134121936Sharti		uni_print_ie_internal(UNI_IE_EXQOS, (union uni_ieall *)&msg->exqos, cx);
1135121936Sharti	if(msg->abrsetup.h.present & UNI_IE_PRESENT)
1136121936Sharti		uni_print_ie_internal(UNI_IE_ABRSETUP, (union uni_ieall *)&msg->abrsetup, cx);
1137121936Sharti	if(msg->abradd.h.present & UNI_IE_PRESENT)
1138121936Sharti		uni_print_ie_internal(UNI_IE_ABRADD, (union uni_ieall *)&msg->abradd, cx);
1139121936Sharti	if(msg->cscope.h.present & UNI_IE_PRESENT)
1140121936Sharti		uni_print_ie_internal(UNI_IE_CSCOPE, (union uni_ieall *)&msg->cscope, cx);
1141121936Sharti	if(msg->calling_soft.h.present & UNI_IE_PRESENT)
1142121936Sharti		uni_print_ie_internal(UNI_IE_CALLING_SOFT, (union uni_ieall *)&msg->calling_soft, cx);
1143121936Sharti	if(msg->called_soft.h.present & UNI_IE_PRESENT)
1144121936Sharti		uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
1145121936Sharti	if(msg->dtl_repeat.h.present & UNI_IE_PRESENT)
1146121936Sharti		uni_print_ie_internal(UNI_IE_REPEAT, (union uni_ieall *)&msg->dtl_repeat, cx);
1147121936Sharti	for(i = 0; i < UNI_NUM_IE_DTL; i++)
1148121936Sharti		if(msg->dtl[i].h.present & UNI_IE_PRESENT)
1149121936Sharti			uni_print_ie_internal(UNI_IE_DTL, (union uni_ieall *)&msg->dtl[i], cx);
1150121936Sharti	if(msg->report.h.present & UNI_IE_PRESENT)
1151121936Sharti		uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
1152121936Sharti	if(msg->mdcr.h.present & UNI_IE_PRESENT)
1153121936Sharti		uni_print_ie_internal(UNI_IE_MDCR, (union uni_ieall *)&msg->mdcr, cx);
1154121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
1155121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1156121936Sharti}
1157121936Sharti
1158121936Shartistatic int
1159121936Sharticheck_setup(struct uni_setup *m, struct unicx *cx)
1160121936Sharti{
1161121936Sharti	int ret = 0;
1162121936Sharti	u_int i;
1163121936Sharti
1164121936Sharti	ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
1165121936Sharti	ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
1166121936Sharti	ret |= uni_check_ie(UNI_IE_BEARER, (union uni_ieall *)&m->bearer, cx);
1167121936Sharti	ret |= uni_check_ie(UNI_IE_BHLI, (union uni_ieall *)&m->bhli, cx);
1168121936Sharti	ret |= uni_check_ie(UNI_IE_REPEAT, (union uni_ieall *)&m->blli_repeat, cx);
1169121936Sharti	for(i = 0; i < UNI_NUM_IE_BLLI ; i++) {
1170121936Sharti		ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli[i], cx);
1171121936Sharti	}
1172121936Sharti	ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
1173121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB ; i++) {
1174121936Sharti		ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub[i], cx);
1175121936Sharti	}
1176121936Sharti	ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
1177121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB ; i++) {
1178121936Sharti		ret |= uni_check_ie(UNI_IE_CALLINGSUB, (union uni_ieall *)&m->callingsub[i], cx);
1179121936Sharti	}
1180121936Sharti	ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
1181121936Sharti	ret |= uni_check_ie(UNI_IE_QOS, (union uni_ieall *)&m->qos, cx);
1182121936Sharti	ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
1183121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
1184121936Sharti	if(!(!cx->pnni))
1185121936Sharti		ret |= IE_ISPRESENT(m->scompl);
1186121936Sharti	else
1187121936Sharti		ret |= uni_check_ie(UNI_IE_SCOMPL, (union uni_ieall *)&m->scompl, cx);
1188121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
1189121936Sharti		ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
1190121936Sharti	}
1191121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1192121936Sharti	ret |= uni_check_ie(UNI_IE_ATRAFFIC, (union uni_ieall *)&m->atraffic, cx);
1193121936Sharti	ret |= uni_check_ie(UNI_IE_MINTRAFFIC, (union uni_ieall *)&m->mintraffic, cx);
1194121936Sharti	if(!(!cx->pnni))
1195121936Sharti		ret |= IE_ISPRESENT(m->uu);
1196121936Sharti	else
1197121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
1198121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
1199121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
1200121936Sharti	}
1201121936Sharti	if(!(!cx->pnni))
1202121936Sharti		ret |= IE_ISPRESENT(m->lij_callid);
1203121936Sharti	else
1204121936Sharti		ret |= uni_check_ie(UNI_IE_LIJ_CALLID, (union uni_ieall *)&m->lij_callid, cx);
1205121936Sharti	if(!(!cx->pnni))
1206121936Sharti		ret |= IE_ISPRESENT(m->lij_param);
1207121936Sharti	else
1208121936Sharti		ret |= uni_check_ie(UNI_IE_LIJ_PARAM, (union uni_ieall *)&m->lij_param, cx);
1209121936Sharti	if(!(!cx->pnni))
1210121936Sharti		ret |= IE_ISPRESENT(m->lij_seqno);
1211121936Sharti	else
1212121936Sharti		ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
1213121936Sharti	ret |= uni_check_ie(UNI_IE_EXQOS, (union uni_ieall *)&m->exqos, cx);
1214121936Sharti	ret |= uni_check_ie(UNI_IE_ABRSETUP, (union uni_ieall *)&m->abrsetup, cx);
1215121936Sharti	ret |= uni_check_ie(UNI_IE_ABRADD, (union uni_ieall *)&m->abradd, cx);
1216121936Sharti	ret |= uni_check_ie(UNI_IE_CSCOPE, (union uni_ieall *)&m->cscope, cx);
1217121936Sharti	if(!(cx->pnni))
1218121936Sharti		ret |= IE_ISPRESENT(m->calling_soft);
1219121936Sharti	else
1220121936Sharti		ret |= uni_check_ie(UNI_IE_CALLING_SOFT, (union uni_ieall *)&m->calling_soft, cx);
1221121936Sharti	if(!(cx->pnni))
1222121936Sharti		ret |= IE_ISPRESENT(m->called_soft);
1223121936Sharti	else
1224121936Sharti		ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
1225121936Sharti	if(!(cx->pnni))
1226121936Sharti		ret |= IE_ISPRESENT(m->dtl_repeat);
1227121936Sharti	else
1228121936Sharti		ret |= uni_check_ie(UNI_IE_REPEAT, (union uni_ieall *)&m->dtl_repeat, cx);
1229121936Sharti	for(i = 0; i < UNI_NUM_IE_DTL ; i++) {
1230121936Sharti		if(!(cx->pnni))
1231121936Sharti			ret |= IE_ISPRESENT(m->dtl[i]);
1232121936Sharti		else
1233121936Sharti			ret |= uni_check_ie(UNI_IE_DTL, (union uni_ieall *)&m->dtl[i], cx);
1234121936Sharti	}
1235121936Sharti	if(!(!cx->pnni))
1236121936Sharti		ret |= IE_ISPRESENT(m->report);
1237121936Sharti	else
1238121936Sharti		ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
1239121936Sharti	ret |= uni_check_ie(UNI_IE_MDCR, (union uni_ieall *)&m->mdcr, cx);
1240121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1241121936Sharti
1242121936Sharti	return ret;
1243121936Sharti}
1244121936Sharti
1245121936Shartistatic int
1246121936Shartiencode_setup(struct uni_msg *msg, struct uni_setup *p, struct unicx *cx)
1247121936Sharti{
1248121936Sharti	u_int mlen;
1249121936Sharti	u_int i;
1250121936Sharti
1251121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_SETUP, cx, &mlen))
1252121936Sharti		return (-2);
1253121936Sharti
1254121936Sharti	if((p->aal.h.present & UNI_IE_PRESENT) &&
1255121936Sharti	   uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
1256121936Sharti		return (UNI_IE_AAL);
1257121936Sharti	if((p->traffic.h.present & UNI_IE_PRESENT) &&
1258121936Sharti	   uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
1259121936Sharti		return (UNI_IE_TRAFFIC);
1260121936Sharti	if((p->bearer.h.present & UNI_IE_PRESENT) &&
1261121936Sharti	   uni_encode_ie(UNI_IE_BEARER, msg, (union uni_ieall *)&p->bearer, cx))
1262121936Sharti		return (UNI_IE_BEARER);
1263121936Sharti	if((p->bhli.h.present & UNI_IE_PRESENT) &&
1264121936Sharti	   uni_encode_ie(UNI_IE_BHLI, msg, (union uni_ieall *)&p->bhli, cx))
1265121936Sharti		return (UNI_IE_BHLI);
1266121936Sharti	if((p->blli_repeat.h.present & UNI_IE_PRESENT) &&
1267121936Sharti	   uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli_repeat, cx))
1268121936Sharti		return (0x10000000 + UNI_IE_BLLI);
1269121936Sharti	for(i = 0; i < UNI_NUM_IE_BLLI; i++)
1270121936Sharti		if((p->blli[i].h.present & UNI_IE_PRESENT) &&
1271121936Sharti		   uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli[i], cx))
1272121936Sharti		return ((i << 16) + UNI_IE_BLLI);
1273121936Sharti	if((p->called.h.present & UNI_IE_PRESENT) &&
1274121936Sharti	   uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
1275121936Sharti		return (UNI_IE_CALLED);
1276121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
1277121936Sharti		if((p->calledsub[i].h.present & UNI_IE_PRESENT) &&
1278121936Sharti		   uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub[i], cx))
1279121936Sharti		return ((i << 16) + UNI_IE_CALLEDSUB);
1280121936Sharti	if((p->calling.h.present & UNI_IE_PRESENT) &&
1281121936Sharti	   uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
1282121936Sharti		return (UNI_IE_CALLING);
1283121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
1284121936Sharti		if((p->callingsub[i].h.present & UNI_IE_PRESENT) &&
1285121936Sharti		   uni_encode_ie(UNI_IE_CALLINGSUB, msg, (union uni_ieall *)&p->callingsub[i], cx))
1286121936Sharti		return ((i << 16) + UNI_IE_CALLINGSUB);
1287121936Sharti	if((p->connid.h.present & UNI_IE_PRESENT) &&
1288121936Sharti	   uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
1289121936Sharti		return (UNI_IE_CONNID);
1290121936Sharti	if((p->qos.h.present & UNI_IE_PRESENT) &&
1291121936Sharti	   uni_encode_ie(UNI_IE_QOS, msg, (union uni_ieall *)&p->qos, cx))
1292121936Sharti		return (UNI_IE_QOS);
1293121936Sharti	if((p->eetd.h.present & UNI_IE_PRESENT) &&
1294121936Sharti	   uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
1295121936Sharti		return (UNI_IE_EETD);
1296121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
1297121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
1298121936Sharti		return (UNI_IE_NOTIFY);
1299121936Sharti	if((p->scompl.h.present & UNI_IE_PRESENT) &&
1300121936Sharti	   uni_encode_ie(UNI_IE_SCOMPL, msg, (union uni_ieall *)&p->scompl, cx))
1301121936Sharti		return (UNI_IE_SCOMPL);
1302121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
1303121936Sharti		if((p->tns[i].h.present & UNI_IE_PRESENT) &&
1304121936Sharti		   uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
1305121936Sharti		return ((i << 16) + UNI_IE_TNS);
1306121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
1307121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1308121936Sharti		return (UNI_IE_EPREF);
1309121936Sharti	if((p->atraffic.h.present & UNI_IE_PRESENT) &&
1310121936Sharti	   uni_encode_ie(UNI_IE_ATRAFFIC, msg, (union uni_ieall *)&p->atraffic, cx))
1311121936Sharti		return (UNI_IE_ATRAFFIC);
1312121936Sharti	if((p->mintraffic.h.present & UNI_IE_PRESENT) &&
1313121936Sharti	   uni_encode_ie(UNI_IE_MINTRAFFIC, msg, (union uni_ieall *)&p->mintraffic, cx))
1314121936Sharti		return (UNI_IE_MINTRAFFIC);
1315121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
1316121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
1317121936Sharti		return (UNI_IE_UU);
1318121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
1319121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
1320121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
1321121936Sharti		return ((i << 16) + UNI_IE_GIT);
1322121936Sharti	if((p->lij_callid.h.present & UNI_IE_PRESENT) &&
1323121936Sharti	   uni_encode_ie(UNI_IE_LIJ_CALLID, msg, (union uni_ieall *)&p->lij_callid, cx))
1324121936Sharti		return (UNI_IE_LIJ_CALLID);
1325121936Sharti	if((p->lij_param.h.present & UNI_IE_PRESENT) &&
1326121936Sharti	   uni_encode_ie(UNI_IE_LIJ_PARAM, msg, (union uni_ieall *)&p->lij_param, cx))
1327121936Sharti		return (UNI_IE_LIJ_PARAM);
1328121936Sharti	if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
1329121936Sharti	   uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
1330121936Sharti		return (UNI_IE_LIJ_SEQNO);
1331121936Sharti	if((p->exqos.h.present & UNI_IE_PRESENT) &&
1332121936Sharti	   uni_encode_ie(UNI_IE_EXQOS, msg, (union uni_ieall *)&p->exqos, cx))
1333121936Sharti		return (UNI_IE_EXQOS);
1334121936Sharti	if((p->abrsetup.h.present & UNI_IE_PRESENT) &&
1335121936Sharti	   uni_encode_ie(UNI_IE_ABRSETUP, msg, (union uni_ieall *)&p->abrsetup, cx))
1336121936Sharti		return (UNI_IE_ABRSETUP);
1337121936Sharti	if((p->abradd.h.present & UNI_IE_PRESENT) &&
1338121936Sharti	   uni_encode_ie(UNI_IE_ABRADD, msg, (union uni_ieall *)&p->abradd, cx))
1339121936Sharti		return (UNI_IE_ABRADD);
1340121936Sharti	if((p->cscope.h.present & UNI_IE_PRESENT) &&
1341121936Sharti	   uni_encode_ie(UNI_IE_CSCOPE, msg, (union uni_ieall *)&p->cscope, cx))
1342121936Sharti		return (UNI_IE_CSCOPE);
1343121936Sharti	if((p->calling_soft.h.present & UNI_IE_PRESENT) &&
1344121936Sharti	   uni_encode_ie(UNI_IE_CALLING_SOFT, msg, (union uni_ieall *)&p->calling_soft, cx))
1345121936Sharti		return (UNI_IE_CALLING_SOFT);
1346121936Sharti	if((p->called_soft.h.present & UNI_IE_PRESENT) &&
1347121936Sharti	   uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
1348121936Sharti		return (UNI_IE_CALLED_SOFT);
1349121936Sharti	if((p->dtl_repeat.h.present & UNI_IE_PRESENT) &&
1350121936Sharti	   uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl_repeat, cx))
1351121936Sharti		return (0x10000000 + UNI_IE_DTL);
1352121936Sharti	for(i = 0; i < UNI_NUM_IE_DTL; i++)
1353121936Sharti		if((p->dtl[i].h.present & UNI_IE_PRESENT) &&
1354121936Sharti		   uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl[i], cx))
1355121936Sharti		return ((i << 16) + UNI_IE_DTL);
1356121936Sharti	if((p->report.h.present & UNI_IE_PRESENT) &&
1357121936Sharti	   uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
1358121936Sharti		return (UNI_IE_REPORT);
1359121936Sharti	if((p->mdcr.h.present & UNI_IE_PRESENT) &&
1360121936Sharti	   uni_encode_ie(UNI_IE_MDCR, msg, (union uni_ieall *)&p->mdcr, cx))
1361121936Sharti		return (UNI_IE_MDCR);
1362121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
1363121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1364121936Sharti		return (UNI_IE_UNREC);
1365121936Sharti
1366121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1367121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1368121936Sharti
1369121936Sharti	return (0);
1370121936Sharti}
1371121936Sharti
1372121936Shartistatic int
1373121936Shartidecode_setup(struct uni_setup *out, struct uni_msg *msg,
1374121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1375121936Sharti    struct unicx *cx)
1376121936Sharti{
1377121936Sharti	u_int i;
1378121936Sharti
1379121936Sharti	switch (ie) {
1380121936Sharti
1381121936Sharti	  case UNI_IE_AAL:
1382121936Sharti		out->aal.h = *hdr;
1383121936Sharti		if (hdr->present & UNI_IE_ERROR)
1384121936Sharti			return (DEC_ERR);
1385121936Sharti		if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
1386121936Sharti			return (DEC_ERR);
1387121936Sharti		break;
1388121936Sharti
1389121936Sharti	  case UNI_IE_TRAFFIC:
1390121936Sharti		out->traffic.h = *hdr;
1391121936Sharti		if (hdr->present & UNI_IE_ERROR)
1392121936Sharti			return (DEC_ERR);
1393121936Sharti		if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
1394121936Sharti			return (DEC_ERR);
1395121936Sharti		break;
1396121936Sharti
1397121936Sharti	  case UNI_IE_BEARER:
1398121936Sharti		out->bearer.h = *hdr;
1399121936Sharti		if (hdr->present & UNI_IE_ERROR)
1400121936Sharti			return (DEC_ERR);
1401121936Sharti		if(uni_decode_ie_body(UNI_IE_BEARER, (union uni_ieall *)&out->bearer, msg, ielen, cx))
1402121936Sharti			return (DEC_ERR);
1403121936Sharti		break;
1404121936Sharti
1405121936Sharti	  case UNI_IE_BHLI:
1406121936Sharti		out->bhli.h = *hdr;
1407121936Sharti		if (hdr->present & UNI_IE_ERROR)
1408121936Sharti			return (DEC_ERR);
1409121936Sharti		if(uni_decode_ie_body(UNI_IE_BHLI, (union uni_ieall *)&out->bhli, msg, ielen, cx))
1410121936Sharti			return (DEC_ERR);
1411121936Sharti		break;
1412121936Sharti
1413121936Sharti	  case UNI_IE_BLLI:
1414121936Sharti		if (IE_ISPRESENT(cx->repeat))
1415121936Sharti			out->blli_repeat = cx->repeat;
1416121936Sharti		for(i = 0; i < UNI_NUM_IE_BLLI; i++)
1417121936Sharti			if (!IE_ISPRESENT(out->blli[i])) {
1418121936Sharti				out->blli[i].h = *hdr;
1419121936Sharti				if (hdr->present & UNI_IE_ERROR)
1420121936Sharti					return (DEC_ERR);
1421121936Sharti				if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli[i], msg, ielen, cx))
1422121936Sharti					return (DEC_ERR);
1423121936Sharti				break;
1424121936Sharti			}
1425121936Sharti		break;
1426121936Sharti
1427121936Sharti	  case UNI_IE_CALLED:
1428121936Sharti		out->called.h = *hdr;
1429121936Sharti		if (hdr->present & UNI_IE_ERROR)
1430121936Sharti			return (DEC_ERR);
1431121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
1432121936Sharti			return (DEC_ERR);
1433121936Sharti		break;
1434121936Sharti
1435121936Sharti	  case UNI_IE_CALLEDSUB:
1436121936Sharti		for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
1437121936Sharti			if (!IE_ISPRESENT(out->calledsub[i])) {
1438121936Sharti				out->calledsub[i].h = *hdr;
1439121936Sharti				if (hdr->present & UNI_IE_ERROR)
1440121936Sharti					return (DEC_ERR);
1441121936Sharti				if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub[i], msg, ielen, cx))
1442121936Sharti					return (DEC_ERR);
1443121936Sharti				break;
1444121936Sharti			}
1445121936Sharti		break;
1446121936Sharti
1447121936Sharti	  case UNI_IE_CALLING:
1448121936Sharti		out->calling.h = *hdr;
1449121936Sharti		if (hdr->present & UNI_IE_ERROR)
1450121936Sharti			return (DEC_ERR);
1451121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
1452121936Sharti			return (DEC_ERR);
1453121936Sharti		break;
1454121936Sharti
1455121936Sharti	  case UNI_IE_CALLINGSUB:
1456121936Sharti		for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
1457121936Sharti			if (!IE_ISPRESENT(out->callingsub[i])) {
1458121936Sharti				out->callingsub[i].h = *hdr;
1459121936Sharti				if (hdr->present & UNI_IE_ERROR)
1460121936Sharti					return (DEC_ERR);
1461121936Sharti				if(uni_decode_ie_body(UNI_IE_CALLINGSUB, (union uni_ieall *)&out->callingsub[i], msg, ielen, cx))
1462121936Sharti					return (DEC_ERR);
1463121936Sharti				break;
1464121936Sharti			}
1465121936Sharti		break;
1466121936Sharti
1467121936Sharti	  case UNI_IE_CONNID:
1468121936Sharti		out->connid.h = *hdr;
1469121936Sharti		if (hdr->present & UNI_IE_ERROR)
1470121936Sharti			return (DEC_ERR);
1471121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
1472121936Sharti			return (DEC_ERR);
1473121936Sharti		break;
1474121936Sharti
1475121936Sharti	  case UNI_IE_QOS:
1476121936Sharti		out->qos.h = *hdr;
1477121936Sharti		if (hdr->present & UNI_IE_ERROR)
1478121936Sharti			return (DEC_ERR);
1479121936Sharti		if(uni_decode_ie_body(UNI_IE_QOS, (union uni_ieall *)&out->qos, msg, ielen, cx))
1480121936Sharti			return (DEC_ERR);
1481121936Sharti		break;
1482121936Sharti
1483121936Sharti	  case UNI_IE_EETD:
1484121936Sharti		out->eetd.h = *hdr;
1485121936Sharti		if (hdr->present & UNI_IE_ERROR)
1486121936Sharti			return (DEC_ERR);
1487121936Sharti		if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
1488121936Sharti			return (DEC_ERR);
1489121936Sharti		break;
1490121936Sharti
1491121936Sharti	  case UNI_IE_NOTIFY:
1492121936Sharti		out->notify.h = *hdr;
1493121936Sharti		if (hdr->present & UNI_IE_ERROR)
1494121936Sharti			return (DEC_ERR);
1495121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
1496121936Sharti			return (DEC_ERR);
1497121936Sharti		break;
1498121936Sharti
1499121936Sharti	  case UNI_IE_SCOMPL:
1500121936Sharti		if (!(!cx->pnni))
1501121936Sharti			return (DEC_ILL);
1502121936Sharti		out->scompl.h = *hdr;
1503121936Sharti		if (hdr->present & UNI_IE_ERROR)
1504121936Sharti			return (DEC_ERR);
1505121936Sharti		if(uni_decode_ie_body(UNI_IE_SCOMPL, (union uni_ieall *)&out->scompl, msg, ielen, cx))
1506121936Sharti			return (DEC_ERR);
1507121936Sharti		break;
1508121936Sharti
1509121936Sharti	  case UNI_IE_TNS:
1510121936Sharti		for(i = 0; i < UNI_NUM_IE_TNS; i++)
1511121936Sharti			if (!IE_ISPRESENT(out->tns[i])) {
1512121936Sharti				out->tns[i].h = *hdr;
1513121936Sharti				if (hdr->present & UNI_IE_ERROR)
1514121936Sharti					return (DEC_ERR);
1515121936Sharti				if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
1516121936Sharti					return (DEC_ERR);
1517121936Sharti				break;
1518121936Sharti			}
1519121936Sharti		break;
1520121936Sharti
1521121936Sharti	  case UNI_IE_EPREF:
1522121936Sharti		out->epref.h = *hdr;
1523121936Sharti		if (hdr->present & UNI_IE_ERROR)
1524121936Sharti			return (DEC_ERR);
1525121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1526121936Sharti			return (DEC_ERR);
1527121936Sharti		break;
1528121936Sharti
1529121936Sharti	  case UNI_IE_ATRAFFIC:
1530121936Sharti		out->atraffic.h = *hdr;
1531121936Sharti		if (hdr->present & UNI_IE_ERROR)
1532121936Sharti			return (DEC_ERR);
1533121936Sharti		if(uni_decode_ie_body(UNI_IE_ATRAFFIC, (union uni_ieall *)&out->atraffic, msg, ielen, cx))
1534121936Sharti			return (DEC_ERR);
1535121936Sharti		break;
1536121936Sharti
1537121936Sharti	  case UNI_IE_MINTRAFFIC:
1538121936Sharti		out->mintraffic.h = *hdr;
1539121936Sharti		if (hdr->present & UNI_IE_ERROR)
1540121936Sharti			return (DEC_ERR);
1541121936Sharti		if(uni_decode_ie_body(UNI_IE_MINTRAFFIC, (union uni_ieall *)&out->mintraffic, msg, ielen, cx))
1542121936Sharti			return (DEC_ERR);
1543121936Sharti		break;
1544121936Sharti
1545121936Sharti	  case UNI_IE_UU:
1546121936Sharti		if (!(!cx->pnni))
1547121936Sharti			return (DEC_ILL);
1548121936Sharti		out->uu.h = *hdr;
1549121936Sharti		if (hdr->present & UNI_IE_ERROR)
1550121936Sharti			return (DEC_ERR);
1551121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
1552121936Sharti			return (DEC_ERR);
1553121936Sharti		break;
1554121936Sharti
1555121936Sharti	  case UNI_IE_GIT:
1556121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
1557121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
1558121936Sharti				out->git[i].h = *hdr;
1559121936Sharti				if (hdr->present & UNI_IE_ERROR)
1560121936Sharti					return (DEC_ERR);
1561121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
1562121936Sharti					return (DEC_ERR);
1563121936Sharti				break;
1564121936Sharti			}
1565121936Sharti		break;
1566121936Sharti
1567121936Sharti	  case UNI_IE_LIJ_CALLID:
1568121936Sharti		if (!(!cx->pnni))
1569121936Sharti			return (DEC_ILL);
1570121936Sharti		out->lij_callid.h = *hdr;
1571121936Sharti		if (hdr->present & UNI_IE_ERROR)
1572121936Sharti			return (DEC_ERR);
1573121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_CALLID, (union uni_ieall *)&out->lij_callid, msg, ielen, cx))
1574121936Sharti			return (DEC_ERR);
1575121936Sharti		break;
1576121936Sharti
1577121936Sharti	  case UNI_IE_LIJ_PARAM:
1578121936Sharti		if (!(!cx->pnni))
1579121936Sharti			return (DEC_ILL);
1580121936Sharti		out->lij_param.h = *hdr;
1581121936Sharti		if (hdr->present & UNI_IE_ERROR)
1582121936Sharti			return (DEC_ERR);
1583121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_PARAM, (union uni_ieall *)&out->lij_param, msg, ielen, cx))
1584121936Sharti			return (DEC_ERR);
1585121936Sharti		break;
1586121936Sharti
1587121936Sharti	  case UNI_IE_LIJ_SEQNO:
1588121936Sharti		if (!(!cx->pnni))
1589121936Sharti			return (DEC_ILL);
1590121936Sharti		out->lij_seqno.h = *hdr;
1591121936Sharti		if (hdr->present & UNI_IE_ERROR)
1592121936Sharti			return (DEC_ERR);
1593121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
1594121936Sharti			return (DEC_ERR);
1595121936Sharti		break;
1596121936Sharti
1597121936Sharti	  case UNI_IE_EXQOS:
1598121936Sharti		out->exqos.h = *hdr;
1599121936Sharti		if (hdr->present & UNI_IE_ERROR)
1600121936Sharti			return (DEC_ERR);
1601121936Sharti		if(uni_decode_ie_body(UNI_IE_EXQOS, (union uni_ieall *)&out->exqos, msg, ielen, cx))
1602121936Sharti			return (DEC_ERR);
1603121936Sharti		break;
1604121936Sharti
1605121936Sharti	  case UNI_IE_ABRSETUP:
1606121936Sharti		out->abrsetup.h = *hdr;
1607121936Sharti		if (hdr->present & UNI_IE_ERROR)
1608121936Sharti			return (DEC_ERR);
1609121936Sharti		if(uni_decode_ie_body(UNI_IE_ABRSETUP, (union uni_ieall *)&out->abrsetup, msg, ielen, cx))
1610121936Sharti			return (DEC_ERR);
1611121936Sharti		break;
1612121936Sharti
1613121936Sharti	  case UNI_IE_ABRADD:
1614121936Sharti		out->abradd.h = *hdr;
1615121936Sharti		if (hdr->present & UNI_IE_ERROR)
1616121936Sharti			return (DEC_ERR);
1617121936Sharti		if(uni_decode_ie_body(UNI_IE_ABRADD, (union uni_ieall *)&out->abradd, msg, ielen, cx))
1618121936Sharti			return (DEC_ERR);
1619121936Sharti		break;
1620121936Sharti
1621121936Sharti	  case UNI_IE_CSCOPE:
1622121936Sharti		out->cscope.h = *hdr;
1623121936Sharti		if (hdr->present & UNI_IE_ERROR)
1624121936Sharti			return (DEC_ERR);
1625121936Sharti		if(uni_decode_ie_body(UNI_IE_CSCOPE, (union uni_ieall *)&out->cscope, msg, ielen, cx))
1626121936Sharti			return (DEC_ERR);
1627121936Sharti		break;
1628121936Sharti
1629121936Sharti	  case UNI_IE_CALLING_SOFT:
1630121936Sharti		if (!(cx->pnni))
1631121936Sharti			return (DEC_ILL);
1632121936Sharti		out->calling_soft.h = *hdr;
1633121936Sharti		if (hdr->present & UNI_IE_ERROR)
1634121936Sharti			return (DEC_ERR);
1635121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING_SOFT, (union uni_ieall *)&out->calling_soft, msg, ielen, cx))
1636121936Sharti			return (DEC_ERR);
1637121936Sharti		break;
1638121936Sharti
1639121936Sharti	  case UNI_IE_CALLED_SOFT:
1640121936Sharti		if (!(cx->pnni))
1641121936Sharti			return (DEC_ILL);
1642121936Sharti		out->called_soft.h = *hdr;
1643121936Sharti		if (hdr->present & UNI_IE_ERROR)
1644121936Sharti			return (DEC_ERR);
1645121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
1646121936Sharti			return (DEC_ERR);
1647121936Sharti		break;
1648121936Sharti
1649121936Sharti	  case UNI_IE_DTL:
1650121936Sharti		if (!(cx->pnni))
1651121936Sharti			return (DEC_ILL);
1652121936Sharti		if (IE_ISPRESENT(cx->repeat))
1653121936Sharti			out->dtl_repeat = cx->repeat;
1654121936Sharti		for(i = 0; i < UNI_NUM_IE_DTL; i++)
1655121936Sharti			if (!IE_ISPRESENT(out->dtl[i])) {
1656121936Sharti				out->dtl[i].h = *hdr;
1657121936Sharti				if (hdr->present & UNI_IE_ERROR)
1658121936Sharti					return (DEC_ERR);
1659121936Sharti				if(uni_decode_ie_body(UNI_IE_DTL, (union uni_ieall *)&out->dtl[i], msg, ielen, cx))
1660121936Sharti					return (DEC_ERR);
1661121936Sharti				break;
1662121936Sharti			}
1663121936Sharti		break;
1664121936Sharti
1665121936Sharti	  case UNI_IE_REPORT:
1666121936Sharti		if (!(!cx->pnni))
1667121936Sharti			return (DEC_ILL);
1668121936Sharti		out->report.h = *hdr;
1669121936Sharti		if (hdr->present & UNI_IE_ERROR)
1670121936Sharti			return (DEC_ERR);
1671121936Sharti		if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
1672121936Sharti			return (DEC_ERR);
1673121936Sharti		break;
1674121936Sharti
1675121936Sharti	  case UNI_IE_MDCR:
1676121936Sharti		out->mdcr.h = *hdr;
1677121936Sharti		if (hdr->present & UNI_IE_ERROR)
1678121936Sharti			return (DEC_ERR);
1679121936Sharti		if(uni_decode_ie_body(UNI_IE_MDCR, (union uni_ieall *)&out->mdcr, msg, ielen, cx))
1680121936Sharti			return (DEC_ERR);
1681121936Sharti		break;
1682121936Sharti
1683121936Sharti	  case UNI_IE_UNREC:
1684121936Sharti		out->unrec.h = *hdr;
1685121936Sharti		if (hdr->present & UNI_IE_ERROR)
1686121936Sharti			return (DEC_ERR);
1687121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1688121936Sharti			return (DEC_ERR);
1689121936Sharti		break;
1690121936Sharti
1691121936Sharti	  case UNI_IE_REPEAT:
1692121936Sharti		cx->repeat.h = *hdr;
1693121936Sharti		if (hdr->present & UNI_IE_ERROR)
1694121936Sharti			return (DEC_ERR);
1695121936Sharti		if (uni_decode_ie_body(UNI_IE_REPEAT, (union uni_ieall *)&cx->repeat, msg, ielen, cx))
1696121936Sharti			return (DEC_ERR);
1697121936Sharti		break;
1698121936Sharti
1699121936Sharti	  default:
1700121936Sharti		return (DEC_ILL);
1701121936Sharti	}
1702121936Sharti	return (DEC_OK);
1703121936Sharti}
1704121936Sharti
1705121936Shartistatic const struct msgdecl decl_setup = {
1706121936Sharti	0,
1707121936Sharti	"setup",
1708121936Sharti	(uni_msg_print_f)print_setup,
1709121936Sharti	(uni_msg_check_f)check_setup,
1710121936Sharti	(uni_msg_encode_f)encode_setup,
1711121936Sharti	(uni_msg_decode_f)decode_setup
1712121936Sharti};
1713121936Sharti
1714121936Shartistatic void
1715121936Shartiprint_status(struct uni_status *msg, struct unicx *cx)
1716121936Sharti{
1717121936Sharti	if(msg->callstate.h.present & UNI_IE_PRESENT)
1718121936Sharti		uni_print_ie_internal(UNI_IE_CALLSTATE, (union uni_ieall *)&msg->callstate, cx);
1719121936Sharti	if(msg->cause.h.present & UNI_IE_PRESENT)
1720121936Sharti		uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
1721121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
1722121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1723121936Sharti	if(msg->epstate.h.present & UNI_IE_PRESENT)
1724121936Sharti		uni_print_ie_internal(UNI_IE_EPSTATE, (union uni_ieall *)&msg->epstate, cx);
1725121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
1726121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1727121936Sharti}
1728121936Sharti
1729121936Shartistatic int
1730121936Sharticheck_status(struct uni_status *m, struct unicx *cx)
1731121936Sharti{
1732121936Sharti	int ret = 0;
1733121936Sharti
1734121936Sharti	ret |= uni_check_ie(UNI_IE_CALLSTATE, (union uni_ieall *)&m->callstate, cx);
1735121936Sharti	ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
1736121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1737121936Sharti	ret |= uni_check_ie(UNI_IE_EPSTATE, (union uni_ieall *)&m->epstate, cx);
1738121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1739121936Sharti
1740121936Sharti	return ret;
1741121936Sharti}
1742121936Sharti
1743121936Shartistatic int
1744121936Shartiencode_status(struct uni_msg *msg, struct uni_status *p, struct unicx *cx)
1745121936Sharti{
1746121936Sharti	u_int mlen;
1747121936Sharti
1748121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_STATUS, cx, &mlen))
1749121936Sharti		return (-2);
1750121936Sharti
1751121936Sharti	if((p->callstate.h.present & UNI_IE_PRESENT) &&
1752121936Sharti	   uni_encode_ie(UNI_IE_CALLSTATE, msg, (union uni_ieall *)&p->callstate, cx))
1753121936Sharti		return (UNI_IE_CALLSTATE);
1754121936Sharti	if((p->cause.h.present & UNI_IE_PRESENT) &&
1755121936Sharti	   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
1756121936Sharti		return (UNI_IE_CAUSE);
1757121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
1758121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1759121936Sharti		return (UNI_IE_EPREF);
1760121936Sharti	if((p->epstate.h.present & UNI_IE_PRESENT) &&
1761121936Sharti	   uni_encode_ie(UNI_IE_EPSTATE, msg, (union uni_ieall *)&p->epstate, cx))
1762121936Sharti		return (UNI_IE_EPSTATE);
1763121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
1764121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1765121936Sharti		return (UNI_IE_UNREC);
1766121936Sharti
1767121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1768121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1769121936Sharti
1770121936Sharti	return (0);
1771121936Sharti}
1772121936Sharti
1773121936Shartistatic int
1774121936Shartidecode_status(struct uni_status *out, struct uni_msg *msg,
1775121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1776121936Sharti    struct unicx *cx)
1777121936Sharti{
1778121936Sharti	switch (ie) {
1779121936Sharti
1780121936Sharti	  case UNI_IE_CALLSTATE:
1781121936Sharti		out->callstate.h = *hdr;
1782121936Sharti		if (hdr->present & UNI_IE_ERROR)
1783121936Sharti			return (DEC_ERR);
1784121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLSTATE, (union uni_ieall *)&out->callstate, msg, ielen, cx))
1785121936Sharti			return (DEC_ERR);
1786121936Sharti		break;
1787121936Sharti
1788121936Sharti	  case UNI_IE_CAUSE:
1789121936Sharti		out->cause.h = *hdr;
1790121936Sharti		if (hdr->present & UNI_IE_ERROR)
1791121936Sharti			return (DEC_ERR);
1792121936Sharti		if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
1793121936Sharti			return (DEC_ERR);
1794121936Sharti		break;
1795121936Sharti
1796121936Sharti	  case UNI_IE_EPREF:
1797121936Sharti		out->epref.h = *hdr;
1798121936Sharti		if (hdr->present & UNI_IE_ERROR)
1799121936Sharti			return (DEC_ERR);
1800121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1801121936Sharti			return (DEC_ERR);
1802121936Sharti		break;
1803121936Sharti
1804121936Sharti	  case UNI_IE_EPSTATE:
1805121936Sharti		out->epstate.h = *hdr;
1806121936Sharti		if (hdr->present & UNI_IE_ERROR)
1807121936Sharti			return (DEC_ERR);
1808121936Sharti		if(uni_decode_ie_body(UNI_IE_EPSTATE, (union uni_ieall *)&out->epstate, msg, ielen, cx))
1809121936Sharti			return (DEC_ERR);
1810121936Sharti		break;
1811121936Sharti
1812121936Sharti	  case UNI_IE_UNREC:
1813121936Sharti		out->unrec.h = *hdr;
1814121936Sharti		if (hdr->present & UNI_IE_ERROR)
1815121936Sharti			return (DEC_ERR);
1816121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1817121936Sharti			return (DEC_ERR);
1818121936Sharti		break;
1819121936Sharti
1820121936Sharti	  default:
1821121936Sharti		return (DEC_ILL);
1822121936Sharti	}
1823121936Sharti	return (DEC_OK);
1824121936Sharti}
1825121936Sharti
1826121936Shartistatic const struct msgdecl decl_status = {
1827121936Sharti	0,
1828121936Sharti	"status",
1829121936Sharti	(uni_msg_print_f)print_status,
1830121936Sharti	(uni_msg_check_f)check_status,
1831121936Sharti	(uni_msg_encode_f)encode_status,
1832121936Sharti	(uni_msg_decode_f)decode_status
1833121936Sharti};
1834121936Sharti
1835121936Shartistatic void
1836121936Shartiprint_status_enq(struct uni_status_enq *msg, struct unicx *cx)
1837121936Sharti{
1838121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
1839121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1840121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
1841121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1842121936Sharti}
1843121936Sharti
1844121936Shartistatic int
1845121936Sharticheck_status_enq(struct uni_status_enq *m, struct unicx *cx)
1846121936Sharti{
1847121936Sharti	int ret = 0;
1848121936Sharti
1849121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1850121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1851121936Sharti
1852121936Sharti	return ret;
1853121936Sharti}
1854121936Sharti
1855121936Shartistatic int
1856121936Shartiencode_status_enq(struct uni_msg *msg, struct uni_status_enq *p, struct unicx *cx)
1857121936Sharti{
1858121936Sharti	u_int mlen;
1859121936Sharti
1860121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_STATUS_ENQ, cx, &mlen))
1861121936Sharti		return (-2);
1862121936Sharti
1863121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
1864121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1865121936Sharti		return (UNI_IE_EPREF);
1866121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
1867121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1868121936Sharti		return (UNI_IE_UNREC);
1869121936Sharti
1870121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1871121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1872121936Sharti
1873121936Sharti	return (0);
1874121936Sharti}
1875121936Sharti
1876121936Shartistatic int
1877121936Shartidecode_status_enq(struct uni_status_enq *out, struct uni_msg *msg,
1878121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1879121936Sharti    struct unicx *cx)
1880121936Sharti{
1881121936Sharti	switch (ie) {
1882121936Sharti
1883121936Sharti	  case UNI_IE_EPREF:
1884121936Sharti		out->epref.h = *hdr;
1885121936Sharti		if (hdr->present & UNI_IE_ERROR)
1886121936Sharti			return (DEC_ERR);
1887121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1888121936Sharti			return (DEC_ERR);
1889121936Sharti		break;
1890121936Sharti
1891121936Sharti	  case UNI_IE_UNREC:
1892121936Sharti		out->unrec.h = *hdr;
1893121936Sharti		if (hdr->present & UNI_IE_ERROR)
1894121936Sharti			return (DEC_ERR);
1895121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1896121936Sharti			return (DEC_ERR);
1897121936Sharti		break;
1898121936Sharti
1899121936Sharti	  default:
1900121936Sharti		return (DEC_ILL);
1901121936Sharti	}
1902121936Sharti	return (DEC_OK);
1903121936Sharti}
1904121936Sharti
1905121936Shartistatic const struct msgdecl decl_status_enq = {
1906121936Sharti	0,
1907121936Sharti	"status_enq",
1908121936Sharti	(uni_msg_print_f)print_status_enq,
1909121936Sharti	(uni_msg_check_f)check_status_enq,
1910121936Sharti	(uni_msg_encode_f)encode_status_enq,
1911121936Sharti	(uni_msg_decode_f)decode_status_enq
1912121936Sharti};
1913121936Sharti
1914121936Shartistatic void
1915121936Shartiprint_notify(struct uni_notify *msg, struct unicx *cx)
1916121936Sharti{
1917121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
1918121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
1919121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
1920121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1921121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
1922121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1923121936Sharti}
1924121936Sharti
1925121936Shartistatic int
1926121936Sharticheck_notify(struct uni_notify *m, struct unicx *cx)
1927121936Sharti{
1928121936Sharti	int ret = 0;
1929121936Sharti
1930121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
1931121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1932121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1933121936Sharti
1934121936Sharti	return ret;
1935121936Sharti}
1936121936Sharti
1937121936Shartistatic int
1938121936Shartiencode_notify(struct uni_msg *msg, struct uni_notify *p, struct unicx *cx)
1939121936Sharti{
1940121936Sharti	u_int mlen;
1941121936Sharti
1942121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_NOTIFY, cx, &mlen))
1943121936Sharti		return (-2);
1944121936Sharti
1945121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
1946121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
1947121936Sharti		return (UNI_IE_NOTIFY);
1948121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
1949121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1950121936Sharti		return (UNI_IE_EPREF);
1951121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
1952121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1953121936Sharti		return (UNI_IE_UNREC);
1954121936Sharti
1955121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1956121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1957121936Sharti
1958121936Sharti	return (0);
1959121936Sharti}
1960121936Sharti
1961121936Shartistatic int
1962121936Shartidecode_notify(struct uni_notify *out, struct uni_msg *msg,
1963121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1964121936Sharti    struct unicx *cx)
1965121936Sharti{
1966121936Sharti	switch (ie) {
1967121936Sharti
1968121936Sharti	  case UNI_IE_NOTIFY:
1969121936Sharti		out->notify.h = *hdr;
1970121936Sharti		if (hdr->present & UNI_IE_ERROR)
1971121936Sharti			return (DEC_ERR);
1972121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
1973121936Sharti			return (DEC_ERR);
1974121936Sharti		break;
1975121936Sharti
1976121936Sharti	  case UNI_IE_EPREF:
1977121936Sharti		out->epref.h = *hdr;
1978121936Sharti		if (hdr->present & UNI_IE_ERROR)
1979121936Sharti			return (DEC_ERR);
1980121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1981121936Sharti			return (DEC_ERR);
1982121936Sharti		break;
1983121936Sharti
1984121936Sharti	  case UNI_IE_UNREC:
1985121936Sharti		out->unrec.h = *hdr;
1986121936Sharti		if (hdr->present & UNI_IE_ERROR)
1987121936Sharti			return (DEC_ERR);
1988121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1989121936Sharti			return (DEC_ERR);
1990121936Sharti		break;
1991121936Sharti
1992121936Sharti	  default:
1993121936Sharti		return (DEC_ILL);
1994121936Sharti	}
1995121936Sharti	return (DEC_OK);
1996121936Sharti}
1997121936Sharti
1998121936Shartistatic const struct msgdecl decl_notify = {
1999121936Sharti	0,
2000121936Sharti	"notify",
2001121936Sharti	(uni_msg_print_f)print_notify,
2002121936Sharti	(uni_msg_check_f)check_notify,
2003121936Sharti	(uni_msg_encode_f)encode_notify,
2004121936Sharti	(uni_msg_decode_f)decode_notify
2005121936Sharti};
2006121936Sharti
2007121936Shartistatic void
2008121936Shartiprint_restart(struct uni_restart *msg, struct unicx *cx)
2009121936Sharti{
2010121936Sharti	if(msg->connid.h.present & UNI_IE_PRESENT)
2011121936Sharti		uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
2012121936Sharti	if(msg->restart.h.present & UNI_IE_PRESENT)
2013121936Sharti		uni_print_ie_internal(UNI_IE_RESTART, (union uni_ieall *)&msg->restart, cx);
2014121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
2015121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2016121936Sharti}
2017121936Sharti
2018121936Shartistatic int
2019121936Sharticheck_restart(struct uni_restart *m, struct unicx *cx)
2020121936Sharti{
2021121936Sharti	int ret = 0;
2022121936Sharti
2023121936Sharti	ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
2024121936Sharti	ret |= uni_check_ie(UNI_IE_RESTART, (union uni_ieall *)&m->restart, cx);
2025121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2026121936Sharti
2027121936Sharti	return ret;
2028121936Sharti}
2029121936Sharti
2030121936Shartistatic int
2031121936Shartiencode_restart(struct uni_msg *msg, struct uni_restart *p, struct unicx *cx)
2032121936Sharti{
2033121936Sharti	u_int mlen;
2034121936Sharti
2035121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RESTART, cx, &mlen))
2036121936Sharti		return (-2);
2037121936Sharti
2038121936Sharti	if((p->connid.h.present & UNI_IE_PRESENT) &&
2039121936Sharti	   uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
2040121936Sharti		return (UNI_IE_CONNID);
2041121936Sharti	if((p->restart.h.present & UNI_IE_PRESENT) &&
2042121936Sharti	   uni_encode_ie(UNI_IE_RESTART, msg, (union uni_ieall *)&p->restart, cx))
2043121936Sharti		return (UNI_IE_RESTART);
2044121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
2045121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2046121936Sharti		return (UNI_IE_UNREC);
2047121936Sharti
2048121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2049121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2050121936Sharti
2051121936Sharti	return (0);
2052121936Sharti}
2053121936Sharti
2054121936Shartistatic int
2055121936Shartidecode_restart(struct uni_restart *out, struct uni_msg *msg,
2056121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2057121936Sharti    struct unicx *cx)
2058121936Sharti{
2059121936Sharti	switch (ie) {
2060121936Sharti
2061121936Sharti	  case UNI_IE_CONNID:
2062121936Sharti		out->connid.h = *hdr;
2063121936Sharti		if (hdr->present & UNI_IE_ERROR)
2064121936Sharti			return (DEC_ERR);
2065121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
2066121936Sharti			return (DEC_ERR);
2067121936Sharti		break;
2068121936Sharti
2069121936Sharti	  case UNI_IE_RESTART:
2070121936Sharti		out->restart.h = *hdr;
2071121936Sharti		if (hdr->present & UNI_IE_ERROR)
2072121936Sharti			return (DEC_ERR);
2073121936Sharti		if(uni_decode_ie_body(UNI_IE_RESTART, (union uni_ieall *)&out->restart, msg, ielen, cx))
2074121936Sharti			return (DEC_ERR);
2075121936Sharti		break;
2076121936Sharti
2077121936Sharti	  case UNI_IE_UNREC:
2078121936Sharti		out->unrec.h = *hdr;
2079121936Sharti		if (hdr->present & UNI_IE_ERROR)
2080121936Sharti			return (DEC_ERR);
2081121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2082121936Sharti			return (DEC_ERR);
2083121936Sharti		break;
2084121936Sharti
2085121936Sharti	  default:
2086121936Sharti		return (DEC_ILL);
2087121936Sharti	}
2088121936Sharti	return (DEC_OK);
2089121936Sharti}
2090121936Sharti
2091121936Shartistatic const struct msgdecl decl_restart = {
2092121936Sharti	0,
2093121936Sharti	"restart",
2094121936Sharti	(uni_msg_print_f)print_restart,
2095121936Sharti	(uni_msg_check_f)check_restart,
2096121936Sharti	(uni_msg_encode_f)encode_restart,
2097121936Sharti	(uni_msg_decode_f)decode_restart
2098121936Sharti};
2099121936Sharti
2100121936Shartistatic void
2101121936Shartiprint_restart_ack(struct uni_restart_ack *msg, struct unicx *cx)
2102121936Sharti{
2103121936Sharti	if(msg->connid.h.present & UNI_IE_PRESENT)
2104121936Sharti		uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
2105121936Sharti	if(msg->restart.h.present & UNI_IE_PRESENT)
2106121936Sharti		uni_print_ie_internal(UNI_IE_RESTART, (union uni_ieall *)&msg->restart, cx);
2107121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
2108121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2109121936Sharti}
2110121936Sharti
2111121936Shartistatic int
2112121936Sharticheck_restart_ack(struct uni_restart_ack *m, struct unicx *cx)
2113121936Sharti{
2114121936Sharti	int ret = 0;
2115121936Sharti
2116121936Sharti	ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
2117121936Sharti	ret |= uni_check_ie(UNI_IE_RESTART, (union uni_ieall *)&m->restart, cx);
2118121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2119121936Sharti
2120121936Sharti	return ret;
2121121936Sharti}
2122121936Sharti
2123121936Shartistatic int
2124121936Shartiencode_restart_ack(struct uni_msg *msg, struct uni_restart_ack *p, struct unicx *cx)
2125121936Sharti{
2126121936Sharti	u_int mlen;
2127121936Sharti
2128121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RESTART_ACK, cx, &mlen))
2129121936Sharti		return (-2);
2130121936Sharti
2131121936Sharti	if((p->connid.h.present & UNI_IE_PRESENT) &&
2132121936Sharti	   uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
2133121936Sharti		return (UNI_IE_CONNID);
2134121936Sharti	if((p->restart.h.present & UNI_IE_PRESENT) &&
2135121936Sharti	   uni_encode_ie(UNI_IE_RESTART, msg, (union uni_ieall *)&p->restart, cx))
2136121936Sharti		return (UNI_IE_RESTART);
2137121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
2138121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2139121936Sharti		return (UNI_IE_UNREC);
2140121936Sharti
2141121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2142121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2143121936Sharti
2144121936Sharti	return (0);
2145121936Sharti}
2146121936Sharti
2147121936Shartistatic int
2148121936Shartidecode_restart_ack(struct uni_restart_ack *out, struct uni_msg *msg,
2149121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2150121936Sharti    struct unicx *cx)
2151121936Sharti{
2152121936Sharti	switch (ie) {
2153121936Sharti
2154121936Sharti	  case UNI_IE_CONNID:
2155121936Sharti		out->connid.h = *hdr;
2156121936Sharti		if (hdr->present & UNI_IE_ERROR)
2157121936Sharti			return (DEC_ERR);
2158121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
2159121936Sharti			return (DEC_ERR);
2160121936Sharti		break;
2161121936Sharti
2162121936Sharti	  case UNI_IE_RESTART:
2163121936Sharti		out->restart.h = *hdr;
2164121936Sharti		if (hdr->present & UNI_IE_ERROR)
2165121936Sharti			return (DEC_ERR);
2166121936Sharti		if(uni_decode_ie_body(UNI_IE_RESTART, (union uni_ieall *)&out->restart, msg, ielen, cx))
2167121936Sharti			return (DEC_ERR);
2168121936Sharti		break;
2169121936Sharti
2170121936Sharti	  case UNI_IE_UNREC:
2171121936Sharti		out->unrec.h = *hdr;
2172121936Sharti		if (hdr->present & UNI_IE_ERROR)
2173121936Sharti			return (DEC_ERR);
2174121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2175121936Sharti			return (DEC_ERR);
2176121936Sharti		break;
2177121936Sharti
2178121936Sharti	  default:
2179121936Sharti		return (DEC_ILL);
2180121936Sharti	}
2181121936Sharti	return (DEC_OK);
2182121936Sharti}
2183121936Sharti
2184121936Shartistatic const struct msgdecl decl_restart_ack = {
2185121936Sharti	0,
2186121936Sharti	"restart_ack",
2187121936Sharti	(uni_msg_print_f)print_restart_ack,
2188121936Sharti	(uni_msg_check_f)check_restart_ack,
2189121936Sharti	(uni_msg_encode_f)encode_restart_ack,
2190121936Sharti	(uni_msg_decode_f)decode_restart_ack
2191121936Sharti};
2192121936Sharti
2193121936Shartistatic void
2194121936Shartiprint_add_party(struct uni_add_party *msg, struct unicx *cx)
2195121936Sharti{
2196121936Sharti	u_int i;
2197121936Sharti
2198121936Sharti	if(msg->aal.h.present & UNI_IE_PRESENT)
2199121936Sharti		uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
2200121936Sharti	if(msg->bhli.h.present & UNI_IE_PRESENT)
2201121936Sharti		uni_print_ie_internal(UNI_IE_BHLI, (union uni_ieall *)&msg->bhli, cx);
2202121936Sharti	if(msg->blli.h.present & UNI_IE_PRESENT)
2203121936Sharti		uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli, cx);
2204121936Sharti	if(msg->called.h.present & UNI_IE_PRESENT)
2205121936Sharti		uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
2206121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
2207121936Sharti		if(msg->calledsub[i].h.present & UNI_IE_PRESENT)
2208121936Sharti			uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub[i], cx);
2209121936Sharti	if(msg->calling.h.present & UNI_IE_PRESENT)
2210121936Sharti		uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
2211121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
2212121936Sharti		if(msg->callingsub[i].h.present & UNI_IE_PRESENT)
2213121936Sharti			uni_print_ie_internal(UNI_IE_CALLINGSUB, (union uni_ieall *)&msg->callingsub[i], cx);
2214121936Sharti	if(msg->scompl.h.present & UNI_IE_PRESENT)
2215121936Sharti		uni_print_ie_internal(UNI_IE_SCOMPL, (union uni_ieall *)&msg->scompl, cx);
2216121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
2217121936Sharti		if(msg->tns[i].h.present & UNI_IE_PRESENT)
2218121936Sharti			uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
2219121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
2220121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2221121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
2222121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
2223121936Sharti	if(msg->eetd.h.present & UNI_IE_PRESENT)
2224121936Sharti		uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
2225121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
2226121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2227121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2228121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
2229121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2230121936Sharti	if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
2231121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
2232121936Sharti	if(msg->calling_soft.h.present & UNI_IE_PRESENT)
2233121936Sharti		uni_print_ie_internal(UNI_IE_CALLING_SOFT, (union uni_ieall *)&msg->calling_soft, cx);
2234121936Sharti	if(msg->called_soft.h.present & UNI_IE_PRESENT)
2235121936Sharti		uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
2236121936Sharti	if(msg->dtl_repeat.h.present & UNI_IE_PRESENT)
2237121936Sharti		uni_print_ie_internal(UNI_IE_REPEAT, (union uni_ieall *)&msg->dtl_repeat, cx);
2238121936Sharti	for(i = 0; i < UNI_NUM_IE_DTL; i++)
2239121936Sharti		if(msg->dtl[i].h.present & UNI_IE_PRESENT)
2240121936Sharti			uni_print_ie_internal(UNI_IE_DTL, (union uni_ieall *)&msg->dtl[i], cx);
2241121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
2242121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2243121936Sharti}
2244121936Sharti
2245121936Shartistatic int
2246121936Sharticheck_add_party(struct uni_add_party *m, struct unicx *cx)
2247121936Sharti{
2248121936Sharti	int ret = 0;
2249121936Sharti	u_int i;
2250121936Sharti
2251121936Sharti	ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
2252121936Sharti	ret |= uni_check_ie(UNI_IE_BHLI, (union uni_ieall *)&m->bhli, cx);
2253121936Sharti	ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli, cx);
2254121936Sharti	ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
2255121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB ; i++) {
2256121936Sharti		ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub[i], cx);
2257121936Sharti	}
2258121936Sharti	ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
2259121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB ; i++) {
2260121936Sharti		ret |= uni_check_ie(UNI_IE_CALLINGSUB, (union uni_ieall *)&m->callingsub[i], cx);
2261121936Sharti	}
2262121936Sharti	if(!(!cx->pnni))
2263121936Sharti		ret |= IE_ISPRESENT(m->scompl);
2264121936Sharti	else
2265121936Sharti		ret |= uni_check_ie(UNI_IE_SCOMPL, (union uni_ieall *)&m->scompl, cx);
2266121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
2267121936Sharti		ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
2268121936Sharti	}
2269121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
2270121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
2271121936Sharti	ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
2272121936Sharti	if(!(!cx->pnni))
2273121936Sharti		ret |= IE_ISPRESENT(m->uu);
2274121936Sharti	else
2275121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
2276121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
2277121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
2278121936Sharti	}
2279121936Sharti	if(!(!cx->pnni))
2280121936Sharti		ret |= IE_ISPRESENT(m->lij_seqno);
2281121936Sharti	else
2282121936Sharti		ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
2283121936Sharti	if(!(cx->pnni))
2284121936Sharti		ret |= IE_ISPRESENT(m->calling_soft);
2285121936Sharti	else
2286121936Sharti		ret |= uni_check_ie(UNI_IE_CALLING_SOFT, (union uni_ieall *)&m->calling_soft, cx);
2287121936Sharti	if(!(cx->pnni))
2288121936Sharti		ret |= IE_ISPRESENT(m->called_soft);
2289121936Sharti	else
2290121936Sharti		ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
2291121936Sharti	if(!(cx->pnni))
2292121936Sharti		ret |= IE_ISPRESENT(m->dtl_repeat);
2293121936Sharti	else
2294121936Sharti		ret |= uni_check_ie(UNI_IE_REPEAT, (union uni_ieall *)&m->dtl_repeat, cx);
2295121936Sharti	for(i = 0; i < UNI_NUM_IE_DTL ; i++) {
2296121936Sharti		if(!(cx->pnni))
2297121936Sharti			ret |= IE_ISPRESENT(m->dtl[i]);
2298121936Sharti		else
2299121936Sharti			ret |= uni_check_ie(UNI_IE_DTL, (union uni_ieall *)&m->dtl[i], cx);
2300121936Sharti	}
2301121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2302121936Sharti
2303121936Sharti	return ret;
2304121936Sharti}
2305121936Sharti
2306121936Shartistatic int
2307121936Shartiencode_add_party(struct uni_msg *msg, struct uni_add_party *p, struct unicx *cx)
2308121936Sharti{
2309121936Sharti	u_int mlen;
2310121936Sharti	u_int i;
2311121936Sharti
2312121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ADD_PARTY, cx, &mlen))
2313121936Sharti		return (-2);
2314121936Sharti
2315121936Sharti	if((p->aal.h.present & UNI_IE_PRESENT) &&
2316121936Sharti	   uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
2317121936Sharti		return (UNI_IE_AAL);
2318121936Sharti	if((p->bhli.h.present & UNI_IE_PRESENT) &&
2319121936Sharti	   uni_encode_ie(UNI_IE_BHLI, msg, (union uni_ieall *)&p->bhli, cx))
2320121936Sharti		return (UNI_IE_BHLI);
2321121936Sharti	if((p->blli.h.present & UNI_IE_PRESENT) &&
2322121936Sharti	   uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli, cx))
2323121936Sharti		return (UNI_IE_BLLI);
2324121936Sharti	if((p->called.h.present & UNI_IE_PRESENT) &&
2325121936Sharti	   uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
2326121936Sharti		return (UNI_IE_CALLED);
2327121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
2328121936Sharti		if((p->calledsub[i].h.present & UNI_IE_PRESENT) &&
2329121936Sharti		   uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub[i], cx))
2330121936Sharti		return ((i << 16) + UNI_IE_CALLEDSUB);
2331121936Sharti	if((p->calling.h.present & UNI_IE_PRESENT) &&
2332121936Sharti	   uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
2333121936Sharti		return (UNI_IE_CALLING);
2334121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
2335121936Sharti		if((p->callingsub[i].h.present & UNI_IE_PRESENT) &&
2336121936Sharti		   uni_encode_ie(UNI_IE_CALLINGSUB, msg, (union uni_ieall *)&p->callingsub[i], cx))
2337121936Sharti		return ((i << 16) + UNI_IE_CALLINGSUB);
2338121936Sharti	if((p->scompl.h.present & UNI_IE_PRESENT) &&
2339121936Sharti	   uni_encode_ie(UNI_IE_SCOMPL, msg, (union uni_ieall *)&p->scompl, cx))
2340121936Sharti		return (UNI_IE_SCOMPL);
2341121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
2342121936Sharti		if((p->tns[i].h.present & UNI_IE_PRESENT) &&
2343121936Sharti		   uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
2344121936Sharti		return ((i << 16) + UNI_IE_TNS);
2345121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
2346121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
2347121936Sharti		return (UNI_IE_EPREF);
2348121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
2349121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
2350121936Sharti		return (UNI_IE_NOTIFY);
2351121936Sharti	if((p->eetd.h.present & UNI_IE_PRESENT) &&
2352121936Sharti	   uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
2353121936Sharti		return (UNI_IE_EETD);
2354121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
2355121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
2356121936Sharti		return (UNI_IE_UU);
2357121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2358121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
2359121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
2360121936Sharti		return ((i << 16) + UNI_IE_GIT);
2361121936Sharti	if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
2362121936Sharti	   uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
2363121936Sharti		return (UNI_IE_LIJ_SEQNO);
2364121936Sharti	if((p->calling_soft.h.present & UNI_IE_PRESENT) &&
2365121936Sharti	   uni_encode_ie(UNI_IE_CALLING_SOFT, msg, (union uni_ieall *)&p->calling_soft, cx))
2366121936Sharti		return (UNI_IE_CALLING_SOFT);
2367121936Sharti	if((p->called_soft.h.present & UNI_IE_PRESENT) &&
2368121936Sharti	   uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
2369121936Sharti		return (UNI_IE_CALLED_SOFT);
2370121936Sharti	if((p->dtl_repeat.h.present & UNI_IE_PRESENT) &&
2371121936Sharti	   uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl_repeat, cx))
2372121936Sharti		return (0x10000000 + UNI_IE_DTL);
2373121936Sharti	for(i = 0; i < UNI_NUM_IE_DTL; i++)
2374121936Sharti		if((p->dtl[i].h.present & UNI_IE_PRESENT) &&
2375121936Sharti		   uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl[i], cx))
2376121936Sharti		return ((i << 16) + UNI_IE_DTL);
2377121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
2378121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2379121936Sharti		return (UNI_IE_UNREC);
2380121936Sharti
2381121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2382121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2383121936Sharti
2384121936Sharti	return (0);
2385121936Sharti}
2386121936Sharti
2387121936Shartistatic int
2388121936Shartidecode_add_party(struct uni_add_party *out, struct uni_msg *msg,
2389121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2390121936Sharti    struct unicx *cx)
2391121936Sharti{
2392121936Sharti	u_int i;
2393121936Sharti
2394121936Sharti	switch (ie) {
2395121936Sharti
2396121936Sharti	  case UNI_IE_AAL:
2397121936Sharti		out->aal.h = *hdr;
2398121936Sharti		if (hdr->present & UNI_IE_ERROR)
2399121936Sharti			return (DEC_ERR);
2400121936Sharti		if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
2401121936Sharti			return (DEC_ERR);
2402121936Sharti		break;
2403121936Sharti
2404121936Sharti	  case UNI_IE_BHLI:
2405121936Sharti		out->bhli.h = *hdr;
2406121936Sharti		if (hdr->present & UNI_IE_ERROR)
2407121936Sharti			return (DEC_ERR);
2408121936Sharti		if(uni_decode_ie_body(UNI_IE_BHLI, (union uni_ieall *)&out->bhli, msg, ielen, cx))
2409121936Sharti			return (DEC_ERR);
2410121936Sharti		break;
2411121936Sharti
2412121936Sharti	  case UNI_IE_BLLI:
2413121936Sharti		out->blli.h = *hdr;
2414121936Sharti		if (hdr->present & UNI_IE_ERROR)
2415121936Sharti			return (DEC_ERR);
2416121936Sharti		if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli, msg, ielen, cx))
2417121936Sharti			return (DEC_ERR);
2418121936Sharti		break;
2419121936Sharti
2420121936Sharti	  case UNI_IE_CALLED:
2421121936Sharti		out->called.h = *hdr;
2422121936Sharti		if (hdr->present & UNI_IE_ERROR)
2423121936Sharti			return (DEC_ERR);
2424121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
2425121936Sharti			return (DEC_ERR);
2426121936Sharti		break;
2427121936Sharti
2428121936Sharti	  case UNI_IE_CALLEDSUB:
2429121936Sharti		for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
2430121936Sharti			if (!IE_ISPRESENT(out->calledsub[i])) {
2431121936Sharti				out->calledsub[i].h = *hdr;
2432121936Sharti				if (hdr->present & UNI_IE_ERROR)
2433121936Sharti					return (DEC_ERR);
2434121936Sharti				if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub[i], msg, ielen, cx))
2435121936Sharti					return (DEC_ERR);
2436121936Sharti				break;
2437121936Sharti			}
2438121936Sharti		break;
2439121936Sharti
2440121936Sharti	  case UNI_IE_CALLING:
2441121936Sharti		out->calling.h = *hdr;
2442121936Sharti		if (hdr->present & UNI_IE_ERROR)
2443121936Sharti			return (DEC_ERR);
2444121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
2445121936Sharti			return (DEC_ERR);
2446121936Sharti		break;
2447121936Sharti
2448121936Sharti	  case UNI_IE_CALLINGSUB:
2449121936Sharti		for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
2450121936Sharti			if (!IE_ISPRESENT(out->callingsub[i])) {
2451121936Sharti				out->callingsub[i].h = *hdr;
2452121936Sharti				if (hdr->present & UNI_IE_ERROR)
2453121936Sharti					return (DEC_ERR);
2454121936Sharti				if(uni_decode_ie_body(UNI_IE_CALLINGSUB, (union uni_ieall *)&out->callingsub[i], msg, ielen, cx))
2455121936Sharti					return (DEC_ERR);
2456121936Sharti				break;
2457121936Sharti			}
2458121936Sharti		break;
2459121936Sharti
2460121936Sharti	  case UNI_IE_SCOMPL:
2461121936Sharti		if (!(!cx->pnni))
2462121936Sharti			return (DEC_ILL);
2463121936Sharti		out->scompl.h = *hdr;
2464121936Sharti		if (hdr->present & UNI_IE_ERROR)
2465121936Sharti			return (DEC_ERR);
2466121936Sharti		if(uni_decode_ie_body(UNI_IE_SCOMPL, (union uni_ieall *)&out->scompl, msg, ielen, cx))
2467121936Sharti			return (DEC_ERR);
2468121936Sharti		break;
2469121936Sharti
2470121936Sharti	  case UNI_IE_TNS:
2471121936Sharti		for(i = 0; i < UNI_NUM_IE_TNS; i++)
2472121936Sharti			if (!IE_ISPRESENT(out->tns[i])) {
2473121936Sharti				out->tns[i].h = *hdr;
2474121936Sharti				if (hdr->present & UNI_IE_ERROR)
2475121936Sharti					return (DEC_ERR);
2476121936Sharti				if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
2477121936Sharti					return (DEC_ERR);
2478121936Sharti				break;
2479121936Sharti			}
2480121936Sharti		break;
2481121936Sharti
2482121936Sharti	  case UNI_IE_EPREF:
2483121936Sharti		out->epref.h = *hdr;
2484121936Sharti		if (hdr->present & UNI_IE_ERROR)
2485121936Sharti			return (DEC_ERR);
2486121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
2487121936Sharti			return (DEC_ERR);
2488121936Sharti		break;
2489121936Sharti
2490121936Sharti	  case UNI_IE_NOTIFY:
2491121936Sharti		out->notify.h = *hdr;
2492121936Sharti		if (hdr->present & UNI_IE_ERROR)
2493121936Sharti			return (DEC_ERR);
2494121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
2495121936Sharti			return (DEC_ERR);
2496121936Sharti		break;
2497121936Sharti
2498121936Sharti	  case UNI_IE_EETD:
2499121936Sharti		out->eetd.h = *hdr;
2500121936Sharti		if (hdr->present & UNI_IE_ERROR)
2501121936Sharti			return (DEC_ERR);
2502121936Sharti		if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
2503121936Sharti			return (DEC_ERR);
2504121936Sharti		break;
2505121936Sharti
2506121936Sharti	  case UNI_IE_UU:
2507121936Sharti		if (!(!cx->pnni))
2508121936Sharti			return (DEC_ILL);
2509121936Sharti		out->uu.h = *hdr;
2510121936Sharti		if (hdr->present & UNI_IE_ERROR)
2511121936Sharti			return (DEC_ERR);
2512121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
2513121936Sharti			return (DEC_ERR);
2514121936Sharti		break;
2515121936Sharti
2516121936Sharti	  case UNI_IE_GIT:
2517121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
2518121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
2519121936Sharti				out->git[i].h = *hdr;
2520121936Sharti				if (hdr->present & UNI_IE_ERROR)
2521121936Sharti					return (DEC_ERR);
2522121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
2523121936Sharti					return (DEC_ERR);
2524121936Sharti				break;
2525121936Sharti			}
2526121936Sharti		break;
2527121936Sharti
2528121936Sharti	  case UNI_IE_LIJ_SEQNO:
2529121936Sharti		if (!(!cx->pnni))
2530121936Sharti			return (DEC_ILL);
2531121936Sharti		out->lij_seqno.h = *hdr;
2532121936Sharti		if (hdr->present & UNI_IE_ERROR)
2533121936Sharti			return (DEC_ERR);
2534121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
2535121936Sharti			return (DEC_ERR);
2536121936Sharti		break;
2537121936Sharti
2538121936Sharti	  case UNI_IE_CALLING_SOFT:
2539121936Sharti		if (!(cx->pnni))
2540121936Sharti			return (DEC_ILL);
2541121936Sharti		out->calling_soft.h = *hdr;
2542121936Sharti		if (hdr->present & UNI_IE_ERROR)
2543121936Sharti			return (DEC_ERR);
2544121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING_SOFT, (union uni_ieall *)&out->calling_soft, msg, ielen, cx))
2545121936Sharti			return (DEC_ERR);
2546121936Sharti		break;
2547121936Sharti
2548121936Sharti	  case UNI_IE_CALLED_SOFT:
2549121936Sharti		if (!(cx->pnni))
2550121936Sharti			return (DEC_ILL);
2551121936Sharti		out->called_soft.h = *hdr;
2552121936Sharti		if (hdr->present & UNI_IE_ERROR)
2553121936Sharti			return (DEC_ERR);
2554121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
2555121936Sharti			return (DEC_ERR);
2556121936Sharti		break;
2557121936Sharti
2558121936Sharti	  case UNI_IE_DTL:
2559121936Sharti		if (!(cx->pnni))
2560121936Sharti			return (DEC_ILL);
2561121936Sharti		if (IE_ISPRESENT(cx->repeat))
2562121936Sharti			out->dtl_repeat = cx->repeat;
2563121936Sharti		for(i = 0; i < UNI_NUM_IE_DTL; i++)
2564121936Sharti			if (!IE_ISPRESENT(out->dtl[i])) {
2565121936Sharti				out->dtl[i].h = *hdr;
2566121936Sharti				if (hdr->present & UNI_IE_ERROR)
2567121936Sharti					return (DEC_ERR);
2568121936Sharti				if(uni_decode_ie_body(UNI_IE_DTL, (union uni_ieall *)&out->dtl[i], msg, ielen, cx))
2569121936Sharti					return (DEC_ERR);
2570121936Sharti				break;
2571121936Sharti			}
2572121936Sharti		break;
2573121936Sharti
2574121936Sharti	  case UNI_IE_UNREC:
2575121936Sharti		out->unrec.h = *hdr;
2576121936Sharti		if (hdr->present & UNI_IE_ERROR)
2577121936Sharti			return (DEC_ERR);
2578121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2579121936Sharti			return (DEC_ERR);
2580121936Sharti		break;
2581121936Sharti
2582121936Sharti	  case UNI_IE_REPEAT:
2583121936Sharti		cx->repeat.h = *hdr;
2584121936Sharti		if (hdr->present & UNI_IE_ERROR)
2585121936Sharti			return (DEC_ERR);
2586121936Sharti		if (uni_decode_ie_body(UNI_IE_REPEAT, (union uni_ieall *)&cx->repeat, msg, ielen, cx))
2587121936Sharti			return (DEC_ERR);
2588121936Sharti		break;
2589121936Sharti
2590121936Sharti	  default:
2591121936Sharti		return (DEC_ILL);
2592121936Sharti	}
2593121936Sharti	return (DEC_OK);
2594121936Sharti}
2595121936Sharti
2596121936Shartistatic const struct msgdecl decl_add_party = {
2597121936Sharti	0,
2598121936Sharti	"add_party",
2599121936Sharti	(uni_msg_print_f)print_add_party,
2600121936Sharti	(uni_msg_check_f)check_add_party,
2601121936Sharti	(uni_msg_encode_f)encode_add_party,
2602121936Sharti	(uni_msg_decode_f)decode_add_party
2603121936Sharti};
2604121936Sharti
2605121936Shartistatic void
2606121936Shartiprint_add_party_ack(struct uni_add_party_ack *msg, struct unicx *cx)
2607121936Sharti{
2608121936Sharti	u_int i;
2609121936Sharti
2610121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
2611121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2612121936Sharti	if(msg->aal.h.present & UNI_IE_PRESENT)
2613121936Sharti		uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
2614121936Sharti	if(msg->blli.h.present & UNI_IE_PRESENT)
2615121936Sharti		uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli, cx);
2616121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
2617121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
2618121936Sharti	if(msg->eetd.h.present & UNI_IE_PRESENT)
2619121936Sharti		uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
2620121936Sharti	if(msg->conned.h.present & UNI_IE_PRESENT)
2621121936Sharti		uni_print_ie_internal(UNI_IE_CONNED, (union uni_ieall *)&msg->conned, cx);
2622121936Sharti	if(msg->connedsub.h.present & UNI_IE_PRESENT)
2623121936Sharti		uni_print_ie_internal(UNI_IE_CONNEDSUB, (union uni_ieall *)&msg->connedsub, cx);
2624121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
2625121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2626121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2627121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
2628121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2629121936Sharti	if(msg->called_soft.h.present & UNI_IE_PRESENT)
2630121936Sharti		uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
2631121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
2632121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2633121936Sharti}
2634121936Sharti
2635121936Shartistatic int
2636121936Sharticheck_add_party_ack(struct uni_add_party_ack *m, struct unicx *cx)
2637121936Sharti{
2638121936Sharti	int ret = 0;
2639121936Sharti	u_int i;
2640121936Sharti
2641121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
2642121936Sharti	ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
2643121936Sharti	ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli, cx);
2644121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
2645121936Sharti	ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
2646121936Sharti	ret |= uni_check_ie(UNI_IE_CONNED, (union uni_ieall *)&m->conned, cx);
2647121936Sharti	ret |= uni_check_ie(UNI_IE_CONNEDSUB, (union uni_ieall *)&m->connedsub, cx);
2648121936Sharti	if(!(!cx->pnni))
2649121936Sharti		ret |= IE_ISPRESENT(m->uu);
2650121936Sharti	else
2651121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
2652121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
2653121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
2654121936Sharti	}
2655121936Sharti	if(!(cx->pnni))
2656121936Sharti		ret |= IE_ISPRESENT(m->called_soft);
2657121936Sharti	else
2658121936Sharti		ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
2659121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2660121936Sharti
2661121936Sharti	return ret;
2662121936Sharti}
2663121936Sharti
2664121936Shartistatic int
2665121936Shartiencode_add_party_ack(struct uni_msg *msg, struct uni_add_party_ack *p, struct unicx *cx)
2666121936Sharti{
2667121936Sharti	u_int mlen;
2668121936Sharti	u_int i;
2669121936Sharti
2670121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ADD_PARTY_ACK, cx, &mlen))
2671121936Sharti		return (-2);
2672121936Sharti
2673121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
2674121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
2675121936Sharti		return (UNI_IE_EPREF);
2676121936Sharti	if((p->aal.h.present & UNI_IE_PRESENT) &&
2677121936Sharti	   uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
2678121936Sharti		return (UNI_IE_AAL);
2679121936Sharti	if((p->blli.h.present & UNI_IE_PRESENT) &&
2680121936Sharti	   uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli, cx))
2681121936Sharti		return (UNI_IE_BLLI);
2682121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
2683121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
2684121936Sharti		return (UNI_IE_NOTIFY);
2685121936Sharti	if((p->eetd.h.present & UNI_IE_PRESENT) &&
2686121936Sharti	   uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
2687121936Sharti		return (UNI_IE_EETD);
2688121936Sharti	if((p->conned.h.present & UNI_IE_PRESENT) &&
2689121936Sharti	   uni_encode_ie(UNI_IE_CONNED, msg, (union uni_ieall *)&p->conned, cx))
2690121936Sharti		return (UNI_IE_CONNED);
2691121936Sharti	if((p->connedsub.h.present & UNI_IE_PRESENT) &&
2692121936Sharti	   uni_encode_ie(UNI_IE_CONNEDSUB, msg, (union uni_ieall *)&p->connedsub, cx))
2693121936Sharti		return (UNI_IE_CONNEDSUB);
2694121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
2695121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
2696121936Sharti		return (UNI_IE_UU);
2697121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2698121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
2699121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
2700121936Sharti		return ((i << 16) + UNI_IE_GIT);
2701121936Sharti	if((p->called_soft.h.present & UNI_IE_PRESENT) &&
2702121936Sharti	   uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
2703121936Sharti		return (UNI_IE_CALLED_SOFT);
2704121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
2705121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2706121936Sharti		return (UNI_IE_UNREC);
2707121936Sharti
2708121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2709121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2710121936Sharti
2711121936Sharti	return (0);
2712121936Sharti}
2713121936Sharti
2714121936Shartistatic int
2715121936Shartidecode_add_party_ack(struct uni_add_party_ack *out, struct uni_msg *msg,
2716121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2717121936Sharti    struct unicx *cx)
2718121936Sharti{
2719121936Sharti	u_int i;
2720121936Sharti
2721121936Sharti	switch (ie) {
2722121936Sharti
2723121936Sharti	  case UNI_IE_EPREF:
2724121936Sharti		out->epref.h = *hdr;
2725121936Sharti		if (hdr->present & UNI_IE_ERROR)
2726121936Sharti			return (DEC_ERR);
2727121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
2728121936Sharti			return (DEC_ERR);
2729121936Sharti		break;
2730121936Sharti
2731121936Sharti	  case UNI_IE_AAL:
2732121936Sharti		out->aal.h = *hdr;
2733121936Sharti		if (hdr->present & UNI_IE_ERROR)
2734121936Sharti			return (DEC_ERR);
2735121936Sharti		if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
2736121936Sharti			return (DEC_ERR);
2737121936Sharti		break;
2738121936Sharti
2739121936Sharti	  case UNI_IE_BLLI:
2740121936Sharti		out->blli.h = *hdr;
2741121936Sharti		if (hdr->present & UNI_IE_ERROR)
2742121936Sharti			return (DEC_ERR);
2743121936Sharti		if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli, msg, ielen, cx))
2744121936Sharti			return (DEC_ERR);
2745121936Sharti		break;
2746121936Sharti
2747121936Sharti	  case UNI_IE_NOTIFY:
2748121936Sharti		out->notify.h = *hdr;
2749121936Sharti		if (hdr->present & UNI_IE_ERROR)
2750121936Sharti			return (DEC_ERR);
2751121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
2752121936Sharti			return (DEC_ERR);
2753121936Sharti		break;
2754121936Sharti
2755121936Sharti	  case UNI_IE_EETD:
2756121936Sharti		out->eetd.h = *hdr;
2757121936Sharti		if (hdr->present & UNI_IE_ERROR)
2758121936Sharti			return (DEC_ERR);
2759121936Sharti		if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
2760121936Sharti			return (DEC_ERR);
2761121936Sharti		break;
2762121936Sharti
2763121936Sharti	  case UNI_IE_CONNED:
2764121936Sharti		out->conned.h = *hdr;
2765121936Sharti		if (hdr->present & UNI_IE_ERROR)
2766121936Sharti			return (DEC_ERR);
2767121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNED, (union uni_ieall *)&out->conned, msg, ielen, cx))
2768121936Sharti			return (DEC_ERR);
2769121936Sharti		break;
2770121936Sharti
2771121936Sharti	  case UNI_IE_CONNEDSUB:
2772121936Sharti		out->connedsub.h = *hdr;
2773121936Sharti		if (hdr->present & UNI_IE_ERROR)
2774121936Sharti			return (DEC_ERR);
2775121936Sharti		if(uni_decode_ie_body(UNI_IE_CONNEDSUB, (union uni_ieall *)&out->connedsub, msg, ielen, cx))
2776121936Sharti			return (DEC_ERR);
2777121936Sharti		break;
2778121936Sharti
2779121936Sharti	  case UNI_IE_UU:
2780121936Sharti		if (!(!cx->pnni))
2781121936Sharti			return (DEC_ILL);
2782121936Sharti		out->uu.h = *hdr;
2783121936Sharti		if (hdr->present & UNI_IE_ERROR)
2784121936Sharti			return (DEC_ERR);
2785121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
2786121936Sharti			return (DEC_ERR);
2787121936Sharti		break;
2788121936Sharti
2789121936Sharti	  case UNI_IE_GIT:
2790121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
2791121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
2792121936Sharti				out->git[i].h = *hdr;
2793121936Sharti				if (hdr->present & UNI_IE_ERROR)
2794121936Sharti					return (DEC_ERR);
2795121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
2796121936Sharti					return (DEC_ERR);
2797121936Sharti				break;
2798121936Sharti			}
2799121936Sharti		break;
2800121936Sharti
2801121936Sharti	  case UNI_IE_CALLED_SOFT:
2802121936Sharti		if (!(cx->pnni))
2803121936Sharti			return (DEC_ILL);
2804121936Sharti		out->called_soft.h = *hdr;
2805121936Sharti		if (hdr->present & UNI_IE_ERROR)
2806121936Sharti			return (DEC_ERR);
2807121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
2808121936Sharti			return (DEC_ERR);
2809121936Sharti		break;
2810121936Sharti
2811121936Sharti	  case UNI_IE_UNREC:
2812121936Sharti		out->unrec.h = *hdr;
2813121936Sharti		if (hdr->present & UNI_IE_ERROR)
2814121936Sharti			return (DEC_ERR);
2815121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2816121936Sharti			return (DEC_ERR);
2817121936Sharti		break;
2818121936Sharti
2819121936Sharti	  default:
2820121936Sharti		return (DEC_ILL);
2821121936Sharti	}
2822121936Sharti	return (DEC_OK);
2823121936Sharti}
2824121936Sharti
2825121936Shartistatic const struct msgdecl decl_add_party_ack = {
2826121936Sharti	0,
2827121936Sharti	"add_party_ack",
2828121936Sharti	(uni_msg_print_f)print_add_party_ack,
2829121936Sharti	(uni_msg_check_f)check_add_party_ack,
2830121936Sharti	(uni_msg_encode_f)encode_add_party_ack,
2831121936Sharti	(uni_msg_decode_f)decode_add_party_ack
2832121936Sharti};
2833121936Sharti
2834121936Shartistatic void
2835121936Shartiprint_party_alerting(struct uni_party_alerting *msg, struct unicx *cx)
2836121936Sharti{
2837121936Sharti	u_int i;
2838121936Sharti
2839121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
2840121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2841121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
2842121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
2843121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
2844121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2845121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2846121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
2847121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2848121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
2849121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2850121936Sharti}
2851121936Sharti
2852121936Shartistatic int
2853121936Sharticheck_party_alerting(struct uni_party_alerting *m, struct unicx *cx)
2854121936Sharti{
2855121936Sharti	int ret = 0;
2856121936Sharti	u_int i;
2857121936Sharti
2858121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
2859121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
2860121936Sharti	if(!(!cx->pnni))
2861121936Sharti		ret |= IE_ISPRESENT(m->uu);
2862121936Sharti	else
2863121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
2864121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
2865121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
2866121936Sharti	}
2867121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2868121936Sharti
2869121936Sharti	return ret;
2870121936Sharti}
2871121936Sharti
2872121936Shartistatic int
2873121936Shartiencode_party_alerting(struct uni_msg *msg, struct uni_party_alerting *p, struct unicx *cx)
2874121936Sharti{
2875121936Sharti	u_int mlen;
2876121936Sharti	u_int i;
2877121936Sharti
2878121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_PARTY_ALERTING, cx, &mlen))
2879121936Sharti		return (-2);
2880121936Sharti
2881121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
2882121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
2883121936Sharti		return (UNI_IE_EPREF);
2884121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
2885121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
2886121936Sharti		return (UNI_IE_NOTIFY);
2887121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
2888121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
2889121936Sharti		return (UNI_IE_UU);
2890121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2891121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
2892121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
2893121936Sharti		return ((i << 16) + UNI_IE_GIT);
2894121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
2895121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2896121936Sharti		return (UNI_IE_UNREC);
2897121936Sharti
2898121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2899121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2900121936Sharti
2901121936Sharti	return (0);
2902121936Sharti}
2903121936Sharti
2904121936Shartistatic int
2905121936Shartidecode_party_alerting(struct uni_party_alerting *out, struct uni_msg *msg,
2906121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2907121936Sharti    struct unicx *cx)
2908121936Sharti{
2909121936Sharti	u_int i;
2910121936Sharti
2911121936Sharti	switch (ie) {
2912121936Sharti
2913121936Sharti	  case UNI_IE_EPREF:
2914121936Sharti		out->epref.h = *hdr;
2915121936Sharti		if (hdr->present & UNI_IE_ERROR)
2916121936Sharti			return (DEC_ERR);
2917121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
2918121936Sharti			return (DEC_ERR);
2919121936Sharti		break;
2920121936Sharti
2921121936Sharti	  case UNI_IE_NOTIFY:
2922121936Sharti		out->notify.h = *hdr;
2923121936Sharti		if (hdr->present & UNI_IE_ERROR)
2924121936Sharti			return (DEC_ERR);
2925121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
2926121936Sharti			return (DEC_ERR);
2927121936Sharti		break;
2928121936Sharti
2929121936Sharti	  case UNI_IE_UU:
2930121936Sharti		if (!(!cx->pnni))
2931121936Sharti			return (DEC_ILL);
2932121936Sharti		out->uu.h = *hdr;
2933121936Sharti		if (hdr->present & UNI_IE_ERROR)
2934121936Sharti			return (DEC_ERR);
2935121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
2936121936Sharti			return (DEC_ERR);
2937121936Sharti		break;
2938121936Sharti
2939121936Sharti	  case UNI_IE_GIT:
2940121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
2941121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
2942121936Sharti				out->git[i].h = *hdr;
2943121936Sharti				if (hdr->present & UNI_IE_ERROR)
2944121936Sharti					return (DEC_ERR);
2945121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
2946121936Sharti					return (DEC_ERR);
2947121936Sharti				break;
2948121936Sharti			}
2949121936Sharti		break;
2950121936Sharti
2951121936Sharti	  case UNI_IE_UNREC:
2952121936Sharti		out->unrec.h = *hdr;
2953121936Sharti		if (hdr->present & UNI_IE_ERROR)
2954121936Sharti			return (DEC_ERR);
2955121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2956121936Sharti			return (DEC_ERR);
2957121936Sharti		break;
2958121936Sharti
2959121936Sharti	  default:
2960121936Sharti		return (DEC_ILL);
2961121936Sharti	}
2962121936Sharti	return (DEC_OK);
2963121936Sharti}
2964121936Sharti
2965121936Shartistatic const struct msgdecl decl_party_alerting = {
2966121936Sharti	0,
2967121936Sharti	"party_alerting",
2968121936Sharti	(uni_msg_print_f)print_party_alerting,
2969121936Sharti	(uni_msg_check_f)check_party_alerting,
2970121936Sharti	(uni_msg_encode_f)encode_party_alerting,
2971121936Sharti	(uni_msg_decode_f)decode_party_alerting
2972121936Sharti};
2973121936Sharti
2974121936Shartistatic void
2975121936Shartiprint_add_party_rej(struct uni_add_party_rej *msg, struct unicx *cx)
2976121936Sharti{
2977121936Sharti	u_int i;
2978121936Sharti
2979121936Sharti	if(msg->cause.h.present & UNI_IE_PRESENT)
2980121936Sharti		uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
2981121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
2982121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2983121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
2984121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2985121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
2986121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
2987121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2988121936Sharti	if(msg->crankback.h.present & UNI_IE_PRESENT)
2989121936Sharti		uni_print_ie_internal(UNI_IE_CRANKBACK, (union uni_ieall *)&msg->crankback, cx);
2990121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
2991121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2992121936Sharti}
2993121936Sharti
2994121936Shartistatic int
2995121936Sharticheck_add_party_rej(struct uni_add_party_rej *m, struct unicx *cx)
2996121936Sharti{
2997121936Sharti	int ret = 0;
2998121936Sharti	u_int i;
2999121936Sharti
3000121936Sharti	ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3001121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
3002121936Sharti	if(!(!cx->pnni))
3003121936Sharti		ret |= IE_ISPRESENT(m->uu);
3004121936Sharti	else
3005121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
3006121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
3007121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
3008121936Sharti	}
3009121936Sharti	if(!(cx->pnni))
3010121936Sharti		ret |= IE_ISPRESENT(m->crankback);
3011121936Sharti	else
3012121936Sharti		ret |= uni_check_ie(UNI_IE_CRANKBACK, (union uni_ieall *)&m->crankback, cx);
3013121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3014121936Sharti
3015121936Sharti	return ret;
3016121936Sharti}
3017121936Sharti
3018121936Shartistatic int
3019121936Shartiencode_add_party_rej(struct uni_msg *msg, struct uni_add_party_rej *p, struct unicx *cx)
3020121936Sharti{
3021121936Sharti	u_int mlen;
3022121936Sharti	u_int i;
3023121936Sharti
3024121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ADD_PARTY_REJ, cx, &mlen))
3025121936Sharti		return (-2);
3026121936Sharti
3027121936Sharti	if((p->cause.h.present & UNI_IE_PRESENT) &&
3028121936Sharti	   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3029121936Sharti		return (UNI_IE_CAUSE);
3030121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
3031121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
3032121936Sharti		return (UNI_IE_EPREF);
3033121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
3034121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
3035121936Sharti		return (UNI_IE_UU);
3036121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
3037121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
3038121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
3039121936Sharti		return ((i << 16) + UNI_IE_GIT);
3040121936Sharti	if((p->crankback.h.present & UNI_IE_PRESENT) &&
3041121936Sharti	   uni_encode_ie(UNI_IE_CRANKBACK, msg, (union uni_ieall *)&p->crankback, cx))
3042121936Sharti		return (UNI_IE_CRANKBACK);
3043121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3044121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3045121936Sharti		return (UNI_IE_UNREC);
3046121936Sharti
3047121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3048121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3049121936Sharti
3050121936Sharti	return (0);
3051121936Sharti}
3052121936Sharti
3053121936Shartistatic int
3054121936Shartidecode_add_party_rej(struct uni_add_party_rej *out, struct uni_msg *msg,
3055121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3056121936Sharti    struct unicx *cx)
3057121936Sharti{
3058121936Sharti	u_int i;
3059121936Sharti
3060121936Sharti	switch (ie) {
3061121936Sharti
3062121936Sharti	  case UNI_IE_CAUSE:
3063121936Sharti		out->cause.h = *hdr;
3064121936Sharti		if (hdr->present & UNI_IE_ERROR)
3065121936Sharti			return (DEC_ERR);
3066121936Sharti		if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3067121936Sharti			return (DEC_ERR);
3068121936Sharti		break;
3069121936Sharti
3070121936Sharti	  case UNI_IE_EPREF:
3071121936Sharti		out->epref.h = *hdr;
3072121936Sharti		if (hdr->present & UNI_IE_ERROR)
3073121936Sharti			return (DEC_ERR);
3074121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
3075121936Sharti			return (DEC_ERR);
3076121936Sharti		break;
3077121936Sharti
3078121936Sharti	  case UNI_IE_UU:
3079121936Sharti		if (!(!cx->pnni))
3080121936Sharti			return (DEC_ILL);
3081121936Sharti		out->uu.h = *hdr;
3082121936Sharti		if (hdr->present & UNI_IE_ERROR)
3083121936Sharti			return (DEC_ERR);
3084121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
3085121936Sharti			return (DEC_ERR);
3086121936Sharti		break;
3087121936Sharti
3088121936Sharti	  case UNI_IE_GIT:
3089121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
3090121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
3091121936Sharti				out->git[i].h = *hdr;
3092121936Sharti				if (hdr->present & UNI_IE_ERROR)
3093121936Sharti					return (DEC_ERR);
3094121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
3095121936Sharti					return (DEC_ERR);
3096121936Sharti				break;
3097121936Sharti			}
3098121936Sharti		break;
3099121936Sharti
3100121936Sharti	  case UNI_IE_CRANKBACK:
3101121936Sharti		if (!(cx->pnni))
3102121936Sharti			return (DEC_ILL);
3103121936Sharti		out->crankback.h = *hdr;
3104121936Sharti		if (hdr->present & UNI_IE_ERROR)
3105121936Sharti			return (DEC_ERR);
3106121936Sharti		if(uni_decode_ie_body(UNI_IE_CRANKBACK, (union uni_ieall *)&out->crankback, msg, ielen, cx))
3107121936Sharti			return (DEC_ERR);
3108121936Sharti		break;
3109121936Sharti
3110121936Sharti	  case UNI_IE_UNREC:
3111121936Sharti		out->unrec.h = *hdr;
3112121936Sharti		if (hdr->present & UNI_IE_ERROR)
3113121936Sharti			return (DEC_ERR);
3114121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3115121936Sharti			return (DEC_ERR);
3116121936Sharti		break;
3117121936Sharti
3118121936Sharti	  default:
3119121936Sharti		return (DEC_ILL);
3120121936Sharti	}
3121121936Sharti	return (DEC_OK);
3122121936Sharti}
3123121936Sharti
3124121936Shartistatic const struct msgdecl decl_add_party_rej = {
3125121936Sharti	0,
3126121936Sharti	"add_party_rej",
3127121936Sharti	(uni_msg_print_f)print_add_party_rej,
3128121936Sharti	(uni_msg_check_f)check_add_party_rej,
3129121936Sharti	(uni_msg_encode_f)encode_add_party_rej,
3130121936Sharti	(uni_msg_decode_f)decode_add_party_rej
3131121936Sharti};
3132121936Sharti
3133121936Shartistatic void
3134121936Shartiprint_drop_party(struct uni_drop_party *msg, struct unicx *cx)
3135121936Sharti{
3136121936Sharti	u_int i;
3137121936Sharti
3138121936Sharti	if(msg->cause.h.present & UNI_IE_PRESENT)
3139121936Sharti		uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
3140121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
3141121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
3142121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
3143121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
3144121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
3145121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
3146121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
3147121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
3148121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
3149121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
3150121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3151121936Sharti}
3152121936Sharti
3153121936Shartistatic int
3154121936Sharticheck_drop_party(struct uni_drop_party *m, struct unicx *cx)
3155121936Sharti{
3156121936Sharti	int ret = 0;
3157121936Sharti	u_int i;
3158121936Sharti
3159121936Sharti	ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3160121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
3161121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
3162121936Sharti	if(!(!cx->pnni))
3163121936Sharti		ret |= IE_ISPRESENT(m->uu);
3164121936Sharti	else
3165121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
3166121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
3167121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
3168121936Sharti	}
3169121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3170121936Sharti
3171121936Sharti	return ret;
3172121936Sharti}
3173121936Sharti
3174121936Shartistatic int
3175121936Shartiencode_drop_party(struct uni_msg *msg, struct uni_drop_party *p, struct unicx *cx)
3176121936Sharti{
3177121936Sharti	u_int mlen;
3178121936Sharti	u_int i;
3179121936Sharti
3180121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_DROP_PARTY, cx, &mlen))
3181121936Sharti		return (-2);
3182121936Sharti
3183121936Sharti	if((p->cause.h.present & UNI_IE_PRESENT) &&
3184121936Sharti	   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3185121936Sharti		return (UNI_IE_CAUSE);
3186121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
3187121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
3188121936Sharti		return (UNI_IE_EPREF);
3189121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
3190121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
3191121936Sharti		return (UNI_IE_NOTIFY);
3192121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
3193121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
3194121936Sharti		return (UNI_IE_UU);
3195121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
3196121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
3197121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
3198121936Sharti		return ((i << 16) + UNI_IE_GIT);
3199121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3200121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3201121936Sharti		return (UNI_IE_UNREC);
3202121936Sharti
3203121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3204121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3205121936Sharti
3206121936Sharti	return (0);
3207121936Sharti}
3208121936Sharti
3209121936Shartistatic int
3210121936Shartidecode_drop_party(struct uni_drop_party *out, struct uni_msg *msg,
3211121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3212121936Sharti    struct unicx *cx)
3213121936Sharti{
3214121936Sharti	u_int i;
3215121936Sharti
3216121936Sharti	switch (ie) {
3217121936Sharti
3218121936Sharti	  case UNI_IE_CAUSE:
3219121936Sharti		out->cause.h = *hdr;
3220121936Sharti		if (hdr->present & UNI_IE_ERROR)
3221121936Sharti			return (DEC_ERR);
3222121936Sharti		if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3223121936Sharti			return (DEC_ERR);
3224121936Sharti		break;
3225121936Sharti
3226121936Sharti	  case UNI_IE_EPREF:
3227121936Sharti		out->epref.h = *hdr;
3228121936Sharti		if (hdr->present & UNI_IE_ERROR)
3229121936Sharti			return (DEC_ERR);
3230121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
3231121936Sharti			return (DEC_ERR);
3232121936Sharti		break;
3233121936Sharti
3234121936Sharti	  case UNI_IE_NOTIFY:
3235121936Sharti		out->notify.h = *hdr;
3236121936Sharti		if (hdr->present & UNI_IE_ERROR)
3237121936Sharti			return (DEC_ERR);
3238121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
3239121936Sharti			return (DEC_ERR);
3240121936Sharti		break;
3241121936Sharti
3242121936Sharti	  case UNI_IE_UU:
3243121936Sharti		if (!(!cx->pnni))
3244121936Sharti			return (DEC_ILL);
3245121936Sharti		out->uu.h = *hdr;
3246121936Sharti		if (hdr->present & UNI_IE_ERROR)
3247121936Sharti			return (DEC_ERR);
3248121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
3249121936Sharti			return (DEC_ERR);
3250121936Sharti		break;
3251121936Sharti
3252121936Sharti	  case UNI_IE_GIT:
3253121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
3254121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
3255121936Sharti				out->git[i].h = *hdr;
3256121936Sharti				if (hdr->present & UNI_IE_ERROR)
3257121936Sharti					return (DEC_ERR);
3258121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
3259121936Sharti					return (DEC_ERR);
3260121936Sharti				break;
3261121936Sharti			}
3262121936Sharti		break;
3263121936Sharti
3264121936Sharti	  case UNI_IE_UNREC:
3265121936Sharti		out->unrec.h = *hdr;
3266121936Sharti		if (hdr->present & UNI_IE_ERROR)
3267121936Sharti			return (DEC_ERR);
3268121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3269121936Sharti			return (DEC_ERR);
3270121936Sharti		break;
3271121936Sharti
3272121936Sharti	  default:
3273121936Sharti		return (DEC_ILL);
3274121936Sharti	}
3275121936Sharti	return (DEC_OK);
3276121936Sharti}
3277121936Sharti
3278121936Shartistatic const struct msgdecl decl_drop_party = {
3279121936Sharti	0,
3280121936Sharti	"drop_party",
3281121936Sharti	(uni_msg_print_f)print_drop_party,
3282121936Sharti	(uni_msg_check_f)check_drop_party,
3283121936Sharti	(uni_msg_encode_f)encode_drop_party,
3284121936Sharti	(uni_msg_decode_f)decode_drop_party
3285121936Sharti};
3286121936Sharti
3287121936Shartistatic void
3288121936Shartiprint_drop_party_ack(struct uni_drop_party_ack *msg, struct unicx *cx)
3289121936Sharti{
3290121936Sharti	u_int i;
3291121936Sharti
3292121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
3293121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
3294121936Sharti	if(msg->cause.h.present & UNI_IE_PRESENT)
3295121936Sharti		uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
3296121936Sharti	if(msg->uu.h.present & UNI_IE_PRESENT)
3297121936Sharti		uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
3298121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
3299121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
3300121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
3301121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
3302121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3303121936Sharti}
3304121936Sharti
3305121936Shartistatic int
3306121936Sharticheck_drop_party_ack(struct uni_drop_party_ack *m, struct unicx *cx)
3307121936Sharti{
3308121936Sharti	int ret = 0;
3309121936Sharti	u_int i;
3310121936Sharti
3311121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
3312121936Sharti	ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3313121936Sharti	if(!(!cx->pnni))
3314121936Sharti		ret |= IE_ISPRESENT(m->uu);
3315121936Sharti	else
3316121936Sharti		ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
3317121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
3318121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
3319121936Sharti	}
3320121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3321121936Sharti
3322121936Sharti	return ret;
3323121936Sharti}
3324121936Sharti
3325121936Shartistatic int
3326121936Shartiencode_drop_party_ack(struct uni_msg *msg, struct uni_drop_party_ack *p, struct unicx *cx)
3327121936Sharti{
3328121936Sharti	u_int mlen;
3329121936Sharti	u_int i;
3330121936Sharti
3331121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_DROP_PARTY_ACK, cx, &mlen))
3332121936Sharti		return (-2);
3333121936Sharti
3334121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
3335121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
3336121936Sharti		return (UNI_IE_EPREF);
3337121936Sharti	if((p->cause.h.present & UNI_IE_PRESENT) &&
3338121936Sharti	   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3339121936Sharti		return (UNI_IE_CAUSE);
3340121936Sharti	if((p->uu.h.present & UNI_IE_PRESENT) &&
3341121936Sharti	   uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
3342121936Sharti		return (UNI_IE_UU);
3343121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
3344121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
3345121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
3346121936Sharti		return ((i << 16) + UNI_IE_GIT);
3347121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3348121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3349121936Sharti		return (UNI_IE_UNREC);
3350121936Sharti
3351121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3352121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3353121936Sharti
3354121936Sharti	return (0);
3355121936Sharti}
3356121936Sharti
3357121936Shartistatic int
3358121936Shartidecode_drop_party_ack(struct uni_drop_party_ack *out, struct uni_msg *msg,
3359121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3360121936Sharti    struct unicx *cx)
3361121936Sharti{
3362121936Sharti	u_int i;
3363121936Sharti
3364121936Sharti	switch (ie) {
3365121936Sharti
3366121936Sharti	  case UNI_IE_EPREF:
3367121936Sharti		out->epref.h = *hdr;
3368121936Sharti		if (hdr->present & UNI_IE_ERROR)
3369121936Sharti			return (DEC_ERR);
3370121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
3371121936Sharti			return (DEC_ERR);
3372121936Sharti		break;
3373121936Sharti
3374121936Sharti	  case UNI_IE_CAUSE:
3375121936Sharti		out->cause.h = *hdr;
3376121936Sharti		if (hdr->present & UNI_IE_ERROR)
3377121936Sharti			return (DEC_ERR);
3378121936Sharti		if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3379121936Sharti			return (DEC_ERR);
3380121936Sharti		break;
3381121936Sharti
3382121936Sharti	  case UNI_IE_UU:
3383121936Sharti		if (!(!cx->pnni))
3384121936Sharti			return (DEC_ILL);
3385121936Sharti		out->uu.h = *hdr;
3386121936Sharti		if (hdr->present & UNI_IE_ERROR)
3387121936Sharti			return (DEC_ERR);
3388121936Sharti		if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
3389121936Sharti			return (DEC_ERR);
3390121936Sharti		break;
3391121936Sharti
3392121936Sharti	  case UNI_IE_GIT:
3393121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
3394121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
3395121936Sharti				out->git[i].h = *hdr;
3396121936Sharti				if (hdr->present & UNI_IE_ERROR)
3397121936Sharti					return (DEC_ERR);
3398121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
3399121936Sharti					return (DEC_ERR);
3400121936Sharti				break;
3401121936Sharti			}
3402121936Sharti		break;
3403121936Sharti
3404121936Sharti	  case UNI_IE_UNREC:
3405121936Sharti		out->unrec.h = *hdr;
3406121936Sharti		if (hdr->present & UNI_IE_ERROR)
3407121936Sharti			return (DEC_ERR);
3408121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3409121936Sharti			return (DEC_ERR);
3410121936Sharti		break;
3411121936Sharti
3412121936Sharti	  default:
3413121936Sharti		return (DEC_ILL);
3414121936Sharti	}
3415121936Sharti	return (DEC_OK);
3416121936Sharti}
3417121936Sharti
3418121936Shartistatic const struct msgdecl decl_drop_party_ack = {
3419121936Sharti	0,
3420121936Sharti	"drop_party_ack",
3421121936Sharti	(uni_msg_print_f)print_drop_party_ack,
3422121936Sharti	(uni_msg_check_f)check_drop_party_ack,
3423121936Sharti	(uni_msg_encode_f)encode_drop_party_ack,
3424121936Sharti	(uni_msg_decode_f)decode_drop_party_ack
3425121936Sharti};
3426121936Sharti
3427121936Shartistatic void
3428121936Shartiprint_leaf_setup_req(struct uni_leaf_setup_req *msg, struct unicx *cx)
3429121936Sharti{
3430121936Sharti	u_int i;
3431121936Sharti
3432121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
3433121936Sharti		if(msg->tns[i].h.present & UNI_IE_PRESENT)
3434121936Sharti			uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
3435121936Sharti	if(msg->calling.h.present & UNI_IE_PRESENT)
3436121936Sharti		uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
3437121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
3438121936Sharti		if(msg->callingsub[i].h.present & UNI_IE_PRESENT)
3439121936Sharti			uni_print_ie_internal(UNI_IE_CALLINGSUB, (union uni_ieall *)&msg->callingsub[i], cx);
3440121936Sharti	if(msg->called.h.present & UNI_IE_PRESENT)
3441121936Sharti		uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3442121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
3443121936Sharti		if(msg->calledsub[i].h.present & UNI_IE_PRESENT)
3444121936Sharti			uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub[i], cx);
3445121936Sharti	if(msg->lij_callid.h.present & UNI_IE_PRESENT)
3446121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_CALLID, (union uni_ieall *)&msg->lij_callid, cx);
3447121936Sharti	if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
3448121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
3449121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
3450121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3451121936Sharti}
3452121936Sharti
3453121936Shartistatic int
3454121936Sharticheck_leaf_setup_req(struct uni_leaf_setup_req *m, struct unicx *cx)
3455121936Sharti{
3456121936Sharti	int ret = 0;
3457121936Sharti	u_int i;
3458121936Sharti
3459121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
3460121936Sharti		ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
3461121936Sharti	}
3462121936Sharti	ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
3463121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB ; i++) {
3464121936Sharti		ret |= uni_check_ie(UNI_IE_CALLINGSUB, (union uni_ieall *)&m->callingsub[i], cx);
3465121936Sharti	}
3466121936Sharti	ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3467121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB ; i++) {
3468121936Sharti		ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub[i], cx);
3469121936Sharti	}
3470121936Sharti	ret |= uni_check_ie(UNI_IE_LIJ_CALLID, (union uni_ieall *)&m->lij_callid, cx);
3471121936Sharti	ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
3472121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3473121936Sharti
3474121936Sharti	return ret;
3475121936Sharti}
3476121936Sharti
3477121936Shartistatic int
3478121936Shartiencode_leaf_setup_req(struct uni_msg *msg, struct uni_leaf_setup_req *p, struct unicx *cx)
3479121936Sharti{
3480121936Sharti	u_int mlen;
3481121936Sharti	u_int i;
3482121936Sharti
3483121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_LEAF_SETUP_REQ, cx, &mlen))
3484121936Sharti		return (-2);
3485121936Sharti
3486121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
3487121936Sharti		if((p->tns[i].h.present & UNI_IE_PRESENT) &&
3488121936Sharti		   uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
3489121936Sharti		return ((i << 16) + UNI_IE_TNS);
3490121936Sharti	if((p->calling.h.present & UNI_IE_PRESENT) &&
3491121936Sharti	   uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
3492121936Sharti		return (UNI_IE_CALLING);
3493121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
3494121936Sharti		if((p->callingsub[i].h.present & UNI_IE_PRESENT) &&
3495121936Sharti		   uni_encode_ie(UNI_IE_CALLINGSUB, msg, (union uni_ieall *)&p->callingsub[i], cx))
3496121936Sharti		return ((i << 16) + UNI_IE_CALLINGSUB);
3497121936Sharti	if((p->called.h.present & UNI_IE_PRESENT) &&
3498121936Sharti	   uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3499121936Sharti		return (UNI_IE_CALLED);
3500121936Sharti	for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
3501121936Sharti		if((p->calledsub[i].h.present & UNI_IE_PRESENT) &&
3502121936Sharti		   uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub[i], cx))
3503121936Sharti		return ((i << 16) + UNI_IE_CALLEDSUB);
3504121936Sharti	if((p->lij_callid.h.present & UNI_IE_PRESENT) &&
3505121936Sharti	   uni_encode_ie(UNI_IE_LIJ_CALLID, msg, (union uni_ieall *)&p->lij_callid, cx))
3506121936Sharti		return (UNI_IE_LIJ_CALLID);
3507121936Sharti	if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
3508121936Sharti	   uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
3509121936Sharti		return (UNI_IE_LIJ_SEQNO);
3510121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3511121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3512121936Sharti		return (UNI_IE_UNREC);
3513121936Sharti
3514121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3515121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3516121936Sharti
3517121936Sharti	return (0);
3518121936Sharti}
3519121936Sharti
3520121936Shartistatic int
3521121936Shartidecode_leaf_setup_req(struct uni_leaf_setup_req *out, struct uni_msg *msg,
3522121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3523121936Sharti    struct unicx *cx)
3524121936Sharti{
3525121936Sharti	u_int i;
3526121936Sharti
3527121936Sharti	switch (ie) {
3528121936Sharti
3529121936Sharti	  case UNI_IE_TNS:
3530121936Sharti		for(i = 0; i < UNI_NUM_IE_TNS; i++)
3531121936Sharti			if (!IE_ISPRESENT(out->tns[i])) {
3532121936Sharti				out->tns[i].h = *hdr;
3533121936Sharti				if (hdr->present & UNI_IE_ERROR)
3534121936Sharti					return (DEC_ERR);
3535121936Sharti				if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
3536121936Sharti					return (DEC_ERR);
3537121936Sharti				break;
3538121936Sharti			}
3539121936Sharti		break;
3540121936Sharti
3541121936Sharti	  case UNI_IE_CALLING:
3542121936Sharti		out->calling.h = *hdr;
3543121936Sharti		if (hdr->present & UNI_IE_ERROR)
3544121936Sharti			return (DEC_ERR);
3545121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
3546121936Sharti			return (DEC_ERR);
3547121936Sharti		break;
3548121936Sharti
3549121936Sharti	  case UNI_IE_CALLINGSUB:
3550121936Sharti		for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
3551121936Sharti			if (!IE_ISPRESENT(out->callingsub[i])) {
3552121936Sharti				out->callingsub[i].h = *hdr;
3553121936Sharti				if (hdr->present & UNI_IE_ERROR)
3554121936Sharti					return (DEC_ERR);
3555121936Sharti				if(uni_decode_ie_body(UNI_IE_CALLINGSUB, (union uni_ieall *)&out->callingsub[i], msg, ielen, cx))
3556121936Sharti					return (DEC_ERR);
3557121936Sharti				break;
3558121936Sharti			}
3559121936Sharti		break;
3560121936Sharti
3561121936Sharti	  case UNI_IE_CALLED:
3562121936Sharti		out->called.h = *hdr;
3563121936Sharti		if (hdr->present & UNI_IE_ERROR)
3564121936Sharti			return (DEC_ERR);
3565121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3566121936Sharti			return (DEC_ERR);
3567121936Sharti		break;
3568121936Sharti
3569121936Sharti	  case UNI_IE_CALLEDSUB:
3570121936Sharti		for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
3571121936Sharti			if (!IE_ISPRESENT(out->calledsub[i])) {
3572121936Sharti				out->calledsub[i].h = *hdr;
3573121936Sharti				if (hdr->present & UNI_IE_ERROR)
3574121936Sharti					return (DEC_ERR);
3575121936Sharti				if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub[i], msg, ielen, cx))
3576121936Sharti					return (DEC_ERR);
3577121936Sharti				break;
3578121936Sharti			}
3579121936Sharti		break;
3580121936Sharti
3581121936Sharti	  case UNI_IE_LIJ_CALLID:
3582121936Sharti		out->lij_callid.h = *hdr;
3583121936Sharti		if (hdr->present & UNI_IE_ERROR)
3584121936Sharti			return (DEC_ERR);
3585121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_CALLID, (union uni_ieall *)&out->lij_callid, msg, ielen, cx))
3586121936Sharti			return (DEC_ERR);
3587121936Sharti		break;
3588121936Sharti
3589121936Sharti	  case UNI_IE_LIJ_SEQNO:
3590121936Sharti		out->lij_seqno.h = *hdr;
3591121936Sharti		if (hdr->present & UNI_IE_ERROR)
3592121936Sharti			return (DEC_ERR);
3593121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
3594121936Sharti			return (DEC_ERR);
3595121936Sharti		break;
3596121936Sharti
3597121936Sharti	  case UNI_IE_UNREC:
3598121936Sharti		out->unrec.h = *hdr;
3599121936Sharti		if (hdr->present & UNI_IE_ERROR)
3600121936Sharti			return (DEC_ERR);
3601121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3602121936Sharti			return (DEC_ERR);
3603121936Sharti		break;
3604121936Sharti
3605121936Sharti	  default:
3606121936Sharti		return (DEC_ILL);
3607121936Sharti	}
3608121936Sharti	return (DEC_OK);
3609121936Sharti}
3610121936Sharti
3611121936Shartistatic const struct msgdecl decl_leaf_setup_req = {
3612121936Sharti	0,
3613121936Sharti	"leaf_setup_req",
3614121936Sharti	(uni_msg_print_f)print_leaf_setup_req,
3615121936Sharti	(uni_msg_check_f)check_leaf_setup_req,
3616121936Sharti	(uni_msg_encode_f)encode_leaf_setup_req,
3617121936Sharti	(uni_msg_decode_f)decode_leaf_setup_req
3618121936Sharti};
3619121936Sharti
3620121936Shartistatic void
3621121936Shartiprint_leaf_setup_fail(struct uni_leaf_setup_fail *msg, struct unicx *cx)
3622121936Sharti{
3623121936Sharti	u_int i;
3624121936Sharti
3625121936Sharti	if(msg->cause.h.present & UNI_IE_PRESENT)
3626121936Sharti		uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
3627121936Sharti	if(msg->called.h.present & UNI_IE_PRESENT)
3628121936Sharti		uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3629121936Sharti	if(msg->calledsub.h.present & UNI_IE_PRESENT)
3630121936Sharti		uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub, cx);
3631121936Sharti	if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
3632121936Sharti		uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
3633121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
3634121936Sharti		if(msg->tns[i].h.present & UNI_IE_PRESENT)
3635121936Sharti			uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
3636121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
3637121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3638121936Sharti}
3639121936Sharti
3640121936Shartistatic int
3641121936Sharticheck_leaf_setup_fail(struct uni_leaf_setup_fail *m, struct unicx *cx)
3642121936Sharti{
3643121936Sharti	int ret = 0;
3644121936Sharti	u_int i;
3645121936Sharti
3646121936Sharti	ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3647121936Sharti	ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3648121936Sharti	ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub, cx);
3649121936Sharti	ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
3650121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
3651121936Sharti		ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
3652121936Sharti	}
3653121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3654121936Sharti
3655121936Sharti	return ret;
3656121936Sharti}
3657121936Sharti
3658121936Shartistatic int
3659121936Shartiencode_leaf_setup_fail(struct uni_msg *msg, struct uni_leaf_setup_fail *p, struct unicx *cx)
3660121936Sharti{
3661121936Sharti	u_int mlen;
3662121936Sharti	u_int i;
3663121936Sharti
3664121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_LEAF_SETUP_FAIL, cx, &mlen))
3665121936Sharti		return (-2);
3666121936Sharti
3667121936Sharti	if((p->cause.h.present & UNI_IE_PRESENT) &&
3668121936Sharti	   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3669121936Sharti		return (UNI_IE_CAUSE);
3670121936Sharti	if((p->called.h.present & UNI_IE_PRESENT) &&
3671121936Sharti	   uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3672121936Sharti		return (UNI_IE_CALLED);
3673121936Sharti	if((p->calledsub.h.present & UNI_IE_PRESENT) &&
3674121936Sharti	   uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub, cx))
3675121936Sharti		return (UNI_IE_CALLEDSUB);
3676121936Sharti	if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
3677121936Sharti	   uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
3678121936Sharti		return (UNI_IE_LIJ_SEQNO);
3679121936Sharti	for(i = 0; i < UNI_NUM_IE_TNS; i++)
3680121936Sharti		if((p->tns[i].h.present & UNI_IE_PRESENT) &&
3681121936Sharti		   uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
3682121936Sharti		return ((i << 16) + UNI_IE_TNS);
3683121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3684121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3685121936Sharti		return (UNI_IE_UNREC);
3686121936Sharti
3687121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3688121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3689121936Sharti
3690121936Sharti	return (0);
3691121936Sharti}
3692121936Sharti
3693121936Shartistatic int
3694121936Shartidecode_leaf_setup_fail(struct uni_leaf_setup_fail *out, struct uni_msg *msg,
3695121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3696121936Sharti    struct unicx *cx)
3697121936Sharti{
3698121936Sharti	u_int i;
3699121936Sharti
3700121936Sharti	switch (ie) {
3701121936Sharti
3702121936Sharti	  case UNI_IE_CAUSE:
3703121936Sharti		out->cause.h = *hdr;
3704121936Sharti		if (hdr->present & UNI_IE_ERROR)
3705121936Sharti			return (DEC_ERR);
3706121936Sharti		if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3707121936Sharti			return (DEC_ERR);
3708121936Sharti		break;
3709121936Sharti
3710121936Sharti	  case UNI_IE_CALLED:
3711121936Sharti		out->called.h = *hdr;
3712121936Sharti		if (hdr->present & UNI_IE_ERROR)
3713121936Sharti			return (DEC_ERR);
3714121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3715121936Sharti			return (DEC_ERR);
3716121936Sharti		break;
3717121936Sharti
3718121936Sharti	  case UNI_IE_CALLEDSUB:
3719121936Sharti		out->calledsub.h = *hdr;
3720121936Sharti		if (hdr->present & UNI_IE_ERROR)
3721121936Sharti			return (DEC_ERR);
3722121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub, msg, ielen, cx))
3723121936Sharti			return (DEC_ERR);
3724121936Sharti		break;
3725121936Sharti
3726121936Sharti	  case UNI_IE_LIJ_SEQNO:
3727121936Sharti		out->lij_seqno.h = *hdr;
3728121936Sharti		if (hdr->present & UNI_IE_ERROR)
3729121936Sharti			return (DEC_ERR);
3730121936Sharti		if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
3731121936Sharti			return (DEC_ERR);
3732121936Sharti		break;
3733121936Sharti
3734121936Sharti	  case UNI_IE_TNS:
3735121936Sharti		for(i = 0; i < UNI_NUM_IE_TNS; i++)
3736121936Sharti			if (!IE_ISPRESENT(out->tns[i])) {
3737121936Sharti				out->tns[i].h = *hdr;
3738121936Sharti				if (hdr->present & UNI_IE_ERROR)
3739121936Sharti					return (DEC_ERR);
3740121936Sharti				if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
3741121936Sharti					return (DEC_ERR);
3742121936Sharti				break;
3743121936Sharti			}
3744121936Sharti		break;
3745121936Sharti
3746121936Sharti	  case UNI_IE_UNREC:
3747121936Sharti		out->unrec.h = *hdr;
3748121936Sharti		if (hdr->present & UNI_IE_ERROR)
3749121936Sharti			return (DEC_ERR);
3750121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3751121936Sharti			return (DEC_ERR);
3752121936Sharti		break;
3753121936Sharti
3754121936Sharti	  default:
3755121936Sharti		return (DEC_ILL);
3756121936Sharti	}
3757121936Sharti	return (DEC_OK);
3758121936Sharti}
3759121936Sharti
3760121936Shartistatic const struct msgdecl decl_leaf_setup_fail = {
3761121936Sharti	0,
3762121936Sharti	"leaf_setup_fail",
3763121936Sharti	(uni_msg_print_f)print_leaf_setup_fail,
3764121936Sharti	(uni_msg_check_f)check_leaf_setup_fail,
3765121936Sharti	(uni_msg_encode_f)encode_leaf_setup_fail,
3766121936Sharti	(uni_msg_decode_f)decode_leaf_setup_fail
3767121936Sharti};
3768121936Sharti
3769121936Shartistatic void
3770121936Shartiprint_cobisetup(struct uni_cobisetup *msg, struct unicx *cx)
3771121936Sharti{
3772121936Sharti	if(msg->facility.h.present & UNI_IE_PRESENT)
3773121936Sharti		uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
3774121936Sharti	if(msg->called.h.present & UNI_IE_PRESENT)
3775121936Sharti		uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3776121936Sharti	if(msg->calledsub.h.present & UNI_IE_PRESENT)
3777121936Sharti		uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub, cx);
3778121936Sharti	if(msg->calling.h.present & UNI_IE_PRESENT)
3779121936Sharti		uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
3780121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
3781121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
3782121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
3783121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3784121936Sharti}
3785121936Sharti
3786121936Shartistatic int
3787121936Sharticheck_cobisetup(struct uni_cobisetup *m, struct unicx *cx)
3788121936Sharti{
3789121936Sharti	int ret = 0;
3790121936Sharti
3791121936Sharti	ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
3792121936Sharti	ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3793121936Sharti	ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub, cx);
3794121936Sharti	ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
3795121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
3796121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3797121936Sharti
3798121936Sharti	return ret;
3799121936Sharti}
3800121936Sharti
3801121936Shartistatic int
3802121936Shartiencode_cobisetup(struct uni_msg *msg, struct uni_cobisetup *p, struct unicx *cx)
3803121936Sharti{
3804121936Sharti	u_int mlen;
3805121936Sharti
3806121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_COBISETUP, cx, &mlen))
3807121936Sharti		return (-2);
3808121936Sharti
3809121936Sharti	if((p->facility.h.present & UNI_IE_PRESENT) &&
3810121936Sharti	   uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
3811121936Sharti		return (UNI_IE_FACILITY);
3812121936Sharti	if((p->called.h.present & UNI_IE_PRESENT) &&
3813121936Sharti	   uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3814121936Sharti		return (UNI_IE_CALLED);
3815121936Sharti	if((p->calledsub.h.present & UNI_IE_PRESENT) &&
3816121936Sharti	   uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub, cx))
3817121936Sharti		return (UNI_IE_CALLEDSUB);
3818121936Sharti	if((p->calling.h.present & UNI_IE_PRESENT) &&
3819121936Sharti	   uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
3820121936Sharti		return (UNI_IE_CALLING);
3821121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
3822121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
3823121936Sharti		return (UNI_IE_NOTIFY);
3824121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3825121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3826121936Sharti		return (UNI_IE_UNREC);
3827121936Sharti
3828121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3829121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3830121936Sharti
3831121936Sharti	return (0);
3832121936Sharti}
3833121936Sharti
3834121936Shartistatic int
3835121936Shartidecode_cobisetup(struct uni_cobisetup *out, struct uni_msg *msg,
3836121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3837121936Sharti    struct unicx *cx)
3838121936Sharti{
3839121936Sharti	switch (ie) {
3840121936Sharti
3841121936Sharti	  case UNI_IE_FACILITY:
3842121936Sharti		out->facility.h = *hdr;
3843121936Sharti		if (hdr->present & UNI_IE_ERROR)
3844121936Sharti			return (DEC_ERR);
3845121936Sharti		if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
3846121936Sharti			return (DEC_ERR);
3847121936Sharti		break;
3848121936Sharti
3849121936Sharti	  case UNI_IE_CALLED:
3850121936Sharti		out->called.h = *hdr;
3851121936Sharti		if (hdr->present & UNI_IE_ERROR)
3852121936Sharti			return (DEC_ERR);
3853121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3854121936Sharti			return (DEC_ERR);
3855121936Sharti		break;
3856121936Sharti
3857121936Sharti	  case UNI_IE_CALLEDSUB:
3858121936Sharti		out->calledsub.h = *hdr;
3859121936Sharti		if (hdr->present & UNI_IE_ERROR)
3860121936Sharti			return (DEC_ERR);
3861121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub, msg, ielen, cx))
3862121936Sharti			return (DEC_ERR);
3863121936Sharti		break;
3864121936Sharti
3865121936Sharti	  case UNI_IE_CALLING:
3866121936Sharti		out->calling.h = *hdr;
3867121936Sharti		if (hdr->present & UNI_IE_ERROR)
3868121936Sharti			return (DEC_ERR);
3869121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
3870121936Sharti			return (DEC_ERR);
3871121936Sharti		break;
3872121936Sharti
3873121936Sharti	  case UNI_IE_NOTIFY:
3874121936Sharti		out->notify.h = *hdr;
3875121936Sharti		if (hdr->present & UNI_IE_ERROR)
3876121936Sharti			return (DEC_ERR);
3877121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
3878121936Sharti			return (DEC_ERR);
3879121936Sharti		break;
3880121936Sharti
3881121936Sharti	  case UNI_IE_UNREC:
3882121936Sharti		out->unrec.h = *hdr;
3883121936Sharti		if (hdr->present & UNI_IE_ERROR)
3884121936Sharti			return (DEC_ERR);
3885121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3886121936Sharti			return (DEC_ERR);
3887121936Sharti		break;
3888121936Sharti
3889121936Sharti	  default:
3890121936Sharti		return (DEC_ILL);
3891121936Sharti	}
3892121936Sharti	return (DEC_OK);
3893121936Sharti}
3894121936Sharti
3895121936Shartistatic const struct msgdecl decl_cobisetup = {
3896121936Sharti	0,
3897121936Sharti	"cobisetup",
3898121936Sharti	(uni_msg_print_f)print_cobisetup,
3899121936Sharti	(uni_msg_check_f)check_cobisetup,
3900121936Sharti	(uni_msg_encode_f)encode_cobisetup,
3901121936Sharti	(uni_msg_decode_f)decode_cobisetup
3902121936Sharti};
3903121936Sharti
3904121936Shartistatic void
3905121936Shartiprint_facility(struct uni_facility *msg, struct unicx *cx)
3906121936Sharti{
3907121936Sharti	if(msg->facility.h.present & UNI_IE_PRESENT)
3908121936Sharti		uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
3909121936Sharti	if(msg->called.h.present & UNI_IE_PRESENT)
3910121936Sharti		uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3911121936Sharti	if(msg->calledsub.h.present & UNI_IE_PRESENT)
3912121936Sharti		uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub, cx);
3913121936Sharti	if(msg->calling.h.present & UNI_IE_PRESENT)
3914121936Sharti		uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
3915121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
3916121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
3917121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
3918121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3919121936Sharti}
3920121936Sharti
3921121936Shartistatic int
3922121936Sharticheck_facility(struct uni_facility *m, struct unicx *cx)
3923121936Sharti{
3924121936Sharti	int ret = 0;
3925121936Sharti
3926121936Sharti	ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
3927121936Sharti	ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3928121936Sharti	ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub, cx);
3929121936Sharti	ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
3930121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
3931121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3932121936Sharti
3933121936Sharti	return ret;
3934121936Sharti}
3935121936Sharti
3936121936Shartistatic int
3937121936Shartiencode_facility(struct uni_msg *msg, struct uni_facility *p, struct unicx *cx)
3938121936Sharti{
3939121936Sharti	u_int mlen;
3940121936Sharti
3941121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_FACILITY, cx, &mlen))
3942121936Sharti		return (-2);
3943121936Sharti
3944121936Sharti	if((p->facility.h.present & UNI_IE_PRESENT) &&
3945121936Sharti	   uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
3946121936Sharti		return (UNI_IE_FACILITY);
3947121936Sharti	if((p->called.h.present & UNI_IE_PRESENT) &&
3948121936Sharti	   uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3949121936Sharti		return (UNI_IE_CALLED);
3950121936Sharti	if((p->calledsub.h.present & UNI_IE_PRESENT) &&
3951121936Sharti	   uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub, cx))
3952121936Sharti		return (UNI_IE_CALLEDSUB);
3953121936Sharti	if((p->calling.h.present & UNI_IE_PRESENT) &&
3954121936Sharti	   uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
3955121936Sharti		return (UNI_IE_CALLING);
3956121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
3957121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
3958121936Sharti		return (UNI_IE_NOTIFY);
3959121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
3960121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3961121936Sharti		return (UNI_IE_UNREC);
3962121936Sharti
3963121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3964121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3965121936Sharti
3966121936Sharti	return (0);
3967121936Sharti}
3968121936Sharti
3969121936Shartistatic int
3970121936Shartidecode_facility(struct uni_facility *out, struct uni_msg *msg,
3971121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3972121936Sharti    struct unicx *cx)
3973121936Sharti{
3974121936Sharti	switch (ie) {
3975121936Sharti
3976121936Sharti	  case UNI_IE_FACILITY:
3977121936Sharti		out->facility.h = *hdr;
3978121936Sharti		if (hdr->present & UNI_IE_ERROR)
3979121936Sharti			return (DEC_ERR);
3980121936Sharti		if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
3981121936Sharti			return (DEC_ERR);
3982121936Sharti		break;
3983121936Sharti
3984121936Sharti	  case UNI_IE_CALLED:
3985121936Sharti		out->called.h = *hdr;
3986121936Sharti		if (hdr->present & UNI_IE_ERROR)
3987121936Sharti			return (DEC_ERR);
3988121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3989121936Sharti			return (DEC_ERR);
3990121936Sharti		break;
3991121936Sharti
3992121936Sharti	  case UNI_IE_CALLEDSUB:
3993121936Sharti		out->calledsub.h = *hdr;
3994121936Sharti		if (hdr->present & UNI_IE_ERROR)
3995121936Sharti			return (DEC_ERR);
3996121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub, msg, ielen, cx))
3997121936Sharti			return (DEC_ERR);
3998121936Sharti		break;
3999121936Sharti
4000121936Sharti	  case UNI_IE_CALLING:
4001121936Sharti		out->calling.h = *hdr;
4002121936Sharti		if (hdr->present & UNI_IE_ERROR)
4003121936Sharti			return (DEC_ERR);
4004121936Sharti		if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
4005121936Sharti			return (DEC_ERR);
4006121936Sharti		break;
4007121936Sharti
4008121936Sharti	  case UNI_IE_NOTIFY:
4009121936Sharti		out->notify.h = *hdr;
4010121936Sharti		if (hdr->present & UNI_IE_ERROR)
4011121936Sharti			return (DEC_ERR);
4012121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4013121936Sharti			return (DEC_ERR);
4014121936Sharti		break;
4015121936Sharti
4016121936Sharti	  case UNI_IE_UNREC:
4017121936Sharti		out->unrec.h = *hdr;
4018121936Sharti		if (hdr->present & UNI_IE_ERROR)
4019121936Sharti			return (DEC_ERR);
4020121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4021121936Sharti			return (DEC_ERR);
4022121936Sharti		break;
4023121936Sharti
4024121936Sharti	  default:
4025121936Sharti		return (DEC_ILL);
4026121936Sharti	}
4027121936Sharti	return (DEC_OK);
4028121936Sharti}
4029121936Sharti
4030121936Shartistatic const struct msgdecl decl_facility = {
4031121936Sharti	0,
4032121936Sharti	"facility",
4033121936Sharti	(uni_msg_print_f)print_facility,
4034121936Sharti	(uni_msg_check_f)check_facility,
4035121936Sharti	(uni_msg_encode_f)encode_facility,
4036121936Sharti	(uni_msg_decode_f)decode_facility
4037121936Sharti};
4038121936Sharti
4039121936Shartistatic void
4040121936Shartiprint_modify_req(struct uni_modify_req *msg, struct unicx *cx)
4041121936Sharti{
4042121936Sharti	u_int i;
4043121936Sharti
4044121936Sharti	if(msg->traffic.h.present & UNI_IE_PRESENT)
4045121936Sharti		uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
4046121936Sharti	if(msg->atraffic.h.present & UNI_IE_PRESENT)
4047121936Sharti		uni_print_ie_internal(UNI_IE_ATRAFFIC, (union uni_ieall *)&msg->atraffic, cx);
4048121936Sharti	if(msg->mintraffic.h.present & UNI_IE_PRESENT)
4049121936Sharti		uni_print_ie_internal(UNI_IE_MINTRAFFIC, (union uni_ieall *)&msg->mintraffic, cx);
4050121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
4051121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4052121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4053121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
4054121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4055121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
4056121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4057121936Sharti}
4058121936Sharti
4059121936Shartistatic int
4060121936Sharticheck_modify_req(struct uni_modify_req *m, struct unicx *cx)
4061121936Sharti{
4062121936Sharti	int ret = 0;
4063121936Sharti	u_int i;
4064121936Sharti
4065121936Sharti	ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
4066121936Sharti	ret |= uni_check_ie(UNI_IE_ATRAFFIC, (union uni_ieall *)&m->atraffic, cx);
4067121936Sharti	ret |= uni_check_ie(UNI_IE_MINTRAFFIC, (union uni_ieall *)&m->mintraffic, cx);
4068121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4069121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4070121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4071121936Sharti	}
4072121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4073121936Sharti
4074121936Sharti	return ret;
4075121936Sharti}
4076121936Sharti
4077121936Shartistatic int
4078121936Shartiencode_modify_req(struct uni_msg *msg, struct uni_modify_req *p, struct unicx *cx)
4079121936Sharti{
4080121936Sharti	u_int mlen;
4081121936Sharti	u_int i;
4082121936Sharti
4083121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_MODIFY_REQ, cx, &mlen))
4084121936Sharti		return (-2);
4085121936Sharti
4086121936Sharti	if((p->traffic.h.present & UNI_IE_PRESENT) &&
4087121936Sharti	   uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
4088121936Sharti		return (UNI_IE_TRAFFIC);
4089121936Sharti	if((p->atraffic.h.present & UNI_IE_PRESENT) &&
4090121936Sharti	   uni_encode_ie(UNI_IE_ATRAFFIC, msg, (union uni_ieall *)&p->atraffic, cx))
4091121936Sharti		return (UNI_IE_ATRAFFIC);
4092121936Sharti	if((p->mintraffic.h.present & UNI_IE_PRESENT) &&
4093121936Sharti	   uni_encode_ie(UNI_IE_MINTRAFFIC, msg, (union uni_ieall *)&p->mintraffic, cx))
4094121936Sharti		return (UNI_IE_MINTRAFFIC);
4095121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
4096121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4097121936Sharti		return (UNI_IE_NOTIFY);
4098121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4099121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
4100121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4101121936Sharti		return ((i << 16) + UNI_IE_GIT);
4102121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
4103121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4104121936Sharti		return (UNI_IE_UNREC);
4105121936Sharti
4106121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4107121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4108121936Sharti
4109121936Sharti	return (0);
4110121936Sharti}
4111121936Sharti
4112121936Shartistatic int
4113121936Shartidecode_modify_req(struct uni_modify_req *out, struct uni_msg *msg,
4114121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4115121936Sharti    struct unicx *cx)
4116121936Sharti{
4117121936Sharti	u_int i;
4118121936Sharti
4119121936Sharti	switch (ie) {
4120121936Sharti
4121121936Sharti	  case UNI_IE_TRAFFIC:
4122121936Sharti		out->traffic.h = *hdr;
4123121936Sharti		if (hdr->present & UNI_IE_ERROR)
4124121936Sharti			return (DEC_ERR);
4125121936Sharti		if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
4126121936Sharti			return (DEC_ERR);
4127121936Sharti		break;
4128121936Sharti
4129121936Sharti	  case UNI_IE_ATRAFFIC:
4130121936Sharti		out->atraffic.h = *hdr;
4131121936Sharti		if (hdr->present & UNI_IE_ERROR)
4132121936Sharti			return (DEC_ERR);
4133121936Sharti		if(uni_decode_ie_body(UNI_IE_ATRAFFIC, (union uni_ieall *)&out->atraffic, msg, ielen, cx))
4134121936Sharti			return (DEC_ERR);
4135121936Sharti		break;
4136121936Sharti
4137121936Sharti	  case UNI_IE_MINTRAFFIC:
4138121936Sharti		out->mintraffic.h = *hdr;
4139121936Sharti		if (hdr->present & UNI_IE_ERROR)
4140121936Sharti			return (DEC_ERR);
4141121936Sharti		if(uni_decode_ie_body(UNI_IE_MINTRAFFIC, (union uni_ieall *)&out->mintraffic, msg, ielen, cx))
4142121936Sharti			return (DEC_ERR);
4143121936Sharti		break;
4144121936Sharti
4145121936Sharti	  case UNI_IE_NOTIFY:
4146121936Sharti		out->notify.h = *hdr;
4147121936Sharti		if (hdr->present & UNI_IE_ERROR)
4148121936Sharti			return (DEC_ERR);
4149121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4150121936Sharti			return (DEC_ERR);
4151121936Sharti		break;
4152121936Sharti
4153121936Sharti	  case UNI_IE_GIT:
4154121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
4155121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
4156121936Sharti				out->git[i].h = *hdr;
4157121936Sharti				if (hdr->present & UNI_IE_ERROR)
4158121936Sharti					return (DEC_ERR);
4159121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4160121936Sharti					return (DEC_ERR);
4161121936Sharti				break;
4162121936Sharti			}
4163121936Sharti		break;
4164121936Sharti
4165121936Sharti	  case UNI_IE_UNREC:
4166121936Sharti		out->unrec.h = *hdr;
4167121936Sharti		if (hdr->present & UNI_IE_ERROR)
4168121936Sharti			return (DEC_ERR);
4169121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4170121936Sharti			return (DEC_ERR);
4171121936Sharti		break;
4172121936Sharti
4173121936Sharti	  default:
4174121936Sharti		return (DEC_ILL);
4175121936Sharti	}
4176121936Sharti	return (DEC_OK);
4177121936Sharti}
4178121936Sharti
4179121936Shartistatic const struct msgdecl decl_modify_req = {
4180121936Sharti	0,
4181121936Sharti	"modify_req",
4182121936Sharti	(uni_msg_print_f)print_modify_req,
4183121936Sharti	(uni_msg_check_f)check_modify_req,
4184121936Sharti	(uni_msg_encode_f)encode_modify_req,
4185121936Sharti	(uni_msg_decode_f)decode_modify_req
4186121936Sharti};
4187121936Sharti
4188121936Shartistatic void
4189121936Shartiprint_modify_ack(struct uni_modify_ack *msg, struct unicx *cx)
4190121936Sharti{
4191121936Sharti	u_int i;
4192121936Sharti
4193121936Sharti	if(msg->report.h.present & UNI_IE_PRESENT)
4194121936Sharti		uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
4195121936Sharti	if(msg->traffic.h.present & UNI_IE_PRESENT)
4196121936Sharti		uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
4197121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
4198121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4199121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4200121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
4201121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4202121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
4203121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4204121936Sharti}
4205121936Sharti
4206121936Shartistatic int
4207121936Sharticheck_modify_ack(struct uni_modify_ack *m, struct unicx *cx)
4208121936Sharti{
4209121936Sharti	int ret = 0;
4210121936Sharti	u_int i;
4211121936Sharti
4212121936Sharti	ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
4213121936Sharti	ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
4214121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4215121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4216121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4217121936Sharti	}
4218121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4219121936Sharti
4220121936Sharti	return ret;
4221121936Sharti}
4222121936Sharti
4223121936Shartistatic int
4224121936Shartiencode_modify_ack(struct uni_msg *msg, struct uni_modify_ack *p, struct unicx *cx)
4225121936Sharti{
4226121936Sharti	u_int mlen;
4227121936Sharti	u_int i;
4228121936Sharti
4229121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_MODIFY_ACK, cx, &mlen))
4230121936Sharti		return (-2);
4231121936Sharti
4232121936Sharti	if((p->report.h.present & UNI_IE_PRESENT) &&
4233121936Sharti	   uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
4234121936Sharti		return (UNI_IE_REPORT);
4235121936Sharti	if((p->traffic.h.present & UNI_IE_PRESENT) &&
4236121936Sharti	   uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
4237121936Sharti		return (UNI_IE_TRAFFIC);
4238121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
4239121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4240121936Sharti		return (UNI_IE_NOTIFY);
4241121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4242121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
4243121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4244121936Sharti		return ((i << 16) + UNI_IE_GIT);
4245121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
4246121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4247121936Sharti		return (UNI_IE_UNREC);
4248121936Sharti
4249121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4250121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4251121936Sharti
4252121936Sharti	return (0);
4253121936Sharti}
4254121936Sharti
4255121936Shartistatic int
4256121936Shartidecode_modify_ack(struct uni_modify_ack *out, struct uni_msg *msg,
4257121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4258121936Sharti    struct unicx *cx)
4259121936Sharti{
4260121936Sharti	u_int i;
4261121936Sharti
4262121936Sharti	switch (ie) {
4263121936Sharti
4264121936Sharti	  case UNI_IE_REPORT:
4265121936Sharti		out->report.h = *hdr;
4266121936Sharti		if (hdr->present & UNI_IE_ERROR)
4267121936Sharti			return (DEC_ERR);
4268121936Sharti		if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
4269121936Sharti			return (DEC_ERR);
4270121936Sharti		break;
4271121936Sharti
4272121936Sharti	  case UNI_IE_TRAFFIC:
4273121936Sharti		out->traffic.h = *hdr;
4274121936Sharti		if (hdr->present & UNI_IE_ERROR)
4275121936Sharti			return (DEC_ERR);
4276121936Sharti		if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
4277121936Sharti			return (DEC_ERR);
4278121936Sharti		break;
4279121936Sharti
4280121936Sharti	  case UNI_IE_NOTIFY:
4281121936Sharti		out->notify.h = *hdr;
4282121936Sharti		if (hdr->present & UNI_IE_ERROR)
4283121936Sharti			return (DEC_ERR);
4284121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4285121936Sharti			return (DEC_ERR);
4286121936Sharti		break;
4287121936Sharti
4288121936Sharti	  case UNI_IE_GIT:
4289121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
4290121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
4291121936Sharti				out->git[i].h = *hdr;
4292121936Sharti				if (hdr->present & UNI_IE_ERROR)
4293121936Sharti					return (DEC_ERR);
4294121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4295121936Sharti					return (DEC_ERR);
4296121936Sharti				break;
4297121936Sharti			}
4298121936Sharti		break;
4299121936Sharti
4300121936Sharti	  case UNI_IE_UNREC:
4301121936Sharti		out->unrec.h = *hdr;
4302121936Sharti		if (hdr->present & UNI_IE_ERROR)
4303121936Sharti			return (DEC_ERR);
4304121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4305121936Sharti			return (DEC_ERR);
4306121936Sharti		break;
4307121936Sharti
4308121936Sharti	  default:
4309121936Sharti		return (DEC_ILL);
4310121936Sharti	}
4311121936Sharti	return (DEC_OK);
4312121936Sharti}
4313121936Sharti
4314121936Shartistatic const struct msgdecl decl_modify_ack = {
4315121936Sharti	0,
4316121936Sharti	"modify_ack",
4317121936Sharti	(uni_msg_print_f)print_modify_ack,
4318121936Sharti	(uni_msg_check_f)check_modify_ack,
4319121936Sharti	(uni_msg_encode_f)encode_modify_ack,
4320121936Sharti	(uni_msg_decode_f)decode_modify_ack
4321121936Sharti};
4322121936Sharti
4323121936Shartistatic void
4324121936Shartiprint_modify_rej(struct uni_modify_rej *msg, struct unicx *cx)
4325121936Sharti{
4326121936Sharti	u_int i;
4327121936Sharti
4328121936Sharti	if(msg->cause.h.present & UNI_IE_PRESENT)
4329121936Sharti		uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
4330121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
4331121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4332121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4333121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
4334121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4335121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
4336121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4337121936Sharti}
4338121936Sharti
4339121936Shartistatic int
4340121936Sharticheck_modify_rej(struct uni_modify_rej *m, struct unicx *cx)
4341121936Sharti{
4342121936Sharti	int ret = 0;
4343121936Sharti	u_int i;
4344121936Sharti
4345121936Sharti	ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
4346121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4347121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4348121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4349121936Sharti	}
4350121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4351121936Sharti
4352121936Sharti	return ret;
4353121936Sharti}
4354121936Sharti
4355121936Shartistatic int
4356121936Shartiencode_modify_rej(struct uni_msg *msg, struct uni_modify_rej *p, struct unicx *cx)
4357121936Sharti{
4358121936Sharti	u_int mlen;
4359121936Sharti	u_int i;
4360121936Sharti
4361121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_MODIFY_REJ, cx, &mlen))
4362121936Sharti		return (-2);
4363121936Sharti
4364121936Sharti	if((p->cause.h.present & UNI_IE_PRESENT) &&
4365121936Sharti	   uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
4366121936Sharti		return (UNI_IE_CAUSE);
4367121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
4368121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4369121936Sharti		return (UNI_IE_NOTIFY);
4370121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4371121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
4372121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4373121936Sharti		return ((i << 16) + UNI_IE_GIT);
4374121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
4375121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4376121936Sharti		return (UNI_IE_UNREC);
4377121936Sharti
4378121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4379121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4380121936Sharti
4381121936Sharti	return (0);
4382121936Sharti}
4383121936Sharti
4384121936Shartistatic int
4385121936Shartidecode_modify_rej(struct uni_modify_rej *out, struct uni_msg *msg,
4386121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4387121936Sharti    struct unicx *cx)
4388121936Sharti{
4389121936Sharti	u_int i;
4390121936Sharti
4391121936Sharti	switch (ie) {
4392121936Sharti
4393121936Sharti	  case UNI_IE_CAUSE:
4394121936Sharti		out->cause.h = *hdr;
4395121936Sharti		if (hdr->present & UNI_IE_ERROR)
4396121936Sharti			return (DEC_ERR);
4397121936Sharti		if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
4398121936Sharti			return (DEC_ERR);
4399121936Sharti		break;
4400121936Sharti
4401121936Sharti	  case UNI_IE_NOTIFY:
4402121936Sharti		out->notify.h = *hdr;
4403121936Sharti		if (hdr->present & UNI_IE_ERROR)
4404121936Sharti			return (DEC_ERR);
4405121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4406121936Sharti			return (DEC_ERR);
4407121936Sharti		break;
4408121936Sharti
4409121936Sharti	  case UNI_IE_GIT:
4410121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
4411121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
4412121936Sharti				out->git[i].h = *hdr;
4413121936Sharti				if (hdr->present & UNI_IE_ERROR)
4414121936Sharti					return (DEC_ERR);
4415121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4416121936Sharti					return (DEC_ERR);
4417121936Sharti				break;
4418121936Sharti			}
4419121936Sharti		break;
4420121936Sharti
4421121936Sharti	  case UNI_IE_UNREC:
4422121936Sharti		out->unrec.h = *hdr;
4423121936Sharti		if (hdr->present & UNI_IE_ERROR)
4424121936Sharti			return (DEC_ERR);
4425121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4426121936Sharti			return (DEC_ERR);
4427121936Sharti		break;
4428121936Sharti
4429121936Sharti	  default:
4430121936Sharti		return (DEC_ILL);
4431121936Sharti	}
4432121936Sharti	return (DEC_OK);
4433121936Sharti}
4434121936Sharti
4435121936Shartistatic const struct msgdecl decl_modify_rej = {
4436121936Sharti	0,
4437121936Sharti	"modify_rej",
4438121936Sharti	(uni_msg_print_f)print_modify_rej,
4439121936Sharti	(uni_msg_check_f)check_modify_rej,
4440121936Sharti	(uni_msg_encode_f)encode_modify_rej,
4441121936Sharti	(uni_msg_decode_f)decode_modify_rej
4442121936Sharti};
4443121936Sharti
4444121936Shartistatic void
4445121936Shartiprint_conn_avail(struct uni_conn_avail *msg, struct unicx *cx)
4446121936Sharti{
4447121936Sharti	u_int i;
4448121936Sharti
4449121936Sharti	if(msg->notify.h.present & UNI_IE_PRESENT)
4450121936Sharti		uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4451121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4452121936Sharti		if(msg->git[i].h.present & UNI_IE_PRESENT)
4453121936Sharti			uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4454121936Sharti	if(msg->report.h.present & UNI_IE_PRESENT)
4455121936Sharti		uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
4456121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
4457121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4458121936Sharti}
4459121936Sharti
4460121936Shartistatic int
4461121936Sharticheck_conn_avail(struct uni_conn_avail *m, struct unicx *cx)
4462121936Sharti{
4463121936Sharti	int ret = 0;
4464121936Sharti	u_int i;
4465121936Sharti
4466121936Sharti	ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4467121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4468121936Sharti		ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4469121936Sharti	}
4470121936Sharti	ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
4471121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4472121936Sharti
4473121936Sharti	return ret;
4474121936Sharti}
4475121936Sharti
4476121936Shartistatic int
4477121936Shartiencode_conn_avail(struct uni_msg *msg, struct uni_conn_avail *p, struct unicx *cx)
4478121936Sharti{
4479121936Sharti	u_int mlen;
4480121936Sharti	u_int i;
4481121936Sharti
4482121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CONN_AVAIL, cx, &mlen))
4483121936Sharti		return (-2);
4484121936Sharti
4485121936Sharti	if((p->notify.h.present & UNI_IE_PRESENT) &&
4486121936Sharti	   uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4487121936Sharti		return (UNI_IE_NOTIFY);
4488121936Sharti	for(i = 0; i < UNI_NUM_IE_GIT; i++)
4489121936Sharti		if((p->git[i].h.present & UNI_IE_PRESENT) &&
4490121936Sharti		   uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4491121936Sharti		return ((i << 16) + UNI_IE_GIT);
4492121936Sharti	if((p->report.h.present & UNI_IE_PRESENT) &&
4493121936Sharti	   uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
4494121936Sharti		return (UNI_IE_REPORT);
4495121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
4496121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4497121936Sharti		return (UNI_IE_UNREC);
4498121936Sharti
4499121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4500121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4501121936Sharti
4502121936Sharti	return (0);
4503121936Sharti}
4504121936Sharti
4505121936Shartistatic int
4506121936Shartidecode_conn_avail(struct uni_conn_avail *out, struct uni_msg *msg,
4507121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4508121936Sharti    struct unicx *cx)
4509121936Sharti{
4510121936Sharti	u_int i;
4511121936Sharti
4512121936Sharti	switch (ie) {
4513121936Sharti
4514121936Sharti	  case UNI_IE_NOTIFY:
4515121936Sharti		out->notify.h = *hdr;
4516121936Sharti		if (hdr->present & UNI_IE_ERROR)
4517121936Sharti			return (DEC_ERR);
4518121936Sharti		if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4519121936Sharti			return (DEC_ERR);
4520121936Sharti		break;
4521121936Sharti
4522121936Sharti	  case UNI_IE_GIT:
4523121936Sharti		for(i = 0; i < UNI_NUM_IE_GIT; i++)
4524121936Sharti			if (!IE_ISPRESENT(out->git[i])) {
4525121936Sharti				out->git[i].h = *hdr;
4526121936Sharti				if (hdr->present & UNI_IE_ERROR)
4527121936Sharti					return (DEC_ERR);
4528121936Sharti				if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4529121936Sharti					return (DEC_ERR);
4530121936Sharti				break;
4531121936Sharti			}
4532121936Sharti		break;
4533121936Sharti
4534121936Sharti	  case UNI_IE_REPORT:
4535121936Sharti		out->report.h = *hdr;
4536121936Sharti		if (hdr->present & UNI_IE_ERROR)
4537121936Sharti			return (DEC_ERR);
4538121936Sharti		if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
4539121936Sharti			return (DEC_ERR);
4540121936Sharti		break;
4541121936Sharti
4542121936Sharti	  case UNI_IE_UNREC:
4543121936Sharti		out->unrec.h = *hdr;
4544121936Sharti		if (hdr->present & UNI_IE_ERROR)
4545121936Sharti			return (DEC_ERR);
4546121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4547121936Sharti			return (DEC_ERR);
4548121936Sharti		break;
4549121936Sharti
4550121936Sharti	  default:
4551121936Sharti		return (DEC_ILL);
4552121936Sharti	}
4553121936Sharti	return (DEC_OK);
4554121936Sharti}
4555121936Sharti
4556121936Shartistatic const struct msgdecl decl_conn_avail = {
4557121936Sharti	0,
4558121936Sharti	"conn_avail",
4559121936Sharti	(uni_msg_print_f)print_conn_avail,
4560121936Sharti	(uni_msg_check_f)check_conn_avail,
4561121936Sharti	(uni_msg_encode_f)encode_conn_avail,
4562121936Sharti	(uni_msg_decode_f)decode_conn_avail
4563121936Sharti};
4564121936Sharti
4565121936Shartistatic void
4566121936Shartiprint_unknown(struct uni_unknown *msg, struct unicx *cx)
4567121936Sharti{
4568121936Sharti	if(msg->epref.h.present & UNI_IE_PRESENT)
4569121936Sharti		uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
4570121936Sharti	if(msg->unrec.h.present & UNI_IE_PRESENT)
4571121936Sharti		uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4572121936Sharti}
4573121936Sharti
4574121936Shartistatic int
4575121936Sharticheck_unknown(struct uni_unknown *m, struct unicx *cx)
4576121936Sharti{
4577121936Sharti	int ret = 0;
4578121936Sharti
4579121936Sharti	ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
4580121936Sharti	ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4581121936Sharti
4582121936Sharti	return ret;
4583121936Sharti}
4584121936Sharti
4585121936Shartistatic int
4586121936Shartiencode_unknown(struct uni_msg *msg, struct uni_unknown *p, struct unicx *cx)
4587121936Sharti{
4588121936Sharti	u_int mlen;
4589121936Sharti
4590121936Sharti	if(uni_encode_msg_hdr(msg, &p->hdr, UNI_UNKNOWN, cx, &mlen))
4591121936Sharti		return (-2);
4592121936Sharti
4593121936Sharti	if((p->epref.h.present & UNI_IE_PRESENT) &&
4594121936Sharti	   uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
4595121936Sharti		return (UNI_IE_EPREF);
4596121936Sharti	if((p->unrec.h.present & UNI_IE_PRESENT) &&
4597121936Sharti	   uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4598121936Sharti		return (UNI_IE_UNREC);
4599121936Sharti
4600121936Sharti	msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4601121936Sharti	msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4602121936Sharti
4603121936Sharti	return (0);
4604121936Sharti}
4605121936Sharti
4606121936Shartistatic int
4607121936Shartidecode_unknown(struct uni_unknown *out, struct uni_msg *msg,
4608121936Sharti    enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4609121936Sharti    struct unicx *cx)
4610121936Sharti{
4611121936Sharti	switch (ie) {
4612121936Sharti
4613121936Sharti	  case UNI_IE_EPREF:
4614121936Sharti		out->epref.h = *hdr;
4615121936Sharti		if (hdr->present & UNI_IE_ERROR)
4616121936Sharti			return (DEC_ERR);
4617121936Sharti		if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
4618121936Sharti			return (DEC_ERR);
4619121936Sharti		break;
4620121936Sharti
4621121936Sharti	  case UNI_IE_UNREC:
4622121936Sharti		out->unrec.h = *hdr;
4623121936Sharti		if (hdr->present & UNI_IE_ERROR)
4624121936Sharti			return (DEC_ERR);
4625121936Sharti		if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4626121936Sharti			return (DEC_ERR);
4627121936Sharti		break;
4628121936Sharti
4629121936Sharti	  default:
4630121936Sharti		return (DEC_ILL);
4631121936Sharti	}
4632121936Sharti	return (DEC_OK);
4633121936Sharti}
4634121936Sharti
4635121936Shartistatic const struct msgdecl decl_unknown = {
4636121936Sharti	0,
4637121936Sharti	"unknown",
4638121936Sharti	(uni_msg_print_f)print_unknown,
4639121936Sharti	(uni_msg_check_f)check_unknown,
4640121936Sharti	(uni_msg_encode_f)encode_unknown,
4641121936Sharti	(uni_msg_decode_f)decode_unknown
4642121936Sharti};
4643121936Sharti
4644121936Sharticonst struct msgdecl *uni_msgtable[256] = {
4645121936Sharti	&decl_unknown,	/* 0x00 */
4646121936Sharti	&decl_alerting,	/* 0x01 */
4647121936Sharti	&decl_call_proc,	/* 0x02 */
4648121936Sharti	&decl_unknown,	/* 0x03 */
4649121936Sharti	&decl_unknown,	/* 0x04 */
4650121936Sharti	&decl_setup,	/* 0x05 */
4651121936Sharti	&decl_unknown,	/* 0x06 */
4652121936Sharti	&decl_connect,	/* 0x07 */
4653121936Sharti	&decl_unknown,	/* 0x08 */
4654121936Sharti	&decl_unknown,	/* 0x09 */
4655121936Sharti	&decl_unknown,	/* 0x0a */
4656121936Sharti	&decl_unknown,	/* 0x0b */
4657121936Sharti	&decl_unknown,	/* 0x0c */
4658121936Sharti	&decl_unknown,	/* 0x0d */
4659121936Sharti	&decl_unknown,	/* 0x0e */
4660121936Sharti	&decl_connect_ack,	/* 0x0f */
4661121936Sharti	&decl_unknown,	/* 0x10 */
4662121936Sharti	&decl_unknown,	/* 0x11 */
4663121936Sharti	&decl_unknown,	/* 0x12 */
4664121936Sharti	&decl_unknown,	/* 0x13 */
4665121936Sharti	&decl_unknown,	/* 0x14 */
4666121936Sharti	&decl_cobisetup,	/* 0x15 */
4667121936Sharti	&decl_unknown,	/* 0x16 */
4668121936Sharti	&decl_unknown,	/* 0x17 */
4669121936Sharti	&decl_unknown,	/* 0x18 */
4670121936Sharti	&decl_unknown,	/* 0x19 */
4671121936Sharti	&decl_unknown,	/* 0x1a */
4672121936Sharti	&decl_unknown,	/* 0x1b */
4673121936Sharti	&decl_unknown,	/* 0x1c */
4674121936Sharti	&decl_unknown,	/* 0x1d */
4675121936Sharti	&decl_unknown,	/* 0x1e */
4676121936Sharti	&decl_unknown,	/* 0x1f */
4677121936Sharti	&decl_unknown,	/* 0x20 */
4678121936Sharti	&decl_unknown,	/* 0x21 */
4679121936Sharti	&decl_unknown,	/* 0x22 */
4680121936Sharti	&decl_unknown,	/* 0x23 */
4681121936Sharti	&decl_unknown,	/* 0x24 */
4682121936Sharti	&decl_unknown,	/* 0x25 */
4683121936Sharti	&decl_unknown,	/* 0x26 */
4684121936Sharti	&decl_unknown,	/* 0x27 */
4685121936Sharti	&decl_unknown,	/* 0x28 */
4686121936Sharti	&decl_unknown,	/* 0x29 */
4687121936Sharti	&decl_unknown,	/* 0x2a */
4688121936Sharti	&decl_unknown,	/* 0x2b */
4689121936Sharti	&decl_unknown,	/* 0x2c */
4690121936Sharti	&decl_unknown,	/* 0x2d */
4691121936Sharti	&decl_unknown,	/* 0x2e */
4692121936Sharti	&decl_unknown,	/* 0x2f */
4693121936Sharti	&decl_unknown,	/* 0x30 */
4694121936Sharti	&decl_unknown,	/* 0x31 */
4695121936Sharti	&decl_unknown,	/* 0x32 */
4696121936Sharti	&decl_unknown,	/* 0x33 */
4697121936Sharti	&decl_unknown,	/* 0x34 */
4698121936Sharti	&decl_unknown,	/* 0x35 */
4699121936Sharti	&decl_unknown,	/* 0x36 */
4700121936Sharti	&decl_unknown,	/* 0x37 */
4701121936Sharti	&decl_unknown,	/* 0x38 */
4702121936Sharti	&decl_unknown,	/* 0x39 */
4703121936Sharti	&decl_unknown,	/* 0x3a */
4704121936Sharti	&decl_unknown,	/* 0x3b */
4705121936Sharti	&decl_unknown,	/* 0x3c */
4706121936Sharti	&decl_unknown,	/* 0x3d */
4707121936Sharti	&decl_unknown,	/* 0x3e */
4708121936Sharti	&decl_unknown,	/* 0x3f */
4709121936Sharti	&decl_unknown,	/* 0x40 */
4710121936Sharti	&decl_unknown,	/* 0x41 */
4711121936Sharti	&decl_unknown,	/* 0x42 */
4712121936Sharti	&decl_unknown,	/* 0x43 */
4713121936Sharti	&decl_unknown,	/* 0x44 */
4714121936Sharti	&decl_unknown,	/* 0x45 */
4715121936Sharti	&decl_restart,	/* 0x46 */
4716121936Sharti	&decl_unknown,	/* 0x47 */
4717121936Sharti	&decl_unknown,	/* 0x48 */
4718121936Sharti	&decl_unknown,	/* 0x49 */
4719121936Sharti	&decl_unknown,	/* 0x4a */
4720121936Sharti	&decl_unknown,	/* 0x4b */
4721121936Sharti	&decl_unknown,	/* 0x4c */
4722121936Sharti	&decl_release,	/* 0x4d */
4723121936Sharti	&decl_restart_ack,	/* 0x4e */
4724121936Sharti	&decl_unknown,	/* 0x4f */
4725121936Sharti	&decl_unknown,	/* 0x50 */
4726121936Sharti	&decl_unknown,	/* 0x51 */
4727121936Sharti	&decl_unknown,	/* 0x52 */
4728121936Sharti	&decl_unknown,	/* 0x53 */
4729121936Sharti	&decl_unknown,	/* 0x54 */
4730121936Sharti	&decl_unknown,	/* 0x55 */
4731121936Sharti	&decl_unknown,	/* 0x56 */
4732121936Sharti	&decl_unknown,	/* 0x57 */
4733121936Sharti	&decl_unknown,	/* 0x58 */
4734121936Sharti	&decl_unknown,	/* 0x59 */
4735121936Sharti	&decl_release_compl,	/* 0x5a */
4736121936Sharti	&decl_unknown,	/* 0x5b */
4737121936Sharti	&decl_unknown,	/* 0x5c */
4738121936Sharti	&decl_unknown,	/* 0x5d */
4739121936Sharti	&decl_unknown,	/* 0x5e */
4740121936Sharti	&decl_unknown,	/* 0x5f */
4741121936Sharti	&decl_unknown,	/* 0x60 */
4742121936Sharti	&decl_unknown,	/* 0x61 */
4743121936Sharti	&decl_facility,	/* 0x62 */
4744121936Sharti	&decl_unknown,	/* 0x63 */
4745121936Sharti	&decl_unknown,	/* 0x64 */
4746121936Sharti	&decl_unknown,	/* 0x65 */
4747121936Sharti	&decl_unknown,	/* 0x66 */
4748121936Sharti	&decl_unknown,	/* 0x67 */
4749121936Sharti	&decl_unknown,	/* 0x68 */
4750121936Sharti	&decl_unknown,	/* 0x69 */
4751121936Sharti	&decl_unknown,	/* 0x6a */
4752121936Sharti	&decl_unknown,	/* 0x6b */
4753121936Sharti	&decl_unknown,	/* 0x6c */
4754121936Sharti	&decl_unknown,	/* 0x6d */
4755121936Sharti	&decl_notify,	/* 0x6e */
4756121936Sharti	&decl_unknown,	/* 0x6f */
4757121936Sharti	&decl_unknown,	/* 0x70 */
4758121936Sharti	&decl_unknown,	/* 0x71 */
4759121936Sharti	&decl_unknown,	/* 0x72 */
4760121936Sharti	&decl_unknown,	/* 0x73 */
4761121936Sharti	&decl_unknown,	/* 0x74 */
4762121936Sharti	&decl_status_enq,	/* 0x75 */
4763121936Sharti	&decl_unknown,	/* 0x76 */
4764121936Sharti	&decl_unknown,	/* 0x77 */
4765121936Sharti	&decl_unknown,	/* 0x78 */
4766121936Sharti	&decl_unknown,	/* 0x79 */
4767121936Sharti	&decl_unknown,	/* 0x7a */
4768121936Sharti	&decl_unknown,	/* 0x7b */
4769121936Sharti	&decl_unknown,	/* 0x7c */
4770121936Sharti	&decl_status,	/* 0x7d */
4771121936Sharti	&decl_unknown,	/* 0x7e */
4772121936Sharti	&decl_unknown,	/* 0x7f */
4773121936Sharti	&decl_add_party,	/* 0x80 */
4774121936Sharti	&decl_add_party_ack,	/* 0x81 */
4775121936Sharti	&decl_add_party_rej,	/* 0x82 */
4776121936Sharti	&decl_drop_party,	/* 0x83 */
4777121936Sharti	&decl_drop_party_ack,	/* 0x84 */
4778121936Sharti	&decl_party_alerting,	/* 0x85 */
4779121936Sharti	&decl_unknown,	/* 0x86 */
4780121936Sharti	&decl_unknown,	/* 0x87 */
4781121936Sharti	&decl_modify_req,	/* 0x88 */
4782121936Sharti	&decl_modify_ack,	/* 0x89 */
4783121936Sharti	&decl_modify_rej,	/* 0x8a */
4784121936Sharti	&decl_conn_avail,	/* 0x8b */
4785121936Sharti	&decl_unknown,	/* 0x8c */
4786121936Sharti	&decl_unknown,	/* 0x8d */
4787121936Sharti	&decl_unknown,	/* 0x8e */
4788121936Sharti	&decl_unknown,	/* 0x8f */
4789121936Sharti	&decl_leaf_setup_fail,	/* 0x90 */
4790121936Sharti	&decl_leaf_setup_req,	/* 0x91 */
4791121936Sharti	&decl_unknown,	/* 0x92 */
4792121936Sharti	&decl_unknown,	/* 0x93 */
4793121936Sharti	&decl_unknown,	/* 0x94 */
4794121936Sharti	&decl_unknown,	/* 0x95 */
4795121936Sharti	&decl_unknown,	/* 0x96 */
4796121936Sharti	&decl_unknown,	/* 0x97 */
4797121936Sharti	&decl_unknown,	/* 0x98 */
4798121936Sharti	&decl_unknown,	/* 0x99 */
4799121936Sharti	&decl_unknown,	/* 0x9a */
4800121936Sharti	&decl_unknown,	/* 0x9b */
4801121936Sharti	&decl_unknown,	/* 0x9c */
4802121936Sharti	&decl_unknown,	/* 0x9d */
4803121936Sharti	&decl_unknown,	/* 0x9e */
4804121936Sharti	&decl_unknown,	/* 0x9f */
4805121936Sharti	&decl_unknown,	/* 0xa0 */
4806121936Sharti	&decl_unknown,	/* 0xa1 */
4807121936Sharti	&decl_unknown,	/* 0xa2 */
4808121936Sharti	&decl_unknown,	/* 0xa3 */
4809121936Sharti	&decl_unknown,	/* 0xa4 */
4810121936Sharti	&decl_unknown,	/* 0xa5 */
4811121936Sharti	&decl_unknown,	/* 0xa6 */
4812121936Sharti	&decl_unknown,	/* 0xa7 */
4813121936Sharti	&decl_unknown,	/* 0xa8 */
4814121936Sharti	&decl_unknown,	/* 0xa9 */
4815121936Sharti	&decl_unknown,	/* 0xaa */
4816121936Sharti	&decl_unknown,	/* 0xab */
4817121936Sharti	&decl_unknown,	/* 0xac */
4818121936Sharti	&decl_unknown,	/* 0xad */
4819121936Sharti	&decl_unknown,	/* 0xae */
4820121936Sharti	&decl_unknown,	/* 0xaf */
4821121936Sharti	&decl_unknown,	/* 0xb0 */
4822121936Sharti	&decl_unknown,	/* 0xb1 */
4823121936Sharti	&decl_unknown,	/* 0xb2 */
4824121936Sharti	&decl_unknown,	/* 0xb3 */
4825121936Sharti	&decl_unknown,	/* 0xb4 */
4826121936Sharti	&decl_unknown,	/* 0xb5 */
4827121936Sharti	&decl_unknown,	/* 0xb6 */
4828121936Sharti	&decl_unknown,	/* 0xb7 */
4829121936Sharti	&decl_unknown,	/* 0xb8 */
4830121936Sharti	&decl_unknown,	/* 0xb9 */
4831121936Sharti	&decl_unknown,	/* 0xba */
4832121936Sharti	&decl_unknown,	/* 0xbb */
4833121936Sharti	&decl_unknown,	/* 0xbc */
4834121936Sharti	&decl_unknown,	/* 0xbd */
4835121936Sharti	&decl_unknown,	/* 0xbe */
4836121936Sharti	&decl_unknown,	/* 0xbf */
4837121936Sharti	&decl_unknown,	/* 0xc0 */
4838121936Sharti	&decl_unknown,	/* 0xc1 */
4839121936Sharti	&decl_unknown,	/* 0xc2 */
4840121936Sharti	&decl_unknown,	/* 0xc3 */
4841121936Sharti	&decl_unknown,	/* 0xc4 */
4842121936Sharti	&decl_unknown,	/* 0xc5 */
4843121936Sharti	&decl_unknown,	/* 0xc6 */
4844121936Sharti	&decl_unknown,	/* 0xc7 */
4845121936Sharti	&decl_unknown,	/* 0xc8 */
4846121936Sharti	&decl_unknown,	/* 0xc9 */
4847121936Sharti	&decl_unknown,	/* 0xca */
4848121936Sharti	&decl_unknown,	/* 0xcb */
4849121936Sharti	&decl_unknown,	/* 0xcc */
4850121936Sharti	&decl_unknown,	/* 0xcd */
4851121936Sharti	&decl_unknown,	/* 0xce */
4852121936Sharti	&decl_unknown,	/* 0xcf */
4853121936Sharti	&decl_unknown,	/* 0xd0 */
4854121936Sharti	&decl_unknown,	/* 0xd1 */
4855121936Sharti	&decl_unknown,	/* 0xd2 */
4856121936Sharti	&decl_unknown,	/* 0xd3 */
4857121936Sharti	&decl_unknown,	/* 0xd4 */
4858121936Sharti	&decl_unknown,	/* 0xd5 */
4859121936Sharti	&decl_unknown,	/* 0xd6 */
4860121936Sharti	&decl_unknown,	/* 0xd7 */
4861121936Sharti	&decl_unknown,	/* 0xd8 */
4862121936Sharti	&decl_unknown,	/* 0xd9 */
4863121936Sharti	&decl_unknown,	/* 0xda */
4864121936Sharti	&decl_unknown,	/* 0xdb */
4865121936Sharti	&decl_unknown,	/* 0xdc */
4866121936Sharti	&decl_unknown,	/* 0xdd */
4867121936Sharti	&decl_unknown,	/* 0xde */
4868121936Sharti	&decl_unknown,	/* 0xdf */
4869121936Sharti	&decl_unknown,	/* 0xe0 */
4870121936Sharti	&decl_unknown,	/* 0xe1 */
4871121936Sharti	&decl_unknown,	/* 0xe2 */
4872121936Sharti	&decl_unknown,	/* 0xe3 */
4873121936Sharti	&decl_unknown,	/* 0xe4 */
4874121936Sharti	&decl_unknown,	/* 0xe5 */
4875121936Sharti	&decl_unknown,	/* 0xe6 */
4876121936Sharti	&decl_unknown,	/* 0xe7 */
4877121936Sharti	&decl_unknown,	/* 0xe8 */
4878121936Sharti	&decl_unknown,	/* 0xe9 */
4879121936Sharti	&decl_unknown,	/* 0xea */
4880121936Sharti	&decl_unknown,	/* 0xeb */
4881121936Sharti	&decl_unknown,	/* 0xec */
4882121936Sharti	&decl_unknown,	/* 0xed */
4883121936Sharti	&decl_unknown,	/* 0xee */
4884121936Sharti	&decl_unknown,	/* 0xef */
4885121936Sharti	&decl_unknown,	/* 0xf0 */
4886121936Sharti	&decl_unknown,	/* 0xf1 */
4887121936Sharti	&decl_unknown,	/* 0xf2 */
4888121936Sharti	&decl_unknown,	/* 0xf3 */
4889121936Sharti	&decl_unknown,	/* 0xf4 */
4890121936Sharti	&decl_unknown,	/* 0xf5 */
4891121936Sharti	&decl_unknown,	/* 0xf6 */
4892121936Sharti	&decl_unknown,	/* 0xf7 */
4893121936Sharti	&decl_unknown,	/* 0xf8 */
4894121936Sharti	&decl_unknown,	/* 0xf9 */
4895121936Sharti	&decl_unknown,	/* 0xfa */
4896121936Sharti	&decl_unknown,	/* 0xfb */
4897121936Sharti	&decl_unknown,	/* 0xfc */
4898121936Sharti	&decl_unknown,	/* 0xfd */
4899121936Sharti	&decl_unknown,	/* 0xfe */
4900121936Sharti	&decl_unknown,	/* 0xff */
4901121936Sharti};
4902