/src/wireshark/epan/dissectors/packet-dpnss.c
Line | Count | Source |
1 | | /* packet-dpnss.c |
2 | | * Routines for DPNSS/DASS2 dissection |
3 | | * Copyright 2007, Anders Broman <anders.broman[at]ericsson.com> |
4 | | * |
5 | | * Supplementary string parameter table and testing by Tomas Muehlhoff. |
6 | | * |
7 | | * Wireshark - Network traffic analyzer |
8 | | * By Gerald Combs <gerald@wireshark.org> |
9 | | * Copyright 1998 Gerald Combs |
10 | | * |
11 | | * SPDX-License-Identifier: GPL-2.0-or-later |
12 | | * |
13 | | * References: |
14 | | * ND1301:2001/03 http://www.nicc.org.uk/nicc-public/Public/interconnectstandards/dpnss/nd1301_2004_11.pdf |
15 | | * http://acacia-net.com/wwwcla/protocol/dass2_l3.htm |
16 | | * |
17 | | * AI Generated by google: |
18 | | * DPNSS (Digital Private Network Signalling System) is a telephony network protocol for linking |
19 | | * Private Automatic Branch Exchanges (PBXs) over digital trunk lines, allowing shared advanced calling features |
20 | | * (like Call Forward, Caller ID, Call Transfer) across multiple sites as if on one system. Developed from BT's DASS, |
21 | | * it uses a separate data channel (D-channel, often Time Slot 16 on E1 links) for signaling, |
22 | | * enabling seamless voice services across different manufacturers' equipment within a private network. |
23 | | * |
24 | | * Key Aspects of DPNSS |
25 | | * Purpose: Extends single-PBX features (like extensions, voicemail integration) across interconnected PBXs in a private network. |
26 | | * Origin: Defined by British Telecom (BT) for private network interoperability. |
27 | | * Technology: Operates over digital circuits (like E1/T1) using ISDN interfaces, reserving specific time slots for signaling. |
28 | | * Interoperability: Allows equipment from different vendors (e.g., Mitel, Meridian) to communicate advanced services. |
29 | | * Services Supported: Includes call forwarding, caller ID, message waiting indication (MWI), and call transfer. |
30 | | * Standards: Defined in documents like BTNR188 and RFC 4129 for extensions. |
31 | | * How it Works |
32 | | * Signaling Channel: Uses a dedicated data channel (D-channel) within the digital link for control messages, separate from voice channels (B-channels). |
33 | | * Feature Negotiation: PBXs use the DPNSS protocol to signal and offer supplementary services to each other. |
34 | | * Network Configuration: Administrators set up trunk groups and routing to connect PBXs, creating a unified network. |
35 | | * DPNSS vs. QSIG |
36 | | * DPNSS is a private network protocol, while QSIG (Signalling System No. 7 based) is a more formal standard for public and private networks. |
37 | | * Gateways are often used to connect DPNSS networks to QSIG networks, with basic calls typically passing through, as shown in this Mitel documentation. |
38 | | */ |
39 | | |
40 | | #include "config.h" |
41 | | |
42 | | #include <epan/packet.h> |
43 | | #include <epan/expert.h> |
44 | | #include <epan/tfs.h> |
45 | | |
46 | | void proto_register_dpnss(void); |
47 | | |
48 | | /* Initialize the protocol and registered fields */ |
49 | | static int proto_dpnss; |
50 | | static int hf_dpnss_msg_grp_id; |
51 | | static int hf_dpnss_cc_msg_type; |
52 | | static int hf_dpnss_e2e_msg_type; |
53 | | static int hf_dpnss_LbL_msg_type; |
54 | | static int hf_dpnss_ext_bit; |
55 | | static int hf_dpnss_ext_bit_notall; |
56 | | static int hf_dpnss_sic_type; |
57 | | static int hf_dpnss_sic_details_for_speech; |
58 | | static int hf_dpnss_sic_details_for_data1; |
59 | | static int hf_dpnss_sic_details_for_data2; |
60 | | static int hf_dpnss_dest_addr; |
61 | | static int hf_dpnss_sic_oct2_data_type; |
62 | | static int hf_dpnss_sic_oct2_duplex; |
63 | | static int hf_dpnss_sic_oct2_sync_data_format; |
64 | | static int hf_dpnss_sic_oct2_sync_byte_timing; |
65 | | static int hf_dpnss_sic_oct2_net_ind_clk; |
66 | | static int hf_dpnss_sic_oct2_async_data; |
67 | | static int hf_dpnss_sic_oct2_async_flow_ctrl; |
68 | | static int hf_dpnss_clearing_cause; |
69 | | static int hf_dpnss_rejection_cause; |
70 | | static int hf_dpnss_man_code; |
71 | | static int hf_dpnss_subcode; |
72 | | static int hf_dpnss_maintenance_action; |
73 | | /* Generated from convert_proto_tree_add_text.pl */ |
74 | | static int hf_dpnss_indication_field; |
75 | | static int hf_dpnss_user_information; |
76 | | static int hf_dpnss_selection_field; |
77 | | static int hf_dpnss_sup_str; |
78 | | static int hf_dpnss_parameter; |
79 | | |
80 | | /* parameters */ |
81 | | static int hf_dpnss_a_b_party_addr; |
82 | | static int hf_dpnss_call_idx; |
83 | | |
84 | 0 | #define DPNNS_MESSAGE_GROUP_CC 0 |
85 | 0 | #define DPNNS_MESSAGE_GROUP_E2E 2 |
86 | 0 | #define DPNNS_MESSAGE_GROUP_LbL 4 |
87 | | |
88 | 0 | #define DPNSS_CC_MSG_ISRM_C 0 |
89 | 0 | #define DPNSS_CC_MSG_ISRM_I 1 |
90 | 0 | #define DPNSS_CC_MSG_RM_C 2 |
91 | 0 | #define DPNSS_CC_MSG_RM_I 3 |
92 | 0 | #define DPNSS_CC_MSG_CS 4 |
93 | 0 | #define DPNSS_CC_MSG_CCM 5 |
94 | 0 | #define DPNSS_CC_MSG_NIM 6 |
95 | 0 | #define DPNSS_CC_MSG_CA 7 |
96 | 0 | #define DPNSS_CC_MSG_CRM 8 |
97 | 0 | #define DPNSS_CC_MSG_NAM 9 |
98 | 0 | #define DPNSS_CC_MSG_RRM 10 |
99 | 0 | #define DPNSS_CC_MSG_SSRM_I 11 |
100 | 0 | #define DPNSS_CC_MSG_SSRM_C 12 |
101 | | |
102 | | /* Initialize the subtree pointers */ |
103 | | static int ett_dpnss; |
104 | | static int ett_dpnss_sel_field; |
105 | | static int ett_dpnss_sic_field; |
106 | | static int ett_dpnss_ind_field; |
107 | | static int ett_dpnss_sup_str; |
108 | | |
109 | | static expert_field ei_dpnss_not_supported_yet; |
110 | | static expert_field ei_dpnss_msg_grp_id; |
111 | | |
112 | | |
113 | | static const value_string dpnss_msg_grp_id_vals[] = { |
114 | | {0, "Call Control Message Group"}, |
115 | | {2, "End-to-End Message Group"}, |
116 | | {4, "Link-by-Link Message Group"}, |
117 | | {0, NULL } |
118 | | }; |
119 | | |
120 | | static const value_string dpnss_cc_msg_type_vals[] = { |
121 | | {DPNSS_CC_MSG_ISRM_C, "INITIAL SERVICE REQUEST Message (COMPLETE) - ISRM(C)"}, |
122 | | {DPNSS_CC_MSG_ISRM_I, "INITIAL SERVICE REQUEST Message (INCOMPLETE) - ISRM(I)"}, |
123 | | {DPNSS_CC_MSG_RM_C, "RECALL Message (COMPLETE) - RM(C)"}, |
124 | | {DPNSS_CC_MSG_RM_I, "RECALL Message (INCOMPLETE) - RM(I)"}, |
125 | | {DPNSS_CC_MSG_CS, "CHANNEL SEIZED - CS"}, |
126 | | {DPNSS_CC_MSG_CCM, "CALL CONNECTED Message - CCM"}, |
127 | | {DPNSS_CC_MSG_NIM, "NETWORK INDICATION Message - NIM"}, |
128 | | {DPNSS_CC_MSG_CA, "CALL ARRIVAL Message - CA"}, |
129 | | {DPNSS_CC_MSG_CRM, "CLEAR REQUEST Message - CRM/CLEAR INDICATION Message - CIM"}, /* Humm chek 2.1.7/2.1.8 - depends on dir? */ |
130 | | {DPNSS_CC_MSG_NAM, "NUMBER ACKNOWLEDGE Message - NAM"}, |
131 | | {DPNSS_CC_MSG_RRM, "RECALL REJECTION Message - RRM"}, |
132 | | {DPNSS_CC_MSG_SSRM_I, "SUBSEQUENT SERVICE REQUEST Message (INCOMPLETE) - SSRM(I)"}, |
133 | | {DPNSS_CC_MSG_SSRM_C, "SUBSEQUENT SERVICE REQUEST Message (COMPLETE) - SSRM(C)"}, |
134 | | { 0, NULL } |
135 | | }; |
136 | | |
137 | | |
138 | | static const value_string dpnss_cc_msg_short_type_vals[] = { |
139 | | {DPNSS_CC_MSG_ISRM_C, "ISRM(C)"}, |
140 | | {DPNSS_CC_MSG_ISRM_I, "ISRM(I)"}, |
141 | | {DPNSS_CC_MSG_RM_C, "RM(C)"}, |
142 | | {DPNSS_CC_MSG_RM_I, "RM(I)"}, |
143 | | {DPNSS_CC_MSG_CS, "CS"}, |
144 | | {DPNSS_CC_MSG_CCM, "CCM"}, |
145 | | {DPNSS_CC_MSG_CA, "CA"}, |
146 | | {DPNSS_CC_MSG_NIM, "NIM"}, |
147 | | {DPNSS_CC_MSG_CRM, "CRM/CIM"}, /* Humm chek 2.1.7/2.1.8 - depends on dir? */ |
148 | | {DPNSS_CC_MSG_NAM, "NAM"}, |
149 | | {DPNSS_CC_MSG_RRM, "RRM"}, |
150 | | {DPNSS_CC_MSG_SSRM_I, "SSRM(I)"}, |
151 | | {DPNSS_CC_MSG_SSRM_C, "SSRM(C)"}, |
152 | | {0, NULL } |
153 | | }; |
154 | | |
155 | 0 | #define DPNSS_E2E_MSG_EEM_C 2 |
156 | 0 | #define DPNSS_E2E_MSG_EEM_I 3 |
157 | 0 | #define DPNSS_E2E_MSG_SCRM 4 |
158 | 0 | #define DPNSS_E2E_MSG_SCIM 5 |
159 | 0 | #define DPNSS_E2E_MSG_ERM_C 6 |
160 | 0 | #define DPNSS_E2E_MSG_ERM_I 7 |
161 | 0 | #define DPNSS_E2E_MSG_NSIM 8 |
162 | | |
163 | | |
164 | | /* 2.2 END-TO-END MESSAGE GROUP */ |
165 | | static const value_string dpnss_e2e_msg_type_vals[] = { |
166 | | {2, "END-to-END Message (COMPLETE) - EEM(C)"}, |
167 | | {3, "END-to-END Message (INCOMPLETE) - EEM(I)"}, |
168 | | {4, "SINGLE-CHANNEL CLEAR REQUEST Message - SCRM"}, |
169 | | {5, "SINGLE-CHANNEL CLEAR INDICATION Message - SCIM"}, |
170 | | {6, "END-to-END RECALL Message (COMPLETE) - ERM(C)"}, |
171 | | {7, "END-to-END RECALL Message (INCOMPLETE) - ERM(I)"}, |
172 | | {8, "NON SPECIFIED INFORMATION Message - NSIM"}, |
173 | | { 0, NULL } |
174 | | }; |
175 | | |
176 | | static const value_string dpnss_e2e_msg_short_type_vals[] = { |
177 | | {2, "EEM(C)"}, |
178 | | {3, "EEM(I)"}, |
179 | | {4, "SCRM"}, |
180 | | {5, "SCIM"}, |
181 | | {6, "ERM(C)"}, |
182 | | {7, "ERM(I)"}, |
183 | | {8, "NSIM"}, |
184 | | { 0, NULL } |
185 | | }; |
186 | | |
187 | 0 | #define DPNSS_LbL_MSG_LLM_C 0 |
188 | 0 | #define DPNSS_LbL_MSG_LLM_I 1 |
189 | 0 | #define DPNSS_LbL_MSG_LLRM 2 |
190 | 0 | #define DPNSS_LbL_MSG_SM 4 |
191 | 0 | #define DPNSS_LbL_MSG_LMM 5 |
192 | 0 | #define DPNSS_LbL_MSG_LMRM 6 |
193 | | |
194 | | /* 2.3 LINK-BY-LINK MESSAGE GROUP */ |
195 | | static const value_string dpnss_LbL_msg_type_vals[] = { |
196 | | {0, "LINK-by-LINK Message (COMPLETE) - LLM(C)"}, |
197 | | {1, "LINK-by-LINK Message (INCOMPLETE) - LLM(I)"}, |
198 | | {2, "LINK-by-LINK REJECT Message - LLRM"}, |
199 | | {4, "SWAP Message - SM"}, |
200 | | {5, "LINK MAINTENANCE Message - LMM"}, |
201 | | {6, "LINK MAINTENANCE REJECT Message - LMRM"}, |
202 | | { 0, NULL } |
203 | | }; |
204 | | |
205 | | static const value_string dpnss_LbL_msg_short_type_vals[] = { |
206 | | {0, "LLM(C)"}, |
207 | | {1, "LLM(I)"}, |
208 | | {2, "LLRM"}, |
209 | | {4, "SM"}, |
210 | | {5, "LMM"}, |
211 | | {6, "LMRM"}, |
212 | | { 0, NULL } |
213 | | }; |
214 | | |
215 | | static const true_false_string dpnss_ext_bit_vals = { |
216 | | "further octet(s) follow", |
217 | | "no further octets" |
218 | | }; |
219 | | |
220 | | static const true_false_string dpnss_ext_bit_no_ext_vals = { |
221 | | "no further octets", |
222 | | "Invalid" |
223 | | }; |
224 | | /* SECTION 4 ANNEX 1 */ |
225 | | static const value_string dpnss_sic_type_type_vals[] = { |
226 | | {0, "invalid"}, |
227 | | {1, "speech"}, |
228 | | {2, "data"}, |
229 | | {3, "data"}, |
230 | | {4, "interworking with DASS 2 - treat as data"}, |
231 | | {5, "interworking with DASS 2 - treat as data"}, |
232 | | {6, "interworking with DASS 2 - treat as data"}, |
233 | | {7, "interworking with DASS 2 - treat as data"}, |
234 | | { 0, NULL } |
235 | | }; |
236 | | |
237 | | static const value_string dpnss_sic_details_for_speech_vals[] = { |
238 | | {0, "64 kbit/s PCM G.711 A-Law or analogue"}, |
239 | | {1, "32 kbit/s ADPCM G.721"}, |
240 | | {2, "64 kbit/s PCM G.711 u-Law or analogue"}, |
241 | | {3, "Invalid"}, |
242 | | {4, "Invalid"}, |
243 | | {5, "Invalid"}, |
244 | | {6, "Invalid"}, |
245 | | {7, "Invalid"}, |
246 | | {8, "Invalid"}, |
247 | | {9, "Invalid"}, |
248 | | {10, "Invalid"}, |
249 | | {11, "Invalid"}, |
250 | | {12, "Invalid"}, |
251 | | {13, "Invalid"}, |
252 | | {14, "Invalid"}, |
253 | | {15, "Invalid"}, |
254 | | { 0, NULL } |
255 | | }; |
256 | | |
257 | | static const value_string dpnss_sic_details_for_data_rates1_vals[] = { |
258 | | {0, "64000 bit/s"}, |
259 | | {1, "56000 bit/s"}, |
260 | | {2, "48000 bit/s"}, |
261 | | {3, "32000 bit/s"}, |
262 | | {4, "19200 bit/s"}, |
263 | | {5, "16000 bit/s"}, |
264 | | {6, "14400 bit/s"}, |
265 | | {7, "12000 bit/s"}, |
266 | | {8, "9600 bit/s"}, |
267 | | {9, "8000 bit/s"}, |
268 | | {10, "7200 bit/s"}, |
269 | | {11, "4800 bit/s"}, |
270 | | {12, "3600 bit/s"}, |
271 | | {13, "2400 bit/s"}, |
272 | | {14, "1200 bit/s"}, |
273 | | {15, "600 bit/s"}, |
274 | | { 0, NULL } |
275 | | }; |
276 | | |
277 | | static const value_string dpnss_sic_details_for_data_rates2_vals[] = { |
278 | | {0, "300 bit/s"}, |
279 | | {1, "200 bit/s"}, |
280 | | {2, "150 bit/s"}, |
281 | | {3, "134.5 bit/s"}, |
282 | | {4, "110 bit/s"}, |
283 | | {5, "100 bit/s"}, |
284 | | {6, "75 bit/s"}, |
285 | | {7, "50 bit/s"}, |
286 | | {8, "75/1200 bit/s"}, |
287 | | {9, "1200/75 bit/s"}, |
288 | | {10, "invalid"}, |
289 | | {11, "invalid"}, |
290 | | {12, "invalid"}, |
291 | | {13, "invalid"}, |
292 | | {14, "invalid"}, |
293 | | {15, "invalid"}, |
294 | | { 0, NULL } |
295 | | }; |
296 | | /* Octet 2 */ |
297 | | |
298 | | static const value_string dpnss_sic_oct2_data_type_vals[] = { |
299 | | {0, "Invalid"}, |
300 | | {1, "Invalid"}, |
301 | | {2, "Invalid"}, |
302 | | {3, "Synchronous"}, |
303 | | {4, "Synchronous"}, |
304 | | {5, "Asynchronous"}, |
305 | | {6, "Asynchronous"}, |
306 | | {7, "Asynchronous"}, |
307 | | { 0, NULL } |
308 | | }; |
309 | | |
310 | | static const true_false_string dpnss_duplex_vals = { |
311 | | "Half Duplex (HDX)", |
312 | | "Full Duplex (FDX)" |
313 | | }; |
314 | | |
315 | | static const true_false_string dpnss_sic_oct2_sync_data_format_vals = { |
316 | | "X.25 Packet Mode", |
317 | | "Anonymous or Unformatted" |
318 | | }; |
319 | | |
320 | | static const true_false_string dpnss_sic_oct2_net_ind_clk_vals = { |
321 | | "Bits E4/E5/E6 indicate phase", |
322 | | "Clock Locked to Transmission" |
323 | | }; |
324 | | |
325 | | static const true_false_string dpnss_provided_vals = { |
326 | | "Provided", |
327 | | "Not Provided" |
328 | | }; |
329 | | |
330 | | static const value_string dpnss_sic_oct2_async_data_type_vals[] = { |
331 | | {0, "Unspecified"}, |
332 | | {1, "5 data bits"}, |
333 | | {2, "7 data bits"}, |
334 | | {3, "8 data bits"}, |
335 | | { 0, NULL } |
336 | | }; |
337 | | static const true_false_string dpnss_flow_control_vals = { |
338 | | "TA has ESRA capability", |
339 | | "TA does not have ESRA capability" |
340 | | }; |
341 | | |
342 | | /* SECTION 4 Global Issue 7 |
343 | | * ANNEX 3 CLEARING/REJECTION CAUSE CODES |
344 | | */ |
345 | | static const value_string dpnss_clearing_cause_code_vals[] = { |
346 | | {0x29, "Access Barred"}, |
347 | | {0x14, "Acknowledgement"}, |
348 | | {0x01, "Address Incomplete"}, |
349 | | {0x08, "Busy"}, |
350 | | {0x23, "Channel Out of Service"}, |
351 | | {0x2d, "DTE Controlled Not Ready"}, |
352 | | {0x07, "Congestion"}, |
353 | | {0x30, "Call Termination"}, |
354 | | {0x18, "Facility Not Registered"}, |
355 | | {0x0a, "Incoming Calls Barred"}, |
356 | | {0x13, "Service Incompatible"}, |
357 | | {0x1a, "Message Not Understood"}, |
358 | | {0x1e, "Network Address Extension-Error"}, |
359 | | {0x02, "Network Termination"}, |
360 | | {0x00, "Number Unobtainable"}, |
361 | | {0x24, "Priority Forced Release"}, |
362 | | {0x19, "Reject"}, |
363 | | {0x1c, "Route Out of Service"}, |
364 | | {0x04, "Subscriber Incompatible"}, |
365 | | {0x15, "Signal Not Understood"}, |
366 | | {0x16, "Signal Not Valid"}, |
367 | | {0x09, "Subscriber Out of Service"}, |
368 | | {0x1b, "Signalling System Incompatible"}, |
369 | | {0x17, "Service Temporarily Unavailable"}, |
370 | | {0x03, "Service Unavailable"}, |
371 | | {0x1d, "Transferred"}, |
372 | | {0x2e, "DTE Uncontrolled Not Ready"}, |
373 | | { 0, NULL } |
374 | | }; |
375 | | /* ANNEX 6 : MAINTENANCE ACTIONS (p235) */ |
376 | | static const value_string dpnss_maintenance_actions_vals[] = { |
377 | | {0x1, "BBC - Back-Busy Control"}, |
378 | | {0x2, "LBC - Loop-Back Control"}, |
379 | | {0x3, "LBA - Loop-Back Abort"}, |
380 | | {0x4, "TCS-R - Traffic Channel Status Request"}, |
381 | | {0x5, "ACK - Acknowledge"}, |
382 | | {0x6, "NTC - Non-Looped-Back Test Control"}, |
383 | | { 0, NULL } |
384 | | }; |
385 | | |
386 | | /* ANNEX 7 : CODING OF USAGE IDENTIFIERS */ |
387 | | static const value_string dpnss_man_code_vals[] = { |
388 | | {0x0, "Reserved"}, |
389 | | {0x1, "BT"}, |
390 | | {0x2, "Ericsson"}, |
391 | | {0x3, "Lucent"}, |
392 | | {0x4, "Philips"}, |
393 | | {0x5, "Siemens"}, |
394 | | {0x6, "Westell"}, |
395 | | {0x7, "Mitel"}, |
396 | | { 0, NULL } |
397 | | }; |
398 | | |
399 | | |
400 | | |
401 | 0 | #define DPNSS_NONE 0 |
402 | | #define DPNSS_SERV_MAR 1 |
403 | | #define DPNSS_STATUS 2 |
404 | | #define DPNSS_ROUTE_RES_CLASS 3 |
405 | | #define DPNSS_CBR_GRP 4 |
406 | | #define DPNSS_FAC_LST_CODE 5 |
407 | | #define DPNSS_NO_OF_FUR_TRANS 6 |
408 | | #define DPNSS_NO_OF_FUR_ALT_R 7 |
409 | | #define DPNSS_INT_CAP_LEV 8 |
410 | | #define DPNSS_NESTING_LEVEL 9 |
411 | | #define DPNSS_C_PARTY_ADDR 10 |
412 | | #define DPNSS_B_PARTY_ADDR 11 |
413 | | #define DPNSS_SIC 12 |
414 | 0 | #define DPNSS_A_B_PARTY_ADDR 13 |
415 | | #define DPNSS_DIVERSION_TYPE 14 |
416 | | #define DPNSS_NSI_IDENTIFIER 15 |
417 | | #define DPNSS_USER_DEFINED 16 |
418 | | #define DPNSS_TEXT 17 |
419 | 0 | #define DPNSS_CALL_INDEX 18 |
420 | | #define DPNSS_PASSWORD 19 |
421 | | #define DPNSS_CALL_DIR 20 |
422 | | #define DPNSS_DPNSS_ISDN_TYPE 21 |
423 | | #define DPNSS_HC_CLC 22 |
424 | | #define DPNSS_ENHANCED_STR_ID 23 |
425 | | #define DPNSS_STRING_ID 24 |
426 | | #define DPNSS_STRING_ID_LIST 25 |
427 | | #define DPNSS_TEXT_TYPE 26 |
428 | | #define DPNSS_CHANNEL_STATUS 27 |
429 | | #define DPNSS_CHANNEL_NUMBER 28 |
430 | | #define DPNSS_BPL 29 |
431 | | #define DPNSS_BCL 30 |
432 | | #define DPNSS_DEVICE_INDEX 31 |
433 | | #define DPNSS_CR_NO 32 |
434 | | #define DPNSS_CALL_ID_LENGTH 33 |
435 | | #define DPNSS_STATE_OF_DEST 34 |
436 | | #define DPNSS_STATE_OF_DEST_QUAL 35 |
437 | | #define DPNSS_REASON_FOR_REDIR 36 |
438 | | #define DPNSS_CLEARING_CAUSE 37 |
439 | | #define DPNSS_RECONT_ADDR 38 |
440 | | #define DPNSS_STATE_OF_OPERATOR 39 |
441 | | #define DPNSS_NIGHT_SERVICE 40 |
442 | | #define DPNSS_PBX_FLAG 41 |
443 | | #define DPNSS_NUMBER_OF_CALLS 42 |
444 | | #define DPNSS_NUMBER_OF_SERVERS 43 |
445 | | #define DPNSS_PRIORITY_LEVEL 44 |
446 | | #define DPNSS_LOCATION 45 |
447 | | #define DPNSS_SUBADDRESS 46 |
448 | | #define DPNSS_ALARM_LEVEL 47 |
449 | | #define DPNSS_STAFF_PRESENT 48 |
450 | | #define DPNSS_TIME_AND_DATE 49 |
451 | | #define DPNSS_SERVICES 50 |
452 | | #define DPNSS_PBX_REFERENCE 51 |
453 | | #define DPNSS_TRUNK_GROUP_REF_NUMBER 52 |
454 | | #define DPNSS_TRUNK_MEMBER_REF_NUMBER 53 |
455 | | #define DPNSS_CONF_PARTY_INDEX 54 |
456 | | #define DPNSS_CONF_PARTY_DET 55 |
457 | | #define DPNSS_ACCOUNT_CODE 56 |
458 | | #define DPNSS_CONF_BRIDGE_ADDR 57 |
459 | | #define DPNSS_COST_QUALIFIER 58 |
460 | | #define DPNSS_CURRENCY_INDICATION 59 |
461 | | #define DPNSS_CURRENCY_UNITS 60 |
462 | | #define DPNSS_TIME_INTERVAL 61 |
463 | | #define DPNSS_UNITS 62 |
464 | | #define DPNSS_REMOTE_ADDRESS 63 |
465 | | #define DPNSS_TEST_INDEX 64 |
466 | | #define DPNSS_TEST_RESULT 65 |
467 | | #define DPNSS_TYPE_OF_ASSISTANCE 66 |
468 | | #define DPNSS_REST_DOMAIN 67 |
469 | | #define DPNSS_GRP_PICK_UP_CODE 68 |
470 | | #define DPNSS_PICK_UP_CALL_TYPE 69 |
471 | | #define DPNSS_MALICIOUS_CALL_REF 70 |
472 | | #define DPNSS_TIMER_VALUE 71 |
473 | | #define DPNSS_BEARER_CAP 72 |
474 | | #define DPNSS_ISDN_NUM_ATTR 73 |
475 | | #define DPNSS_ISDN_DPNSS_SUBADDRESS 74 |
476 | | #define DPNSS_ISDN_NUMBER_DIGITS 75 |
477 | | #define DPNSS_HIGH_LAYER_COMP 76 |
478 | | #define DPNSS_LOW_LAYER_COMP 77 |
479 | | #define DPNSS_PROGRESS_INDICATOR 78 |
480 | | #define DPNSS_VPN_ACCESS_REF_NUM 79 |
481 | | #define DPNSS_INDEX_NUMBER 80 |
482 | | #define DPNSS_RESTRICTION_INDICATOR 81 |
483 | | #define DPNSS_CAUSE 82 |
484 | | |
485 | | |
486 | | typedef struct { |
487 | | int id_code_no; |
488 | | const char *compact_name; |
489 | | const char *name; |
490 | | int par1_num; |
491 | | int par2_num; |
492 | | int par3_num; |
493 | | int par4_num; |
494 | | } dpnns_sup_serv_set_t; |
495 | | |
496 | | static const dpnns_sup_serv_set_t dpnns_sup_serv_set[] = { |
497 | | {0, "NOT USED", "NOT USED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
498 | | {1, "CLC-ORD", "CALLING/CALLED LINE CATEGORY ORDINARY", DPNSS_SERV_MAR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
499 | | {2, "CLC-DEC", "CALLING/CALLED LINE CATEGORY DECADIC", DPNSS_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
500 | | {3, "CLC-ISDN", "CALLING/CALLED LINE CATEGORY-PUBLIC ISDN", DPNSS_STATUS, DPNSS_DPNSS_ISDN_TYPE, DPNSS_NONE, DPNSS_NONE }, |
501 | | {4, "CLC-PSTN", "CALLING/CALLED LINE CATEGORY-PSTN", DPNSS_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
502 | | {5, "CLC-MF5", "CALLING/CALLED LINE CATEGORY-SSMF5", DPNSS_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
503 | | {6, "CLC-OP", "CALLING/CALLED LINE CATEGORY-OPERATOR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
504 | | {7, "CLC-NET", "CALLING/CALLED LINE CATEGORY-NETWORK", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
505 | | {8, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
506 | | {9, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
507 | | {10, "CBWF-R", "CALL BACK WHEN FREE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
508 | | {11, "CBWF-FN", "CALL BACK WHEN FREE-FREE NOTIFICATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
509 | | {12, "CBWF-CSUI", "CALL BACK WHEN FREE-CALL SET-UP(IMMEDIATE)", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
510 | | {13, "CBWF-C", "CALL BACK WHEN FREE-CANCEL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
511 | | {14, "RO", "RING OUT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
512 | | {15, "CBC", "CALL BACK COMPLETE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
513 | | {16, "CBWF-CSUD", "CALL BACK WHEN FREE -CALL SET-UP(DELAYED)", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
514 | | {17, "CBWNU-R", "CALL BACK WHEN NEXT USEDREQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
515 | | {18, "COS", "CLASS OF SERVICE", DPNSS_ROUTE_RES_CLASS, DPNSS_CBR_GRP, DPNSS_FAC_LST_CODE, DPNSS_NONE}, |
516 | | {19, "LA", "LOOP AVOIDANCE", DPNSS_NO_OF_FUR_TRANS, DPNSS_NO_OF_FUR_ALT_R, DPNSS_NONE, DPNSS_NONE }, |
517 | | {20, "EI-PVR", "EXECUTIVE INTRUSION-PRIOR VALIDATION", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
518 | | {21, "EI-R", "EXECUTIVE INTRUSION-REQUEST", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
519 | | {22, "IPL-R", "INTRUSION PROTECTION LEVEL-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
520 | | {23, "IPL", "INTRUSION PROTECTION LEVEL", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
521 | | {24, "EI-C", "EXECUTIVE INTRUSION-CONVERT", DPNSS_INT_CAP_LEV, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
522 | | {25, "EI-I", "EXECUTIVE INTRUSION-INTRUDED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
523 | | {26, "CW", "CALL WAITING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
524 | | {27, "CO", "CALL OFFER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
525 | | {28, "SN-REQ", "SEND NEXT-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
526 | | {29, "HGF", "HUNT GROUP FORWARDED", DPNSS_NESTING_LEVEL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
527 | | {30, "DIV-V", "DIVERSION-VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
528 | | {31, "DIV-FM", "DIVERSION-FOLLOW ME", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
529 | | {32, "DIV-BY", "DIVERSION-BY PASS", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
530 | | {33, "DIV-CI", "DIVERSION CANCEL-IMMEDIATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
531 | | {34, "DIV-CR", "DIVERSION CANCEL-ON NO REPLY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
532 | | {35, "DIV-CB", "DIVERSION CANCEL-ON BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
533 | | {36, "DIV-CA", "DIVERSION CANCEL-ALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
534 | | {37, "DVG-I", "DIVERTING IMMEDIATE", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
535 | | {38, "DVG-B", "DIVERTING ON BUSY", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
536 | | {39, "DVG-R", "DIVERTING ON NO REPLY", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
537 | | {40, "DVT-I", "DIVERT IMMEDIATE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
538 | | {41, "DVT-B", "DIVERT ON BUSY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
539 | | {42, "DVD-I", "DIVERTED IMMEDIATE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
540 | | {43, "DVD-B", "DIVERTED ON BUSY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
541 | | {44, "DVD-R", "DIVERTED ON NO REPLY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
542 | | {45, "DVT-R", "DIVERT ON NO REPLY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
543 | | {46, "SIC", "SERVICE INDICATOR CODE", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
544 | | {47, "BSS-M", "BEARER SERVICE SELECTION-MANDATORY", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
545 | | {48, "BSS-P", "BEARER SERVICE SELECTION-PREFERRED", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
546 | | {49, "BSS-N", "BEARER SERVICE SELECTION-NOTIFICATION", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
547 | | {50, "OLI/CLI", "ORIGINATING LINE IDENTITY/CALLED LINE IDENTITY", DPNSS_A_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
548 | | {51, "RTI", "ROUTING INFORMATION, ROUTING INFORMATION", DPNSS_DPNSS_ISDN_TYPE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
549 | | {52, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
550 | | {53, "DVD-E", "DIVERTED-EXTERNALLY", DPNSS_DIVERSION_TYPE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
551 | | {54, "REJ", "REJECT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
552 | | {55, "ACK", "ACKNOWLEDGE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
553 | | {56, "SN", "SEND NEXT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
554 | | {57, "D-SIC", "DASS 2-SERVICE INDICATOR CODE", DPNSS_SIC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
555 | | {58, "NSI", "NON-SPECIFIED INFORMATION", DPNSS_NSI_IDENTIFIER, DPNSS_USER_DEFINED, DPNSS_USER_DEFINED, DPNSS_NONE }, |
556 | | {59, "OCP", "ORIGINALLY CALLED PARTY", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
557 | | {60, "HOLD-REQ", "HOLD REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
558 | | {61, "RECON", "RECONNECTED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
559 | | {62, "HDG", "HOLDING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
560 | | {63, "CD-Q", "CALL DISTRIBUTION-QUEUE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
561 | | {64, "TEXT-M", "TEXT MESSAGE", DPNSS_TEXT, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
562 | | {65, "SOD-B", "STATE OF DESTINATION-BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
563 | | {66, "SOD-F", "STATE OF DESTINATION-FREE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
564 | | {67, "CD-DNQ", "CALL DISTRIBUTION-DO NOT QUEUE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
565 | | {68, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
566 | | {69, "CD-LINK", "CALL DISTRIBUTION-LINKED", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
567 | | {70, "DIV-RSI", "DIVERSION-REMOTE SET IMMEDIATE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
568 | | {71, "DIV-RSB", "DIVERSION-REMOTE SET ON BUSY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
569 | | {72, "DIV-RSR", "DIVERSION-REMOTE SET ON NO REPLY", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
570 | | {73, "DIV-RCI", "DIVERSION-REMOTE CANCEL IMMEDIATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
571 | | {74, "DIV-RCB", "DIVERSION-REMOTE CANCEL ON BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
572 | | {75, "DIV-RCR", "DIVERSION-REMOTE CANCEL ON NO REPLY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
573 | | {76, "DIV-RCA", "DIVERSION-REMOTE CANCEL ALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
574 | | {77, "PASSW", "PASSWORD", DPNSS_PASSWORD, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
575 | | {78, "SPL", "SPLIT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
576 | | {79, "TWP", "TWO PARTY", DPNSS_CALL_DIR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
577 | | {80, "ENQ", "ENQUIRY CALL", DPNSS_HC_CLC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
578 | | {81, "SCE", "SINGLE CHANNEL ENQUIRY", DPNSS_HC_CLC, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
579 | | {82, "TRFD", "TRANSFERRED", DPNSS_CALL_DIR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
580 | | {83, "SHTL", "SHUTTLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
581 | | {84, "COC", "CONNECTED CALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
582 | | {85, "TRFR", "TRANSFER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
583 | | {86, "CD-FN", "CALL DISTRIBUTION-FREE NOTIFY", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
584 | | {87, "ICC", "INTERCOM CALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
585 | | {88, "AD-RQ", "ADD-ON REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
586 | | {89, "AD-V", "ADD-ON VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
587 | | {90, "AD-O", "ADDED-ON", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
588 | | {91, "ENH", "ENHANCED SSMF5", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
589 | | {92, "BAS", "BASIC SSMF5", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
590 | | {93, "CD-UNLINK", "CALL DISTRIBUTION-UNLINKED", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
591 | | {94, "SNU", "SIGNAL NOT UNDERSTOOD", DPNSS_ENHANCED_STR_ID, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
592 | | {95, "SU", "SERVICE UNAVAILABLE", DPNSS_STRING_ID, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
593 | | {96, "RR-SNU", "RECALL REJECTED SIGNAL NOT UNDERSTOOD", DPNSS_ENHANCED_STR_ID, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
594 | | {97, "CD-CSU", "CALL DISTRIBUTION-CALL SET UP", DPNSS_CALL_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
595 | | {98, "IG-SNU", "IGNORED-SIGNAL NOT UNDERSTOOD", DPNSS_STRING_ID_LIST, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
596 | | {99, "IG-SU", "IGNORED-SERVICE UNAVAILABLE", DPNSS_STRING_ID_LIST, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
597 | | {100, "TEXT", "TEXTUAL DISPLAY", DPNSS_TEXT, DPNSS_TEXT_TYPE, DPNSS_NONE, DPNSS_NONE }, |
598 | | {101, "SIM-A", "SIMULATED ANSWER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
599 | | {102, "ACT", "ACTIVATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
600 | | {103, "DEACT", "DEACTIVATE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
601 | | {104, "TCS", "TRAFFIC-CHANNEL STATUS", DPNSS_CHANNEL_STATUS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
602 | | {105, "CHID", "CHANNEL IDENTITY", DPNSS_CHANNEL_NUMBER, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
603 | | {106, "FR-R", "FORCED RELEASE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
604 | | {107, "PB-P", "PRIORITY BREAKDOWN-PROTECTION", DPNSS_BPL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
605 | | {108, "PB-R", "PRIORITY BREAKDOWN-REQUEST", DPNSS_BCL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
606 | | {109, "DI", "DEVICE IDENTITY", DPNSS_DEVICE_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
607 | | {110, "ROP-R", "ROUTE OPTIMISATION-REQUEST", DPNSS_CR_NO, DPNSS_CALL_ID_LENGTH, DPNSS_NONE, DPNSS_NONE }, |
608 | | {111, "ROP-CSU", "ROUTE OPTIMISATION-CALL SET UP", DPNSS_CALL_ID_LENGTH, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
609 | | {112, "ROP-CON", "ROUTE OPTIMISATION-CONNECTED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
610 | | {113, "DND", "DO NOT DISTURB", DPNSS_STATE_OF_DEST, DPNSS_STATE_OF_DEST_QUAL, DPNSS_NONE, DPNSS_NONE }, |
611 | | {114, "DND-O", "DO NOT DISTURB-OVERRIDE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
612 | | {115, "DND-S", "DO NOT DISTURB-SET", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
613 | | {116, "DND-C", "DO NOT DISTURB-CLEAR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
614 | | {117, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
615 | | {118, "EST", "EXTENSION STATUS CALL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
616 | | {119, "CDIV", "CONTROLLED DIVERSION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
617 | | {120, "RDG", "REDIRECTING", DPNSS_REASON_FOR_REDIR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
618 | | {121, "RCF", "REDIRECTING ON CALL FAILURE", DPNSS_CLEARING_CAUSE, DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE }, |
619 | | {122, "TOV-R", "TAKEOVER REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
620 | | {123, "TOV-V", "TAKEOVER VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
621 | | {124, "SER-R", "SERIES CALL REQUEST", DPNSS_RECONT_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
622 | | {125, "SER-C", "SERIES CALL-CANCEL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
623 | | {126, "SER-E", "SERIES CALL-ESTABLISHMENT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
624 | | {127, "NS-N, NIGHT","SERVICE-NOTIFICATION", DPNSS_STATE_OF_OPERATOR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
625 | | {128, "NS-DVT", "NIGHT SERVICE-DIVERT", DPNSS_NIGHT_SERVICE, DPNSS_PBX_FLAG, DPNSS_NONE, DPNSS_NONE }, |
626 | | {129, "NS-DVG", "DPNSS_NIGHT_SERVICE-DIVERTING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
627 | | {130, "NS-DVD", "DPNSS_NIGHT_SERVICE-DIVERTED", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
628 | | {131, "NS-RDVT", "DPNSS_NIGHT_SERVICE-REDIVERT", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
629 | | {132, "NS-RDVG", "DPNSS_NIGHT_SERVICE-REDIVERTING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
630 | | {133, "NS-RDVD", "DPNSS_NIGHT_SERVICE-REDIVERTED", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
631 | | {134, "NS-DA", "DPNSS_NIGHT_SERVICE-DEACTIVATED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
632 | | {135, "Q-INFO", "QUEUE INFORMATION", DPNSS_NUMBER_OF_CALLS, DPNSS_NUMBER_OF_SERVERS, DPNSS_NONE, DPNSS_NONE }, |
633 | | {136, "Q-PRIO", "QUEUE PRIORITY", DPNSS_PRIORITY_LEVEL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
634 | | {137, "SW-V", "SWAP - VALIDATION", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
635 | | {138, "SW-R", "SWAP - REJECTED", DPNSS_LOCATION, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
636 | | {139, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
637 | | {140, "A2", "SSMF5 SIGNAL 'A-2'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
638 | | {141, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
639 | | {142, "A5", "SSMF5 SIGNAL 'A-5'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
640 | | {143, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
641 | | {144, "A8", "SSMF5 SIGNAL 'A-8'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
642 | | {145, "A10", "SSMF5 SIGNAL 'A-10'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
643 | | {146, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
644 | | {147, "A13", "SSMF5 SIGNAL 'A-13'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
645 | | {148, "A14", "SSMF5 SIGNAL 'A-14'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
646 | | {149, "A12", "SSMF5 SIGNAL 'A-12'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
647 | | {150, "A7", "SSMF5 SIGNAL 'A-7'", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
648 | | {151, "CBWF-CLB", "CALL BACK WHEN FREE-CALL BACK", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
649 | | {152, "DVT", "DIVERT", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
650 | | {153, "SOD-I", "DPNSS_STATE_OF_DEST-INDETERMINABLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
651 | | {154, "DVG", "DIVERTING", DPNSS_B_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
652 | | {155, "SOD-REQ", "REQUEST DPNSS_STATE_OF_DEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
653 | | {156, "CBWF-CB", "CALL BACK WHEN FREE-CALL BACK REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
654 | | {157, "NAE-DC", "NETWORK ADDRESS EXTENSION", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
655 | | {158, "SFI", "SUPPLEMENTARY FACILITIES INHIBITED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
656 | | {159, "NAE-DI", "NETWORK ADDRESS EXTENSION-DESTINATION INCOMPLETE", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
657 | | {160, "DRS", "DIRECT ROUTE SELECT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
658 | | {161, "AS", "ALARM STATUS", DPNSS_ALARM_LEVEL, DPNSS_STAFF_PRESENT, DPNSS_NONE, DPNSS_NONE }, |
659 | | {162, "AS-R", "ALARM STATUS-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
660 | | {163, "TAD-R", "TIME AND DATE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
661 | | {164, "TAD", "TIME AND DATE", DPNSS_TIME_AND_DATE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
662 | | {165, "SATB", "SATELLITE BARRED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
663 | | {166, "SERV", "SERVICE INFORMATION", DPNSS_SERVICES, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
664 | | {167, "TID", "TRUNK IDENTITY", DPNSS_PBX_REFERENCE, DPNSS_TRUNK_GROUP_REF_NUMBER, DPNSS_TRUNK_MEMBER_REF_NUMBER, DPNSS_NONE}, |
665 | | {168, "PARK", "PARK REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
666 | | {169, "PKD", "PARKED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
667 | | {170, "AC-NAO", "ADD-ON CONFERENCE-NO ADD ON CURRENTLY AVAILABLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
668 | | {171, "CBM-R", "CALL BACK MESSAGING-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
669 | | {172, "CBM-C", "CALL BACK MESSAGING-CANCEL", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
670 | | {173, "NAE-CC", "NETWORK ADDRESS EXTENSION-CALLING/CALLED IDENTITY COMPLETE", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
671 | | {174, "NAE-CI", "NETWORK ADDRESS EXTENSION-CALLING/CALLED IDENTITY INCOMPLETE", DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
672 | | {175, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
673 | | {176, "AC-CDC", "ADD-ON CONFERENCE-CLEARDOWN CONFERENCE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
674 | | {177, "AC-PI", "ADD-ON CONFERENCE-PARTY INDEX", DPNSS_CONF_PARTY_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
675 | | {178, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
676 | | {179, "AC-DR", "ADD-ON CONFERENCE - DETAILS REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
677 | | {180, "AC-PD", "ADD-ON CONFERENCE - PARTY", DPNSS_CONF_PARTY_DET, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
678 | | {181, "AC-CBI", "ADD-ON CONFERENCE - CONFERENCE BRIDGE IDENTITY", DPNSS_CONF_BRIDGE_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
679 | | {182, "CH-AC", "CHARGE REPORTING ACCOUNT CODE", DPNSS_ACCOUNT_CODE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
680 | | {183, "CH-ACR", "CHARGE REPORTING ACCOUNT CODE REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
681 | | {184, "CH-ACT", "CHARGE REPORTING - ACTIVE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
682 | | {185, "CH-CLR", "CHARGE REPORTING - CLEAR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
683 | | {186, "CH-CR", "CHARGE REPORTING - COST REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
684 | | {187, "CH-CST", "CHARGE REPORTING - COST, CURRENCY UNITS", DPNSS_COST_QUALIFIER, DPNSS_CURRENCY_INDICATION, DPNSS_NONE, DPNSS_NONE }, |
685 | | {188, "CH-TR", "CHARGE REPORTING - TIME RATE", DPNSS_CURRENCY_UNITS, DPNSS_TIME_INTERVAL, DPNSS_COST_QUALIFIER, DPNSS_CURRENCY_INDICATION}, |
686 | | {189, "CH-UR", "CHARGE REPORTING - UNIT", DPNSS_CURRENCY_UNITS, DPNSS_COST_QUALIFIER, DPNSS_CURRENCY_INDICATION, DPNSS_NONE}, |
687 | | {190, "CH-UU", "CHARGE REPORTING - UNITS USED", DPNSS_UNITS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
688 | | {191, "OPD", "OUTPUT DIGITS", DPNSS_REMOTE_ADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
689 | | {192, "OPD-R", "OUTPUT DIGITS - REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
690 | | {193, "IRD", "INTERNAL REROUTING DISABLED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
691 | | {194, "ERD", "EXTERNAL REROUTING DISABLED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
692 | | {195, "NLT-PT", "NON-LOOPED BACK TEST-PERFORM TEST", DPNSS_TEST_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
693 | | {196, "NLT-RQ", "NON-LOOPED BACK TEST-TEST REQUEST", DPNSS_TEST_INDEX, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
694 | | {197, "NLT-SC", "NON-LOOPED BACK TEST-SEQUENCE COMPLETE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
695 | | {198, "NLT-RES", "NON-LOOPED BACK TEST-RESULT", DPNSS_TEST_RESULT, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
696 | | {199, "AUTO-A", "AUTOANSWER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
697 | | {200, "HF-A", "HANDS-FREE - ACTIVATED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
698 | | {201, "HF-D", "HANDS-FREE - DEACTIVATED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
699 | | {202, "EI-W", "EXECUTIVE INTRUSION-WITHDRAW", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
700 | | {203, "DVT-RD", "DIVERT-REDIRECTION", DPNSS_REASON_FOR_REDIR, DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE }, |
701 | | {204, "DVT-CF", "DIVERT-CALL FAILURE", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
702 | | {205, "ASST-INFO", "ASSISTANCE-INFORMATION", DPNSS_TYPE_OF_ASSISTANCE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
703 | | {206, "RED-BY", "REDIRECTION-BYPASS", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
704 | | {207, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
705 | | {208, "VIC", "VPN INITIATED CLEAR", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
706 | | {209, "NPR-A", "NUMBER PRESENTATION RESTRICTION-A PARTY", DPNSS_REST_DOMAIN, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
707 | | {210, "NPR-B", "NUMBER PRESENTATION RESTRICTION-B PARTY", DPNSS_REST_DOMAIN, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
708 | | {211, "ARC", "AUXILIARY DPNSS_ROUTE_RES_CLASS", DPNSS_ROUTE_RES_CLASS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
709 | | {212, "WOB", "WAIT ON BUSY", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
710 | | {213, "GPU-R", "GROUP PICK-UP REQUEST", DPNSS_GRP_PICK_UP_CODE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
711 | | {214, "PU-DVT", "PICK-UP DIVERT", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
712 | | {215, "PU-DVG", "PICK-UP DIVERTING", DPNSS_TIME_INTERVAL, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
713 | | {216, "DPU-R", "DIRECTED PICK-UP REQUEST", DPNSS_PICK_UP_CALL_TYPE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
714 | | {217, "RCC-CA", "ROUTE CAPACITY CONTROL-CAPACITY AVAILABLE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
715 | | {218, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
716 | | {219, "RCC-OI", "ROUTE CAPACITY CONTROL-OVERRIDE INVOKED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
717 | | {220, "PU-DVD", "PICK-UP DIVERTED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
718 | | {221, "NPR-O", "NUMBER PRESENTATION RESTRICTION - OTHER PARTY", DPNSS_REST_DOMAIN, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
719 | | {222, "MCI", "MALICIOUS CALL INDICATION", DPNSS_MALICIOUS_CALL_REF, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
720 | | {223, "NSL", "NETWORK SIGNALLING LIMIT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
721 | | {224, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
722 | | {225, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
723 | | {226, "TCOS", "TRAVELLING CLASS OF SERVICE", DPNSS_ROUTE_RES_CLASS, DPNSS_CBR_GRP, DPNSS_FAC_LST_CODE, DPNSS_NONE}, |
724 | | {227, "TCOS-R", "TRAVELLING CLASS OF SERVICE-REQUEST", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
725 | | {228, "DIV-RSC", "DIVERSION-REMOTE SET COMBINED", DPNSS_C_PARTY_ADDR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
726 | | {229, "DIV-RCC", "DIVERSION-REMOTE CANCEL COMBINED", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
727 | | {230, "RDC", "REDIRECTION CONTROL", DPNSS_TIMER_VALUE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
728 | | {231, "CAUSE", "DPNSS_CLEARING_CAUSE", DPNSS_CLEARING_CAUSE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
729 | | {232, "CP", "CALL PROCEEDING", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
730 | | {233, "I-BC", "ISDN-BEARER CAPABILITY", DPNSS_BEARER_CAP, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
731 | | {234, "I-CC", "ISDN-DPNSS_CLEARING_CAUSE", DPNSS_CAUSE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
732 | | {235, "I-CPN", "ISDN-CALLING PARTY/CONNECTED NUMBER", DPNSS_ISDN_NUM_ATTR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
733 | | {236, "I-CSA", "ISDN-CALLING PARTY/CONNECTED DPNSS_SUBADDRESS", DPNSS_ISDN_DPNSS_SUBADDRESS, DPNSS_ISDN_NUMBER_DIGITS, DPNSS_NONE, DPNSS_NONE }, |
734 | | {237, "I-DSA", "ISDN-DESTINATION (CALLED PARTY) DPNSS_SUBADDRESS", DPNSS_ISDN_DPNSS_SUBADDRESS, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
735 | | {238, "I-HLC", "ISDN-HIGH LAYER COMPATIBILITY", DPNSS_HIGH_LAYER_COMP, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
736 | | {239, "I-LLC", "ISDN-LOW LAYER COMPATIBILITY", DPNSS_LOW_LAYER_COMP, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
737 | | {240, "I-PROG", "ISDN-PROGRESS", DPNSS_PROGRESS_INDICATOR, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
738 | | {241, "IPN", "INTERWORKING VIA A PRIVATE ISDN", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
739 | | {242, "SAVE", "SAVE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
740 | | {243, "V-NID", "VPN-NODAL IDENTITY", DPNSS_VPN_ACCESS_REF_NUM, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
741 | | {244, "M-INDEX", "MESSAGE INDEX", DPNSS_INDEX_NUMBER, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
742 | | {245, "CBM-CSU", "CALL BACK MESSAGING CALL SET-UP", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
743 | | {246, "INT-A", "INTERIM ANSWER", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
744 | | {247, "undefined", "undefined", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
745 | | {248, "DVL", "DIVERSION - LAST CONTROLLING EXTENSION IDENTITY", DPNSS_B_PARTY_ADDR, DPNSS_DIVERSION_TYPE, DPNSS_RESTRICTION_INDICATOR, DPNSS_NONE}, |
746 | | {249, "ROP-INV", "ROUTE OPTIMISATION INVITE", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
747 | | {250, "ROP-INVA", "ROUTE OPTIMISATION INVITE WITH ACKNOWLEDGEMENT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
748 | | {251, "PCLG-P", "PUBLIC CALLING PARTY NUMBER-PROVIDED", DPNSS_ISDN_NUM_ATTR, DPNSS_ISDN_NUMBER_DIGITS, DPNSS_NONE, DPNSS_NONE }, |
749 | | {252, "PCLG-D", "PUBLIC CALLING PARTY NUMBER-DEFAULT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
750 | | {253, "PCON-P", "PUBLIC CONNECTED NUMBER-PROVIDED", DPNSS_ISDN_NUM_ATTR, DPNSS_ISDN_NUMBER_DIGITS, DPNSS_NONE, DPNSS_NONE }, |
751 | | {254, "PCON-D", "PUBLIC CONNECTED NUMBER-DEFAULT", DPNSS_NONE, DPNSS_NONE, DPNSS_NONE, DPNSS_NONE }, |
752 | | }; |
753 | | |
754 | | static int |
755 | | dissect_dpnss_sic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset) |
756 | 0 | { |
757 | 0 | uint8_t octet, type_of_data; |
758 | |
|
759 | 0 | octet = tvb_get_uint8(tvb,offset); |
760 | 0 | type_of_data = (octet & 0x70)>>4; |
761 | 0 | proto_tree_add_item(tree, hf_dpnss_ext_bit, tvb, offset, 1, ENC_BIG_ENDIAN); |
762 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
763 | 0 | switch (type_of_data) { |
764 | 0 | case 1: |
765 | | /* Type of Data (001) : Details for Speech */ |
766 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_details_for_speech, tvb, offset, 1, ENC_BIG_ENDIAN); |
767 | 0 | break; |
768 | 0 | case 2: |
769 | | /* Type of Data (010) : Data Rates */ |
770 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_details_for_data1, tvb, offset, 1, ENC_BIG_ENDIAN); |
771 | 0 | break; |
772 | 0 | case 3: |
773 | | /* Type of Data (011) : Data Rates */ |
774 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_details_for_data2, tvb, offset, 1, ENC_BIG_ENDIAN); |
775 | 0 | break; |
776 | 0 | default: |
777 | | /* Illegal */ |
778 | 0 | break; |
779 | 0 | } |
780 | 0 | offset++; |
781 | 0 | if ((octet&0x80)==0x80) { |
782 | | /* Extension bit set |
783 | | * Synch/Asynchronous Information |
784 | | */ |
785 | 0 | octet = tvb_get_uint8(tvb,offset); |
786 | 0 | type_of_data = octet&0x7; |
787 | 0 | proto_tree_add_item(tree, hf_dpnss_ext_bit_notall, tvb, offset, 1, ENC_BIG_ENDIAN); |
788 | 0 | switch (type_of_data) { |
789 | 0 | case 3: |
790 | | /* Synchronous */ |
791 | 0 | case 4: |
792 | | /* Synchronous */ |
793 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_net_ind_clk, tvb, offset, 1, ENC_BIG_ENDIAN); |
794 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_sync_data_format, tvb, offset, 1, ENC_BIG_ENDIAN); |
795 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_sync_byte_timing, tvb, offset, 1, ENC_BIG_ENDIAN); |
796 | 0 | break; |
797 | 0 | case 5: |
798 | | /* Asynchronous */ |
799 | 0 | case 6: |
800 | | /* Asynchronous */ |
801 | 0 | case 7: |
802 | | /* Asynchronous */ |
803 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_async_flow_ctrl, tvb, offset, 1, ENC_BIG_ENDIAN); |
804 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_async_data, tvb, offset, 1, ENC_BIG_ENDIAN); |
805 | 0 | break; |
806 | 0 | default: |
807 | 0 | break; |
808 | 0 | } |
809 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_duplex, tvb, offset, 1, ENC_BIG_ENDIAN); |
810 | 0 | proto_tree_add_item(tree, hf_dpnss_sic_oct2_data_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
811 | 0 | offset++; |
812 | 0 | } |
813 | 0 | return offset; |
814 | 0 | } |
815 | | /* |
816 | | static const value_string dpnss_serv_mark_vals[] = { |
817 | | { 1, "PSTN BARRED"}, |
818 | | { 2, "EMERGENCY TELEPHONE"}, |
819 | | { 3, "HUNT GROUP"}, |
820 | | { 4, "DISTRIBUTED GROUP"}, |
821 | | { 5, "UNABLE TO INITIATE CLEARING AFTER ANSWER"}, |
822 | | { 6, "RING GROUP"}, |
823 | | { 0, NULL } |
824 | | }; |
825 | | */ |
826 | | /* Supplementary Information parameters |
827 | | * TODO Add decoding of parameters where needed. |
828 | | */ |
829 | | |
830 | | static const value_string dpnss_sup_serv_par_str_vals[] = { |
831 | | { DPNSS_NONE, "None"}, |
832 | | { DPNSS_SERV_MAR, "Service Marking"}, |
833 | | { DPNSS_STATUS, "Status"}, |
834 | | { DPNSS_ROUTE_RES_CLASS, "Route Restriction Class"}, |
835 | | { DPNSS_CBR_GRP, "Call Barring Group"}, |
836 | | { DPNSS_FAC_LST_CODE, "Facility list code"}, |
837 | | { DPNSS_NO_OF_FUR_TRANS, "Number of Further Transits"}, |
838 | | { DPNSS_NO_OF_FUR_ALT_R, "Number of Further Alternative routes"}, |
839 | | { DPNSS_INT_CAP_LEV, "Intrusion Capability level"}, |
840 | | { DPNSS_NESTING_LEVEL, "Nesting level"}, |
841 | | { DPNSS_C_PARTY_ADDR, "C Party Address"}, |
842 | | { DPNSS_B_PARTY_ADDR, "B Party Address"}, |
843 | | { DPNSS_SIC, "SIC"}, |
844 | | { DPNSS_A_B_PARTY_ADDR, "A/B Party Address"}, |
845 | | { DPNSS_DIVERSION_TYPE, "Diversion Type"}, |
846 | | { DPNSS_NSI_IDENTIFIER, "NSI Identifier"}, |
847 | | { DPNSS_USER_DEFINED, "User Defined"}, |
848 | | { DPNSS_TEXT, "Text"}, |
849 | | { DPNSS_CALL_INDEX, "Call Index"}, |
850 | | { DPNSS_PASSWORD, "Password"}, |
851 | | { DPNSS_CALL_DIR, "Call Direction"}, |
852 | | { DPNSS_DPNSS_ISDN_TYPE, "DPNNS ISDN Type"}, |
853 | | { DPNSS_HC_CLC, "HC CLC"}, |
854 | | { DPNSS_ENHANCED_STR_ID, "Enhanced String Identity"}, |
855 | | { DPNSS_STRING_ID, "String Identity"}, |
856 | | { DPNSS_STRING_ID_LIST, "String Identity List"}, |
857 | | { DPNSS_TEXT_TYPE, "Text Type"}, |
858 | | { DPNSS_CHANNEL_STATUS, "Channel Status"}, |
859 | | { DPNSS_CHANNEL_NUMBER, "Channel Number"}, |
860 | | { DPNSS_BPL, "BPL"}, |
861 | | { DPNSS_BCL, "BCL"}, |
862 | | { DPNSS_DEVICE_INDEX, "Device Index"}, |
863 | | { DPNSS_CR_NO, "Call Reference Number"}, |
864 | | { DPNSS_CALL_ID_LENGTH, "Call Identity Length"}, |
865 | | { DPNSS_STATE_OF_DEST, "State of Destination"}, |
866 | | { DPNSS_STATE_OF_DEST_QUAL, "State of Destination Qualifier"}, |
867 | | { DPNSS_REASON_FOR_REDIR, "Reason For Redirection"}, |
868 | | { DPNSS_CLEARING_CAUSE, "Clearing Cause"}, |
869 | | { DPNSS_RECONT_ADDR, "Reconnect Address"}, |
870 | | { DPNSS_STATE_OF_OPERATOR, "State of Operator"}, |
871 | | { DPNSS_NIGHT_SERVICE, "Night Service"}, |
872 | | { DPNSS_PBX_FLAG, "PBX flag"}, |
873 | | { DPNSS_NUMBER_OF_CALLS, "Number of Calls"}, |
874 | | { DPNSS_NUMBER_OF_SERVERS, "Number of Servers"}, |
875 | | { DPNSS_PRIORITY_LEVEL, "Priority Level"}, |
876 | | { DPNSS_LOCATION, "Location"}, |
877 | | { DPNSS_SUBADDRESS, "Subaddress"}, |
878 | | { DPNSS_ALARM_LEVEL, "Alarm Level"}, |
879 | | { DPNSS_STAFF_PRESENT, "Staff Present"}, |
880 | | { DPNSS_TIME_AND_DATE, "Time and Date"}, |
881 | | { DPNSS_SERVICES, "Services"}, |
882 | | { DPNSS_PBX_REFERENCE, "PBX Reference"}, |
883 | | { DPNSS_TRUNK_GROUP_REF_NUMBER, "Trunk Group reference Number"}, |
884 | | { DPNSS_TRUNK_MEMBER_REF_NUMBER,"Trunk Member Reference Number"}, |
885 | | { DPNSS_CONF_PARTY_INDEX, "Conference Party Index"}, |
886 | | { DPNSS_CONF_PARTY_DET, "Conference Party Details"}, |
887 | | { DPNSS_ACCOUNT_CODE, "Account code"}, |
888 | | { DPNSS_CONF_BRIDGE_ADDR, "Conference Bridge Address"}, |
889 | | { DPNSS_COST_QUALIFIER, "Cost Qualifier"}, |
890 | | { DPNSS_CURRENCY_INDICATION, "Currency Indication"}, |
891 | | { DPNSS_CURRENCY_UNITS, "Currency Units"}, |
892 | | { DPNSS_TIME_INTERVAL, "Time Interval"}, |
893 | | { DPNSS_UNITS, "Units"}, |
894 | | { DPNSS_REMOTE_ADDRESS, "Remote Address"}, |
895 | | { DPNSS_TEST_INDEX, "Test Index"}, |
896 | | { DPNSS_TEST_RESULT, "Test Result"}, |
897 | | { DPNSS_TYPE_OF_ASSISTANCE, "Type of assistance"}, |
898 | | { DPNSS_REST_DOMAIN, "Restriction Domain"}, |
899 | | { DPNSS_GRP_PICK_UP_CODE, "Group Pick-Up Code"}, |
900 | | { DPNSS_PICK_UP_CALL_TYPE, "Pick-Up call type"}, |
901 | | { DPNSS_MALICIOUS_CALL_REF, "Malicious call reference"}, |
902 | | { DPNSS_TIMER_VALUE, "Timer Value"}, |
903 | | { DPNSS_BEARER_CAP, "Bearer capability"}, |
904 | | { DPNSS_ISDN_NUM_ATTR, "ISDM number attribute"}, |
905 | | { DPNSS_ISDN_DPNSS_SUBADDRESS, "ISDN DPNNS Subaddress"}, |
906 | | { DPNSS_ISDN_NUMBER_DIGITS, "ISDN Number Digits"}, |
907 | | { DPNSS_HIGH_LAYER_COMP, "High Layer Compatibility"}, |
908 | | { DPNSS_LOW_LAYER_COMP, "Low layer Compatibility"}, |
909 | | { DPNSS_PROGRESS_INDICATOR, "Progress Indicator"}, |
910 | | { DPNSS_VPN_ACCESS_REF_NUM, "VPN Access reference Number"}, |
911 | | { DPNSS_INDEX_NUMBER, "Index Number"}, |
912 | | { DPNSS_RESTRICTION_INDICATOR, "Restriction Indicator"}, |
913 | | { DPNSS_CAUSE, "Cause"}, |
914 | | { 0, NULL } |
915 | | }; |
916 | | static value_string_ext dpnss_sup_serv_par_str_vals_ext = VALUE_STRING_EXT_INIT(dpnss_sup_serv_par_str_vals); |
917 | | |
918 | | |
919 | | |
920 | | static void |
921 | | dissect_dpnns_sup_str_par(tvbuff_t *tvb, packet_info *pinfo, proto_tree * tree, int par_type_num, int par_start_offset, int par_end_offset) |
922 | 0 | { |
923 | |
|
924 | 0 | int par_len; |
925 | 0 | char * par_data; |
926 | |
|
927 | 0 | par_len = par_end_offset - par_start_offset; |
928 | 0 | if (par_len==0) { |
929 | 0 | par_type_num = DPNSS_NONE; |
930 | 0 | } |
931 | 0 | switch (par_type_num) { |
932 | 0 | case DPNSS_NONE: |
933 | 0 | proto_tree_add_string(tree, hf_dpnss_parameter, tvb, par_start_offset, par_len, "None"); |
934 | 0 | break; |
935 | | |
936 | | /* TODO: Use individual dissection of parameters if hf fields needed or in the case where |
937 | | special handling is needed for greater detail |
938 | | |
939 | | case DPNSS_SERV_MAR: |
940 | | * p 173 |
941 | | * More than one Service Marking character can be |
942 | | * included in the Parameter, each being separated |
943 | | * by the IA5 character space (2/0). |
944 | | * If decoded use: dpnss_serv_mark_vals |
945 | | * |
946 | | case DPNSS_STATUS: |
947 | | case DPNSS_ROUTE_RES_CLASS: |
948 | | case DPNSS_CBR_GRP: |
949 | | case DPNSS_FAC_LST_CODE: |
950 | | case DPNSS_NO_OF_FUR_TRANS: |
951 | | case DPNSS_NO_OF_FUR_ALT_R: |
952 | | case DPNSS_INT_CAP_LEV: |
953 | | case DPNSS_NESTING_LEVEL: |
954 | | case DPNSS_C_PARTY_ADDR: |
955 | | case DPNSS_B_PARTY_ADDR: |
956 | | case DPNSS_SIC: |
957 | | */ |
958 | 0 | case DPNSS_A_B_PARTY_ADDR: |
959 | 0 | proto_tree_add_item(tree, hf_dpnss_a_b_party_addr, tvb, par_start_offset, par_len, ENC_ASCII); |
960 | 0 | break; |
961 | | |
962 | | /* |
963 | | case DPNSS_DIVERSION_TYPE: |
964 | | case DPNSS_NSI_IDENTIFIER: |
965 | | case DPNSS_USER_DEFINED: |
966 | | case DPNSS_TEXT: |
967 | | */ |
968 | 0 | case DPNSS_CALL_INDEX: |
969 | 0 | proto_tree_add_item(tree, hf_dpnss_call_idx, tvb, par_start_offset, par_len, ENC_ASCII); |
970 | 0 | break; |
971 | | /* |
972 | | |
973 | | case DPNSS_PASSWORD: |
974 | | case DPNSS_CALL_DIR: |
975 | | case DPNSS_DPNSS_ISDN_TYPE: |
976 | | case DPNSS_HC_CLC: |
977 | | case DPNSS_ENHANCED_STR_ID: |
978 | | case DPNSS_STRING_ID: |
979 | | case DPNSS_STRING_ID_LIST: |
980 | | case DPNSS_TEXT_TYPE: |
981 | | case DPNSS_CHANNEL_STATUS: |
982 | | case DPNSS_CHANNEL_NUMBER: |
983 | | case DPNSS_BPL: |
984 | | case DPNSS_BCL: |
985 | | case DPNSS_DEVICE_INDEX: |
986 | | case DPNSS_CR_NO: |
987 | | case DPNSS_CALL_ID_LENGTH: |
988 | | case DPNSS_STATE_OF_DEST: |
989 | | case DPNSS_STATE_OF_DEST_QUAL: |
990 | | case DPNSS_REASON_FOR_REDIR: |
991 | | case DPNSS_CLEARING_CAUSE: |
992 | | case DPNSS_RECONT_ADDR: |
993 | | case DPNSS_STATE_OF_OPERATOR: |
994 | | case DPNSS_NIGHT_SERVICE: |
995 | | case DPNSS_PBX_FLAG: |
996 | | case DPNSS_NUMBER_OF_CALLS: |
997 | | case DPNSS_NUMBER_OF_SERVERS: |
998 | | case DPNSS_PRIORITY_LEVEL: |
999 | | case DPNSS_LOCATION: |
1000 | | case DPNSS_SUBADDRESS: |
1001 | | case DPNSS_ALARM_LEVEL: |
1002 | | case DPNSS_STAFF_PRESENT: |
1003 | | case DPNSS_TIME_AND_DATE: |
1004 | | case DPNSS_SERVICES: |
1005 | | * More than one Service Marking character can be |
1006 | | * included in the Parameter, each being separated |
1007 | | * by the IA5 character space (2/0). |
1008 | | * 1 = Call Offer not possible |
1009 | | * 2 = Executive Intrusion not possible |
1010 | | * 3 = Call Back When Free not possible |
1011 | | * 4 = Call Back Messaging not possible (see Note) |
1012 | | * 5 = Hold not possible |
1013 | | * 6 = Call Back When Next Used not possible |
1014 | | case DPNSS_PBX_REFERENCE: |
1015 | | case DPNSS_TRUNK_GROUP_REF_NUMBER: |
1016 | | case DPNSS_TRUNK_MEMBER_REF_NUMBER: |
1017 | | case DPNSS_CONF_PARTY_INDEX: |
1018 | | case DPNSS_CONF_PARTY_DET: |
1019 | | case DPNSS_ACCOUNT_CODE: |
1020 | | case DPNSS_CONF_BRIDGE_ADDR: |
1021 | | case DPNSS_COST_QUALIFIER: |
1022 | | case DPNSS_CURRENCY_INDICATION: |
1023 | | case DPNSS_CURRENCY_UNITS: |
1024 | | case DPNSS_TIME_INTERVAL: |
1025 | | case DPNSS_UNITS: |
1026 | | case DPNSS_REMOTE_ADDRESS: |
1027 | | case DPNSS_TEST_INDEX: |
1028 | | case DPNSS_TEST_RESULT: |
1029 | | case DPNSS_TYPE_OF_ASSISTANCE: |
1030 | | case DPNSS_REST_DOMAIN: |
1031 | | case DPNSS_GRP_PICK_UP_CODE: |
1032 | | case DPNSS_PICK_UP_CALL_TYPE: |
1033 | | case DPNSS_MALICIOUS_CALL_REF: |
1034 | | case DPNSS_TIMER_VALUE: |
1035 | | case DPNSS_BEARER_CAP: |
1036 | | case DPNSS_ISDN_NUM_ATTR: |
1037 | | case DPNSS_ISDN_DPNSS_SUBADDRESS: |
1038 | | case DPNSS_ISDN_NUMBER_DIGITS: |
1039 | | case DPNSS_HIGH_LAYER_COMP: |
1040 | | case DPNSS_LOW_LAYER_COMP: |
1041 | | case DPNSS_PROGRESS_INDICATOR: |
1042 | | case DPNSS_VPN_ACCESS_REF_NUM: |
1043 | | case DPNSS_INDEX_NUMBER: |
1044 | | case DPNSS_RESTRICTION_INDICATOR: |
1045 | | case DPNSS_CAUSE: |
1046 | | */ |
1047 | 0 | default: |
1048 | 0 | par_data = tvb_format_text(pinfo->pool, tvb,par_start_offset, par_len); |
1049 | | /* Used to print all pars without any special handling */ |
1050 | 0 | proto_tree_add_string_format(tree, hf_dpnss_parameter, tvb, par_start_offset, par_len, par_data, "Parameter %s: %s", |
1051 | 0 | val_to_str_ext(pinfo->pool, par_type_num, &dpnss_sup_serv_par_str_vals_ext, "Unknown (%d)" ), par_data); |
1052 | 0 | break; |
1053 | 0 | } |
1054 | |
|
1055 | 0 | } |
1056 | | |
1057 | | /* 3.1 Supplementary Information Strings |
1058 | | * A Supplementary Information String comprises a Supplementary |
1059 | | * Information Identifier which may be followed by one or more |
1060 | | * Parameters. A Supplementary Information String starts with the |
1061 | | * IA5 character * and ends with the IA5 character #. |
1062 | | * |
1063 | | * When the Supplementary Information String includes Parameters |
1064 | | * these are separated from the identifier and each other by a *. |
1065 | | * eg * Supplementary Information Identifier code # |
1066 | | * or * Supplementary Information Identifier code * Parameter # |
1067 | | * or * Supplementary Information Identifier code * Parameter * Parameter # |
1068 | | * A Supplementary Information String shall be wholly contained |
1069 | | * within one Selection or Indication Field (ie it shall not be |
1070 | | * split between messages). |
1071 | | * |
1072 | | * 3.2 Supplementary Information String Identifier |
1073 | | * The identifier comprises one or more IA5 numerals 0-9 which may |
1074 | | * be followed by a single IA5 alpha-character suffix in the range A-Z. |
1075 | | * The numerals of the identifier indicate the main function of the |
1076 | | * Supplementary Information String, eg "39F" indicates "Diverting |
1077 | | * on No Reply". "F" is the suffix. |
1078 | | * |
1079 | | * 3.5 Destination Address |
1080 | | * The Destination Address comprises one or more IA5 numerals 0 to |
1081 | | * 9, has no identifier code and is not prefixed by a * or |
1082 | | * terminated by a #. The digits are always the last characters in |
1083 | | * the Selection Block. The first Destination Address digit |
1084 | | * immediately follows the # of the last Supplementary Information |
1085 | | * String. |
1086 | | */ |
1087 | | |
1088 | | static int |
1089 | | dissect_dpnss_sup_info_str(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, unsigned offset) |
1090 | 0 | { |
1091 | 0 | proto_tree *sup_str_tree; |
1092 | 0 | unsigned start_offset, hash_offset, tvb_end_offset, sup_inf_str_end_offset, str_no; |
1093 | 0 | unsigned par_start_offset, par_end_offset, number_of_found_par; |
1094 | 0 | unsigned sup_inf_str_len, par_type_num; |
1095 | 0 | unsigned sup_str_num = 0; |
1096 | 0 | uint8_t octet; |
1097 | 0 | bool last_string = false; |
1098 | 0 | bool has_par; |
1099 | |
|
1100 | 0 | tvb_end_offset = tvb_reported_length(tvb); |
1101 | |
|
1102 | 0 | str_no = 1; |
1103 | 0 | while ((offset<tvb_end_offset)&&(last_string == false)) { |
1104 | 0 | octet = tvb_get_uint8(tvb,offset); |
1105 | 0 | if (octet == '*') { |
1106 | | /* Supplementary Information String */ |
1107 | 0 | start_offset = offset; |
1108 | 0 | has_par = true; |
1109 | 0 | number_of_found_par = 0; |
1110 | | /* offset points to start of supplementary information string */ |
1111 | 0 | offset++; |
1112 | | // Old code did not check for success ??? hash_offset = tvb_find_uint8 (tvb, offset, -1, '#'); |
1113 | 0 | tvb_find_uint8_remaining(tvb, offset, '#', &hash_offset); |
1114 | 0 | sup_str_tree = proto_tree_add_subtree_format(tree, tvb, start_offset, hash_offset-start_offset+1, |
1115 | 0 | ett_dpnss_sup_str, NULL, "Supplementary Information %u: %s",str_no, |
1116 | 0 | tvb_format_text(pinfo->pool, tvb,start_offset,hash_offset-start_offset+1)); |
1117 | | /* SUPPLEMENTARY INFORMATION STRING IDENTIFIER |
1118 | | * Get the parameter number string and translate it to an index into the dpnns_sup_serv_set. |
1119 | | * The number may have a trailing alpha character at the end. |
1120 | | */ |
1121 | 0 | if (!tvb_find_uint8_length(tvb, offset, hash_offset - offset, '*', &sup_inf_str_end_offset)) { |
1122 | | /* no parameters */ |
1123 | 0 | has_par = false; |
1124 | 0 | } |
1125 | 0 | sup_inf_str_len = sup_inf_str_end_offset - offset; |
1126 | 0 | if (tvb_get_string_uint(tvb, offset, sup_inf_str_len, ENC_STR_DEC, &sup_str_num, NULL) && (sup_str_num < array_length(dpnns_sup_serv_set))) { |
1127 | 0 | proto_tree_add_string(sup_str_tree, hf_dpnss_sup_str, tvb, offset, sup_inf_str_len, |
1128 | 0 | dpnns_sup_serv_set[sup_str_num].compact_name); |
1129 | 0 | offset = sup_inf_str_end_offset+1; |
1130 | | /* Find parameter(s) */ |
1131 | 0 | while (has_par) { |
1132 | 0 | number_of_found_par++; |
1133 | | /* 1:st Parameter */ |
1134 | 0 | par_start_offset = offset; |
1135 | 0 | if (!tvb_find_uint8_remaining(tvb, offset, '*', &par_end_offset)) { |
1136 | | /* last parameter */ |
1137 | 0 | par_end_offset = hash_offset; |
1138 | 0 | has_par = false; |
1139 | 0 | } |
1140 | 0 | switch (number_of_found_par) { |
1141 | 0 | case 1: |
1142 | 0 | par_type_num = dpnns_sup_serv_set[sup_str_num].par1_num; |
1143 | 0 | dissect_dpnns_sup_str_par(tvb, pinfo, sup_str_tree, par_type_num, par_start_offset, par_end_offset); |
1144 | 0 | break; |
1145 | 0 | case 2: |
1146 | 0 | par_type_num = dpnns_sup_serv_set[sup_str_num].par2_num; |
1147 | 0 | dissect_dpnns_sup_str_par(tvb, pinfo, sup_str_tree, par_type_num, par_start_offset, par_end_offset); |
1148 | 0 | break; |
1149 | 0 | case 3: |
1150 | 0 | par_type_num = dpnns_sup_serv_set[sup_str_num].par3_num; |
1151 | 0 | dissect_dpnns_sup_str_par(tvb, pinfo, sup_str_tree, par_type_num, par_start_offset, par_end_offset); |
1152 | 0 | break; |
1153 | 0 | case 4: |
1154 | 0 | par_type_num = dpnns_sup_serv_set[sup_str_num].par4_num; |
1155 | 0 | dissect_dpnns_sup_str_par(tvb, pinfo, sup_str_tree, par_type_num, par_start_offset, par_end_offset); |
1156 | 0 | break; |
1157 | 0 | default: |
1158 | 0 | break; |
1159 | 0 | } |
1160 | | /* More parameters ? */ |
1161 | 0 | offset = par_end_offset+1; |
1162 | |
|
1163 | 0 | } |
1164 | 0 | } |
1165 | 0 | offset = hash_offset+1; |
1166 | 0 | str_no++; |
1167 | 0 | } else { |
1168 | 0 | last_string = true; |
1169 | 0 | proto_tree_add_item(tree, hf_dpnss_dest_addr, tvb, offset, -1, ENC_ASCII); |
1170 | 0 | } |
1171 | 0 | } |
1172 | 0 | return offset; |
1173 | 0 | } |
1174 | | |
1175 | | |
1176 | | static int |
1177 | | dissect_dpnss_LbL_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) |
1178 | 0 | { |
1179 | 0 | proto_item *ind_field_item; |
1180 | 0 | proto_tree *sic_field_tree, *ind_field_tree; |
1181 | 0 | unsigned offset = 0; |
1182 | 0 | unsigned tvb_end_offset; |
1183 | 0 | uint8_t octet; |
1184 | |
|
1185 | 0 | tvb_end_offset = tvb_reported_length(tvb); |
1186 | |
|
1187 | 0 | proto_tree_add_item(tree, hf_dpnss_LbL_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
1188 | 0 | octet = tvb_get_uint8(tvb,offset)&0x0f; |
1189 | 0 | offset++; |
1190 | 0 | col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", |
1191 | 0 | val_to_str(pinfo->pool, octet, dpnss_LbL_msg_short_type_vals, "Unknown (%d)" )); |
1192 | 0 | if (tree) { |
1193 | 0 | switch (octet) { |
1194 | 0 | case DPNSS_LbL_MSG_LLM_C: |
1195 | | /* 2.3.1 LINK-by-LINK Message (COMPLETE) - LLM(C)*/ |
1196 | 0 | case DPNSS_LbL_MSG_LLM_I: |
1197 | | /* 2.3.2 LINK-by-LINK Message (INCOMPLETE) - LLM(I) */ |
1198 | | /* Indication Field */ |
1199 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1200 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1201 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1202 | 0 | break; |
1203 | 0 | case DPNSS_LbL_MSG_LLRM: |
1204 | | /* 2.3.3 LINK-by-LINK REJECT Message - LLRM */ |
1205 | | /* Rejection Cause */ |
1206 | 0 | proto_tree_add_item(tree, hf_dpnss_rejection_cause, tvb, offset, 1, ENC_BIG_ENDIAN); |
1207 | | /* Indication Field (Optional) */ |
1208 | 0 | if (tvb_end_offset>offset) { |
1209 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1210 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1211 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1212 | 0 | } |
1213 | 0 | break; |
1214 | 0 | case DPNSS_LbL_MSG_SM: |
1215 | | /* 2.3.4 SWAP Message - SM */ |
1216 | | /* Service Indicator Code |
1217 | | * Note: On data calls the SIC may comprise more than one octet. |
1218 | | * The Service Indicator Code is coded in accordance with ANNEX 1. |
1219 | | */ |
1220 | 0 | sic_field_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dpnss_sic_field, NULL, "Service Indicator Code"); |
1221 | 0 | offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset); |
1222 | | /* Indication Field */ |
1223 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1224 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1225 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1226 | 0 | break; |
1227 | 0 | case DPNSS_LbL_MSG_LMM: |
1228 | | /* 2.3.5 LINK MAINTENANCE Message - LMM */ |
1229 | | /* Maintenance Action |
1230 | | * respond to a request for,maintenance actions to be performed. |
1231 | | * The Maintenance Action field identifies the action required or |
1232 | | * the response being made. The Maintenance Action field is coded |
1233 | | * as shown in ANNEX 6. |
1234 | | */ |
1235 | 0 | proto_tree_add_item(tree, hf_dpnss_maintenance_action, tvb, offset, 1, ENC_BIG_ENDIAN); |
1236 | 0 | offset++; |
1237 | | /* Indication Field */ |
1238 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1239 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1240 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1241 | 0 | break; |
1242 | 0 | case DPNSS_LbL_MSG_LMRM: |
1243 | | /* 2.3.6 LINK MAINTENANCE REJECT Message - LMRM */ |
1244 | 0 | proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, ENC_BIG_ENDIAN); |
1245 | 0 | offset++; |
1246 | | /* Indication Field */ |
1247 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1248 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1249 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1250 | 0 | break; |
1251 | 0 | default: |
1252 | 0 | proto_tree_add_expert_remaining(tree, pinfo, &ei_dpnss_not_supported_yet, tvb, offset); |
1253 | 0 | break; |
1254 | 0 | } |
1255 | 0 | } |
1256 | 0 | return offset; |
1257 | 0 | } |
1258 | | |
1259 | | |
1260 | | static int |
1261 | | dissect_dpnss_e2e_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) |
1262 | 0 | { |
1263 | 0 | proto_item *sel_field_item, *ind_field_item; |
1264 | 0 | proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree; |
1265 | 0 | int offset = 0; |
1266 | 0 | int tvb_end_offset; |
1267 | 0 | uint8_t octet; |
1268 | |
|
1269 | 0 | tvb_end_offset = tvb_reported_length(tvb); |
1270 | |
|
1271 | 0 | proto_tree_add_item(tree, hf_dpnss_e2e_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
1272 | 0 | octet = tvb_get_uint8(tvb,offset)&0x0f; |
1273 | 0 | offset++; |
1274 | 0 | col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", |
1275 | 0 | val_to_str(pinfo->pool, octet, dpnss_e2e_msg_short_type_vals, "Unknown (%d)" )); |
1276 | 0 | if (tree) { |
1277 | 0 | switch (octet) { |
1278 | 0 | case DPNSS_E2E_MSG_EEM_C: |
1279 | | /* 2.2.1 END-to-END Message (COMPLETE) - EEM(C) */ |
1280 | 0 | case DPNSS_E2E_MSG_EEM_I: |
1281 | | /* Fall trough */ |
1282 | | /* Indication Field */ |
1283 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1284 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1285 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1286 | 0 | break; |
1287 | 0 | case DPNSS_E2E_MSG_SCRM: |
1288 | | /* 2.2.3 SINGLE-CHANNEL CLEAR REQUEST Message - SCRM */ |
1289 | 0 | case DPNSS_E2E_MSG_SCIM: |
1290 | | /* 2.2.4 SINGLE-CHANNEL CLEAR INDICATION Message - SCIM */ |
1291 | | /* Clearing Cause */ |
1292 | 0 | proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, ENC_BIG_ENDIAN); |
1293 | 0 | offset++; |
1294 | | /* Indication Field (Optional) */ |
1295 | 0 | if (tvb_end_offset>offset) { |
1296 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1297 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1298 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1299 | 0 | } |
1300 | 0 | break; |
1301 | 0 | case DPNSS_E2E_MSG_ERM_C: |
1302 | | /* 2.2.5 END-to-END RECALL Message (COMPLETE) - ERM(C) */ |
1303 | 0 | case DPNSS_E2E_MSG_ERM_I: |
1304 | | /* 2.2.6 END-to-END RECALL Message (INCOMPLETE) - ERM(I) */ |
1305 | | /* Service Indicator Code |
1306 | | * Note: On data calls the SIC may comprise more than one octet. |
1307 | | * The Service Indicator Code is coded in accordance with ANNEX 1. |
1308 | | */ |
1309 | 0 | sic_field_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dpnss_sic_field, NULL, "Service Indicator Code"); |
1310 | 0 | offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset); |
1311 | | /* |
1312 | | * Selection Field |
1313 | | * The Selection Field contains the selection information relating |
1314 | | * to a call set-up or Supplementary Service Request, and is |
1315 | | * structured as shown in Subsection 3. |
1316 | | */ |
1317 | 0 | sel_field_item = proto_tree_add_item(tree, hf_dpnss_selection_field, tvb, offset, -1, ENC_ASCII); |
1318 | 0 | sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field); |
1319 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset); |
1320 | 0 | break; |
1321 | 0 | case DPNSS_E2E_MSG_NSIM: |
1322 | | /* 2.2.7 NON SPECIFIED INFORMATION Message - NSIM */ |
1323 | | /* Usage Identifier Oct 1 - |
1324 | | * coding of the Usage Identifier, as described in section 49. |
1325 | | * The use of NSIMs is described in greater detail in SECTION 49. |
1326 | | * BIT 8 7 6 5 4 3 2 1 |
1327 | | * ext | Manufacturer code | subcode |
1328 | | */ |
1329 | 0 | octet = tvb_get_uint8(tvb,offset); |
1330 | 0 | proto_tree_add_item(tree, hf_dpnss_ext_bit, tvb, offset, 1, ENC_BIG_ENDIAN); |
1331 | 0 | proto_tree_add_item(tree, hf_dpnss_man_code, tvb, offset, 1, ENC_BIG_ENDIAN); |
1332 | 0 | proto_tree_add_item(tree, hf_dpnss_subcode, tvb, offset, 1, ENC_BIG_ENDIAN); |
1333 | 0 | offset++; |
1334 | 0 | if ((octet&0x80)==0x80) { |
1335 | | /* Extension bit set */ |
1336 | 0 | offset++; |
1337 | 0 | } |
1338 | | /* User Information oct 2 + n |
1339 | | */ |
1340 | 0 | proto_tree_add_item(tree, hf_dpnss_user_information, tvb, offset, -1, ENC_NA); |
1341 | 0 | break; |
1342 | 0 | default: |
1343 | 0 | proto_tree_add_expert_remaining(tree, pinfo, &ei_dpnss_not_supported_yet, tvb, offset); |
1344 | 0 | break; |
1345 | 0 | } |
1346 | 0 | } |
1347 | 0 | return offset; |
1348 | 0 | } |
1349 | | |
1350 | | static int |
1351 | | dissect_dpnss_cc_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) |
1352 | 0 | { |
1353 | 0 | proto_item *sel_field_item, *ind_field_item; |
1354 | 0 | proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree; |
1355 | 0 | int offset = 0; |
1356 | 0 | int tvb_end_offset; |
1357 | 0 | uint8_t octet; |
1358 | |
|
1359 | 0 | tvb_end_offset = tvb_reported_length(tvb); |
1360 | 0 | proto_tree_add_item(tree, hf_dpnss_cc_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN); |
1361 | 0 | octet = tvb_get_uint8(tvb,offset)&0x0f; |
1362 | 0 | offset++; |
1363 | 0 | col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", |
1364 | 0 | val_to_str(pinfo->pool, octet, dpnss_cc_msg_short_type_vals, "Unknown (%d)" )); |
1365 | |
|
1366 | 0 | if (tree) { |
1367 | 0 | switch (octet) { |
1368 | 0 | case DPNSS_CC_MSG_ISRM_C: |
1369 | | /* 2.1.1 INITIAL SERVICE REQUEST Message (COMPLETE) - ISRM (C) */ |
1370 | | /* fall trough */ |
1371 | 0 | case DPNSS_CC_MSG_ISRM_I: |
1372 | | /* 2.1.2 INITIAL SERVICE REQUEST Message (INCOMPLETE) - ISRM(I) */ |
1373 | 0 | case DPNSS_CC_MSG_RM_C: |
1374 | | /* 2.1.3 RECALL Message (COMPLETE) - RM(C) */ |
1375 | | /* fall trough */ |
1376 | 0 | case DPNSS_CC_MSG_RM_I: |
1377 | | /* 2.1.4 RECALL Message (INCOMPLETE) - RM(I)*/ |
1378 | | /* fall trough */ |
1379 | | /* Service Indicator Code |
1380 | | * Note: On data calls the SIC may comprise more than one octet. |
1381 | | * The Service Indicator Code is coded in accordance with ANNEX 1. |
1382 | | */ |
1383 | 0 | sic_field_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dpnss_sic_field, NULL, "Service Indicator Code"); |
1384 | 0 | offset =dissect_dpnss_sic(tvb, pinfo, sic_field_tree, offset); |
1385 | | /* |
1386 | | * Selection Field |
1387 | | * The Selection Field contains the selection information relating |
1388 | | * to a call set-up or Supplementary Service Request, and is |
1389 | | * structured as shown in Subsection 3. |
1390 | | */ |
1391 | 0 | sel_field_item = proto_tree_add_item(tree, hf_dpnss_selection_field, tvb, offset, -1, ENC_ASCII); |
1392 | 0 | sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field); |
1393 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset); |
1394 | 0 | break; |
1395 | 0 | case DPNSS_CC_MSG_CCM: |
1396 | | /* 2.1.5 CALL CONNECTED Message - CCM */ |
1397 | 0 | if (tvb_end_offset>offset) { |
1398 | | /* Indication Field (Optional) */ |
1399 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1400 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1401 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1402 | 0 | } |
1403 | 0 | break; |
1404 | 0 | case DPNSS_CC_MSG_NIM: |
1405 | | /* 2.1.6 NETWORK INDICATION Message - NIM */ |
1406 | | /* fall trough */ |
1407 | 0 | case DPNSS_CC_MSG_NAM: |
1408 | | /* 2.1.9 NUMBER ACKNOWLEDGE Message - NAM */ |
1409 | | /* Indication Field */ |
1410 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1411 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1412 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1413 | 0 | break; |
1414 | 0 | case DPNSS_CC_MSG_CRM: |
1415 | | /* 2.1.7 CLEAR REQUEST Message - CRM */ |
1416 | | /* 2.1.8 CLEAR INDICATION Message - CIM */ |
1417 | | /* Clearing Cause */ |
1418 | 0 | proto_tree_add_item(tree, hf_dpnss_clearing_cause, tvb, offset, 1, ENC_BIG_ENDIAN); |
1419 | 0 | offset++; |
1420 | | /* Indication Field (Optional) */ |
1421 | 0 | if (tvb_end_offset>offset) { |
1422 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1423 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1424 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1425 | 0 | } |
1426 | 0 | break; |
1427 | 0 | case DPNSS_CC_MSG_RRM: |
1428 | | /* 2.1.10 RECALL REJECTION Message - RRM */ |
1429 | | /* Rejection Cause */ |
1430 | 0 | proto_tree_add_item(tree, hf_dpnss_rejection_cause, tvb, offset, 1, ENC_BIG_ENDIAN); |
1431 | | /* Indication Field (Optional) */ |
1432 | 0 | if (tvb_end_offset>offset) { |
1433 | 0 | ind_field_item = proto_tree_add_item(tree, hf_dpnss_indication_field, tvb, offset, -1, ENC_ASCII); |
1434 | 0 | ind_field_tree = proto_item_add_subtree(ind_field_item, ett_dpnss_ind_field); |
1435 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, ind_field_tree, offset); |
1436 | 0 | } |
1437 | 0 | break; |
1438 | 0 | case DPNSS_CC_MSG_SSRM_I: |
1439 | | /* 2.1.11 SUBSEQUENT SERVICE REQUEST Message (INCOMPLETE) - SSRM(I) */ |
1440 | | /* Selection Field */ |
1441 | 0 | sel_field_item = proto_tree_add_item(tree, hf_dpnss_selection_field, tvb, offset, -1, ENC_ASCII); |
1442 | 0 | sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field); |
1443 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset); |
1444 | 0 | break; |
1445 | 0 | case DPNSS_CC_MSG_SSRM_C: |
1446 | | /* 2.1.12 SUBSEQUENT SERVICE REQUEST Message (COMPLETE) - SSRM(C) */ |
1447 | | /* Selection Field (Optional) */ |
1448 | 0 | if (tvb_end_offset>offset) { |
1449 | 0 | sel_field_item = proto_tree_add_item(tree, hf_dpnss_selection_field, tvb, offset, -1, ENC_ASCII); |
1450 | 0 | sel_field_tree = proto_item_add_subtree(sel_field_item, ett_dpnss_sel_field); |
1451 | 0 | offset = dissect_dpnss_sup_info_str(tvb, pinfo, sel_field_tree, offset); |
1452 | 0 | } |
1453 | 0 | break; |
1454 | 0 | case DPNSS_CC_MSG_CS: |
1455 | 0 | case DPNSS_CC_MSG_CA: |
1456 | | /* DASS2 ?*/ |
1457 | 0 | default: |
1458 | 0 | proto_tree_add_expert_format_remaining(tree, pinfo, &ei_dpnss_not_supported_yet, tvb, offset, "Unknown or Dissection of this message not supported yet"); |
1459 | 0 | break; |
1460 | 0 | } |
1461 | 0 | } |
1462 | 0 | return offset; |
1463 | 0 | } |
1464 | | /* Code to actually dissect the packets */ |
1465 | | static int |
1466 | | dissect_dpnss(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) |
1467 | 0 | { |
1468 | 0 | int offset = 0; |
1469 | 0 | proto_item *item, *group_item; |
1470 | 0 | proto_tree *dpnss_tree; |
1471 | 0 | uint8_t octet; |
1472 | | |
1473 | | /* Make entries in Protocol column and Info column on summary display */ |
1474 | 0 | col_set_str(pinfo->cinfo, COL_PROTOCOL, "DPNSS"); |
1475 | |
|
1476 | 0 | item = proto_tree_add_item(tree, proto_dpnss, tvb, 0, -1, ENC_NA); |
1477 | 0 | dpnss_tree = proto_item_add_subtree(item, ett_dpnss); |
1478 | 0 | group_item = proto_tree_add_item(dpnss_tree, hf_dpnss_msg_grp_id, tvb, offset, 1, ENC_BIG_ENDIAN); |
1479 | 0 | octet = tvb_get_uint8(tvb,offset)>>4; |
1480 | 0 | switch (octet) { |
1481 | 0 | case DPNNS_MESSAGE_GROUP_CC: |
1482 | | /* Call Control Message Group */ |
1483 | 0 | dissect_dpnss_cc_msg(tvb, pinfo, dpnss_tree); |
1484 | 0 | break; |
1485 | 0 | case DPNNS_MESSAGE_GROUP_E2E: |
1486 | | /* End-to-End Message Group */ |
1487 | 0 | dissect_dpnss_e2e_msg(tvb, pinfo, dpnss_tree); |
1488 | 0 | break; |
1489 | 0 | case DPNNS_MESSAGE_GROUP_LbL: |
1490 | | /* Link-by-Link Message Group */ |
1491 | 0 | dissect_dpnss_LbL_msg(tvb, pinfo, dpnss_tree); |
1492 | 0 | break; |
1493 | 0 | default: |
1494 | 0 | expert_add_info(pinfo, group_item, &ei_dpnss_msg_grp_id); |
1495 | 0 | break; |
1496 | 0 | } |
1497 | 0 | return tvb_captured_length(tvb); |
1498 | 0 | } |
1499 | | |
1500 | | void |
1501 | | proto_register_dpnss(void) |
1502 | 15 | { |
1503 | | /* Setup list of header fields See Section 1.6.1 for details*/ |
1504 | 15 | static hf_register_info hf[] = { |
1505 | 15 | { &hf_dpnss_msg_grp_id, |
1506 | 15 | { "Message Group Identifier", "dpnss.msg_grp_id", |
1507 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_msg_grp_id_vals), 0xf0, |
1508 | 15 | NULL, HFILL } |
1509 | 15 | }, |
1510 | 15 | { &hf_dpnss_cc_msg_type, |
1511 | 15 | { "Call Control Message Type", "dpnss.cc_msg_type", |
1512 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_cc_msg_type_vals), 0x0f, |
1513 | 15 | NULL, HFILL } |
1514 | 15 | }, |
1515 | 15 | { &hf_dpnss_e2e_msg_type, |
1516 | 15 | { "END-TO-END Message Type", "dpnss.e2e_msg_type", |
1517 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_e2e_msg_type_vals), 0x0f, |
1518 | 15 | NULL, HFILL } |
1519 | 15 | }, |
1520 | 15 | { &hf_dpnss_LbL_msg_type, |
1521 | 15 | { "LINK-BY-LINK Message Type", "dpnss.lbl_msg_type", |
1522 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_LbL_msg_type_vals), 0x0f, |
1523 | 15 | NULL, HFILL } |
1524 | 15 | }, |
1525 | 15 | { &hf_dpnss_ext_bit, |
1526 | 15 | { "Extension bit", "dpnss.ext_bit", |
1527 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_ext_bit_vals), 0x80, |
1528 | 15 | NULL, HFILL } |
1529 | 15 | }, |
1530 | 15 | { &hf_dpnss_ext_bit_notall, |
1531 | 15 | { "Extension bit", "dpnss.ext_bit_notall", |
1532 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_ext_bit_no_ext_vals), 0x80, |
1533 | 15 | NULL, HFILL } |
1534 | 15 | }, |
1535 | 15 | { &hf_dpnss_sic_type, |
1536 | 15 | { "Type of data", "dpnss.sic_type", |
1537 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_sic_type_type_vals), 0x70, |
1538 | 15 | NULL, HFILL } |
1539 | 15 | }, |
1540 | 15 | { &hf_dpnss_sic_details_for_speech, |
1541 | 15 | { "Details for Speech", "dpnss.sic_details_for_speech", |
1542 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_sic_details_for_speech_vals), 0x0f, |
1543 | 15 | NULL, HFILL } |
1544 | 15 | }, |
1545 | 15 | { &hf_dpnss_sic_details_for_data1, |
1546 | 15 | { "Data Rates", "dpnss.sic_details_for_data1", |
1547 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_sic_details_for_data_rates1_vals), 0x0f, |
1548 | 15 | "Type of Data (010) : Data Rates", HFILL } |
1549 | 15 | }, |
1550 | 15 | { &hf_dpnss_sic_details_for_data2, |
1551 | 15 | { "Data Rates", "dpnss.sic_details_data2", |
1552 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_sic_details_for_data_rates2_vals), 0x0f, |
1553 | 15 | "Type of Data (011) : Data Rates", HFILL } |
1554 | 15 | }, |
1555 | 15 | { &hf_dpnss_dest_addr, |
1556 | 15 | { "Destination Address", "dpnss.dest_addr", |
1557 | 15 | FT_STRING, BASE_NONE, NULL, 0x0, |
1558 | 15 | NULL, HFILL } |
1559 | 15 | }, |
1560 | 15 | { &hf_dpnss_sic_oct2_data_type, |
1561 | 15 | { "Data Type", "dpnss.sic_oct2_data_type", |
1562 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_sic_oct2_data_type_vals), 0x07, |
1563 | 15 | NULL, HFILL } |
1564 | 15 | }, |
1565 | 15 | { &hf_dpnss_sic_oct2_duplex, |
1566 | 15 | { "Data Type", "dpnss.sic_oct2_duplex", |
1567 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_duplex_vals), 0x08, |
1568 | 15 | NULL, HFILL } |
1569 | 15 | }, |
1570 | 15 | { &hf_dpnss_sic_oct2_net_ind_clk, |
1571 | 15 | { "Network Independent Clock", "dpnss.sic_oct2_net_ind_clk", |
1572 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_sic_oct2_net_ind_clk_vals), 0x40, |
1573 | 15 | NULL, HFILL } |
1574 | 15 | }, |
1575 | 15 | { &hf_dpnss_sic_oct2_sync_data_format, |
1576 | 15 | { "Data Format", "dpnss.sic_oct2_sync_data_format", |
1577 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_sic_oct2_sync_data_format_vals), 0x20, |
1578 | 15 | NULL, HFILL } |
1579 | 15 | }, |
1580 | 15 | { &hf_dpnss_sic_oct2_sync_byte_timing, |
1581 | 15 | { "Byte Timing", "dpnss.sic_oct2_sync_byte_timing", |
1582 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_provided_vals), 0x10, |
1583 | 15 | NULL, HFILL } |
1584 | 15 | }, |
1585 | 15 | { &hf_dpnss_sic_oct2_async_data, |
1586 | 15 | { "Data Format", "dpnss.sic_oct2_async_data", |
1587 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_sic_oct2_async_data_type_vals), 0x30, |
1588 | 15 | NULL, HFILL } |
1589 | 15 | }, |
1590 | 15 | { &hf_dpnss_sic_oct2_async_flow_ctrl, |
1591 | 15 | { "Flow Control", "dpnss.sic_oct2_async_flow_ctrl", |
1592 | 15 | FT_BOOLEAN, 8, TFS(&dpnss_flow_control_vals), 0x40, |
1593 | 15 | NULL, HFILL } |
1594 | 15 | }, |
1595 | 15 | { &hf_dpnss_clearing_cause, |
1596 | 15 | { "Clearing Cause", "dpnss.clearing_cause", |
1597 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_clearing_cause_code_vals), 0x0, |
1598 | 15 | NULL, HFILL } |
1599 | 15 | }, |
1600 | 15 | { &hf_dpnss_rejection_cause, |
1601 | 15 | { "Rejection Cause", "dpnss.rejection_cause", |
1602 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_clearing_cause_code_vals), 0x0, |
1603 | 15 | NULL, HFILL } |
1604 | 15 | }, |
1605 | 15 | { &hf_dpnss_man_code, |
1606 | 15 | { "Manufacturer Code", "dpnss.man_code", |
1607 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_man_code_vals), 0x3c, |
1608 | 15 | NULL, HFILL } |
1609 | 15 | }, |
1610 | 15 | { &hf_dpnss_subcode, |
1611 | 15 | { "Subcode", "dpnss.subcode", |
1612 | 15 | FT_UINT8, BASE_DEC, NULL, 0x03, |
1613 | 15 | NULL, HFILL } |
1614 | 15 | }, |
1615 | 15 | { &hf_dpnss_maintenance_action, |
1616 | 15 | { "Maintenance action", "dpnss.maint_act", |
1617 | 15 | FT_UINT8, BASE_DEC, VALS(dpnss_maintenance_actions_vals), 0x0, |
1618 | 15 | NULL, HFILL } |
1619 | 15 | }, |
1620 | 15 | { &hf_dpnss_a_b_party_addr, |
1621 | 15 | { "A/B party Address", "dpnss.a_b_party_addr", |
1622 | 15 | FT_STRING, BASE_NONE, NULL, 0x0, |
1623 | 15 | NULL, HFILL } |
1624 | 15 | }, |
1625 | 15 | { &hf_dpnss_call_idx, |
1626 | 15 | { "Call Index", "dpnss.call_idx", |
1627 | 15 | FT_STRING, BASE_NONE, NULL, 0x0, |
1628 | 15 | NULL, HFILL } |
1629 | 15 | }, |
1630 | | |
1631 | | /* Generated from convert_proto_tree_add_text.pl */ |
1632 | 15 | { &hf_dpnss_indication_field, { "Indication Field", "dpnss.indication_field", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, |
1633 | 15 | { &hf_dpnss_selection_field, { "Selection Field", "dpnss.selection_field", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, |
1634 | 15 | { &hf_dpnss_user_information, { "User Information", "dpnss.user_information", FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL }}, |
1635 | 15 | { &hf_dpnss_sup_str, { "Sup str", "dpnss.sup_str", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, |
1636 | 15 | { &hf_dpnss_parameter, { "Parameter", "dpnss.parameter", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL }}, |
1637 | | |
1638 | 15 | }; |
1639 | | |
1640 | | /* Setup protocol subtree array */ |
1641 | 15 | static int *ett[] = { |
1642 | 15 | &ett_dpnss, |
1643 | 15 | &ett_dpnss_sel_field, |
1644 | 15 | &ett_dpnss_sic_field, |
1645 | 15 | &ett_dpnss_ind_field, |
1646 | 15 | &ett_dpnss_sup_str, |
1647 | 15 | }; |
1648 | | |
1649 | 15 | static ei_register_info ei[] = { |
1650 | 15 | { &ei_dpnss_not_supported_yet, { "dpnss.not_supported_yet", PI_UNDECODED, PI_WARN, "Dissection of this message not supported yet", EXPFILL }}, |
1651 | 15 | { &ei_dpnss_msg_grp_id, { "dpnss.msg_grp_id.unknown", PI_PROTOCOL, PI_WARN, "Unknown Message Group", EXPFILL }}, |
1652 | 15 | }; |
1653 | | |
1654 | 15 | expert_module_t* expert_dpnss; |
1655 | | |
1656 | | /* Register the protocol name and description */ |
1657 | 15 | proto_dpnss = proto_register_protocol("Digital Private Signalling System No 1","DPNSS", "dpnss"); |
1658 | 15 | register_dissector("dpnss", dissect_dpnss, proto_dpnss); |
1659 | | |
1660 | | /* Required function calls to register the header fields and subtrees used */ |
1661 | 15 | proto_register_field_array(proto_dpnss, hf, array_length(hf)); |
1662 | 15 | proto_register_subtree_array(ett, array_length(ett)); |
1663 | 15 | expert_dpnss = expert_register_protocol(proto_dpnss); |
1664 | 15 | expert_register_field_array(expert_dpnss, ei, array_length(ei)); |
1665 | | |
1666 | 15 | } |
1667 | | |
1668 | | /* |
1669 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
1670 | | * |
1671 | | * Local variables: |
1672 | | * c-basic-offset: 4 |
1673 | | * tab-width: 8 |
1674 | | * indent-tabs-mode: nil |
1675 | | * End: |
1676 | | * |
1677 | | * vi: set shiftwidth=4 tabstop=8 expandtab: |
1678 | | * :indentSize=4:tabSize=8:noTabs=true: |
1679 | | */ |