1 /* packet-dpnss_dass2.c
2 * Routines for DPNNS/DASS2 dissection
3 * Copyright 2007, Anders Broman <anders.broman[at]ericsson.com>
5 * Supplementarry string parameter table and testing by Tomas Muehlhoff.
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
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.
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.
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.
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
42 #include <epan/packet.h>
43 #include <epan/proto.h>
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;
72 static int hf_dpnss_a_b_party_addr = -1;
73 static int hf_dpnss_call_idx = -1;
75 #define DPNNS_MESSAGE_GROUP_CC 0
76 #define DPNNS_MESSAGE_GROUP_E2E 2
77 #define DPNNS_MESSAGE_GROUP_LbL 4
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
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;
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"},
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)"},
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)"},
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
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"},
163 static const value_string dpnss_e2e_msg_short_type_vals[] = {
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
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"},
192 static const value_string dpnss_LbL_msg_short_type_vals[] = {
202 static const true_false_string dpnss_ext_bit_vals = {
203 "further octet(s) follow",
207 static const true_false_string dpnss_ext_bit_no_ext_vals = {
211 /* SECTION 4 ANNEX 1 */
212 static const value_string dpnss_sic_type_type_vals[] = {
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"},
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"},
244 static const value_string dpnss_sic_details_for_data_rates1_vals[] = {
264 static const value_string dpnss_sic_details_for_data_rates2_vals[] = {
273 {8, "75/1200 bit/s"},
274 {9, "1200/75 bit/s"},
285 static const value_string dpnss_sic_oct2_data_type_vals[] = {
297 static const true_false_string dpnss_duplex_vals = {
302 static const true_false_string dpnss_sic_oct2_sync_data_format_vals = {
304 "Anonymous or Unformatted"
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"
312 static const true_false_string dpnss_provided_vals = {
317 static const value_string dpnss_sic_oct2_async_data_type_vals[] = {
324 static const true_false_string dpnss_flow_control_vals = {
325 "TA has ESRA capability",
326 "TA does not have ESRA capability"
329 /* SECTION 4 Global Issue 7
330 * ANNEX 3 CLEARING/REJECTION CAUSE CODES
332 static const value_string dpnss_clearing_cause_code_vals[] = {
333 {0x29, "Access Barred"},
334 {0x14, "Acknowledgement"},
335 {0x01, "Address Incomplete"},
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"},
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"},
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"},
373 /* ANNEX 7 : CODING OF USAGE IDENTIFIERS */
374 static const value_string dpnss_man_code_vals[] = {
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
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
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
475 const char *compact_name;
481 } dpnns_sup_serv_set_t;
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 },
742 dissect_dpnss_sic(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset)
744 guint8 octet, type_of_data;
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){
752 /* Type of Data (001) : Details for Speech */
753 proto_tree_add_item(tree, hf_dpnss_sic_details_for_speech, tvb, offset, 1, FALSE);
756 /* Type of Data (010) : Data Rates */
757 proto_tree_add_item(tree, hf_dpnss_sic_details_for_data1, tvb, offset, 1, FALSE);
760 /* Type of Data (011) : Data Rates */
761 proto_tree_add_item(tree, hf_dpnss_sic_details_for_data2, tvb, offset, 1, FALSE);
768 if((octet&0x80)==0x80){
770 * Synch/Asynchronous Information
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){
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);
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);
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);
803 static const value_string dpnss_serv_mark_vals[] = {
805 { 2, "EMERGENCY TELEPHONE"},
807 { 4, "DISTRIBUTED GROUP"},
808 { 5, "UNABLE TO INITIATE CLEARING AFTER ANSWER"},
813 /* Supplementary Information parameters
814 * TODO Add decoding of parameters where needed.
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"},
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"},
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"},
905 dissect_dpnns_sup_str_par(tvbuff_t *tvb, proto_tree * tree, int par_type_num, int par_start_offset, int par_end_offset)
910 par_len = par_end_offset - par_start_offset;
912 par_type_num = DPNSS_NONE;
914 switch (par_type_num){
916 proto_tree_add_text(tree, tvb, par_start_offset, par_len,"Par: None");
919 /* TODO: Use individual dissection of parameters if hf fields needed or in the case where
920 special handling is needed for greater detail
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
930 case DPNSS_ROUTE_RES_CLASS:
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:
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);
946 case DPNSS_DIVERSION_TYPE:
947 case DPNSS_NSI_IDENTIFIER:
948 case DPNSS_USER_DEFINED:
951 case DPNSS_CALL_INDEX:
952 proto_tree_add_item(tree, hf_dpnss_call_idx, tvb, par_start_offset, par_len, FALSE);
958 case DPNSS_DPNSS_ISDN_TYPE:
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:
968 case DPNSS_DEVICE_INDEX:
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:
979 case DPNSS_NUMBER_OF_CALLS:
980 case DPNSS_NUMBER_OF_SERVERS:
981 case DPNSS_PRIORITY_LEVEL:
983 case DPNSS_SUBADDRESS:
984 case DPNSS_ALARM_LEVEL:
985 case DPNSS_STAFF_PRESENT:
986 case DPNSS_TIME_AND_DATE:
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:
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:
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)
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 #.
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).
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.
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
1073 dissect_dpnss_sup_info_str(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, gint offset)
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;
1082 gboolean last_string = FALSE;
1085 tvb_end_offset = tvb_length(tvb);
1088 while((offset<tvb_end_offset)&&(last_string == FALSE)){
1089 octet = tvb_get_guint8(tvb,offset);
1091 /* Supplementary Information String */
1092 start_offset = offset;
1094 number_of_found_par = 0;
1095 /* offset points to start of supplementary information string */
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.
1104 sup_inf_str_end_offset = tvb_find_guint8(tvb, offset, hash_offset-offset, '*');
1105 if(sup_inf_str_end_offset==-1){
1108 sup_inf_str_end_offset = hash_offset;
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) */
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;
1126 switch(number_of_found_par){
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);
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);
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);
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);
1146 /* More parameters ? */
1147 offset = par_end_offset+1;
1151 offset = hash_offset+1;
1155 proto_tree_add_item(tree, hf_dpnss_dest_addr, tvb, offset, -1, FALSE);
1163 dissect_dpnss_LbL_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1165 proto_item *sic_field_item, *ind_field_item;
1166 proto_tree *sic_field_tree, *ind_field_tree;
1171 tvb_end_offset = tvb_length(tvb);
1173 proto_tree_add_item(tree, hf_dpnss_LbL_msg_type, tvb, offset, 1, FALSE);
1174 octet = tvb_get_guint8(tvb,offset)&0x0f;
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)" ));
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);
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);
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.
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);
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.
1223 proto_tree_add_item(tree, hf_dpnss_maintenance_action, tvb, offset, 1, FALSE);
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);
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);
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);
1240 proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
1248 dissect_dpnss_e2e_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1250 proto_item *sel_field_item, *sic_field_item, *ind_field_item;
1251 proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree;
1256 tvb_end_offset = tvb_length(tvb);
1258 proto_tree_add_item(tree, hf_dpnss_e2e_msg_type, tvb, offset, 1, FALSE);
1259 octet = tvb_get_guint8(tvb,offset)&0x0f;
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)" ));
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:
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);
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);
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);
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.
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);
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.
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);
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
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);
1323 if((octet&0x80)==0x80){
1324 /* Extension bit set */
1327 /* User Information oct 2 + n
1329 proto_tree_add_text(tree, tvb, offset, -1, "User Information");
1331 proto_tree_add_text(tree, tvb, offset, 1, "Dissection of this message not supported yet");
1338 dissect_dpnss_cc_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1340 proto_item *sel_field_item, *sic_field_item, *ind_field_item;
1341 proto_tree *sel_field_tree, *sic_field_tree, *ind_field_tree;
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;
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)" ));
1356 case DPNSS_CC_MSG_ISRM_C:
1357 /* 2.1.1 INITIAL SERVICE REQUEST Message (COMPLETE) - ISRM (C) */
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) */
1364 case DPNSS_CC_MSG_RM_I:
1365 /* 2.1.4 RECALL Message (INCOMPLETE) - RM(I)*/
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.
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);
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.
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);
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);
1393 case DPNSS_CC_MSG_NIM:
1394 /* 2.1.6 NETWORK INDICATION Message - NIM */
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);
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);
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);
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);
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);
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);
1443 case DPNSS_CC_MSG_CS:
1444 case DPNSS_CC_MSG_CA:
1447 proto_tree_add_text(tree, tvb, offset, 1, "Unknown or Dissection of this message not supported yet");
1452 /* Code to actually dissect the packets */
1454 dissect_dpnss(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
1458 proto_tree *dpnss_tree;
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");
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;
1470 case DPNNS_MESSAGE_GROUP_CC:
1471 /* Call Control Message Group */
1472 dissect_dpnss_cc_msg(tvb, pinfo, dpnss_tree);
1474 case DPNNS_MESSAGE_GROUP_E2E:
1475 /* End-to-End Message Group */
1476 dissect_dpnss_e2e_msg(tvb, pinfo, dpnss_tree);
1478 case DPNNS_MESSAGE_GROUP_LbL:
1479 /* Link-by-Link Message Group */
1480 dissect_dpnss_LbL_msg(tvb, pinfo, dpnss_tree);
1483 proto_tree_add_text(tree, tvb, offset, 1, "Unknown Message Group");
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.
1495 proto_reg_handoff_dpnss(void)
1497 dissector_handle_t dpnss_handle;
1499 dpnss_handle = create_dissector_handle(dissect_dpnss, proto_dpnss);
1503 proto_register_dpnss(void)
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
1559 { &hf_dpnss_dest_addr,
1560 { "Destination Address", "dpnss.dest_addr",
1561 FT_STRING, BASE_NONE, NULL, 0x0,
1562 "Destination Address", HFILL }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
1614 { &hf_dpnss_subcode,
1615 { "Subcode", "dpnss.subcode",
1616 FT_UINT8, BASE_DEC, NULL, 0x03,
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 }
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 }
1629 { &hf_dpnss_call_idx,
1630 { "Call Index", "dpnss.call_idx",
1631 FT_STRING, BASE_NONE, NULL, 0x0,
1632 "Call Index", HFILL }
1636 /* Setup protocol subtree array */
1637 static gint *ett[] = {
1639 &ett_dpnss_sel_field,
1640 &ett_dpnss_sic_field,
1641 &ett_dpnss_ind_field,
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);
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));