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