This source file includes following definitions.
- ATT5ESSUmes_Setup
- ATT5ESSPmes_Setup
- ATT5ESSUmes_0x0f
- ATT5ESSPmes_0x0f
- ATT5ESSUmes_0x07
- ATT5ESSPmes_0x07
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
45
46
47
48
49
50 #include "5ESS.h"
51
52
53
54
55
56
57 L3INT ATT5ESSUmes_Setup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
58 {
59 L3INT ir = 0;
60 L3INT OOff = 0;
61 L3INT rc = Q931E_NO_ERROR;
62 L3UCHAR last_codeset = 0, codeset = 0;
63 L3UCHAR shift_nolock = 1;
64
65 while (IOff < Size) {
66
67 if (shift_nolock) {
68 codeset = last_codeset;
69 }
70
71 if ((IBuf[IOff] & 0xF0) == Q931ie_SHIFT) {
72 shift_nolock = (IBuf[IOff] & 0x08);
73 if (shift_nolock) {
74 last_codeset = codeset;
75 }
76 codeset = ((IBuf[IOff] & 0x07));
77 IOff++;
78 }
79
80 if (codeset == 0) {
81 switch (IBuf[IOff])
82 {
83 case Q931ie_SENDING_COMPLETE:
84 case Q931ie_BEARER_CAPABILITY:
85 case Q931ie_CHANNEL_IDENTIFICATION:
86 case Q931ie_PROGRESS_INDICATOR:
87 case Q931ie_NETWORK_SPECIFIC_FACILITIES:
88 case Q931ie_DISPLAY:
89 case Q931ie_DATETIME:
90 case Q931ie_KEYPAD_FACILITY:
91 case Q931ie_SIGNAL:
92 case Q931ie_CALLING_PARTY_NUMBER:
93 case Q931ie_CALLING_PARTY_SUBADDRESS:
94 case Q931ie_CALLED_PARTY_NUMBER:
95 case Q931ie_CALLED_PARTY_SUBADDRESS:
96 case Q931ie_TRANSIT_NETWORK_SELECTION:
97 case Q931ie_LOW_LAYER_COMPATIBILITY:
98 case Q931ie_HIGH_LAYER_COMPATIBILITY:
99 case Q931ie_FACILITY:
100 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
101 if (rc != Q931E_NO_ERROR)
102 return rc;
103 break;
104 case Q931ie_REPEAT_INDICATOR:
105 if (ir < 2) {
106 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
107 ir++;
108 } else {
109 return Q931E_ILLEGAL_IE;
110 }
111 break;
112 default:
113 return Q931E_ILLEGAL_IE;
114 break;
115 }
116 } else if (codeset == 6) {
117 switch (IBuf[IOff])
118 {
119 case Q931ie_GENERIC_DIGITS:
120 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
121 if (rc != Q931E_NO_ERROR)
122 return rc;
123 break;
124 default:
125 return Q931E_ILLEGAL_IE;
126 break;
127 }
128 } else if (codeset == 7) {
129 switch (IBuf[IOff])
130 {
131 case Q931ie_DISPLAY:
132 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
133 if (rc != Q931E_NO_ERROR)
134 return rc;
135 break;
136 default:
137 return Q931E_ILLEGAL_IE;
138 break;
139 }
140 } else {
141 return Q931E_ILLEGAL_IE;
142 }
143 }
144 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
145 return Q931E_NO_ERROR;
146 }
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166 L3INT ATT5ESSPmes_Setup(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
167 {
168 L3INT rc = Q931E_NO_ERROR;
169 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
170 L3INT Octet = 0;
171
172
173 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
174
175
176 if (Q931IsIEPresent(pMes->SendComplete)) {
177 OBuf[Octet++] = (L3UCHAR)(pMes->SendComplete & 0x00ff);
178 }
179
180
181 if (Q931IsIEPresent(pMes->RepeatInd)) {
182 OBuf[Octet++] = (L3UCHAR)(pMes->RepeatInd & 0x00ff);
183 }
184
185
186 if (Q931IsIEPresent(pMes->BearerCap)) {
187 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet))!=0)
188 return rc;
189 } else {
190 rc = Q931E_BEARERCAP;
191 }
192
193
194 if (Q931IsIEPresent(pMes->ChanID)) {
195 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet))!=0)
196 return rc;
197 }
198
199
200 if (Q931IsIEPresent(pMes->ProgInd)) {
201 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet))!=0)
202 return rc;
203 }
204
205
206 if (Q931IsIEPresent(pMes->NetFac)) {
207 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_NETWORK_SPECIFIC_FACILITIES](pTrunk, Q931GetIEPtr(pMes->NetFac,pMes->buf), OBuf, &Octet))!=0)
208 return rc;
209 }
210
211
212 if (Q931IsIEPresent(pMes->Display)) {
213 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet))!=0)
214 return rc;
215 }
216
217
218 if (Q931IsIEPresent(pMes->DateTime)) {
219 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DATETIME](pTrunk, Q931GetIEPtr(pMes->DateTime,pMes->buf), OBuf, &Octet))!=0)
220 return rc;
221 }
222
223
224 if (Q931IsIEPresent(pMes->KeypadFac)) {
225 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_KEYPAD_FACILITY](pTrunk, Q931GetIEPtr(pMes->KeypadFac,pMes->buf), OBuf, &Octet))!=0)
226 return rc;
227 }
228
229
230 if (Q931IsIEPresent(pMes->Signal)) {
231 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet))!=0)
232 return rc;
233 }
234
235
236 if (Q931IsIEPresent(pMes->CallingNum)) {
237 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLING_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CallingNum,pMes->buf), OBuf, &Octet))!=0)
238 return rc;
239 }
240
241
242 if (Q931IsIEPresent(pMes->CallingSub)) {
243 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLING_PARTY_SUBADDRESS](pTrunk, Q931GetIEPtr(pMes->CallingSub,pMes->buf), OBuf, &Octet))!=0)
244 return rc;
245 }
246
247
248 if (Q931IsIEPresent(pMes->CalledNum)) {
249 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CalledNum,pMes->buf), OBuf, &Octet))!=0)
250 return rc;
251 }
252
253
254 if (Q931IsIEPresent(pMes->CalledSub)) {
255 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_SUBADDRESS](pTrunk, Q931GetIEPtr(pMes->CalledSub,pMes->buf), OBuf, &Octet))!=0)
256 return rc;
257 }
258
259
260 if (Q931IsIEPresent(pMes->TransNetSel)) {
261 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_TRANSIT_NETWORK_SELECTION](pTrunk, Q931GetIEPtr(pMes->TransNetSel,pMes->buf), OBuf, &Octet))!=0)
262 return rc;
263 }
264
265
266 if (Q931IsIEPresent(pMes->LLRepeatInd)) {
267 rc = Q931E_UNKNOWN_IE;
268 }
269
270
271 if (Q931IsIEPresent(pMes->LLComp)) {
272 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_LOW_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->LLComp,pMes->buf), OBuf, &Octet))!=0)
273 return rc;
274 }
275
276
277 if (Q931IsIEPresent(pMes->HLComp)) {
278 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet))!=0)
279 return rc;
280 }
281
282 *OSize = Octet;
283 return rc;
284 }
285
286
287
288
289
290
291
292 L3INT ATT5ESSUmes_0x0f(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
293 {
294 if (mes->ProtDisc == 8) {
295 return Q931Umes_ConnectAck(pTrunk, IBuf, mes, IOff, Size);
296 }
297
298 if (mes->ProtDisc == 3) {
299 return Q931Umes_Service(pTrunk, IBuf, mes, IOff, Size);
300 }
301
302 return Q931E_UNKNOWN_MESSAGE;
303 }
304
305
306
307
308
309
310 L3INT ATT5ESSPmes_0x0f(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
311 {
312 Q931mes_Generic *mes = (Q931mes_Generic *)IBuf;
313
314 if (mes->ProtDisc == 8) {
315 return Q931Pmes_ConnectAck(pTrunk, IBuf, ISize, OBuf, OSize);
316 }
317
318 if (mes->ProtDisc == 3) {
319 return Q931Pmes_Service(pTrunk, IBuf, ISize, OBuf, OSize);
320 }
321
322 return Q931E_UNKNOWN_MESSAGE;
323 }
324
325
326
327
328
329
330 L3INT ATT5ESSUmes_0x07(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
331 {
332 if (mes->ProtDisc == 8) {
333 return Q931Umes_Connect(pTrunk, IBuf, mes, IOff, Size);
334 }
335
336 if (mes->ProtDisc == 3) {
337 return Q931Umes_ServiceAck(pTrunk, IBuf, mes, IOff, Size);
338 }
339
340 return Q931E_UNKNOWN_MESSAGE;
341 }
342
343
344
345
346
347
348 L3INT ATT5ESSPmes_0x07(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
349 {
350 Q931mes_Generic *mes = (Q931mes_Generic *)IBuf;
351
352 if (mes->ProtDisc == 8) {
353 return Q931Pmes_Connect(pTrunk, IBuf, ISize, OBuf, OSize);
354 }
355
356 if (mes->ProtDisc == 3) {
357 return Q931Pmes_ServiceAck(pTrunk, IBuf, ISize, OBuf, OSize);
358 }
359
360 return Q931E_UNKNOWN_MESSAGE;
361 }