This source file includes following definitions.
- Q931MesgHeader
- Q931Umes_Alerting
- Q931Pmes_Alerting
- Q931Umes_CallProceeding
- Q931Pmes_CallProceeding
- Q931Umes_CongestionControl
- Q931Pmes_CongestionControl
- Q931Umes_Connect
- Q931Pmes_Connect
- Q931Umes_ConnectAck
- Q931Pmes_ConnectAck
- Q931Umes_Disconnect
- Q931Pmes_Disconnect
- Q931Umes_Information
- Q931Pmes_Information
- Q931Umes_Notify
- Q931Pmes_Notify
- Q931Umes_Progress
- Q931Pmes_Progress
- Q931Umes_Release
- Q931Pmes_Release
- Q931Umes_ReleaseComplete
- Q931Pmes_ReleaseComplete
- Q931Umes_Restart
- Q931Pmes_Restart
- Q931Umes_RestartAck
- Q931Pmes_RestartAck
- Q931Umes_Resume
- Q931Pmes_Resume
- Q931Umes_ResumeAck
- Q931Pmes_ResumeAck
- Q931Umes_ResumeReject
- Q931Pmes_ResumeReject
- Q931Umes_Segment
- Q931Pmes_Segment
- Q931Umes_Setup
- Q931Pmes_Setup
- Q931Umes_SetupAck
- Q931Pmes_SetupAck
- Q931Umes_Status
- Q931Pmes_Status
- Q931Umes_StatusEnquiry
- Q931Pmes_StatusEnquiry
- Q931Umes_Suspend
- Q931Pmes_Suspend
- Q931Umes_SuspendAck
- Q931Pmes_SuspendAck
- Q931Umes_SuspendReject
- Q931Pmes_SuspendReject
- Q931Umes_UserInformation
- Q931Pmes_UserInformation
- Q931Umes_Service
- Q931Pmes_Service
- Q931Umes_ServiceAck
- Q931Pmes_ServiceAck
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include "Q931.h"
45
46
47
48
49
50 L3INT Q931MesgHeader(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *mes, L3UCHAR *OBuf, L3INT Size, L3INT *IOff)
51 {
52 L3INT Octet = *IOff;
53
54 Q931Log(pTrunk, Q931_LOG_DEBUG, "Creating Q.931 Message Header:\n ProtDisc %d (%#x), CRV %d (%#x), CRVflag: %d (%#x), MesType: %d (%#x)\n",
55 mes->ProtDisc, mes->ProtDisc, mes->CRV, mes->CRV, mes->CRVFlag, mes->CRVFlag, mes->MesType, mes->MesType);
56
57 OBuf[Octet++] = mes->ProtDisc;
58 if (!Q931_IS_BRI(pTrunk)) {
59 OBuf[Octet++] = 2;
60 OBuf[Octet++] = (L3UCHAR)((mes->CRV >> 8) & 0x7f) | ((mes->CRVFlag << 7) & 0x80);
61 OBuf[Octet++] = (L3UCHAR) (mes->CRV & 0xff);
62 } else {
63 OBuf[Octet++] = 1;
64 OBuf[Octet++] = (L3UCHAR) (mes->CRV & 0x7f) | ((mes->CRVFlag << 7) & 0x80);
65 }
66 OBuf[Octet++] = mes->MesType;
67
68 *IOff = Octet;
69 return 0;
70 }
71
72
73
74
75
76
77
78
79 L3INT Q931Umes_Alerting(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
80 {
81 L3INT OOff = 0;
82 L3INT rc = Q931E_NO_ERROR;
83
84 while (IOff < Size) {
85 switch (IBuf[IOff]) {
86 case Q931ie_BEARER_CAPABILITY:
87 case Q931ie_CHANNEL_IDENTIFICATION:
88 case Q931ie_PROGRESS_INDICATOR:
89 case Q931ie_DISPLAY:
90 case Q931ie_SIGNAL:
91 case Q931ie_HIGH_LAYER_COMPATIBILITY:
92 case Q931ie_USER_USER:
93 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
94 if (rc != Q931E_NO_ERROR)
95 return rc;
96 break;
97 default:
98 return Q931E_ILLEGAL_IE;
99 break;
100 }
101 }
102
103 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
104 return Q931E_NO_ERROR;
105 }
106
107
108
109
110
111
112 L3INT Q931Pmes_Alerting(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
113 {
114 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
115 L3INT rc = Q931E_NO_ERROR;
116 L3INT Octet = 0;
117
118
119 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
120
121
122 if (Q931IsIEPresent(pMes->BearerCap)) {
123 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
124 return rc;
125 }
126
127
128 if (Q931IsIEPresent(pMes->ChanID)) {
129 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
130 return rc;
131 }
132
133
134 if (Q931IsIEPresent(pMes->ProgInd)) {
135 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
136 return rc;
137 }
138
139
140 if (Q931IsIEPresent(pMes->Display)) {
141 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
142 return rc;
143 }
144
145
146 if (Q931IsIEPresent(pMes->Signal)) {
147 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
148 return rc;
149 }
150
151
152 if (Q931IsIEPresent(pMes->HLComp)) {
153 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet)) != 0)
154 return rc;
155 }
156
157 *OSize = Octet;
158 return rc;
159 }
160
161
162
163
164
165
166 L3INT Q931Umes_CallProceeding(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
167 {
168 L3INT OOff = 0;
169 L3INT rc = Q931E_NO_ERROR;
170
171 while (IOff < Size) {
172 switch (IBuf[IOff]) {
173 case Q931ie_BEARER_CAPABILITY:
174 case Q931ie_CHANNEL_IDENTIFICATION:
175 case Q931ie_PROGRESS_INDICATOR:
176 case Q931ie_DISPLAY:
177 case Q931ie_HIGH_LAYER_COMPATIBILITY:
178 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
179 if (rc != Q931E_NO_ERROR)
180 return rc;
181 break;
182 default:
183 return Q931E_ILLEGAL_IE;
184 break;
185 }
186 }
187
188 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
189 return Q931E_NO_ERROR;
190 }
191
192
193
194
195
196
197 L3INT Q931Pmes_CallProceeding(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
198 {
199 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
200 L3INT rc = Q931E_NO_ERROR;
201 L3INT Octet = 0;
202
203
204 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
205
206
207 if (Q931IsIEPresent(pMes->BearerCap)) {
208 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
209 return rc;
210 }
211
212
213 if (Q931IsIEPresent(pMes->ChanID)) {
214 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
215 return rc;
216 }
217
218
219 if (Q931IsIEPresent(pMes->ProgInd)) {
220 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
221 return rc;
222 }
223
224
225 if (Q931IsIEPresent(pMes->Display)) {
226 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
227 return rc;
228 }
229
230
231 if (Q931IsIEPresent(pMes->HLComp)) {
232 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet)) != 0)
233 return rc;
234 }
235
236 *OSize = Octet;
237 return rc;
238 }
239
240
241
242
243
244
245 L3INT Q931Umes_CongestionControl(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
246 {
247 L3BOOL RetCode = L3FALSE;
248
249 NoWarning(mes);
250 NoWarning(IBuf);
251
252 return RetCode;
253 }
254
255
256
257
258
259
260
261 L3INT Q931Pmes_CongestionControl(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
262 {
263 L3BOOL RetCode = L3FALSE;
264
265 NoWarning(OBuf);
266 NoWarning(IBuf);
267
268 *OSize = 0;
269 return RetCode;
270 }
271
272
273
274
275
276
277 L3INT Q931Umes_Connect(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
278 {
279 L3INT OOff = 0;
280 L3INT rc = Q931E_NO_ERROR;
281
282 while (IOff < Size) {
283 switch (IBuf[IOff]) {
284 case Q931ie_BEARER_CAPABILITY:
285 case Q931ie_CHANNEL_IDENTIFICATION:
286 case Q931ie_PROGRESS_INDICATOR:
287 case Q931ie_DISPLAY:
288 case Q931ie_DATETIME:
289 case Q931ie_SIGNAL:
290 case Q931ie_LOW_LAYER_COMPATIBILITY:
291 case Q931ie_HIGH_LAYER_COMPATIBILITY:
292 case Q931ie_CONNECTED_NUMBER:
293 case Q931ie_USER_USER:
294 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
295 if (rc != Q931E_NO_ERROR)
296 return rc;
297 break;
298
299 default:
300 Q931Log(pTrunk, Q931_LOG_ERROR, "Illegal IE %#hhx in Connect Message\n", IBuf[IOff]);
301
302 return Q931E_ILLEGAL_IE;
303 break;
304 }
305 }
306
307 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
308 return Q931E_NO_ERROR;
309 }
310
311
312
313
314
315
316 L3INT Q931Pmes_Connect(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
317 {
318 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
319 L3INT rc = Q931E_NO_ERROR;
320 L3INT Octet = 0;
321
322
323 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
324
325
326 if (Q931IsIEPresent(pMes->BearerCap)) {
327 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
328 return rc;
329 }
330
331
332 if (Q931IsIEPresent(pMes->ChanID)) {
333 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
334 return rc;
335 }
336
337
338 if (Q931IsIEPresent(pMes->ProgInd)) {
339 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
340 return rc;
341 }
342
343
344 if (Q931IsIEPresent(pMes->Display)) {
345 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
346 return rc;
347 }
348
349
350 if (Q931IsIEPresent(pMes->DateTime)) {
351 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DATETIME](pTrunk, Q931GetIEPtr(pMes->DateTime,pMes->buf), OBuf, &Octet)) != 0)
352 return rc;
353 }
354
355
356 if (Q931IsIEPresent(pMes->Signal)) {
357 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
358 return rc;
359 }
360
361
362 if (Q931IsIEPresent(pMes->LLComp)) {
363 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_LOW_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->LLComp,pMes->buf), OBuf, &Octet)) != 0)
364 return rc;
365 }
366
367
368 if (Q931IsIEPresent(pMes->HLComp)) {
369 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet)) != 0)
370 return rc;
371 }
372
373 *OSize = Octet;
374 return rc;
375 }
376
377
378
379
380
381
382 L3INT Q931Umes_ConnectAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
383 {
384 L3INT OOff = 0;
385 L3INT rc = Q931E_NO_ERROR;
386
387 while (IOff < Size) {
388 switch (IBuf[IOff]) {
389 case Q931ie_DISPLAY:
390 case Q931ie_SIGNAL:
391 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
392 if (rc != Q931E_NO_ERROR)
393 return rc;
394 break;
395 default:
396 return Q931E_ILLEGAL_IE;
397 break;
398 }
399 }
400
401 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
402 return Q931E_NO_ERROR;
403 }
404
405
406
407
408
409
410
411 L3INT Q931Pmes_ConnectAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
412 {
413 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
414 L3INT rc = Q931E_NO_ERROR;
415 L3INT Octet = 0;
416
417
418 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
419
420
421 if (Q931IsIEPresent(pMes->Display)) {
422 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
423 return rc;
424 }
425
426
427 if (Q931IsIEPresent(pMes->Signal)) {
428 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
429 return rc;
430 }
431
432 *OSize = Octet;
433 return rc;
434 }
435
436
437
438
439
440
441 L3INT Q931Umes_Disconnect(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
442 {
443 L3INT OOff = 0;
444 L3INT rc = Q931E_NO_ERROR;
445
446 while (IOff < Size) {
447 switch (IBuf[IOff]) {
448 case Q931ie_CAUSE:
449 case Q931ie_PROGRESS_INDICATOR:
450 case Q931ie_DISPLAY:
451 case Q931ie_SIGNAL:
452 case Q931ie_FACILITY:
453 case Q931ie_USER_USER:
454 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
455 if (rc != Q931E_NO_ERROR)
456 return rc;
457 break;
458 default:
459 return Q931E_ILLEGAL_IE;
460 break;
461 }
462 }
463
464 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
465 return Q931E_NO_ERROR;
466 }
467
468
469
470
471
472
473 L3INT Q931Pmes_Disconnect(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
474 {
475 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
476 L3INT rc = Q931E_NO_ERROR;
477 L3INT Octet = 0;
478
479
480 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
481
482
483 if (Q931IsIEPresent(pMes->Cause)) {
484 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
485 return rc;
486 }
487
488
489 if (Q931IsIEPresent(pMes->ProgInd)) {
490 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
491 return rc;
492 }
493
494
495 if (Q931IsIEPresent(pMes->Display)) {
496 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
497 return rc;
498 }
499
500
501 if (Q931IsIEPresent(pMes->Signal)) {
502 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
503 return rc;
504 }
505
506 *OSize = Octet;
507 return rc;
508 }
509
510
511
512
513
514
515 L3INT Q931Umes_Information(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
516 {
517 L3INT OOff = 0;
518 L3INT rc = Q931E_NO_ERROR;
519
520 while (IOff < Size) {
521 switch (IBuf[IOff]) {
522 case Q931ie_SENDING_COMPLETE:
523 case Q931ie_DISPLAY:
524 case Q931ie_KEYPAD_FACILITY:
525 case Q931ie_CALLED_PARTY_NUMBER:
526 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
527 if (rc != Q931E_NO_ERROR)
528 return rc;
529 break;
530 default:
531 return Q931E_ILLEGAL_IE;
532 break;
533 }
534 }
535
536 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
537 return Q931E_NO_ERROR;
538 }
539
540
541
542
543
544
545 L3INT Q931Pmes_Information(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
546 {
547 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
548 L3INT rc = Q931E_NO_ERROR;
549 L3INT Octet = 0;
550
551
552 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
553
554
555 if (Q931IsIEPresent(pMes->SendComplete)) {
556 OBuf[Octet++] = (L3UCHAR)(pMes->SendComplete & 0x00ff);
557 }
558
559
560 if (Q931IsIEPresent(pMes->Display)) {
561 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
562 return rc;
563 }
564
565
566 if (Q931IsIEPresent(pMes->KeypadFac)) {
567 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_KEYPAD_FACILITY](pTrunk, Q931GetIEPtr(pMes->KeypadFac,pMes->buf), OBuf, &Octet)) != 0)
568 return rc;
569 }
570
571
572 if (Q931IsIEPresent(pMes->Signal)) {
573 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
574 return rc;
575 }
576
577
578 if (Q931IsIEPresent(pMes->CalledNum)) {
579 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CalledNum,pMes->buf), OBuf, &Octet)) != 0)
580 return rc;
581 }
582
583 *OSize = Octet;
584 return rc;
585 }
586
587
588
589
590
591
592 L3INT Q931Umes_Notify(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
593 {
594 L3INT OOff = 0;
595 L3INT rc = Q931E_NO_ERROR;
596
597 while (IOff < Size) {
598 switch (IBuf[IOff]) {
599 case Q931ie_BEARER_CAPABILITY:
600 case Q931ie_NOTIFICATION_INDICATOR:
601 case Q931ie_DISPLAY:
602 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
603 if (rc != Q931E_NO_ERROR)
604 return rc;
605 break;
606 default:
607 return Q931E_ILLEGAL_IE;
608 break;
609 }
610 }
611
612 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
613 return Q931E_NO_ERROR;
614 }
615
616
617
618
619
620
621 L3INT Q931Pmes_Notify(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
622 {
623 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
624 L3INT rc = Q931E_NO_ERROR;
625 L3INT Octet = 0;
626
627
628 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
629
630
631 if (Q931IsIEPresent(pMes->BearerCap)) {
632 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
633 return rc;
634 }
635
636
637 if (Q931IsIEPresent(pMes->Display)) {
638 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
639 return rc;
640 }
641
642 *OSize = Octet;
643 return rc;
644 }
645
646
647
648
649
650
651 L3INT Q931Umes_Progress(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
652 {
653 L3INT OOff = 0;
654 L3INT rc = Q931E_NO_ERROR;
655
656 while (IOff < Size) {
657 switch (IBuf[IOff]) {
658 case Q931ie_BEARER_CAPABILITY:
659 case Q931ie_CAUSE:
660 case Q931ie_PROGRESS_INDICATOR:
661 case Q931ie_DISPLAY:
662 case Q931ie_HIGH_LAYER_COMPATIBILITY:
663 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
664 if (rc != Q931E_NO_ERROR)
665 return rc;
666 break;
667 default:
668 return Q931E_ILLEGAL_IE;
669 break;
670 }
671 }
672
673 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
674 return Q931E_NO_ERROR;
675 }
676
677
678
679
680
681
682 L3INT Q931Pmes_Progress(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
683 {
684 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
685 L3INT rc = Q931E_NO_ERROR;
686 L3INT Octet = 0;
687
688
689 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
690
691
692 if (Q931IsIEPresent(pMes->BearerCap)) {
693 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
694 return rc;
695 }
696
697
698 if (Q931IsIEPresent(pMes->Cause)) {
699 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
700 return rc;
701 }
702
703
704 if (Q931IsIEPresent(pMes->ProgInd)) {
705 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
706 return rc;
707 }
708
709
710 if (Q931IsIEPresent(pMes->Display)) {
711 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
712 return rc;
713 }
714
715
716 if (Q931IsIEPresent(pMes->HLComp)) {
717 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet)) != 0)
718 return rc;
719 }
720
721 *OSize = Octet;
722 return rc;
723 }
724
725
726
727
728
729
730 L3INT Q931Umes_Release(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
731 {
732 L3INT OOff = 0;
733 L3INT rc = Q931E_NO_ERROR;
734
735 while (IOff < Size) {
736 switch (IBuf[IOff]) {
737 case Q931ie_CAUSE:
738 case Q931ie_DISPLAY:
739 case Q931ie_SIGNAL:
740 case Q931ie_USER_USER:
741 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
742 if (rc != Q931E_NO_ERROR)
743 return rc;
744 break;
745 default:
746 return Q931E_ILLEGAL_IE;
747 break;
748 }
749 }
750
751 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
752 return Q931E_NO_ERROR;
753 }
754
755
756
757
758
759
760 L3INT Q931Pmes_Release(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
761 {
762 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
763 L3INT rc = Q931E_NO_ERROR;
764 L3INT Octet = 0;
765
766
767 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
768
769
770 if (Q931IsIEPresent(pMes->Cause)) {
771 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
772 return rc;
773 }
774
775
776 if (Q931IsIEPresent(pMes->Display)) {
777 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
778 return rc;
779 }
780
781
782 if (Q931IsIEPresent(pMes->Signal)) {
783 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
784 return rc;
785 }
786
787 *OSize = Octet;
788 return rc;
789 }
790
791
792
793
794
795
796 L3INT Q931Umes_ReleaseComplete(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
797 {
798 L3INT OOff = 0;
799 L3INT rc = Q931E_NO_ERROR;
800
801 while (IOff < Size) {
802 switch (IBuf[IOff]) {
803 case Q931ie_CAUSE:
804 case Q931ie_DISPLAY:
805 case Q931ie_SIGNAL:
806 case Q931ie_USER_USER:
807 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
808 if (rc != Q931E_NO_ERROR)
809 return rc;
810 break;
811 default:
812 return Q931E_ILLEGAL_IE;
813 break;
814 }
815 }
816
817 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
818 return Q931E_NO_ERROR;
819 }
820
821
822
823
824
825
826 L3INT Q931Pmes_ReleaseComplete(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
827 {
828 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
829 L3INT rc = Q931E_NO_ERROR;
830 L3INT Octet = 0;
831
832
833 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
834
835
836 if (Q931IsIEPresent(pMes->Cause)) {
837 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
838 return rc;
839 }
840
841
842 if (Q931IsIEPresent(pMes->Display)) {
843 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
844 return rc;
845 }
846
847
848 if (Q931IsIEPresent(pMes->Signal)) {
849 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
850 return rc;
851 }
852
853 *OSize = Octet;
854 return rc;
855 }
856
857
858
859
860
861
862 L3INT Q931Umes_Restart(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
863 {
864 L3INT OOff = 0;
865 L3INT rc = Q931E_NO_ERROR;
866
867 while (IOff < Size) {
868 switch (IBuf[IOff]) {
869 case Q931ie_CHANNEL_IDENTIFICATION:
870 case Q931ie_DISPLAY:
871 case Q931ie_RESTART_INDICATOR:
872 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
873 if (rc != Q931E_NO_ERROR)
874 return rc;
875 break;
876 default:
877 return Q931E_ILLEGAL_IE;
878 break;
879 }
880 }
881
882 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
883 return Q931E_NO_ERROR;
884 }
885
886
887
888
889
890
891 L3INT Q931Pmes_Restart(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
892 {
893 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
894 L3INT rc = Q931E_NO_ERROR;
895 L3INT Octet = 0;
896
897
898 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
899
900
901 if (Q931IsIEPresent(pMes->ChanID)) {
902 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
903 return rc;
904 }
905
906
907 if (Q931IsIEPresent(pMes->Display)) {
908 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
909 return rc;
910 }
911
912
913 if (Q931IsIEPresent(pMes->RestartInd)) {
914 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_RESTART_INDICATOR](pTrunk, Q931GetIEPtr(pMes->RestartInd,pMes->buf), OBuf, &Octet)) != 0)
915 return rc;
916 }
917
918 *OSize = Octet;
919 return rc;
920 }
921
922
923
924
925
926
927 L3INT Q931Umes_RestartAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *OBuf, L3INT IOff, L3INT Size)
928 {
929 Q931mes_Generic *mes = (Q931mes_Generic*)OBuf;
930 L3INT OOff = 0;
931 L3INT rc = Q931E_NO_ERROR;
932
933 while (IOff < Size) {
934 switch (IBuf[IOff]) {
935 case Q931ie_CHANNEL_IDENTIFICATION:
936 case Q931ie_DISPLAY:
937 case Q931ie_RESTART_INDICATOR:
938 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
939 if (rc != Q931E_NO_ERROR)
940 return rc;
941 break;
942 default:
943 return Q931E_ILLEGAL_IE;
944 break;
945 }
946 }
947
948 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
949 return Q931E_NO_ERROR;
950 }
951
952
953
954
955
956
957 L3INT Q931Pmes_RestartAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
958 {
959 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
960 L3INT rc = Q931E_NO_ERROR;
961 L3INT Octet = 0;
962
963
964 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
965
966
967 if (Q931IsIEPresent(pMes->ChanID)) {
968 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
969 return rc;
970 }
971
972
973 if (Q931IsIEPresent(pMes->Display)) {
974 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
975 return rc;
976 }
977
978
979 if (Q931IsIEPresent(pMes->RestartInd)) {
980 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_RESTART_INDICATOR](pTrunk, Q931GetIEPtr(pMes->RestartInd,pMes->buf), OBuf, &Octet)) != 0)
981 return rc;
982 }
983
984 *OSize = Octet;
985 return rc;
986 }
987
988
989
990
991
992
993 L3INT Q931Umes_Resume(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
994 {
995 L3INT OOff = 0;
996 L3INT rc = Q931E_NO_ERROR;
997
998 while (IOff < Size) {
999 switch (IBuf[IOff]) {
1000 case Q931ie_CALL_IDENTITY:
1001 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1002 if (rc != Q931E_NO_ERROR)
1003 return rc;
1004 break;
1005 default:
1006 return Q931E_ILLEGAL_IE;
1007 break;
1008 }
1009 }
1010
1011 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1012 return Q931E_NO_ERROR;
1013 }
1014
1015
1016
1017
1018
1019
1020 L3INT Q931Pmes_Resume(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1021 {
1022 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1023 L3INT rc = Q931E_NO_ERROR;
1024 L3INT Octet = 0;
1025
1026
1027 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1028
1029
1030 if (Q931IsIEPresent(pMes->CallID)) {
1031 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALL_IDENTITY](pTrunk, Q931GetIEPtr(pMes->CallID,pMes->buf), OBuf, &Octet)) != 0)
1032 return rc;
1033 }
1034
1035 *OSize = Octet;
1036 return rc;
1037 }
1038
1039
1040
1041
1042
1043
1044 L3INT Q931Umes_ResumeAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1045 {
1046 L3INT OOff = 0;
1047 L3INT rc = Q931E_NO_ERROR;
1048
1049 while (IOff < Size) {
1050 switch (IBuf[IOff]) {
1051 case Q931ie_CHANNEL_IDENTIFICATION:
1052 case Q931ie_DISPLAY:
1053 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1054 if (rc != Q931E_NO_ERROR)
1055 return rc;
1056 break;
1057 default:
1058 return Q931E_ILLEGAL_IE;
1059 break;
1060 }
1061 }
1062
1063 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1064 return Q931E_NO_ERROR;
1065 }
1066
1067
1068
1069
1070
1071
1072
1073 L3INT Q931Pmes_ResumeAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1074 {
1075 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1076 L3INT rc = Q931E_NO_ERROR;
1077 L3INT Octet = 0;
1078
1079
1080 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1081
1082
1083 if (Q931IsIEPresent(pMes->ChanID)) {
1084 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
1085 return rc;
1086 }
1087
1088
1089 if (Q931IsIEPresent(pMes->Display)) {
1090 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1091 return rc;
1092 }
1093
1094 *OSize = Octet;
1095 return rc;
1096 }
1097
1098
1099
1100
1101
1102
1103 L3INT Q931Umes_ResumeReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1104 {
1105 L3INT OOff = 0;
1106 L3INT rc = Q931E_NO_ERROR;
1107
1108 while (IOff < Size) {
1109 switch (IBuf[IOff]) {
1110 case Q931ie_CAUSE:
1111 case Q931ie_DISPLAY:
1112 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1113 if (rc != Q931E_NO_ERROR)
1114 return rc;
1115 break;
1116 default:
1117 return Q931E_ILLEGAL_IE;
1118 break;
1119 }
1120 }
1121
1122 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1123 return Q931E_NO_ERROR;
1124 }
1125
1126
1127
1128
1129
1130
1131
1132 L3INT Q931Pmes_ResumeReject(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1133 {
1134 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1135 L3INT rc = Q931E_NO_ERROR;
1136 L3INT Octet = 0;
1137
1138
1139 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1140
1141
1142 if (Q931IsIEPresent(pMes->Cause)) {
1143 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
1144 return rc;
1145 }
1146
1147
1148 if (Q931IsIEPresent(pMes->Display)) {
1149 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1150 return rc;
1151 }
1152
1153 *OSize = Octet;
1154 return rc;
1155 }
1156
1157 L3INT Q931Umes_Segment(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT OOff)
1158 {
1159 L3INT i = IOff;
1160
1161 return IOff - i;
1162 }
1163
1164 L3INT Q931Pmes_Segment(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1165 {
1166 L3BOOL RetCode = L3FALSE;
1167
1168 *OSize = 0;
1169 return RetCode;
1170 }
1171
1172
1173
1174
1175
1176
1177 L3INT Q931Umes_Setup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1178 {
1179 L3INT ir = 0;
1180 L3INT OOff = 0;
1181 L3INT rc = Q931E_NO_ERROR;
1182
1183 while (IOff < Size) {
1184 switch (IBuf[IOff]) {
1185 case Q931ie_SENDING_COMPLETE:
1186 IOff++;
1187 break;
1188
1189 case Q931ie_BEARER_CAPABILITY:
1190 case Q931ie_CHANNEL_IDENTIFICATION:
1191 case Q931ie_PROGRESS_INDICATOR:
1192 case Q931ie_NETWORK_SPECIFIC_FACILITIES:
1193 case Q931ie_DISPLAY:
1194 case Q931ie_DATETIME:
1195 case Q931ie_KEYPAD_FACILITY:
1196 case Q931ie_SIGNAL:
1197 case Q931ie_CALLING_PARTY_NUMBER:
1198 case Q931ie_CALLING_PARTY_SUBADDRESS:
1199 case Q931ie_CALLED_PARTY_NUMBER:
1200 case Q931ie_CALLED_PARTY_SUBADDRESS:
1201 case Q931ie_TRANSIT_NETWORK_SELECTION:
1202 case Q931ie_LOW_LAYER_COMPATIBILITY:
1203 case Q931ie_HIGH_LAYER_COMPATIBILITY:
1204 case Q931ie_FACILITY:
1205 case Q931ie_USER_USER:
1206 case Q931ie_REDIRECTING_NUMBER:
1207 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1208 if (rc != Q931E_NO_ERROR)
1209 return rc;
1210 break;
1211
1212 case Q931ie_REPEAT_INDICATOR:
1213 if (ir < 2) {
1214 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1215 ir++;
1216 } else {
1217 return Q931E_ILLEGAL_IE;
1218 }
1219 break;
1220
1221 default:
1222 return Q931E_ILLEGAL_IE;
1223 break;
1224 }
1225 }
1226
1227 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1228 return Q931E_NO_ERROR;
1229 }
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249 L3INT Q931Pmes_Setup(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1250 {
1251 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1252 L3INT rc = Q931E_NO_ERROR;
1253 L3INT Octet = 0;
1254
1255
1256 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1257
1258
1259 if (Q931IsIEPresent(pMes->SendComplete)) {
1260 OBuf[Octet++] = (L3UCHAR)Q931ie_SENDING_COMPLETE & 0xff;
1261 }
1262
1263
1264 if (Q931IsIEPresent(pMes->RepeatInd)) {
1265 OBuf[Octet++] = (L3UCHAR)Q931ie_REPEAT_INDICATOR & 0xff;
1266 }
1267
1268
1269 if (Q931IsIEPresent(pMes->BearerCap)) {
1270 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
1271 return rc;
1272 } else {
1273 rc = Q931E_BEARERCAP;
1274 }
1275
1276
1277 if (Q931IsIEPresent(pMes->ChanID)) {
1278 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
1279 return rc;
1280 }
1281
1282
1283 if (Q931IsIEPresent(pMes->ProgInd)) {
1284 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
1285 return rc;
1286 }
1287
1288
1289 if (Q931IsIEPresent(pMes->NetFac)) {
1290 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_NETWORK_SPECIFIC_FACILITIES](pTrunk, Q931GetIEPtr(pMes->NetFac,pMes->buf), OBuf, &Octet)) != 0)
1291 return rc;
1292 }
1293
1294
1295 if (Q931IsIEPresent(pMes->Display)) {
1296 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1297 return rc;
1298 }
1299
1300
1301 if (Q931IsIEPresent(pMes->DateTime)) {
1302 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DATETIME](pTrunk, Q931GetIEPtr(pMes->DateTime,pMes->buf), OBuf, &Octet)) != 0)
1303 return rc;
1304 }
1305
1306
1307 if (Q931IsIEPresent(pMes->KeypadFac)) {
1308 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_KEYPAD_FACILITY](pTrunk, Q931GetIEPtr(pMes->KeypadFac,pMes->buf), OBuf, &Octet)) != 0)
1309 return rc;
1310 }
1311
1312
1313 if (Q931IsIEPresent(pMes->Signal)) {
1314 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
1315 return rc;
1316 }
1317
1318
1319 if (Q931IsIEPresent(pMes->CallingNum)) {
1320 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLING_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CallingNum,pMes->buf), OBuf, &Octet)) != 0)
1321 return rc;
1322 }
1323
1324
1325 if (Q931IsIEPresent(pMes->CallingSub)) {
1326 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLING_PARTY_SUBADDRESS](pTrunk, Q931GetIEPtr(pMes->CallingSub,pMes->buf), OBuf, &Octet)) != 0)
1327 return rc;
1328 }
1329
1330
1331 if (Q931IsIEPresent(pMes->CalledNum)) {
1332 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CalledNum,pMes->buf), OBuf, &Octet)) != 0)
1333 return rc;
1334 }
1335
1336
1337 if (Q931IsIEPresent(pMes->CalledSub)) {
1338 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_SUBADDRESS](pTrunk, Q931GetIEPtr(pMes->CalledSub,pMes->buf), OBuf, &Octet)) != 0)
1339 return rc;
1340 }
1341
1342
1343 if (Q931IsIEPresent(pMes->TransNetSel)) {
1344 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_TRANSIT_NETWORK_SELECTION](pTrunk, Q931GetIEPtr(pMes->TransNetSel,pMes->buf), OBuf, &Octet)) != 0)
1345 return rc;
1346 }
1347
1348
1349 if (Q931IsIEPresent(pMes->LLRepeatInd)) {
1350 rc = Q931E_UNKNOWN_IE;
1351 }
1352
1353
1354 if (Q931IsIEPresent(pMes->LLComp)) {
1355 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_LOW_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->LLComp,pMes->buf), OBuf, &Octet)) != 0)
1356 return rc;
1357 }
1358
1359
1360 if (Q931IsIEPresent(pMes->HLComp)) {
1361 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet)) != 0)
1362 return rc;
1363 }
1364
1365 *OSize = Octet;
1366 return rc;
1367 }
1368
1369
1370
1371
1372
1373
1374 L3INT Q931Umes_SetupAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1375 {
1376 L3INT OOff = 0;
1377 L3INT rc = Q931E_NO_ERROR;
1378
1379 while (IOff < Size) {
1380 switch (IBuf[IOff]) {
1381 case Q931ie_CHANNEL_IDENTIFICATION:
1382 case Q931ie_PROGRESS_INDICATOR:
1383 case Q931ie_DISPLAY:
1384 case Q931ie_SIGNAL:
1385 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1386 if (rc != Q931E_NO_ERROR)
1387 return rc;
1388 break;
1389 default:
1390 return Q931E_ILLEGAL_IE;
1391 break;
1392 }
1393 }
1394
1395 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1396 return Q931E_NO_ERROR;
1397 }
1398
1399
1400
1401
1402
1403
1404 L3INT Q931Pmes_SetupAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1405 {
1406 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1407 L3INT rc = Q931E_NO_ERROR;
1408 L3INT Octet = 0;
1409
1410
1411 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1412
1413
1414 if (Q931IsIEPresent(pMes->ChanID)) {
1415 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
1416 return rc;
1417 }
1418
1419
1420 if (Q931IsIEPresent(pMes->ProgInd)) {
1421 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
1422 return rc;
1423 }
1424
1425
1426 if (Q931IsIEPresent(pMes->Display)) {
1427 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1428 return rc;
1429 }
1430
1431
1432 if (Q931IsIEPresent(pMes->Signal)) {
1433 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
1434 return rc;
1435 }
1436
1437 *OSize = Octet;
1438 return rc;
1439 }
1440
1441
1442
1443
1444
1445
1446 L3INT Q931Umes_Status(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1447 {
1448 L3INT OOff = 0;
1449 L3INT rc = Q931E_NO_ERROR;
1450
1451 while (IOff < Size) {
1452 switch (IBuf[IOff]) {
1453 case Q931ie_CAUSE:
1454 case Q931ie_CALL_STATE:
1455 case Q931ie_DISPLAY:
1456 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1457 if (rc != Q931E_NO_ERROR)
1458 return rc;
1459 break;
1460 default:
1461 return Q931E_ILLEGAL_IE;
1462 break;
1463 }
1464 }
1465
1466 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1467 return Q931E_NO_ERROR;
1468 }
1469
1470
1471
1472
1473
1474
1475
1476 L3INT Q931Pmes_Status(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1477 {
1478 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1479 L3INT rc = Q931E_NO_ERROR;
1480 L3INT Octet = 0;
1481
1482
1483 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1484
1485
1486 if (Q931IsIEPresent(pMes->Cause)) {
1487 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
1488 return rc;
1489 }
1490
1491
1492 if (Q931IsIEPresent(pMes->CallState)) {
1493 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALL_STATE](pTrunk, Q931GetIEPtr(pMes->CallState,pMes->buf), OBuf, &Octet)) != 0)
1494 return rc;
1495 }
1496
1497
1498 if (Q931IsIEPresent(pMes->Display)) {
1499 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1500 return rc;
1501 }
1502
1503 *OSize = Octet;
1504 return rc;
1505 }
1506
1507
1508
1509
1510
1511
1512 L3INT Q931Umes_StatusEnquiry(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1513 {
1514 L3INT OOff = 0;
1515 L3INT rc = Q931E_NO_ERROR;
1516
1517 while (IOff < Size) {
1518 switch (IBuf[IOff]) {
1519 case Q931ie_DISPLAY:
1520 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1521 if (rc != Q931E_NO_ERROR)
1522 return rc;
1523 break;
1524 default:
1525 return Q931E_ILLEGAL_IE;
1526 break;
1527 }
1528 }
1529
1530 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1531 return Q931E_NO_ERROR;
1532 }
1533
1534
1535
1536
1537
1538
1539 L3INT Q931Pmes_StatusEnquiry(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1540 {
1541 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1542 L3INT rc = Q931E_NO_ERROR;
1543 L3INT Octet = 0;
1544
1545
1546 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1547
1548
1549 if (Q931IsIEPresent(pMes->Display)) {
1550 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1551 return rc;
1552 }
1553
1554 *OSize = Octet;
1555
1556 return rc;
1557 }
1558
1559
1560
1561
1562
1563
1564 L3INT Q931Umes_Suspend(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1565 {
1566 L3INT OOff = 0;
1567 L3INT rc = Q931E_NO_ERROR;
1568
1569 while (IOff < Size) {
1570 switch (IBuf[IOff]) {
1571 case Q931ie_CALL_IDENTITY:
1572 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1573 if (rc != Q931E_NO_ERROR)
1574 return rc;
1575 break;
1576 default:
1577 return Q931E_ILLEGAL_IE;
1578 break;
1579 }
1580 }
1581
1582 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1583 return Q931E_NO_ERROR;
1584 }
1585
1586
1587
1588
1589
1590
1591 L3INT Q931Pmes_Suspend(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1592 {
1593 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1594 L3INT rc = Q931E_NO_ERROR;
1595 L3INT Octet = 0;
1596
1597
1598 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1599
1600
1601 if (Q931IsIEPresent(pMes->CallID)) {
1602 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALL_IDENTITY](pTrunk, Q931GetIEPtr(pMes->CallID,pMes->buf), OBuf, &Octet)) != 0)
1603 return rc;
1604 }
1605
1606 *OSize = Octet;
1607 return rc;
1608 }
1609
1610
1611
1612
1613
1614
1615 L3INT Q931Umes_SuspendAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1616 {
1617 L3INT OOff = 0;
1618 L3INT rc = Q931E_NO_ERROR;
1619
1620 while (IOff < Size) {
1621 switch (IBuf[IOff]) {
1622 case Q931ie_DISPLAY:
1623 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1624 if (rc != Q931E_NO_ERROR)
1625 return rc;
1626 break;
1627 default:
1628 return Q931E_ILLEGAL_IE;
1629 break;
1630 }
1631 }
1632
1633 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1634 return Q931E_NO_ERROR;
1635 }
1636
1637
1638
1639
1640
1641
1642 L3INT Q931Pmes_SuspendAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1643 {
1644 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1645 L3INT rc = Q931E_NO_ERROR;
1646 L3INT Octet = 0;
1647
1648
1649 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1650
1651
1652 if (Q931IsIEPresent(pMes->Display)) {
1653 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1654 return rc;
1655 }
1656
1657 *OSize = Octet;
1658 return rc;
1659 }
1660
1661
1662
1663
1664
1665
1666 L3INT Q931Umes_SuspendReject(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1667 {
1668 L3INT OOff = 0;
1669 L3INT rc = Q931E_NO_ERROR;
1670
1671 while (IOff < Size) {
1672 switch (IBuf[IOff]) {
1673 case Q931ie_CAUSE:
1674 case Q931ie_DISPLAY:
1675 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1676 if (rc != Q931E_NO_ERROR)
1677 return rc;
1678 break;
1679 default:
1680 return Q931E_ILLEGAL_IE;
1681 break;
1682 }
1683 }
1684
1685 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1686 return Q931E_NO_ERROR;
1687 }
1688
1689
1690
1691
1692
1693
1694 L3INT Q931Pmes_SuspendReject(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1695 {
1696 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1697 L3INT rc = Q931E_NO_ERROR;
1698 L3INT Octet = 0;
1699
1700
1701 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1702
1703
1704 if (Q931IsIEPresent(pMes->Cause)) {
1705 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CAUSE](pTrunk, Q931GetIEPtr(pMes->Cause,pMes->buf), OBuf, &Octet)) != 0)
1706 return rc;
1707 }
1708
1709
1710 if (Q931IsIEPresent(pMes->Display)) {
1711 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
1712 return rc;
1713 }
1714
1715 *OSize = Octet;
1716 return rc;
1717 }
1718
1719
1720
1721
1722
1723
1724 L3INT Q931Umes_UserInformation(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT I, L3INT O)
1725 {
1726 L3BOOL RetCode = L3FALSE;
1727
1728 NoWarning(mes);
1729 NoWarning(IBuf);
1730
1731 return RetCode;
1732 }
1733
1734
1735
1736
1737
1738
1739 L3INT Q931Pmes_UserInformation(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1740 {
1741 L3BOOL RetCode = L3FALSE;
1742
1743 NoWarning(OBuf);
1744 NoWarning(IBuf);
1745
1746 *OSize = 0;
1747
1748 return RetCode;
1749 }
1750
1751
1752
1753
1754
1755
1756 L3INT Q931Umes_Service(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1757 {
1758 L3INT OOff = 0;
1759 L3INT rc = Q931E_NO_ERROR;
1760
1761 while (IOff < Size) {
1762 switch (IBuf[IOff]) {
1763 case Q931ie_CHANNEL_IDENTIFICATION:
1764 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1765 if (rc != Q931E_NO_ERROR)
1766 return rc;
1767 break;
1768 case Q931ie_CHANGE_STATUS:
1769 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1770 if (rc != Q931E_NO_ERROR)
1771 return rc;
1772 break;
1773 default:
1774 return Q931E_ILLEGAL_IE;
1775 break;
1776 }
1777 }
1778
1779 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1780 return Q931E_NO_ERROR;
1781 }
1782
1783
1784
1785
1786
1787
1788 L3INT Q931Pmes_Service(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1789 {
1790 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1791 L3INT rc = Q931E_NO_ERROR;
1792 L3INT Octet = 0;
1793
1794
1795 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1796
1797
1798 if (Q931IsIEPresent(pMes->ChanID)) {
1799 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
1800 return rc;
1801 }
1802
1803 if (Q931IsIEPresent(pMes->ChangeStatus)) {
1804 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANGE_STATUS](pTrunk, Q931GetIEPtr(pMes->ChangeStatus,pMes->buf), OBuf, &Octet)) != 0)
1805 return rc;
1806 }
1807
1808 *OSize = Octet;
1809 return rc;
1810 }
1811
1812
1813
1814
1815
1816
1817 L3INT Q931Umes_ServiceAck(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
1818 {
1819 L3INT OOff = 0;
1820 L3INT rc = Q931E_NO_ERROR;
1821
1822 while (IOff < Size) {
1823 switch (IBuf[IOff]) {
1824 case Q931ie_CHANNEL_IDENTIFICATION:
1825 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1826 if (rc != Q931E_NO_ERROR)
1827 return rc;
1828 break;
1829 case Q931ie_CHANGE_STATUS:
1830 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
1831 if (rc != Q931E_NO_ERROR)
1832 return rc;
1833 break;
1834 default:
1835 return Q931E_ILLEGAL_IE;
1836 break;
1837 }
1838 }
1839
1840 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
1841 return Q931E_NO_ERROR;
1842 }
1843
1844
1845
1846
1847
1848
1849 L3INT Q931Pmes_ServiceAck(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
1850 {
1851 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
1852 L3INT rc = Q931E_NO_ERROR;
1853 L3INT Octet = 0;
1854
1855
1856 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
1857
1858 if (Q931IsIEPresent(pMes->ChangeStatus)) {
1859 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANGE_STATUS](pTrunk, Q931GetIEPtr(pMes->ChangeStatus,pMes->buf), OBuf, &Octet)) != 0)
1860 return rc;
1861 }
1862
1863 if (Q931IsIEPresent(pMes->ChanID)) {
1864 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
1865 return rc;
1866 }
1867
1868 *OSize = Octet;
1869 return rc;
1870 }