1 /* This file was created automatically
2 * Source file: $Begemot: libunimsg/atm/msg/msg.def,v 1.3 2003/09/19 11:58:15 hbb Exp $
3 * $FreeBSD$
4 */
5
6 #include <sys/types.h>
7 #include <sys/param.h>
8
9 #ifdef _KERNEL
10 #include <sys/libkern.h>
11 #else
12 #include <string.h>
13 #endif
14 #include <netnatm/unimsg.h>
15 #include <netnatm/msg/unistruct.h>
16 #include <netnatm/msg/unimsglib.h>
17 #include <netnatm/msg/priv.h>
18 #include <netnatm/msg/privmsg.c>
19
20 static void
21 print_alerting(struct uni_alerting *msg, struct unicx *cx)
22 {
23 u_int i;
24
25 if(msg->connid.h.present & UNI_IE_PRESENT)
26 uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
27 if(msg->epref.h.present & UNI_IE_PRESENT)
28 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
29 if(msg->notify.h.present & UNI_IE_PRESENT)
30 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
31 for(i = 0; i < UNI_NUM_IE_GIT; i++)
32 if(msg->git[i].h.present & UNI_IE_PRESENT)
33 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
34 if(msg->uu.h.present & UNI_IE_PRESENT)
35 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
36 if(msg->report.h.present & UNI_IE_PRESENT)
37 uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
38 if(msg->unrec.h.present & UNI_IE_PRESENT)
39 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
40 }
41
42 static int
43 check_alerting(struct uni_alerting *m, struct unicx *cx)
44 {
45 int ret = 0;
46 u_int i;
47
48 if(!(!cx->pnni))
49 ret |= IE_ISPRESENT(m->connid);
50 else
51 ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
52 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
53 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
54 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
55 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
56 }
57 if(!(!cx->pnni))
58 ret |= IE_ISPRESENT(m->uu);
59 else
60 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
61 if(!(!cx->pnni))
62 ret |= IE_ISPRESENT(m->report);
63 else
64 ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
65 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
66
67 return ret;
68 }
69
70 static int
71 encode_alerting(struct uni_msg *msg, struct uni_alerting *p, struct unicx *cx)
72 {
73 u_int mlen;
74 u_int i;
75
76 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ALERTING, cx, &mlen))
77 return (-2);
78
79 if((p->connid.h.present & UNI_IE_PRESENT) &&
80 uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
81 return (UNI_IE_CONNID);
82 if((p->epref.h.present & UNI_IE_PRESENT) &&
83 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
84 return (UNI_IE_EPREF);
85 if((p->notify.h.present & UNI_IE_PRESENT) &&
86 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
87 return (UNI_IE_NOTIFY);
88 for(i = 0; i < UNI_NUM_IE_GIT; i++)
89 if((p->git[i].h.present & UNI_IE_PRESENT) &&
90 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
91 return ((i << 16) + UNI_IE_GIT);
92 if((p->uu.h.present & UNI_IE_PRESENT) &&
93 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
94 return (UNI_IE_UU);
95 if((p->report.h.present & UNI_IE_PRESENT) &&
96 uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
97 return (UNI_IE_REPORT);
98 if((p->unrec.h.present & UNI_IE_PRESENT) &&
99 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
100 return (UNI_IE_UNREC);
101
102 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
103 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
104
105 return (0);
106 }
107
108 static int
109 decode_alerting(struct uni_alerting *out, struct uni_msg *msg,
110 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
111 struct unicx *cx)
112 {
113 u_int i;
114
115 switch (ie) {
116
117 case UNI_IE_CONNID:
118 if (!(!cx->pnni))
119 return (DEC_ILL);
120 out->connid.h = *hdr;
121 if (hdr->present & UNI_IE_ERROR)
122 return (DEC_ERR);
123 if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
124 return (DEC_ERR);
125 break;
126
127 case UNI_IE_EPREF:
128 out->epref.h = *hdr;
129 if (hdr->present & UNI_IE_ERROR)
130 return (DEC_ERR);
131 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
132 return (DEC_ERR);
133 break;
134
135 case UNI_IE_NOTIFY:
136 out->notify.h = *hdr;
137 if (hdr->present & UNI_IE_ERROR)
138 return (DEC_ERR);
139 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
140 return (DEC_ERR);
141 break;
142
143 case UNI_IE_GIT:
144 for(i = 0; i < UNI_NUM_IE_GIT; i++)
145 if (!IE_ISPRESENT(out->git[i])) {
146 out->git[i].h = *hdr;
147 if (hdr->present & UNI_IE_ERROR)
148 return (DEC_ERR);
149 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
150 return (DEC_ERR);
151 break;
152 }
153 break;
154
155 case UNI_IE_UU:
156 if (!(!cx->pnni))
157 return (DEC_ILL);
158 out->uu.h = *hdr;
159 if (hdr->present & UNI_IE_ERROR)
160 return (DEC_ERR);
161 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
162 return (DEC_ERR);
163 break;
164
165 case UNI_IE_REPORT:
166 if (!(!cx->pnni))
167 return (DEC_ILL);
168 out->report.h = *hdr;
169 if (hdr->present & UNI_IE_ERROR)
170 return (DEC_ERR);
171 if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
172 return (DEC_ERR);
173 break;
174
175 case UNI_IE_UNREC:
176 out->unrec.h = *hdr;
177 if (hdr->present & UNI_IE_ERROR)
178 return (DEC_ERR);
179 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
180 return (DEC_ERR);
181 break;
182
183 default:
184 return (DEC_ILL);
185 }
186 return (DEC_OK);
187 }
188
189 static const struct msgdecl decl_alerting = {
190 0,
191 "alerting",
192 (uni_msg_print_f)print_alerting,
193 (uni_msg_check_f)check_alerting,
194 (uni_msg_encode_f)encode_alerting,
195 (uni_msg_decode_f)decode_alerting
196 };
197
198 static void
199 print_call_proc(struct uni_call_proc *msg, struct unicx *cx)
200 {
201 if(msg->connid.h.present & UNI_IE_PRESENT)
202 uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
203 if(msg->epref.h.present & UNI_IE_PRESENT)
204 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
205 if(msg->notify.h.present & UNI_IE_PRESENT)
206 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
207 if(msg->unrec.h.present & UNI_IE_PRESENT)
208 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
209 }
210
211 static int
212 check_call_proc(struct uni_call_proc *m, struct unicx *cx)
213 {
214 int ret = 0;
215
216 ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
217 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
218 if(!(!cx->pnni))
219 ret |= IE_ISPRESENT(m->notify);
220 else
221 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
222 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
223
224 return ret;
225 }
226
227 static int
228 encode_call_proc(struct uni_msg *msg, struct uni_call_proc *p, struct unicx *cx)
229 {
230 u_int mlen;
231
232 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CALL_PROC, cx, &mlen))
233 return (-2);
234
235 if((p->connid.h.present & UNI_IE_PRESENT) &&
236 uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
237 return (UNI_IE_CONNID);
238 if((p->epref.h.present & UNI_IE_PRESENT) &&
239 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
240 return (UNI_IE_EPREF);
241 if((p->notify.h.present & UNI_IE_PRESENT) &&
242 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
243 return (UNI_IE_NOTIFY);
244 if((p->unrec.h.present & UNI_IE_PRESENT) &&
245 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
246 return (UNI_IE_UNREC);
247
248 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
249 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
250
251 return (0);
252 }
253
254 static int
255 decode_call_proc(struct uni_call_proc *out, struct uni_msg *msg,
256 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
257 struct unicx *cx)
258 {
259 switch (ie) {
260
261 case UNI_IE_CONNID:
262 out->connid.h = *hdr;
263 if (hdr->present & UNI_IE_ERROR)
264 return (DEC_ERR);
265 if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
266 return (DEC_ERR);
267 break;
268
269 case UNI_IE_EPREF:
270 out->epref.h = *hdr;
271 if (hdr->present & UNI_IE_ERROR)
272 return (DEC_ERR);
273 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
274 return (DEC_ERR);
275 break;
276
277 case UNI_IE_NOTIFY:
278 if (!(!cx->pnni))
279 return (DEC_ILL);
280 out->notify.h = *hdr;
281 if (hdr->present & UNI_IE_ERROR)
282 return (DEC_ERR);
283 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
284 return (DEC_ERR);
285 break;
286
287 case UNI_IE_UNREC:
288 out->unrec.h = *hdr;
289 if (hdr->present & UNI_IE_ERROR)
290 return (DEC_ERR);
291 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
292 return (DEC_ERR);
293 break;
294
295 default:
296 return (DEC_ILL);
297 }
298 return (DEC_OK);
299 }
300
301 static const struct msgdecl decl_call_proc = {
302 0,
303 "call_proc",
304 (uni_msg_print_f)print_call_proc,
305 (uni_msg_check_f)check_call_proc,
306 (uni_msg_encode_f)encode_call_proc,
307 (uni_msg_decode_f)decode_call_proc
308 };
309
310 static void
311 print_connect(struct uni_connect *msg, struct unicx *cx)
312 {
313 u_int i;
314
315 if(msg->aal.h.present & UNI_IE_PRESENT)
316 uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
317 if(msg->blli.h.present & UNI_IE_PRESENT)
318 uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli, cx);
319 if(msg->connid.h.present & UNI_IE_PRESENT)
320 uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
321 if(msg->epref.h.present & UNI_IE_PRESENT)
322 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
323 if(msg->notify.h.present & UNI_IE_PRESENT)
324 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
325 if(msg->conned.h.present & UNI_IE_PRESENT)
326 uni_print_ie_internal(UNI_IE_CONNED, (union uni_ieall *)&msg->conned, cx);
327 if(msg->connedsub.h.present & UNI_IE_PRESENT)
328 uni_print_ie_internal(UNI_IE_CONNEDSUB, (union uni_ieall *)&msg->connedsub, cx);
329 if(msg->eetd.h.present & UNI_IE_PRESENT)
330 uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
331 for(i = 0; i < UNI_NUM_IE_GIT; i++)
332 if(msg->git[i].h.present & UNI_IE_PRESENT)
333 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
334 if(msg->uu.h.present & UNI_IE_PRESENT)
335 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
336 if(msg->traffic.h.present & UNI_IE_PRESENT)
337 uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
338 if(msg->exqos.h.present & UNI_IE_PRESENT)
339 uni_print_ie_internal(UNI_IE_EXQOS, (union uni_ieall *)&msg->exqos, cx);
340 if(msg->facility.h.present & UNI_IE_PRESENT)
341 uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
342 if(msg->abrsetup.h.present & UNI_IE_PRESENT)
343 uni_print_ie_internal(UNI_IE_ABRSETUP, (union uni_ieall *)&msg->abrsetup, cx);
344 if(msg->abradd.h.present & UNI_IE_PRESENT)
345 uni_print_ie_internal(UNI_IE_ABRADD, (union uni_ieall *)&msg->abradd, cx);
346 if(msg->called_soft.h.present & UNI_IE_PRESENT)
347 uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
348 if(msg->report.h.present & UNI_IE_PRESENT)
349 uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
350 if(msg->unrec.h.present & UNI_IE_PRESENT)
351 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
352 }
353
354 static int
355 check_connect(struct uni_connect *m, struct unicx *cx)
356 {
357 int ret = 0;
358 u_int i;
359
360 ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
361 ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli, cx);
362 if(!(!cx->pnni))
363 ret |= IE_ISPRESENT(m->connid);
364 else
365 ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
366 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
367 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
368 ret |= uni_check_ie(UNI_IE_CONNED, (union uni_ieall *)&m->conned, cx);
369 ret |= uni_check_ie(UNI_IE_CONNEDSUB, (union uni_ieall *)&m->connedsub, cx);
370 ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
371 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
372 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
373 }
374 if(!(!cx->pnni))
375 ret |= IE_ISPRESENT(m->uu);
376 else
377 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
378 ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
379 ret |= uni_check_ie(UNI_IE_EXQOS, (union uni_ieall *)&m->exqos, cx);
380 if(!(cx->q2932))
381 ret |= IE_ISPRESENT(m->facility);
382 else
383 ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
384 ret |= uni_check_ie(UNI_IE_ABRSETUP, (union uni_ieall *)&m->abrsetup, cx);
385 ret |= uni_check_ie(UNI_IE_ABRADD, (union uni_ieall *)&m->abradd, cx);
386 if(!(cx->pnni))
387 ret |= IE_ISPRESENT(m->called_soft);
388 else
389 ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
390 if(!(!cx->pnni))
391 ret |= IE_ISPRESENT(m->report);
392 else
393 ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
394 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
395
396 return ret;
397 }
398
399 static int
400 encode_connect(struct uni_msg *msg, struct uni_connect *p, struct unicx *cx)
401 {
402 u_int mlen;
403 u_int i;
404
405 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CONNECT, cx, &mlen))
406 return (-2);
407
408 if((p->aal.h.present & UNI_IE_PRESENT) &&
409 uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
410 return (UNI_IE_AAL);
411 if((p->blli.h.present & UNI_IE_PRESENT) &&
412 uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli, cx))
413 return (UNI_IE_BLLI);
414 if((p->connid.h.present & UNI_IE_PRESENT) &&
415 uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
416 return (UNI_IE_CONNID);
417 if((p->epref.h.present & UNI_IE_PRESENT) &&
418 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
419 return (UNI_IE_EPREF);
420 if((p->notify.h.present & UNI_IE_PRESENT) &&
421 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
422 return (UNI_IE_NOTIFY);
423 if((p->conned.h.present & UNI_IE_PRESENT) &&
424 uni_encode_ie(UNI_IE_CONNED, msg, (union uni_ieall *)&p->conned, cx))
425 return (UNI_IE_CONNED);
426 if((p->connedsub.h.present & UNI_IE_PRESENT) &&
427 uni_encode_ie(UNI_IE_CONNEDSUB, msg, (union uni_ieall *)&p->connedsub, cx))
428 return (UNI_IE_CONNEDSUB);
429 if((p->eetd.h.present & UNI_IE_PRESENT) &&
430 uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
431 return (UNI_IE_EETD);
432 for(i = 0; i < UNI_NUM_IE_GIT; i++)
433 if((p->git[i].h.present & UNI_IE_PRESENT) &&
434 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
435 return ((i << 16) + UNI_IE_GIT);
436 if((p->uu.h.present & UNI_IE_PRESENT) &&
437 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
438 return (UNI_IE_UU);
439 if((p->traffic.h.present & UNI_IE_PRESENT) &&
440 uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
441 return (UNI_IE_TRAFFIC);
442 if((p->exqos.h.present & UNI_IE_PRESENT) &&
443 uni_encode_ie(UNI_IE_EXQOS, msg, (union uni_ieall *)&p->exqos, cx))
444 return (UNI_IE_EXQOS);
445 if((p->facility.h.present & UNI_IE_PRESENT) &&
446 uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
447 return (UNI_IE_FACILITY);
448 if((p->abrsetup.h.present & UNI_IE_PRESENT) &&
449 uni_encode_ie(UNI_IE_ABRSETUP, msg, (union uni_ieall *)&p->abrsetup, cx))
450 return (UNI_IE_ABRSETUP);
451 if((p->abradd.h.present & UNI_IE_PRESENT) &&
452 uni_encode_ie(UNI_IE_ABRADD, msg, (union uni_ieall *)&p->abradd, cx))
453 return (UNI_IE_ABRADD);
454 if((p->called_soft.h.present & UNI_IE_PRESENT) &&
455 uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
456 return (UNI_IE_CALLED_SOFT);
457 if((p->report.h.present & UNI_IE_PRESENT) &&
458 uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
459 return (UNI_IE_REPORT);
460 if((p->unrec.h.present & UNI_IE_PRESENT) &&
461 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
462 return (UNI_IE_UNREC);
463
464 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
465 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
466
467 return (0);
468 }
469
470 static int
471 decode_connect(struct uni_connect *out, struct uni_msg *msg,
472 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
473 struct unicx *cx)
474 {
475 u_int i;
476
477 switch (ie) {
478
479 case UNI_IE_AAL:
480 out->aal.h = *hdr;
481 if (hdr->present & UNI_IE_ERROR)
482 return (DEC_ERR);
483 if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
484 return (DEC_ERR);
485 break;
486
487 case UNI_IE_BLLI:
488 out->blli.h = *hdr;
489 if (hdr->present & UNI_IE_ERROR)
490 return (DEC_ERR);
491 if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli, msg, ielen, cx))
492 return (DEC_ERR);
493 break;
494
495 case UNI_IE_CONNID:
496 if (!(!cx->pnni))
497 return (DEC_ILL);
498 out->connid.h = *hdr;
499 if (hdr->present & UNI_IE_ERROR)
500 return (DEC_ERR);
501 if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
502 return (DEC_ERR);
503 break;
504
505 case UNI_IE_EPREF:
506 out->epref.h = *hdr;
507 if (hdr->present & UNI_IE_ERROR)
508 return (DEC_ERR);
509 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
510 return (DEC_ERR);
511 break;
512
513 case UNI_IE_NOTIFY:
514 out->notify.h = *hdr;
515 if (hdr->present & UNI_IE_ERROR)
516 return (DEC_ERR);
517 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
518 return (DEC_ERR);
519 break;
520
521 case UNI_IE_CONNED:
522 out->conned.h = *hdr;
523 if (hdr->present & UNI_IE_ERROR)
524 return (DEC_ERR);
525 if(uni_decode_ie_body(UNI_IE_CONNED, (union uni_ieall *)&out->conned, msg, ielen, cx))
526 return (DEC_ERR);
527 break;
528
529 case UNI_IE_CONNEDSUB:
530 out->connedsub.h = *hdr;
531 if (hdr->present & UNI_IE_ERROR)
532 return (DEC_ERR);
533 if(uni_decode_ie_body(UNI_IE_CONNEDSUB, (union uni_ieall *)&out->connedsub, msg, ielen, cx))
534 return (DEC_ERR);
535 break;
536
537 case UNI_IE_EETD:
538 out->eetd.h = *hdr;
539 if (hdr->present & UNI_IE_ERROR)
540 return (DEC_ERR);
541 if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
542 return (DEC_ERR);
543 break;
544
545 case UNI_IE_GIT:
546 for(i = 0; i < UNI_NUM_IE_GIT; i++)
547 if (!IE_ISPRESENT(out->git[i])) {
548 out->git[i].h = *hdr;
549 if (hdr->present & UNI_IE_ERROR)
550 return (DEC_ERR);
551 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
552 return (DEC_ERR);
553 break;
554 }
555 break;
556
557 case UNI_IE_UU:
558 if (!(!cx->pnni))
559 return (DEC_ILL);
560 out->uu.h = *hdr;
561 if (hdr->present & UNI_IE_ERROR)
562 return (DEC_ERR);
563 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
564 return (DEC_ERR);
565 break;
566
567 case UNI_IE_TRAFFIC:
568 out->traffic.h = *hdr;
569 if (hdr->present & UNI_IE_ERROR)
570 return (DEC_ERR);
571 if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
572 return (DEC_ERR);
573 break;
574
575 case UNI_IE_EXQOS:
576 out->exqos.h = *hdr;
577 if (hdr->present & UNI_IE_ERROR)
578 return (DEC_ERR);
579 if(uni_decode_ie_body(UNI_IE_EXQOS, (union uni_ieall *)&out->exqos, msg, ielen, cx))
580 return (DEC_ERR);
581 break;
582
583 case UNI_IE_FACILITY:
584 if (!(cx->q2932))
585 return (DEC_ILL);
586 out->facility.h = *hdr;
587 if (hdr->present & UNI_IE_ERROR)
588 return (DEC_ERR);
589 if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
590 return (DEC_ERR);
591 break;
592
593 case UNI_IE_ABRSETUP:
594 out->abrsetup.h = *hdr;
595 if (hdr->present & UNI_IE_ERROR)
596 return (DEC_ERR);
597 if(uni_decode_ie_body(UNI_IE_ABRSETUP, (union uni_ieall *)&out->abrsetup, msg, ielen, cx))
598 return (DEC_ERR);
599 break;
600
601 case UNI_IE_ABRADD:
602 out->abradd.h = *hdr;
603 if (hdr->present & UNI_IE_ERROR)
604 return (DEC_ERR);
605 if(uni_decode_ie_body(UNI_IE_ABRADD, (union uni_ieall *)&out->abradd, msg, ielen, cx))
606 return (DEC_ERR);
607 break;
608
609 case UNI_IE_CALLED_SOFT:
610 if (!(cx->pnni))
611 return (DEC_ILL);
612 out->called_soft.h = *hdr;
613 if (hdr->present & UNI_IE_ERROR)
614 return (DEC_ERR);
615 if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
616 return (DEC_ERR);
617 break;
618
619 case UNI_IE_REPORT:
620 if (!(!cx->pnni))
621 return (DEC_ILL);
622 out->report.h = *hdr;
623 if (hdr->present & UNI_IE_ERROR)
624 return (DEC_ERR);
625 if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
626 return (DEC_ERR);
627 break;
628
629 case UNI_IE_UNREC:
630 out->unrec.h = *hdr;
631 if (hdr->present & UNI_IE_ERROR)
632 return (DEC_ERR);
633 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
634 return (DEC_ERR);
635 break;
636
637 default:
638 return (DEC_ILL);
639 }
640 return (DEC_OK);
641 }
642
643 static const struct msgdecl decl_connect = {
644 0,
645 "connect",
646 (uni_msg_print_f)print_connect,
647 (uni_msg_check_f)check_connect,
648 (uni_msg_encode_f)encode_connect,
649 (uni_msg_decode_f)decode_connect
650 };
651
652 static void
653 print_connect_ack(struct uni_connect_ack *msg, struct unicx *cx)
654 {
655 if(msg->notify.h.present & UNI_IE_PRESENT)
656 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
657 if(msg->unrec.h.present & UNI_IE_PRESENT)
658 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
659 }
660
661 static int
662 check_connect_ack(struct uni_connect_ack *m, struct unicx *cx)
663 {
664 int ret = 0;
665
666 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
667 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
668
669 return ret;
670 }
671
672 static int
673 encode_connect_ack(struct uni_msg *msg, struct uni_connect_ack *p, struct unicx *cx)
674 {
675 u_int mlen;
676
677 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CONNECT_ACK, cx, &mlen))
678 return (-2);
679
680 if((p->notify.h.present & UNI_IE_PRESENT) &&
681 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
682 return (UNI_IE_NOTIFY);
683 if((p->unrec.h.present & UNI_IE_PRESENT) &&
684 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
685 return (UNI_IE_UNREC);
686
687 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
688 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
689
690 return (0);
691 }
692
693 static int
694 decode_connect_ack(struct uni_connect_ack *out, struct uni_msg *msg,
695 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
696 struct unicx *cx)
697 {
698 switch (ie) {
699
700 case UNI_IE_NOTIFY:
701 out->notify.h = *hdr;
702 if (hdr->present & UNI_IE_ERROR)
703 return (DEC_ERR);
704 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
705 return (DEC_ERR);
706 break;
707
708 case UNI_IE_UNREC:
709 out->unrec.h = *hdr;
710 if (hdr->present & UNI_IE_ERROR)
711 return (DEC_ERR);
712 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
713 return (DEC_ERR);
714 break;
715
716 default:
717 return (DEC_ILL);
718 }
719 return (DEC_OK);
720 }
721
722 static const struct msgdecl decl_connect_ack = {
723 0,
724 "connect_ack",
725 (uni_msg_print_f)print_connect_ack,
726 (uni_msg_check_f)check_connect_ack,
727 (uni_msg_encode_f)encode_connect_ack,
728 (uni_msg_decode_f)decode_connect_ack
729 };
730
731 static void
732 print_release(struct uni_release *msg, struct unicx *cx)
733 {
734 u_int i;
735
736 for(i = 0; i < 2; i++)
737 if(msg->cause[i].h.present & UNI_IE_PRESENT)
738 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause[i], cx);
739 if(msg->notify.h.present & UNI_IE_PRESENT)
740 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
741 for(i = 0; i < UNI_NUM_IE_GIT; i++)
742 if(msg->git[i].h.present & UNI_IE_PRESENT)
743 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
744 if(msg->uu.h.present & UNI_IE_PRESENT)
745 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
746 if(msg->facility.h.present & UNI_IE_PRESENT)
747 uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
748 if(msg->crankback.h.present & UNI_IE_PRESENT)
749 uni_print_ie_internal(UNI_IE_CRANKBACK, (union uni_ieall *)&msg->crankback, cx);
750 if(msg->unrec.h.present & UNI_IE_PRESENT)
751 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
752 }
753
754 static int
755 check_release(struct uni_release *m, struct unicx *cx)
756 {
757 int ret = 0;
758 u_int i;
759
760 for(i = 0; i < 2 ; i++) {
761 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause[i], cx);
762 }
763 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
764 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
765 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
766 }
767 if(!(!cx->pnni))
768 ret |= IE_ISPRESENT(m->uu);
769 else
770 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
771 if(!(cx->q2932))
772 ret |= IE_ISPRESENT(m->facility);
773 else
774 ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
775 if(!(cx->pnni))
776 ret |= IE_ISPRESENT(m->crankback);
777 else
778 ret |= uni_check_ie(UNI_IE_CRANKBACK, (union uni_ieall *)&m->crankback, cx);
779 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
780
781 return ret;
782 }
783
784 static int
785 encode_release(struct uni_msg *msg, struct uni_release *p, struct unicx *cx)
786 {
787 u_int mlen;
788 u_int i;
789
790 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RELEASE, cx, &mlen))
791 return (-2);
792
793 for(i = 0; i < 2; i++)
794 if((p->cause[i].h.present & UNI_IE_PRESENT) &&
795 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause[i], cx))
796 return ((i << 16) + UNI_IE_CAUSE);
797 if((p->notify.h.present & UNI_IE_PRESENT) &&
798 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
799 return (UNI_IE_NOTIFY);
800 for(i = 0; i < UNI_NUM_IE_GIT; i++)
801 if((p->git[i].h.present & UNI_IE_PRESENT) &&
802 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
803 return ((i << 16) + UNI_IE_GIT);
804 if((p->uu.h.present & UNI_IE_PRESENT) &&
805 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
806 return (UNI_IE_UU);
807 if((p->facility.h.present & UNI_IE_PRESENT) &&
808 uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
809 return (UNI_IE_FACILITY);
810 if((p->crankback.h.present & UNI_IE_PRESENT) &&
811 uni_encode_ie(UNI_IE_CRANKBACK, msg, (union uni_ieall *)&p->crankback, cx))
812 return (UNI_IE_CRANKBACK);
813 if((p->unrec.h.present & UNI_IE_PRESENT) &&
814 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
815 return (UNI_IE_UNREC);
816
817 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
818 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
819
820 return (0);
821 }
822
823 static int
824 decode_release(struct uni_release *out, struct uni_msg *msg,
825 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
826 struct unicx *cx)
827 {
828 u_int i;
829
830 switch (ie) {
831
832 case UNI_IE_CAUSE:
833 for(i = 0; i < 2; i++)
834 if (!IE_ISPRESENT(out->cause[i])) {
835 out->cause[i].h = *hdr;
836 if (hdr->present & UNI_IE_ERROR)
837 return (DEC_ERR);
838 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause[i], msg, ielen, cx))
839 return (DEC_ERR);
840 break;
841 }
842 break;
843
844 case UNI_IE_NOTIFY:
845 out->notify.h = *hdr;
846 if (hdr->present & UNI_IE_ERROR)
847 return (DEC_ERR);
848 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
849 return (DEC_ERR);
850 break;
851
852 case UNI_IE_GIT:
853 for(i = 0; i < UNI_NUM_IE_GIT; i++)
854 if (!IE_ISPRESENT(out->git[i])) {
855 out->git[i].h = *hdr;
856 if (hdr->present & UNI_IE_ERROR)
857 return (DEC_ERR);
858 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
859 return (DEC_ERR);
860 break;
861 }
862 break;
863
864 case UNI_IE_UU:
865 if (!(!cx->pnni))
866 return (DEC_ILL);
867 out->uu.h = *hdr;
868 if (hdr->present & UNI_IE_ERROR)
869 return (DEC_ERR);
870 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
871 return (DEC_ERR);
872 break;
873
874 case UNI_IE_FACILITY:
875 if (!(cx->q2932))
876 return (DEC_ILL);
877 out->facility.h = *hdr;
878 if (hdr->present & UNI_IE_ERROR)
879 return (DEC_ERR);
880 if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
881 return (DEC_ERR);
882 break;
883
884 case UNI_IE_CRANKBACK:
885 if (!(cx->pnni))
886 return (DEC_ILL);
887 out->crankback.h = *hdr;
888 if (hdr->present & UNI_IE_ERROR)
889 return (DEC_ERR);
890 if(uni_decode_ie_body(UNI_IE_CRANKBACK, (union uni_ieall *)&out->crankback, msg, ielen, cx))
891 return (DEC_ERR);
892 break;
893
894 case UNI_IE_UNREC:
895 out->unrec.h = *hdr;
896 if (hdr->present & UNI_IE_ERROR)
897 return (DEC_ERR);
898 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
899 return (DEC_ERR);
900 break;
901
902 default:
903 return (DEC_ILL);
904 }
905 return (DEC_OK);
906 }
907
908 static const struct msgdecl decl_release = {
909 0,
910 "release",
911 (uni_msg_print_f)print_release,
912 (uni_msg_check_f)check_release,
913 (uni_msg_encode_f)encode_release,
914 (uni_msg_decode_f)decode_release
915 };
916
917 static void
918 print_release_compl(struct uni_release_compl *msg, struct unicx *cx)
919 {
920 u_int i;
921
922 for(i = 0; i < 2; i++)
923 if(msg->cause[i].h.present & UNI_IE_PRESENT)
924 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause[i], cx);
925 for(i = 0; i < UNI_NUM_IE_GIT; i++)
926 if(msg->git[i].h.present & UNI_IE_PRESENT)
927 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
928 if(msg->uu.h.present & UNI_IE_PRESENT)
929 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
930 if(msg->crankback.h.present & UNI_IE_PRESENT)
931 uni_print_ie_internal(UNI_IE_CRANKBACK, (union uni_ieall *)&msg->crankback, cx);
932 if(msg->unrec.h.present & UNI_IE_PRESENT)
933 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
934 }
935
936 static int
937 check_release_compl(struct uni_release_compl *m, struct unicx *cx)
938 {
939 int ret = 0;
940 u_int i;
941
942 for(i = 0; i < 2 ; i++) {
943 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause[i], cx);
944 }
945 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
946 if(!(!cx->pnni))
947 ret |= IE_ISPRESENT(m->git[i]);
948 else
949 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
950 }
951 if(!(!cx->pnni))
952 ret |= IE_ISPRESENT(m->uu);
953 else
954 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
955 if(!(cx->pnni))
956 ret |= IE_ISPRESENT(m->crankback);
957 else
958 ret |= uni_check_ie(UNI_IE_CRANKBACK, (union uni_ieall *)&m->crankback, cx);
959 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
960
961 return ret;
962 }
963
964 static int
965 encode_release_compl(struct uni_msg *msg, struct uni_release_compl *p, struct unicx *cx)
966 {
967 u_int mlen;
968 u_int i;
969
970 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RELEASE_COMPL, cx, &mlen))
971 return (-2);
972
973 for(i = 0; i < 2; i++)
974 if((p->cause[i].h.present & UNI_IE_PRESENT) &&
975 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause[i], cx))
976 return ((i << 16) + UNI_IE_CAUSE);
977 for(i = 0; i < UNI_NUM_IE_GIT; i++)
978 if((p->git[i].h.present & UNI_IE_PRESENT) &&
979 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
980 return ((i << 16) + UNI_IE_GIT);
981 if((p->uu.h.present & UNI_IE_PRESENT) &&
982 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
983 return (UNI_IE_UU);
984 if((p->crankback.h.present & UNI_IE_PRESENT) &&
985 uni_encode_ie(UNI_IE_CRANKBACK, msg, (union uni_ieall *)&p->crankback, cx))
986 return (UNI_IE_CRANKBACK);
987 if((p->unrec.h.present & UNI_IE_PRESENT) &&
988 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
989 return (UNI_IE_UNREC);
990
991 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
992 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
993
994 return (0);
995 }
996
997 static int
998 decode_release_compl(struct uni_release_compl *out, struct uni_msg *msg,
999 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1000 struct unicx *cx)
1001 {
1002 u_int i;
1003
1004 switch (ie) {
1005
1006 case UNI_IE_CAUSE:
1007 for(i = 0; i < 2; i++)
1008 if (!IE_ISPRESENT(out->cause[i])) {
1009 out->cause[i].h = *hdr;
1010 if (hdr->present & UNI_IE_ERROR)
1011 return (DEC_ERR);
1012 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause[i], msg, ielen, cx))
1013 return (DEC_ERR);
1014 break;
1015 }
1016 break;
1017
1018 case UNI_IE_GIT:
1019 if (!(!cx->pnni))
1020 return (DEC_ILL);
1021 for(i = 0; i < UNI_NUM_IE_GIT; i++)
1022 if (!IE_ISPRESENT(out->git[i])) {
1023 out->git[i].h = *hdr;
1024 if (hdr->present & UNI_IE_ERROR)
1025 return (DEC_ERR);
1026 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
1027 return (DEC_ERR);
1028 break;
1029 }
1030 break;
1031
1032 case UNI_IE_UU:
1033 if (!(!cx->pnni))
1034 return (DEC_ILL);
1035 out->uu.h = *hdr;
1036 if (hdr->present & UNI_IE_ERROR)
1037 return (DEC_ERR);
1038 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
1039 return (DEC_ERR);
1040 break;
1041
1042 case UNI_IE_CRANKBACK:
1043 if (!(cx->pnni))
1044 return (DEC_ILL);
1045 out->crankback.h = *hdr;
1046 if (hdr->present & UNI_IE_ERROR)
1047 return (DEC_ERR);
1048 if(uni_decode_ie_body(UNI_IE_CRANKBACK, (union uni_ieall *)&out->crankback, msg, ielen, cx))
1049 return (DEC_ERR);
1050 break;
1051
1052 case UNI_IE_UNREC:
1053 out->unrec.h = *hdr;
1054 if (hdr->present & UNI_IE_ERROR)
1055 return (DEC_ERR);
1056 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1057 return (DEC_ERR);
1058 break;
1059
1060 default:
1061 return (DEC_ILL);
1062 }
1063 return (DEC_OK);
1064 }
1065
1066 static const struct msgdecl decl_release_compl = {
1067 0,
1068 "release_compl",
1069 (uni_msg_print_f)print_release_compl,
1070 (uni_msg_check_f)check_release_compl,
1071 (uni_msg_encode_f)encode_release_compl,
1072 (uni_msg_decode_f)decode_release_compl
1073 };
1074
1075 static void
1076 print_setup(struct uni_setup *msg, struct unicx *cx)
1077 {
1078 u_int i;
1079
1080 if(msg->aal.h.present & UNI_IE_PRESENT)
1081 uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
1082 if(msg->traffic.h.present & UNI_IE_PRESENT)
1083 uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
1084 if(msg->bearer.h.present & UNI_IE_PRESENT)
1085 uni_print_ie_internal(UNI_IE_BEARER, (union uni_ieall *)&msg->bearer, cx);
1086 if(msg->bhli.h.present & UNI_IE_PRESENT)
1087 uni_print_ie_internal(UNI_IE_BHLI, (union uni_ieall *)&msg->bhli, cx);
1088 if(msg->blli_repeat.h.present & UNI_IE_PRESENT)
1089 uni_print_ie_internal(UNI_IE_REPEAT, (union uni_ieall *)&msg->blli_repeat, cx);
1090 for(i = 0; i < UNI_NUM_IE_BLLI; i++)
1091 if(msg->blli[i].h.present & UNI_IE_PRESENT)
1092 uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli[i], cx);
1093 if(msg->called.h.present & UNI_IE_PRESENT)
1094 uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
1095 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
1096 if(msg->calledsub[i].h.present & UNI_IE_PRESENT)
1097 uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub[i], cx);
1098 if(msg->calling.h.present & UNI_IE_PRESENT)
1099 uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
1100 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
1101 if(msg->callingsub[i].h.present & UNI_IE_PRESENT)
1102 uni_print_ie_internal(UNI_IE_CALLINGSUB, (union uni_ieall *)&msg->callingsub[i], cx);
1103 if(msg->connid.h.present & UNI_IE_PRESENT)
1104 uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
1105 if(msg->qos.h.present & UNI_IE_PRESENT)
1106 uni_print_ie_internal(UNI_IE_QOS, (union uni_ieall *)&msg->qos, cx);
1107 if(msg->eetd.h.present & UNI_IE_PRESENT)
1108 uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
1109 if(msg->notify.h.present & UNI_IE_PRESENT)
1110 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
1111 if(msg->scompl.h.present & UNI_IE_PRESENT)
1112 uni_print_ie_internal(UNI_IE_SCOMPL, (union uni_ieall *)&msg->scompl, cx);
1113 for(i = 0; i < UNI_NUM_IE_TNS; i++)
1114 if(msg->tns[i].h.present & UNI_IE_PRESENT)
1115 uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
1116 if(msg->epref.h.present & UNI_IE_PRESENT)
1117 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1118 if(msg->atraffic.h.present & UNI_IE_PRESENT)
1119 uni_print_ie_internal(UNI_IE_ATRAFFIC, (union uni_ieall *)&msg->atraffic, cx);
1120 if(msg->mintraffic.h.present & UNI_IE_PRESENT)
1121 uni_print_ie_internal(UNI_IE_MINTRAFFIC, (union uni_ieall *)&msg->mintraffic, cx);
1122 if(msg->uu.h.present & UNI_IE_PRESENT)
1123 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
1124 for(i = 0; i < UNI_NUM_IE_GIT; i++)
1125 if(msg->git[i].h.present & UNI_IE_PRESENT)
1126 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
1127 if(msg->lij_callid.h.present & UNI_IE_PRESENT)
1128 uni_print_ie_internal(UNI_IE_LIJ_CALLID, (union uni_ieall *)&msg->lij_callid, cx);
1129 if(msg->lij_param.h.present & UNI_IE_PRESENT)
1130 uni_print_ie_internal(UNI_IE_LIJ_PARAM, (union uni_ieall *)&msg->lij_param, cx);
1131 if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
1132 uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
1133 if(msg->exqos.h.present & UNI_IE_PRESENT)
1134 uni_print_ie_internal(UNI_IE_EXQOS, (union uni_ieall *)&msg->exqos, cx);
1135 if(msg->abrsetup.h.present & UNI_IE_PRESENT)
1136 uni_print_ie_internal(UNI_IE_ABRSETUP, (union uni_ieall *)&msg->abrsetup, cx);
1137 if(msg->abradd.h.present & UNI_IE_PRESENT)
1138 uni_print_ie_internal(UNI_IE_ABRADD, (union uni_ieall *)&msg->abradd, cx);
1139 if(msg->cscope.h.present & UNI_IE_PRESENT)
1140 uni_print_ie_internal(UNI_IE_CSCOPE, (union uni_ieall *)&msg->cscope, cx);
1141 if(msg->calling_soft.h.present & UNI_IE_PRESENT)
1142 uni_print_ie_internal(UNI_IE_CALLING_SOFT, (union uni_ieall *)&msg->calling_soft, cx);
1143 if(msg->called_soft.h.present & UNI_IE_PRESENT)
1144 uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
1145 if(msg->dtl_repeat.h.present & UNI_IE_PRESENT)
1146 uni_print_ie_internal(UNI_IE_REPEAT, (union uni_ieall *)&msg->dtl_repeat, cx);
1147 for(i = 0; i < UNI_NUM_IE_DTL; i++)
1148 if(msg->dtl[i].h.present & UNI_IE_PRESENT)
1149 uni_print_ie_internal(UNI_IE_DTL, (union uni_ieall *)&msg->dtl[i], cx);
1150 if(msg->report.h.present & UNI_IE_PRESENT)
1151 uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
1152 if(msg->mdcr.h.present & UNI_IE_PRESENT)
1153 uni_print_ie_internal(UNI_IE_MDCR, (union uni_ieall *)&msg->mdcr, cx);
1154 if(msg->unrec.h.present & UNI_IE_PRESENT)
1155 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1156 }
1157
1158 static int
1159 check_setup(struct uni_setup *m, struct unicx *cx)
1160 {
1161 int ret = 0;
1162 u_int i;
1163
1164 ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
1165 ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
1166 ret |= uni_check_ie(UNI_IE_BEARER, (union uni_ieall *)&m->bearer, cx);
1167 ret |= uni_check_ie(UNI_IE_BHLI, (union uni_ieall *)&m->bhli, cx);
1168 ret |= uni_check_ie(UNI_IE_REPEAT, (union uni_ieall *)&m->blli_repeat, cx);
1169 for(i = 0; i < UNI_NUM_IE_BLLI ; i++) {
1170 ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli[i], cx);
1171 }
1172 ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
1173 for(i = 0; i < UNI_NUM_IE_CALLEDSUB ; i++) {
1174 ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub[i], cx);
1175 }
1176 ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
1177 for(i = 0; i < UNI_NUM_IE_CALLINGSUB ; i++) {
1178 ret |= uni_check_ie(UNI_IE_CALLINGSUB, (union uni_ieall *)&m->callingsub[i], cx);
1179 }
1180 ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
1181 ret |= uni_check_ie(UNI_IE_QOS, (union uni_ieall *)&m->qos, cx);
1182 ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
1183 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
1184 if(!(!cx->pnni))
1185 ret |= IE_ISPRESENT(m->scompl);
1186 else
1187 ret |= uni_check_ie(UNI_IE_SCOMPL, (union uni_ieall *)&m->scompl, cx);
1188 for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
1189 ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
1190 }
1191 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1192 ret |= uni_check_ie(UNI_IE_ATRAFFIC, (union uni_ieall *)&m->atraffic, cx);
1193 ret |= uni_check_ie(UNI_IE_MINTRAFFIC, (union uni_ieall *)&m->mintraffic, cx);
1194 if(!(!cx->pnni))
1195 ret |= IE_ISPRESENT(m->uu);
1196 else
1197 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
1198 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
1199 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
1200 }
1201 if(!(!cx->pnni))
1202 ret |= IE_ISPRESENT(m->lij_callid);
1203 else
1204 ret |= uni_check_ie(UNI_IE_LIJ_CALLID, (union uni_ieall *)&m->lij_callid, cx);
1205 if(!(!cx->pnni))
1206 ret |= IE_ISPRESENT(m->lij_param);
1207 else
1208 ret |= uni_check_ie(UNI_IE_LIJ_PARAM, (union uni_ieall *)&m->lij_param, cx);
1209 if(!(!cx->pnni))
1210 ret |= IE_ISPRESENT(m->lij_seqno);
1211 else
1212 ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
1213 ret |= uni_check_ie(UNI_IE_EXQOS, (union uni_ieall *)&m->exqos, cx);
1214 ret |= uni_check_ie(UNI_IE_ABRSETUP, (union uni_ieall *)&m->abrsetup, cx);
1215 ret |= uni_check_ie(UNI_IE_ABRADD, (union uni_ieall *)&m->abradd, cx);
1216 ret |= uni_check_ie(UNI_IE_CSCOPE, (union uni_ieall *)&m->cscope, cx);
1217 if(!(cx->pnni))
1218 ret |= IE_ISPRESENT(m->calling_soft);
1219 else
1220 ret |= uni_check_ie(UNI_IE_CALLING_SOFT, (union uni_ieall *)&m->calling_soft, cx);
1221 if(!(cx->pnni))
1222 ret |= IE_ISPRESENT(m->called_soft);
1223 else
1224 ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
1225 if(!(cx->pnni))
1226 ret |= IE_ISPRESENT(m->dtl_repeat);
1227 else
1228 ret |= uni_check_ie(UNI_IE_REPEAT, (union uni_ieall *)&m->dtl_repeat, cx);
1229 for(i = 0; i < UNI_NUM_IE_DTL ; i++) {
1230 if(!(cx->pnni))
1231 ret |= IE_ISPRESENT(m->dtl[i]);
1232 else
1233 ret |= uni_check_ie(UNI_IE_DTL, (union uni_ieall *)&m->dtl[i], cx);
1234 }
1235 if(!(!cx->pnni))
1236 ret |= IE_ISPRESENT(m->report);
1237 else
1238 ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
1239 ret |= uni_check_ie(UNI_IE_MDCR, (union uni_ieall *)&m->mdcr, cx);
1240 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1241
1242 return ret;
1243 }
1244
1245 static int
1246 encode_setup(struct uni_msg *msg, struct uni_setup *p, struct unicx *cx)
1247 {
1248 u_int mlen;
1249 u_int i;
1250
1251 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_SETUP, cx, &mlen))
1252 return (-2);
1253
1254 if((p->aal.h.present & UNI_IE_PRESENT) &&
1255 uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
1256 return (UNI_IE_AAL);
1257 if((p->traffic.h.present & UNI_IE_PRESENT) &&
1258 uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
1259 return (UNI_IE_TRAFFIC);
1260 if((p->bearer.h.present & UNI_IE_PRESENT) &&
1261 uni_encode_ie(UNI_IE_BEARER, msg, (union uni_ieall *)&p->bearer, cx))
1262 return (UNI_IE_BEARER);
1263 if((p->bhli.h.present & UNI_IE_PRESENT) &&
1264 uni_encode_ie(UNI_IE_BHLI, msg, (union uni_ieall *)&p->bhli, cx))
1265 return (UNI_IE_BHLI);
1266 if((p->blli_repeat.h.present & UNI_IE_PRESENT) &&
1267 uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli_repeat, cx))
1268 return (0x10000000 + UNI_IE_BLLI);
1269 for(i = 0; i < UNI_NUM_IE_BLLI; i++)
1270 if((p->blli[i].h.present & UNI_IE_PRESENT) &&
1271 uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli[i], cx))
1272 return ((i << 16) + UNI_IE_BLLI);
1273 if((p->called.h.present & UNI_IE_PRESENT) &&
1274 uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
1275 return (UNI_IE_CALLED);
1276 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
1277 if((p->calledsub[i].h.present & UNI_IE_PRESENT) &&
1278 uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub[i], cx))
1279 return ((i << 16) + UNI_IE_CALLEDSUB);
1280 if((p->calling.h.present & UNI_IE_PRESENT) &&
1281 uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
1282 return (UNI_IE_CALLING);
1283 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
1284 if((p->callingsub[i].h.present & UNI_IE_PRESENT) &&
1285 uni_encode_ie(UNI_IE_CALLINGSUB, msg, (union uni_ieall *)&p->callingsub[i], cx))
1286 return ((i << 16) + UNI_IE_CALLINGSUB);
1287 if((p->connid.h.present & UNI_IE_PRESENT) &&
1288 uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
1289 return (UNI_IE_CONNID);
1290 if((p->qos.h.present & UNI_IE_PRESENT) &&
1291 uni_encode_ie(UNI_IE_QOS, msg, (union uni_ieall *)&p->qos, cx))
1292 return (UNI_IE_QOS);
1293 if((p->eetd.h.present & UNI_IE_PRESENT) &&
1294 uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
1295 return (UNI_IE_EETD);
1296 if((p->notify.h.present & UNI_IE_PRESENT) &&
1297 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
1298 return (UNI_IE_NOTIFY);
1299 if((p->scompl.h.present & UNI_IE_PRESENT) &&
1300 uni_encode_ie(UNI_IE_SCOMPL, msg, (union uni_ieall *)&p->scompl, cx))
1301 return (UNI_IE_SCOMPL);
1302 for(i = 0; i < UNI_NUM_IE_TNS; i++)
1303 if((p->tns[i].h.present & UNI_IE_PRESENT) &&
1304 uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
1305 return ((i << 16) + UNI_IE_TNS);
1306 if((p->epref.h.present & UNI_IE_PRESENT) &&
1307 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1308 return (UNI_IE_EPREF);
1309 if((p->atraffic.h.present & UNI_IE_PRESENT) &&
1310 uni_encode_ie(UNI_IE_ATRAFFIC, msg, (union uni_ieall *)&p->atraffic, cx))
1311 return (UNI_IE_ATRAFFIC);
1312 if((p->mintraffic.h.present & UNI_IE_PRESENT) &&
1313 uni_encode_ie(UNI_IE_MINTRAFFIC, msg, (union uni_ieall *)&p->mintraffic, cx))
1314 return (UNI_IE_MINTRAFFIC);
1315 if((p->uu.h.present & UNI_IE_PRESENT) &&
1316 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
1317 return (UNI_IE_UU);
1318 for(i = 0; i < UNI_NUM_IE_GIT; i++)
1319 if((p->git[i].h.present & UNI_IE_PRESENT) &&
1320 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
1321 return ((i << 16) + UNI_IE_GIT);
1322 if((p->lij_callid.h.present & UNI_IE_PRESENT) &&
1323 uni_encode_ie(UNI_IE_LIJ_CALLID, msg, (union uni_ieall *)&p->lij_callid, cx))
1324 return (UNI_IE_LIJ_CALLID);
1325 if((p->lij_param.h.present & UNI_IE_PRESENT) &&
1326 uni_encode_ie(UNI_IE_LIJ_PARAM, msg, (union uni_ieall *)&p->lij_param, cx))
1327 return (UNI_IE_LIJ_PARAM);
1328 if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
1329 uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
1330 return (UNI_IE_LIJ_SEQNO);
1331 if((p->exqos.h.present & UNI_IE_PRESENT) &&
1332 uni_encode_ie(UNI_IE_EXQOS, msg, (union uni_ieall *)&p->exqos, cx))
1333 return (UNI_IE_EXQOS);
1334 if((p->abrsetup.h.present & UNI_IE_PRESENT) &&
1335 uni_encode_ie(UNI_IE_ABRSETUP, msg, (union uni_ieall *)&p->abrsetup, cx))
1336 return (UNI_IE_ABRSETUP);
1337 if((p->abradd.h.present & UNI_IE_PRESENT) &&
1338 uni_encode_ie(UNI_IE_ABRADD, msg, (union uni_ieall *)&p->abradd, cx))
1339 return (UNI_IE_ABRADD);
1340 if((p->cscope.h.present & UNI_IE_PRESENT) &&
1341 uni_encode_ie(UNI_IE_CSCOPE, msg, (union uni_ieall *)&p->cscope, cx))
1342 return (UNI_IE_CSCOPE);
1343 if((p->calling_soft.h.present & UNI_IE_PRESENT) &&
1344 uni_encode_ie(UNI_IE_CALLING_SOFT, msg, (union uni_ieall *)&p->calling_soft, cx))
1345 return (UNI_IE_CALLING_SOFT);
1346 if((p->called_soft.h.present & UNI_IE_PRESENT) &&
1347 uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
1348 return (UNI_IE_CALLED_SOFT);
1349 if((p->dtl_repeat.h.present & UNI_IE_PRESENT) &&
1350 uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl_repeat, cx))
1351 return (0x10000000 + UNI_IE_DTL);
1352 for(i = 0; i < UNI_NUM_IE_DTL; i++)
1353 if((p->dtl[i].h.present & UNI_IE_PRESENT) &&
1354 uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl[i], cx))
1355 return ((i << 16) + UNI_IE_DTL);
1356 if((p->report.h.present & UNI_IE_PRESENT) &&
1357 uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
1358 return (UNI_IE_REPORT);
1359 if((p->mdcr.h.present & UNI_IE_PRESENT) &&
1360 uni_encode_ie(UNI_IE_MDCR, msg, (union uni_ieall *)&p->mdcr, cx))
1361 return (UNI_IE_MDCR);
1362 if((p->unrec.h.present & UNI_IE_PRESENT) &&
1363 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1364 return (UNI_IE_UNREC);
1365
1366 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1367 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1368
1369 return (0);
1370 }
1371
1372 static int
1373 decode_setup(struct uni_setup *out, struct uni_msg *msg,
1374 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1375 struct unicx *cx)
1376 {
1377 u_int i;
1378
1379 switch (ie) {
1380
1381 case UNI_IE_AAL:
1382 out->aal.h = *hdr;
1383 if (hdr->present & UNI_IE_ERROR)
1384 return (DEC_ERR);
1385 if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
1386 return (DEC_ERR);
1387 break;
1388
1389 case UNI_IE_TRAFFIC:
1390 out->traffic.h = *hdr;
1391 if (hdr->present & UNI_IE_ERROR)
1392 return (DEC_ERR);
1393 if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
1394 return (DEC_ERR);
1395 break;
1396
1397 case UNI_IE_BEARER:
1398 out->bearer.h = *hdr;
1399 if (hdr->present & UNI_IE_ERROR)
1400 return (DEC_ERR);
1401 if(uni_decode_ie_body(UNI_IE_BEARER, (union uni_ieall *)&out->bearer, msg, ielen, cx))
1402 return (DEC_ERR);
1403 break;
1404
1405 case UNI_IE_BHLI:
1406 out->bhli.h = *hdr;
1407 if (hdr->present & UNI_IE_ERROR)
1408 return (DEC_ERR);
1409 if(uni_decode_ie_body(UNI_IE_BHLI, (union uni_ieall *)&out->bhli, msg, ielen, cx))
1410 return (DEC_ERR);
1411 break;
1412
1413 case UNI_IE_BLLI:
1414 if (IE_ISPRESENT(cx->repeat))
1415 out->blli_repeat = cx->repeat;
1416 for(i = 0; i < UNI_NUM_IE_BLLI; i++)
1417 if (!IE_ISPRESENT(out->blli[i])) {
1418 out->blli[i].h = *hdr;
1419 if (hdr->present & UNI_IE_ERROR)
1420 return (DEC_ERR);
1421 if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli[i], msg, ielen, cx))
1422 return (DEC_ERR);
1423 break;
1424 }
1425 break;
1426
1427 case UNI_IE_CALLED:
1428 out->called.h = *hdr;
1429 if (hdr->present & UNI_IE_ERROR)
1430 return (DEC_ERR);
1431 if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
1432 return (DEC_ERR);
1433 break;
1434
1435 case UNI_IE_CALLEDSUB:
1436 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
1437 if (!IE_ISPRESENT(out->calledsub[i])) {
1438 out->calledsub[i].h = *hdr;
1439 if (hdr->present & UNI_IE_ERROR)
1440 return (DEC_ERR);
1441 if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub[i], msg, ielen, cx))
1442 return (DEC_ERR);
1443 break;
1444 }
1445 break;
1446
1447 case UNI_IE_CALLING:
1448 out->calling.h = *hdr;
1449 if (hdr->present & UNI_IE_ERROR)
1450 return (DEC_ERR);
1451 if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
1452 return (DEC_ERR);
1453 break;
1454
1455 case UNI_IE_CALLINGSUB:
1456 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
1457 if (!IE_ISPRESENT(out->callingsub[i])) {
1458 out->callingsub[i].h = *hdr;
1459 if (hdr->present & UNI_IE_ERROR)
1460 return (DEC_ERR);
1461 if(uni_decode_ie_body(UNI_IE_CALLINGSUB, (union uni_ieall *)&out->callingsub[i], msg, ielen, cx))
1462 return (DEC_ERR);
1463 break;
1464 }
1465 break;
1466
1467 case UNI_IE_CONNID:
1468 out->connid.h = *hdr;
1469 if (hdr->present & UNI_IE_ERROR)
1470 return (DEC_ERR);
1471 if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
1472 return (DEC_ERR);
1473 break;
1474
1475 case UNI_IE_QOS:
1476 out->qos.h = *hdr;
1477 if (hdr->present & UNI_IE_ERROR)
1478 return (DEC_ERR);
1479 if(uni_decode_ie_body(UNI_IE_QOS, (union uni_ieall *)&out->qos, msg, ielen, cx))
1480 return (DEC_ERR);
1481 break;
1482
1483 case UNI_IE_EETD:
1484 out->eetd.h = *hdr;
1485 if (hdr->present & UNI_IE_ERROR)
1486 return (DEC_ERR);
1487 if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
1488 return (DEC_ERR);
1489 break;
1490
1491 case UNI_IE_NOTIFY:
1492 out->notify.h = *hdr;
1493 if (hdr->present & UNI_IE_ERROR)
1494 return (DEC_ERR);
1495 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
1496 return (DEC_ERR);
1497 break;
1498
1499 case UNI_IE_SCOMPL:
1500 if (!(!cx->pnni))
1501 return (DEC_ILL);
1502 out->scompl.h = *hdr;
1503 if (hdr->present & UNI_IE_ERROR)
1504 return (DEC_ERR);
1505 if(uni_decode_ie_body(UNI_IE_SCOMPL, (union uni_ieall *)&out->scompl, msg, ielen, cx))
1506 return (DEC_ERR);
1507 break;
1508
1509 case UNI_IE_TNS:
1510 for(i = 0; i < UNI_NUM_IE_TNS; i++)
1511 if (!IE_ISPRESENT(out->tns[i])) {
1512 out->tns[i].h = *hdr;
1513 if (hdr->present & UNI_IE_ERROR)
1514 return (DEC_ERR);
1515 if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
1516 return (DEC_ERR);
1517 break;
1518 }
1519 break;
1520
1521 case UNI_IE_EPREF:
1522 out->epref.h = *hdr;
1523 if (hdr->present & UNI_IE_ERROR)
1524 return (DEC_ERR);
1525 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1526 return (DEC_ERR);
1527 break;
1528
1529 case UNI_IE_ATRAFFIC:
1530 out->atraffic.h = *hdr;
1531 if (hdr->present & UNI_IE_ERROR)
1532 return (DEC_ERR);
1533 if(uni_decode_ie_body(UNI_IE_ATRAFFIC, (union uni_ieall *)&out->atraffic, msg, ielen, cx))
1534 return (DEC_ERR);
1535 break;
1536
1537 case UNI_IE_MINTRAFFIC:
1538 out->mintraffic.h = *hdr;
1539 if (hdr->present & UNI_IE_ERROR)
1540 return (DEC_ERR);
1541 if(uni_decode_ie_body(UNI_IE_MINTRAFFIC, (union uni_ieall *)&out->mintraffic, msg, ielen, cx))
1542 return (DEC_ERR);
1543 break;
1544
1545 case UNI_IE_UU:
1546 if (!(!cx->pnni))
1547 return (DEC_ILL);
1548 out->uu.h = *hdr;
1549 if (hdr->present & UNI_IE_ERROR)
1550 return (DEC_ERR);
1551 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
1552 return (DEC_ERR);
1553 break;
1554
1555 case UNI_IE_GIT:
1556 for(i = 0; i < UNI_NUM_IE_GIT; i++)
1557 if (!IE_ISPRESENT(out->git[i])) {
1558 out->git[i].h = *hdr;
1559 if (hdr->present & UNI_IE_ERROR)
1560 return (DEC_ERR);
1561 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
1562 return (DEC_ERR);
1563 break;
1564 }
1565 break;
1566
1567 case UNI_IE_LIJ_CALLID:
1568 if (!(!cx->pnni))
1569 return (DEC_ILL);
1570 out->lij_callid.h = *hdr;
1571 if (hdr->present & UNI_IE_ERROR)
1572 return (DEC_ERR);
1573 if(uni_decode_ie_body(UNI_IE_LIJ_CALLID, (union uni_ieall *)&out->lij_callid, msg, ielen, cx))
1574 return (DEC_ERR);
1575 break;
1576
1577 case UNI_IE_LIJ_PARAM:
1578 if (!(!cx->pnni))
1579 return (DEC_ILL);
1580 out->lij_param.h = *hdr;
1581 if (hdr->present & UNI_IE_ERROR)
1582 return (DEC_ERR);
1583 if(uni_decode_ie_body(UNI_IE_LIJ_PARAM, (union uni_ieall *)&out->lij_param, msg, ielen, cx))
1584 return (DEC_ERR);
1585 break;
1586
1587 case UNI_IE_LIJ_SEQNO:
1588 if (!(!cx->pnni))
1589 return (DEC_ILL);
1590 out->lij_seqno.h = *hdr;
1591 if (hdr->present & UNI_IE_ERROR)
1592 return (DEC_ERR);
1593 if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
1594 return (DEC_ERR);
1595 break;
1596
1597 case UNI_IE_EXQOS:
1598 out->exqos.h = *hdr;
1599 if (hdr->present & UNI_IE_ERROR)
1600 return (DEC_ERR);
1601 if(uni_decode_ie_body(UNI_IE_EXQOS, (union uni_ieall *)&out->exqos, msg, ielen, cx))
1602 return (DEC_ERR);
1603 break;
1604
1605 case UNI_IE_ABRSETUP:
1606 out->abrsetup.h = *hdr;
1607 if (hdr->present & UNI_IE_ERROR)
1608 return (DEC_ERR);
1609 if(uni_decode_ie_body(UNI_IE_ABRSETUP, (union uni_ieall *)&out->abrsetup, msg, ielen, cx))
1610 return (DEC_ERR);
1611 break;
1612
1613 case UNI_IE_ABRADD:
1614 out->abradd.h = *hdr;
1615 if (hdr->present & UNI_IE_ERROR)
1616 return (DEC_ERR);
1617 if(uni_decode_ie_body(UNI_IE_ABRADD, (union uni_ieall *)&out->abradd, msg, ielen, cx))
1618 return (DEC_ERR);
1619 break;
1620
1621 case UNI_IE_CSCOPE:
1622 out->cscope.h = *hdr;
1623 if (hdr->present & UNI_IE_ERROR)
1624 return (DEC_ERR);
1625 if(uni_decode_ie_body(UNI_IE_CSCOPE, (union uni_ieall *)&out->cscope, msg, ielen, cx))
1626 return (DEC_ERR);
1627 break;
1628
1629 case UNI_IE_CALLING_SOFT:
1630 if (!(cx->pnni))
1631 return (DEC_ILL);
1632 out->calling_soft.h = *hdr;
1633 if (hdr->present & UNI_IE_ERROR)
1634 return (DEC_ERR);
1635 if(uni_decode_ie_body(UNI_IE_CALLING_SOFT, (union uni_ieall *)&out->calling_soft, msg, ielen, cx))
1636 return (DEC_ERR);
1637 break;
1638
1639 case UNI_IE_CALLED_SOFT:
1640 if (!(cx->pnni))
1641 return (DEC_ILL);
1642 out->called_soft.h = *hdr;
1643 if (hdr->present & UNI_IE_ERROR)
1644 return (DEC_ERR);
1645 if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
1646 return (DEC_ERR);
1647 break;
1648
1649 case UNI_IE_DTL:
1650 if (!(cx->pnni))
1651 return (DEC_ILL);
1652 if (IE_ISPRESENT(cx->repeat))
1653 out->dtl_repeat = cx->repeat;
1654 for(i = 0; i < UNI_NUM_IE_DTL; i++)
1655 if (!IE_ISPRESENT(out->dtl[i])) {
1656 out->dtl[i].h = *hdr;
1657 if (hdr->present & UNI_IE_ERROR)
1658 return (DEC_ERR);
1659 if(uni_decode_ie_body(UNI_IE_DTL, (union uni_ieall *)&out->dtl[i], msg, ielen, cx))
1660 return (DEC_ERR);
1661 break;
1662 }
1663 break;
1664
1665 case UNI_IE_REPORT:
1666 if (!(!cx->pnni))
1667 return (DEC_ILL);
1668 out->report.h = *hdr;
1669 if (hdr->present & UNI_IE_ERROR)
1670 return (DEC_ERR);
1671 if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
1672 return (DEC_ERR);
1673 break;
1674
1675 case UNI_IE_MDCR:
1676 out->mdcr.h = *hdr;
1677 if (hdr->present & UNI_IE_ERROR)
1678 return (DEC_ERR);
1679 if(uni_decode_ie_body(UNI_IE_MDCR, (union uni_ieall *)&out->mdcr, msg, ielen, cx))
1680 return (DEC_ERR);
1681 break;
1682
1683 case UNI_IE_UNREC:
1684 out->unrec.h = *hdr;
1685 if (hdr->present & UNI_IE_ERROR)
1686 return (DEC_ERR);
1687 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1688 return (DEC_ERR);
1689 break;
1690
1691 case UNI_IE_REPEAT:
1692 cx->repeat.h = *hdr;
1693 if (hdr->present & UNI_IE_ERROR)
1694 return (DEC_ERR);
1695 if (uni_decode_ie_body(UNI_IE_REPEAT, (union uni_ieall *)&cx->repeat, msg, ielen, cx))
1696 return (DEC_ERR);
1697 break;
1698
1699 default:
1700 return (DEC_ILL);
1701 }
1702 return (DEC_OK);
1703 }
1704
1705 static const struct msgdecl decl_setup = {
1706 0,
1707 "setup",
1708 (uni_msg_print_f)print_setup,
1709 (uni_msg_check_f)check_setup,
1710 (uni_msg_encode_f)encode_setup,
1711 (uni_msg_decode_f)decode_setup
1712 };
1713
1714 static void
1715 print_status(struct uni_status *msg, struct unicx *cx)
1716 {
1717 if(msg->callstate.h.present & UNI_IE_PRESENT)
1718 uni_print_ie_internal(UNI_IE_CALLSTATE, (union uni_ieall *)&msg->callstate, cx);
1719 if(msg->cause.h.present & UNI_IE_PRESENT)
1720 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
1721 if(msg->epref.h.present & UNI_IE_PRESENT)
1722 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1723 if(msg->epstate.h.present & UNI_IE_PRESENT)
1724 uni_print_ie_internal(UNI_IE_EPSTATE, (union uni_ieall *)&msg->epstate, cx);
1725 if(msg->unrec.h.present & UNI_IE_PRESENT)
1726 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1727 }
1728
1729 static int
1730 check_status(struct uni_status *m, struct unicx *cx)
1731 {
1732 int ret = 0;
1733
1734 ret |= uni_check_ie(UNI_IE_CALLSTATE, (union uni_ieall *)&m->callstate, cx);
1735 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
1736 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1737 ret |= uni_check_ie(UNI_IE_EPSTATE, (union uni_ieall *)&m->epstate, cx);
1738 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1739
1740 return ret;
1741 }
1742
1743 static int
1744 encode_status(struct uni_msg *msg, struct uni_status *p, struct unicx *cx)
1745 {
1746 u_int mlen;
1747
1748 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_STATUS, cx, &mlen))
1749 return (-2);
1750
1751 if((p->callstate.h.present & UNI_IE_PRESENT) &&
1752 uni_encode_ie(UNI_IE_CALLSTATE, msg, (union uni_ieall *)&p->callstate, cx))
1753 return (UNI_IE_CALLSTATE);
1754 if((p->cause.h.present & UNI_IE_PRESENT) &&
1755 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
1756 return (UNI_IE_CAUSE);
1757 if((p->epref.h.present & UNI_IE_PRESENT) &&
1758 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1759 return (UNI_IE_EPREF);
1760 if((p->epstate.h.present & UNI_IE_PRESENT) &&
1761 uni_encode_ie(UNI_IE_EPSTATE, msg, (union uni_ieall *)&p->epstate, cx))
1762 return (UNI_IE_EPSTATE);
1763 if((p->unrec.h.present & UNI_IE_PRESENT) &&
1764 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1765 return (UNI_IE_UNREC);
1766
1767 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1768 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1769
1770 return (0);
1771 }
1772
1773 static int
1774 decode_status(struct uni_status *out, struct uni_msg *msg,
1775 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1776 struct unicx *cx)
1777 {
1778 switch (ie) {
1779
1780 case UNI_IE_CALLSTATE:
1781 out->callstate.h = *hdr;
1782 if (hdr->present & UNI_IE_ERROR)
1783 return (DEC_ERR);
1784 if(uni_decode_ie_body(UNI_IE_CALLSTATE, (union uni_ieall *)&out->callstate, msg, ielen, cx))
1785 return (DEC_ERR);
1786 break;
1787
1788 case UNI_IE_CAUSE:
1789 out->cause.h = *hdr;
1790 if (hdr->present & UNI_IE_ERROR)
1791 return (DEC_ERR);
1792 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
1793 return (DEC_ERR);
1794 break;
1795
1796 case UNI_IE_EPREF:
1797 out->epref.h = *hdr;
1798 if (hdr->present & UNI_IE_ERROR)
1799 return (DEC_ERR);
1800 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1801 return (DEC_ERR);
1802 break;
1803
1804 case UNI_IE_EPSTATE:
1805 out->epstate.h = *hdr;
1806 if (hdr->present & UNI_IE_ERROR)
1807 return (DEC_ERR);
1808 if(uni_decode_ie_body(UNI_IE_EPSTATE, (union uni_ieall *)&out->epstate, msg, ielen, cx))
1809 return (DEC_ERR);
1810 break;
1811
1812 case UNI_IE_UNREC:
1813 out->unrec.h = *hdr;
1814 if (hdr->present & UNI_IE_ERROR)
1815 return (DEC_ERR);
1816 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1817 return (DEC_ERR);
1818 break;
1819
1820 default:
1821 return (DEC_ILL);
1822 }
1823 return (DEC_OK);
1824 }
1825
1826 static const struct msgdecl decl_status = {
1827 0,
1828 "status",
1829 (uni_msg_print_f)print_status,
1830 (uni_msg_check_f)check_status,
1831 (uni_msg_encode_f)encode_status,
1832 (uni_msg_decode_f)decode_status
1833 };
1834
1835 static void
1836 print_status_enq(struct uni_status_enq *msg, struct unicx *cx)
1837 {
1838 if(msg->epref.h.present & UNI_IE_PRESENT)
1839 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1840 if(msg->unrec.h.present & UNI_IE_PRESENT)
1841 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1842 }
1843
1844 static int
1845 check_status_enq(struct uni_status_enq *m, struct unicx *cx)
1846 {
1847 int ret = 0;
1848
1849 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1850 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1851
1852 return ret;
1853 }
1854
1855 static int
1856 encode_status_enq(struct uni_msg *msg, struct uni_status_enq *p, struct unicx *cx)
1857 {
1858 u_int mlen;
1859
1860 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_STATUS_ENQ, cx, &mlen))
1861 return (-2);
1862
1863 if((p->epref.h.present & UNI_IE_PRESENT) &&
1864 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1865 return (UNI_IE_EPREF);
1866 if((p->unrec.h.present & UNI_IE_PRESENT) &&
1867 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1868 return (UNI_IE_UNREC);
1869
1870 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1871 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1872
1873 return (0);
1874 }
1875
1876 static int
1877 decode_status_enq(struct uni_status_enq *out, struct uni_msg *msg,
1878 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1879 struct unicx *cx)
1880 {
1881 switch (ie) {
1882
1883 case UNI_IE_EPREF:
1884 out->epref.h = *hdr;
1885 if (hdr->present & UNI_IE_ERROR)
1886 return (DEC_ERR);
1887 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1888 return (DEC_ERR);
1889 break;
1890
1891 case UNI_IE_UNREC:
1892 out->unrec.h = *hdr;
1893 if (hdr->present & UNI_IE_ERROR)
1894 return (DEC_ERR);
1895 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1896 return (DEC_ERR);
1897 break;
1898
1899 default:
1900 return (DEC_ILL);
1901 }
1902 return (DEC_OK);
1903 }
1904
1905 static const struct msgdecl decl_status_enq = {
1906 0,
1907 "status_enq",
1908 (uni_msg_print_f)print_status_enq,
1909 (uni_msg_check_f)check_status_enq,
1910 (uni_msg_encode_f)encode_status_enq,
1911 (uni_msg_decode_f)decode_status_enq
1912 };
1913
1914 static void
1915 print_notify(struct uni_notify *msg, struct unicx *cx)
1916 {
1917 if(msg->notify.h.present & UNI_IE_PRESENT)
1918 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
1919 if(msg->epref.h.present & UNI_IE_PRESENT)
1920 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
1921 if(msg->unrec.h.present & UNI_IE_PRESENT)
1922 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
1923 }
1924
1925 static int
1926 check_notify(struct uni_notify *m, struct unicx *cx)
1927 {
1928 int ret = 0;
1929
1930 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
1931 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
1932 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
1933
1934 return ret;
1935 }
1936
1937 static int
1938 encode_notify(struct uni_msg *msg, struct uni_notify *p, struct unicx *cx)
1939 {
1940 u_int mlen;
1941
1942 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_NOTIFY, cx, &mlen))
1943 return (-2);
1944
1945 if((p->notify.h.present & UNI_IE_PRESENT) &&
1946 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
1947 return (UNI_IE_NOTIFY);
1948 if((p->epref.h.present & UNI_IE_PRESENT) &&
1949 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
1950 return (UNI_IE_EPREF);
1951 if((p->unrec.h.present & UNI_IE_PRESENT) &&
1952 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
1953 return (UNI_IE_UNREC);
1954
1955 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
1956 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
1957
1958 return (0);
1959 }
1960
1961 static int
1962 decode_notify(struct uni_notify *out, struct uni_msg *msg,
1963 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
1964 struct unicx *cx)
1965 {
1966 switch (ie) {
1967
1968 case UNI_IE_NOTIFY:
1969 out->notify.h = *hdr;
1970 if (hdr->present & UNI_IE_ERROR)
1971 return (DEC_ERR);
1972 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
1973 return (DEC_ERR);
1974 break;
1975
1976 case UNI_IE_EPREF:
1977 out->epref.h = *hdr;
1978 if (hdr->present & UNI_IE_ERROR)
1979 return (DEC_ERR);
1980 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
1981 return (DEC_ERR);
1982 break;
1983
1984 case UNI_IE_UNREC:
1985 out->unrec.h = *hdr;
1986 if (hdr->present & UNI_IE_ERROR)
1987 return (DEC_ERR);
1988 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
1989 return (DEC_ERR);
1990 break;
1991
1992 default:
1993 return (DEC_ILL);
1994 }
1995 return (DEC_OK);
1996 }
1997
1998 static const struct msgdecl decl_notify = {
1999 0,
2000 "notify",
2001 (uni_msg_print_f)print_notify,
2002 (uni_msg_check_f)check_notify,
2003 (uni_msg_encode_f)encode_notify,
2004 (uni_msg_decode_f)decode_notify
2005 };
2006
2007 static void
2008 print_restart(struct uni_restart *msg, struct unicx *cx)
2009 {
2010 if(msg->connid.h.present & UNI_IE_PRESENT)
2011 uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
2012 if(msg->restart.h.present & UNI_IE_PRESENT)
2013 uni_print_ie_internal(UNI_IE_RESTART, (union uni_ieall *)&msg->restart, cx);
2014 if(msg->unrec.h.present & UNI_IE_PRESENT)
2015 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2016 }
2017
2018 static int
2019 check_restart(struct uni_restart *m, struct unicx *cx)
2020 {
2021 int ret = 0;
2022
2023 ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
2024 ret |= uni_check_ie(UNI_IE_RESTART, (union uni_ieall *)&m->restart, cx);
2025 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2026
2027 return ret;
2028 }
2029
2030 static int
2031 encode_restart(struct uni_msg *msg, struct uni_restart *p, struct unicx *cx)
2032 {
2033 u_int mlen;
2034
2035 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RESTART, cx, &mlen))
2036 return (-2);
2037
2038 if((p->connid.h.present & UNI_IE_PRESENT) &&
2039 uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
2040 return (UNI_IE_CONNID);
2041 if((p->restart.h.present & UNI_IE_PRESENT) &&
2042 uni_encode_ie(UNI_IE_RESTART, msg, (union uni_ieall *)&p->restart, cx))
2043 return (UNI_IE_RESTART);
2044 if((p->unrec.h.present & UNI_IE_PRESENT) &&
2045 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2046 return (UNI_IE_UNREC);
2047
2048 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2049 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2050
2051 return (0);
2052 }
2053
2054 static int
2055 decode_restart(struct uni_restart *out, struct uni_msg *msg,
2056 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2057 struct unicx *cx)
2058 {
2059 switch (ie) {
2060
2061 case UNI_IE_CONNID:
2062 out->connid.h = *hdr;
2063 if (hdr->present & UNI_IE_ERROR)
2064 return (DEC_ERR);
2065 if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
2066 return (DEC_ERR);
2067 break;
2068
2069 case UNI_IE_RESTART:
2070 out->restart.h = *hdr;
2071 if (hdr->present & UNI_IE_ERROR)
2072 return (DEC_ERR);
2073 if(uni_decode_ie_body(UNI_IE_RESTART, (union uni_ieall *)&out->restart, msg, ielen, cx))
2074 return (DEC_ERR);
2075 break;
2076
2077 case UNI_IE_UNREC:
2078 out->unrec.h = *hdr;
2079 if (hdr->present & UNI_IE_ERROR)
2080 return (DEC_ERR);
2081 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2082 return (DEC_ERR);
2083 break;
2084
2085 default:
2086 return (DEC_ILL);
2087 }
2088 return (DEC_OK);
2089 }
2090
2091 static const struct msgdecl decl_restart = {
2092 0,
2093 "restart",
2094 (uni_msg_print_f)print_restart,
2095 (uni_msg_check_f)check_restart,
2096 (uni_msg_encode_f)encode_restart,
2097 (uni_msg_decode_f)decode_restart
2098 };
2099
2100 static void
2101 print_restart_ack(struct uni_restart_ack *msg, struct unicx *cx)
2102 {
2103 if(msg->connid.h.present & UNI_IE_PRESENT)
2104 uni_print_ie_internal(UNI_IE_CONNID, (union uni_ieall *)&msg->connid, cx);
2105 if(msg->restart.h.present & UNI_IE_PRESENT)
2106 uni_print_ie_internal(UNI_IE_RESTART, (union uni_ieall *)&msg->restart, cx);
2107 if(msg->unrec.h.present & UNI_IE_PRESENT)
2108 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2109 }
2110
2111 static int
2112 check_restart_ack(struct uni_restart_ack *m, struct unicx *cx)
2113 {
2114 int ret = 0;
2115
2116 ret |= uni_check_ie(UNI_IE_CONNID, (union uni_ieall *)&m->connid, cx);
2117 ret |= uni_check_ie(UNI_IE_RESTART, (union uni_ieall *)&m->restart, cx);
2118 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2119
2120 return ret;
2121 }
2122
2123 static int
2124 encode_restart_ack(struct uni_msg *msg, struct uni_restart_ack *p, struct unicx *cx)
2125 {
2126 u_int mlen;
2127
2128 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_RESTART_ACK, cx, &mlen))
2129 return (-2);
2130
2131 if((p->connid.h.present & UNI_IE_PRESENT) &&
2132 uni_encode_ie(UNI_IE_CONNID, msg, (union uni_ieall *)&p->connid, cx))
2133 return (UNI_IE_CONNID);
2134 if((p->restart.h.present & UNI_IE_PRESENT) &&
2135 uni_encode_ie(UNI_IE_RESTART, msg, (union uni_ieall *)&p->restart, cx))
2136 return (UNI_IE_RESTART);
2137 if((p->unrec.h.present & UNI_IE_PRESENT) &&
2138 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2139 return (UNI_IE_UNREC);
2140
2141 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2142 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2143
2144 return (0);
2145 }
2146
2147 static int
2148 decode_restart_ack(struct uni_restart_ack *out, struct uni_msg *msg,
2149 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2150 struct unicx *cx)
2151 {
2152 switch (ie) {
2153
2154 case UNI_IE_CONNID:
2155 out->connid.h = *hdr;
2156 if (hdr->present & UNI_IE_ERROR)
2157 return (DEC_ERR);
2158 if(uni_decode_ie_body(UNI_IE_CONNID, (union uni_ieall *)&out->connid, msg, ielen, cx))
2159 return (DEC_ERR);
2160 break;
2161
2162 case UNI_IE_RESTART:
2163 out->restart.h = *hdr;
2164 if (hdr->present & UNI_IE_ERROR)
2165 return (DEC_ERR);
2166 if(uni_decode_ie_body(UNI_IE_RESTART, (union uni_ieall *)&out->restart, msg, ielen, cx))
2167 return (DEC_ERR);
2168 break;
2169
2170 case UNI_IE_UNREC:
2171 out->unrec.h = *hdr;
2172 if (hdr->present & UNI_IE_ERROR)
2173 return (DEC_ERR);
2174 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2175 return (DEC_ERR);
2176 break;
2177
2178 default:
2179 return (DEC_ILL);
2180 }
2181 return (DEC_OK);
2182 }
2183
2184 static const struct msgdecl decl_restart_ack = {
2185 0,
2186 "restart_ack",
2187 (uni_msg_print_f)print_restart_ack,
2188 (uni_msg_check_f)check_restart_ack,
2189 (uni_msg_encode_f)encode_restart_ack,
2190 (uni_msg_decode_f)decode_restart_ack
2191 };
2192
2193 static void
2194 print_add_party(struct uni_add_party *msg, struct unicx *cx)
2195 {
2196 u_int i;
2197
2198 if(msg->aal.h.present & UNI_IE_PRESENT)
2199 uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
2200 if(msg->bhli.h.present & UNI_IE_PRESENT)
2201 uni_print_ie_internal(UNI_IE_BHLI, (union uni_ieall *)&msg->bhli, cx);
2202 if(msg->blli.h.present & UNI_IE_PRESENT)
2203 uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli, cx);
2204 if(msg->called.h.present & UNI_IE_PRESENT)
2205 uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
2206 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
2207 if(msg->calledsub[i].h.present & UNI_IE_PRESENT)
2208 uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub[i], cx);
2209 if(msg->calling.h.present & UNI_IE_PRESENT)
2210 uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
2211 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
2212 if(msg->callingsub[i].h.present & UNI_IE_PRESENT)
2213 uni_print_ie_internal(UNI_IE_CALLINGSUB, (union uni_ieall *)&msg->callingsub[i], cx);
2214 if(msg->scompl.h.present & UNI_IE_PRESENT)
2215 uni_print_ie_internal(UNI_IE_SCOMPL, (union uni_ieall *)&msg->scompl, cx);
2216 for(i = 0; i < UNI_NUM_IE_TNS; i++)
2217 if(msg->tns[i].h.present & UNI_IE_PRESENT)
2218 uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
2219 if(msg->epref.h.present & UNI_IE_PRESENT)
2220 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2221 if(msg->notify.h.present & UNI_IE_PRESENT)
2222 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
2223 if(msg->eetd.h.present & UNI_IE_PRESENT)
2224 uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
2225 if(msg->uu.h.present & UNI_IE_PRESENT)
2226 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2227 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2228 if(msg->git[i].h.present & UNI_IE_PRESENT)
2229 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2230 if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
2231 uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
2232 if(msg->calling_soft.h.present & UNI_IE_PRESENT)
2233 uni_print_ie_internal(UNI_IE_CALLING_SOFT, (union uni_ieall *)&msg->calling_soft, cx);
2234 if(msg->called_soft.h.present & UNI_IE_PRESENT)
2235 uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
2236 if(msg->dtl_repeat.h.present & UNI_IE_PRESENT)
2237 uni_print_ie_internal(UNI_IE_REPEAT, (union uni_ieall *)&msg->dtl_repeat, cx);
2238 for(i = 0; i < UNI_NUM_IE_DTL; i++)
2239 if(msg->dtl[i].h.present & UNI_IE_PRESENT)
2240 uni_print_ie_internal(UNI_IE_DTL, (union uni_ieall *)&msg->dtl[i], cx);
2241 if(msg->unrec.h.present & UNI_IE_PRESENT)
2242 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2243 }
2244
2245 static int
2246 check_add_party(struct uni_add_party *m, struct unicx *cx)
2247 {
2248 int ret = 0;
2249 u_int i;
2250
2251 ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
2252 ret |= uni_check_ie(UNI_IE_BHLI, (union uni_ieall *)&m->bhli, cx);
2253 ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli, cx);
2254 ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
2255 for(i = 0; i < UNI_NUM_IE_CALLEDSUB ; i++) {
2256 ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub[i], cx);
2257 }
2258 ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
2259 for(i = 0; i < UNI_NUM_IE_CALLINGSUB ; i++) {
2260 ret |= uni_check_ie(UNI_IE_CALLINGSUB, (union uni_ieall *)&m->callingsub[i], cx);
2261 }
2262 if(!(!cx->pnni))
2263 ret |= IE_ISPRESENT(m->scompl);
2264 else
2265 ret |= uni_check_ie(UNI_IE_SCOMPL, (union uni_ieall *)&m->scompl, cx);
2266 for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
2267 ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
2268 }
2269 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
2270 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
2271 ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
2272 if(!(!cx->pnni))
2273 ret |= IE_ISPRESENT(m->uu);
2274 else
2275 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
2276 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
2277 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
2278 }
2279 if(!(!cx->pnni))
2280 ret |= IE_ISPRESENT(m->lij_seqno);
2281 else
2282 ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
2283 if(!(cx->pnni))
2284 ret |= IE_ISPRESENT(m->calling_soft);
2285 else
2286 ret |= uni_check_ie(UNI_IE_CALLING_SOFT, (union uni_ieall *)&m->calling_soft, cx);
2287 if(!(cx->pnni))
2288 ret |= IE_ISPRESENT(m->called_soft);
2289 else
2290 ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
2291 if(!(cx->pnni))
2292 ret |= IE_ISPRESENT(m->dtl_repeat);
2293 else
2294 ret |= uni_check_ie(UNI_IE_REPEAT, (union uni_ieall *)&m->dtl_repeat, cx);
2295 for(i = 0; i < UNI_NUM_IE_DTL ; i++) {
2296 if(!(cx->pnni))
2297 ret |= IE_ISPRESENT(m->dtl[i]);
2298 else
2299 ret |= uni_check_ie(UNI_IE_DTL, (union uni_ieall *)&m->dtl[i], cx);
2300 }
2301 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2302
2303 return ret;
2304 }
2305
2306 static int
2307 encode_add_party(struct uni_msg *msg, struct uni_add_party *p, struct unicx *cx)
2308 {
2309 u_int mlen;
2310 u_int i;
2311
2312 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ADD_PARTY, cx, &mlen))
2313 return (-2);
2314
2315 if((p->aal.h.present & UNI_IE_PRESENT) &&
2316 uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
2317 return (UNI_IE_AAL);
2318 if((p->bhli.h.present & UNI_IE_PRESENT) &&
2319 uni_encode_ie(UNI_IE_BHLI, msg, (union uni_ieall *)&p->bhli, cx))
2320 return (UNI_IE_BHLI);
2321 if((p->blli.h.present & UNI_IE_PRESENT) &&
2322 uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli, cx))
2323 return (UNI_IE_BLLI);
2324 if((p->called.h.present & UNI_IE_PRESENT) &&
2325 uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
2326 return (UNI_IE_CALLED);
2327 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
2328 if((p->calledsub[i].h.present & UNI_IE_PRESENT) &&
2329 uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub[i], cx))
2330 return ((i << 16) + UNI_IE_CALLEDSUB);
2331 if((p->calling.h.present & UNI_IE_PRESENT) &&
2332 uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
2333 return (UNI_IE_CALLING);
2334 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
2335 if((p->callingsub[i].h.present & UNI_IE_PRESENT) &&
2336 uni_encode_ie(UNI_IE_CALLINGSUB, msg, (union uni_ieall *)&p->callingsub[i], cx))
2337 return ((i << 16) + UNI_IE_CALLINGSUB);
2338 if((p->scompl.h.present & UNI_IE_PRESENT) &&
2339 uni_encode_ie(UNI_IE_SCOMPL, msg, (union uni_ieall *)&p->scompl, cx))
2340 return (UNI_IE_SCOMPL);
2341 for(i = 0; i < UNI_NUM_IE_TNS; i++)
2342 if((p->tns[i].h.present & UNI_IE_PRESENT) &&
2343 uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
2344 return ((i << 16) + UNI_IE_TNS);
2345 if((p->epref.h.present & UNI_IE_PRESENT) &&
2346 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
2347 return (UNI_IE_EPREF);
2348 if((p->notify.h.present & UNI_IE_PRESENT) &&
2349 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
2350 return (UNI_IE_NOTIFY);
2351 if((p->eetd.h.present & UNI_IE_PRESENT) &&
2352 uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
2353 return (UNI_IE_EETD);
2354 if((p->uu.h.present & UNI_IE_PRESENT) &&
2355 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
2356 return (UNI_IE_UU);
2357 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2358 if((p->git[i].h.present & UNI_IE_PRESENT) &&
2359 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
2360 return ((i << 16) + UNI_IE_GIT);
2361 if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
2362 uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
2363 return (UNI_IE_LIJ_SEQNO);
2364 if((p->calling_soft.h.present & UNI_IE_PRESENT) &&
2365 uni_encode_ie(UNI_IE_CALLING_SOFT, msg, (union uni_ieall *)&p->calling_soft, cx))
2366 return (UNI_IE_CALLING_SOFT);
2367 if((p->called_soft.h.present & UNI_IE_PRESENT) &&
2368 uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
2369 return (UNI_IE_CALLED_SOFT);
2370 if((p->dtl_repeat.h.present & UNI_IE_PRESENT) &&
2371 uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl_repeat, cx))
2372 return (0x10000000 + UNI_IE_DTL);
2373 for(i = 0; i < UNI_NUM_IE_DTL; i++)
2374 if((p->dtl[i].h.present & UNI_IE_PRESENT) &&
2375 uni_encode_ie(UNI_IE_DTL, msg, (union uni_ieall *)&p->dtl[i], cx))
2376 return ((i << 16) + UNI_IE_DTL);
2377 if((p->unrec.h.present & UNI_IE_PRESENT) &&
2378 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2379 return (UNI_IE_UNREC);
2380
2381 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2382 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2383
2384 return (0);
2385 }
2386
2387 static int
2388 decode_add_party(struct uni_add_party *out, struct uni_msg *msg,
2389 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2390 struct unicx *cx)
2391 {
2392 u_int i;
2393
2394 switch (ie) {
2395
2396 case UNI_IE_AAL:
2397 out->aal.h = *hdr;
2398 if (hdr->present & UNI_IE_ERROR)
2399 return (DEC_ERR);
2400 if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
2401 return (DEC_ERR);
2402 break;
2403
2404 case UNI_IE_BHLI:
2405 out->bhli.h = *hdr;
2406 if (hdr->present & UNI_IE_ERROR)
2407 return (DEC_ERR);
2408 if(uni_decode_ie_body(UNI_IE_BHLI, (union uni_ieall *)&out->bhli, msg, ielen, cx))
2409 return (DEC_ERR);
2410 break;
2411
2412 case UNI_IE_BLLI:
2413 out->blli.h = *hdr;
2414 if (hdr->present & UNI_IE_ERROR)
2415 return (DEC_ERR);
2416 if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli, msg, ielen, cx))
2417 return (DEC_ERR);
2418 break;
2419
2420 case UNI_IE_CALLED:
2421 out->called.h = *hdr;
2422 if (hdr->present & UNI_IE_ERROR)
2423 return (DEC_ERR);
2424 if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
2425 return (DEC_ERR);
2426 break;
2427
2428 case UNI_IE_CALLEDSUB:
2429 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
2430 if (!IE_ISPRESENT(out->calledsub[i])) {
2431 out->calledsub[i].h = *hdr;
2432 if (hdr->present & UNI_IE_ERROR)
2433 return (DEC_ERR);
2434 if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub[i], msg, ielen, cx))
2435 return (DEC_ERR);
2436 break;
2437 }
2438 break;
2439
2440 case UNI_IE_CALLING:
2441 out->calling.h = *hdr;
2442 if (hdr->present & UNI_IE_ERROR)
2443 return (DEC_ERR);
2444 if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
2445 return (DEC_ERR);
2446 break;
2447
2448 case UNI_IE_CALLINGSUB:
2449 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
2450 if (!IE_ISPRESENT(out->callingsub[i])) {
2451 out->callingsub[i].h = *hdr;
2452 if (hdr->present & UNI_IE_ERROR)
2453 return (DEC_ERR);
2454 if(uni_decode_ie_body(UNI_IE_CALLINGSUB, (union uni_ieall *)&out->callingsub[i], msg, ielen, cx))
2455 return (DEC_ERR);
2456 break;
2457 }
2458 break;
2459
2460 case UNI_IE_SCOMPL:
2461 if (!(!cx->pnni))
2462 return (DEC_ILL);
2463 out->scompl.h = *hdr;
2464 if (hdr->present & UNI_IE_ERROR)
2465 return (DEC_ERR);
2466 if(uni_decode_ie_body(UNI_IE_SCOMPL, (union uni_ieall *)&out->scompl, msg, ielen, cx))
2467 return (DEC_ERR);
2468 break;
2469
2470 case UNI_IE_TNS:
2471 for(i = 0; i < UNI_NUM_IE_TNS; i++)
2472 if (!IE_ISPRESENT(out->tns[i])) {
2473 out->tns[i].h = *hdr;
2474 if (hdr->present & UNI_IE_ERROR)
2475 return (DEC_ERR);
2476 if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
2477 return (DEC_ERR);
2478 break;
2479 }
2480 break;
2481
2482 case UNI_IE_EPREF:
2483 out->epref.h = *hdr;
2484 if (hdr->present & UNI_IE_ERROR)
2485 return (DEC_ERR);
2486 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
2487 return (DEC_ERR);
2488 break;
2489
2490 case UNI_IE_NOTIFY:
2491 out->notify.h = *hdr;
2492 if (hdr->present & UNI_IE_ERROR)
2493 return (DEC_ERR);
2494 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
2495 return (DEC_ERR);
2496 break;
2497
2498 case UNI_IE_EETD:
2499 out->eetd.h = *hdr;
2500 if (hdr->present & UNI_IE_ERROR)
2501 return (DEC_ERR);
2502 if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
2503 return (DEC_ERR);
2504 break;
2505
2506 case UNI_IE_UU:
2507 if (!(!cx->pnni))
2508 return (DEC_ILL);
2509 out->uu.h = *hdr;
2510 if (hdr->present & UNI_IE_ERROR)
2511 return (DEC_ERR);
2512 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
2513 return (DEC_ERR);
2514 break;
2515
2516 case UNI_IE_GIT:
2517 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2518 if (!IE_ISPRESENT(out->git[i])) {
2519 out->git[i].h = *hdr;
2520 if (hdr->present & UNI_IE_ERROR)
2521 return (DEC_ERR);
2522 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
2523 return (DEC_ERR);
2524 break;
2525 }
2526 break;
2527
2528 case UNI_IE_LIJ_SEQNO:
2529 if (!(!cx->pnni))
2530 return (DEC_ILL);
2531 out->lij_seqno.h = *hdr;
2532 if (hdr->present & UNI_IE_ERROR)
2533 return (DEC_ERR);
2534 if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
2535 return (DEC_ERR);
2536 break;
2537
2538 case UNI_IE_CALLING_SOFT:
2539 if (!(cx->pnni))
2540 return (DEC_ILL);
2541 out->calling_soft.h = *hdr;
2542 if (hdr->present & UNI_IE_ERROR)
2543 return (DEC_ERR);
2544 if(uni_decode_ie_body(UNI_IE_CALLING_SOFT, (union uni_ieall *)&out->calling_soft, msg, ielen, cx))
2545 return (DEC_ERR);
2546 break;
2547
2548 case UNI_IE_CALLED_SOFT:
2549 if (!(cx->pnni))
2550 return (DEC_ILL);
2551 out->called_soft.h = *hdr;
2552 if (hdr->present & UNI_IE_ERROR)
2553 return (DEC_ERR);
2554 if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
2555 return (DEC_ERR);
2556 break;
2557
2558 case UNI_IE_DTL:
2559 if (!(cx->pnni))
2560 return (DEC_ILL);
2561 if (IE_ISPRESENT(cx->repeat))
2562 out->dtl_repeat = cx->repeat;
2563 for(i = 0; i < UNI_NUM_IE_DTL; i++)
2564 if (!IE_ISPRESENT(out->dtl[i])) {
2565 out->dtl[i].h = *hdr;
2566 if (hdr->present & UNI_IE_ERROR)
2567 return (DEC_ERR);
2568 if(uni_decode_ie_body(UNI_IE_DTL, (union uni_ieall *)&out->dtl[i], msg, ielen, cx))
2569 return (DEC_ERR);
2570 break;
2571 }
2572 break;
2573
2574 case UNI_IE_UNREC:
2575 out->unrec.h = *hdr;
2576 if (hdr->present & UNI_IE_ERROR)
2577 return (DEC_ERR);
2578 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2579 return (DEC_ERR);
2580 break;
2581
2582 case UNI_IE_REPEAT:
2583 cx->repeat.h = *hdr;
2584 if (hdr->present & UNI_IE_ERROR)
2585 return (DEC_ERR);
2586 if (uni_decode_ie_body(UNI_IE_REPEAT, (union uni_ieall *)&cx->repeat, msg, ielen, cx))
2587 return (DEC_ERR);
2588 break;
2589
2590 default:
2591 return (DEC_ILL);
2592 }
2593 return (DEC_OK);
2594 }
2595
2596 static const struct msgdecl decl_add_party = {
2597 0,
2598 "add_party",
2599 (uni_msg_print_f)print_add_party,
2600 (uni_msg_check_f)check_add_party,
2601 (uni_msg_encode_f)encode_add_party,
2602 (uni_msg_decode_f)decode_add_party
2603 };
2604
2605 static void
2606 print_add_party_ack(struct uni_add_party_ack *msg, struct unicx *cx)
2607 {
2608 u_int i;
2609
2610 if(msg->epref.h.present & UNI_IE_PRESENT)
2611 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2612 if(msg->aal.h.present & UNI_IE_PRESENT)
2613 uni_print_ie_internal(UNI_IE_AAL, (union uni_ieall *)&msg->aal, cx);
2614 if(msg->blli.h.present & UNI_IE_PRESENT)
2615 uni_print_ie_internal(UNI_IE_BLLI, (union uni_ieall *)&msg->blli, cx);
2616 if(msg->notify.h.present & UNI_IE_PRESENT)
2617 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
2618 if(msg->eetd.h.present & UNI_IE_PRESENT)
2619 uni_print_ie_internal(UNI_IE_EETD, (union uni_ieall *)&msg->eetd, cx);
2620 if(msg->conned.h.present & UNI_IE_PRESENT)
2621 uni_print_ie_internal(UNI_IE_CONNED, (union uni_ieall *)&msg->conned, cx);
2622 if(msg->connedsub.h.present & UNI_IE_PRESENT)
2623 uni_print_ie_internal(UNI_IE_CONNEDSUB, (union uni_ieall *)&msg->connedsub, cx);
2624 if(msg->uu.h.present & UNI_IE_PRESENT)
2625 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2626 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2627 if(msg->git[i].h.present & UNI_IE_PRESENT)
2628 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2629 if(msg->called_soft.h.present & UNI_IE_PRESENT)
2630 uni_print_ie_internal(UNI_IE_CALLED_SOFT, (union uni_ieall *)&msg->called_soft, cx);
2631 if(msg->unrec.h.present & UNI_IE_PRESENT)
2632 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2633 }
2634
2635 static int
2636 check_add_party_ack(struct uni_add_party_ack *m, struct unicx *cx)
2637 {
2638 int ret = 0;
2639 u_int i;
2640
2641 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
2642 ret |= uni_check_ie(UNI_IE_AAL, (union uni_ieall *)&m->aal, cx);
2643 ret |= uni_check_ie(UNI_IE_BLLI, (union uni_ieall *)&m->blli, cx);
2644 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
2645 ret |= uni_check_ie(UNI_IE_EETD, (union uni_ieall *)&m->eetd, cx);
2646 ret |= uni_check_ie(UNI_IE_CONNED, (union uni_ieall *)&m->conned, cx);
2647 ret |= uni_check_ie(UNI_IE_CONNEDSUB, (union uni_ieall *)&m->connedsub, cx);
2648 if(!(!cx->pnni))
2649 ret |= IE_ISPRESENT(m->uu);
2650 else
2651 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
2652 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
2653 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
2654 }
2655 if(!(cx->pnni))
2656 ret |= IE_ISPRESENT(m->called_soft);
2657 else
2658 ret |= uni_check_ie(UNI_IE_CALLED_SOFT, (union uni_ieall *)&m->called_soft, cx);
2659 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2660
2661 return ret;
2662 }
2663
2664 static int
2665 encode_add_party_ack(struct uni_msg *msg, struct uni_add_party_ack *p, struct unicx *cx)
2666 {
2667 u_int mlen;
2668 u_int i;
2669
2670 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ADD_PARTY_ACK, cx, &mlen))
2671 return (-2);
2672
2673 if((p->epref.h.present & UNI_IE_PRESENT) &&
2674 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
2675 return (UNI_IE_EPREF);
2676 if((p->aal.h.present & UNI_IE_PRESENT) &&
2677 uni_encode_ie(UNI_IE_AAL, msg, (union uni_ieall *)&p->aal, cx))
2678 return (UNI_IE_AAL);
2679 if((p->blli.h.present & UNI_IE_PRESENT) &&
2680 uni_encode_ie(UNI_IE_BLLI, msg, (union uni_ieall *)&p->blli, cx))
2681 return (UNI_IE_BLLI);
2682 if((p->notify.h.present & UNI_IE_PRESENT) &&
2683 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
2684 return (UNI_IE_NOTIFY);
2685 if((p->eetd.h.present & UNI_IE_PRESENT) &&
2686 uni_encode_ie(UNI_IE_EETD, msg, (union uni_ieall *)&p->eetd, cx))
2687 return (UNI_IE_EETD);
2688 if((p->conned.h.present & UNI_IE_PRESENT) &&
2689 uni_encode_ie(UNI_IE_CONNED, msg, (union uni_ieall *)&p->conned, cx))
2690 return (UNI_IE_CONNED);
2691 if((p->connedsub.h.present & UNI_IE_PRESENT) &&
2692 uni_encode_ie(UNI_IE_CONNEDSUB, msg, (union uni_ieall *)&p->connedsub, cx))
2693 return (UNI_IE_CONNEDSUB);
2694 if((p->uu.h.present & UNI_IE_PRESENT) &&
2695 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
2696 return (UNI_IE_UU);
2697 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2698 if((p->git[i].h.present & UNI_IE_PRESENT) &&
2699 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
2700 return ((i << 16) + UNI_IE_GIT);
2701 if((p->called_soft.h.present & UNI_IE_PRESENT) &&
2702 uni_encode_ie(UNI_IE_CALLED_SOFT, msg, (union uni_ieall *)&p->called_soft, cx))
2703 return (UNI_IE_CALLED_SOFT);
2704 if((p->unrec.h.present & UNI_IE_PRESENT) &&
2705 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2706 return (UNI_IE_UNREC);
2707
2708 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2709 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2710
2711 return (0);
2712 }
2713
2714 static int
2715 decode_add_party_ack(struct uni_add_party_ack *out, struct uni_msg *msg,
2716 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2717 struct unicx *cx)
2718 {
2719 u_int i;
2720
2721 switch (ie) {
2722
2723 case UNI_IE_EPREF:
2724 out->epref.h = *hdr;
2725 if (hdr->present & UNI_IE_ERROR)
2726 return (DEC_ERR);
2727 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
2728 return (DEC_ERR);
2729 break;
2730
2731 case UNI_IE_AAL:
2732 out->aal.h = *hdr;
2733 if (hdr->present & UNI_IE_ERROR)
2734 return (DEC_ERR);
2735 if(uni_decode_ie_body(UNI_IE_AAL, (union uni_ieall *)&out->aal, msg, ielen, cx))
2736 return (DEC_ERR);
2737 break;
2738
2739 case UNI_IE_BLLI:
2740 out->blli.h = *hdr;
2741 if (hdr->present & UNI_IE_ERROR)
2742 return (DEC_ERR);
2743 if(uni_decode_ie_body(UNI_IE_BLLI, (union uni_ieall *)&out->blli, msg, ielen, cx))
2744 return (DEC_ERR);
2745 break;
2746
2747 case UNI_IE_NOTIFY:
2748 out->notify.h = *hdr;
2749 if (hdr->present & UNI_IE_ERROR)
2750 return (DEC_ERR);
2751 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
2752 return (DEC_ERR);
2753 break;
2754
2755 case UNI_IE_EETD:
2756 out->eetd.h = *hdr;
2757 if (hdr->present & UNI_IE_ERROR)
2758 return (DEC_ERR);
2759 if(uni_decode_ie_body(UNI_IE_EETD, (union uni_ieall *)&out->eetd, msg, ielen, cx))
2760 return (DEC_ERR);
2761 break;
2762
2763 case UNI_IE_CONNED:
2764 out->conned.h = *hdr;
2765 if (hdr->present & UNI_IE_ERROR)
2766 return (DEC_ERR);
2767 if(uni_decode_ie_body(UNI_IE_CONNED, (union uni_ieall *)&out->conned, msg, ielen, cx))
2768 return (DEC_ERR);
2769 break;
2770
2771 case UNI_IE_CONNEDSUB:
2772 out->connedsub.h = *hdr;
2773 if (hdr->present & UNI_IE_ERROR)
2774 return (DEC_ERR);
2775 if(uni_decode_ie_body(UNI_IE_CONNEDSUB, (union uni_ieall *)&out->connedsub, msg, ielen, cx))
2776 return (DEC_ERR);
2777 break;
2778
2779 case UNI_IE_UU:
2780 if (!(!cx->pnni))
2781 return (DEC_ILL);
2782 out->uu.h = *hdr;
2783 if (hdr->present & UNI_IE_ERROR)
2784 return (DEC_ERR);
2785 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
2786 return (DEC_ERR);
2787 break;
2788
2789 case UNI_IE_GIT:
2790 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2791 if (!IE_ISPRESENT(out->git[i])) {
2792 out->git[i].h = *hdr;
2793 if (hdr->present & UNI_IE_ERROR)
2794 return (DEC_ERR);
2795 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
2796 return (DEC_ERR);
2797 break;
2798 }
2799 break;
2800
2801 case UNI_IE_CALLED_SOFT:
2802 if (!(cx->pnni))
2803 return (DEC_ILL);
2804 out->called_soft.h = *hdr;
2805 if (hdr->present & UNI_IE_ERROR)
2806 return (DEC_ERR);
2807 if(uni_decode_ie_body(UNI_IE_CALLED_SOFT, (union uni_ieall *)&out->called_soft, msg, ielen, cx))
2808 return (DEC_ERR);
2809 break;
2810
2811 case UNI_IE_UNREC:
2812 out->unrec.h = *hdr;
2813 if (hdr->present & UNI_IE_ERROR)
2814 return (DEC_ERR);
2815 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2816 return (DEC_ERR);
2817 break;
2818
2819 default:
2820 return (DEC_ILL);
2821 }
2822 return (DEC_OK);
2823 }
2824
2825 static const struct msgdecl decl_add_party_ack = {
2826 0,
2827 "add_party_ack",
2828 (uni_msg_print_f)print_add_party_ack,
2829 (uni_msg_check_f)check_add_party_ack,
2830 (uni_msg_encode_f)encode_add_party_ack,
2831 (uni_msg_decode_f)decode_add_party_ack
2832 };
2833
2834 static void
2835 print_party_alerting(struct uni_party_alerting *msg, struct unicx *cx)
2836 {
2837 u_int i;
2838
2839 if(msg->epref.h.present & UNI_IE_PRESENT)
2840 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2841 if(msg->notify.h.present & UNI_IE_PRESENT)
2842 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
2843 if(msg->uu.h.present & UNI_IE_PRESENT)
2844 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2845 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2846 if(msg->git[i].h.present & UNI_IE_PRESENT)
2847 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2848 if(msg->unrec.h.present & UNI_IE_PRESENT)
2849 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2850 }
2851
2852 static int
2853 check_party_alerting(struct uni_party_alerting *m, struct unicx *cx)
2854 {
2855 int ret = 0;
2856 u_int i;
2857
2858 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
2859 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
2860 if(!(!cx->pnni))
2861 ret |= IE_ISPRESENT(m->uu);
2862 else
2863 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
2864 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
2865 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
2866 }
2867 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
2868
2869 return ret;
2870 }
2871
2872 static int
2873 encode_party_alerting(struct uni_msg *msg, struct uni_party_alerting *p, struct unicx *cx)
2874 {
2875 u_int mlen;
2876 u_int i;
2877
2878 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_PARTY_ALERTING, cx, &mlen))
2879 return (-2);
2880
2881 if((p->epref.h.present & UNI_IE_PRESENT) &&
2882 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
2883 return (UNI_IE_EPREF);
2884 if((p->notify.h.present & UNI_IE_PRESENT) &&
2885 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
2886 return (UNI_IE_NOTIFY);
2887 if((p->uu.h.present & UNI_IE_PRESENT) &&
2888 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
2889 return (UNI_IE_UU);
2890 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2891 if((p->git[i].h.present & UNI_IE_PRESENT) &&
2892 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
2893 return ((i << 16) + UNI_IE_GIT);
2894 if((p->unrec.h.present & UNI_IE_PRESENT) &&
2895 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
2896 return (UNI_IE_UNREC);
2897
2898 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
2899 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
2900
2901 return (0);
2902 }
2903
2904 static int
2905 decode_party_alerting(struct uni_party_alerting *out, struct uni_msg *msg,
2906 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
2907 struct unicx *cx)
2908 {
2909 u_int i;
2910
2911 switch (ie) {
2912
2913 case UNI_IE_EPREF:
2914 out->epref.h = *hdr;
2915 if (hdr->present & UNI_IE_ERROR)
2916 return (DEC_ERR);
2917 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
2918 return (DEC_ERR);
2919 break;
2920
2921 case UNI_IE_NOTIFY:
2922 out->notify.h = *hdr;
2923 if (hdr->present & UNI_IE_ERROR)
2924 return (DEC_ERR);
2925 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
2926 return (DEC_ERR);
2927 break;
2928
2929 case UNI_IE_UU:
2930 if (!(!cx->pnni))
2931 return (DEC_ILL);
2932 out->uu.h = *hdr;
2933 if (hdr->present & UNI_IE_ERROR)
2934 return (DEC_ERR);
2935 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
2936 return (DEC_ERR);
2937 break;
2938
2939 case UNI_IE_GIT:
2940 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2941 if (!IE_ISPRESENT(out->git[i])) {
2942 out->git[i].h = *hdr;
2943 if (hdr->present & UNI_IE_ERROR)
2944 return (DEC_ERR);
2945 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
2946 return (DEC_ERR);
2947 break;
2948 }
2949 break;
2950
2951 case UNI_IE_UNREC:
2952 out->unrec.h = *hdr;
2953 if (hdr->present & UNI_IE_ERROR)
2954 return (DEC_ERR);
2955 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
2956 return (DEC_ERR);
2957 break;
2958
2959 default:
2960 return (DEC_ILL);
2961 }
2962 return (DEC_OK);
2963 }
2964
2965 static const struct msgdecl decl_party_alerting = {
2966 0,
2967 "party_alerting",
2968 (uni_msg_print_f)print_party_alerting,
2969 (uni_msg_check_f)check_party_alerting,
2970 (uni_msg_encode_f)encode_party_alerting,
2971 (uni_msg_decode_f)decode_party_alerting
2972 };
2973
2974 static void
2975 print_add_party_rej(struct uni_add_party_rej *msg, struct unicx *cx)
2976 {
2977 u_int i;
2978
2979 if(msg->cause.h.present & UNI_IE_PRESENT)
2980 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
2981 if(msg->epref.h.present & UNI_IE_PRESENT)
2982 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
2983 if(msg->uu.h.present & UNI_IE_PRESENT)
2984 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
2985 for(i = 0; i < UNI_NUM_IE_GIT; i++)
2986 if(msg->git[i].h.present & UNI_IE_PRESENT)
2987 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
2988 if(msg->crankback.h.present & UNI_IE_PRESENT)
2989 uni_print_ie_internal(UNI_IE_CRANKBACK, (union uni_ieall *)&msg->crankback, cx);
2990 if(msg->unrec.h.present & UNI_IE_PRESENT)
2991 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
2992 }
2993
2994 static int
2995 check_add_party_rej(struct uni_add_party_rej *m, struct unicx *cx)
2996 {
2997 int ret = 0;
2998 u_int i;
2999
3000 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3001 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
3002 if(!(!cx->pnni))
3003 ret |= IE_ISPRESENT(m->uu);
3004 else
3005 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
3006 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
3007 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
3008 }
3009 if(!(cx->pnni))
3010 ret |= IE_ISPRESENT(m->crankback);
3011 else
3012 ret |= uni_check_ie(UNI_IE_CRANKBACK, (union uni_ieall *)&m->crankback, cx);
3013 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3014
3015 return ret;
3016 }
3017
3018 static int
3019 encode_add_party_rej(struct uni_msg *msg, struct uni_add_party_rej *p, struct unicx *cx)
3020 {
3021 u_int mlen;
3022 u_int i;
3023
3024 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_ADD_PARTY_REJ, cx, &mlen))
3025 return (-2);
3026
3027 if((p->cause.h.present & UNI_IE_PRESENT) &&
3028 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3029 return (UNI_IE_CAUSE);
3030 if((p->epref.h.present & UNI_IE_PRESENT) &&
3031 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
3032 return (UNI_IE_EPREF);
3033 if((p->uu.h.present & UNI_IE_PRESENT) &&
3034 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
3035 return (UNI_IE_UU);
3036 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3037 if((p->git[i].h.present & UNI_IE_PRESENT) &&
3038 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
3039 return ((i << 16) + UNI_IE_GIT);
3040 if((p->crankback.h.present & UNI_IE_PRESENT) &&
3041 uni_encode_ie(UNI_IE_CRANKBACK, msg, (union uni_ieall *)&p->crankback, cx))
3042 return (UNI_IE_CRANKBACK);
3043 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3044 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3045 return (UNI_IE_UNREC);
3046
3047 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3048 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3049
3050 return (0);
3051 }
3052
3053 static int
3054 decode_add_party_rej(struct uni_add_party_rej *out, struct uni_msg *msg,
3055 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3056 struct unicx *cx)
3057 {
3058 u_int i;
3059
3060 switch (ie) {
3061
3062 case UNI_IE_CAUSE:
3063 out->cause.h = *hdr;
3064 if (hdr->present & UNI_IE_ERROR)
3065 return (DEC_ERR);
3066 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3067 return (DEC_ERR);
3068 break;
3069
3070 case UNI_IE_EPREF:
3071 out->epref.h = *hdr;
3072 if (hdr->present & UNI_IE_ERROR)
3073 return (DEC_ERR);
3074 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
3075 return (DEC_ERR);
3076 break;
3077
3078 case UNI_IE_UU:
3079 if (!(!cx->pnni))
3080 return (DEC_ILL);
3081 out->uu.h = *hdr;
3082 if (hdr->present & UNI_IE_ERROR)
3083 return (DEC_ERR);
3084 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
3085 return (DEC_ERR);
3086 break;
3087
3088 case UNI_IE_GIT:
3089 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3090 if (!IE_ISPRESENT(out->git[i])) {
3091 out->git[i].h = *hdr;
3092 if (hdr->present & UNI_IE_ERROR)
3093 return (DEC_ERR);
3094 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
3095 return (DEC_ERR);
3096 break;
3097 }
3098 break;
3099
3100 case UNI_IE_CRANKBACK:
3101 if (!(cx->pnni))
3102 return (DEC_ILL);
3103 out->crankback.h = *hdr;
3104 if (hdr->present & UNI_IE_ERROR)
3105 return (DEC_ERR);
3106 if(uni_decode_ie_body(UNI_IE_CRANKBACK, (union uni_ieall *)&out->crankback, msg, ielen, cx))
3107 return (DEC_ERR);
3108 break;
3109
3110 case UNI_IE_UNREC:
3111 out->unrec.h = *hdr;
3112 if (hdr->present & UNI_IE_ERROR)
3113 return (DEC_ERR);
3114 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3115 return (DEC_ERR);
3116 break;
3117
3118 default:
3119 return (DEC_ILL);
3120 }
3121 return (DEC_OK);
3122 }
3123
3124 static const struct msgdecl decl_add_party_rej = {
3125 0,
3126 "add_party_rej",
3127 (uni_msg_print_f)print_add_party_rej,
3128 (uni_msg_check_f)check_add_party_rej,
3129 (uni_msg_encode_f)encode_add_party_rej,
3130 (uni_msg_decode_f)decode_add_party_rej
3131 };
3132
3133 static void
3134 print_drop_party(struct uni_drop_party *msg, struct unicx *cx)
3135 {
3136 u_int i;
3137
3138 if(msg->cause.h.present & UNI_IE_PRESENT)
3139 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
3140 if(msg->epref.h.present & UNI_IE_PRESENT)
3141 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
3142 if(msg->notify.h.present & UNI_IE_PRESENT)
3143 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
3144 if(msg->uu.h.present & UNI_IE_PRESENT)
3145 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
3146 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3147 if(msg->git[i].h.present & UNI_IE_PRESENT)
3148 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
3149 if(msg->unrec.h.present & UNI_IE_PRESENT)
3150 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3151 }
3152
3153 static int
3154 check_drop_party(struct uni_drop_party *m, struct unicx *cx)
3155 {
3156 int ret = 0;
3157 u_int i;
3158
3159 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3160 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
3161 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
3162 if(!(!cx->pnni))
3163 ret |= IE_ISPRESENT(m->uu);
3164 else
3165 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
3166 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
3167 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
3168 }
3169 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3170
3171 return ret;
3172 }
3173
3174 static int
3175 encode_drop_party(struct uni_msg *msg, struct uni_drop_party *p, struct unicx *cx)
3176 {
3177 u_int mlen;
3178 u_int i;
3179
3180 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_DROP_PARTY, cx, &mlen))
3181 return (-2);
3182
3183 if((p->cause.h.present & UNI_IE_PRESENT) &&
3184 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3185 return (UNI_IE_CAUSE);
3186 if((p->epref.h.present & UNI_IE_PRESENT) &&
3187 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
3188 return (UNI_IE_EPREF);
3189 if((p->notify.h.present & UNI_IE_PRESENT) &&
3190 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
3191 return (UNI_IE_NOTIFY);
3192 if((p->uu.h.present & UNI_IE_PRESENT) &&
3193 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
3194 return (UNI_IE_UU);
3195 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3196 if((p->git[i].h.present & UNI_IE_PRESENT) &&
3197 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
3198 return ((i << 16) + UNI_IE_GIT);
3199 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3200 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3201 return (UNI_IE_UNREC);
3202
3203 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3204 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3205
3206 return (0);
3207 }
3208
3209 static int
3210 decode_drop_party(struct uni_drop_party *out, struct uni_msg *msg,
3211 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3212 struct unicx *cx)
3213 {
3214 u_int i;
3215
3216 switch (ie) {
3217
3218 case UNI_IE_CAUSE:
3219 out->cause.h = *hdr;
3220 if (hdr->present & UNI_IE_ERROR)
3221 return (DEC_ERR);
3222 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3223 return (DEC_ERR);
3224 break;
3225
3226 case UNI_IE_EPREF:
3227 out->epref.h = *hdr;
3228 if (hdr->present & UNI_IE_ERROR)
3229 return (DEC_ERR);
3230 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
3231 return (DEC_ERR);
3232 break;
3233
3234 case UNI_IE_NOTIFY:
3235 out->notify.h = *hdr;
3236 if (hdr->present & UNI_IE_ERROR)
3237 return (DEC_ERR);
3238 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
3239 return (DEC_ERR);
3240 break;
3241
3242 case UNI_IE_UU:
3243 if (!(!cx->pnni))
3244 return (DEC_ILL);
3245 out->uu.h = *hdr;
3246 if (hdr->present & UNI_IE_ERROR)
3247 return (DEC_ERR);
3248 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
3249 return (DEC_ERR);
3250 break;
3251
3252 case UNI_IE_GIT:
3253 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3254 if (!IE_ISPRESENT(out->git[i])) {
3255 out->git[i].h = *hdr;
3256 if (hdr->present & UNI_IE_ERROR)
3257 return (DEC_ERR);
3258 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
3259 return (DEC_ERR);
3260 break;
3261 }
3262 break;
3263
3264 case UNI_IE_UNREC:
3265 out->unrec.h = *hdr;
3266 if (hdr->present & UNI_IE_ERROR)
3267 return (DEC_ERR);
3268 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3269 return (DEC_ERR);
3270 break;
3271
3272 default:
3273 return (DEC_ILL);
3274 }
3275 return (DEC_OK);
3276 }
3277
3278 static const struct msgdecl decl_drop_party = {
3279 0,
3280 "drop_party",
3281 (uni_msg_print_f)print_drop_party,
3282 (uni_msg_check_f)check_drop_party,
3283 (uni_msg_encode_f)encode_drop_party,
3284 (uni_msg_decode_f)decode_drop_party
3285 };
3286
3287 static void
3288 print_drop_party_ack(struct uni_drop_party_ack *msg, struct unicx *cx)
3289 {
3290 u_int i;
3291
3292 if(msg->epref.h.present & UNI_IE_PRESENT)
3293 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
3294 if(msg->cause.h.present & UNI_IE_PRESENT)
3295 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
3296 if(msg->uu.h.present & UNI_IE_PRESENT)
3297 uni_print_ie_internal(UNI_IE_UU, (union uni_ieall *)&msg->uu, cx);
3298 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3299 if(msg->git[i].h.present & UNI_IE_PRESENT)
3300 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
3301 if(msg->unrec.h.present & UNI_IE_PRESENT)
3302 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3303 }
3304
3305 static int
3306 check_drop_party_ack(struct uni_drop_party_ack *m, struct unicx *cx)
3307 {
3308 int ret = 0;
3309 u_int i;
3310
3311 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
3312 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3313 if(!(!cx->pnni))
3314 ret |= IE_ISPRESENT(m->uu);
3315 else
3316 ret |= uni_check_ie(UNI_IE_UU, (union uni_ieall *)&m->uu, cx);
3317 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
3318 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
3319 }
3320 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3321
3322 return ret;
3323 }
3324
3325 static int
3326 encode_drop_party_ack(struct uni_msg *msg, struct uni_drop_party_ack *p, struct unicx *cx)
3327 {
3328 u_int mlen;
3329 u_int i;
3330
3331 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_DROP_PARTY_ACK, cx, &mlen))
3332 return (-2);
3333
3334 if((p->epref.h.present & UNI_IE_PRESENT) &&
3335 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
3336 return (UNI_IE_EPREF);
3337 if((p->cause.h.present & UNI_IE_PRESENT) &&
3338 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3339 return (UNI_IE_CAUSE);
3340 if((p->uu.h.present & UNI_IE_PRESENT) &&
3341 uni_encode_ie(UNI_IE_UU, msg, (union uni_ieall *)&p->uu, cx))
3342 return (UNI_IE_UU);
3343 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3344 if((p->git[i].h.present & UNI_IE_PRESENT) &&
3345 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
3346 return ((i << 16) + UNI_IE_GIT);
3347 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3348 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3349 return (UNI_IE_UNREC);
3350
3351 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3352 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3353
3354 return (0);
3355 }
3356
3357 static int
3358 decode_drop_party_ack(struct uni_drop_party_ack *out, struct uni_msg *msg,
3359 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3360 struct unicx *cx)
3361 {
3362 u_int i;
3363
3364 switch (ie) {
3365
3366 case UNI_IE_EPREF:
3367 out->epref.h = *hdr;
3368 if (hdr->present & UNI_IE_ERROR)
3369 return (DEC_ERR);
3370 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
3371 return (DEC_ERR);
3372 break;
3373
3374 case UNI_IE_CAUSE:
3375 out->cause.h = *hdr;
3376 if (hdr->present & UNI_IE_ERROR)
3377 return (DEC_ERR);
3378 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3379 return (DEC_ERR);
3380 break;
3381
3382 case UNI_IE_UU:
3383 if (!(!cx->pnni))
3384 return (DEC_ILL);
3385 out->uu.h = *hdr;
3386 if (hdr->present & UNI_IE_ERROR)
3387 return (DEC_ERR);
3388 if(uni_decode_ie_body(UNI_IE_UU, (union uni_ieall *)&out->uu, msg, ielen, cx))
3389 return (DEC_ERR);
3390 break;
3391
3392 case UNI_IE_GIT:
3393 for(i = 0; i < UNI_NUM_IE_GIT; i++)
3394 if (!IE_ISPRESENT(out->git[i])) {
3395 out->git[i].h = *hdr;
3396 if (hdr->present & UNI_IE_ERROR)
3397 return (DEC_ERR);
3398 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
3399 return (DEC_ERR);
3400 break;
3401 }
3402 break;
3403
3404 case UNI_IE_UNREC:
3405 out->unrec.h = *hdr;
3406 if (hdr->present & UNI_IE_ERROR)
3407 return (DEC_ERR);
3408 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3409 return (DEC_ERR);
3410 break;
3411
3412 default:
3413 return (DEC_ILL);
3414 }
3415 return (DEC_OK);
3416 }
3417
3418 static const struct msgdecl decl_drop_party_ack = {
3419 0,
3420 "drop_party_ack",
3421 (uni_msg_print_f)print_drop_party_ack,
3422 (uni_msg_check_f)check_drop_party_ack,
3423 (uni_msg_encode_f)encode_drop_party_ack,
3424 (uni_msg_decode_f)decode_drop_party_ack
3425 };
3426
3427 static void
3428 print_leaf_setup_req(struct uni_leaf_setup_req *msg, struct unicx *cx)
3429 {
3430 u_int i;
3431
3432 for(i = 0; i < UNI_NUM_IE_TNS; i++)
3433 if(msg->tns[i].h.present & UNI_IE_PRESENT)
3434 uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
3435 if(msg->calling.h.present & UNI_IE_PRESENT)
3436 uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
3437 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
3438 if(msg->callingsub[i].h.present & UNI_IE_PRESENT)
3439 uni_print_ie_internal(UNI_IE_CALLINGSUB, (union uni_ieall *)&msg->callingsub[i], cx);
3440 if(msg->called.h.present & UNI_IE_PRESENT)
3441 uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3442 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
3443 if(msg->calledsub[i].h.present & UNI_IE_PRESENT)
3444 uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub[i], cx);
3445 if(msg->lij_callid.h.present & UNI_IE_PRESENT)
3446 uni_print_ie_internal(UNI_IE_LIJ_CALLID, (union uni_ieall *)&msg->lij_callid, cx);
3447 if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
3448 uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
3449 if(msg->unrec.h.present & UNI_IE_PRESENT)
3450 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3451 }
3452
3453 static int
3454 check_leaf_setup_req(struct uni_leaf_setup_req *m, struct unicx *cx)
3455 {
3456 int ret = 0;
3457 u_int i;
3458
3459 for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
3460 ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
3461 }
3462 ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
3463 for(i = 0; i < UNI_NUM_IE_CALLINGSUB ; i++) {
3464 ret |= uni_check_ie(UNI_IE_CALLINGSUB, (union uni_ieall *)&m->callingsub[i], cx);
3465 }
3466 ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3467 for(i = 0; i < UNI_NUM_IE_CALLEDSUB ; i++) {
3468 ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub[i], cx);
3469 }
3470 ret |= uni_check_ie(UNI_IE_LIJ_CALLID, (union uni_ieall *)&m->lij_callid, cx);
3471 ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
3472 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3473
3474 return ret;
3475 }
3476
3477 static int
3478 encode_leaf_setup_req(struct uni_msg *msg, struct uni_leaf_setup_req *p, struct unicx *cx)
3479 {
3480 u_int mlen;
3481 u_int i;
3482
3483 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_LEAF_SETUP_REQ, cx, &mlen))
3484 return (-2);
3485
3486 for(i = 0; i < UNI_NUM_IE_TNS; i++)
3487 if((p->tns[i].h.present & UNI_IE_PRESENT) &&
3488 uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
3489 return ((i << 16) + UNI_IE_TNS);
3490 if((p->calling.h.present & UNI_IE_PRESENT) &&
3491 uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
3492 return (UNI_IE_CALLING);
3493 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
3494 if((p->callingsub[i].h.present & UNI_IE_PRESENT) &&
3495 uni_encode_ie(UNI_IE_CALLINGSUB, msg, (union uni_ieall *)&p->callingsub[i], cx))
3496 return ((i << 16) + UNI_IE_CALLINGSUB);
3497 if((p->called.h.present & UNI_IE_PRESENT) &&
3498 uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3499 return (UNI_IE_CALLED);
3500 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
3501 if((p->calledsub[i].h.present & UNI_IE_PRESENT) &&
3502 uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub[i], cx))
3503 return ((i << 16) + UNI_IE_CALLEDSUB);
3504 if((p->lij_callid.h.present & UNI_IE_PRESENT) &&
3505 uni_encode_ie(UNI_IE_LIJ_CALLID, msg, (union uni_ieall *)&p->lij_callid, cx))
3506 return (UNI_IE_LIJ_CALLID);
3507 if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
3508 uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
3509 return (UNI_IE_LIJ_SEQNO);
3510 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3511 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3512 return (UNI_IE_UNREC);
3513
3514 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3515 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3516
3517 return (0);
3518 }
3519
3520 static int
3521 decode_leaf_setup_req(struct uni_leaf_setup_req *out, struct uni_msg *msg,
3522 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3523 struct unicx *cx)
3524 {
3525 u_int i;
3526
3527 switch (ie) {
3528
3529 case UNI_IE_TNS:
3530 for(i = 0; i < UNI_NUM_IE_TNS; i++)
3531 if (!IE_ISPRESENT(out->tns[i])) {
3532 out->tns[i].h = *hdr;
3533 if (hdr->present & UNI_IE_ERROR)
3534 return (DEC_ERR);
3535 if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
3536 return (DEC_ERR);
3537 break;
3538 }
3539 break;
3540
3541 case UNI_IE_CALLING:
3542 out->calling.h = *hdr;
3543 if (hdr->present & UNI_IE_ERROR)
3544 return (DEC_ERR);
3545 if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
3546 return (DEC_ERR);
3547 break;
3548
3549 case UNI_IE_CALLINGSUB:
3550 for(i = 0; i < UNI_NUM_IE_CALLINGSUB; i++)
3551 if (!IE_ISPRESENT(out->callingsub[i])) {
3552 out->callingsub[i].h = *hdr;
3553 if (hdr->present & UNI_IE_ERROR)
3554 return (DEC_ERR);
3555 if(uni_decode_ie_body(UNI_IE_CALLINGSUB, (union uni_ieall *)&out->callingsub[i], msg, ielen, cx))
3556 return (DEC_ERR);
3557 break;
3558 }
3559 break;
3560
3561 case UNI_IE_CALLED:
3562 out->called.h = *hdr;
3563 if (hdr->present & UNI_IE_ERROR)
3564 return (DEC_ERR);
3565 if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3566 return (DEC_ERR);
3567 break;
3568
3569 case UNI_IE_CALLEDSUB:
3570 for(i = 0; i < UNI_NUM_IE_CALLEDSUB; i++)
3571 if (!IE_ISPRESENT(out->calledsub[i])) {
3572 out->calledsub[i].h = *hdr;
3573 if (hdr->present & UNI_IE_ERROR)
3574 return (DEC_ERR);
3575 if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub[i], msg, ielen, cx))
3576 return (DEC_ERR);
3577 break;
3578 }
3579 break;
3580
3581 case UNI_IE_LIJ_CALLID:
3582 out->lij_callid.h = *hdr;
3583 if (hdr->present & UNI_IE_ERROR)
3584 return (DEC_ERR);
3585 if(uni_decode_ie_body(UNI_IE_LIJ_CALLID, (union uni_ieall *)&out->lij_callid, msg, ielen, cx))
3586 return (DEC_ERR);
3587 break;
3588
3589 case UNI_IE_LIJ_SEQNO:
3590 out->lij_seqno.h = *hdr;
3591 if (hdr->present & UNI_IE_ERROR)
3592 return (DEC_ERR);
3593 if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
3594 return (DEC_ERR);
3595 break;
3596
3597 case UNI_IE_UNREC:
3598 out->unrec.h = *hdr;
3599 if (hdr->present & UNI_IE_ERROR)
3600 return (DEC_ERR);
3601 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3602 return (DEC_ERR);
3603 break;
3604
3605 default:
3606 return (DEC_ILL);
3607 }
3608 return (DEC_OK);
3609 }
3610
3611 static const struct msgdecl decl_leaf_setup_req = {
3612 0,
3613 "leaf_setup_req",
3614 (uni_msg_print_f)print_leaf_setup_req,
3615 (uni_msg_check_f)check_leaf_setup_req,
3616 (uni_msg_encode_f)encode_leaf_setup_req,
3617 (uni_msg_decode_f)decode_leaf_setup_req
3618 };
3619
3620 static void
3621 print_leaf_setup_fail(struct uni_leaf_setup_fail *msg, struct unicx *cx)
3622 {
3623 u_int i;
3624
3625 if(msg->cause.h.present & UNI_IE_PRESENT)
3626 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
3627 if(msg->called.h.present & UNI_IE_PRESENT)
3628 uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3629 if(msg->calledsub.h.present & UNI_IE_PRESENT)
3630 uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub, cx);
3631 if(msg->lij_seqno.h.present & UNI_IE_PRESENT)
3632 uni_print_ie_internal(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&msg->lij_seqno, cx);
3633 for(i = 0; i < UNI_NUM_IE_TNS; i++)
3634 if(msg->tns[i].h.present & UNI_IE_PRESENT)
3635 uni_print_ie_internal(UNI_IE_TNS, (union uni_ieall *)&msg->tns[i], cx);
3636 if(msg->unrec.h.present & UNI_IE_PRESENT)
3637 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3638 }
3639
3640 static int
3641 check_leaf_setup_fail(struct uni_leaf_setup_fail *m, struct unicx *cx)
3642 {
3643 int ret = 0;
3644 u_int i;
3645
3646 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
3647 ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3648 ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub, cx);
3649 ret |= uni_check_ie(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&m->lij_seqno, cx);
3650 for(i = 0; i < UNI_NUM_IE_TNS ; i++) {
3651 ret |= uni_check_ie(UNI_IE_TNS, (union uni_ieall *)&m->tns[i], cx);
3652 }
3653 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3654
3655 return ret;
3656 }
3657
3658 static int
3659 encode_leaf_setup_fail(struct uni_msg *msg, struct uni_leaf_setup_fail *p, struct unicx *cx)
3660 {
3661 u_int mlen;
3662 u_int i;
3663
3664 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_LEAF_SETUP_FAIL, cx, &mlen))
3665 return (-2);
3666
3667 if((p->cause.h.present & UNI_IE_PRESENT) &&
3668 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
3669 return (UNI_IE_CAUSE);
3670 if((p->called.h.present & UNI_IE_PRESENT) &&
3671 uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3672 return (UNI_IE_CALLED);
3673 if((p->calledsub.h.present & UNI_IE_PRESENT) &&
3674 uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub, cx))
3675 return (UNI_IE_CALLEDSUB);
3676 if((p->lij_seqno.h.present & UNI_IE_PRESENT) &&
3677 uni_encode_ie(UNI_IE_LIJ_SEQNO, msg, (union uni_ieall *)&p->lij_seqno, cx))
3678 return (UNI_IE_LIJ_SEQNO);
3679 for(i = 0; i < UNI_NUM_IE_TNS; i++)
3680 if((p->tns[i].h.present & UNI_IE_PRESENT) &&
3681 uni_encode_ie(UNI_IE_TNS, msg, (union uni_ieall *)&p->tns[i], cx))
3682 return ((i << 16) + UNI_IE_TNS);
3683 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3684 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3685 return (UNI_IE_UNREC);
3686
3687 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3688 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3689
3690 return (0);
3691 }
3692
3693 static int
3694 decode_leaf_setup_fail(struct uni_leaf_setup_fail *out, struct uni_msg *msg,
3695 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3696 struct unicx *cx)
3697 {
3698 u_int i;
3699
3700 switch (ie) {
3701
3702 case UNI_IE_CAUSE:
3703 out->cause.h = *hdr;
3704 if (hdr->present & UNI_IE_ERROR)
3705 return (DEC_ERR);
3706 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
3707 return (DEC_ERR);
3708 break;
3709
3710 case UNI_IE_CALLED:
3711 out->called.h = *hdr;
3712 if (hdr->present & UNI_IE_ERROR)
3713 return (DEC_ERR);
3714 if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3715 return (DEC_ERR);
3716 break;
3717
3718 case UNI_IE_CALLEDSUB:
3719 out->calledsub.h = *hdr;
3720 if (hdr->present & UNI_IE_ERROR)
3721 return (DEC_ERR);
3722 if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub, msg, ielen, cx))
3723 return (DEC_ERR);
3724 break;
3725
3726 case UNI_IE_LIJ_SEQNO:
3727 out->lij_seqno.h = *hdr;
3728 if (hdr->present & UNI_IE_ERROR)
3729 return (DEC_ERR);
3730 if(uni_decode_ie_body(UNI_IE_LIJ_SEQNO, (union uni_ieall *)&out->lij_seqno, msg, ielen, cx))
3731 return (DEC_ERR);
3732 break;
3733
3734 case UNI_IE_TNS:
3735 for(i = 0; i < UNI_NUM_IE_TNS; i++)
3736 if (!IE_ISPRESENT(out->tns[i])) {
3737 out->tns[i].h = *hdr;
3738 if (hdr->present & UNI_IE_ERROR)
3739 return (DEC_ERR);
3740 if(uni_decode_ie_body(UNI_IE_TNS, (union uni_ieall *)&out->tns[i], msg, ielen, cx))
3741 return (DEC_ERR);
3742 break;
3743 }
3744 break;
3745
3746 case UNI_IE_UNREC:
3747 out->unrec.h = *hdr;
3748 if (hdr->present & UNI_IE_ERROR)
3749 return (DEC_ERR);
3750 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3751 return (DEC_ERR);
3752 break;
3753
3754 default:
3755 return (DEC_ILL);
3756 }
3757 return (DEC_OK);
3758 }
3759
3760 static const struct msgdecl decl_leaf_setup_fail = {
3761 0,
3762 "leaf_setup_fail",
3763 (uni_msg_print_f)print_leaf_setup_fail,
3764 (uni_msg_check_f)check_leaf_setup_fail,
3765 (uni_msg_encode_f)encode_leaf_setup_fail,
3766 (uni_msg_decode_f)decode_leaf_setup_fail
3767 };
3768
3769 static void
3770 print_cobisetup(struct uni_cobisetup *msg, struct unicx *cx)
3771 {
3772 if(msg->facility.h.present & UNI_IE_PRESENT)
3773 uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
3774 if(msg->called.h.present & UNI_IE_PRESENT)
3775 uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3776 if(msg->calledsub.h.present & UNI_IE_PRESENT)
3777 uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub, cx);
3778 if(msg->calling.h.present & UNI_IE_PRESENT)
3779 uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
3780 if(msg->notify.h.present & UNI_IE_PRESENT)
3781 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
3782 if(msg->unrec.h.present & UNI_IE_PRESENT)
3783 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3784 }
3785
3786 static int
3787 check_cobisetup(struct uni_cobisetup *m, struct unicx *cx)
3788 {
3789 int ret = 0;
3790
3791 ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
3792 ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3793 ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub, cx);
3794 ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
3795 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
3796 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3797
3798 return ret;
3799 }
3800
3801 static int
3802 encode_cobisetup(struct uni_msg *msg, struct uni_cobisetup *p, struct unicx *cx)
3803 {
3804 u_int mlen;
3805
3806 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_COBISETUP, cx, &mlen))
3807 return (-2);
3808
3809 if((p->facility.h.present & UNI_IE_PRESENT) &&
3810 uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
3811 return (UNI_IE_FACILITY);
3812 if((p->called.h.present & UNI_IE_PRESENT) &&
3813 uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3814 return (UNI_IE_CALLED);
3815 if((p->calledsub.h.present & UNI_IE_PRESENT) &&
3816 uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub, cx))
3817 return (UNI_IE_CALLEDSUB);
3818 if((p->calling.h.present & UNI_IE_PRESENT) &&
3819 uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
3820 return (UNI_IE_CALLING);
3821 if((p->notify.h.present & UNI_IE_PRESENT) &&
3822 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
3823 return (UNI_IE_NOTIFY);
3824 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3825 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3826 return (UNI_IE_UNREC);
3827
3828 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3829 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3830
3831 return (0);
3832 }
3833
3834 static int
3835 decode_cobisetup(struct uni_cobisetup *out, struct uni_msg *msg,
3836 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3837 struct unicx *cx)
3838 {
3839 switch (ie) {
3840
3841 case UNI_IE_FACILITY:
3842 out->facility.h = *hdr;
3843 if (hdr->present & UNI_IE_ERROR)
3844 return (DEC_ERR);
3845 if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
3846 return (DEC_ERR);
3847 break;
3848
3849 case UNI_IE_CALLED:
3850 out->called.h = *hdr;
3851 if (hdr->present & UNI_IE_ERROR)
3852 return (DEC_ERR);
3853 if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3854 return (DEC_ERR);
3855 break;
3856
3857 case UNI_IE_CALLEDSUB:
3858 out->calledsub.h = *hdr;
3859 if (hdr->present & UNI_IE_ERROR)
3860 return (DEC_ERR);
3861 if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub, msg, ielen, cx))
3862 return (DEC_ERR);
3863 break;
3864
3865 case UNI_IE_CALLING:
3866 out->calling.h = *hdr;
3867 if (hdr->present & UNI_IE_ERROR)
3868 return (DEC_ERR);
3869 if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
3870 return (DEC_ERR);
3871 break;
3872
3873 case UNI_IE_NOTIFY:
3874 out->notify.h = *hdr;
3875 if (hdr->present & UNI_IE_ERROR)
3876 return (DEC_ERR);
3877 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
3878 return (DEC_ERR);
3879 break;
3880
3881 case UNI_IE_UNREC:
3882 out->unrec.h = *hdr;
3883 if (hdr->present & UNI_IE_ERROR)
3884 return (DEC_ERR);
3885 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
3886 return (DEC_ERR);
3887 break;
3888
3889 default:
3890 return (DEC_ILL);
3891 }
3892 return (DEC_OK);
3893 }
3894
3895 static const struct msgdecl decl_cobisetup = {
3896 0,
3897 "cobisetup",
3898 (uni_msg_print_f)print_cobisetup,
3899 (uni_msg_check_f)check_cobisetup,
3900 (uni_msg_encode_f)encode_cobisetup,
3901 (uni_msg_decode_f)decode_cobisetup
3902 };
3903
3904 static void
3905 print_facility(struct uni_facility *msg, struct unicx *cx)
3906 {
3907 if(msg->facility.h.present & UNI_IE_PRESENT)
3908 uni_print_ie_internal(UNI_IE_FACILITY, (union uni_ieall *)&msg->facility, cx);
3909 if(msg->called.h.present & UNI_IE_PRESENT)
3910 uni_print_ie_internal(UNI_IE_CALLED, (union uni_ieall *)&msg->called, cx);
3911 if(msg->calledsub.h.present & UNI_IE_PRESENT)
3912 uni_print_ie_internal(UNI_IE_CALLEDSUB, (union uni_ieall *)&msg->calledsub, cx);
3913 if(msg->calling.h.present & UNI_IE_PRESENT)
3914 uni_print_ie_internal(UNI_IE_CALLING, (union uni_ieall *)&msg->calling, cx);
3915 if(msg->notify.h.present & UNI_IE_PRESENT)
3916 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
3917 if(msg->unrec.h.present & UNI_IE_PRESENT)
3918 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
3919 }
3920
3921 static int
3922 check_facility(struct uni_facility *m, struct unicx *cx)
3923 {
3924 int ret = 0;
3925
3926 ret |= uni_check_ie(UNI_IE_FACILITY, (union uni_ieall *)&m->facility, cx);
3927 ret |= uni_check_ie(UNI_IE_CALLED, (union uni_ieall *)&m->called, cx);
3928 ret |= uni_check_ie(UNI_IE_CALLEDSUB, (union uni_ieall *)&m->calledsub, cx);
3929 ret |= uni_check_ie(UNI_IE_CALLING, (union uni_ieall *)&m->calling, cx);
3930 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
3931 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
3932
3933 return ret;
3934 }
3935
3936 static int
3937 encode_facility(struct uni_msg *msg, struct uni_facility *p, struct unicx *cx)
3938 {
3939 u_int mlen;
3940
3941 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_FACILITY, cx, &mlen))
3942 return (-2);
3943
3944 if((p->facility.h.present & UNI_IE_PRESENT) &&
3945 uni_encode_ie(UNI_IE_FACILITY, msg, (union uni_ieall *)&p->facility, cx))
3946 return (UNI_IE_FACILITY);
3947 if((p->called.h.present & UNI_IE_PRESENT) &&
3948 uni_encode_ie(UNI_IE_CALLED, msg, (union uni_ieall *)&p->called, cx))
3949 return (UNI_IE_CALLED);
3950 if((p->calledsub.h.present & UNI_IE_PRESENT) &&
3951 uni_encode_ie(UNI_IE_CALLEDSUB, msg, (union uni_ieall *)&p->calledsub, cx))
3952 return (UNI_IE_CALLEDSUB);
3953 if((p->calling.h.present & UNI_IE_PRESENT) &&
3954 uni_encode_ie(UNI_IE_CALLING, msg, (union uni_ieall *)&p->calling, cx))
3955 return (UNI_IE_CALLING);
3956 if((p->notify.h.present & UNI_IE_PRESENT) &&
3957 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
3958 return (UNI_IE_NOTIFY);
3959 if((p->unrec.h.present & UNI_IE_PRESENT) &&
3960 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
3961 return (UNI_IE_UNREC);
3962
3963 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
3964 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
3965
3966 return (0);
3967 }
3968
3969 static int
3970 decode_facility(struct uni_facility *out, struct uni_msg *msg,
3971 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
3972 struct unicx *cx)
3973 {
3974 switch (ie) {
3975
3976 case UNI_IE_FACILITY:
3977 out->facility.h = *hdr;
3978 if (hdr->present & UNI_IE_ERROR)
3979 return (DEC_ERR);
3980 if(uni_decode_ie_body(UNI_IE_FACILITY, (union uni_ieall *)&out->facility, msg, ielen, cx))
3981 return (DEC_ERR);
3982 break;
3983
3984 case UNI_IE_CALLED:
3985 out->called.h = *hdr;
3986 if (hdr->present & UNI_IE_ERROR)
3987 return (DEC_ERR);
3988 if(uni_decode_ie_body(UNI_IE_CALLED, (union uni_ieall *)&out->called, msg, ielen, cx))
3989 return (DEC_ERR);
3990 break;
3991
3992 case UNI_IE_CALLEDSUB:
3993 out->calledsub.h = *hdr;
3994 if (hdr->present & UNI_IE_ERROR)
3995 return (DEC_ERR);
3996 if(uni_decode_ie_body(UNI_IE_CALLEDSUB, (union uni_ieall *)&out->calledsub, msg, ielen, cx))
3997 return (DEC_ERR);
3998 break;
3999
4000 case UNI_IE_CALLING:
4001 out->calling.h = *hdr;
4002 if (hdr->present & UNI_IE_ERROR)
4003 return (DEC_ERR);
4004 if(uni_decode_ie_body(UNI_IE_CALLING, (union uni_ieall *)&out->calling, msg, ielen, cx))
4005 return (DEC_ERR);
4006 break;
4007
4008 case UNI_IE_NOTIFY:
4009 out->notify.h = *hdr;
4010 if (hdr->present & UNI_IE_ERROR)
4011 return (DEC_ERR);
4012 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4013 return (DEC_ERR);
4014 break;
4015
4016 case UNI_IE_UNREC:
4017 out->unrec.h = *hdr;
4018 if (hdr->present & UNI_IE_ERROR)
4019 return (DEC_ERR);
4020 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4021 return (DEC_ERR);
4022 break;
4023
4024 default:
4025 return (DEC_ILL);
4026 }
4027 return (DEC_OK);
4028 }
4029
4030 static const struct msgdecl decl_facility = {
4031 0,
4032 "facility",
4033 (uni_msg_print_f)print_facility,
4034 (uni_msg_check_f)check_facility,
4035 (uni_msg_encode_f)encode_facility,
4036 (uni_msg_decode_f)decode_facility
4037 };
4038
4039 static void
4040 print_modify_req(struct uni_modify_req *msg, struct unicx *cx)
4041 {
4042 u_int i;
4043
4044 if(msg->traffic.h.present & UNI_IE_PRESENT)
4045 uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
4046 if(msg->atraffic.h.present & UNI_IE_PRESENT)
4047 uni_print_ie_internal(UNI_IE_ATRAFFIC, (union uni_ieall *)&msg->atraffic, cx);
4048 if(msg->mintraffic.h.present & UNI_IE_PRESENT)
4049 uni_print_ie_internal(UNI_IE_MINTRAFFIC, (union uni_ieall *)&msg->mintraffic, cx);
4050 if(msg->notify.h.present & UNI_IE_PRESENT)
4051 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4052 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4053 if(msg->git[i].h.present & UNI_IE_PRESENT)
4054 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4055 if(msg->unrec.h.present & UNI_IE_PRESENT)
4056 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4057 }
4058
4059 static int
4060 check_modify_req(struct uni_modify_req *m, struct unicx *cx)
4061 {
4062 int ret = 0;
4063 u_int i;
4064
4065 ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
4066 ret |= uni_check_ie(UNI_IE_ATRAFFIC, (union uni_ieall *)&m->atraffic, cx);
4067 ret |= uni_check_ie(UNI_IE_MINTRAFFIC, (union uni_ieall *)&m->mintraffic, cx);
4068 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4069 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4070 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4071 }
4072 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4073
4074 return ret;
4075 }
4076
4077 static int
4078 encode_modify_req(struct uni_msg *msg, struct uni_modify_req *p, struct unicx *cx)
4079 {
4080 u_int mlen;
4081 u_int i;
4082
4083 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_MODIFY_REQ, cx, &mlen))
4084 return (-2);
4085
4086 if((p->traffic.h.present & UNI_IE_PRESENT) &&
4087 uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
4088 return (UNI_IE_TRAFFIC);
4089 if((p->atraffic.h.present & UNI_IE_PRESENT) &&
4090 uni_encode_ie(UNI_IE_ATRAFFIC, msg, (union uni_ieall *)&p->atraffic, cx))
4091 return (UNI_IE_ATRAFFIC);
4092 if((p->mintraffic.h.present & UNI_IE_PRESENT) &&
4093 uni_encode_ie(UNI_IE_MINTRAFFIC, msg, (union uni_ieall *)&p->mintraffic, cx))
4094 return (UNI_IE_MINTRAFFIC);
4095 if((p->notify.h.present & UNI_IE_PRESENT) &&
4096 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4097 return (UNI_IE_NOTIFY);
4098 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4099 if((p->git[i].h.present & UNI_IE_PRESENT) &&
4100 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4101 return ((i << 16) + UNI_IE_GIT);
4102 if((p->unrec.h.present & UNI_IE_PRESENT) &&
4103 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4104 return (UNI_IE_UNREC);
4105
4106 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4107 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4108
4109 return (0);
4110 }
4111
4112 static int
4113 decode_modify_req(struct uni_modify_req *out, struct uni_msg *msg,
4114 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4115 struct unicx *cx)
4116 {
4117 u_int i;
4118
4119 switch (ie) {
4120
4121 case UNI_IE_TRAFFIC:
4122 out->traffic.h = *hdr;
4123 if (hdr->present & UNI_IE_ERROR)
4124 return (DEC_ERR);
4125 if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
4126 return (DEC_ERR);
4127 break;
4128
4129 case UNI_IE_ATRAFFIC:
4130 out->atraffic.h = *hdr;
4131 if (hdr->present & UNI_IE_ERROR)
4132 return (DEC_ERR);
4133 if(uni_decode_ie_body(UNI_IE_ATRAFFIC, (union uni_ieall *)&out->atraffic, msg, ielen, cx))
4134 return (DEC_ERR);
4135 break;
4136
4137 case UNI_IE_MINTRAFFIC:
4138 out->mintraffic.h = *hdr;
4139 if (hdr->present & UNI_IE_ERROR)
4140 return (DEC_ERR);
4141 if(uni_decode_ie_body(UNI_IE_MINTRAFFIC, (union uni_ieall *)&out->mintraffic, msg, ielen, cx))
4142 return (DEC_ERR);
4143 break;
4144
4145 case UNI_IE_NOTIFY:
4146 out->notify.h = *hdr;
4147 if (hdr->present & UNI_IE_ERROR)
4148 return (DEC_ERR);
4149 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4150 return (DEC_ERR);
4151 break;
4152
4153 case UNI_IE_GIT:
4154 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4155 if (!IE_ISPRESENT(out->git[i])) {
4156 out->git[i].h = *hdr;
4157 if (hdr->present & UNI_IE_ERROR)
4158 return (DEC_ERR);
4159 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4160 return (DEC_ERR);
4161 break;
4162 }
4163 break;
4164
4165 case UNI_IE_UNREC:
4166 out->unrec.h = *hdr;
4167 if (hdr->present & UNI_IE_ERROR)
4168 return (DEC_ERR);
4169 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4170 return (DEC_ERR);
4171 break;
4172
4173 default:
4174 return (DEC_ILL);
4175 }
4176 return (DEC_OK);
4177 }
4178
4179 static const struct msgdecl decl_modify_req = {
4180 0,
4181 "modify_req",
4182 (uni_msg_print_f)print_modify_req,
4183 (uni_msg_check_f)check_modify_req,
4184 (uni_msg_encode_f)encode_modify_req,
4185 (uni_msg_decode_f)decode_modify_req
4186 };
4187
4188 static void
4189 print_modify_ack(struct uni_modify_ack *msg, struct unicx *cx)
4190 {
4191 u_int i;
4192
4193 if(msg->report.h.present & UNI_IE_PRESENT)
4194 uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
4195 if(msg->traffic.h.present & UNI_IE_PRESENT)
4196 uni_print_ie_internal(UNI_IE_TRAFFIC, (union uni_ieall *)&msg->traffic, cx);
4197 if(msg->notify.h.present & UNI_IE_PRESENT)
4198 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4199 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4200 if(msg->git[i].h.present & UNI_IE_PRESENT)
4201 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4202 if(msg->unrec.h.present & UNI_IE_PRESENT)
4203 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4204 }
4205
4206 static int
4207 check_modify_ack(struct uni_modify_ack *m, struct unicx *cx)
4208 {
4209 int ret = 0;
4210 u_int i;
4211
4212 ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
4213 ret |= uni_check_ie(UNI_IE_TRAFFIC, (union uni_ieall *)&m->traffic, cx);
4214 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4215 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4216 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4217 }
4218 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4219
4220 return ret;
4221 }
4222
4223 static int
4224 encode_modify_ack(struct uni_msg *msg, struct uni_modify_ack *p, struct unicx *cx)
4225 {
4226 u_int mlen;
4227 u_int i;
4228
4229 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_MODIFY_ACK, cx, &mlen))
4230 return (-2);
4231
4232 if((p->report.h.present & UNI_IE_PRESENT) &&
4233 uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
4234 return (UNI_IE_REPORT);
4235 if((p->traffic.h.present & UNI_IE_PRESENT) &&
4236 uni_encode_ie(UNI_IE_TRAFFIC, msg, (union uni_ieall *)&p->traffic, cx))
4237 return (UNI_IE_TRAFFIC);
4238 if((p->notify.h.present & UNI_IE_PRESENT) &&
4239 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4240 return (UNI_IE_NOTIFY);
4241 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4242 if((p->git[i].h.present & UNI_IE_PRESENT) &&
4243 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4244 return ((i << 16) + UNI_IE_GIT);
4245 if((p->unrec.h.present & UNI_IE_PRESENT) &&
4246 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4247 return (UNI_IE_UNREC);
4248
4249 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4250 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4251
4252 return (0);
4253 }
4254
4255 static int
4256 decode_modify_ack(struct uni_modify_ack *out, struct uni_msg *msg,
4257 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4258 struct unicx *cx)
4259 {
4260 u_int i;
4261
4262 switch (ie) {
4263
4264 case UNI_IE_REPORT:
4265 out->report.h = *hdr;
4266 if (hdr->present & UNI_IE_ERROR)
4267 return (DEC_ERR);
4268 if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
4269 return (DEC_ERR);
4270 break;
4271
4272 case UNI_IE_TRAFFIC:
4273 out->traffic.h = *hdr;
4274 if (hdr->present & UNI_IE_ERROR)
4275 return (DEC_ERR);
4276 if(uni_decode_ie_body(UNI_IE_TRAFFIC, (union uni_ieall *)&out->traffic, msg, ielen, cx))
4277 return (DEC_ERR);
4278 break;
4279
4280 case UNI_IE_NOTIFY:
4281 out->notify.h = *hdr;
4282 if (hdr->present & UNI_IE_ERROR)
4283 return (DEC_ERR);
4284 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4285 return (DEC_ERR);
4286 break;
4287
4288 case UNI_IE_GIT:
4289 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4290 if (!IE_ISPRESENT(out->git[i])) {
4291 out->git[i].h = *hdr;
4292 if (hdr->present & UNI_IE_ERROR)
4293 return (DEC_ERR);
4294 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4295 return (DEC_ERR);
4296 break;
4297 }
4298 break;
4299
4300 case UNI_IE_UNREC:
4301 out->unrec.h = *hdr;
4302 if (hdr->present & UNI_IE_ERROR)
4303 return (DEC_ERR);
4304 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4305 return (DEC_ERR);
4306 break;
4307
4308 default:
4309 return (DEC_ILL);
4310 }
4311 return (DEC_OK);
4312 }
4313
4314 static const struct msgdecl decl_modify_ack = {
4315 0,
4316 "modify_ack",
4317 (uni_msg_print_f)print_modify_ack,
4318 (uni_msg_check_f)check_modify_ack,
4319 (uni_msg_encode_f)encode_modify_ack,
4320 (uni_msg_decode_f)decode_modify_ack
4321 };
4322
4323 static void
4324 print_modify_rej(struct uni_modify_rej *msg, struct unicx *cx)
4325 {
4326 u_int i;
4327
4328 if(msg->cause.h.present & UNI_IE_PRESENT)
4329 uni_print_ie_internal(UNI_IE_CAUSE, (union uni_ieall *)&msg->cause, cx);
4330 if(msg->notify.h.present & UNI_IE_PRESENT)
4331 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4332 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4333 if(msg->git[i].h.present & UNI_IE_PRESENT)
4334 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4335 if(msg->unrec.h.present & UNI_IE_PRESENT)
4336 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4337 }
4338
4339 static int
4340 check_modify_rej(struct uni_modify_rej *m, struct unicx *cx)
4341 {
4342 int ret = 0;
4343 u_int i;
4344
4345 ret |= uni_check_ie(UNI_IE_CAUSE, (union uni_ieall *)&m->cause, cx);
4346 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4347 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4348 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4349 }
4350 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4351
4352 return ret;
4353 }
4354
4355 static int
4356 encode_modify_rej(struct uni_msg *msg, struct uni_modify_rej *p, struct unicx *cx)
4357 {
4358 u_int mlen;
4359 u_int i;
4360
4361 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_MODIFY_REJ, cx, &mlen))
4362 return (-2);
4363
4364 if((p->cause.h.present & UNI_IE_PRESENT) &&
4365 uni_encode_ie(UNI_IE_CAUSE, msg, (union uni_ieall *)&p->cause, cx))
4366 return (UNI_IE_CAUSE);
4367 if((p->notify.h.present & UNI_IE_PRESENT) &&
4368 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4369 return (UNI_IE_NOTIFY);
4370 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4371 if((p->git[i].h.present & UNI_IE_PRESENT) &&
4372 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4373 return ((i << 16) + UNI_IE_GIT);
4374 if((p->unrec.h.present & UNI_IE_PRESENT) &&
4375 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4376 return (UNI_IE_UNREC);
4377
4378 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4379 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4380
4381 return (0);
4382 }
4383
4384 static int
4385 decode_modify_rej(struct uni_modify_rej *out, struct uni_msg *msg,
4386 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4387 struct unicx *cx)
4388 {
4389 u_int i;
4390
4391 switch (ie) {
4392
4393 case UNI_IE_CAUSE:
4394 out->cause.h = *hdr;
4395 if (hdr->present & UNI_IE_ERROR)
4396 return (DEC_ERR);
4397 if(uni_decode_ie_body(UNI_IE_CAUSE, (union uni_ieall *)&out->cause, msg, ielen, cx))
4398 return (DEC_ERR);
4399 break;
4400
4401 case UNI_IE_NOTIFY:
4402 out->notify.h = *hdr;
4403 if (hdr->present & UNI_IE_ERROR)
4404 return (DEC_ERR);
4405 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4406 return (DEC_ERR);
4407 break;
4408
4409 case UNI_IE_GIT:
4410 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4411 if (!IE_ISPRESENT(out->git[i])) {
4412 out->git[i].h = *hdr;
4413 if (hdr->present & UNI_IE_ERROR)
4414 return (DEC_ERR);
4415 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4416 return (DEC_ERR);
4417 break;
4418 }
4419 break;
4420
4421 case UNI_IE_UNREC:
4422 out->unrec.h = *hdr;
4423 if (hdr->present & UNI_IE_ERROR)
4424 return (DEC_ERR);
4425 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4426 return (DEC_ERR);
4427 break;
4428
4429 default:
4430 return (DEC_ILL);
4431 }
4432 return (DEC_OK);
4433 }
4434
4435 static const struct msgdecl decl_modify_rej = {
4436 0,
4437 "modify_rej",
4438 (uni_msg_print_f)print_modify_rej,
4439 (uni_msg_check_f)check_modify_rej,
4440 (uni_msg_encode_f)encode_modify_rej,
4441 (uni_msg_decode_f)decode_modify_rej
4442 };
4443
4444 static void
4445 print_conn_avail(struct uni_conn_avail *msg, struct unicx *cx)
4446 {
4447 u_int i;
4448
4449 if(msg->notify.h.present & UNI_IE_PRESENT)
4450 uni_print_ie_internal(UNI_IE_NOTIFY, (union uni_ieall *)&msg->notify, cx);
4451 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4452 if(msg->git[i].h.present & UNI_IE_PRESENT)
4453 uni_print_ie_internal(UNI_IE_GIT, (union uni_ieall *)&msg->git[i], cx);
4454 if(msg->report.h.present & UNI_IE_PRESENT)
4455 uni_print_ie_internal(UNI_IE_REPORT, (union uni_ieall *)&msg->report, cx);
4456 if(msg->unrec.h.present & UNI_IE_PRESENT)
4457 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4458 }
4459
4460 static int
4461 check_conn_avail(struct uni_conn_avail *m, struct unicx *cx)
4462 {
4463 int ret = 0;
4464 u_int i;
4465
4466 ret |= uni_check_ie(UNI_IE_NOTIFY, (union uni_ieall *)&m->notify, cx);
4467 for(i = 0; i < UNI_NUM_IE_GIT ; i++) {
4468 ret |= uni_check_ie(UNI_IE_GIT, (union uni_ieall *)&m->git[i], cx);
4469 }
4470 ret |= uni_check_ie(UNI_IE_REPORT, (union uni_ieall *)&m->report, cx);
4471 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4472
4473 return ret;
4474 }
4475
4476 static int
4477 encode_conn_avail(struct uni_msg *msg, struct uni_conn_avail *p, struct unicx *cx)
4478 {
4479 u_int mlen;
4480 u_int i;
4481
4482 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_CONN_AVAIL, cx, &mlen))
4483 return (-2);
4484
4485 if((p->notify.h.present & UNI_IE_PRESENT) &&
4486 uni_encode_ie(UNI_IE_NOTIFY, msg, (union uni_ieall *)&p->notify, cx))
4487 return (UNI_IE_NOTIFY);
4488 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4489 if((p->git[i].h.present & UNI_IE_PRESENT) &&
4490 uni_encode_ie(UNI_IE_GIT, msg, (union uni_ieall *)&p->git[i], cx))
4491 return ((i << 16) + UNI_IE_GIT);
4492 if((p->report.h.present & UNI_IE_PRESENT) &&
4493 uni_encode_ie(UNI_IE_REPORT, msg, (union uni_ieall *)&p->report, cx))
4494 return (UNI_IE_REPORT);
4495 if((p->unrec.h.present & UNI_IE_PRESENT) &&
4496 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4497 return (UNI_IE_UNREC);
4498
4499 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4500 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4501
4502 return (0);
4503 }
4504
4505 static int
4506 decode_conn_avail(struct uni_conn_avail *out, struct uni_msg *msg,
4507 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4508 struct unicx *cx)
4509 {
4510 u_int i;
4511
4512 switch (ie) {
4513
4514 case UNI_IE_NOTIFY:
4515 out->notify.h = *hdr;
4516 if (hdr->present & UNI_IE_ERROR)
4517 return (DEC_ERR);
4518 if(uni_decode_ie_body(UNI_IE_NOTIFY, (union uni_ieall *)&out->notify, msg, ielen, cx))
4519 return (DEC_ERR);
4520 break;
4521
4522 case UNI_IE_GIT:
4523 for(i = 0; i < UNI_NUM_IE_GIT; i++)
4524 if (!IE_ISPRESENT(out->git[i])) {
4525 out->git[i].h = *hdr;
4526 if (hdr->present & UNI_IE_ERROR)
4527 return (DEC_ERR);
4528 if(uni_decode_ie_body(UNI_IE_GIT, (union uni_ieall *)&out->git[i], msg, ielen, cx))
4529 return (DEC_ERR);
4530 break;
4531 }
4532 break;
4533
4534 case UNI_IE_REPORT:
4535 out->report.h = *hdr;
4536 if (hdr->present & UNI_IE_ERROR)
4537 return (DEC_ERR);
4538 if(uni_decode_ie_body(UNI_IE_REPORT, (union uni_ieall *)&out->report, msg, ielen, cx))
4539 return (DEC_ERR);
4540 break;
4541
4542 case UNI_IE_UNREC:
4543 out->unrec.h = *hdr;
4544 if (hdr->present & UNI_IE_ERROR)
4545 return (DEC_ERR);
4546 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4547 return (DEC_ERR);
4548 break;
4549
4550 default:
4551 return (DEC_ILL);
4552 }
4553 return (DEC_OK);
4554 }
4555
4556 static const struct msgdecl decl_conn_avail = {
4557 0,
4558 "conn_avail",
4559 (uni_msg_print_f)print_conn_avail,
4560 (uni_msg_check_f)check_conn_avail,
4561 (uni_msg_encode_f)encode_conn_avail,
4562 (uni_msg_decode_f)decode_conn_avail
4563 };
4564
4565 static void
4566 print_unknown(struct uni_unknown *msg, struct unicx *cx)
4567 {
4568 if(msg->epref.h.present & UNI_IE_PRESENT)
4569 uni_print_ie_internal(UNI_IE_EPREF, (union uni_ieall *)&msg->epref, cx);
4570 if(msg->unrec.h.present & UNI_IE_PRESENT)
4571 uni_print_ie_internal(UNI_IE_UNREC, (union uni_ieall *)&msg->unrec, cx);
4572 }
4573
4574 static int
4575 check_unknown(struct uni_unknown *m, struct unicx *cx)
4576 {
4577 int ret = 0;
4578
4579 ret |= uni_check_ie(UNI_IE_EPREF, (union uni_ieall *)&m->epref, cx);
4580 ret |= uni_check_ie(UNI_IE_UNREC, (union uni_ieall *)&m->unrec, cx);
4581
4582 return ret;
4583 }
4584
4585 static int
4586 encode_unknown(struct uni_msg *msg, struct uni_unknown *p, struct unicx *cx)
4587 {
4588 u_int mlen;
4589
4590 if(uni_encode_msg_hdr(msg, &p->hdr, UNI_UNKNOWN, cx, &mlen))
4591 return (-2);
4592
4593 if((p->epref.h.present & UNI_IE_PRESENT) &&
4594 uni_encode_ie(UNI_IE_EPREF, msg, (union uni_ieall *)&p->epref, cx))
4595 return (UNI_IE_EPREF);
4596 if((p->unrec.h.present & UNI_IE_PRESENT) &&
4597 uni_encode_ie(UNI_IE_UNREC, msg, (union uni_ieall *)&p->unrec, cx))
4598 return (UNI_IE_UNREC);
4599
4600 msg->b_buf[mlen+0] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 8;
4601 msg->b_buf[mlen+1] = ((msg->b_wptr-msg->b_rptr)-mlen-2) >> 0;
4602
4603 return (0);
4604 }
4605
4606 static int
4607 decode_unknown(struct uni_unknown *out, struct uni_msg *msg,
4608 enum uni_ietype ie, struct uni_iehdr *hdr, u_int ielen,
4609 struct unicx *cx)
4610 {
4611 switch (ie) {
4612
4613 case UNI_IE_EPREF:
4614 out->epref.h = *hdr;
4615 if (hdr->present & UNI_IE_ERROR)
4616 return (DEC_ERR);
4617 if(uni_decode_ie_body(UNI_IE_EPREF, (union uni_ieall *)&out->epref, msg, ielen, cx))
4618 return (DEC_ERR);
4619 break;
4620
4621 case UNI_IE_UNREC:
4622 out->unrec.h = *hdr;
4623 if (hdr->present & UNI_IE_ERROR)
4624 return (DEC_ERR);
4625 if(uni_decode_ie_body(UNI_IE_UNREC, (union uni_ieall *)&out->unrec, msg, ielen, cx))
4626 return (DEC_ERR);
4627 break;
4628
4629 default:
4630 return (DEC_ILL);
4631 }
4632 return (DEC_OK);
4633 }
4634
4635 static const struct msgdecl decl_unknown = {
4636 0,
4637 "unknown",
4638 (uni_msg_print_f)print_unknown,
4639 (uni_msg_check_f)check_unknown,
4640 (uni_msg_encode_f)encode_unknown,
4641 (uni_msg_decode_f)decode_unknown
4642 };
4643
4644 const struct msgdecl *uni_msgtable[256] = {
4645 &decl_unknown, /* 0x00 */
4646 &decl_alerting, /* 0x01 */
4647 &decl_call_proc, /* 0x02 */
4648 &decl_unknown, /* 0x03 */
4649 &decl_unknown, /* 0x04 */
4650 &decl_setup, /* 0x05 */
4651 &decl_unknown, /* 0x06 */
4652 &decl_connect, /* 0x07 */
4653 &decl_unknown, /* 0x08 */
4654 &decl_unknown, /* 0x09 */
4655 &decl_unknown, /* 0x0a */
4656 &decl_unknown, /* 0x0b */
4657 &decl_unknown, /* 0x0c */
4658 &decl_unknown, /* 0x0d */
4659 &decl_unknown, /* 0x0e */
4660 &decl_connect_ack, /* 0x0f */
4661 &decl_unknown, /* 0x10 */
4662 &decl_unknown, /* 0x11 */
4663 &decl_unknown, /* 0x12 */
4664 &decl_unknown, /* 0x13 */
4665 &decl_unknown, /* 0x14 */
4666 &decl_cobisetup, /* 0x15 */
4667 &decl_unknown, /* 0x16 */
4668 &decl_unknown, /* 0x17 */
4669 &decl_unknown, /* 0x18 */
4670 &decl_unknown, /* 0x19 */
4671 &decl_unknown, /* 0x1a */
4672 &decl_unknown, /* 0x1b */
4673 &decl_unknown, /* 0x1c */
4674 &decl_unknown, /* 0x1d */
4675 &decl_unknown, /* 0x1e */
4676 &decl_unknown, /* 0x1f */
4677 &decl_unknown, /* 0x20 */
4678 &decl_unknown, /* 0x21 */
4679 &decl_unknown, /* 0x22 */
4680 &decl_unknown, /* 0x23 */
4681 &decl_unknown, /* 0x24 */
4682 &decl_unknown, /* 0x25 */
4683 &decl_unknown, /* 0x26 */
4684 &decl_unknown, /* 0x27 */
4685 &decl_unknown, /* 0x28 */
4686 &decl_unknown, /* 0x29 */
4687 &decl_unknown, /* 0x2a */
4688 &decl_unknown, /* 0x2b */
4689 &decl_unknown, /* 0x2c */
4690 &decl_unknown, /* 0x2d */
4691 &decl_unknown, /* 0x2e */
4692 &decl_unknown, /* 0x2f */
4693 &decl_unknown, /* 0x30 */
4694 &decl_unknown, /* 0x31 */
4695 &decl_unknown, /* 0x32 */
4696 &decl_unknown, /* 0x33 */
4697 &decl_unknown, /* 0x34 */
4698 &decl_unknown, /* 0x35 */
4699 &decl_unknown, /* 0x36 */
4700 &decl_unknown, /* 0x37 */
4701 &decl_unknown, /* 0x38 */
4702 &decl_unknown, /* 0x39 */
4703 &decl_unknown, /* 0x3a */
4704 &decl_unknown, /* 0x3b */
4705 &decl_unknown, /* 0x3c */
4706 &decl_unknown, /* 0x3d */
4707 &decl_unknown, /* 0x3e */
4708 &decl_unknown, /* 0x3f */
4709 &decl_unknown, /* 0x40 */
4710 &decl_unknown, /* 0x41 */
4711 &decl_unknown, /* 0x42 */
4712 &decl_unknown, /* 0x43 */
4713 &decl_unknown, /* 0x44 */
4714 &decl_unknown, /* 0x45 */
4715 &decl_restart, /* 0x46 */
4716 &decl_unknown, /* 0x47 */
4717 &decl_unknown, /* 0x48 */
4718 &decl_unknown, /* 0x49 */
4719 &decl_unknown, /* 0x4a */
4720 &decl_unknown, /* 0x4b */
4721 &decl_unknown, /* 0x4c */
4722 &decl_release, /* 0x4d */
4723 &decl_restart_ack, /* 0x4e */
4724 &decl_unknown, /* 0x4f */
4725 &decl_unknown, /* 0x50 */
4726 &decl_unknown, /* 0x51 */
4727 &decl_unknown, /* 0x52 */
4728 &decl_unknown, /* 0x53 */
4729 &decl_unknown, /* 0x54 */
4730 &decl_unknown, /* 0x55 */
4731 &decl_unknown, /* 0x56 */
4732 &decl_unknown, /* 0x57 */
4733 &decl_unknown, /* 0x58 */
4734 &decl_unknown, /* 0x59 */
4735 &decl_release_compl, /* 0x5a */
4736 &decl_unknown, /* 0x5b */
4737 &decl_unknown, /* 0x5c */
4738 &decl_unknown, /* 0x5d */
4739 &decl_unknown, /* 0x5e */
4740 &decl_unknown, /* 0x5f */
4741 &decl_unknown, /* 0x60 */
4742 &decl_unknown, /* 0x61 */
4743 &decl_facility, /* 0x62 */
4744 &decl_unknown, /* 0x63 */
4745 &decl_unknown, /* 0x64 */
4746 &decl_unknown, /* 0x65 */
4747 &decl_unknown, /* 0x66 */
4748 &decl_unknown, /* 0x67 */
4749 &decl_unknown, /* 0x68 */
4750 &decl_unknown, /* 0x69 */
4751 &decl_unknown, /* 0x6a */
4752 &decl_unknown, /* 0x6b */
4753 &decl_unknown, /* 0x6c */
4754 &decl_unknown, /* 0x6d */
4755 &decl_notify, /* 0x6e */
4756 &decl_unknown, /* 0x6f */
4757 &decl_unknown, /* 0x70 */
4758 &decl_unknown, /* 0x71 */
4759 &decl_unknown, /* 0x72 */
4760 &decl_unknown, /* 0x73 */
4761 &decl_unknown, /* 0x74 */
4762 &decl_status_enq, /* 0x75 */
4763 &decl_unknown, /* 0x76 */
4764 &decl_unknown, /* 0x77 */
4765 &decl_unknown, /* 0x78 */
4766 &decl_unknown, /* 0x79 */
4767 &decl_unknown, /* 0x7a */
4768 &decl_unknown, /* 0x7b */
4769 &decl_unknown, /* 0x7c */
4770 &decl_status, /* 0x7d */
4771 &decl_unknown, /* 0x7e */
4772 &decl_unknown, /* 0x7f */
4773 &decl_add_party, /* 0x80 */
4774 &decl_add_party_ack, /* 0x81 */
4775 &decl_add_party_rej, /* 0x82 */
4776 &decl_drop_party, /* 0x83 */
4777 &decl_drop_party_ack, /* 0x84 */
4778 &decl_party_alerting, /* 0x85 */
4779 &decl_unknown, /* 0x86 */
4780 &decl_unknown, /* 0x87 */
4781 &decl_modify_req, /* 0x88 */
4782 &decl_modify_ack, /* 0x89 */
4783 &decl_modify_rej, /* 0x8a */
4784 &decl_conn_avail, /* 0x8b */
4785 &decl_unknown, /* 0x8c */
4786 &decl_unknown, /* 0x8d */
4787 &decl_unknown, /* 0x8e */
4788 &decl_unknown, /* 0x8f */
4789 &decl_leaf_setup_fail, /* 0x90 */
4790 &decl_leaf_setup_req, /* 0x91 */
4791 &decl_unknown, /* 0x92 */
4792 &decl_unknown, /* 0x93 */
4793 &decl_unknown, /* 0x94 */
4794 &decl_unknown, /* 0x95 */
4795 &decl_unknown, /* 0x96 */
4796 &decl_unknown, /* 0x97 */
4797 &decl_unknown, /* 0x98 */
4798 &decl_unknown, /* 0x99 */
4799 &decl_unknown, /* 0x9a */
4800 &decl_unknown, /* 0x9b */
4801 &decl_unknown, /* 0x9c */
4802 &decl_unknown, /* 0x9d */
4803 &decl_unknown, /* 0x9e */
4804 &decl_unknown, /* 0x9f */
4805 &decl_unknown, /* 0xa0 */
4806 &decl_unknown, /* 0xa1 */
4807 &decl_unknown, /* 0xa2 */
4808 &decl_unknown, /* 0xa3 */
4809 &decl_unknown, /* 0xa4 */
4810 &decl_unknown, /* 0xa5 */
4811 &decl_unknown, /* 0xa6 */
4812 &decl_unknown, /* 0xa7 */
4813 &decl_unknown, /* 0xa8 */
4814 &decl_unknown, /* 0xa9 */
4815 &decl_unknown, /* 0xaa */
4816 &decl_unknown, /* 0xab */
4817 &decl_unknown, /* 0xac */
4818 &decl_unknown, /* 0xad */
4819 &decl_unknown, /* 0xae */
4820 &decl_unknown, /* 0xaf */
4821 &decl_unknown, /* 0xb0 */
4822 &decl_unknown, /* 0xb1 */
4823 &decl_unknown, /* 0xb2 */
4824 &decl_unknown, /* 0xb3 */
4825 &decl_unknown, /* 0xb4 */
4826 &decl_unknown, /* 0xb5 */
4827 &decl_unknown, /* 0xb6 */
4828 &decl_unknown, /* 0xb7 */
4829 &decl_unknown, /* 0xb8 */
4830 &decl_unknown, /* 0xb9 */
4831 &decl_unknown, /* 0xba */
4832 &decl_unknown, /* 0xbb */
4833 &decl_unknown, /* 0xbc */
4834 &decl_unknown, /* 0xbd */
4835 &decl_unknown, /* 0xbe */
4836 &decl_unknown, /* 0xbf */
4837 &decl_unknown, /* 0xc0 */
4838 &decl_unknown, /* 0xc1 */
4839 &decl_unknown, /* 0xc2 */
4840 &decl_unknown, /* 0xc3 */
4841 &decl_unknown, /* 0xc4 */
4842 &decl_unknown, /* 0xc5 */
4843 &decl_unknown, /* 0xc6 */
4844 &decl_unknown, /* 0xc7 */
4845 &decl_unknown, /* 0xc8 */
4846 &decl_unknown, /* 0xc9 */
4847 &decl_unknown, /* 0xca */
4848 &decl_unknown, /* 0xcb */
4849 &decl_unknown, /* 0xcc */
4850 &decl_unknown, /* 0xcd */
4851 &decl_unknown, /* 0xce */
4852 &decl_unknown, /* 0xcf */
4853 &decl_unknown, /* 0xd0 */
4854 &decl_unknown, /* 0xd1 */
4855 &decl_unknown, /* 0xd2 */
4856 &decl_unknown, /* 0xd3 */
4857 &decl_unknown, /* 0xd4 */
4858 &decl_unknown, /* 0xd5 */
4859 &decl_unknown, /* 0xd6 */
4860 &decl_unknown, /* 0xd7 */
4861 &decl_unknown, /* 0xd8 */
4862 &decl_unknown, /* 0xd9 */
4863 &decl_unknown, /* 0xda */
4864 &decl_unknown, /* 0xdb */
4865 &decl_unknown, /* 0xdc */
4866 &decl_unknown, /* 0xdd */
4867 &decl_unknown, /* 0xde */
4868 &decl_unknown, /* 0xdf */
4869 &decl_unknown, /* 0xe0 */
4870 &decl_unknown, /* 0xe1 */
4871 &decl_unknown, /* 0xe2 */
4872 &decl_unknown, /* 0xe3 */
4873 &decl_unknown, /* 0xe4 */
4874 &decl_unknown, /* 0xe5 */
4875 &decl_unknown, /* 0xe6 */
4876 &decl_unknown, /* 0xe7 */
4877 &decl_unknown, /* 0xe8 */
4878 &decl_unknown, /* 0xe9 */
4879 &decl_unknown, /* 0xea */
4880 &decl_unknown, /* 0xeb */
4881 &decl_unknown, /* 0xec */
4882 &decl_unknown, /* 0xed */
4883 &decl_unknown, /* 0xee */
4884 &decl_unknown, /* 0xef */
4885 &decl_unknown, /* 0xf0 */
4886 &decl_unknown, /* 0xf1 */
4887 &decl_unknown, /* 0xf2 */
4888 &decl_unknown, /* 0xf3 */
4889 &decl_unknown, /* 0xf4 */
4890 &decl_unknown, /* 0xf5 */
4891 &decl_unknown, /* 0xf6 */
4892 &decl_unknown, /* 0xf7 */
4893 &decl_unknown, /* 0xf8 */
4894 &decl_unknown, /* 0xf9 */
4895 &decl_unknown, /* 0xfa */
4896 &decl_unknown, /* 0xfb */
4897 &decl_unknown, /* 0xfc */
4898 &decl_unknown, /* 0xfd */
4899 &decl_unknown, /* 0xfe */
4900 &decl_unknown, /* 0xff */
4901 };
Cache object: 6c61282b35b158d987ebe7dbc19d26a7
|