This source file includes following definitions.
- nationalUmes_Setup
- nationalPmes_Setup
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 #include "national.h"
48
49
50
51
52
53
54 L3INT nationalUmes_Setup(Q931_TrunkInfo_t *pTrunk, L3UCHAR *IBuf, Q931mes_Generic *mes, L3INT IOff, L3INT Size)
55 {
56 L3INT ir = 0;
57 L3INT OOff = 0;
58 L3INT rc = Q931E_NO_ERROR;
59 L3UCHAR last_codeset = 0, codeset = 0;
60 L3UCHAR shift_lock = 1;
61
62 while (IOff < Size) {
63 if (!shift_lock) {
64 codeset = last_codeset;
65 }
66
67 if ((IBuf[IOff] & 0xF0) == Q931ie_SHIFT ) {
68 shift_lock = (IBuf[IOff] & 0x08);
69 if (shift_lock) {
70 last_codeset = codeset;
71 }
72 codeset = ((IBuf[IOff] & 0x07));
73 IOff++;
74 }
75
76 if (codeset == 0) {
77 switch (IBuf[IOff]) {
78 case Q931ie_SENDING_COMPLETE:
79 case Q931ie_BEARER_CAPABILITY:
80 case Q931ie_CHANNEL_IDENTIFICATION:
81 case Q931ie_PROGRESS_INDICATOR:
82 case Q931ie_NETWORK_SPECIFIC_FACILITIES:
83 case Q931ie_DISPLAY:
84 case Q931ie_DATETIME:
85 case Q931ie_KEYPAD_FACILITY:
86 case Q931ie_SIGNAL:
87 case Q931ie_CALLING_PARTY_NUMBER:
88 case Q931ie_CALLING_PARTY_SUBADDRESS:
89 case Q931ie_CALLED_PARTY_NUMBER:
90 case Q931ie_CALLED_PARTY_SUBADDRESS:
91 case Q931ie_TRANSIT_NETWORK_SELECTION:
92 case Q931ie_LOW_LAYER_COMPATIBILITY:
93 case Q931ie_HIGH_LAYER_COMPATIBILITY:
94 case Q931ie_FACILITY:
95 case Q931ie_REDIRECTING_NUMBER:
96 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
97 if (rc != Q931E_NO_ERROR)
98 return rc;
99 break;
100 case Q931ie_REPEAT_INDICATOR:
101 if (ir < 2) {
102 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
103 ir++;
104 } else {
105 return Q931E_ILLEGAL_IE;
106 }
107 break;
108 default:
109 return Q931E_ILLEGAL_IE;
110 break;
111 }
112 } else if (codeset == 6) {
113 switch (IBuf[IOff]) {
114 case Q931ie_GENERIC_DIGITS:
115 rc = Q931Uie[pTrunk->Dialect][IBuf[IOff]](pTrunk, mes, &IBuf[IOff], &mes->buf[OOff], &IOff, &OOff);
116 if (rc != Q931E_NO_ERROR)
117 return rc;
118 break;
119 default:
120 return Q931E_ILLEGAL_IE;
121 break;
122 }
123
124 } else {
125 return Q931E_ILLEGAL_IE;
126 }
127 }
128 mes->Size = sizeof(Q931mes_Generic) - 1 + OOff;
129 return Q931E_NO_ERROR;
130 }
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150 L3INT nationalPmes_Setup(Q931_TrunkInfo_t *pTrunk, Q931mes_Generic *IBuf, L3INT ISize, L3UCHAR *OBuf, L3INT *OSize)
151 {
152 L3INT rc = Q931E_NO_ERROR;
153 Q931mes_Generic *pMes = (Q931mes_Generic *)IBuf;
154 L3INT Octet = 0;
155
156
157 Q931MesgHeader(pTrunk, pMes, OBuf, *OSize, &Octet);
158
159
160 if (Q931IsIEPresent(pMes->SendComplete)) {
161 OBuf[Octet++] = (L3UCHAR)(pMes->SendComplete & 0x00ff);
162 }
163
164
165 if (Q931IsIEPresent(pMes->RepeatInd)) {
166 OBuf[Octet++] = (L3UCHAR)(pMes->RepeatInd & 0x00ff);
167 }
168
169
170 if (Q931IsIEPresent(pMes->BearerCap)) {
171 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_BEARER_CAPABILITY](pTrunk, Q931GetIEPtr(pMes->BearerCap,pMes->buf), OBuf, &Octet)) != 0)
172 return rc;
173 }
174 else {
175 rc = Q931E_BEARERCAP;
176 }
177
178
179 if (Q931IsIEPresent(pMes->ChanID)) {
180 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CHANNEL_IDENTIFICATION](pTrunk, Q931GetIEPtr(pMes->ChanID,pMes->buf), OBuf, &Octet)) != 0)
181 return rc;
182 }
183
184
185 if (Q931IsIEPresent(pMes->ProgInd)) {
186 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_PROGRESS_INDICATOR](pTrunk, Q931GetIEPtr(pMes->ProgInd,pMes->buf), OBuf, &Octet)) != 0)
187 return rc;
188 }
189
190
191 if (Q931IsIEPresent(pMes->NetFac)) {
192 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_NETWORK_SPECIFIC_FACILITIES](pTrunk, Q931GetIEPtr(pMes->NetFac,pMes->buf), OBuf, &Octet)) != 0)
193 return rc;
194 }
195
196
197 if (Q931IsIEPresent(pMes->Display)) {
198 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DISPLAY](pTrunk, Q931GetIEPtr(pMes->Display,pMes->buf), OBuf, &Octet)) != 0)
199 return rc;
200 }
201
202
203 if (Q931IsIEPresent(pMes->DateTime)) {
204 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_DATETIME](pTrunk, Q931GetIEPtr(pMes->DateTime,pMes->buf), OBuf, &Octet)) != 0)
205 return rc;
206 }
207
208
209 if (Q931IsIEPresent(pMes->KeypadFac)) {
210 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_KEYPAD_FACILITY](pTrunk, Q931GetIEPtr(pMes->KeypadFac,pMes->buf), OBuf, &Octet)) != 0)
211 return rc;
212 }
213
214
215 if (Q931IsIEPresent(pMes->Signal)) {
216 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_SIGNAL](pTrunk, Q931GetIEPtr(pMes->Signal,pMes->buf), OBuf, &Octet)) != 0)
217 return rc;
218 }
219
220
221 if (Q931IsIEPresent(pMes->CallingNum)) {
222 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLING_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CallingNum,pMes->buf), OBuf, &Octet)) != 0)
223 return rc;
224 }
225
226
227 if (Q931IsIEPresent(pMes->CallingSub)) {
228 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLING_PARTY_SUBADDRESS](pTrunk, Q931GetIEPtr(pMes->CallingSub,pMes->buf), OBuf, &Octet)) != 0)
229 return rc;
230 }
231
232
233 if (Q931IsIEPresent(pMes->CalledNum)) {
234 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_NUMBER](pTrunk, Q931GetIEPtr(pMes->CalledNum,pMes->buf), OBuf, &Octet)) != 0)
235 return rc;
236 }
237
238
239 if (Q931IsIEPresent(pMes->CalledSub)) {
240 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_CALLED_PARTY_SUBADDRESS](pTrunk, Q931GetIEPtr(pMes->CalledSub,pMes->buf), OBuf, &Octet)) != 0)
241 return rc;
242 }
243
244
245 if (Q931IsIEPresent(pMes->TransNetSel)) {
246 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_TRANSIT_NETWORK_SELECTION](pTrunk, Q931GetIEPtr(pMes->TransNetSel,pMes->buf), OBuf, &Octet)) != 0)
247 return rc;
248 }
249
250
251 if (Q931IsIEPresent(pMes->LLRepeatInd)) {
252 rc = Q931E_UNKNOWN_IE;
253 }
254
255
256 if (Q931IsIEPresent(pMes->LLComp)) {
257 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_LOW_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->LLComp,pMes->buf), OBuf, &Octet)) != 0)
258 return rc;
259 }
260
261
262 if (Q931IsIEPresent(pMes->HLComp)) {
263 if ((rc = Q931Pie[pTrunk->Dialect][Q931ie_HIGH_LAYER_COMPATIBILITY](pTrunk, Q931GetIEPtr(pMes->HLComp,pMes->buf), OBuf, &Octet)) != 0)
264 return rc;
265 }
266
267 *OSize = Octet;
268 return rc;
269 }