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