diff options
author | wmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7> | 2010-11-05 22:44:03 +0000 |
---|---|---|
committer | wmeier <wmeier@f5534014-38df-0310-8fa8-9805f1628bb7> | 2010-11-05 22:44:03 +0000 |
commit | 35d0b50e4686e1764195b872efff884e2ff8445e (patch) | |
tree | 268bfcebff2389346229cce5f013daa0ac4bef6d /epan/dissectors/packet-isup.c | |
parent | a12c63a6e85c7bc8fc7c070b5d9a404b8a2927a4 (diff) |
Use value_string_ext fcns to access certain value_string arrays;
Sort certain value_string arrays so the values are in ascending order;
Use val_to_str_ext() instead of for loops to do value_string array lookups (voip_calls.c).
Minor whitespace cleanup.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@34794 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-isup.c')
-rw-r--r-- | epan/dissectors/packet-isup.c | 8660 |
1 files changed, 4403 insertions, 4257 deletions
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index 14fb025f4a..9c4fa53b29 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -4,7 +4,7 @@ * * Copyright 2004-2005, Anders Broman <anders.broman@ericsson.com> * Modified 2003-09-10 by Anders Broman - * <anders.broman@ericsson.com> + * <anders.broman@ericsson.com> * Inserted routines for BICC dissection according to Q.765.5 Q.1902 Q.1970 Q.1990, * calling SDP dissector for RFC2327 decoding. * Modified 2004-01-10 by Anders Broman to add abillity to dissect @@ -68,472 +68,481 @@ static gint isup_standard = ITU_STANDARD; /* Definition of protocol field values und lengths */ /* Definition of Message Types */ -#define MESSAGE_TYPE_INITIAL_ADDR 1 -#define MESSAGE_TYPE_SUBSEQ_ADDR 2 -#define MESSAGE_TYPE_INFO_REQ 3 -#define MESSAGE_TYPE_INFO 4 -#define MESSAGE_TYPE_CONTINUITY 5 -#define MESSAGE_TYPE_ADDR_CMPL 6 -#define MESSAGE_TYPE_CONNECT 7 -#define MESSAGE_TYPE_FORW_TRANS 8 -#define MESSAGE_TYPE_ANSWER 9 -#define MESSAGE_TYPE_RELEASE 12 -#define MESSAGE_TYPE_SUSPEND 13 -#define MESSAGE_TYPE_RESUME 14 -#define MESSAGE_TYPE_REL_CMPL 16 -#define MESSAGE_TYPE_CONT_CHECK_REQ 17 -#define MESSAGE_TYPE_RESET_CIRCUIT 18 -#define MESSAGE_TYPE_BLOCKING 19 -#define MESSAGE_TYPE_UNBLOCKING 20 -#define MESSAGE_TYPE_BLOCK_ACK 21 -#define MESSAGE_TYPE_UNBLOCK_ACK 22 -#define MESSAGE_TYPE_CIRC_GRP_RST 23 -#define MESSAGE_TYPE_CIRC_GRP_BLCK 24 -#define MESSAGE_TYPE_CIRC_GRP_UNBL 25 -#define MESSAGE_TYPE_CIRC_GRP_BL_ACK 26 -#define MESSAGE_TYPE_CIRC_GRP_UNBL_ACK 27 -#define MESSAGE_TYPE_FACILITY_REQ 31 -#define MESSAGE_TYPE_FACILITY_ACC 32 -#define MESSAGE_TYPE_FACILITY_REJ 33 -#define MESSAGE_TYPE_LOOP_BACK_ACK 36 -#define MESSAGE_TYPE_PASS_ALONG 40 -#define MESSAGE_TYPE_CIRC_GRP_RST_ACK 41 -#define MESSAGE_TYPE_CIRC_GRP_QRY 42 -#define MESSAGE_TYPE_CIRC_GRP_QRY_RSP 43 -#define MESSAGE_TYPE_CALL_PROGRSS 44 -#define MESSAGE_TYPE_USER2USER_INFO 45 -#define MESSAGE_TYPE_UNEQUIPPED_CIC 46 -#define MESSAGE_TYPE_CONFUSION 47 -#define MESSAGE_TYPE_OVERLOAD 48 -#define MESSAGE_TYPE_CHARGE_INFO 49 -#define MESSAGE_TYPE_NETW_RESRC_MGMT 50 -#define MESSAGE_TYPE_FACILITY 51 -#define MESSAGE_TYPE_USER_PART_TEST 52 -#define MESSAGE_TYPE_USER_PART_AVAIL 53 -#define MESSAGE_TYPE_IDENT_REQ 54 -#define MESSAGE_TYPE_IDENT_RSP 55 -#define MESSAGE_TYPE_SEGMENTATION 56 -#define MESSAGE_TYPE_LOOP_PREVENTION 64 -#define MESSAGE_TYPE_APPLICATION_TRANS 65 -#define MESSAGE_TYPE_PRE_RELEASE_INFO 66 +#define MESSAGE_TYPE_INITIAL_ADDR 1 +#define MESSAGE_TYPE_SUBSEQ_ADDR 2 +#define MESSAGE_TYPE_INFO_REQ 3 +#define MESSAGE_TYPE_INFO 4 +#define MESSAGE_TYPE_CONTINUITY 5 +#define MESSAGE_TYPE_ADDR_CMPL 6 +#define MESSAGE_TYPE_CONNECT 7 +#define MESSAGE_TYPE_FORW_TRANS 8 +#define MESSAGE_TYPE_ANSWER 9 +#define MESSAGE_TYPE_RELEASE 12 +#define MESSAGE_TYPE_SUSPEND 13 +#define MESSAGE_TYPE_RESUME 14 +#define MESSAGE_TYPE_REL_CMPL 16 +#define MESSAGE_TYPE_CONT_CHECK_REQ 17 +#define MESSAGE_TYPE_RESET_CIRCUIT 18 +#define MESSAGE_TYPE_BLOCKING 19 +#define MESSAGE_TYPE_UNBLOCKING 20 +#define MESSAGE_TYPE_BLOCK_ACK 21 +#define MESSAGE_TYPE_UNBLOCK_ACK 22 +#define MESSAGE_TYPE_CIRC_GRP_RST 23 +#define MESSAGE_TYPE_CIRC_GRP_BLCK 24 +#define MESSAGE_TYPE_CIRC_GRP_UNBL 25 +#define MESSAGE_TYPE_CIRC_GRP_BL_ACK 26 +#define MESSAGE_TYPE_CIRC_GRP_UNBL_ACK 27 +#define MESSAGE_TYPE_FACILITY_REQ 31 +#define MESSAGE_TYPE_FACILITY_ACC 32 +#define MESSAGE_TYPE_FACILITY_REJ 33 +#define MESSAGE_TYPE_LOOP_BACK_ACK 36 +#define MESSAGE_TYPE_PASS_ALONG 40 +#define MESSAGE_TYPE_CIRC_GRP_RST_ACK 41 +#define MESSAGE_TYPE_CIRC_GRP_QRY 42 +#define MESSAGE_TYPE_CIRC_GRP_QRY_RSP 43 +#define MESSAGE_TYPE_CALL_PROGRSS 44 +#define MESSAGE_TYPE_USER2USER_INFO 45 +#define MESSAGE_TYPE_UNEQUIPPED_CIC 46 +#define MESSAGE_TYPE_CONFUSION 47 +#define MESSAGE_TYPE_OVERLOAD 48 +#define MESSAGE_TYPE_CHARGE_INFO 49 +#define MESSAGE_TYPE_NETW_RESRC_MGMT 50 +#define MESSAGE_TYPE_FACILITY 51 +#define MESSAGE_TYPE_USER_PART_TEST 52 +#define MESSAGE_TYPE_USER_PART_AVAIL 53 +#define MESSAGE_TYPE_IDENT_REQ 54 +#define MESSAGE_TYPE_IDENT_RSP 55 +#define MESSAGE_TYPE_SEGMENTATION 56 +#define MESSAGE_TYPE_LOOP_PREVENTION 64 +#define MESSAGE_TYPE_APPLICATION_TRANS 65 +#define MESSAGE_TYPE_PRE_RELEASE_INFO 66 #define MESSAGE_TYPE_SUBSEQUENT_DIR_NUM 67 -#define ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK 0xE9 -#define ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES 0xEA -#define ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP 0xEB -#define ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST 0xEC -#define ANSI_ISUP_MESSAGE_TYPE_EXIT 0xED - -const value_string isup_message_type_value[] = { - { MESSAGE_TYPE_INITIAL_ADDR, "Initial address"}, - { MESSAGE_TYPE_SUBSEQ_ADDR, "Subsequent address"}, - { MESSAGE_TYPE_INFO_REQ, "Information request (national use)"}, - { MESSAGE_TYPE_INFO, "Information (national use)"}, - { MESSAGE_TYPE_CONTINUITY, "Continuity"}, - { MESSAGE_TYPE_ADDR_CMPL, "Address complete"}, - { MESSAGE_TYPE_CONNECT, "Connect"}, - { MESSAGE_TYPE_FORW_TRANS, "Forward transfer"}, - { MESSAGE_TYPE_ANSWER, "Answer"}, - { MESSAGE_TYPE_RELEASE, "Release"}, - { MESSAGE_TYPE_SUSPEND, "Suspend"}, - { MESSAGE_TYPE_RESUME, "Resume"}, - { MESSAGE_TYPE_REL_CMPL, "Release complete"}, - { MESSAGE_TYPE_CONT_CHECK_REQ, "Continuity check request"}, - { MESSAGE_TYPE_RESET_CIRCUIT, "Reset Circuit"}, - { MESSAGE_TYPE_BLOCKING, "Blocking"}, - { MESSAGE_TYPE_UNBLOCKING, "Unblocking"}, - { MESSAGE_TYPE_BLOCK_ACK, "Blocking acknowledgement"}, - { MESSAGE_TYPE_UNBLOCK_ACK, "Unblocking acknowledgment"}, - { MESSAGE_TYPE_CIRC_GRP_RST, "Circuit group reset"}, - { MESSAGE_TYPE_CIRC_GRP_BLCK, "Circuit group blocking"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL, "Circuit group unblocking"}, - { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "Circuit group blocking acknowledgement"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "Circuit group unblocking acknowledgement"}, - { MESSAGE_TYPE_FACILITY_REQ, "Facility request"}, - { MESSAGE_TYPE_FACILITY_ACC, "Facility accepted"}, - { MESSAGE_TYPE_FACILITY_REJ, "Facility reject"}, - { MESSAGE_TYPE_LOOP_BACK_ACK, "Loop back acknowledgement (national use)"}, - { MESSAGE_TYPE_PASS_ALONG, "Pass-along (national use)"}, - { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "Circuit group reset acknowledgement"}, - { MESSAGE_TYPE_CIRC_GRP_QRY, "Circuit group query (national use)"}, - { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "Circuit group query response (national use)"}, - { MESSAGE_TYPE_CALL_PROGRSS, "Call progress"}, - { MESSAGE_TYPE_USER2USER_INFO, "User-to-user information"}, - { MESSAGE_TYPE_UNEQUIPPED_CIC, "Unequipped CIC (national use)"}, - { MESSAGE_TYPE_CONFUSION, "Confusion"}, - { MESSAGE_TYPE_OVERLOAD, "Overload (national use)"}, - { MESSAGE_TYPE_CHARGE_INFO, "Charge information (national use)"}, - { MESSAGE_TYPE_NETW_RESRC_MGMT, "Network resource management"}, - { MESSAGE_TYPE_FACILITY, "Facility"}, - { MESSAGE_TYPE_USER_PART_TEST, "User part test"}, - { MESSAGE_TYPE_USER_PART_AVAIL, "User part available"}, - { MESSAGE_TYPE_IDENT_REQ, "Identification request"}, - { MESSAGE_TYPE_IDENT_RSP, "Identification response"}, - { MESSAGE_TYPE_SEGMENTATION, "Segmentation"}, - { MESSAGE_TYPE_LOOP_PREVENTION, "Loop prevention"}, - { MESSAGE_TYPE_APPLICATION_TRANS, "Application transport"}, - { MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"}, - { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"}, +#define ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK 0xE9 +#define ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES 0xEA +#define ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP 0xEB +#define ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST 0xEC +#define ANSI_ISUP_MESSAGE_TYPE_EXIT 0xED + +static const value_string isup_message_type_value[] = { + { MESSAGE_TYPE_INITIAL_ADDR, "Initial address"}, + { MESSAGE_TYPE_SUBSEQ_ADDR, "Subsequent address"}, + { MESSAGE_TYPE_INFO_REQ, "Information request (national use)"}, + { MESSAGE_TYPE_INFO, "Information (national use)"}, + { MESSAGE_TYPE_CONTINUITY, "Continuity"}, + { MESSAGE_TYPE_ADDR_CMPL, "Address complete"}, + { MESSAGE_TYPE_CONNECT, "Connect"}, + { MESSAGE_TYPE_FORW_TRANS, "Forward transfer"}, + { MESSAGE_TYPE_ANSWER, "Answer"}, + { MESSAGE_TYPE_RELEASE, "Release"}, + { MESSAGE_TYPE_SUSPEND, "Suspend"}, + { MESSAGE_TYPE_RESUME, "Resume"}, + { MESSAGE_TYPE_REL_CMPL, "Release complete"}, + { MESSAGE_TYPE_CONT_CHECK_REQ, "Continuity check request"}, + { MESSAGE_TYPE_RESET_CIRCUIT, "Reset Circuit"}, + { MESSAGE_TYPE_BLOCKING, "Blocking"}, + { MESSAGE_TYPE_UNBLOCKING, "Unblocking"}, + { MESSAGE_TYPE_BLOCK_ACK, "Blocking acknowledgement"}, + { MESSAGE_TYPE_UNBLOCK_ACK, "Unblocking acknowledgment"}, + { MESSAGE_TYPE_CIRC_GRP_RST, "Circuit group reset"}, + { MESSAGE_TYPE_CIRC_GRP_BLCK, "Circuit group blocking"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL, "Circuit group unblocking"}, + { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "Circuit group blocking acknowledgement"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "Circuit group unblocking acknowledgement"}, + { MESSAGE_TYPE_FACILITY_REQ, "Facility request"}, + { MESSAGE_TYPE_FACILITY_ACC, "Facility accepted"}, + { MESSAGE_TYPE_FACILITY_REJ, "Facility reject"}, + { MESSAGE_TYPE_LOOP_BACK_ACK, "Loop back acknowledgement (national use)"}, + { MESSAGE_TYPE_PASS_ALONG, "Pass-along (national use)"}, + { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "Circuit group reset acknowledgement"}, + { MESSAGE_TYPE_CIRC_GRP_QRY, "Circuit group query (national use)"}, + { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "Circuit group query response (national use)"}, + { MESSAGE_TYPE_CALL_PROGRSS, "Call progress"}, + { MESSAGE_TYPE_USER2USER_INFO, "User-to-user information"}, + { MESSAGE_TYPE_UNEQUIPPED_CIC, "Unequipped CIC (national use)"}, + { MESSAGE_TYPE_CONFUSION, "Confusion"}, + { MESSAGE_TYPE_OVERLOAD, "Overload (national use)"}, + { MESSAGE_TYPE_CHARGE_INFO, "Charge information (national use)"}, + { MESSAGE_TYPE_NETW_RESRC_MGMT, "Network resource management"}, + { MESSAGE_TYPE_FACILITY, "Facility"}, + { MESSAGE_TYPE_USER_PART_TEST, "User part test"}, + { MESSAGE_TYPE_USER_PART_AVAIL, "User part available"}, + { MESSAGE_TYPE_IDENT_REQ, "Identification request"}, + { MESSAGE_TYPE_IDENT_RSP, "Identification response"}, + { MESSAGE_TYPE_SEGMENTATION, "Segmentation"}, + { MESSAGE_TYPE_LOOP_PREVENTION, "Loop prevention"}, + { MESSAGE_TYPE_APPLICATION_TRANS, "Application transport"}, + { MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"}, + { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"}, { 0, NULL}}; - - static const value_string ansi_isup_message_type_value[] = { - { MESSAGE_TYPE_INITIAL_ADDR, "Initial address"}, - { MESSAGE_TYPE_SUBSEQ_ADDR, "Subsequent address"}, - { MESSAGE_TYPE_INFO_REQ, "Information request (national use)"}, - { MESSAGE_TYPE_INFO, "Information (national use)"}, - { MESSAGE_TYPE_CONTINUITY, "Continuity"}, - { MESSAGE_TYPE_ADDR_CMPL, "Address complete"}, - { MESSAGE_TYPE_CONNECT, "Connect"}, - { MESSAGE_TYPE_FORW_TRANS, "Forward transfer"}, - { MESSAGE_TYPE_ANSWER, "Answer"}, - { MESSAGE_TYPE_RELEASE, "Release"}, - { MESSAGE_TYPE_SUSPEND, "Suspend"}, - { MESSAGE_TYPE_RESUME, "Resume"}, - { MESSAGE_TYPE_REL_CMPL, "Release complete"}, - { MESSAGE_TYPE_CONT_CHECK_REQ, "Continuity check request"}, - { MESSAGE_TYPE_RESET_CIRCUIT, "Reset Circuit"}, - { MESSAGE_TYPE_BLOCKING, "Blocking"}, - { MESSAGE_TYPE_UNBLOCKING, "Unblocking"}, - { MESSAGE_TYPE_BLOCK_ACK, "Blocking acknowledgement"}, - { MESSAGE_TYPE_UNBLOCK_ACK, "Unblocking acknowledgment"}, - { MESSAGE_TYPE_CIRC_GRP_RST, "Circuit group reset"}, - { MESSAGE_TYPE_CIRC_GRP_BLCK, "Circuit group blocking"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL, "Circuit group unblocking"}, - { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "Circuit group blocking acknowledgement"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "Circuit group unblocking acknowledgement"}, - { MESSAGE_TYPE_FACILITY_REQ, "Facility request"}, - { MESSAGE_TYPE_FACILITY_ACC, "Facility accepted"}, - { MESSAGE_TYPE_FACILITY_REJ, "Facility reject"}, - { MESSAGE_TYPE_LOOP_BACK_ACK, "Loop back acknowledgement (national use)"}, - { MESSAGE_TYPE_PASS_ALONG, "Pass-along (national use)"}, - { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "Circuit group reset acknowledgement"}, - { MESSAGE_TYPE_CIRC_GRP_QRY, "Circuit group query (national use)"}, - { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "Circuit group query response (national use)"}, - { MESSAGE_TYPE_CALL_PROGRSS, "Call progress"}, - { MESSAGE_TYPE_USER2USER_INFO, "User-to-user information"}, - { MESSAGE_TYPE_UNEQUIPPED_CIC, "Unequipped CIC (national use)"}, - { MESSAGE_TYPE_CONFUSION, "Confusion"}, - { MESSAGE_TYPE_OVERLOAD, "Overload (national use)"}, - { MESSAGE_TYPE_CHARGE_INFO, "Charge information (national use)"}, - { MESSAGE_TYPE_NETW_RESRC_MGMT, "Network resource management"}, - { MESSAGE_TYPE_FACILITY, "Facility"}, - { MESSAGE_TYPE_USER_PART_TEST, "User part test"}, - { MESSAGE_TYPE_USER_PART_AVAIL, "User part available"}, - { MESSAGE_TYPE_IDENT_REQ, "Identification request"}, - { MESSAGE_TYPE_IDENT_RSP, "Identification response"}, - { MESSAGE_TYPE_SEGMENTATION, "Segmentation"}, - { MESSAGE_TYPE_LOOP_PREVENTION, "Loop prevention"}, - { MESSAGE_TYPE_APPLICATION_TRANS, "Application transport"}, - { MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"}, - { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"}, - { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "Circuit Reservation Acknowledge"}, - { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "Circuit Reservation"}, - { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "Circuit Validation Test Response"}, - { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "Circuit Validation Test"}, - { ANSI_ISUP_MESSAGE_TYPE_EXIT, "Exit"}, +static value_string_ext isup_message_type_value_ext = VALUE_STRING_EXT_INIT(isup_message_type_value); + +static const value_string ansi_isup_message_type_value[] = { + { MESSAGE_TYPE_INITIAL_ADDR, "Initial address"}, + { MESSAGE_TYPE_SUBSEQ_ADDR, "Subsequent address"}, + { MESSAGE_TYPE_INFO_REQ, "Information request (national use)"}, + { MESSAGE_TYPE_INFO, "Information (national use)"}, + { MESSAGE_TYPE_CONTINUITY, "Continuity"}, + { MESSAGE_TYPE_ADDR_CMPL, "Address complete"}, + { MESSAGE_TYPE_CONNECT, "Connect"}, + { MESSAGE_TYPE_FORW_TRANS, "Forward transfer"}, + { MESSAGE_TYPE_ANSWER, "Answer"}, + { MESSAGE_TYPE_RELEASE, "Release"}, + { MESSAGE_TYPE_SUSPEND, "Suspend"}, + { MESSAGE_TYPE_RESUME, "Resume"}, + { MESSAGE_TYPE_REL_CMPL, "Release complete"}, + { MESSAGE_TYPE_CONT_CHECK_REQ, "Continuity check request"}, + { MESSAGE_TYPE_RESET_CIRCUIT, "Reset Circuit"}, + { MESSAGE_TYPE_BLOCKING, "Blocking"}, + { MESSAGE_TYPE_UNBLOCKING, "Unblocking"}, + { MESSAGE_TYPE_BLOCK_ACK, "Blocking acknowledgement"}, + { MESSAGE_TYPE_UNBLOCK_ACK, "Unblocking acknowledgment"}, + { MESSAGE_TYPE_CIRC_GRP_RST, "Circuit group reset"}, + { MESSAGE_TYPE_CIRC_GRP_BLCK, "Circuit group blocking"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL, "Circuit group unblocking"}, + { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "Circuit group blocking acknowledgement"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "Circuit group unblocking acknowledgement"}, + { MESSAGE_TYPE_FACILITY_REQ, "Facility request"}, + { MESSAGE_TYPE_FACILITY_ACC, "Facility accepted"}, + { MESSAGE_TYPE_FACILITY_REJ, "Facility reject"}, + { MESSAGE_TYPE_LOOP_BACK_ACK, "Loop back acknowledgement (national use)"}, + { MESSAGE_TYPE_PASS_ALONG, "Pass-along (national use)"}, + { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "Circuit group reset acknowledgement"}, + { MESSAGE_TYPE_CIRC_GRP_QRY, "Circuit group query (national use)"}, + { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "Circuit group query response (national use)"}, + { MESSAGE_TYPE_CALL_PROGRSS, "Call progress"}, + { MESSAGE_TYPE_USER2USER_INFO, "User-to-user information"}, + { MESSAGE_TYPE_UNEQUIPPED_CIC, "Unequipped CIC (national use)"}, + { MESSAGE_TYPE_CONFUSION, "Confusion"}, + { MESSAGE_TYPE_OVERLOAD, "Overload (national use)"}, + { MESSAGE_TYPE_CHARGE_INFO, "Charge information (national use)"}, + { MESSAGE_TYPE_NETW_RESRC_MGMT, "Network resource management"}, + { MESSAGE_TYPE_FACILITY, "Facility"}, + { MESSAGE_TYPE_USER_PART_TEST, "User part test"}, + { MESSAGE_TYPE_USER_PART_AVAIL, "User part available"}, + { MESSAGE_TYPE_IDENT_REQ, "Identification request"}, + { MESSAGE_TYPE_IDENT_RSP, "Identification response"}, + { MESSAGE_TYPE_SEGMENTATION, "Segmentation"}, + { MESSAGE_TYPE_LOOP_PREVENTION, "Loop prevention"}, + { MESSAGE_TYPE_APPLICATION_TRANS, "Application transport"}, + { MESSAGE_TYPE_PRE_RELEASE_INFO, "Pre-release information"}, + { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "Subsequent Directory Number (national use)"}, + { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "Circuit Reservation Acknowledge"}, + { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "Circuit Reservation"}, + { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "Circuit Validation Test Response"}, + { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "Circuit Validation Test"}, + { ANSI_ISUP_MESSAGE_TYPE_EXIT, "Exit"}, { 0, NULL}}; +static value_string_ext ansi_isup_message_type_value_ext = VALUE_STRING_EXT_INIT(ansi_isup_message_type_value); + /* Same as above but in acronym form (for the Info column) */ -const value_string isup_message_type_value_acro[] = { - { MESSAGE_TYPE_INITIAL_ADDR, "IAM"}, - { MESSAGE_TYPE_SUBSEQ_ADDR, "SAM"}, - { MESSAGE_TYPE_INFO_REQ, "INR"}, - { MESSAGE_TYPE_INFO, "INF"}, - { MESSAGE_TYPE_CONTINUITY, "COT"}, - { MESSAGE_TYPE_ADDR_CMPL, "ACM"}, - { MESSAGE_TYPE_CONNECT, "CON"}, - { MESSAGE_TYPE_FORW_TRANS, "FOT"}, - { MESSAGE_TYPE_ANSWER, "ANM"}, - { MESSAGE_TYPE_RELEASE, "REL"}, - { MESSAGE_TYPE_SUSPEND, "SUS"}, - { MESSAGE_TYPE_RESUME, "RES"}, - { MESSAGE_TYPE_REL_CMPL, "RLC"}, - { MESSAGE_TYPE_CONT_CHECK_REQ, "CCR"}, - { MESSAGE_TYPE_RESET_CIRCUIT, "RSC"}, - { MESSAGE_TYPE_BLOCKING, "BLO"}, - { MESSAGE_TYPE_UNBLOCKING, "UBL"}, - { MESSAGE_TYPE_BLOCK_ACK, "BLA"}, - { MESSAGE_TYPE_UNBLOCK_ACK, "UBLA"}, - { MESSAGE_TYPE_CIRC_GRP_RST, "GRS"}, - { MESSAGE_TYPE_CIRC_GRP_BLCK, "CGB"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL, "CGU"}, - { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "CGBA"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "CGUA"}, - { MESSAGE_TYPE_FACILITY_REQ, "FAR"}, - { MESSAGE_TYPE_FACILITY_ACC, "FAA"}, - { MESSAGE_TYPE_FACILITY_REJ, "FRJ"}, - { MESSAGE_TYPE_LOOP_BACK_ACK, "LPA"}, - { MESSAGE_TYPE_PASS_ALONG, "PAM"}, - { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "GRA"}, - { MESSAGE_TYPE_CIRC_GRP_QRY, "CQM"}, - { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "CQR"}, - { MESSAGE_TYPE_CALL_PROGRSS, "CPG"}, - { MESSAGE_TYPE_USER2USER_INFO, "UUI"}, - { MESSAGE_TYPE_UNEQUIPPED_CIC, "UCIC"}, - { MESSAGE_TYPE_CONFUSION, "CFN"}, - { MESSAGE_TYPE_OVERLOAD, "OLM"}, - { MESSAGE_TYPE_CHARGE_INFO, "CRG"}, - { MESSAGE_TYPE_NETW_RESRC_MGMT, "NRM"}, - { MESSAGE_TYPE_FACILITY, "FAC"}, - { MESSAGE_TYPE_USER_PART_TEST, "UPT"}, - { MESSAGE_TYPE_USER_PART_AVAIL, "UPA"}, - { MESSAGE_TYPE_IDENT_REQ, "IDR"}, - { MESSAGE_TYPE_IDENT_RSP, "IDS"}, - { MESSAGE_TYPE_SEGMENTATION, "SGM"}, - { MESSAGE_TYPE_LOOP_PREVENTION, "LOP"}, - { MESSAGE_TYPE_APPLICATION_TRANS, "APM"}, - { MESSAGE_TYPE_PRE_RELEASE_INFO, "PRI"}, - { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "SDN"}, +static const value_string isup_message_type_value_acro[] = { + { MESSAGE_TYPE_INITIAL_ADDR, "IAM"}, + { MESSAGE_TYPE_SUBSEQ_ADDR, "SAM"}, + { MESSAGE_TYPE_INFO_REQ, "INR"}, + { MESSAGE_TYPE_INFO, "INF"}, + { MESSAGE_TYPE_CONTINUITY, "COT"}, + { MESSAGE_TYPE_ADDR_CMPL, "ACM"}, + { MESSAGE_TYPE_CONNECT, "CON"}, + { MESSAGE_TYPE_FORW_TRANS, "FOT"}, + { MESSAGE_TYPE_ANSWER, "ANM"}, + { MESSAGE_TYPE_RELEASE, "REL"}, + { MESSAGE_TYPE_SUSPEND, "SUS"}, + { MESSAGE_TYPE_RESUME, "RES"}, + { MESSAGE_TYPE_REL_CMPL, "RLC"}, + { MESSAGE_TYPE_CONT_CHECK_REQ, "CCR"}, + { MESSAGE_TYPE_RESET_CIRCUIT, "RSC"}, + { MESSAGE_TYPE_BLOCKING, "BLO"}, + { MESSAGE_TYPE_UNBLOCKING, "UBL"}, + { MESSAGE_TYPE_BLOCK_ACK, "BLA"}, + { MESSAGE_TYPE_UNBLOCK_ACK, "UBLA"}, + { MESSAGE_TYPE_CIRC_GRP_RST, "GRS"}, + { MESSAGE_TYPE_CIRC_GRP_BLCK, "CGB"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL, "CGU"}, + { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "CGBA"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "CGUA"}, + { MESSAGE_TYPE_FACILITY_REQ, "FAR"}, + { MESSAGE_TYPE_FACILITY_ACC, "FAA"}, + { MESSAGE_TYPE_FACILITY_REJ, "FRJ"}, + { MESSAGE_TYPE_LOOP_BACK_ACK, "LPA"}, + { MESSAGE_TYPE_PASS_ALONG, "PAM"}, + { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "GRA"}, + { MESSAGE_TYPE_CIRC_GRP_QRY, "CQM"}, + { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "CQR"}, + { MESSAGE_TYPE_CALL_PROGRSS, "CPG"}, + { MESSAGE_TYPE_USER2USER_INFO, "UUI"}, + { MESSAGE_TYPE_UNEQUIPPED_CIC, "UCIC"}, + { MESSAGE_TYPE_CONFUSION, "CFN"}, + { MESSAGE_TYPE_OVERLOAD, "OLM"}, + { MESSAGE_TYPE_CHARGE_INFO, "CRG"}, + { MESSAGE_TYPE_NETW_RESRC_MGMT, "NRM"}, + { MESSAGE_TYPE_FACILITY, "FAC"}, + { MESSAGE_TYPE_USER_PART_TEST, "UPT"}, + { MESSAGE_TYPE_USER_PART_AVAIL, "UPA"}, + { MESSAGE_TYPE_IDENT_REQ, "IDR"}, + { MESSAGE_TYPE_IDENT_RSP, "IDS"}, + { MESSAGE_TYPE_SEGMENTATION, "SGM"}, + { MESSAGE_TYPE_LOOP_PREVENTION, "LOP"}, + { MESSAGE_TYPE_APPLICATION_TRANS, "APM"}, + { MESSAGE_TYPE_PRE_RELEASE_INFO, "PRI"}, + { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "SDN"}, { 0, NULL}}; +value_string_ext isup_message_type_value_acro_ext = VALUE_STRING_EXT_INIT(isup_message_type_value_acro); /* Same as above but in acronym form (for the Info column) */ static const value_string ansi_isup_message_type_value_acro[] = { - { MESSAGE_TYPE_INITIAL_ADDR, "IAM"}, - { MESSAGE_TYPE_SUBSEQ_ADDR, "SAM"}, - { MESSAGE_TYPE_INFO_REQ, "INR"}, - { MESSAGE_TYPE_INFO, "INF"}, - { MESSAGE_TYPE_CONTINUITY, "COT"}, - { MESSAGE_TYPE_ADDR_CMPL, "ACM"}, - { MESSAGE_TYPE_CONNECT, "CON"}, - { MESSAGE_TYPE_FORW_TRANS, "FOT"}, - { MESSAGE_TYPE_ANSWER, "ANM"}, - { MESSAGE_TYPE_RELEASE, "REL"}, - { MESSAGE_TYPE_SUSPEND, "SUS"}, - { MESSAGE_TYPE_RESUME, "RES"}, - { MESSAGE_TYPE_REL_CMPL, "RLC"}, - { MESSAGE_TYPE_CONT_CHECK_REQ, "CCR"}, - { MESSAGE_TYPE_RESET_CIRCUIT, "RSC"}, - { MESSAGE_TYPE_BLOCKING, "BLO"}, - { MESSAGE_TYPE_UNBLOCKING, "UBL"}, - { MESSAGE_TYPE_BLOCK_ACK, "BLA"}, - { MESSAGE_TYPE_UNBLOCK_ACK, "UBLA"}, - { MESSAGE_TYPE_CIRC_GRP_RST, "GRS"}, - { MESSAGE_TYPE_CIRC_GRP_BLCK, "CGB"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL, "CGU"}, - { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "CGBA"}, - { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "CGUA"}, - { MESSAGE_TYPE_FACILITY_REQ, "FAR"}, - { MESSAGE_TYPE_FACILITY_ACC, "FAA"}, - { MESSAGE_TYPE_FACILITY_REJ, "FRJ"}, - { MESSAGE_TYPE_LOOP_BACK_ACK, "LPA"}, - { MESSAGE_TYPE_PASS_ALONG, "PAM"}, - { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "GRA"}, - { MESSAGE_TYPE_CIRC_GRP_QRY, "CQM"}, - { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "CQR"}, - { MESSAGE_TYPE_CALL_PROGRSS, "CPG"}, - { MESSAGE_TYPE_USER2USER_INFO, "UUI"}, - { MESSAGE_TYPE_UNEQUIPPED_CIC, "UCIC"}, - { MESSAGE_TYPE_CONFUSION, "CFN"}, - { MESSAGE_TYPE_OVERLOAD, "OLM"}, - { MESSAGE_TYPE_CHARGE_INFO, "CRG"}, - { MESSAGE_TYPE_NETW_RESRC_MGMT, "NRM"}, - { MESSAGE_TYPE_FACILITY, "FAC"}, - { MESSAGE_TYPE_USER_PART_TEST, "UPT"}, - { MESSAGE_TYPE_USER_PART_AVAIL, "UPA"}, - { MESSAGE_TYPE_IDENT_REQ, "IDR"}, - { MESSAGE_TYPE_IDENT_RSP, "IDS"}, - { MESSAGE_TYPE_SEGMENTATION, "SGM"}, - { MESSAGE_TYPE_LOOP_PREVENTION, "LOP"}, - { MESSAGE_TYPE_APPLICATION_TRANS, "APM"}, - { MESSAGE_TYPE_PRE_RELEASE_INFO, "PRI"}, - { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "SDN"}, - { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "CRA"}, - { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "CRM"}, - { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "CVR"}, - { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "CVT"}, - { ANSI_ISUP_MESSAGE_TYPE_EXIT, "EXIT"}, + { MESSAGE_TYPE_INITIAL_ADDR, "IAM"}, + { MESSAGE_TYPE_SUBSEQ_ADDR, "SAM"}, + { MESSAGE_TYPE_INFO_REQ, "INR"}, + { MESSAGE_TYPE_INFO, "INF"}, + { MESSAGE_TYPE_CONTINUITY, "COT"}, + { MESSAGE_TYPE_ADDR_CMPL, "ACM"}, + { MESSAGE_TYPE_CONNECT, "CON"}, + { MESSAGE_TYPE_FORW_TRANS, "FOT"}, + { MESSAGE_TYPE_ANSWER, "ANM"}, + { MESSAGE_TYPE_RELEASE, "REL"}, + { MESSAGE_TYPE_SUSPEND, "SUS"}, + { MESSAGE_TYPE_RESUME, "RES"}, + { MESSAGE_TYPE_REL_CMPL, "RLC"}, + { MESSAGE_TYPE_CONT_CHECK_REQ, "CCR"}, + { MESSAGE_TYPE_RESET_CIRCUIT, "RSC"}, + { MESSAGE_TYPE_BLOCKING, "BLO"}, + { MESSAGE_TYPE_UNBLOCKING, "UBL"}, + { MESSAGE_TYPE_BLOCK_ACK, "BLA"}, + { MESSAGE_TYPE_UNBLOCK_ACK, "UBLA"}, + { MESSAGE_TYPE_CIRC_GRP_RST, "GRS"}, + { MESSAGE_TYPE_CIRC_GRP_BLCK, "CGB"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL, "CGU"}, + { MESSAGE_TYPE_CIRC_GRP_BL_ACK, "CGBA"}, + { MESSAGE_TYPE_CIRC_GRP_UNBL_ACK, "CGUA"}, + { MESSAGE_TYPE_FACILITY_REQ, "FAR"}, + { MESSAGE_TYPE_FACILITY_ACC, "FAA"}, + { MESSAGE_TYPE_FACILITY_REJ, "FRJ"}, + { MESSAGE_TYPE_LOOP_BACK_ACK, "LPA"}, + { MESSAGE_TYPE_PASS_ALONG, "PAM"}, + { MESSAGE_TYPE_CIRC_GRP_RST_ACK, "GRA"}, + { MESSAGE_TYPE_CIRC_GRP_QRY, "CQM"}, + { MESSAGE_TYPE_CIRC_GRP_QRY_RSP, "CQR"}, + { MESSAGE_TYPE_CALL_PROGRSS, "CPG"}, + { MESSAGE_TYPE_USER2USER_INFO, "UUI"}, + { MESSAGE_TYPE_UNEQUIPPED_CIC, "UCIC"}, + { MESSAGE_TYPE_CONFUSION, "CFN"}, + { MESSAGE_TYPE_OVERLOAD, "OLM"}, + { MESSAGE_TYPE_CHARGE_INFO, "CRG"}, + { MESSAGE_TYPE_NETW_RESRC_MGMT, "NRM"}, + { MESSAGE_TYPE_FACILITY, "FAC"}, + { MESSAGE_TYPE_USER_PART_TEST, "UPT"}, + { MESSAGE_TYPE_USER_PART_AVAIL, "UPA"}, + { MESSAGE_TYPE_IDENT_REQ, "IDR"}, + { MESSAGE_TYPE_IDENT_RSP, "IDS"}, + { MESSAGE_TYPE_SEGMENTATION, "SGM"}, + { MESSAGE_TYPE_LOOP_PREVENTION, "LOP"}, + { MESSAGE_TYPE_APPLICATION_TRANS, "APM"}, + { MESSAGE_TYPE_PRE_RELEASE_INFO, "PRI"}, + { MESSAGE_TYPE_SUBSEQUENT_DIR_NUM, "SDN"}, + { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK, "CRA"}, + { ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES, "CRM"}, + { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP, "CVR"}, + { ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST, "CVT"}, + { ANSI_ISUP_MESSAGE_TYPE_EXIT, "EXIT"}, { 0, NULL}}; +static value_string_ext ansi_isup_message_type_value_acro_ext = VALUE_STRING_EXT_INIT(ansi_isup_message_type_value_acro); const value_string isup_parameter_type_value[] = { -{ PARAM_TYPE_END_OF_OPT_PARAMS, "End of optional parameters"}, - { PARAM_TYPE_CALL_REF, "Call Reference (national use)"}, - { PARAM_TYPE_TRANSM_MEDIUM_REQU, "Transmission medium requirement"}, - { PARAM_TYPE_ACC_TRANSP, "Access transport"}, - { PARAM_TYPE_CALLED_PARTY_NR, "Called party number"}, - { PARAM_TYPE_SUBSQT_NR, "Subsequent number"}, - { PARAM_TYPE_NATURE_OF_CONN_IND, "Nature of connection indicators"}, - { PARAM_TYPE_FORW_CALL_IND, "Forward call indicators"}, - { PARAM_TYPE_OPT_FORW_CALL_IND, "Optional forward call indicators"}, - { PARAM_TYPE_CALLING_PRTY_CATEG, "Calling party's category"}, - { PARAM_TYPE_CALLING_PARTY_NR, "Calling party number"}, - { PARAM_TYPE_REDIRECTING_NR, "Redirecting number"}, - { PARAM_TYPE_REDIRECTION_NR, "Redirection number"}, - { PARAM_TYPE_CONNECTION_REQ, "Connection request"}, - { PARAM_TYPE_INFO_REQ_IND, "Information request indicators (national use)"}, - { PARAM_TYPE_INFO_IND, "Information indicators (national use)"}, - { PARAM_TYPE_CONTINUITY_IND, "Continuity request"}, - { PARAM_TYPE_BACKW_CALL_IND, "Backward call indicators"}, - { PARAM_TYPE_CAUSE_INDICATORS, "Cause indicators"}, - { PARAM_TYPE_REDIRECTION_INFO, "Redirection information"}, - { PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE, "Circuit group supervision message type"}, - { PARAM_TYPE_RANGE_AND_STATUS, "Range and Status"}, - { PARAM_TYPE_FACILITY_IND, "Facility indicator"}, - { PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD, "Closed user group interlock code"}, - { PARAM_TYPE_USER_SERVICE_INFO, "User service information"}, - { PARAM_TYPE_SIGNALLING_POINT_CODE, "Signalling point code (national use)"}, - { PARAM_TYPE_USER_TO_USER_INFO, "User-to-user information"}, - { PARAM_TYPE_CONNECTED_NR, "Connected number"}, - { PARAM_TYPE_SUSP_RESUME_IND, "Suspend/Resume indicators"}, - { PARAM_TYPE_TRANSIT_NETW_SELECT, "Transit network selection (national use)"}, - { PARAM_TYPE_EVENT_INFO, "Event information"}, - { PARAM_TYPE_CIRC_ASSIGN_MAP, "Circuit assignment map"}, - { PARAM_TYPE_CIRC_STATE_IND, "Circuit state indicator (national use)"}, - { PARAM_TYPE_AUTO_CONG_LEVEL, "Automatic congestion level"}, - { PARAM_TYPE_ORIG_CALLED_NR, "Original called number"}, - { PARAM_TYPE_OPT_BACKW_CALL_IND, "Backward call indicators"}, - { PARAM_TYPE_USER_TO_USER_IND, "User-to-user indicators"}, - { PARAM_TYPE_ORIG_ISC_POINT_CODE, "Origination ISC point code"}, - { PARAM_TYPE_GENERIC_NOTIF_IND, "Generic notification indicator"}, - { PARAM_TYPE_CALL_HIST_INFO, "Call history information"}, - { PARAM_TYPE_ACC_DELIV_INFO, "Access delivery information"}, - { PARAM_TYPE_NETW_SPECIFIC_FACLTY, "Network specific facility (national use)"}, - { PARAM_TYPE_USER_SERVICE_INFO_PR, "User service information prime"}, - { PARAM_TYPE_PROPAG_DELAY_COUNTER, "Propagation delay counter"}, - { PARAM_TYPE_REMOTE_OPERATIONS, "Remote operations (national use)"}, - { PARAM_TYPE_SERVICE_ACTIVATION, "Service activation"}, - { PARAM_TYPE_USER_TELESERV_INFO, "User teleservice information"}, - { PARAM_TYPE_TRANSM_MEDIUM_USED, "Transmission medium used"}, - { PARAM_TYPE_CALL_DIV_INFO, "Call diversion information"}, - { PARAM_TYPE_ECHO_CTRL_INFO, "Echo control information"}, - { PARAM_TYPE_MSG_COMPAT_INFO, "Message compatibility information"}, - { PARAM_TYPE_PARAM_COMPAT_INFO, "Parameter compatibility information"}, - { PARAM_TYPE_MLPP_PRECEDENCE, "MLPP precedence"}, - { PARAM_TYPE_MCID_REQ_IND, "MCID request indicators"}, - { PARAM_TYPE_MCID_RSP_IND, "MCID response indicators"}, - { PARAM_TYPE_HOP_COUNTER, "Hop counter"}, - { PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR, "Transmission medium requirement prime"}, - { PARAM_TYPE_LOCATION_NR, "Location number"}, - { PARAM_TYPE_REDIR_NR_RSTRCT, "Redirection number restriction"}, - { PARAM_TYPE_CALL_TRANS_REF, "Call transfer reference"}, - { PARAM_TYPE_LOOP_PREV_IND, "Loop prevention indicators"}, - { PARAM_TYPE_CALL_TRANS_NR, "Call transfer number"}, - { PARAM_TYPE_CCSS, "CCSS"}, - { PARAM_TYPE_FORW_GVNS, "Forward GVNS"}, - { PARAM_TYPE_BACKW_GVNS, "Backward GVNS"}, - { PARAM_TYPE_REDIRECT_CAPAB, "Redirect capability (reserved for national use)"}, - { PARAM_TYPE_NETW_MGMT_CTRL, "Network management controls"}, - { PARAM_TYPE_CORRELATION_ID, "Correlation id"}, - { PARAM_TYPE_SCF_ID, "SCF id"}, - { PARAM_TYPE_CALL_DIV_TREAT_IND, "Call diversion treatment indicators"}, - { PARAM_TYPE_CALLED_IN_NR, "Called IN number"}, - { PARAM_TYPE_CALL_OFF_TREAT_IND, "Call offering treatment indicators"}, - { PARAM_TYPE_CHARGED_PARTY_IDENT, "Charged party identification (national use)"}, - { PARAM_TYPE_CONF_TREAT_IND, "Conference treatment indicators"}, - { PARAM_TYPE_DISPLAY_INFO, "Display information"}, - { PARAM_TYPE_UID_ACTION_IND, "UID action indicators"}, - { PARAM_TYPE_UID_CAPAB_IND, "UID capability indicators"}, - { PARAM_TYPE_REDIRECT_COUNTER, "Redirect counter (reserved for national use)"}, - { PARAM_TYPE_COLLECT_CALL_REQ, "Collect call request"}, - { PARAM_TYPE_GENERIC_NR, "Generic number"}, - { PARAM_TYPE_GENERIC_DIGITS, "Generic digits (national use)"}, - { PARAM_TYPE_APPLICATON_TRANS, "Application transport"}, + { PARAM_TYPE_END_OF_OPT_PARAMS, "End of optional parameters"}, + { PARAM_TYPE_CALL_REF, "Call Reference (national use)"}, + { PARAM_TYPE_TRANSM_MEDIUM_REQU, "Transmission medium requirement"}, + { PARAM_TYPE_ACC_TRANSP, "Access transport"}, + { PARAM_TYPE_CALLED_PARTY_NR, "Called party number"}, + { PARAM_TYPE_SUBSQT_NR, "Subsequent number"}, + { PARAM_TYPE_NATURE_OF_CONN_IND, "Nature of connection indicators"}, + { PARAM_TYPE_FORW_CALL_IND, "Forward call indicators"}, + { PARAM_TYPE_OPT_FORW_CALL_IND, "Optional forward call indicators"}, + { PARAM_TYPE_CALLING_PRTY_CATEG, "Calling party's category"}, + { PARAM_TYPE_CALLING_PARTY_NR, "Calling party number"}, + { PARAM_TYPE_REDIRECTING_NR, "Redirecting number"}, + { PARAM_TYPE_REDIRECTION_NR, "Redirection number"}, + { PARAM_TYPE_CONNECTION_REQ, "Connection request"}, + { PARAM_TYPE_INFO_REQ_IND, "Information request indicators (national use)"}, + { PARAM_TYPE_INFO_IND, "Information indicators (national use)"}, + { PARAM_TYPE_CONTINUITY_IND, "Continuity request"}, + { PARAM_TYPE_BACKW_CALL_IND, "Backward call indicators"}, + { PARAM_TYPE_CAUSE_INDICATORS, "Cause indicators"}, + { PARAM_TYPE_REDIRECTION_INFO, "Redirection information"}, + { PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE, "Circuit group supervision message type"}, + { PARAM_TYPE_RANGE_AND_STATUS, "Range and Status"}, + { PARAM_TYPE_FACILITY_IND, "Facility indicator"}, + { PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD, "Closed user group interlock code"}, + { PARAM_TYPE_USER_SERVICE_INFO, "User service information"}, + { PARAM_TYPE_SIGNALLING_POINT_CODE, "Signalling point code (national use)"}, + { PARAM_TYPE_USER_TO_USER_INFO, "User-to-user information"}, + { PARAM_TYPE_CONNECTED_NR, "Connected number"}, + { PARAM_TYPE_SUSP_RESUME_IND, "Suspend/Resume indicators"}, + { PARAM_TYPE_TRANSIT_NETW_SELECT, "Transit network selection (national use)"}, + { PARAM_TYPE_EVENT_INFO, "Event information"}, + { PARAM_TYPE_CIRC_ASSIGN_MAP, "Circuit assignment map"}, + { PARAM_TYPE_CIRC_STATE_IND, "Circuit state indicator (national use)"}, + { PARAM_TYPE_AUTO_CONG_LEVEL, "Automatic congestion level"}, + { PARAM_TYPE_ORIG_CALLED_NR, "Original called number"}, + { PARAM_TYPE_OPT_BACKW_CALL_IND, "Backward call indicators"}, + { PARAM_TYPE_USER_TO_USER_IND, "User-to-user indicators"}, + { PARAM_TYPE_ORIG_ISC_POINT_CODE, "Origination ISC point code"}, + { PARAM_TYPE_GENERIC_NOTIF_IND, "Generic notification indicator"}, + { PARAM_TYPE_CALL_HIST_INFO, "Call history information"}, + { PARAM_TYPE_ACC_DELIV_INFO, "Access delivery information"}, + { PARAM_TYPE_NETW_SPECIFIC_FACLTY, "Network specific facility (national use)"}, + { PARAM_TYPE_USER_SERVICE_INFO_PR, "User service information prime"}, + { PARAM_TYPE_PROPAG_DELAY_COUNTER, "Propagation delay counter"}, + { PARAM_TYPE_REMOTE_OPERATIONS, "Remote operations (national use)"}, + { PARAM_TYPE_SERVICE_ACTIVATION, "Service activation"}, + { PARAM_TYPE_USER_TELESERV_INFO, "User teleservice information"}, + { PARAM_TYPE_TRANSM_MEDIUM_USED, "Transmission medium used"}, + { PARAM_TYPE_CALL_DIV_INFO, "Call diversion information"}, + { PARAM_TYPE_ECHO_CTRL_INFO, "Echo control information"}, + { PARAM_TYPE_MSG_COMPAT_INFO, "Message compatibility information"}, + { PARAM_TYPE_PARAM_COMPAT_INFO, "Parameter compatibility information"}, + { PARAM_TYPE_MLPP_PRECEDENCE, "MLPP precedence"}, + { PARAM_TYPE_MCID_REQ_IND, "MCID request indicators"}, + { PARAM_TYPE_MCID_RSP_IND, "MCID response indicators"}, + { PARAM_TYPE_HOP_COUNTER, "Hop counter"}, + { PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR, "Transmission medium requirement prime"}, + { PARAM_TYPE_LOCATION_NR, "Location number"}, + { PARAM_TYPE_REDIR_NR_RSTRCT, "Redirection number restriction"}, + { PARAM_TYPE_CALL_TRANS_REF, "Call transfer reference"}, + { PARAM_TYPE_LOOP_PREV_IND, "Loop prevention indicators"}, + { PARAM_TYPE_CALL_TRANS_NR, "Call transfer number"}, + { PARAM_TYPE_CCSS, "CCSS"}, + { PARAM_TYPE_FORW_GVNS, "Forward GVNS"}, + { PARAM_TYPE_BACKW_GVNS, "Backward GVNS"}, + { PARAM_TYPE_REDIRECT_CAPAB, "Redirect capability (reserved for national use)"}, + { PARAM_TYPE_NETW_MGMT_CTRL, "Network management controls"}, + { PARAM_TYPE_CORRELATION_ID, "Correlation id"}, + { PARAM_TYPE_SCF_ID, "SCF id"}, + { PARAM_TYPE_CALL_DIV_TREAT_IND, "Call diversion treatment indicators"}, + { PARAM_TYPE_CALLED_IN_NR, "Called IN number"}, + { PARAM_TYPE_CALL_OFF_TREAT_IND, "Call offering treatment indicators"}, + { PARAM_TYPE_CHARGED_PARTY_IDENT, "Charged party identification (national use)"}, + { PARAM_TYPE_CONF_TREAT_IND, "Conference treatment indicators"}, + { PARAM_TYPE_DISPLAY_INFO, "Display information"}, + { PARAM_TYPE_UID_ACTION_IND, "UID action indicators"}, + { PARAM_TYPE_UID_CAPAB_IND, "UID capability indicators"}, + { PARAM_TYPE_REDIRECT_COUNTER, "Redirect counter (reserved for national use)"}, + { PARAM_TYPE_APPLICATON_TRANS, "Application transport"}, + { PARAM_TYPE_COLLECT_CALL_REQ, "Collect call request"}, + { PARAM_TYPE_GENERIC_NR, "Generic number"}, + { PARAM_TYPE_GENERIC_DIGITS, "Generic digits (national use)"}, { 0, NULL}}; +static value_string_ext isup_parameter_type_value_ext = VALUE_STRING_EXT_INIT(isup_parameter_type_value); static const value_string ansi_isup_parameter_type_value[] = { -{ PARAM_TYPE_END_OF_OPT_PARAMS, "End of optional parameters"}, - { PARAM_TYPE_CALL_REF, "Call Reference (national use)"}, - { PARAM_TYPE_TRANSM_MEDIUM_REQU, "Transmission medium requirement"}, - { PARAM_TYPE_ACC_TRANSP, "Access transport"}, - { PARAM_TYPE_CALLED_PARTY_NR, "Called party number"}, - { PARAM_TYPE_SUBSQT_NR, "Subsequent number"}, - { PARAM_TYPE_NATURE_OF_CONN_IND, "Nature of connection indicators"}, - { PARAM_TYPE_FORW_CALL_IND, "Forward call indicators"}, - { PARAM_TYPE_OPT_FORW_CALL_IND, "Optional forward call indicators"}, - { PARAM_TYPE_CALLING_PRTY_CATEG, "Calling party's category"}, - { PARAM_TYPE_CALLING_PARTY_NR, "Calling party number"}, - { PARAM_TYPE_REDIRECTING_NR, "Redirecting number"}, - { PARAM_TYPE_REDIRECTION_NR, "Redirection number"}, - { PARAM_TYPE_CONNECTION_REQ, "Connection request"}, - { PARAM_TYPE_INFO_REQ_IND, "Information request indicators (national use)"}, - { PARAM_TYPE_INFO_IND, "Information indicators (national use)"}, - { PARAM_TYPE_CONTINUITY_IND, "Continuity request"}, - { PARAM_TYPE_BACKW_CALL_IND, "Backward call indicators"}, - { PARAM_TYPE_CAUSE_INDICATORS, "Cause indicators"}, - { PARAM_TYPE_REDIRECTION_INFO, "Redirection information"}, - { PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE, "Circuit group supervision message type"}, - { PARAM_TYPE_RANGE_AND_STATUS, "Range and Status"}, - { PARAM_TYPE_FACILITY_IND, "Facility indicator"}, - { PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD, "Closed user group interlock code"}, - { PARAM_TYPE_USER_SERVICE_INFO, "User service information"}, - { PARAM_TYPE_SIGNALLING_POINT_CODE, "Signalling point code (national use)"}, - { PARAM_TYPE_USER_TO_USER_INFO, "User-to-user information"}, - { PARAM_TYPE_CONNECTED_NR, "Connected number"}, - { PARAM_TYPE_SUSP_RESUME_IND, "Suspend/Resume indicators"}, - { PARAM_TYPE_TRANSIT_NETW_SELECT, "Transit network selection (national use)"}, - { PARAM_TYPE_EVENT_INFO, "Event information"}, - { PARAM_TYPE_CIRC_ASSIGN_MAP, "Circuit assignment map"}, - { PARAM_TYPE_CIRC_STATE_IND, "Circuit state indicator (national use)"}, - { PARAM_TYPE_AUTO_CONG_LEVEL, "Automatic congestion level"}, - { PARAM_TYPE_ORIG_CALLED_NR, "Original called number"}, - { PARAM_TYPE_OPT_BACKW_CALL_IND, "Backward call indicators"}, - { PARAM_TYPE_USER_TO_USER_IND, "User-to-user indicators"}, - { PARAM_TYPE_ORIG_ISC_POINT_CODE, "Origination ISC point code"}, - { PARAM_TYPE_GENERIC_NOTIF_IND, "Generic notification indicator"}, - { PARAM_TYPE_CALL_HIST_INFO, "Call history information"}, - { PARAM_TYPE_ACC_DELIV_INFO, "Access delivery information"}, - { PARAM_TYPE_NETW_SPECIFIC_FACLTY, "Network specific facility (national use)"}, - { PARAM_TYPE_USER_SERVICE_INFO_PR, "User service information prime"}, - { PARAM_TYPE_PROPAG_DELAY_COUNTER, "Propagation delay counter"}, - { PARAM_TYPE_REMOTE_OPERATIONS, "Remote operations (national use)"}, - { PARAM_TYPE_SERVICE_ACTIVATION, "Service activation"}, - { PARAM_TYPE_USER_TELESERV_INFO, "User teleservice information"}, - { PARAM_TYPE_TRANSM_MEDIUM_USED, "Transmission medium used"}, - { PARAM_TYPE_CALL_DIV_INFO, "Call diversion information"}, - { PARAM_TYPE_ECHO_CTRL_INFO, "Echo control information"}, - { PARAM_TYPE_MSG_COMPAT_INFO, "Message compatibility information"}, - { PARAM_TYPE_PARAM_COMPAT_INFO, "Parameter compatibility information"}, - { PARAM_TYPE_MLPP_PRECEDENCE, "MLPP precedence"}, - { PARAM_TYPE_MCID_REQ_IND, "MCID request indicators"}, - { PARAM_TYPE_MCID_RSP_IND, "MCID response indicators"}, - { PARAM_TYPE_HOP_COUNTER, "Hop counter"}, - { PARAM_TYPE_ORIG_LINE_INFO, "Originating line info"}, - { PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR, "Transmission medium requirement prime"}, - { PARAM_TYPE_LOCATION_NR, "Location number"}, - { PARAM_TYPE_REDIR_NR_RSTRCT, "Redirection number restriction"}, - { PARAM_TYPE_CALL_TRANS_REF, "Call transfer reference"}, - { PARAM_TYPE_LOOP_PREV_IND, "Loop prevention indicators"}, - { PARAM_TYPE_CALL_TRANS_NR, "Call transfer number"}, - { PARAM_TYPE_CCSS, "CCSS"}, - { PARAM_TYPE_FORW_GVNS, "Forward GVNS"}, - { PARAM_TYPE_BACKW_GVNS, "Backward GVNS"}, - { PARAM_TYPE_REDIRECT_CAPAB, "Redirect capability (reserved for national use)"}, - { PARAM_TYPE_NETW_MGMT_CTRL, "Network management controls"}, - { PARAM_TYPE_CORRELATION_ID, "Correlation id"}, - { PARAM_TYPE_SCF_ID, "SCF id"}, - { PARAM_TYPE_CALL_DIV_TREAT_IND, "Call diversion treatment indicators"}, - { PARAM_TYPE_CALLED_IN_NR, "Called IN number"}, - { PARAM_TYPE_CALL_OFF_TREAT_IND, "Call offering treatment indicators"}, - { PARAM_TYPE_CHARGED_PARTY_IDENT, "Charged party identification (national use)"}, - { PARAM_TYPE_CONF_TREAT_IND, "Conference treatment indicators"}, - { PARAM_TYPE_DISPLAY_INFO, "Display information"}, - { PARAM_TYPE_UID_ACTION_IND, "UID action indicators"}, - { PARAM_TYPE_UID_CAPAB_IND, "UID capability indicators"}, - { PARAM_TYPE_REDIRECT_COUNTER, "Redirect counter (reserved for national use)"}, - { PARAM_TYPE_COLLECT_CALL_REQ, "Collect call request"}, - { PARAM_TYPE_CALLING_GEODETIC_LOCATION, "Calling geodetic location"}, - { PARAM_TYPE_GENERIC_NR, "Generic number"}, - { PARAM_TYPE_JURISDICTION, "Jurisdiction"}, - { PARAM_TYPE_GENERIC_NAME, "Generic name"}, - { PARAM_TYPE_GENERIC_DIGITS, "Generic digits (national use)"}, - { PARAM_TYPE_APPLICATON_TRANS, "Application transport"}, - { ANSI_ISUP_PARAM_TYPE_OPER_SERV_INF, "Operator Services information"}, - { ANSI_ISUP_PARAM_TYPE_EGRESS, "Egress"}, - { ANSI_ISUP_PARAM_TYPE_JURISDICTION, "Jurisdiction"}, - { ANSI_ISUP_PARAM_TYPE_CARRIER_ID, "Carrier identification"}, - { ANSI_ISUP_PARAM_TYPE_BUSINESS_GRP, "Business group"}, - { ANSI_ISUP_PARAM_TYPE_GENERIC_NAME, "Generic name"}, - { ANSI_ISUP_PARAM_TYPE_NOTIF_IND, "Notification indicator"}, - { ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND, "Circuit group characteristic indicator"}, - { ANSI_ISUP_PARAM_TYPE_CVR_RESP_IND, "Circuit validation response indicator"}, - { ANSI_ISUP_PARAM_TYPE_OUT_TRK_GRP_NM,"Outgoing trunk group number"}, - { ANSI_ISUP_PARAM_TYPE_CI_NAME_IND, "Circuit identification name"}, - { ANSI_ISUP_PARAM_CLLI_CODE, "COMMON LANGUAGE location identification (CLLI) code"}, - { ANSI_ISUP_PARAM_ORIG_LINE_INF, "Originating line information"}, - { ANSI_ISUP_PARAM_CHRG_NO, "Charge number"}, - { ANSI_ISUP_PARAM_SERV_CODE_IND, "Service code indicator"}, - { ANSI_ISUP_PARAM_SPEC_PROC_REQ, "Special processing request"}, - { ANSI_ISUP_PARAM_CARRIER_SEL_INF, "Carrier selection information"}, - { ANSI_ISUP_PARAM_NET_TRANS, "Network transport"}, + { PARAM_TYPE_END_OF_OPT_PARAMS, "End of optional parameters"}, + { PARAM_TYPE_CALL_REF, "Call Reference (national use)"}, + { PARAM_TYPE_TRANSM_MEDIUM_REQU, "Transmission medium requirement"}, + { PARAM_TYPE_ACC_TRANSP, "Access transport"}, + { PARAM_TYPE_CALLED_PARTY_NR, "Called party number"}, + { PARAM_TYPE_SUBSQT_NR, "Subsequent number"}, + { PARAM_TYPE_NATURE_OF_CONN_IND, "Nature of connection indicators"}, + { PARAM_TYPE_FORW_CALL_IND, "Forward call indicators"}, + { PARAM_TYPE_OPT_FORW_CALL_IND, "Optional forward call indicators"}, + { PARAM_TYPE_CALLING_PRTY_CATEG, "Calling party's category"}, + { PARAM_TYPE_CALLING_PARTY_NR, "Calling party number"}, + { PARAM_TYPE_REDIRECTING_NR, "Redirecting number"}, + { PARAM_TYPE_REDIRECTION_NR, "Redirection number"}, + { PARAM_TYPE_CONNECTION_REQ, "Connection request"}, + { PARAM_TYPE_INFO_REQ_IND, "Information request indicators (national use)"}, + { PARAM_TYPE_INFO_IND, "Information indicators (national use)"}, + { PARAM_TYPE_CONTINUITY_IND, "Continuity request"}, + { PARAM_TYPE_BACKW_CALL_IND, "Backward call indicators"}, + { PARAM_TYPE_CAUSE_INDICATORS, "Cause indicators"}, + { PARAM_TYPE_REDIRECTION_INFO, "Redirection information"}, + { PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE, "Circuit group supervision message type"}, + { PARAM_TYPE_RANGE_AND_STATUS, "Range and Status"}, + { PARAM_TYPE_FACILITY_IND, "Facility indicator"}, + { PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD, "Closed user group interlock code"}, + { PARAM_TYPE_USER_SERVICE_INFO, "User service information"}, + { PARAM_TYPE_SIGNALLING_POINT_CODE, "Signalling point code (national use)"}, + { PARAM_TYPE_USER_TO_USER_INFO, "User-to-user information"}, + { PARAM_TYPE_CONNECTED_NR, "Connected number"}, + { PARAM_TYPE_SUSP_RESUME_IND, "Suspend/Resume indicators"}, + { PARAM_TYPE_TRANSIT_NETW_SELECT, "Transit network selection (national use)"}, + { PARAM_TYPE_EVENT_INFO, "Event information"}, + { PARAM_TYPE_CIRC_ASSIGN_MAP, "Circuit assignment map"}, + { PARAM_TYPE_CIRC_STATE_IND, "Circuit state indicator (national use)"}, + { PARAM_TYPE_AUTO_CONG_LEVEL, "Automatic congestion level"}, + { PARAM_TYPE_ORIG_CALLED_NR, "Original called number"}, + { PARAM_TYPE_OPT_BACKW_CALL_IND, "Backward call indicators"}, + { PARAM_TYPE_USER_TO_USER_IND, "User-to-user indicators"}, + { PARAM_TYPE_ORIG_ISC_POINT_CODE, "Origination ISC point code"}, + { PARAM_TYPE_GENERIC_NOTIF_IND, "Generic notification indicator"}, + { PARAM_TYPE_CALL_HIST_INFO, "Call history information"}, + { PARAM_TYPE_ACC_DELIV_INFO, "Access delivery information"}, + { PARAM_TYPE_NETW_SPECIFIC_FACLTY, "Network specific facility (national use)"}, + { PARAM_TYPE_USER_SERVICE_INFO_PR, "User service information prime"}, + { PARAM_TYPE_PROPAG_DELAY_COUNTER, "Propagation delay counter"}, + { PARAM_TYPE_REMOTE_OPERATIONS, "Remote operations (national use)"}, + { PARAM_TYPE_SERVICE_ACTIVATION, "Service activation"}, + { PARAM_TYPE_USER_TELESERV_INFO, "User teleservice information"}, + { PARAM_TYPE_TRANSM_MEDIUM_USED, "Transmission medium used"}, + { PARAM_TYPE_CALL_DIV_INFO, "Call diversion information"}, + { PARAM_TYPE_ECHO_CTRL_INFO, "Echo control information"}, + { PARAM_TYPE_MSG_COMPAT_INFO, "Message compatibility information"}, + { PARAM_TYPE_PARAM_COMPAT_INFO, "Parameter compatibility information"}, + { PARAM_TYPE_MLPP_PRECEDENCE, "MLPP precedence"}, + { PARAM_TYPE_MCID_REQ_IND, "MCID request indicators"}, + { PARAM_TYPE_MCID_RSP_IND, "MCID response indicators"}, + { PARAM_TYPE_HOP_COUNTER, "Hop counter"}, + { PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR, "Transmission medium requirement prime"}, + { PARAM_TYPE_LOCATION_NR, "Location number"}, + { PARAM_TYPE_REDIR_NR_RSTRCT, "Redirection number restriction"}, + { PARAM_TYPE_CALL_TRANS_REF, "Call transfer reference"}, + { PARAM_TYPE_LOOP_PREV_IND, "Loop prevention indicators"}, + { PARAM_TYPE_CALL_TRANS_NR, "Call transfer number"}, + { PARAM_TYPE_CCSS, "CCSS"}, + { PARAM_TYPE_FORW_GVNS, "Forward GVNS"}, + { PARAM_TYPE_BACKW_GVNS, "Backward GVNS"}, + { PARAM_TYPE_REDIRECT_CAPAB, "Redirect capability (reserved for national use)"}, + { PARAM_TYPE_NETW_MGMT_CTRL, "Network management controls"}, + { PARAM_TYPE_CORRELATION_ID, "Correlation id"}, + { PARAM_TYPE_SCF_ID, "SCF id"}, + { PARAM_TYPE_CALL_DIV_TREAT_IND, "Call diversion treatment indicators"}, + { PARAM_TYPE_CALLED_IN_NR, "Called IN number"}, + { PARAM_TYPE_CALL_OFF_TREAT_IND, "Call offering treatment indicators"}, + { PARAM_TYPE_CHARGED_PARTY_IDENT, "Charged party identification (national use)"}, + { PARAM_TYPE_CONF_TREAT_IND, "Conference treatment indicators"}, + { PARAM_TYPE_DISPLAY_INFO, "Display information"}, + { PARAM_TYPE_UID_ACTION_IND, "UID action indicators"}, + { PARAM_TYPE_UID_CAPAB_IND, "UID capability indicators"}, + { PARAM_TYPE_REDIRECT_COUNTER, "Redirect counter (reserved for national use)"}, + { PARAM_TYPE_APPLICATON_TRANS, "Application transport"}, + { PARAM_TYPE_COLLECT_CALL_REQ, "Collect call request"}, + { PARAM_TYPE_CALLING_GEODETIC_LOCATION, "Calling geodetic location"}, + { PARAM_TYPE_GENERIC_NR, "Generic number"}, + { PARAM_TYPE_GENERIC_DIGITS, "Generic digits (national use)"}, +#if 0 /* XXX: Dups of below */ + { PARAM_TYPE_JURISDICTION, "Jurisdiction"}, + { PARAM_TYPE_GENERIC_NAME, "Generic name"}, + { PARAM_TYPE_ORIG_LINE_INFO, "Originating line info"}, +#endif + { ANSI_ISUP_PARAM_TYPE_OPER_SERV_INF, "Operator Services information"}, + { ANSI_ISUP_PARAM_TYPE_EGRESS, "Egress"}, + { ANSI_ISUP_PARAM_TYPE_JURISDICTION, "Jurisdiction"}, + { ANSI_ISUP_PARAM_TYPE_CARRIER_ID, "Carrier identification"}, + { ANSI_ISUP_PARAM_TYPE_BUSINESS_GRP, "Business group"}, + { ANSI_ISUP_PARAM_TYPE_GENERIC_NAME, "Generic name"}, + { ANSI_ISUP_PARAM_TYPE_NOTIF_IND, "Notification indicator"}, + { ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND, "Circuit group characteristic indicator"}, + { ANSI_ISUP_PARAM_TYPE_CVR_RESP_IND, "Circuit validation response indicator"}, + { ANSI_ISUP_PARAM_TYPE_OUT_TRK_GRP_NM, "Outgoing trunk group number"}, + { ANSI_ISUP_PARAM_TYPE_CI_NAME_IND, "Circuit identification name"}, + { ANSI_ISUP_PARAM_CLLI_CODE, "COMMON LANGUAGE location identification (CLLI) code"}, + { ANSI_ISUP_PARAM_ORIG_LINE_INF, "Originating line information"}, + { ANSI_ISUP_PARAM_CHRG_NO, "Charge number"}, + { ANSI_ISUP_PARAM_SERV_CODE_IND, "Service code indicator"}, + { ANSI_ISUP_PARAM_SPEC_PROC_REQ, "Special processing request"}, + { ANSI_ISUP_PARAM_CARRIER_SEL_INF, "Carrier selection information"}, + { ANSI_ISUP_PARAM_NET_TRANS, "Network transport"}, { 0, NULL}}; +static value_string_ext ansi_isup_parameter_type_value_ext = VALUE_STRING_EXT_INIT(ansi_isup_parameter_type_value); #define CIC_LENGTH 2 #define BICC_CIC_LENGTH 4 @@ -604,10 +613,10 @@ static const value_string ansi_isup_parameter_type_value[] = { #define USER_TO_USER_IND_LENGTH 1 #define RANGE_LENGTH 1 -#define CVR_RESP_IND_LENGTH 1 -#define CG_CHAR_IND_LENGTH 1 -#define CI_NAME_IND 28 -#define CLLI_CODE_LENGTH 13 +#define CVR_RESP_IND_LENGTH 1 +#define CG_CHAR_IND_LENGTH 1 +#define CI_NAME_IND 28 +#define CLLI_CODE_LENGTH 13 #define CALL_ID_LENGTH 3 /* for parameter Call Reference */ #define SPC_LENGTH 2 /* for parameter Call Reference, Connection request */ @@ -720,7 +729,7 @@ static const value_string isup_SCCP_method_ind_value[] = { #define DATA_CALL 12 #define TEST_CALL 13 #define PAYPHONE 15 -const value_string isup_calling_partys_category_value[] = { +static const value_string isup_calling_partys_category_value[] = { { UNKNOWN_AT_THIS_TIME, "Category unknown at this time (national use)"}, { OPERATOR_FRENCH, "operator, language French"}, { OPERATOR_ENGLISH, "operator, language English"}, @@ -732,17 +741,18 @@ const value_string isup_calling_partys_category_value[] = { { DATA_CALL, "data call (voice band data)"}, { TEST_CALL, "test call"}, /* q.763-200212Amd2 */ - { 14, "IEPS call marking for preferential call set up"}, + { 14, "IEPS call marking for preferential call set up"}, { PAYPHONE, "payphone"}, { 0, NULL}}; +value_string_ext isup_calling_partys_category_value_ext = VALUE_STRING_EXT_INIT(isup_calling_partys_category_value); -#define CVR_RSP_IND_FAILURE 0 -#define CVR_RSP_IND_SUCCESS 1 +#define CVR_RSP_IND_FAILURE 0 +#define CVR_RSP_IND_SUCCESS 1 static const value_string isup_cvr_rsp_ind_value[ ] = { - { CVR_RSP_IND_FAILURE, "CVR Response Fail" }, - { CVR_RSP_IND_SUCCESS, "CVR Response Success" }, - { 0, NULL } + { CVR_RSP_IND_FAILURE, "CVR Response Fail" }, + { CVR_RSP_IND_SUCCESS, "CVR Response Success" }, + { 0, NULL } }; #define CVR_CG_IND_DOUBLE_SEIZE_NONE 0 @@ -751,51 +761,51 @@ static const value_string isup_cvr_rsp_ind_value[ ] = { #define CVR_CG_IND_DOUBLE_SEIZE_ALL 3 static const value_string isup_cvr_cg_double_seize_value[ ] = { - { CVR_CG_IND_DOUBLE_SEIZE_NONE, "Double Seize control NONE" }, - { CVR_CG_IND_DOUBLE_SEIZE_ODD, "Double Seize control odd circuits"}, - { CVR_CG_IND_DOUBLE_SEIZE_EVEN, "Double Seize control even circuits"}, - { CVR_CG_IND_DOUBLE_SEIZE_ALL, "Double Seize control all circuits"}, - {0, NULL } + { CVR_CG_IND_DOUBLE_SEIZE_NONE, "Double Seize control NONE" }, + { CVR_CG_IND_DOUBLE_SEIZE_ODD, "Double Seize control odd circuits"}, + { CVR_CG_IND_DOUBLE_SEIZE_EVEN, "Double Seize control even circuits"}, + { CVR_CG_IND_DOUBLE_SEIZE_ALL, "Double Seize control all circuits"}, + {0, NULL } }; -#define CVR_CG_IND_CAR_IND_UNKNOWN 0 -#define CVR_CG_IND_CAR_IND_ANALOG 1 -#define CVR_CG_IND_CAR_IND_DIGITAL 2 -#define CVR_CG_IND_CAR_IND_ANALOG_DIG 3 +#define CVR_CG_IND_CAR_IND_UNKNOWN 0 +#define CVR_CG_IND_CAR_IND_ANALOG 1 +#define CVR_CG_IND_CAR_IND_DIGITAL 2 +#define CVR_CG_IND_CAR_IND_ANALOG_DIG 3 static const value_string isup_cvr_cg_car_ind_value[ ] = { { CVR_CG_IND_CAR_IND_UNKNOWN , "Carrier Type Unknown" }, -{ CVR_CG_IND_CAR_IND_ANALOG , "Carrier Type Analog" }, -{ CVR_CG_IND_CAR_IND_DIGITAL , "Carrier Type Digital"}, +{ CVR_CG_IND_CAR_IND_ANALOG , "Carrier Type Analog" }, +{ CVR_CG_IND_CAR_IND_DIGITAL , "Carrier Type Digital"}, { CVR_CG_IND_CAR_IND_ANALOG_DIG, "Carrier Type Digital And Analog"}, { 0, NULL } }; -#define CVR_CG_IND_ALARM_CAR_IND_UNKNOWN 0 -#define CVR_CG_IND_ALARM_CAR_IND_SOFTWARE 1 -#define CVR_CG_IND_ALARM_CAR_IND_HARDWARE 2 -#define CVR_CG_IND_ALARM_CAR_IND_SPARE 3 +#define CVR_CG_IND_ALARM_CAR_IND_UNKNOWN 0 +#define CVR_CG_IND_ALARM_CAR_IND_SOFTWARE 1 +#define CVR_CG_IND_ALARM_CAR_IND_HARDWARE 2 +#define CVR_CG_IND_ALARM_CAR_IND_SPARE 3 static const value_string isup_cvr_alarm_car_ind_value[ ] = { - { CVR_CG_IND_ALARM_CAR_IND_UNKNOWN , "Alarm Carrier Ind Default"}, - { CVR_CG_IND_ALARM_CAR_IND_SOFTWARE , "Alarm Carrier Ind Software"}, - { CVR_CG_IND_ALARM_CAR_IND_HARDWARE , "Alarm Carrier Ind Hardware"}, - { CVR_CG_IND_ALARM_CAR_IND_SPARE , "Alarm Carrier Ind Spare"}, - { 0, NULL } + { CVR_CG_IND_ALARM_CAR_IND_UNKNOWN , "Alarm Carrier Ind Default"}, + { CVR_CG_IND_ALARM_CAR_IND_SOFTWARE , "Alarm Carrier Ind Software"}, + { CVR_CG_IND_ALARM_CAR_IND_HARDWARE , "Alarm Carrier Ind Hardware"}, + { CVR_CG_IND_ALARM_CAR_IND_SPARE , "Alarm Carrier Ind Spare"}, + { 0, NULL } }; #define CVR_CG_IND_CONT_CHK_UNKNOWN 0 -#define CVR_CG_IND_CONT_CHK_NONE 1 -#define CVR_CG_IND_CONT_CHK_STAT 2 +#define CVR_CG_IND_CONT_CHK_NONE 1 +#define CVR_CG_IND_CONT_CHK_STAT 2 #define CVR_CG_IND_CONT_CHK_PER_CALL 3 static const value_string isup_cvr_cont_chk_ind_value[ ] = { - { CVR_CG_IND_CONT_CHK_UNKNOWN , "Continuity Check Unknown"}, - { CVR_CG_IND_CONT_CHK_NONE , "Continuity Check NONE"}, - { CVR_CG_IND_CONT_CHK_STAT ,"Continuity Check Statistical"}, - { CVR_CG_IND_CONT_CHK_PER_CALL ,"Continuity Check Per Call"}, - { 0, NULL } + { CVR_CG_IND_CONT_CHK_UNKNOWN , "Continuity Check Unknown"}, + { CVR_CG_IND_CONT_CHK_NONE , "Continuity Check NONE"}, + { CVR_CG_IND_CONT_CHK_STAT , "Continuity Check Statistical"}, + { CVR_CG_IND_CONT_CHK_PER_CALL , "Continuity Check Per Call"}, + { 0, NULL } }; #define MEDIUM_SPEECH 0 @@ -834,7 +844,7 @@ static const value_string isup_cvr_cont_chk_ind_value[ ] = { #define MEDIUM_28_64KBS 41 #define MEDIUM_29_64KBS 42 -const value_string isup_transmission_medium_requirement_value[] = { +static const value_string isup_transmission_medium_requirement_value[] = { { MEDIUM_SPEECH, "speech"}, { MEDIUM_64KBS, "64 kbit/s unrestricted"}, { MEDIUM_3_1_KHZ_AUDIO, "3.1 kHz audio"}, @@ -871,6 +881,8 @@ const value_string isup_transmission_medium_requirement_value[] = { { MEDIUM_28_64KBS, "28x64 kbit/s unrestricted"}, { MEDIUM_29_64KBS, "29x64 kbit/s unrestricted"}, { 0, NULL}}; +value_string_ext isup_transmission_medium_requirement_value_ext = VALUE_STRING_EXT_INIT(isup_transmission_medium_requirement_value); + static const value_string isup_transmission_medium_requirement_prime_value[] = { { MEDIUM_SPEECH, "speech"}, { MEDIUM_64KBS, "reserved for 64 kbit/s unrestricted"}, @@ -883,6 +895,7 @@ static const value_string isup_transmission_medium_requirement_prime_value[] = { { MEDIUM_1536KBS, "reserved for 1536 kbit/s unrestricted"}, { MEDIUM_1920KBS, "reserved for 1920 kbit/s unrestricted"}, { 0, NULL}}; +static value_string_ext isup_transmission_medium_requirement_prime_value_ext = VALUE_STRING_EXT_INIT(isup_transmission_medium_requirement_prime_value); /* Definitions for Called and Calling Party number */ @@ -907,12 +920,12 @@ static const true_false_string isup_odd_even_ind_value = { #define ISUP_CALLED_PARTY_NATURE_INTERNATNL_NR 4 #define ISUP_CALLED_PARTY_NATURE_NETW_SPEC_NR 5 -#define ISUP_CHARGE_NATURE_ANI_CGPA_SUB_NR 1 -#define ISUP_CHARGE_NATURE_ANI_NA 2 -#define ISUP_CHARGE_NATURE_ANI_CGPA_NAT_NR 3 -#define ISUP_CHARGE_NATURE_ANI_CDPA_SUB_NR 5 -#define ISUP_CHARGE_NATURE_ANI_CDPA_NO_NR 6 -#define ISUP_CHARGE_NATURE_ANI_CDPA_NAT_NR 7 +#define ISUP_CHARGE_NATURE_ANI_CGPA_SUB_NR 1 +#define ISUP_CHARGE_NATURE_ANI_NA 2 +#define ISUP_CHARGE_NATURE_ANI_CGPA_NAT_NR 3 +#define ISUP_CHARGE_NATURE_ANI_CDPA_SUB_NR 5 +#define ISUP_CHARGE_NATURE_ANI_CDPA_NO_NR 6 +#define ISUP_CHARGE_NATURE_ANI_CDPA_NAT_NR 7 static const value_string isup_called_party_nature_of_address_ind_value[] = { { ISUP_CALLED_PARTY_NATURE_SUBSCRIBER_NR, "subscriber number (national use)"}, @@ -930,29 +943,29 @@ static const value_string isup_calling_party_nature_of_address_ind_value[] = { { 0, NULL}}; static const value_string isup_charge_number_nature_of_address_ind_value[] = { - { ISUP_CHARGE_NATURE_ANI_CGPA_SUB_NR, "ANI of the calling party; subscriber number"}, - { ISUP_CHARGE_NATURE_ANI_NA, "ANI not available or not provided"}, - { ISUP_CHARGE_NATURE_ANI_CGPA_NAT_NR, "ANI of the calling party; national number"}, - { ISUP_CHARGE_NATURE_ANI_CDPA_SUB_NR, "ANI of the called party; subscriber number"}, - { ISUP_CHARGE_NATURE_ANI_CDPA_NO_NR, "ANI of the called party; no number present"}, - { ISUP_CHARGE_NATURE_ANI_CDPA_NAT_NR, "ANI of the called party; national number"}, + { ISUP_CHARGE_NATURE_ANI_CGPA_SUB_NR, "ANI of the calling party; subscriber number"}, + { ISUP_CHARGE_NATURE_ANI_NA, "ANI not available or not provided"}, + { ISUP_CHARGE_NATURE_ANI_CGPA_NAT_NR, "ANI of the calling party; national number"}, + { ISUP_CHARGE_NATURE_ANI_CDPA_SUB_NR, "ANI of the called party; subscriber number"}, + { ISUP_CHARGE_NATURE_ANI_CDPA_NO_NR, "ANI of the called party; no number present"}, + { ISUP_CHARGE_NATURE_ANI_CDPA_NAT_NR, "ANI of the called party; national number"}, { 0, NULL}}; -#define ISUP_GENERIC_NAME_PRESENTATION_ALLOWED 0 -#define ISUP_GENERIC_NAME_PRESENTATION_RESTRICT 1 -#define ISUP_GENERIC_NAME_PRESENTATION_BLOCK_TOGGLE 2 -#define ISUP_GENERIC_NAME_PRESENTATION_NO_INDIC 3 -#define ISUP_GENERIC_NAME_TYPE_SPARE 0 -#define ISUP_GENERIC_NAME_TYPE_CALLING 1 -#define ISUP_GENERIC_NAME_TYPE_ORIG_CALLED 2 -#define ISUP_GENERIC_NAME_TYPE_REDIRECTING 3 -#define ISUP_GENERIC_NAME_TYPE_CONNECTED 4 +#define ISUP_GENERIC_NAME_PRESENTATION_ALLOWED 0 +#define ISUP_GENERIC_NAME_PRESENTATION_RESTRICT 1 +#define ISUP_GENERIC_NAME_PRESENTATION_BLOCK_TOGGLE 2 +#define ISUP_GENERIC_NAME_PRESENTATION_NO_INDIC 3 +#define ISUP_GENERIC_NAME_TYPE_SPARE 0 +#define ISUP_GENERIC_NAME_TYPE_CALLING 1 +#define ISUP_GENERIC_NAME_TYPE_ORIG_CALLED 2 +#define ISUP_GENERIC_NAME_TYPE_REDIRECTING 3 +#define ISUP_GENERIC_NAME_TYPE_CONNECTED 4 static const value_string isup_generic_name_presentation_value[] = { - { ISUP_GENERIC_NAME_PRESENTATION_ALLOWED, "presentation allowed"}, - { ISUP_GENERIC_NAME_PRESENTATION_RESTRICT, "presentation restricted"}, - { ISUP_GENERIC_NAME_PRESENTATION_BLOCK_TOGGLE, "blocking toggle"}, - { ISUP_GENERIC_NAME_PRESENTATION_NO_INDIC, "no indication"}, + { ISUP_GENERIC_NAME_PRESENTATION_ALLOWED, "presentation allowed"}, + { ISUP_GENERIC_NAME_PRESENTATION_RESTRICT, "presentation restricted"}, + { ISUP_GENERIC_NAME_PRESENTATION_BLOCK_TOGGLE, "blocking toggle"}, + { ISUP_GENERIC_NAME_PRESENTATION_NO_INDIC, "no indication"}, { 0, NULL}}; static const true_false_string isup_generic_name_availability_value = { @@ -961,14 +974,14 @@ static const true_false_string isup_generic_name_availability_value = { }; static const value_string isup_generic_name_type_value[] = { - { ISUP_GENERIC_NAME_TYPE_SPARE, "spare"}, - { ISUP_GENERIC_NAME_TYPE_CALLING, "calling name"}, - { ISUP_GENERIC_NAME_TYPE_ORIG_CALLED, "original called name"}, - { ISUP_GENERIC_NAME_TYPE_REDIRECTING, "redirecting name"}, - { ISUP_GENERIC_NAME_TYPE_CONNECTED, "connected name"}, - { 5, "spare"}, - { 6, "spare"}, - { 7, "spare"}, + { ISUP_GENERIC_NAME_TYPE_SPARE, "spare"}, + { ISUP_GENERIC_NAME_TYPE_CALLING, "calling name"}, + { ISUP_GENERIC_NAME_TYPE_ORIG_CALLED, "original called name"}, + { ISUP_GENERIC_NAME_TYPE_REDIRECTING, "redirecting name"}, + { ISUP_GENERIC_NAME_TYPE_CONNECTED, "connected name"}, + { 5, "spare"}, + { 6, "spare"}, + { 7, "spare"}, { 0, NULL}}; static const true_false_string isup_INN_ind_value = { @@ -1262,59 +1275,59 @@ static const true_false_string isup_connected_line_identity_request_ind_value = static const value_string isup_redirecting_ind_value[] = { /* according 3.45/Q.763 */ - { 0, "no redirection (national use)"}, - { 1, "call rerouted (national use)"}, - { 2, "call rerouted, all redirection information presentation restricted (national use)"}, - { 3, "call diverted"}, - { 4, "call diverted, all redirection information presentation restricted"}, - { 5, "call rerouted, redirection number presentation restricted (national use)"}, - { 6, "call diversion, redirection number presentation restricted (national use)"}, - { 7, "spare"}, - { 0, NULL}}; + { 0, "no redirection (national use)"}, + { 1, "call rerouted (national use)"}, + { 2, "call rerouted, all redirection information presentation restricted (national use)"}, + { 3, "call diverted"}, + { 4, "call diverted, all redirection information presentation restricted"}, + { 5, "call rerouted, redirection number presentation restricted (national use)"}, + { 6, "call diversion, redirection number presentation restricted (national use)"}, + { 7, "spare"}, + { 0, NULL}}; static const value_string isup_original_redirection_reason_value[] = { /* according 3.45/Q.763 */ - { 0, "unknown/not available"}, - { 1, "user busy (national use)"}, - { 2, "no reply (national use)"}, - { 3, "unconditional (national use)"}, - { 0, NULL}}; + { 0, "unknown/not available"}, + { 1, "user busy (national use)"}, + { 2, "no reply (national use)"}, + { 3, "unconditional (national use)"}, + { 0, NULL}}; static const value_string isup_redirection_reason_value[] = { /* according 3.45/Q.763 */ - { 0, "unknown/not available"}, - { 1, "user busy (national use)"}, - { 2, "no reply (national use)"}, - { 3, "unconditional (national use)"}, - { 4, "deflection during alerting"}, - { 5, "deflection immediate response"}, - { 6, "mobile subscriber not reachable"}, - { 0, NULL}}; + { 0, "unknown/not available"}, + { 1, "user busy (national use)"}, + { 2, "no reply (national use)"}, + { 3, "unconditional (national use)"}, + { 4, "deflection during alerting"}, + { 5, "deflection immediate response"}, + { 6, "mobile subscriber not reachable"}, + { 0, NULL}}; static const value_string isup_type_of_network_identification_value[] = { /* according 3.53/Q.763 */ - { 0, "CCITT/ITU-T-standardized identification"}, - { 2, "national network identification"}, - { 0, NULL}}; + { 0, "CCITT/ITU-T-standardized identification"}, + { 2, "national network identification"}, + { 0, NULL}}; static const value_string isup_network_identification_plan_value[] = { /* according 3.53/Q.763 */ - { 0, "if CCITT/ITU-T id - unknown"}, - { 3, "if CCITT/ITU-T id - public data network id code (X.121)"}, - { 6, "if CCITT/ITU-T id - public land Mobile Network id code (E.211)"}, - { 0, NULL}}; + { 0, "if CCITT/ITU-T id - unknown"}, + { 3, "if CCITT/ITU-T id - public data network id code (X.121)"}, + { 6, "if CCITT/ITU-T id - public land Mobile Network id code (E.211)"}, + { 0, NULL}}; static const value_string isup_map_type_value[] = { /* according 3.69/Q.763 */ - { 1, "1544 kbit/s digital path map format (64 kbit/s base rate"}, - { 2, "2048 kbit/s digital path map format (64 kbit/s base rate"}, - { 0, NULL}}; + { 1, "1544 kbit/s digital path map format (64 kbit/s base rate"}, + { 2, "2048 kbit/s digital path map format (64 kbit/s base rate"}, + { 0, NULL}}; static const value_string isup_auto_congestion_level_value[] = { /* according 3.4/Q.763 */ - { 1, "Congestion level 1 exceeded"}, - { 2, "Congestion level 2 exceeded"}, - { 0, NULL}}; + { 1, "Congestion level 1 exceeded"}, + { 2, "Congestion level 2 exceeded"}, + { 0, NULL}}; static const true_false_string isup_inband_information_ind_value = { /* according 3.37/Q.763 */ @@ -1340,10 +1353,10 @@ static const true_false_string isup_access_delivery_ind_value = { static const value_string isup_loop_prevention_response_ind_value[] = { /* according 3.67/Q.763 */ - { 0, "insufficient information"}, - { 1, "no loop exists"}, - { 2, "simultaneous transfer"}, - { 0, NULL}}; + { 0, "insufficient information"}, + { 1, "no loop exists"}, + { 2, "simultaneous transfer"}, + { 0, NULL}}; static const true_false_string isup_temporary_alternative_routing_ind_value = { /* according 3.68/Q.763 */ @@ -1360,38 +1373,38 @@ static const true_false_string isup_extension_ind_value = { static const value_string isup_call_to_be_diverted_ind_value[] = { /* according 3.72/Q.763 */ - { 0, "no indication"}, - { 1, "call diversion allowed"}, - { 2, "call diversion not allowed"}, - { 3, "spare"}, - { 0, NULL}}; + { 0, "no indication"}, + { 1, "call diversion allowed"}, + { 2, "call diversion not allowed"}, + { 3, "spare"}, + { 0, NULL}}; static const value_string isup_call_to_be_offered_ind_value[] = { /* according 3.72/Q.763 */ - { 0, "no indication"}, - { 1, "call offering not allowed"}, - { 2, "call offering allowed"}, - { 3, "spare"}, - { 0, NULL}}; + { 0, "no indication"}, + { 1, "call offering not allowed"}, + { 2, "call offering allowed"}, + { 3, "spare"}, + { 0, NULL}}; static const value_string isup_conference_acceptance_ind_value[] = { /* according 3.76/Q.763 */ - { 0, "no indication"}, - { 1, "accept conference request"}, - { 2, "reject conference request"}, - { 3, "spare"}, - { 0, NULL}}; + { 0, "no indication"}, + { 1, "accept conference request"}, + { 2, "reject conference request"}, + { 3, "spare"}, + { 0, NULL}}; static const value_string isup_application_transport_parameter_value[] = { /* according 3.82/Q.763 */ - { 0, "Unidentified Context and Error Handling (UCEH) ASE"}, - { 1, "PSS1 ASE (VPN)"}, - { 2, "spare"}, - { 3, "Charging ASE"}, - { 4, "GAT"}, - { 5, "BAT ASE"}, - { 6, "Enhanced Unidentified Context and Error Handling ASE (EUCEH ASE)"}, - { 0, NULL}}; + { 0, "Unidentified Context and Error Handling (UCEH) ASE"}, + { 1, "PSS1 ASE (VPN)"}, + { 2, "spare"}, + { 3, "Charging ASE"}, + { 4, "GAT"}, + { 5, "BAT ASE"}, + { 6, "Enhanced Unidentified Context and Error Handling ASE (EUCEH ASE)"}, + { 0, NULL}}; static const true_false_string isup_Release_call_indicator_value = { "release call", @@ -1404,17 +1417,17 @@ static const true_false_string isup_Send_notification_ind_value = { }; static const value_string isup_APM_segmentation_ind_value[] = { - { 0x00, "final segment"}, - { 0x01, "number of following segments"}, - { 0x02, "number of following segments"}, - { 0x03, "number of following segments"}, - { 0x04, "number of following segments"}, - { 0x05, "number of following segments"}, - { 0x06, "number of following segments"}, - { 0x07, "number of following segments"}, - { 0x08, "number of following segments"}, - { 0x09, "number of following segments"}, - { 0, NULL}}; + { 0x00, "final segment"}, + { 0x01, "number of following segments"}, + { 0x02, "number of following segments"}, + { 0x03, "number of following segments"}, + { 0x04, "number of following segments"}, + { 0x05, "number of following segments"}, + { 0x06, "number of following segments"}, + { 0x07, "number of following segments"}, + { 0x08, "number of following segments"}, + { 0x09, "number of following segments"}, + { 0, NULL}}; static const true_false_string isup_Sequence_ind_value = { "new sequence", @@ -1535,18 +1548,18 @@ static int hf_isup_screening_indicator = -1; static int hf_isup_screening_indicator_enhanced = -1; static int hf_isup_called_party_odd_address_signal_digit = -1; static int hf_isup_calling_party_odd_address_signal_digit = -1; -static int hf_isup_called_party_even_address_signal_digit = -1; -static int hf_isup_calling_party_even_address_signal_digit = -1; +static int hf_isup_called_party_even_address_signal_digit = -1; +static int hf_isup_calling_party_even_address_signal_digit = -1; static int hf_isup_generic_name_presentation = -1; static int hf_isup_generic_name_availability = -1; static int hf_isup_generic_name_type = -1; static int hf_isup_generic_name_ia5 = -1; -static int hf_isup_OECD_inf_ind = -1; -static int hf_isup_IECD_inf_ind = -1; -static int hf_isup_OECD_req_ind = -1; -static int hf_isup_IECD_req_ind = -1; +static int hf_isup_OECD_inf_ind = -1; +static int hf_isup_IECD_inf_ind = -1; +static int hf_isup_OECD_req_ind = -1; +static int hf_isup_IECD_req_ind = -1; static int hf_isup_calling_party_address_request_indicator = -1; static int hf_isup_info_req_holding_indicator = -1; @@ -1605,82 +1618,82 @@ static int hf_isup_network_identification_plan = -1; static int hf_isup_map_type = -1; -static int hf_isup_automatic_congestion_level = -1; +static int hf_isup_automatic_congestion_level = -1; -static int hf_isup_inband_information_ind = -1; -static int hf_isup_call_diversion_may_occur_ind = -1; -static int hf_isup_mlpp_user_ind = -1; +static int hf_isup_inband_information_ind = -1; +static int hf_isup_call_diversion_may_occur_ind = -1; +static int hf_isup_mlpp_user_ind = -1; -static int hf_isup_UUI_type = -1; -static int hf_isup_UUI_req_service1 = -1; -static int hf_isup_UUI_req_service2 = -1; -static int hf_isup_UUI_req_service3 = -1; -static int hf_isup_UUI_res_service1 = -1; -static int hf_isup_UUI_res_service2 = -1; -static int hf_isup_UUI_res_service3 = -1; -static int hf_isup_UUI_network_discard_ind = -1; -static int hf_isup_access_delivery_ind = -1; +static int hf_isup_UUI_type = -1; +static int hf_isup_UUI_req_service1 = -1; +static int hf_isup_UUI_req_service2 = -1; +static int hf_isup_UUI_req_service3 = -1; +static int hf_isup_UUI_res_service1 = -1; +static int hf_isup_UUI_res_service2 = -1; +static int hf_isup_UUI_res_service3 = -1; +static int hf_isup_UUI_network_discard_ind = -1; +static int hf_isup_access_delivery_ind = -1; -static int hf_isup_transmission_medium_requirement_prime = -1; +static int hf_isup_transmission_medium_requirement_prime = -1; -static int hf_isup_loop_prevention_response_ind = -1; +static int hf_isup_loop_prevention_response_ind = -1; -static int hf_isup_temporary_alternative_routing_ind = -1; -static int hf_isup_extension_ind = -1; +static int hf_isup_temporary_alternative_routing_ind = -1; +static int hf_isup_extension_ind = -1; -static int hf_isup_call_to_be_diverted_ind = -1; +static int hf_isup_call_to_be_diverted_ind = -1; -static int hf_isup_call_to_be_offered_ind = -1; +static int hf_isup_call_to_be_offered_ind = -1; -static int hf_isup_conference_acceptance_ind = -1; +static int hf_isup_conference_acceptance_ind = -1; -static int hf_isup_transit_at_intermediate_exchange_ind = -1; -static int hf_isup_Release_call_ind = -1; -static int hf_isup_Send_notification_ind = -1; -static int hf_isup_Discard_message_ind_value = -1; -static int hf_isup_Discard_parameter_ind = -1; -static int hf_isup_Pass_on_not_possible_indicator = -1; -static int hf_isup_pass_on_not_possible_indicator2 = -1; -static int hf_isup_Broadband_narrowband_interworking_ind = -1; -static int hf_isup_Broadband_narrowband_interworking_ind2 = -1; +static int hf_isup_transit_at_intermediate_exchange_ind = -1; +static int hf_isup_Release_call_ind = -1; +static int hf_isup_Send_notification_ind = -1; +static int hf_isup_Discard_message_ind_value = -1; +static int hf_isup_Discard_parameter_ind = -1; +static int hf_isup_Pass_on_not_possible_indicator = -1; +static int hf_isup_pass_on_not_possible_indicator2 = -1; +static int hf_isup_Broadband_narrowband_interworking_ind = -1; +static int hf_isup_Broadband_narrowband_interworking_ind2 = -1; -static int hf_isup_app_cont_ident = -1; -static int hf_isup_app_Send_notification_ind = -1; -static int hf_isup_apm_segmentation_ind = -1; -static int hf_isup_apm_si_ind = -1; -static int hf_isup_apm_slr = -1; -static int hf_isup_orig_addr_len = -1; -static int hf_isup_dest_addr_len = -1; -static int hf_isup_app_Release_call_ind = -1; -static int hf_isup_cause_location = -1; +static int hf_isup_app_cont_ident = -1; +static int hf_isup_app_Send_notification_ind = -1; +static int hf_isup_apm_segmentation_ind = -1; +static int hf_isup_apm_si_ind = -1; +static int hf_isup_apm_slr = -1; +static int hf_isup_orig_addr_len = -1; +static int hf_isup_dest_addr_len = -1; +static int hf_isup_app_Release_call_ind = -1; +static int hf_isup_cause_location = -1; -static int hf_ansi_isup_coding_standard = -1; +static int hf_ansi_isup_coding_standard = -1; -static int hf_length_indicator = -1; -static int hf_afi = -1; -static int hf_bicc_nsap_dsp = -1; -static int hf_bat_ase_identifier = -1; +static int hf_length_indicator = -1; +static int hf_afi = -1; +static int hf_bicc_nsap_dsp = -1; +static int hf_bat_ase_identifier = -1; -static int hf_Action_Indicator = -1; +static int hf_Action_Indicator = -1; -static int hf_Instruction_ind_for_general_action = -1; +static int hf_Instruction_ind_for_general_action = -1; -static int hf_Send_notification_ind_for_general_action = -1; +static int hf_Send_notification_ind_for_general_action = -1; -static int hf_Instruction_ind_for_pass_on_not_possible = -1; +static int hf_Instruction_ind_for_pass_on_not_possible = -1; -static int hf_Send_notification_ind_for_pass_on_not_possible = -1; -static int hf_BCTP_Version_Indicator = -1; -static int hf_Tunnelled_Protocol_Indicator = -1; -static int hf_TPEI = -1; -static int hf_BVEI = -1; -static int hf_bncid = -1; -static int hf_bat_ase_biwfa = -1; -static int hf_characteristics = -1; +static int hf_Send_notification_ind_for_pass_on_not_possible = -1; +static int hf_BCTP_Version_Indicator = -1; +static int hf_Tunnelled_Protocol_Indicator = -1; +static int hf_TPEI = -1; +static int hf_BVEI = -1; +static int hf_bncid = -1; +static int hf_bat_ase_biwfa = -1; +static int hf_characteristics = -1; -static int hf_Organization_Identifier = -1; -static int hf_codec_type = -1; -static int hf_etsi_codec_type = -1; +static int hf_Organization_Identifier = -1; +static int hf_codec_type = -1; +static int hf_etsi_codec_type = -1; static int hf_active_code_set = -1; static int hf_active_code_set_12_2 = -1; static int hf_active_code_set_10_2 = -1; @@ -1701,21 +1714,21 @@ static int hf_supported_code_set_5_15 = -1; static int hf_supported_code_set_4_75 = -1; static int hf_optimisation_mode = -1; static int hf_max_codec_modes = -1; -static int hf_bearer_control_tunneling = -1; -static int hf_Local_BCU_ID = -1; -static int hf_late_cut_trough_cap_ind = -1; -static int hf_bat_ase_signal = -1; -static int hf_bat_ase_duration = -1; -static int hf_bat_ase_bearer_redir_ind = -1; -static int hf_BAT_ASE_Comp_Report_Reason = -1; -static int hf_BAT_ASE_Comp_Report_ident = -1; -static int hf_BAT_ASE_Comp_Report_diagnostic = -1; -static int hf_nsap_ipv4_addr = -1; -static int hf_nsap_ipv6_addr = -1; -static int hf_iana_icp = -1; - -static int hf_isup_geo_loc_presentation_restricted_ind = -1; -static int hf_isup_geo_loc_screening_ind = -1; +static int hf_bearer_control_tunneling = -1; +static int hf_Local_BCU_ID = -1; +static int hf_late_cut_trough_cap_ind = -1; +static int hf_bat_ase_signal = -1; +static int hf_bat_ase_duration = -1; +static int hf_bat_ase_bearer_redir_ind = -1; +static int hf_BAT_ASE_Comp_Report_Reason = -1; +static int hf_BAT_ASE_Comp_Report_ident = -1; +static int hf_BAT_ASE_Comp_Report_diagnostic = -1; +static int hf_nsap_ipv4_addr = -1; +static int hf_nsap_ipv6_addr = -1; +static int hf_iana_icp = -1; + +static int hf_isup_geo_loc_presentation_restricted_ind = -1; +static int hf_isup_geo_loc_screening_ind = -1; static int hf_isup_apm_msg_fragments = -1; static int hf_isup_apm_msg_fragment = -1; @@ -1728,17 +1741,17 @@ static int hf_isup_apm_msg_reassembled_in = -1; static int hf_isup_apm_msg_reassembled_length = -1; /* Initialize the subtree pointers */ -static gint ett_isup = -1; -static gint ett_isup_parameter = -1; -static gint ett_isup_address_digits = -1; -static gint ett_isup_pass_along_message = -1; -static gint ett_isup_circuit_state_ind = -1; -static gint ett_bat_ase = -1; -static gint ett_bicc = -1; -static gint ett_bat_ase_element = -1; -static gint ett_bat_ase_iwfa = -1; -static gint ett_acs = -1; -static gint ett_scs = -1; +static gint ett_isup = -1; +static gint ett_isup_parameter = -1; +static gint ett_isup_address_digits = -1; +static gint ett_isup_pass_along_message = -1; +static gint ett_isup_circuit_state_ind = -1; +static gint ett_bat_ase = -1; +static gint ett_bicc = -1; +static gint ett_bat_ase_element = -1; +static gint ett_bat_ase_iwfa = -1; +static gint ett_acs = -1; +static gint ett_scs = -1; static gint ett_isup_apm_msg_fragment = -1; static gint ett_isup_apm_msg_fragments = -1; @@ -1751,23 +1764,23 @@ static dissector_handle_t q931_ie_handle = NULL; static gboolean isup_apm_desegment = TRUE; static const fragment_items isup_apm_msg_frag_items = { - /* Fragment subtrees */ - &ett_isup_apm_msg_fragment, - &ett_isup_apm_msg_fragments, - /* Fragment fields */ - &hf_isup_apm_msg_fragments, - &hf_isup_apm_msg_fragment, - &hf_isup_apm_msg_fragment_overlap, - &hf_isup_apm_msg_fragment_overlap_conflicts, - &hf_isup_apm_msg_fragment_multiple_tails, - &hf_isup_apm_msg_fragment_too_long_fragment, - &hf_isup_apm_msg_fragment_error, - /* Reassembled in field */ - &hf_isup_apm_msg_reassembled_in, - /* Reassembled length field */ - &hf_isup_apm_msg_reassembled_length, - /* Tag */ - "ISUP APM Message fragments" + /* Fragment subtrees */ + &ett_isup_apm_msg_fragment, + &ett_isup_apm_msg_fragments, + /* Fragment fields */ + &hf_isup_apm_msg_fragments, + &hf_isup_apm_msg_fragment, + &hf_isup_apm_msg_fragment_overlap, + &hf_isup_apm_msg_fragment_overlap_conflicts, + &hf_isup_apm_msg_fragment_multiple_tails, + &hf_isup_apm_msg_fragment_too_long_fragment, + &hf_isup_apm_msg_fragment_error, + /* Reassembled in field */ + &hf_isup_apm_msg_reassembled_in, + /* Reassembled length field */ + &hf_isup_apm_msg_reassembled_length, + /* Tag */ + "ISUP APM Message fragments" }; static GHashTable *isup_apm_msg_fragment_table = NULL; @@ -1777,8 +1790,8 @@ static GHashTable *isup_apm_msg_reassembled_table = NULL; static void isup_apm_defragment_init(void) { - fragment_table_init (&isup_apm_msg_fragment_table); - reassembled_table_init(&isup_apm_msg_reassembled_table); + fragment_table_init (&isup_apm_msg_fragment_table); + reassembled_table_init(&isup_apm_msg_reassembled_table); } /* Info for the tap that must be passed between procedures */ @@ -1811,30 +1824,30 @@ static char number_to_char(int number) static void dissect_isup_cvr_response_ind_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { - guint8 cvr_response_ind; + guint8 cvr_response_ind; - cvr_response_ind = tvb_get_guint8(parameter_tvb, 0); - proto_tree_add_uint(parameter_tree, hf_isup_cvr_rsp_ind, parameter_tvb, 0, CVR_RESP_IND_LENGTH, cvr_response_ind ); - proto_item_set_text(parameter_item, "Circuit Validation Test Response Indicator: 0x%x", cvr_response_ind ); + cvr_response_ind = tvb_get_guint8(parameter_tvb, 0); + proto_tree_add_uint(parameter_tree, hf_isup_cvr_rsp_ind, parameter_tvb, 0, CVR_RESP_IND_LENGTH, cvr_response_ind ); + proto_item_set_text(parameter_item, "Circuit Validation Test Response Indicator: 0x%x", cvr_response_ind ); } /* ------------------------------------------------------------------ - Dissector Parameter circuit validation response - circuit group - characters - */ + Dissector Parameter circuit validation response - circuit group + characters +*/ static void dissect_isup_circuit_group_char_ind_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { - guint8 cvr_cg_char_ind; + guint8 cvr_cg_char_ind; - cvr_cg_char_ind = tvb_get_guint8(parameter_tvb, 0); - proto_tree_add_uint(parameter_tree, hf_isup_cvr_cg_car_ind, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); - proto_tree_add_uint(parameter_tree, hf_isup_cvr_cg_double_seize, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); - proto_tree_add_uint(parameter_tree, hf_isup_cvr_cg_alarm_car_ind, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); - proto_tree_add_uint(parameter_tree, hf_isup_cvr_cont_chk_ind, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); + cvr_cg_char_ind = tvb_get_guint8(parameter_tvb, 0); + proto_tree_add_uint(parameter_tree, hf_isup_cvr_cg_car_ind, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); + proto_tree_add_uint(parameter_tree, hf_isup_cvr_cg_double_seize, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); + proto_tree_add_uint(parameter_tree, hf_isup_cvr_cg_alarm_car_ind, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); + proto_tree_add_uint(parameter_tree, hf_isup_cvr_cont_chk_ind, parameter_tvb, 0, CG_CHAR_IND_LENGTH, cvr_cg_char_ind ); - proto_item_set_text(parameter_item, "Circuit Validation Test Response Circuit Group Characteristics: 0x%x", cvr_cg_char_ind ); + proto_item_set_text(parameter_item, "Circuit Validation Test Response Circuit Group Characteristics: 0x%x", cvr_cg_char_ind ); } /* ------------------------------------------------------------------ @@ -1887,7 +1900,7 @@ dissect_isup_calling_partys_category_parameter(tvbuff_t *parameter_tvb,proto_tre calling_partys_category = tvb_get_guint8(parameter_tvb, 0); proto_tree_add_uint(parameter_tree, hf_isup_calling_partys_category, parameter_tvb, 0, CALLING_PRTYS_CATEGORY_LENGTH, calling_partys_category); - proto_item_set_text(parameter_item, "Calling Party's category: 0x%x (%s)", calling_partys_category, val_to_str(calling_partys_category, isup_calling_partys_category_value, "reserved/spare")); + proto_item_set_text(parameter_item, "Calling Party's category: 0x%x (%s)", calling_partys_category, val_to_str_ext_const(calling_partys_category, &isup_calling_partys_category_value_ext, "reserved/spare")); } @@ -1902,7 +1915,7 @@ dissect_isup_transmission_medium_requirement_parameter(tvbuff_t *parameter_tvb, transmission_medium_requirement = tvb_get_guint8(parameter_tvb, 0); proto_tree_add_uint(parameter_tree, hf_isup_transmission_medium_requirement, parameter_tvb, 0, TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH,transmission_medium_requirement); - proto_item_set_text(parameter_item, "Transmission medium requirement: %u (%s)", transmission_medium_requirement, val_to_str(transmission_medium_requirement, isup_transmission_medium_requirement_value, "spare")); + proto_item_set_text(parameter_item, "Transmission medium requirement: %u (%s)", transmission_medium_requirement, val_to_str_ext_const(transmission_medium_requirement, &isup_transmission_medium_requirement_value_ext, "spare")); } /* ------------------------------------------------------------------ Dissector Parameter Called party number @@ -1932,46 +1945,46 @@ dissect_isup_called_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree * offset = 2; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Called Party Number"); + offset, -1, + "Called Party Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); while((length = tvb_reported_length_remaining(parameter_tvb, offset)) > 0){ - address_digit_pair = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(address_digits_tree, hf_isup_called_party_odd_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); - called_number[i++] = number_to_char(address_digit_pair & ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK); - if (i > MAXDIGITS) - THROW(ReportedBoundsError); - if ((length - 1) > 0 ){ - proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); - called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); - if (i > MAXDIGITS) - THROW(ReportedBoundsError); - } - offset++; - } + address_digit_pair = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(address_digits_tree, hf_isup_called_party_odd_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); + called_number[i++] = number_to_char(address_digit_pair & ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK); + if (i > MAXDIGITS) + THROW(ReportedBoundsError); + if ((length - 1) > 0 ){ + proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); + called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); + if (i > MAXDIGITS) + THROW(ReportedBoundsError); + } + offset++; + } if (((indicators1 & 0x80) == 0) && (tvb_length(parameter_tvb) > 0)){ /* Even Indicator set -> last even digit is valid & has be displayed */ - proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); - called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); - if (i > MAXDIGITS) - THROW(ReportedBoundsError); + proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); + called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); + if (i > MAXDIGITS) + THROW(ReportedBoundsError); } called_number[i++] = '\0'; proto_item_set_text(address_digits_item, "Called Party Number: %s", called_number); proto_item_set_text(parameter_item, "Called Party Number: %s", called_number); if ( number_plan == 1 ) { - e164_info.e164_number_type = CALLED_PARTY_NUMBER; - e164_info.nature_of_address = indicators1 & 0x7f; - e164_info.E164_number_str = called_number; - e164_info.E164_number_length = i - 1; - dissect_e164_number(parameter_tvb, address_digits_tree, 2, (offset - 2), e164_info); - hidden_item = proto_tree_add_string(address_digits_tree, hf_isup_called, parameter_tvb, - offset - length, length, called_number); - PROTO_ITEM_SET_HIDDEN(hidden_item); + e164_info.e164_number_type = CALLED_PARTY_NUMBER; + e164_info.nature_of_address = indicators1 & 0x7f; + e164_info.E164_number_str = called_number; + e164_info.E164_number_length = i - 1; + dissect_e164_number(parameter_tvb, address_digits_tree, 2, (offset - 2), e164_info); + hidden_item = proto_tree_add_string(address_digits_tree, hf_isup_called, parameter_tvb, + offset - length, length, called_number); + PROTO_ITEM_SET_HIDDEN(hidden_item); } else { - proto_tree_add_string(address_digits_tree, hf_isup_called, parameter_tvb, - offset - length, length, called_number); + proto_tree_add_string(address_digits_tree, hf_isup_called, parameter_tvb, + offset - length, length, called_number); } tap_called_number = ep_strdup(called_number); } @@ -1995,8 +2008,8 @@ dissect_isup_subsequent_number_parameter(tvbuff_t *parameter_tvb, proto_tree *pa offset = 1; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Subsequent Number"); + offset, -1, + "Subsequent Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); while((length = tvb_reported_length_remaining(parameter_tvb, offset)) > 0){ @@ -2009,7 +2022,7 @@ dissect_isup_subsequent_number_parameter(tvbuff_t *parameter_tvb, proto_tree *pa proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; } @@ -2018,7 +2031,7 @@ dissect_isup_subsequent_number_parameter(tvbuff_t *parameter_tvb, proto_tree *pa proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } called_number[i++] = '\0'; @@ -2111,241 +2124,245 @@ dissect_isup_backward_call_indicators_parameter(tvbuff_t *parameter_tvb,proto_tr * dissector, as that has some values not specified by the standard but * that appear to be used for purposes other than the ones in Q.850. */ -const value_string q850_cause_code_vals[] = { - { 0x00, "Valid cause code not yet received" }, - { 0x01, "Unallocated (unassigned) number" }, - { 0x02, "No route to specified transit network" }, - { 0x03, "No route to destination" }, - { 0x04, "Send special information tone" }, - { 0x05, "Misdialled trunk prefix" }, - { 0x06, "Channel unacceptable" }, - { 0x07, "Call awarded and being delivered in an established channel" }, - { 0x08, "Preemption" }, - { 0x09, "Preemption - circuit reserved for reuse" }, - { 0x0E, "QoR: ported number" }, - { 0x10, "Normal call clearing" }, - { 0x11, "User busy" }, - { 0x12, "No user responding" }, - { 0x13, "No answer from user (user alerted)" }, - { 0x14, "Subscriber absent" }, - { 0x15, "Call rejected" }, - { 0x16, "Number changed" }, - { 0x17, "Redirection to new destination" }, - { 0x18, "Call rejected due to feature at the destination" }, - { 0x19, "Exchange routing error" }, - { 0x1A, "Non-selected user clearing" }, - { 0x1B, "Destination out of order" }, - { 0x1C, "Invalid number format (address incomplete)" }, - { 0x1D, "Facility rejected" }, - { 0x1E, "Response to STATUS ENQUIRY" }, - { 0x1F, "Normal unspecified" }, - { 0x21, "Circuit out of order" }, - { 0x22, "No circuit/channel available" }, - { 0x26, "Network out of order" }, - { 0x27, "Permanent frame mode connection out of service" }, - { 0x28, "Permanent frame mode connection operational" }, - { 0x29, "Temporary failure" }, - { 0x2A, "Switching equipment congestion" }, - { 0x2B, "Access information discarded" }, - { 0x2C, "Requested circuit/channel not available" }, - { 0x2E, "Precedence call blocked" }, - { 0x2F, "Resources unavailable, unspecified" }, - { 0x31, "Quality of service unavailable" }, - { 0x32, "Requested facility not subscribed" }, - { 0x35, "Outgoing calls barred within CUG" }, - { 0x37, "Incoming calls barred within CUG" }, - { 0x38, "Call waiting not subscribed" }, - { 0x39, "Bearer capability not authorized" }, - { 0x3A, "Bearer capability not presently available" }, - { 0x3E, "Inconsistency in designated outgoing access information and subscriber class" }, - { 0x3F, "Service or option not available, unspecified" }, - { 0x41, "Bearer capability not implemented" }, - { 0x42, "Channel type not implemented" }, - { 0x45, "Requested facility not implemented" }, - { 0x46, "Only restricted digital information bearer capability is available" }, - { 0x4F, "Service or option not implemented, unspecified" }, - { 0x51, "Invalid call reference value" }, - { 0x52, "Identified channel does not exist" }, - { 0x53, "Call identity does not exist for suspended call" }, - { 0x54, "Call identity in use" }, - { 0x55, "No call suspended" }, - { 0x56, "Call having the requested call identity has been cleared" }, - { 0x57, "Called user not member of CUG" }, - { 0x58, "Incompatible destination" }, - { 0x5A, "Non-existing CUG" }, - { 0x5B, "Invalid transit network selection (national use)" }, - { 0x5F, "Invalid message, unspecified" }, - { 0x60, "Mandatory information element is missing" }, - { 0x61, "Message type non-existent or not implemented" }, - { 0x62, "Message not compatible with call state or message type non-existent or not implemented" }, - { 0x63, "Information element nonexistent or not implemented" }, - { 0x64, "Invalid information element contents" }, - { 0x65, "Message not compatible with call state" }, - { 0x66, "Recovery on timer expiry" }, - { 0x67, "Parameter non-existent or not implemented - passed on" }, - { 0x6E, "Message with unrecognized parameter discarded" }, - { 0x6F, "Protocol error, unspecified" }, - { 0x7F, "Internetworking, unspecified" }, - { 0, NULL } +static const value_string q850_cause_code_vals[] = { + { 0x00, "Valid cause code not yet received" }, + { 0x01, "Unallocated (unassigned) number" }, + { 0x02, "No route to specified transit network" }, + { 0x03, "No route to destination" }, + { 0x04, "Send special information tone" }, + { 0x05, "Misdialled trunk prefix" }, + { 0x06, "Channel unacceptable" }, + { 0x07, "Call awarded and being delivered in an established channel" }, + { 0x08, "Preemption" }, + { 0x09, "Preemption - circuit reserved for reuse" }, + { 0x0E, "QoR: ported number" }, + { 0x10, "Normal call clearing" }, + { 0x11, "User busy" }, + { 0x12, "No user responding" }, + { 0x13, "No answer from user (user alerted)" }, + { 0x14, "Subscriber absent" }, + { 0x15, "Call rejected" }, + { 0x16, "Number changed" }, + { 0x17, "Redirection to new destination" }, + { 0x18, "Call rejected due to feature at the destination" }, + { 0x19, "Exchange routing error" }, + { 0x1A, "Non-selected user clearing" }, + { 0x1B, "Destination out of order" }, + { 0x1C, "Invalid number format (address incomplete)" }, + { 0x1D, "Facility rejected" }, + { 0x1E, "Response to STATUS ENQUIRY" }, + { 0x1F, "Normal unspecified" }, + { 0x21, "Circuit out of order" }, + { 0x22, "No circuit/channel available" }, + { 0x26, "Network out of order" }, + { 0x27, "Permanent frame mode connection out of service" }, + { 0x28, "Permanent frame mode connection operational" }, + { 0x29, "Temporary failure" }, + { 0x2A, "Switching equipment congestion" }, + { 0x2B, "Access information discarded" }, + { 0x2C, "Requested circuit/channel not available" }, + { 0x2E, "Precedence call blocked" }, + { 0x2F, "Resources unavailable, unspecified" }, + { 0x31, "Quality of service unavailable" }, + { 0x32, "Requested facility not subscribed" }, + { 0x35, "Outgoing calls barred within CUG" }, + { 0x37, "Incoming calls barred within CUG" }, + { 0x38, "Call waiting not subscribed" }, + { 0x39, "Bearer capability not authorized" }, + { 0x3A, "Bearer capability not presently available" }, + { 0x3E, "Inconsistency in designated outgoing access information and subscriber class" }, + { 0x3F, "Service or option not available, unspecified" }, + { 0x41, "Bearer capability not implemented" }, + { 0x42, "Channel type not implemented" }, + { 0x45, "Requested facility not implemented" }, + { 0x46, "Only restricted digital information bearer capability is available" }, + { 0x4F, "Service or option not implemented, unspecified" }, + { 0x51, "Invalid call reference value" }, + { 0x52, "Identified channel does not exist" }, + { 0x53, "Call identity does not exist for suspended call" }, + { 0x54, "Call identity in use" }, + { 0x55, "No call suspended" }, + { 0x56, "Call having the requested call identity has been cleared" }, + { 0x57, "Called user not member of CUG" }, + { 0x58, "Incompatible destination" }, + { 0x5A, "Non-existing CUG" }, + { 0x5B, "Invalid transit network selection (national use)" }, + { 0x5F, "Invalid message, unspecified" }, + { 0x60, "Mandatory information element is missing" }, + { 0x61, "Message type non-existent or not implemented" }, + { 0x62, "Message not compatible with call state or message type non-existent or not implemented" }, + { 0x63, "Information element nonexistent or not implemented" }, + { 0x64, "Invalid information element contents" }, + { 0x65, "Message not compatible with call state" }, + { 0x66, "Recovery on timer expiry" }, + { 0x67, "Parameter non-existent or not implemented - passed on" }, + { 0x6E, "Message with unrecognized parameter discarded" }, + { 0x6F, "Protocol error, unspecified" }, + { 0x7F, "Internetworking, unspecified" }, + { 0, NULL } }; +value_string_ext q850_cause_code_vals_ext = VALUE_STRING_EXT_INIT(q850_cause_code_vals); static const value_string ansi_isup_cause_code_vals[] = { - { 0x00, "Valid cause code not yet received" }, - { 0x01, "Unallocated (unassigned) number" }, - { 0x02, "No route to specified transit network" }, - { 0x03, "No route to destination" }, - { 0x04, "Send special information tone" }, - { 0x05, "Misdialled trunk prefix" }, - { 0x06, "Channel unacceptable" }, - { 0x07, "Call awarded and being delivered in an established channel" }, - { 0x08, "Preemption" }, - { 0x09, "Preemption - circuit reserved for reuse" }, - { 0x0E, "QoR: ported number" }, - { 0x10, "Normal call clearing" }, - { 0x11, "User busy" }, - { 0x12, "No user responding" }, - { 0x13, "No answer from user (user alerted)" }, - { 0x14, "Subscriber absent" }, - { 0x15, "Call rejected" }, - { 0x16, "Number changed" }, - { 23, "Unallocated destination number" }, - { 24, "Undefined business group" }, - { 0x19, "Exchange routing error" }, - { 0x1A, "Non-selected user clearing" }, - { 0x1B, "Destination out of order" }, - { 0x1C, "Invalid number format (address incomplete)" }, - { 0x1D, "Facility rejected" }, - { 0x1E, "Response to STATUS ENQUIRY" }, - { 0x1F, "Normal unspecified" }, - { 0x21, "Circuit out of order" }, - { 0x22, "No circuit/channel available" }, - { 0x26, "Network out of order" }, - { 0x27, "Permanent frame mode connection out of service" }, - { 0x28, "Permanent frame mode connection operational" }, - { 0x29, "Temporary failure" }, - { 0x2A, "Switching equipment congestion" }, - { 0x2B, "Access information discarded" }, - { 0x2C, "Requested circuit/channel not available" }, - { 45, "Preemption" }, - { 0x2E, "Precedence call blocked" }, - { 0x2F, "Resources unavailable, unspecified" }, - { 0x31, "Quality of service unavailable" }, - { 0x32, "Requested facility not subscribed" }, - { 51, "Call type incompatible with service request" }, - { 0x35, "Outgoing calls barred within CUG" }, - { 54, "Call blocked due to group restriction" }, - { 0x37, "Incoming calls barred within CUG" }, - { 0x38, "Call waiting not subscribed" }, - { 0x39, "Bearer capability not authorized" }, - { 0x3A, "Bearer capability not presently available" }, - { 0x3E, "Inconsistency in designated outgoing access information and subscriber class" }, - { 0x3F, "Service or option not available, unspecified" }, - { 0x41, "Bearer capability not implemented" }, - { 0x42, "Channel type not implemented" }, - { 0x45, "Requested facility not implemented" }, - { 0x46, "Only restricted digital information bearer capability is available" }, - { 0x4F, "Service or option not implemented, unspecified" }, - { 0x51, "Invalid call reference value" }, - { 0x52, "Identified channel does not exist" }, - { 0x53, "Call identity does not exist for suspended call" }, - { 0x54, "Call identity in use" }, - { 0x55, "No call suspended" }, - { 0x56, "Call having the requested call identity has been cleared" }, - { 0x57, "Called user not member of CUG" }, - { 0x58, "Incompatible destination" }, - { 0x5A, "Non-existing CUG" }, - { 0x5B, "Invalid transit network selection (national use)" }, - { 0x5F, "Invalid message, unspecified" }, - { 0x60, "Mandatory information element is missing" }, - { 0x61, "Message type non-existent or not implemented" }, - { 0x62, "Message not compatible with call state or message type non-existent or not implemented" }, - { 0x63, "Information element nonexistent or not implemented" }, - { 0x64, "Invalid information element contents" }, - { 0x65, "Message not compatible with call state" }, - { 0x66, "Recovery on timer expiry" }, - { 0x67, "Parameter non-existent or not implemented - passed on" }, - { 0x6E, "Message with unrecognized parameter discarded" }, - { 0x6F, "Protocol error, unspecified" }, - { 0x7F, "Internetworking, unspecified" }, - { 0, NULL } + { 0x00, "Valid cause code not yet received" }, + { 0x01, "Unallocated (unassigned) number" }, + { 0x02, "No route to specified transit network" }, + { 0x03, "No route to destination" }, + { 0x04, "Send special information tone" }, + { 0x05, "Misdialled trunk prefix" }, + { 0x06, "Channel unacceptable" }, + { 0x07, "Call awarded and being delivered in an established channel" }, + { 0x08, "Preemption" }, + { 0x09, "Preemption - circuit reserved for reuse" }, + { 0x0E, "QoR: ported number" }, + { 0x10, "Normal call clearing" }, + { 0x11, "User busy" }, + { 0x12, "No user responding" }, + { 0x13, "No answer from user (user alerted)" }, + { 0x14, "Subscriber absent" }, + { 0x15, "Call rejected" }, + { 0x16, "Number changed" }, + { 23, "Unallocated destination number" }, + { 24, "Undefined business group" }, + { 0x19, "Exchange routing error" }, + { 0x1A, "Non-selected user clearing" }, + { 0x1B, "Destination out of order" }, + { 0x1C, "Invalid number format (address incomplete)" }, + { 0x1D, "Facility rejected" }, + { 0x1E, "Response to STATUS ENQUIRY" }, + { 0x1F, "Normal unspecified" }, + { 0x21, "Circuit out of order" }, + { 0x22, "No circuit/channel available" }, + { 0x26, "Network out of order" }, + { 0x27, "Permanent frame mode connection out of service" }, + { 0x28, "Permanent frame mode connection operational" }, + { 0x29, "Temporary failure" }, + { 0x2A, "Switching equipment congestion" }, + { 0x2B, "Access information discarded" }, + { 0x2C, "Requested circuit/channel not available" }, + { 45, "Preemption" }, + { 0x2E, "Precedence call blocked" }, + { 0x2F, "Resources unavailable, unspecified" }, + { 0x31, "Quality of service unavailable" }, + { 0x32, "Requested facility not subscribed" }, + { 51, "Call type incompatible with service request" }, + { 0x35, "Outgoing calls barred within CUG" }, + { 54, "Call blocked due to group restriction" }, + { 0x37, "Incoming calls barred within CUG" }, + { 0x38, "Call waiting not subscribed" }, + { 0x39, "Bearer capability not authorized" }, + { 0x3A, "Bearer capability not presently available" }, + { 0x3E, "Inconsistency in designated outgoing access information and subscriber class" }, + { 0x3F, "Service or option not available, unspecified" }, + { 0x41, "Bearer capability not implemented" }, + { 0x42, "Channel type not implemented" }, + { 0x45, "Requested facility not implemented" }, + { 0x46, "Only restricted digital information bearer capability is available" }, + { 0x4F, "Service or option not implemented, unspecified" }, + { 0x51, "Invalid call reference value" }, + { 0x52, "Identified channel does not exist" }, + { 0x53, "Call identity does not exist for suspended call" }, + { 0x54, "Call identity in use" }, + { 0x55, "No call suspended" }, + { 0x56, "Call having the requested call identity has been cleared" }, + { 0x57, "Called user not member of CUG" }, + { 0x58, "Incompatible destination" }, + { 0x5A, "Non-existing CUG" }, + { 0x5B, "Invalid transit network selection (national use)" }, + { 0x5F, "Invalid message, unspecified" }, + { 0x60, "Mandatory information element is missing" }, + { 0x61, "Message type non-existent or not implemented" }, + { 0x62, "Message not compatible with call state or message type non-existent or not implemented" }, + { 0x63, "Information element nonexistent or not implemented" }, + { 0x64, "Invalid information element contents" }, + { 0x65, "Message not compatible with call state" }, + { 0x66, "Recovery on timer expiry" }, + { 0x67, "Parameter non-existent or not implemented - passed on" }, + { 0x6E, "Message with unrecognized parameter discarded" }, + { 0x6F, "Protocol error, unspecified" }, + { 0x7F, "Internetworking, unspecified" }, + { 0, NULL } }; +static value_string_ext ansi_isup_cause_code_vals_ext = VALUE_STRING_EXT_INIT(ansi_isup_cause_code_vals); static const value_string ansi_isup_coding_standard_vals[] = { - { 0, "CCITT Standard" }, - { 1, "Reserved for other international standards" }, - { 2, "ANSI Standard" }, - { 3, "Reserved" }, - { 0, NULL } + { 0, "CCITT Standard" }, + { 1, "Reserved for other international standards" }, + { 2, "ANSI Standard" }, + { 3, "Reserved" }, + { 0, NULL } }; void dissect_isup_cause_indicators_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { guint length = tvb_reported_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb,0, -1, "Cause indicators (-> Q.850)"); dissect_q931_cause_ie(parameter_tvb,0,length, - parameter_tree, - hf_isup_cause_indicator, &tap_cause_value, isup_parameter_type_value); + parameter_tree, + hf_isup_cause_indicator, &tap_cause_value, isup_parameter_type_value); proto_item_set_text(parameter_item, "Cause indicators, see Q.850 (%u byte%s length)", length , plurality(length, "", "s")); } static void dissect_ansi_isup_cause_indicators_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { - guint8 coding_standard; - guint8 cause_value; - int offset = 0; - guint length = tvb_reported_length(parameter_tvb); - - coding_standard = (tvb_get_guint8(parameter_tvb, offset)&0x60)>>5; - - switch (coding_standard) { - case 0: - /*CCITT*/ - proto_tree_add_item(parameter_tree, hf_isup_cause_location, parameter_tvb, offset, 1, FALSE); - proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE); - proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE); - offset ++; - length--; - if (length == 0) - return; - proto_tree_add_item(parameter_tree, hf_isup_cause_indicator, parameter_tvb, offset, 1, FALSE); - cause_value=tvb_get_guint8(parameter_tvb, offset)&0x7f; - offset ++; - length--; - proto_item_set_text(parameter_item, "Cause indicators: %s (%u)", val_to_str(cause_value, q850_cause_code_vals, "spare"),cause_value ); - if (length == 0) { - return; - } - proto_tree_add_text(parameter_tree, parameter_tvb, offset, - length, "Diagnostic: %s", - tvb_bytes_to_str(parameter_tvb, offset, length)); - return; - case 2: - /*ANSI*/ - proto_tree_add_item(parameter_tree, hf_isup_cause_location, parameter_tvb, offset, 1, FALSE); - proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE); - proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE); - offset ++; - length--; - if (length == 0) - return; - proto_tree_add_item(parameter_tree, hf_ansi_isup_cause_indicator, parameter_tvb, offset, 1, FALSE); - cause_value=tvb_get_guint8(parameter_tvb, offset)&0x7f; - proto_item_set_text(parameter_item, "Cause indicators: %s (%u)", val_to_str(cause_value, ansi_isup_cause_code_vals, "spare"),cause_value ); - offset ++; - length--; - if (length == 0) { - return; - } - proto_tree_add_text(parameter_tree, parameter_tvb, offset, - length, "Diagnostic: %s", - tvb_bytes_to_str(parameter_tvb, offset, length)); - return; - default: - proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE); - proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE); - break; - } - proto_item_set_text(parameter_item, "Cause indicators(%u byte%s length)", length , plurality(length, "", "s")); + guint8 coding_standard; + guint8 cause_value; + int offset = 0; + guint length = tvb_reported_length(parameter_tvb); + + coding_standard = (tvb_get_guint8(parameter_tvb, offset)&0x60)>>5; + + switch (coding_standard) { + case 0: + /*CCITT*/ + proto_tree_add_item(parameter_tree, hf_isup_cause_location, parameter_tvb, offset, 1, FALSE); + proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE); + proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE); + offset ++; + length--; + if (length == 0) + return; + proto_tree_add_item(parameter_tree, hf_isup_cause_indicator, parameter_tvb, offset, 1, FALSE); + cause_value=tvb_get_guint8(parameter_tvb, offset)&0x7f; + offset ++; + length--; + proto_item_set_text(parameter_item, "Cause indicators: %s (%u)", val_to_str_ext_const(cause_value, &q850_cause_code_vals_ext, "spare"),cause_value ); + if (length == 0) { + return; + } + proto_tree_add_text(parameter_tree, parameter_tvb, offset, + length, "Diagnostic: %s", + tvb_bytes_to_str(parameter_tvb, offset, length)); + return; + case 2: + /*ANSI*/ + proto_tree_add_item(parameter_tree, hf_isup_cause_location, parameter_tvb, offset, 1, FALSE); + proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE); + proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE); + offset ++; + length--; + if (length == 0) + return; + proto_tree_add_item(parameter_tree, hf_ansi_isup_cause_indicator, parameter_tvb, offset, 1, FALSE); + cause_value=tvb_get_guint8(parameter_tvb, offset)&0x7f; + proto_item_set_text(parameter_item, "Cause indicators: %s (%u)", + val_to_str_ext_const(cause_value, &ansi_isup_cause_code_vals_ext, "spare"), + cause_value ); + offset ++; + length--; + if (length == 0) { + return; + } + proto_tree_add_text(parameter_tree, parameter_tvb, offset, + length, "Diagnostic: %s", + tvb_bytes_to_str(parameter_tvb, offset, length)); + return; + default: + proto_tree_add_item(parameter_tree, hf_ansi_isup_coding_standard, parameter_tvb, offset, 1, FALSE); + proto_tree_add_item(parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE); + break; + } + proto_item_set_text(parameter_item, "Cause indicators(%u byte%s length)", length , plurality(length, "", "s")); } /* ------------------------------------------------------------------ @@ -2420,8 +2437,8 @@ dissect_isup_circuit_state_ind_parameter(tvbuff_t *parameter_tvb, proto_tree *pa while((length = tvb_reported_length_remaining(parameter_tvb, offset)) > 0){ circuit_state_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Circuit# CIC+%u state", i); + offset, -1, + "Circuit# CIC+%u state", i); circuit_state_tree = proto_item_add_subtree(circuit_state_item, ett_isup_circuit_state_ind); circuit_state = tvb_get_guint8(parameter_tvb, offset); if ((circuit_state & DC_8BIT_MASK) == 0){ @@ -2459,11 +2476,11 @@ static void dissect_isup_user_to_user_information_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *parameter_tree, proto_item *parameter_item) { guint length = tvb_reported_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb, 0, -1, - "User-to-user info (-> Q.931)"); + "User-to-user info (-> Q.931)"); dissect_q931_user_user_ie(parameter_tvb, pinfo, 0, length, parameter_tree ); proto_item_set_text(parameter_item, "User-to-user information,(%u byte%s length)", - length , plurality(length, "", "s")); + length , plurality(length, "", "s")); } /* ------------------------------------------------------------------ Dissector Parameter Call Reference @@ -2486,92 +2503,93 @@ dissect_isup_call_reference_parameter(tvbuff_t *parameter_tvb, proto_tree *param */ static void dissect_isup_access_transport_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, - proto_item *parameter_item, packet_info *pinfo) + proto_item *parameter_item, packet_info *pinfo) { guint length = tvb_reported_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb, 0, -1, - "Access transport parameter field (-> Q.931)"); + "Access transport parameter field (-> Q.931)"); if (q931_ie_handle) call_dissector(q931_ie_handle, parameter_tvb, pinfo, parameter_tree); proto_item_set_text(parameter_item, "Access transport (%u byte%s length)", - length , plurality(length, "", "s")); + length , plurality(length, "", "s")); } /* dissect x.213 NSAP coded Address */ -const value_string x213_afi_value[] = { - { 0x34, "IANA ICP"}, - { 0x35, "IANA ICP"}, - { 0x36, "X.121"}, - { 0x37, "X.121"}, - { 0x38, "ISO DCC"}, - { 0x39, "ISO DCC"}, - { 0x40, "F.69"}, - { 0x41, "F.69"}, - { 0x42, "E.163"}, - { 0x43, "E.163"}, - { 0x44, "E.164"}, - { 0x45, "E.164"}, - { 0x46, "ISO 6523-ICD"}, - { 0x47, "ISO 6523-ICD"}, - { 0x48, "Local"}, - { 0x49, "Local"}, - { 0x50, "Local ISO/IEC 646 character "}, - { 0x51, "Local ( National character )"}, - { 0x52, "X.121"}, - { 0x53, "X.121"}, - { 0x54, "F.69"}, - { 0x55, "F.69"}, - { 0x56, "E.163"}, - { 0x57, "E.163"}, - { 0x58, "E.164"}, - { 0x59, "E.164"}, - - { 0x76, "ITU-T IND"}, - { 0x77, "ITU-T IND"}, - - { 0xb8, "IANA ICP Group no"}, - { 0xb9, "IANA ICP Group no"}, - { 0xba, "X.121 Group no"}, - { 0xbb, "X.121 Group no"}, - { 0xbc, "ISO DCC Group no"}, - { 0xbd, "ISO DCC Group no"}, - { 0xbe, "F.69 Group no"}, - { 0xbf, "F.69 Group no"}, - { 0xc0, "E.163 Group no"}, - { 0xc1, "E.163 Group no"}, - { 0xc2, "E.164 Group no"}, - { 0xc3, "E.164 Group no"}, - { 0xc4, "ISO 6523-ICD Group no"}, - { 0xc5, "ISO 6523-ICD Group no"}, - { 0xc6, "Local Group no"}, - { 0xc7, "Local Group no"}, - { 0xc8, "Local ISO/IEC 646 character Group no"}, - { 0xc9, "Local ( National character ) Group no"}, - { 0xca, "X.121 Group no"}, - { 0xcb, "X.121 Group no"}, - { 0xcd, "F.69 Group no"}, - { 0xce, "F.69 Group no"}, - { 0xcf, "E.163 Group no"}, - { 0xde, "E.163 Group no"}, - { 0xd0, "E.164 Group no"}, - { 0xd1, "E.164 Group no"}, - - { 0xe2, "ITU-T IND Group no"}, - { 0xe3, "ITU-T IND Group no"}, - { 0, NULL } +static const value_string x213_afi_value[] = { + { 0x34, "IANA ICP"}, + { 0x35, "IANA ICP"}, + { 0x36, "X.121"}, + { 0x37, "X.121"}, + { 0x38, "ISO DCC"}, + { 0x39, "ISO DCC"}, + { 0x40, "F.69"}, + { 0x41, "F.69"}, + { 0x42, "E.163"}, + { 0x43, "E.163"}, + { 0x44, "E.164"}, + { 0x45, "E.164"}, + { 0x46, "ISO 6523-ICD"}, + { 0x47, "ISO 6523-ICD"}, + { 0x48, "Local"}, + { 0x49, "Local"}, + { 0x50, "Local ISO/IEC 646 character "}, + { 0x51, "Local ( National character )"}, + { 0x52, "X.121"}, + { 0x53, "X.121"}, + { 0x54, "F.69"}, + { 0x55, "F.69"}, + { 0x56, "E.163"}, + { 0x57, "E.163"}, + { 0x58, "E.164"}, + { 0x59, "E.164"}, + + { 0x76, "ITU-T IND"}, + { 0x77, "ITU-T IND"}, + + { 0xb8, "IANA ICP Group no"}, + { 0xb9, "IANA ICP Group no"}, + { 0xba, "X.121 Group no"}, + { 0xbb, "X.121 Group no"}, + { 0xbc, "ISO DCC Group no"}, + { 0xbd, "ISO DCC Group no"}, + { 0xbe, "F.69 Group no"}, + { 0xbf, "F.69 Group no"}, + { 0xc0, "E.163 Group no"}, + { 0xc1, "E.163 Group no"}, + { 0xc2, "E.164 Group no"}, + { 0xc3, "E.164 Group no"}, + { 0xc4, "ISO 6523-ICD Group no"}, + { 0xc5, "ISO 6523-ICD Group no"}, + { 0xc6, "Local Group no"}, + { 0xc7, "Local Group no"}, + { 0xc8, "Local ISO/IEC 646 character Group no"}, + { 0xc9, "Local ( National character ) Group no"}, + { 0xca, "X.121 Group no"}, + { 0xcb, "X.121 Group no"}, + { 0xcd, "F.69 Group no"}, + { 0xce, "F.69 Group no"}, + { 0xcf, "E.163 Group no"}, + { 0xd0, "E.164 Group no"}, + { 0xd1, "E.164 Group no"}, + { 0xde, "E.163 Group no"}, + + { 0xe2, "ITU-T IND Group no"}, + { 0xe3, "ITU-T IND Group no"}, + { 0, NULL } }; +value_string_ext x213_afi_value_ext = VALUE_STRING_EXT_INIT(x213_afi_value); -/* Up-to-date information on the allocated ICP values can be found in */ -/*draft-gray-rfc1888bis-01 at */ -/*http://www.ietf.org/internet-drafts/draft-gray-rfc1888bis-01.txt */ +/* Up-to-date information on the allocated ICP values can be found in */ +/*draft-gray-rfc1888bis-01 at */ +/*http://www.ietf.org/internet-drafts/draft-gray-rfc1888bis-01.txt */ static const value_string iana_icp_values[] = { - { 0x0, "IP Version 6 Address"}, - { 0x1, "IP Version 4 Address"}, - { 0, NULL } + { 0x0, "IP Version 6 Address"}, + { 0x1, "IP Version 4 Address"}, + { 0, NULL } }; /* @@ -2582,145 +2600,147 @@ static const value_string iana_icp_values[] = { void dissect_nsap(tvbuff_t *parameter_tvb,gint offset,gint len, proto_tree *parameter_tree) { - guint8 afi; - guint8 length = 0; - guint icp, cc_offset; - - afi = tvb_get_guint8(parameter_tvb, offset); - - switch ( afi ) { - case 0x35: /* IANA ICP Binary fortmat*/ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, 3, - "IDP = %s", tvb_bytes_to_str(parameter_tvb, offset, 3)); - - proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, 1, afi ); - offset = offset + 1; - icp = tvb_get_ntohs(parameter_tvb, offset); - proto_tree_add_uint(parameter_tree, hf_iana_icp, parameter_tvb, offset, 1, icp ); - if ( icp == 0 ){ /* IPv6 addr */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 17, - "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17)); - proto_tree_add_item(parameter_tree, hf_nsap_ipv6_addr, parameter_tvb, offset + 2, - 16, FALSE); - - } - else { /* IPv4 addr */ - /* XXX - this is really only for ICP 1 */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2, 17, - "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17)); - proto_tree_add_item(parameter_tree, hf_nsap_ipv4_addr, parameter_tvb, offset + 2, 4, FALSE); - } - - break; - case 0x45: /* E.164 ATM format */ - case 0xC3: /* E.164 ATM group format */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, 9, - "IDP = %s", tvb_bytes_to_str(parameter_tvb, offset, 9)); - - proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, 1, afi ); - - proto_tree_add_text(parameter_tree, parameter_tvb, offset + 1, 8, - "IDI = %s", tvb_bytes_to_str(parameter_tvb, offset + 1, 8)); - offset = offset +1; - /* Dissect country code */ - cc_offset = offset; - dissect_e164_cc(parameter_tvb, parameter_tree, 3, TRUE); - - proto_tree_add_text(parameter_tree,parameter_tvb, cc_offset, length,"DSP length %u(len %u -9 )",(len-9),len ); - - proto_tree_add_item(parameter_tree, hf_bicc_nsap_dsp, parameter_tvb, offset + 8, (len - 9),FALSE); - - break; - default: - proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, len, afi ); - }/* end switch afi */ + guint8 afi; + guint8 length = 0; + guint icp, cc_offset; + + afi = tvb_get_guint8(parameter_tvb, offset); + + switch ( afi ) { + case 0x35: /* IANA ICP Binary fortmat*/ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, 3, + "IDP = %s", tvb_bytes_to_str(parameter_tvb, offset, 3)); + + proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, 1, afi ); + offset = offset + 1; + icp = tvb_get_ntohs(parameter_tvb, offset); + proto_tree_add_uint(parameter_tree, hf_iana_icp, parameter_tvb, offset, 1, icp ); + if ( icp == 0 ){ /* IPv6 addr */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2 , 17, + "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17)); + proto_tree_add_item(parameter_tree, hf_nsap_ipv6_addr, parameter_tvb, offset + 2, + 16, FALSE); + + } + else { /* IPv4 addr */ + /* XXX - this is really only for ICP 1 */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset + 2, 17, + "DSP = %s", tvb_bytes_to_str(parameter_tvb, offset + 2, 17)); + proto_tree_add_item(parameter_tree, hf_nsap_ipv4_addr, parameter_tvb, offset + 2, 4, FALSE); + } + + break; + case 0x45: /* E.164 ATM format */ + case 0xC3: /* E.164 ATM group format */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, 9, + "IDP = %s", tvb_bytes_to_str(parameter_tvb, offset, 9)); + + proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, 1, afi ); + + proto_tree_add_text(parameter_tree, parameter_tvb, offset + 1, 8, + "IDI = %s", tvb_bytes_to_str(parameter_tvb, offset + 1, 8)); + offset = offset +1; + /* Dissect country code */ + cc_offset = offset; + dissect_e164_cc(parameter_tvb, parameter_tree, 3, TRUE); + + proto_tree_add_text(parameter_tree,parameter_tvb, cc_offset, length,"DSP length %u(len %u -9 )",(len-9),len ); + + proto_tree_add_item(parameter_tree, hf_bicc_nsap_dsp, parameter_tvb, offset + 8, (len - 9),FALSE); + + break; + default: + proto_tree_add_uint(parameter_tree, hf_afi, parameter_tvb, offset, len, afi ); + }/* end switch afi */ } -#define ACTION_INDICATOR 0x01 -#define BACKBONE_NETWORK_CONNECTION_IDENTIFIER 0x02 -#define INTERWORKING_FUNCTION_ADDRESS 0x03 -#define CODEC_LIST 0x04 -#define CODEC 0x05 -#define BAT_COMPATIBILITY_REPORT 0x06 -#define BEARER_NETWORK_CONNECTION_CHARACTERISTICS 0x07 -#define BEARER_CONTROL_INFORMATION 0x08 -#define BEARER_CONTROL_TUNNELLING 0x09 -#define BEARER_CONTROL_UNIT_IDENTIFIER 0x0A -#define SIGNAL 0x0B -#define BEARER_REDIRECTION_CAPABILITY 0x0C -#define BEARER_REDIRECTION_INDICATORS 0x0D -#define SIGNAL_TYPE 0x0E -#define DURATION 0x0F +#define ACTION_INDICATOR 0x01 +#define BACKBONE_NETWORK_CONNECTION_IDENTIFIER 0x02 +#define INTERWORKING_FUNCTION_ADDRESS 0x03 +#define CODEC_LIST 0x04 +#define CODEC 0x05 +#define BAT_COMPATIBILITY_REPORT 0x06 +#define BEARER_NETWORK_CONNECTION_CHARACTERISTICS 0x07 +#define BEARER_CONTROL_INFORMATION 0x08 +#define BEARER_CONTROL_TUNNELLING 0x09 +#define BEARER_CONTROL_UNIT_IDENTIFIER 0x0A +#define SIGNAL 0x0B +#define BEARER_REDIRECTION_CAPABILITY 0x0C +#define BEARER_REDIRECTION_INDICATORS 0x0D +#define SIGNAL_TYPE 0x0E +#define DURATION 0x0F static const value_string bat_ase_list_of_Identifiers_vals[] = { - { 0x00 , "spare" }, - { ACTION_INDICATOR , "Action Indicator" }, - { BACKBONE_NETWORK_CONNECTION_IDENTIFIER , "Backbone Network Connection Identifier" }, - { INTERWORKING_FUNCTION_ADDRESS , "Interworking Function Address" }, - { CODEC_LIST , "Codec List" }, - { CODEC , "Codec" }, - { BAT_COMPATIBILITY_REPORT , "BAT Compatibility Report" }, - { BEARER_NETWORK_CONNECTION_CHARACTERISTICS , "Bearer Network Connection Characteristics" }, - { BEARER_CONTROL_INFORMATION , "Bearer Control Information"}, - { BEARER_CONTROL_TUNNELLING , "Bearer Control Tunnelling"}, - { BEARER_CONTROL_UNIT_IDENTIFIER , "Bearer Control Unit Identifier" }, - { SIGNAL , "Signal"}, - { BEARER_REDIRECTION_CAPABILITY , "Bearer Redirection Capability"}, - { BEARER_REDIRECTION_INDICATORS , "Bearer Redirection Indicators"}, - { SIGNAL_TYPE , "Signal Type"}, - { DURATION , "Duration" }, - { 0, NULL } + { 0x00 , "spare" }, + { ACTION_INDICATOR , "Action Indicator" }, + { BACKBONE_NETWORK_CONNECTION_IDENTIFIER , "Backbone Network Connection Identifier" }, + { INTERWORKING_FUNCTION_ADDRESS , "Interworking Function Address" }, + { CODEC_LIST , "Codec List" }, + { CODEC , "Codec" }, + { BAT_COMPATIBILITY_REPORT , "BAT Compatibility Report" }, + { BEARER_NETWORK_CONNECTION_CHARACTERISTICS , "Bearer Network Connection Characteristics" }, + { BEARER_CONTROL_INFORMATION , "Bearer Control Information"}, + { BEARER_CONTROL_TUNNELLING , "Bearer Control Tunnelling"}, + { BEARER_CONTROL_UNIT_IDENTIFIER , "Bearer Control Unit Identifier" }, + { SIGNAL , "Signal"}, + { BEARER_REDIRECTION_CAPABILITY , "Bearer Redirection Capability"}, + { BEARER_REDIRECTION_INDICATORS , "Bearer Redirection Indicators"}, + { SIGNAL_TYPE , "Signal Type"}, + { DURATION , "Duration" }, + { 0, NULL } }; +static value_string_ext bat_ase_list_of_Identifiers_vals_ext = VALUE_STRING_EXT_INIT(bat_ase_list_of_Identifiers_vals); /*ITU-T Q.765.5 (06/2000) 13*/ static const value_string Instruction_indicator_for_general_action_vals[] = { - { 0, "Pass on information element"}, - { 1, "Discard information element"}, - { 2, "Discard BICC data"}, - { 3, "Release call"}, - { 0, NULL}}; + { 0, "Pass on information element"}, + { 1, "Discard information element"}, + { 2, "Discard BICC data"}, + { 3, "Release call"}, + { 0, NULL}}; static const value_string Instruction_indicator_for_pass_on_not_possible_vals[] = { - { 0, "Release call"}, - { 1, "Discard information element"}, - { 2, "Discard BICC data"}, - { 3, "reserved (interpreted as 00)"}, - { 0, NULL}}; + { 0, "Release call"}, + { 1, "Discard information element"}, + { 2, "Discard BICC data"}, + { 3, "reserved (interpreted as 00)"}, + { 0, NULL}}; static const value_string bat_ase_action_indicator_field_vals[] = { - { 0x00, "no indication"}, - { 0x01, "connect backward"}, - { 0x02, "connect forward"}, - { 0x03, "connect forward, no notification"}, - { 0x04, "connect forward, plus notification"}, - { 0x05, "connect forward, no notification + selected codec"}, - { 0x06, "connect forward, plus notification + selected codec"}, - { 0x07, "use idle"}, - { 0x08, "connected"}, - { 0x09, "switched"}, - { 0x0a, "selected codec"}, - { 0x0b, "modify codec"}, - { 0x0c, "successful codec modification"}, - { 0x0d, "codec modification failure"}, - { 0x0e, "mid-call codec negotiation"}, - { 0x0f, "modify to selected codec information"}, - { 0x10, "mid-call codec negotiation failure"}, - { 0x11, "start signal, notify"}, - { 0x12, "start signal, no notify"}, - { 0x13, "stop signal, notify"}, - { 0x14, "stop signal, no notify"}, - { 0x15, "start signal acknowledge"}, - { 0x16, "start signal reject"}, - { 0x17, "stop signal acknowledge"}, - { 0x18, "bearer redirect"}, - { 0, NULL } + { 0x00, "no indication"}, + { 0x01, "connect backward"}, + { 0x02, "connect forward"}, + { 0x03, "connect forward, no notification"}, + { 0x04, "connect forward, plus notification"}, + { 0x05, "connect forward, no notification + selected codec"}, + { 0x06, "connect forward, plus notification + selected codec"}, + { 0x07, "use idle"}, + { 0x08, "connected"}, + { 0x09, "switched"}, + { 0x0a, "selected codec"}, + { 0x0b, "modify codec"}, + { 0x0c, "successful codec modification"}, + { 0x0d, "codec modification failure"}, + { 0x0e, "mid-call codec negotiation"}, + { 0x0f, "modify to selected codec information"}, + { 0x10, "mid-call codec negotiation failure"}, + { 0x11, "start signal, notify"}, + { 0x12, "start signal, no notify"}, + { 0x13, "stop signal, notify"}, + { 0x14, "stop signal, no notify"}, + { 0x15, "start signal acknowledge"}, + { 0x16, "start signal reject"}, + { 0x17, "stop signal acknowledge"}, + { 0x18, "bearer redirect"}, + { 0, NULL } }; +static value_string_ext bat_ase_action_indicator_field_vals_ext = VALUE_STRING_EXT_INIT(bat_ase_action_indicator_field_vals); static const true_false_string BCTP_BVEI_value = { "Version Error Indication, BCTP version not supported", @@ -2729,10 +2749,10 @@ static const true_false_string BCTP_BVEI_value = { static const value_string BCTP_Tunnelled_Protocol_Indicator_vals[] = { - { 0x20, "IPBCP (text encoded)"}, - { 0x21, "spare (text encoded protocol)"}, - { 0x22, "not used"}, - { 0, NULL } + { 0x20, "IPBCP (text encoded)"}, + { 0x21, "spare (text encoded protocol)"}, + { 0x22, "not used"}, + { 0, NULL } }; static const true_false_string BCTP_TPEI_value = { @@ -2741,97 +2761,100 @@ static const true_false_string BCTP_TPEI_value = { }; -#define ITU_T 0x01 -#define ETSI 0x02 +#define ITU_T 0x01 +#define ETSI 0x02 static const value_string bat_ase_organization_identifier_subfield_vals[] = { - { 0x00, "no indication"}, - { 0x01, "ITU-T"}, - { 0x02, "ETSI (refer to TS 26.103)"}, - { 0, NULL } + { 0x00, "no indication"}, + { 0x01, "ITU-T"}, + { 0x02, "ETSI (refer to TS 26.103)"}, + { 0, NULL } }; -#define G_711_64_A 0x01 -#define G_711_64_U 0x02 -#define G_711_56_A 0x03 -#define G_711_56_U 0x04 -#define G_722_SB_ADPCM 0x05 -#define G_723_1 0x06 -#define G_723_1_Annex_A 0x07 -#define G_726_ADPCM 0x08 -#define G_727_Embedded_ADPCM 0x09 -#define G_728 0x0a -#define G_729_CS_ACELP 0x0b -#define G_729_Annex_B 0x0c +#define G_711_64_A 0x01 +#define G_711_64_U 0x02 +#define G_711_56_A 0x03 +#define G_711_56_U 0x04 +#define G_722_SB_ADPCM 0x05 +#define G_723_1 0x06 +#define G_723_1_Annex_A 0x07 +#define G_726_ADPCM 0x08 +#define G_727_Embedded_ADPCM 0x09 +#define G_728 0x0a +#define G_729_CS_ACELP 0x0b +#define G_729_Annex_B 0x0c static const value_string ITU_T_codec_type_subfield_vals[] = { - { 0x00, "no indication"}, - { G_711_64_A, "G.711 64 kbit/s A-law"}, - { G_711_64_U, "G.711 64 kbit/s -law"}, - { G_711_56_A, "G.711 56 kbit/s A-law"}, - { G_711_56_U, "G.711 56 kbit/s -law"}, - { G_722_SB_ADPCM, "G.722 (SB-ADPCM)"}, - { G_723_1, "G.723.1"}, - { G_723_1_Annex_A, "G.723.1 Annex A (silence suppression)"}, - { G_726_ADPCM, "G.726 (ADPCM)"}, - { G_727_Embedded_ADPCM, "G.727 (Embedded ADPCM)"}, - { G_728, "G.728"}, - { G_729_CS_ACELP, "G.729 (CS-ACELP)"}, - { G_729_Annex_B, "G.729 Annex B (silence suppression)"}, - { 0, NULL } + { 0x00, "no indication"}, + { G_711_64_A, "G.711 64 kbit/s A-law"}, + { G_711_64_U, "G.711 64 kbit/s -law"}, + { G_711_56_A, "G.711 56 kbit/s A-law"}, + { G_711_56_U, "G.711 56 kbit/s -law"}, + { G_722_SB_ADPCM, "G.722 (SB-ADPCM)"}, + { G_723_1, "G.723.1"}, + { G_723_1_Annex_A, "G.723.1 Annex A (silence suppression)"}, + { G_726_ADPCM, "G.726 (ADPCM)"}, + { G_727_Embedded_ADPCM, "G.727 (Embedded ADPCM)"}, + { G_728, "G.728"}, + { G_729_CS_ACELP, "G.729 (CS-ACELP)"}, + { G_729_Annex_B, "G.729 Annex B (silence suppression)"}, + { 0, NULL } }; +static value_string_ext ITU_T_codec_type_subfield_vals_ext = VALUE_STRING_EXT_INIT(ITU_T_codec_type_subfield_vals); static const value_string ETSI_codec_type_subfield_vals[] = { - { 0x00, "GSM Full Rate (13.0 kBit/s)( GSM FR )"}, - { 0x01, "GSM Half Rate (5.6 kBit/s) ( GSM HR )"}, - { 0x02, "GSM Enhanced Full Rate (12.2 kBit/s)( GSM EFR )"}, - { 0x03, "Full Rate Adaptive Multi-Rate ( FR AMR )"}, - { 0x04, "Half Rate Adaptive Multi-Rate ( HR AMR )"}, - { 0x05, "UMTS Adaptive Multi-Rate ( UMTS AMR )"}, - { 0x06, "UMTS Adaptive Multi-Rate 2 ( UMTS AMR 2 )"}, - { 0x07, "TDMA Enhanced Full Rate (7.4 kBit/s) ( TDMA EFR )"}, - { 0x08, "PDC Enhanced Full Rate (6.7 kBit/s) ( PDC EFR )"}, - { 0x09, "Full Rate Adaptive Multi-Rate WideBand ( FR AMR-WB )"}, - { 0x0a, "UMTS Adaptive Multi-Rate WideBand ( UMTS AMR-WB )"}, - { 0x0b, "8PSK Half Rate Adaptive Multi-Rate ( OHR AMR )"}, - { 0x0c, "8PSK Full Rate Adaptive Multi-Rate WideBand ( OFR AMR-WB )"}, - { 0x0d, "8PSK Half Rate Adaptive Multi-Rate WideBand ( OHR AMR-WB )"}, - { 0xfe, "Reserved for future use."}, - { 0xff, "Reserved for MuMe dummy Codec Type ( MuMe )"}, - { 0, NULL } + { 0x00, "GSM Full Rate (13.0 kBit/s)( GSM FR )"}, + { 0x01, "GSM Half Rate (5.6 kBit/s) ( GSM HR )"}, + { 0x02, "GSM Enhanced Full Rate (12.2 kBit/s)( GSM EFR )"}, + { 0x03, "Full Rate Adaptive Multi-Rate ( FR AMR )"}, + { 0x04, "Half Rate Adaptive Multi-Rate ( HR AMR )"}, + { 0x05, "UMTS Adaptive Multi-Rate ( UMTS AMR )"}, + { 0x06, "UMTS Adaptive Multi-Rate 2 ( UMTS AMR 2 )"}, + { 0x07, "TDMA Enhanced Full Rate (7.4 kBit/s) ( TDMA EFR )"}, + { 0x08, "PDC Enhanced Full Rate (6.7 kBit/s) ( PDC EFR )"}, + { 0x09, "Full Rate Adaptive Multi-Rate WideBand ( FR AMR-WB )"}, + { 0x0a, "UMTS Adaptive Multi-Rate WideBand ( UMTS AMR-WB )"}, + { 0x0b, "8PSK Half Rate Adaptive Multi-Rate ( OHR AMR )"}, + { 0x0c, "8PSK Full Rate Adaptive Multi-Rate WideBand ( OFR AMR-WB )"}, + { 0x0d, "8PSK Half Rate Adaptive Multi-Rate WideBand ( OHR AMR-WB )"}, + { 0xfe, "Reserved for future use."}, + { 0xff, "Reserved for MuMe dummy Codec Type ( MuMe )"}, + { 0, NULL } }; +static value_string_ext ETSI_codec_type_subfield_vals_ext = VALUE_STRING_EXT_INIT(ETSI_codec_type_subfield_vals); static const value_string bat_initial_codec_mode_vals[] = { - {0x7, "12.2 kbps"}, - {0x6, "10.2 kbps"}, - {0x5, "7.95 kbps"}, - {0x4, "7.40 kbps"}, - {0x3, "6.70 kbps"}, - {0x2, "5.90 kbps"}, - {0x1, "5.15 kbps"}, - {0x0, "4.75 kbps"}, - {0, NULL} + {0x7, "12.2 kbps"}, + {0x6, "10.2 kbps"}, + {0x5, "7.95 kbps"}, + {0x4, "7.40 kbps"}, + {0x3, "6.70 kbps"}, + {0x2, "5.90 kbps"}, + {0x1, "5.15 kbps"}, + {0x0, "4.75 kbps"}, + {0, NULL} }; static const value_string optimisation_mode_vals[] = { - { 0, "Optimisation of the ACS not supported,"}, - { 1, "Optimisation of the ACS supported,"}, - { 0, NULL } + { 0, "Optimisation of the ACS not supported,"}, + { 1, "Optimisation of the ACS supported,"}, + { 0, NULL } }; -const value_string bearer_network_connection_characteristics_vals[] = { +static const value_string bearer_network_connection_characteristics_vals[] = { - { 0x00, "no indication"}, - { 0x01, "AAL type 1"}, - { 0x02, "AAL type 2"}, - { 0x03, "Structured AAL type 1"}, - { 0x04, "IP/RTP"}, - { 0x05, "TDM (reserved for use by ITU-T Rec. Q.1950)"}, - { 0, NULL } + { 0x00, "no indication"}, + { 0x01, "AAL type 1"}, + { 0x02, "AAL type 2"}, + { 0x03, "Structured AAL type 1"}, + { 0x04, "IP/RTP"}, + { 0x05, "TDM (reserved for use by ITU-T Rec. Q.1950)"}, + { 0, NULL } }; +value_string_ext bearer_network_connection_characteristics_vals_ext = VALUE_STRING_EXT_INIT(bearer_network_connection_characteristics_vals); static const true_false_string Bearer_Control_Tunnelling_ind_value = { "Tunnelling to be used", @@ -2844,479 +2867,482 @@ static const true_false_string late_cut_trough_cap_ind_value = { }; /* ITU-T Rec. Q.765.5/Amd.1 (07/2001) */ static const value_string Bearer_Redirection_Indicator_vals[] = { - { 0x00, " no indication"}, - { 0x01, "late cut-through request"}, - { 0x02, "redirect temporary reject"}, - { 0x03, "redirect backwards request"}, - { 0x04, "redirect forwards request"}, - { 0x05, "redirect bearer release request"}, - { 0x06, "redirect bearer release proceed"}, - { 0x07, "redirect bearer release complete"}, - { 0x08, "redirect cut-through request"}, - { 0x09, "redirect bearer connected indication"}, - { 0x0a, "redirect failure"}, - { 0x0b, "new connection identifier"}, - { 0, NULL } + { 0x00, " no indication"}, + { 0x01, "late cut-through request"}, + { 0x02, "redirect temporary reject"}, + { 0x03, "redirect backwards request"}, + { 0x04, "redirect forwards request"}, + { 0x05, "redirect bearer release request"}, + { 0x06, "redirect bearer release proceed"}, + { 0x07, "redirect bearer release complete"}, + { 0x08, "redirect cut-through request"}, + { 0x09, "redirect bearer connected indication"}, + { 0x0a, "redirect failure"}, + { 0x0b, "new connection identifier"}, + { 0, NULL } }; +static value_string_ext Bearer_Redirection_Indicator_vals_ext = VALUE_STRING_EXT_INIT(Bearer_Redirection_Indicator_vals); /*26/Q.765.5 - Signal Type */ static const value_string BAt_ASE_Signal_Type_vals[] = { - { 0x00, "DTMF 0"}, - { 0x01, "DTMF 1"}, - { 0x02, "DTMF 2"}, - { 0x03, "DTMF 3"}, - { 0x04, "DTMF 4"}, - { 0x05, "DTMF 5"}, - { 0x06, "DTMF 6"}, - { 0x07, "DTMF 7"}, - { 0x08, "DTMF 8"}, - { 0x09, "DTMF 9"}, - { 0x0a, "DTMF *"}, - { 0x0b, "DTMF #"}, - { 0x0c, "DTMF A"}, - { 0x0d, "DTMF B"}, - { 0x0e, "DTMF C"}, - { 0x1f, "DTMF D"}, - { 0x40, "dial tone"}, - { 0x41, "PABX internal dial tone"}, - { 0x42, "special dial tone"}, - { 0x43, "second dial tone"}, - { 0x44, "ringing tone"}, - { 0x45, "special ringing tone"}, - { 0x46, "busy tone"}, - { 0x47, "congestion tone"}, - { 0x48, "special information tone"}, - { 0x49, "warning tone"}, - { 0x4a, "intrusion tone"}, - { 0x4b, "call waiting tone"}, - { 0x4c, "pay tone"}, - { 0x4d, "payphone recognition tone"}, - { 0x4e, "comfort tone"}, - { 0x4f, "tone on hold"}, - { 0x50, "record tone"}, - { 0x51, "Caller waiting tone"}, - { 0x52, "positive indication tone"}, - { 0x53, "negative indication tone"}, - { 0, NULL } + { 0x00, "DTMF 0"}, + { 0x01, "DTMF 1"}, + { 0x02, "DTMF 2"}, + { 0x03, "DTMF 3"}, + { 0x04, "DTMF 4"}, + { 0x05, "DTMF 5"}, + { 0x06, "DTMF 6"}, + { 0x07, "DTMF 7"}, + { 0x08, "DTMF 8"}, + { 0x09, "DTMF 9"}, + { 0x0a, "DTMF *"}, + { 0x0b, "DTMF #"}, + { 0x0c, "DTMF A"}, + { 0x0d, "DTMF B"}, + { 0x0e, "DTMF C"}, + { 0x1f, "DTMF D"}, + { 0x40, "dial tone"}, + { 0x41, "PABX internal dial tone"}, + { 0x42, "special dial tone"}, + { 0x43, "second dial tone"}, + { 0x44, "ringing tone"}, + { 0x45, "special ringing tone"}, + { 0x46, "busy tone"}, + { 0x47, "congestion tone"}, + { 0x48, "special information tone"}, + { 0x49, "warning tone"}, + { 0x4a, "intrusion tone"}, + { 0x4b, "call waiting tone"}, + { 0x4c, "pay tone"}, + { 0x4d, "payphone recognition tone"}, + { 0x4e, "comfort tone"}, + { 0x4f, "tone on hold"}, + { 0x50, "record tone"}, + { 0x51, "Caller waiting tone"}, + { 0x52, "positive indication tone"}, + { 0x53, "negative indication tone"}, + { 0, NULL } }; +static value_string_ext BAt_ASE_Signal_Type_vals_ext = VALUE_STRING_EXT_INIT(BAt_ASE_Signal_Type_vals); static const value_string BAT_ASE_Report_Reason_vals[] = { - { 0x00, "no indication"}, - { 0x01, "information element non-existent or not implemented"}, - { 0x02, "BICC data with unrecognized information element, discarded"}, - { 0, NULL } + { 0x00, "no indication"}, + { 0x01, "information element non-existent or not implemented"}, + { 0x02, "BICC data with unrecognized information element, discarded"}, + { 0, NULL } }; /* This routine should bve called with offset at Organization_Identifier not the lengh indicator * because of use from other disectors. */ extern int dissect_codec_mode(proto_tree *tree, tvbuff_t *tvb, int offset, int len) { - guint8 tempdata; - proto_tree *scs_item, *acs_item; - proto_tree *scs_tree, *acs_tree; - - - tempdata = tvb_get_guint8(tvb, offset); - proto_tree_add_uint(tree, hf_Organization_Identifier , tvb, offset, 1, tempdata ); - switch ( tempdata ){ - case ITU_T : - offset = offset + 1; - tempdata = tvb_get_guint8(tvb, offset); - proto_tree_add_uint(tree, hf_codec_type , tvb, offset, 1, tempdata ); - offset = offset + 1; - switch ( tempdata ) { - case G_711_64_A : - case G_711_64_U : - case G_711_56_A : - case G_711_56_U : - case G_722_SB_ADPCM : - case G_723_1 : - case G_723_1_Annex_A : - /* These codecs have no configuration data */ - break; - case G_726_ADPCM : - case G_727_Embedded_ADPCM : - /* four bit config data, TODO decode config */ - if ( len > 2 ) { - tempdata = tvb_get_guint8(tvb, offset); - proto_tree_add_text(tree, tvb, offset, 1, "Configuration data : 0x%x", tempdata); - offset = offset + 1; - } - break; - case G_728 : - case G_729_CS_ACELP : - case G_729_Annex_B : - /* three bit config data, TODO decode config */ - if ( len > 2 ) { - tempdata = tvb_get_guint8(tvb, offset); - proto_tree_add_text(tree, tvb, offset, 1 , "Configuration data : 0x%x", tempdata); - offset = offset + 1; - } - break; - default: - break; - - } - break; - case ETSI: - offset = offset + 1; - tempdata = tvb_get_guint8(tvb, offset); - proto_tree_add_uint(tree, hf_etsi_codec_type , tvb, offset, 1, tempdata ); - if ( len > 2 ) { - offset = offset + 1; - tempdata = tvb_get_guint8(tvb, offset); - - acs_item = proto_tree_add_item(tree, hf_active_code_set, tvb, offset, 1, TRUE); - acs_tree = proto_item_add_subtree(acs_item,ett_acs); - proto_tree_add_item(acs_tree, hf_active_code_set_12_2, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_10_2, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_7_95, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_7_40, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_6_70, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_5_90, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_5_15, tvb, offset, 1, TRUE); - proto_tree_add_item(acs_tree, hf_active_code_set_4_75, tvb, offset, 1, TRUE); - - } - if ( len > 3 ) { - offset = offset + 1; - tempdata = tvb_get_guint8(tvb, offset); - - scs_item = proto_tree_add_item(tree, hf_supported_code_set, tvb, offset, 1, TRUE); - scs_tree = proto_item_add_subtree(scs_item,ett_scs); - proto_tree_add_item(scs_tree, hf_supported_code_set_12_2, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_10_2, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_7_95, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_7_40, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_6_70, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_5_90, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_5_15, tvb, offset, 1, TRUE); - proto_tree_add_item(scs_tree, hf_supported_code_set_4_75, tvb, offset, 1, TRUE); - } - if ( len > 4 ) { - offset = offset + 1; - proto_tree_add_item(tree, hf_optimisation_mode, tvb, offset, 1, TRUE); - proto_tree_add_item(tree, hf_max_codec_modes, tvb, offset, 1, TRUE); - } - offset = offset + 1; - break; - default: - offset = offset + 1; - tempdata = tvb_get_guint8(tvb, offset); - proto_tree_add_text(tree, tvb, offset, len , - "Unknown organisation Identifier ( Non ITU-T/ETSI codec ) %u", tempdata); - offset = offset + len - 1; - break; - } - /* switch OID */ - - return offset; + guint8 tempdata; + proto_tree *scs_item, *acs_item; + proto_tree *scs_tree, *acs_tree; + + + tempdata = tvb_get_guint8(tvb, offset); + proto_tree_add_uint(tree, hf_Organization_Identifier , tvb, offset, 1, tempdata ); + switch ( tempdata ){ + case ITU_T : + offset = offset + 1; + tempdata = tvb_get_guint8(tvb, offset); + proto_tree_add_uint(tree, hf_codec_type , tvb, offset, 1, tempdata ); + offset = offset + 1; + switch ( tempdata ) { + case G_711_64_A : + case G_711_64_U : + case G_711_56_A : + case G_711_56_U : + case G_722_SB_ADPCM : + case G_723_1 : + case G_723_1_Annex_A : + /* These codecs have no configuration data */ + break; + case G_726_ADPCM : + case G_727_Embedded_ADPCM : + /* four bit config data, TODO decode config */ + if ( len > 2 ) { + tempdata = tvb_get_guint8(tvb, offset); + proto_tree_add_text(tree, tvb, offset, 1, "Configuration data : 0x%x", tempdata); + offset = offset + 1; + } + break; + case G_728 : + case G_729_CS_ACELP : + case G_729_Annex_B : + /* three bit config data, TODO decode config */ + if ( len > 2 ) { + tempdata = tvb_get_guint8(tvb, offset); + proto_tree_add_text(tree, tvb, offset, 1 , "Configuration data : 0x%x", tempdata); + offset = offset + 1; + } + break; + default: + break; + + } + break; + case ETSI: + offset = offset + 1; + tempdata = tvb_get_guint8(tvb, offset); + proto_tree_add_uint(tree, hf_etsi_codec_type , tvb, offset, 1, tempdata ); + if ( len > 2 ) { + offset = offset + 1; + tempdata = tvb_get_guint8(tvb, offset); + + acs_item = proto_tree_add_item(tree, hf_active_code_set, tvb, offset, 1, TRUE); + acs_tree = proto_item_add_subtree(acs_item,ett_acs); + proto_tree_add_item(acs_tree, hf_active_code_set_12_2, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_10_2, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_7_95, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_7_40, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_6_70, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_5_90, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_5_15, tvb, offset, 1, TRUE); + proto_tree_add_item(acs_tree, hf_active_code_set_4_75, tvb, offset, 1, TRUE); + + } + if ( len > 3 ) { + offset = offset + 1; + tempdata = tvb_get_guint8(tvb, offset); + + scs_item = proto_tree_add_item(tree, hf_supported_code_set, tvb, offset, 1, TRUE); + scs_tree = proto_item_add_subtree(scs_item,ett_scs); + proto_tree_add_item(scs_tree, hf_supported_code_set_12_2, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_10_2, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_7_95, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_7_40, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_6_70, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_5_90, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_5_15, tvb, offset, 1, TRUE); + proto_tree_add_item(scs_tree, hf_supported_code_set_4_75, tvb, offset, 1, TRUE); + } + if ( len > 4 ) { + offset = offset + 1; + proto_tree_add_item(tree, hf_optimisation_mode, tvb, offset, 1, TRUE); + proto_tree_add_item(tree, hf_max_codec_modes, tvb, offset, 1, TRUE); + } + offset = offset + 1; + break; + default: + offset = offset + 1; + tempdata = tvb_get_guint8(tvb, offset); + proto_tree_add_text(tree, tvb, offset, len , + "Unknown organisation Identifier ( Non ITU-T/ETSI codec ) %u", tempdata); + offset = offset + len - 1; + break; + } + /* switch OID */ + + return offset; } static int dissect_codec(tvbuff_t *parameter_tvb, proto_tree *bat_ase_element_tree, gint length_indicator, gint offset,gint identifier) { /* offset is at length indicator e.g 1 step past identifier */ -guint8 compatibility_info; - - proto_tree_add_uint(bat_ase_element_tree , hf_bat_ase_identifier , parameter_tvb, offset - 1, 1, identifier ); - proto_tree_add_uint(bat_ase_element_tree , hf_length_indicator , parameter_tvb, offset, 1, length_indicator ); - offset = offset + 1; - compatibility_info = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_Instruction_ind_for_general_action , parameter_tvb, offset, 1, compatibility_info ); - proto_tree_add_boolean(bat_ase_element_tree, hf_Send_notification_ind_for_general_action , parameter_tvb, offset, 1, compatibility_info ); - proto_tree_add_uint(bat_ase_element_tree, hf_Instruction_ind_for_pass_on_not_possible , parameter_tvb, offset, 1, compatibility_info ); - proto_tree_add_boolean(bat_ase_element_tree, hf_Send_notification_ind_for_pass_on_not_possible , parameter_tvb, offset, 1, compatibility_info ); - proto_tree_add_boolean(bat_ase_element_tree, hf_isup_extension_ind , parameter_tvb, offset, 1, compatibility_info ); - - offset = dissect_codec_mode(bat_ase_element_tree, parameter_tvb, offset+1,length_indicator-1); -return offset; + guint8 compatibility_info; + + proto_tree_add_uint(bat_ase_element_tree , hf_bat_ase_identifier , parameter_tvb, offset - 1, 1, identifier ); + proto_tree_add_uint(bat_ase_element_tree , hf_length_indicator , parameter_tvb, offset, 1, length_indicator ); + offset = offset + 1; + compatibility_info = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_Instruction_ind_for_general_action , parameter_tvb, offset, 1, compatibility_info ); + proto_tree_add_boolean(bat_ase_element_tree, hf_Send_notification_ind_for_general_action , parameter_tvb, offset, 1, compatibility_info ); + proto_tree_add_uint(bat_ase_element_tree, hf_Instruction_ind_for_pass_on_not_possible , parameter_tvb, offset, 1, compatibility_info ); + proto_tree_add_boolean(bat_ase_element_tree, hf_Send_notification_ind_for_pass_on_not_possible , parameter_tvb, offset, 1, compatibility_info ); + proto_tree_add_boolean(bat_ase_element_tree, hf_isup_extension_ind , parameter_tvb, offset, 1, compatibility_info ); + + offset = dissect_codec_mode(bat_ase_element_tree, parameter_tvb, offset+1,length_indicator-1); + return offset; } /* Dissect BAT ASE message according to Q.765.5 200006 and Amendment 1 200107 - * Layout of message Length Octet - * Element name - * Identifier 1 1 - * Length indicator 1 2 - * Compatibility information 1 3 - * Contents 1 4 - * Identifier n m - * Length indicator n - * Compatibility information n - * Contents n p + * Layout of message Length Octet + * Element name + * Identifier 1 1 + * Length indicator 1 2 + * Compatibility information 1 3 + * Contents 1 4 + * Identifier n m + * Length indicator n + * Compatibility information n + * Contents n p */ static void dissect_bat_ase_Encapsulated_Application_Information(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *parameter_tree, gint offset) { - gint length = tvb_reported_length_remaining(parameter_tvb, offset), list_end; - tvbuff_t *next_tvb; - proto_tree *bat_ase_tree, *bat_ase_element_tree, *bat_ase_iwfa_tree; - proto_item *bat_ase_item, *bat_ase_element_item, *bat_ase_iwfa_item; - guint8 identifier,content, BCTP_Indicator_field_1, BCTP_Indicator_field_2; - guint8 tempdata, element_no, number_of_indicators; - guint16 sdp_length; - guint8 diagnostic_len; - guint8 length_ind_len; - guint tempdata16; - guint content_len, length_indicator; - guint duration; - guint diagnostic; - guint32 bncid, Local_BCU_ID; - element_no = 0; - - bat_ase_item = proto_tree_add_text(parameter_tree,parameter_tvb, offset, -1, - "Bearer Association Transport (BAT) Application Service Element (ASE) Encapsulated Application Information:"); - bat_ase_tree = proto_item_add_subtree(bat_ase_item , ett_bat_ase); - - proto_tree_add_text(bat_ase_tree, parameter_tvb, offset, -1, - "BAT ASE Encapsulated Application Information, (%u byte%s length)", length, plurality(length, "", "s")); - while(tvb_reported_length_remaining(parameter_tvb, offset) > 0){ - element_no = element_no + 1; - identifier = tvb_get_guint8(parameter_tvb, offset); - - /* length indicator may be 11 bits long */ - offset = offset + 1; - proto_tree_add_item( bat_ase_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); - tempdata = tvb_get_guint8(parameter_tvb, offset); - if ( tempdata & 0x80 ) { - length_indicator = tempdata & 0x7f; - length_ind_len = 1; - } - else { - offset = offset + 1; - tempdata16 = ( tempdata & 0x7f ); - length_indicator = tvb_get_guint8(parameter_tvb, offset)& 0x0f; - length_indicator = length_indicator << 7; - length_indicator = length_indicator + tempdata16; - length_ind_len = 2; - } - - bat_ase_element_item = proto_tree_add_text(bat_ase_tree,parameter_tvb, - ( offset - length_ind_len),(length_indicator + 2),"BAT ASE Element %u, Identifier: %s",element_no, - val_to_str(identifier,bat_ase_list_of_Identifiers_vals,"unknown (%u)")); - bat_ase_element_tree = proto_item_add_subtree(bat_ase_element_item , - ett_bat_ase_element); - if ( identifier != CODEC ) { - /* identifier, length indicator and compabillity info must be printed inside CODEC */ - /* dissection in order to use dissect_codec routine for codec list */ - proto_tree_add_uint(bat_ase_element_tree , hf_bat_ase_identifier , parameter_tvb, - offset - length_ind_len, 1, identifier ); - proto_tree_add_uint(bat_ase_element_tree , hf_length_indicator , parameter_tvb, - offset - length_ind_len + 1, length_ind_len, length_indicator ); - - offset = offset + 1; - proto_tree_add_item( bat_ase_element_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( bat_ase_element_tree, hf_Send_notification_ind_for_pass_on_not_possible, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( bat_ase_element_tree, hf_Instruction_ind_for_pass_on_not_possible, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( bat_ase_element_tree, hf_Send_notification_ind_for_general_action, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( bat_ase_element_tree, hf_Instruction_ind_for_general_action, parameter_tvb, offset, 1, FALSE ); - offset = offset + 1; - } - content_len = length_indicator - 1 ; /* exclude the treated Compatibility information */ - - /* content will be different depending on identifier */ - switch ( identifier ){ - - case ACTION_INDICATOR : - - content = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_Action_Indicator , parameter_tvb, offset, 1, content ); - proto_item_append_text(bat_ase_element_item, " - %s", - val_to_str(content,bat_ase_action_indicator_field_vals, "unknown (%u)")); - offset = offset + 1; - break; - case BACKBONE_NETWORK_CONNECTION_IDENTIFIER : - - bncid = tvb_get_ntohl(parameter_tvb, offset); - switch ( content_len ){ - case 1: - bncid = bncid & 0x000000ff; - break; - case 2: - bncid = bncid & 0x0000ffff; - break; - case 3: - bncid = bncid & 0x00ffffff; - break; - case 4:; - default:; - } - proto_tree_add_uint_format(bat_ase_element_tree, hf_bncid, parameter_tvb, offset, content_len, bncid, "BNCId: 0x%08x", bncid); - proto_item_append_text(bat_ase_element_item, " - 0x%08x",bncid); - offset = offset + content_len; - - break; - case INTERWORKING_FUNCTION_ADDRESS : - bat_ase_iwfa_item = proto_tree_add_item(bat_ase_element_tree, hf_bat_ase_biwfa, parameter_tvb, offset, content_len, - FALSE); - bat_ase_iwfa_tree = proto_item_add_subtree(bat_ase_iwfa_item , ett_bat_ase_iwfa); - dissect_nsap(parameter_tvb, offset, content_len, bat_ase_iwfa_tree); - - offset = offset + content_len; - break; - case CODEC_LIST : - list_end = offset + content_len; - while ( offset < ( list_end - 1 )) { - identifier = tvb_get_guint8(parameter_tvb, offset); - offset = offset + 1; - tempdata = tvb_get_guint8(parameter_tvb, offset); - if ( tempdata & 0x80 ) { - length_indicator = tempdata & 0x7f; - } - else { - offset = offset +1; - length_indicator = tvb_get_guint8(parameter_tvb, offset); - length_indicator = length_indicator << 7; - length_indicator = length_indicator & ( tempdata & 0x7f ); - } - offset = dissect_codec(parameter_tvb, bat_ase_element_tree, length_indicator , offset, identifier); - } - break; - case CODEC : - /* offset is at length indicator in this case */ - offset = dissect_codec(parameter_tvb, bat_ase_element_tree, length_indicator , offset, identifier); - break;/* case codec */ - case BAT_COMPATIBILITY_REPORT : - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_BAT_ASE_Comp_Report_Reason, parameter_tvb, offset, 1, tempdata ); - offset = offset + 1; - - diagnostic_len = content_len - 1; - while ( diagnostic_len > 0 ) { - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_BAT_ASE_Comp_Report_ident, parameter_tvb, offset, 1, tempdata ); - offset = offset + 1; - diagnostic = tvb_get_letohs(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_BAT_ASE_Comp_Report_diagnostic, parameter_tvb, offset, 2, diagnostic); - offset = offset + 2; - diagnostic_len = diagnostic_len - 3; - } - break; - case BEARER_NETWORK_CONNECTION_CHARACTERISTICS : - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_characteristics , parameter_tvb, - offset, 1, tempdata ); - proto_item_append_text(bat_ase_element_item, " - %s", - val_to_str(tempdata,bearer_network_connection_characteristics_vals, "unknown (%u)")); - - offset = offset + content_len; - break; + gint length = tvb_reported_length_remaining(parameter_tvb, offset), list_end; + tvbuff_t *next_tvb; + proto_tree *bat_ase_tree, *bat_ase_element_tree, *bat_ase_iwfa_tree; + proto_item *bat_ase_item, *bat_ase_element_item, *bat_ase_iwfa_item; + guint8 identifier,content, BCTP_Indicator_field_1, BCTP_Indicator_field_2; + guint8 tempdata, element_no, number_of_indicators; + guint16 sdp_length; + guint8 diagnostic_len; + guint8 length_ind_len; + guint tempdata16; + guint content_len, length_indicator; + guint duration; + guint diagnostic; + guint32 bncid, Local_BCU_ID; + + element_no = 0; + + bat_ase_item = proto_tree_add_text(parameter_tree,parameter_tvb, offset, -1, + "Bearer Association Transport (BAT) Application Service Element (ASE) Encapsulated Application Information:"); + bat_ase_tree = proto_item_add_subtree(bat_ase_item , ett_bat_ase); + + proto_tree_add_text(bat_ase_tree, parameter_tvb, offset, -1, + "BAT ASE Encapsulated Application Information, (%u byte%s length)", length, plurality(length, "", "s")); + while(tvb_reported_length_remaining(parameter_tvb, offset) > 0){ + element_no = element_no + 1; + identifier = tvb_get_guint8(parameter_tvb, offset); + + /* length indicator may be 11 bits long */ + offset = offset + 1; + proto_tree_add_item( bat_ase_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); + tempdata = tvb_get_guint8(parameter_tvb, offset); + if ( tempdata & 0x80 ) { + length_indicator = tempdata & 0x7f; + length_ind_len = 1; + } + else { + offset = offset + 1; + tempdata16 = ( tempdata & 0x7f ); + length_indicator = tvb_get_guint8(parameter_tvb, offset)& 0x0f; + length_indicator = length_indicator << 7; + length_indicator = length_indicator + tempdata16; + length_ind_len = 2; + } + + bat_ase_element_item = proto_tree_add_text(bat_ase_tree,parameter_tvb, + ( offset - length_ind_len),(length_indicator + 2),"BAT ASE Element %u, Identifier: %s",element_no, + val_to_str_ext(identifier,&bat_ase_list_of_Identifiers_vals_ext,"unknown (%u)")); + bat_ase_element_tree = proto_item_add_subtree(bat_ase_element_item , + ett_bat_ase_element); + if ( identifier != CODEC ) { + /* identifier, length indicator and compabillity info must be printed inside CODEC */ + /* dissection in order to use dissect_codec routine for codec list */ + proto_tree_add_uint(bat_ase_element_tree , hf_bat_ase_identifier , parameter_tvb, + offset - length_ind_len, 1, identifier ); + proto_tree_add_uint(bat_ase_element_tree , hf_length_indicator , parameter_tvb, + offset - length_ind_len + 1, length_ind_len, length_indicator ); + + offset = offset + 1; + proto_tree_add_item( bat_ase_element_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( bat_ase_element_tree, hf_Send_notification_ind_for_pass_on_not_possible, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( bat_ase_element_tree, hf_Instruction_ind_for_pass_on_not_possible, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( bat_ase_element_tree, hf_Send_notification_ind_for_general_action, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( bat_ase_element_tree, hf_Instruction_ind_for_general_action, parameter_tvb, offset, 1, FALSE ); + offset = offset + 1; + } + content_len = length_indicator - 1 ; /* exclude the treated Compatibility information */ + + /* content will be different depending on identifier */ + switch ( identifier ){ + + case ACTION_INDICATOR : + + content = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_Action_Indicator , parameter_tvb, offset, 1, content ); + proto_item_append_text(bat_ase_element_item, " - %s", + val_to_str_ext(content,&bat_ase_action_indicator_field_vals_ext, "unknown (%u)")); + offset = offset + 1; + break; + case BACKBONE_NETWORK_CONNECTION_IDENTIFIER : + + bncid = tvb_get_ntohl(parameter_tvb, offset); + switch ( content_len ){ + case 1: + bncid = bncid & 0x000000ff; + break; + case 2: + bncid = bncid & 0x0000ffff; + break; + case 3: + bncid = bncid & 0x00ffffff; + break; + case 4:; + default:; + } + proto_tree_add_uint_format(bat_ase_element_tree, hf_bncid, parameter_tvb, offset, content_len, bncid, "BNCId: 0x%08x", bncid); + proto_item_append_text(bat_ase_element_item, " - 0x%08x",bncid); + offset = offset + content_len; + + break; + case INTERWORKING_FUNCTION_ADDRESS : + bat_ase_iwfa_item = proto_tree_add_item(bat_ase_element_tree, hf_bat_ase_biwfa, parameter_tvb, offset, content_len, + FALSE); + bat_ase_iwfa_tree = proto_item_add_subtree(bat_ase_iwfa_item , ett_bat_ase_iwfa); + dissect_nsap(parameter_tvb, offset, content_len, bat_ase_iwfa_tree); + + offset = offset + content_len; + break; + case CODEC_LIST : + list_end = offset + content_len; + while ( offset < ( list_end - 1 )) { + identifier = tvb_get_guint8(parameter_tvb, offset); + offset = offset + 1; + tempdata = tvb_get_guint8(parameter_tvb, offset); + if ( tempdata & 0x80 ) { + length_indicator = tempdata & 0x7f; + } + else { + offset = offset +1; + length_indicator = tvb_get_guint8(parameter_tvb, offset); + length_indicator = length_indicator << 7; + length_indicator = length_indicator & ( tempdata & 0x7f ); + } + offset = dissect_codec(parameter_tvb, bat_ase_element_tree, length_indicator , offset, identifier); + } + break; + case CODEC : + /* offset is at length indicator in this case */ + offset = dissect_codec(parameter_tvb, bat_ase_element_tree, length_indicator , offset, identifier); + break;/* case codec */ + case BAT_COMPATIBILITY_REPORT : + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_BAT_ASE_Comp_Report_Reason, parameter_tvb, offset, 1, tempdata ); + offset = offset + 1; + + diagnostic_len = content_len - 1; + while ( diagnostic_len > 0 ) { + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_BAT_ASE_Comp_Report_ident, parameter_tvb, offset, 1, tempdata ); + offset = offset + 1; + diagnostic = tvb_get_letohs(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_BAT_ASE_Comp_Report_diagnostic, parameter_tvb, offset, 2, diagnostic); + offset = offset + 2; + diagnostic_len = diagnostic_len - 3; + } + break; + case BEARER_NETWORK_CONNECTION_CHARACTERISTICS : + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_characteristics , parameter_tvb, + offset, 1, tempdata ); + proto_item_append_text(bat_ase_element_item, " - %s", + val_to_str_ext(tempdata,&bearer_network_connection_characteristics_vals_ext, "unknown (%u)")); + + offset = offset + content_len; + break; /* The Bearer Control Information information element contains the bearer control tunnelling protocol */ /* ITU-T Q.1990 (2001), BICC bearer control tunnelling protocol. */ - case BEARER_CONTROL_INFORMATION : - BCTP_Indicator_field_1 = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_BCTP_Version_Indicator, - parameter_tvb, offset, 1, BCTP_Indicator_field_1 ); + case BEARER_CONTROL_INFORMATION : + BCTP_Indicator_field_1 = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_BCTP_Version_Indicator, + parameter_tvb, offset, 1, BCTP_Indicator_field_1 ); - proto_tree_add_boolean(bat_ase_element_tree, hf_BVEI, - parameter_tvb, offset, 1, BCTP_Indicator_field_1 ); - offset = offset + 1; + proto_tree_add_boolean(bat_ase_element_tree, hf_BVEI, + parameter_tvb, offset, 1, BCTP_Indicator_field_1 ); + offset = offset + 1; - BCTP_Indicator_field_2 = tvb_get_guint8(parameter_tvb, offset); + BCTP_Indicator_field_2 = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_Tunnelled_Protocol_Indicator , - parameter_tvb, offset, 1, BCTP_Indicator_field_2 ); + proto_tree_add_uint(bat_ase_element_tree, hf_Tunnelled_Protocol_Indicator , + parameter_tvb, offset, 1, BCTP_Indicator_field_2 ); - proto_tree_add_boolean(bat_ase_element_tree, hf_TPEI, - parameter_tvb, offset, 1, BCTP_Indicator_field_2 ); - offset = offset + 1; + proto_tree_add_boolean(bat_ase_element_tree, hf_TPEI, + parameter_tvb, offset, 1, BCTP_Indicator_field_2 ); + offset = offset + 1; - sdp_length = ( length_indicator ) - 3; + sdp_length = ( length_indicator ) - 3; - if(sdp_length > tvb_length_remaining(parameter_tvb,offset)){ - /* If this is a segmented message we may not have all the data */ - next_tvb = tvb_new_subset_remaining(parameter_tvb, offset); - }else{ - next_tvb = tvb_new_subset(parameter_tvb, offset, sdp_length, sdp_length); - } - call_dissector(sdp_handle, next_tvb, pinfo, bat_ase_element_tree); - offset = offset + sdp_length; + if(sdp_length > tvb_length_remaining(parameter_tvb,offset)){ + /* If this is a segmented message we may not have all the data */ + next_tvb = tvb_new_subset_remaining(parameter_tvb, offset); + }else{ + next_tvb = tvb_new_subset(parameter_tvb, offset, sdp_length, sdp_length); + } + call_dissector(sdp_handle, next_tvb, pinfo, bat_ase_element_tree); + offset = offset + sdp_length; - break; - case BEARER_CONTROL_TUNNELLING : + break; + case BEARER_CONTROL_TUNNELLING : - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_boolean(bat_ase_element_tree, hf_bearer_control_tunneling , parameter_tvb, offset, 1, ( tempdata & 0x01 ) ); - if ( tempdata & 0x01 ) - proto_item_append_text(bat_ase_element_item, " - Tunnelling to be used "); + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_boolean(bat_ase_element_tree, hf_bearer_control_tunneling , parameter_tvb, offset, 1, ( tempdata & 0x01 ) ); + if ( tempdata & 0x01 ) + proto_item_append_text(bat_ase_element_item, " - Tunnelling to be used "); - offset = offset + content_len; - break; - case BEARER_CONTROL_UNIT_IDENTIFIER : - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_text(bat_ase_element_tree, parameter_tvb, offset, 1, "Network ID Length indicator = %u",tempdata); - offset = offset + 1; - if ( tempdata > 0 ) { + offset = offset + content_len; + break; + case BEARER_CONTROL_UNIT_IDENTIFIER : + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_text(bat_ase_element_tree, parameter_tvb, offset, 1, "Network ID Length indicator = %u",tempdata); + offset = offset + 1; + if ( tempdata > 0 ) { /* Q.765.5 amd 1 - Network ID - The coding of the Network ID field is identical to the coding of the Network ID field in the - Global Call Reference parameter as specified in clause 6/Q.1902.3 (see [3]). - NOTE .When used inside a network domain, the Network ID may be omitted by setting the - Network ID Length indicator to the value "0". - Q.1902.3 - The following codes are used in the subfields of the global call reference parameter field: - a) Network ID - The Network ID contains the value field (coded according to ASN.1 BER) of an object - identifier identifying the network. This means that the tag and length fields are omitted. - An example of such an object identifier can be the following: - .{itu-t (0) administration (2) national regulatory authority (x) network (y)} - The value for x is the value of the national regulatory authority (one of the Data Country - Codes associated to the country as specified in ITU-T X.121 shall be used for "national - regulatory authority"), the value for y is under the control of the national regulatory - authority concerned. - b) Node ID - A binary number that uniquely identifies within the network the node which generates the - call reference. - c) Call Reference ID - A binary number used for the call reference of the call. This is generated by the node for - each call. + Network ID + The coding of the Network ID field is identical to the coding of the Network ID field in the + Global Call Reference parameter as specified in clause 6/Q.1902.3 (see [3]). + NOTE .When used inside a network domain, the Network ID may be omitted by setting the + Network ID Length indicator to the value "0". + Q.1902.3 + The following codes are used in the subfields of the global call reference parameter field: + a) Network ID + The Network ID contains the value field (coded according to ASN.1 BER) of an object + identifier identifying the network. This means that the tag and length fields are omitted. + An example of such an object identifier can be the following: + .{itu-t (0) administration (2) national regulatory authority (x) network (y)} + The value for x is the value of the national regulatory authority (one of the Data Country + Codes associated to the country as specified in ITU-T X.121 shall be used for "national + regulatory authority"), the value for y is under the control of the national regulatory + authority concerned. + b) Node ID + A binary number that uniquely identifies within the network the node which generates the + call reference. + c) Call Reference ID + A binary number used for the call reference of the call. This is generated by the node for + each call. */ - proto_tree_add_text(bat_ase_element_tree, parameter_tvb, offset, tempdata , "Network ID: %s", - tvb_bytes_to_str(parameter_tvb, offset, tempdata)); - offset = offset + tempdata; - } /* end if */ - - Local_BCU_ID = tvb_get_letohl(parameter_tvb, offset); - proto_tree_add_uint_format(bat_ase_element_tree, hf_Local_BCU_ID , parameter_tvb, offset, 4, Local_BCU_ID , "Local BCU ID : 0x%08x", Local_BCU_ID ); - offset = offset + 4; - break; - case SIGNAL : - /* As type is Constructor new elements follow, return to main loop */ - break; - case BEARER_REDIRECTION_CAPABILITY : - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_boolean(bat_ase_element_tree, hf_late_cut_trough_cap_ind , parameter_tvb, offset, 1, tempdata ); - offset = offset + content_len; - break; - case BEARER_REDIRECTION_INDICATORS : - number_of_indicators = 0; - while ( number_of_indicators < content_len ) { - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_bat_ase_bearer_redir_ind , parameter_tvb, offset, 1, tempdata ); - offset = offset + 1; - number_of_indicators = number_of_indicators + 1; - } - break; - case SIGNAL_TYPE : - tempdata = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_bat_ase_signal , parameter_tvb, offset, 1, tempdata ); - offset = offset + content_len; - break; - case DURATION : - duration = tvb_get_letohs(parameter_tvb, offset); - proto_tree_add_uint(bat_ase_element_tree, hf_bat_ase_duration , parameter_tvb, offset, 2, duration ); - offset = offset + content_len; - break; - default : - proto_tree_add_text(bat_ase_element_tree, parameter_tvb, offset,content_len , "Default ?, (%u byte%s length)", (content_len), plurality(content_len, "", "s")); - offset = offset + content_len; - } - } + proto_tree_add_text(bat_ase_element_tree, parameter_tvb, offset, tempdata , "Network ID: %s", + tvb_bytes_to_str(parameter_tvb, offset, tempdata)); + offset = offset + tempdata; + } /* end if */ + + Local_BCU_ID = tvb_get_letohl(parameter_tvb, offset); + proto_tree_add_uint_format(bat_ase_element_tree, hf_Local_BCU_ID , parameter_tvb, offset, 4, Local_BCU_ID , "Local BCU ID : 0x%08x", Local_BCU_ID ); + offset = offset + 4; + break; + case SIGNAL : + /* As type is Constructor new elements follow, return to main loop */ + break; + case BEARER_REDIRECTION_CAPABILITY : + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_boolean(bat_ase_element_tree, hf_late_cut_trough_cap_ind , parameter_tvb, offset, 1, tempdata ); + offset = offset + content_len; + break; + case BEARER_REDIRECTION_INDICATORS : + number_of_indicators = 0; + while ( number_of_indicators < content_len ) { + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_bat_ase_bearer_redir_ind , parameter_tvb, offset, 1, tempdata ); + offset = offset + 1; + number_of_indicators = number_of_indicators + 1; + } + break; + case SIGNAL_TYPE : + tempdata = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_bat_ase_signal , parameter_tvb, offset, 1, tempdata ); + offset = offset + content_len; + break; + case DURATION : + duration = tvb_get_letohs(parameter_tvb, offset); + proto_tree_add_uint(bat_ase_element_tree, hf_bat_ase_duration , parameter_tvb, offset, 2, duration ); + offset = offset + content_len; + break; + default : + proto_tree_add_text(bat_ase_element_tree, parameter_tvb, offset,content_len , "Default ?, (%u byte%s length)", (content_len), plurality(content_len, "", "s")); + offset = offset + content_len; + } + } } @@ -3324,187 +3350,187 @@ dissect_bat_ase_Encapsulated_Application_Information(tvbuff_t *parameter_tvb, pa /* Octet - ------------------------------------------- -1 | ext. Application context identifier lsb - ------------------------------------------- -1a | ext. msb - ------------------------------------------- -2 | ext. spare SNI RCI - ------------------------------------------- -3 | ext. SI APM segmentation indicator - ------------------------------------------- -3a | ext. Segmentation local reference - ------------------------------------------- -4a | -: | APM-user information -4n | - +------------------------------------------- - - Figure 77/Q.763 . Application transport parameter field - */ + ------------------------------------------- +1 | ext. Application context identifier lsb + ------------------------------------------- +1a | ext. msb + ------------------------------------------- +2 | ext. spare SNI RCI + ------------------------------------------- +3 | ext. SI APM segmentation indicator + ------------------------------------------- +3a | ext. Segmentation local reference + ------------------------------------------- +4a | +: | APM-user information +4n | + +------------------------------------------- + + Figure 77/Q.763 . Application transport parameter field +*/ static void dissect_isup_application_transport_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo, proto_tree *parameter_tree, proto_item *parameter_item) { - guint8 application_transport_instruction_ind; - guint8 si_and_apm_seg_ind; - guint8 apm_Segmentation_local_ref = 0; - guint16 aci16; - gint offset = 0; - guint8 octet; - guint length = tvb_reported_length(parameter_tvb); - - gboolean more_frag; - gboolean save_fragmented; - tvbuff_t* new_tvb = NULL; - tvbuff_t* next_tvb = NULL; - fragment_data *frag_msg = NULL; - - proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, "Application transport parameter fields:"); - proto_item_set_text(parameter_item, "Application transport, (%u byte%s length)", length , plurality(length, "", "s")); - aci16 = tvb_get_guint8(parameter_tvb, offset); - - if ( (aci16 & H_8BIT_MASK) == 0x80) { - /* Octet 1 */ - aci16 = aci16 & 0x7f; - proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_uint(parameter_tree, hf_isup_app_cont_ident , parameter_tvb, offset, 1, aci16); - offset = offset + 1; - } - /* Octet 1a */ - else { - aci16 = (aci16<<8) | (tvb_get_guint8(parameter_tvb, offset) & 0x7f); - proto_tree_add_uint(parameter_tree, hf_isup_app_cont_ident , parameter_tvb, offset, 2, aci16); - offset = offset + 2; - } - - /* Octet 2 */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, "Application transport instruction indicators: "); - application_transport_instruction_ind = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_app_Send_notification_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_app_Release_call_ind, parameter_tvb, offset, 1, FALSE ); - offset = offset + 1; - - /* Octet 3*/ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, "APM segmentation indicator:"); - si_and_apm_seg_ind = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_apm_si_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_apm_segmentation_ind, parameter_tvb, offset, 1, FALSE ); - offset = offset + 1; - - /* Octet 3a */ - if ( (si_and_apm_seg_ind & H_8BIT_MASK) == 0x00) { - apm_Segmentation_local_ref = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_apm_slr, parameter_tvb, offset, 1, FALSE ); - offset = offset + 1; - } - /* For APM'98'-user applications. ( aci 0 - 3 ), APM-user information field starts at octet 4 */ - if (aci16 > 3) { - /* Octet 4 Originating Address length */ - octet = tvb_get_guint8(parameter_tvb,offset); - proto_tree_add_item( parameter_tree, hf_isup_orig_addr_len, parameter_tvb, offset, 1, FALSE ); - offset++; - if ( octet != 0){ - /* 4b */ - proto_tree_add_item( parameter_tree, hf_isup_odd_even_indicator, parameter_tvb, offset, 1, FALSE ); - /* nature of address indicator */ - offset++; - proto_tree_add_item( parameter_tree, hf_isup_inn_indicator, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_numbering_plan_indicator, parameter_tvb, offset, 1, FALSE ); - offset++; - /* Address digits */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, octet - 2, "Address digits"); - offset = offset + octet - 2; - } - /* Octet 5 Destination Address length */ - octet = tvb_get_guint8(parameter_tvb,offset); - proto_tree_add_item( parameter_tree, hf_isup_dest_addr_len, parameter_tvb, offset, 1, FALSE ); - offset++; - if ( octet != 0){ - /* 4b */ - proto_tree_add_item( parameter_tree, hf_isup_odd_even_indicator, parameter_tvb, offset, 1, FALSE ); - /* nature of address indicator */ - offset++; - proto_tree_add_item( parameter_tree, hf_isup_inn_indicator, parameter_tvb, offset, 1, FALSE ); - proto_tree_add_item( parameter_tree, hf_isup_numbering_plan_indicator, parameter_tvb, offset, 1, FALSE ); - offset++; - /* Address digits */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, octet - 2, "Address digits"); - offset = offset + octet - 2; - } - } - /* - * Defragment ? - * - */ - if (isup_apm_desegment){ - if ((si_and_apm_seg_ind != 0xc0) && ((si_and_apm_seg_ind & H_8BIT_MASK)!=0x80)){ - /* debug g_warning("got here Frame %u",pinfo->fd->num); */ - /* Segmented message */ - save_fragmented = pinfo->fragmented; - pinfo->fragmented = TRUE; - more_frag = TRUE; - if ((si_and_apm_seg_ind == 0)) - more_frag = FALSE; - - frag_msg = fragment_add_seq_next(parameter_tvb, offset, pinfo, - (apm_Segmentation_local_ref & 0x7f), /* ID for fragments belonging together */ - isup_apm_msg_fragment_table, /* list of message fragments */ - isup_apm_msg_reassembled_table, /* list of reassembled messages */ - tvb_length_remaining(parameter_tvb, offset), /* fragment length - to the end */ - more_frag); /* More fragments? */ - - if ((si_and_apm_seg_ind & 0x3f) !=0 && (si_and_apm_seg_ind &0x40) !=0){ - /* First fragment set number of fragments */ - fragment_set_tot_len(pinfo, apm_Segmentation_local_ref & 0x7f, isup_apm_msg_fragment_table, (si_and_apm_seg_ind & 0x3f)); - } - - new_tvb = process_reassembled_data(parameter_tvb, offset, pinfo, - "Reassembled ISUP", frag_msg, &isup_apm_msg_frag_items, - NULL, parameter_tree); - - if (frag_msg) { /* Reassembled */ - col_append_str(pinfo->cinfo, COL_INFO, - " (Message Reassembled)"); - } else { /* Not last packet of reassembled Short Message */ - col_append_str(pinfo->cinfo, COL_INFO, - " (Message fragment )"); - } - - pinfo->fragmented = save_fragmented; - } - }/*isup_apm_desegment*/ - - if ( offset == (gint)length){ - /* No data */ - proto_tree_add_text(parameter_tree, parameter_tvb, offset, 0, "Empty APM-user information field" ); - return; - } - if (new_tvb) { /* take it all */ - next_tvb = new_tvb; - } else { /* make a new subset */ - next_tvb = tvb_new_subset_remaining(parameter_tvb, offset); - } - - proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, - "APM-user information field (%u Bytes)",tvb_length_remaining(parameter_tvb, offset)); - - switch(aci16 & 0x7fff){ - case 3: - /* Charging ASE */ - dissect_charging_ase_ChargingMessageType_PDU(next_tvb, pinfo, parameter_tree); - break; - case 5: - /* dissect BAT ASE element, without transparent data ( Q.765.5-200006) */ - dissect_bat_ase_Encapsulated_Application_Information(next_tvb, pinfo, parameter_tree, 0); - break; - default: - proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, "No further dissection of APM-user information field"); - break; - } + guint8 application_transport_instruction_ind; + guint8 si_and_apm_seg_ind; + guint8 apm_Segmentation_local_ref = 0; + guint16 aci16; + gint offset = 0; + guint8 octet; + guint length = tvb_reported_length(parameter_tvb); + + gboolean more_frag; + gboolean save_fragmented; + tvbuff_t* new_tvb = NULL; + tvbuff_t* next_tvb = NULL; + fragment_data *frag_msg = NULL; + + proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, "Application transport parameter fields:"); + proto_item_set_text(parameter_item, "Application transport, (%u byte%s length)", length , plurality(length, "", "s")); + aci16 = tvb_get_guint8(parameter_tvb, offset); + + if ( (aci16 & H_8BIT_MASK) == 0x80) { + /* Octet 1 */ + aci16 = aci16 & 0x7f; + proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_uint(parameter_tree, hf_isup_app_cont_ident , parameter_tvb, offset, 1, aci16); + offset = offset + 1; + } + /* Octet 1a */ + else { + aci16 = (aci16<<8) | (tvb_get_guint8(parameter_tvb, offset) & 0x7f); + proto_tree_add_uint(parameter_tree, hf_isup_app_cont_ident , parameter_tvb, offset, 2, aci16); + offset = offset + 2; + } + + /* Octet 2 */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, "Application transport instruction indicators: "); + application_transport_instruction_ind = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_app_Send_notification_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_app_Release_call_ind, parameter_tvb, offset, 1, FALSE ); + offset = offset + 1; + + /* Octet 3*/ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, "APM segmentation indicator:"); + si_and_apm_seg_ind = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_apm_si_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_apm_segmentation_ind, parameter_tvb, offset, 1, FALSE ); + offset = offset + 1; + + /* Octet 3a */ + if ( (si_and_apm_seg_ind & H_8BIT_MASK) == 0x00) { + apm_Segmentation_local_ref = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_item( parameter_tree, hf_isup_extension_ind, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_apm_slr, parameter_tvb, offset, 1, FALSE ); + offset = offset + 1; + } + /* For APM'98'-user applications. ( aci 0 - 3 ), APM-user information field starts at octet 4 */ + if (aci16 > 3) { + /* Octet 4 Originating Address length */ + octet = tvb_get_guint8(parameter_tvb,offset); + proto_tree_add_item( parameter_tree, hf_isup_orig_addr_len, parameter_tvb, offset, 1, FALSE ); + offset++; + if ( octet != 0){ + /* 4b */ + proto_tree_add_item( parameter_tree, hf_isup_odd_even_indicator, parameter_tvb, offset, 1, FALSE ); + /* nature of address indicator */ + offset++; + proto_tree_add_item( parameter_tree, hf_isup_inn_indicator, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_numbering_plan_indicator, parameter_tvb, offset, 1, FALSE ); + offset++; + /* Address digits */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, octet - 2, "Address digits"); + offset = offset + octet - 2; + } + /* Octet 5 Destination Address length */ + octet = tvb_get_guint8(parameter_tvb,offset); + proto_tree_add_item( parameter_tree, hf_isup_dest_addr_len, parameter_tvb, offset, 1, FALSE ); + offset++; + if ( octet != 0){ + /* 4b */ + proto_tree_add_item( parameter_tree, hf_isup_odd_even_indicator, parameter_tvb, offset, 1, FALSE ); + /* nature of address indicator */ + offset++; + proto_tree_add_item( parameter_tree, hf_isup_inn_indicator, parameter_tvb, offset, 1, FALSE ); + proto_tree_add_item( parameter_tree, hf_isup_numbering_plan_indicator, parameter_tvb, offset, 1, FALSE ); + offset++; + /* Address digits */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, octet - 2, "Address digits"); + offset = offset + octet - 2; + } + } + /* + * Defragment ? + * + */ + if (isup_apm_desegment){ + if ((si_and_apm_seg_ind != 0xc0) && ((si_and_apm_seg_ind & H_8BIT_MASK)!=0x80)){ + /* debug g_warning("got here Frame %u",pinfo->fd->num); */ + /* Segmented message */ + save_fragmented = pinfo->fragmented; + pinfo->fragmented = TRUE; + more_frag = TRUE; + if ((si_and_apm_seg_ind == 0)) + more_frag = FALSE; + + frag_msg = fragment_add_seq_next(parameter_tvb, offset, pinfo, + (apm_Segmentation_local_ref & 0x7f), /* ID for fragments belonging together */ + isup_apm_msg_fragment_table, /* list of message fragments */ + isup_apm_msg_reassembled_table, /* list of reassembled messages */ + tvb_length_remaining(parameter_tvb, offset), /* fragment length - to the end */ + more_frag); /* More fragments? */ + + if ((si_and_apm_seg_ind & 0x3f) !=0 && (si_and_apm_seg_ind &0x40) !=0){ + /* First fragment set number of fragments */ + fragment_set_tot_len(pinfo, apm_Segmentation_local_ref & 0x7f, isup_apm_msg_fragment_table, (si_and_apm_seg_ind & 0x3f)); + } + + new_tvb = process_reassembled_data(parameter_tvb, offset, pinfo, + "Reassembled ISUP", frag_msg, &isup_apm_msg_frag_items, + NULL, parameter_tree); + + if (frag_msg) { /* Reassembled */ + col_append_str(pinfo->cinfo, COL_INFO, + " (Message Reassembled)"); + } else { /* Not last packet of reassembled Short Message */ + col_append_str(pinfo->cinfo, COL_INFO, + " (Message fragment )"); + } + + pinfo->fragmented = save_fragmented; + } + }/*isup_apm_desegment*/ + + if ( offset == (gint)length){ + /* No data */ + proto_tree_add_text(parameter_tree, parameter_tvb, offset, 0, "Empty APM-user information field" ); + return; + } + if (new_tvb) { /* take it all */ + next_tvb = new_tvb; + } else { /* make a new subset */ + next_tvb = tvb_new_subset_remaining(parameter_tvb, offset); + } + + proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, + "APM-user information field (%u Bytes)",tvb_length_remaining(parameter_tvb, offset)); + + switch(aci16 & 0x7fff){ + case 3: + /* Charging ASE */ + dissect_charging_ase_ChargingMessageType_PDU(next_tvb, pinfo, parameter_tree); + break; + case 5: + /* dissect BAT ASE element, without transparent data ( Q.765.5-200006) */ + dissect_bat_ase_Encapsulated_Application_Information(next_tvb, pinfo, parameter_tree, 0); + break; + default: + proto_tree_add_text(parameter_tree, parameter_tvb, offset, -1, "No further dissection of APM-user information field"); + break; + } } @@ -3557,8 +3583,8 @@ dissect_isup_calling_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree length = tvb_length_remaining(parameter_tvb, offset); if (length > 0) { address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Calling Party Number"); + offset, -1, + "Calling Party Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); while(length > 0){ @@ -3571,7 +3597,7 @@ dissect_isup_calling_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -3581,7 +3607,7 @@ dissect_isup_calling_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } proto_item_set_text(address_digits_item, "Calling Party Number: %s", calling_number); calling_number[i++] = '\0'; @@ -3592,11 +3618,11 @@ dissect_isup_calling_party_number_parameter(tvbuff_t *parameter_tvb, proto_tree e164_info.E164_number_length = i - 1; dissect_e164_number(parameter_tvb, address_digits_tree, 2, (offset - 2), e164_info); hidden_item = proto_tree_add_string(address_digits_tree, hf_isup_calling, parameter_tvb, - offset - length, length, calling_number); + offset - length, length, calling_number); PROTO_ITEM_SET_HIDDEN(hidden_item); } else { proto_tree_add_string(address_digits_tree, hf_isup_calling, parameter_tvb, - offset - length, length, calling_number); + offset - length, length, calling_number); } } proto_item_set_text(parameter_item, "Calling Party Number: %s", calling_number); @@ -3634,8 +3660,8 @@ dissect_isup_original_called_number_parameter(tvbuff_t *parameter_tvb, proto_tre } address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Original Called Number"); + offset, -1, + "Original Called Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -3649,7 +3675,7 @@ dissect_isup_original_called_number_parameter(tvbuff_t *parameter_tvb, proto_tre proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -3659,7 +3685,7 @@ dissect_isup_original_called_number_parameter(tvbuff_t *parameter_tvb, proto_tre proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -3695,12 +3721,12 @@ dissect_isup_redirecting_number_parameter(tvbuff_t *parameter_tvb, proto_tree *p if (length == 0) { proto_tree_add_text(parameter_tree, parameter_tvb, offset, 0, "Redirecting Number (empty)"); proto_item_set_text(parameter_item, "Redirecting Number: (empty)"); - return; + return; } address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Redirecting Number"); + offset, -1, + "Redirecting Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -3714,7 +3740,7 @@ dissect_isup_redirecting_number_parameter(tvbuff_t *parameter_tvb, proto_tree *p proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -3724,7 +3750,7 @@ dissect_isup_redirecting_number_parameter(tvbuff_t *parameter_tvb, proto_tree *p proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -3756,8 +3782,8 @@ dissect_isup_redirection_number_parameter(tvbuff_t *parameter_tvb, proto_tree *p offset = 2; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Redirection Number"); + offset, -1, + "Redirection Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -3771,7 +3797,7 @@ dissect_isup_redirection_number_parameter(tvbuff_t *parameter_tvb, proto_tree *p proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -3781,7 +3807,7 @@ dissect_isup_redirection_number_parameter(tvbuff_t *parameter_tvb, proto_tree *p proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } called_number[i++] = '\0'; @@ -3865,12 +3891,12 @@ static void dissect_isup_user_service_information_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { guint length = tvb_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, - "User service information (-> Q.931 Bearer_capability)"); + "User service information (-> Q.931 Bearer_capability)"); proto_item_set_text(parameter_item, "User service information, (%u byte%s length)", - length , plurality(length, "", "s")); + length , plurality(length, "", "s")); dissect_q931_bearer_capability_ie(parameter_tvb, - 0, length, - parameter_tree); + 0, length, + parameter_tree); } /* ------------------------------------------------------------------ Dissector Parameter Signalling point code @@ -3911,10 +3937,10 @@ dissect_isup_connected_number_parameter(tvbuff_t *parameter_tvb, proto_tree *par length = tvb_length_remaining(parameter_tvb, offset); if (length == 0) - return; /* empty connected number */ + return; /* empty connected number */ address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Connected Number"); + offset, -1, + "Connected Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); while(length > 0){ @@ -3927,7 +3953,7 @@ dissect_isup_connected_number_parameter(tvbuff_t *parameter_tvb, proto_tree *par proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -3937,7 +3963,7 @@ dissect_isup_connected_number_parameter(tvbuff_t *parameter_tvb, proto_tree *par proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -3967,8 +3993,8 @@ dissect_isup_transit_network_selection_parameter(tvbuff_t *parameter_tvb, proto_ offset = 1; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Network identification"); + offset, -1, + "Network identification"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -3982,7 +4008,7 @@ dissect_isup_transit_network_selection_parameter(tvbuff_t *parameter_tvb, proto_ proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); network_id[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -3992,7 +4018,7 @@ dissect_isup_transit_network_selection_parameter(tvbuff_t *parameter_tvb, proto_ proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); network_id[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } network_id[i++] = '\0'; @@ -4048,19 +4074,19 @@ static const true_false_string isup_UUI_type_value = { "Request" }; static const value_string isup_UUI_request_service_values[] = { - { 0, "No information"}, - { 1, "Spare"}, - { 2, "Request, not essential"}, - { 3, "Request,essential"}, - { 0, NULL} + { 0, "No information"}, + { 1, "Spare"}, + { 2, "Request, not essential"}, + { 3, "Request,essential"}, + { 0, NULL} }; static const value_string isup_UUI_response_service_values[] = { - { 0, "No information"}, - { 1, "Not provided"}, - { 2, "Provided"}, - { 3, "Spare"}, - { 0, NULL} + { 0, "No information"}, + { 1, "Not provided"}, + { 2, "Provided"}, + { 3, "Spare"}, + { 0, NULL} }; static const true_false_string isup_UUI_network_discard_ind_value= { "User-to-user information discarded by the network", @@ -4069,25 +4095,25 @@ static const true_false_string isup_UUI_network_discard_ind_value= { static void dissect_isup_user_to_user_indicators_parameter(tvbuff_t *parameter_tvb, - proto_tree *parameter_tree, - proto_item *parameter_item) + proto_tree *parameter_tree, + proto_item *parameter_item) { guint8 indicators; indicators = tvb_get_guint8(parameter_tvb, 0); proto_tree_add_boolean(parameter_tree, hf_isup_UUI_type, parameter_tvb, 0, 1, indicators); if ( (indicators & 0x01) == 0 ){ - /* Request */ - proto_tree_add_uint(parameter_tree, hf_isup_UUI_req_service1, parameter_tvb, 0, 1, indicators); - proto_tree_add_uint(parameter_tree, hf_isup_UUI_req_service2, parameter_tvb, 0, 1, indicators); - proto_tree_add_uint(parameter_tree, hf_isup_UUI_req_service3, parameter_tvb, 0, 1, indicators); + /* Request */ + proto_tree_add_uint(parameter_tree, hf_isup_UUI_req_service1, parameter_tvb, 0, 1, indicators); + proto_tree_add_uint(parameter_tree, hf_isup_UUI_req_service2, parameter_tvb, 0, 1, indicators); + proto_tree_add_uint(parameter_tree, hf_isup_UUI_req_service3, parameter_tvb, 0, 1, indicators); } else { - /* Response */ - proto_tree_add_uint(parameter_tree, hf_isup_UUI_res_service1, parameter_tvb, 0, 1, indicators); - proto_tree_add_uint(parameter_tree, hf_isup_UUI_res_service2, parameter_tvb, 0, 1, indicators); - proto_tree_add_uint(parameter_tree, hf_isup_UUI_res_service3, parameter_tvb, 0, 1, indicators); - proto_tree_add_boolean(parameter_tree, hf_isup_UUI_network_discard_ind, parameter_tvb, 0, 1, indicators); + /* Response */ + proto_tree_add_uint(parameter_tree, hf_isup_UUI_res_service1, parameter_tvb, 0, 1, indicators); + proto_tree_add_uint(parameter_tree, hf_isup_UUI_res_service2, parameter_tvb, 0, 1, indicators); + proto_tree_add_uint(parameter_tree, hf_isup_UUI_res_service3, parameter_tvb, 0, 1, indicators); + proto_tree_add_boolean(parameter_tree, hf_isup_UUI_network_discard_ind, parameter_tvb, 0, 1, indicators); } proto_item_set_text(parameter_item,"User-to-user indicators: 0x%x", indicators ); @@ -4156,13 +4182,13 @@ static void dissect_isup_user_service_information_prime_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { guint length = tvb_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, - "User service information prime (-> Q.931 Bearer capability information IE)"); + "User service information prime (-> Q.931 Bearer capability information IE)"); dissect_q931_bearer_capability_ie(parameter_tvb, - 0, length, - parameter_tree); + 0, length, + parameter_tree); proto_item_set_text(parameter_item, "User service information prime, (%u byte%s length)", - length , plurality(length, "", "s")); + length , plurality(length, "", "s")); } /* ------------------------------------------------------------------ Dissector Parameter Propagation delay counter @@ -4208,12 +4234,12 @@ dissect_isup_user_teleservice_information_parameter(tvbuff_t *parameter_tvb, pro { guint length = tvb_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, - "User teleservice information (-> Q.931 High Layer Compatibility IE)"); + "User teleservice information (-> Q.931 High Layer Compatibility IE)"); dissect_q931_high_layer_compat_ie(parameter_tvb, 0, length, parameter_tree); proto_item_set_text(parameter_item, - "User teleservice information"); + "User teleservice information"); } /* ------------------------------------------------------------------ Dissector Parameter Transmission medium requirement used @@ -4226,7 +4252,7 @@ dissect_isup_transmission_medium_used_parameter(tvbuff_t *parameter_tvb, proto_t transmission_medium_requirement = tvb_get_guint8(parameter_tvb, 0); proto_tree_add_uint(parameter_tree, hf_isup_transmission_medium_requirement_prime, parameter_tvb, 0, TRANSMISSION_MEDIUM_RQMT_PRIME_LENGTH,transmission_medium_requirement); - proto_item_set_text(parameter_item, "Transmission medium used: %u (%s)", transmission_medium_requirement, val_to_str(transmission_medium_requirement, isup_transmission_medium_requirement_prime_value, "spare/reserved")); + proto_item_set_text(parameter_item, "Transmission medium used: %u (%s)", transmission_medium_requirement, val_to_str_ext_const(transmission_medium_requirement, &isup_transmission_medium_requirement_prime_value_ext, "spare/reserved")); } /* ------------------------------------------------------------------ Dissector Parameter Call diversion information @@ -4243,34 +4269,34 @@ dissect_isup_call_diversion_information_parameter(tvbuff_t *parameter_tvb, proto Dissector Parameter Echo control information */ static const value_string OECD_inf_ind_vals[] = { - {0x00, "no information"}, - {0x01, "outgoing echo control device not included and not available"}, - {0x02, "outgoing echo control device included"}, - {0x03, "outgoing echo control device not included but available"}, - { 0, NULL } + {0x00, "no information"}, + {0x01, "outgoing echo control device not included and not available"}, + {0x02, "outgoing echo control device included"}, + {0x03, "outgoing echo control device not included but available"}, + { 0, NULL } }; static const value_string IECD_inf_ind_vals[] = { - {0x00, "no information"}, - {0x01, "incoming echo control device not included and not available"}, - {0x02, "incoming echo control device included"}, - {0x03, "incoming echo control device not included but available"}, - { 0, NULL } + {0x00, "no information"}, + {0x01, "incoming echo control device not included and not available"}, + {0x02, "incoming echo control device included"}, + {0x03, "incoming echo control device not included but available"}, + { 0, NULL } }; static const value_string OECD_req_ind_vals[] = { - {0x00, "no information"}, - {0x01, "outgoing echo control device activation request"}, - {0x02, "outgoing echo control device deactivation request"}, - {0x03, "spare"}, - { 0, NULL } + {0x00, "no information"}, + {0x01, "outgoing echo control device activation request"}, + {0x02, "outgoing echo control device deactivation request"}, + {0x03, "spare"}, + { 0, NULL } }; static const value_string IECD_req_ind_vals[] = { - {0x00, "no information"}, - {0x01, "incoming echo control device activation request"}, - {0x02, "incoming echo control device deactivation request"}, - {0x03, "spare"}, - { 0, NULL } + {0x00, "no information"}, + {0x01, "incoming echo control device activation request"}, + {0x02, "incoming echo control device deactivation request"}, + {0x03, "spare"}, + { 0, NULL } }; static void @@ -4279,16 +4305,16 @@ dissect_isup_echo_control_information_parameter(tvbuff_t *parameter_tvb, proto_t gint offset = 0; indicator = tvb_get_guint8(parameter_tvb, 0); proto_tree_add_text(parameter_tree, parameter_tvb, 0, ECHO_CONTROL_INFO_LENGTH, - "Echo control information: 0x%x", indicator); + "Echo control information: 0x%x", indicator); proto_tree_add_uint(parameter_tree, hf_isup_OECD_inf_ind, - parameter_tvb, offset, 1, indicator ); + parameter_tvb, offset, 1, indicator ); proto_tree_add_uint(parameter_tree, hf_isup_IECD_inf_ind, - parameter_tvb, offset, 1, indicator ); + parameter_tvb, offset, 1, indicator ); proto_tree_add_uint(parameter_tree, hf_isup_OECD_req_ind, - parameter_tvb, offset, 1, indicator ); + parameter_tvb, offset, 1, indicator ); proto_tree_add_uint(parameter_tree, hf_isup_IECD_req_ind, parameter_tvb, offset, 1, indicator ); @@ -4300,44 +4326,44 @@ dissect_isup_echo_control_information_parameter(tvbuff_t *parameter_tvb, proto_t */ static const true_false_string isup_pass_on_not_possible_indicator_value = { - "discard information", - "release call", + "discard information", + "release call", }; static void dissect_isup_message_compatibility_information_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { - guint length = tvb_length(parameter_tvb); - guint instruction_indicators; - gint offset = 0; - instruction_indicators = tvb_get_guint8(parameter_tvb, offset); + guint length = tvb_length(parameter_tvb); + guint instruction_indicators; + gint offset = 0; + instruction_indicators = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, - "Message compatibility information"); + proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, + "Message compatibility information"); - proto_tree_add_boolean(parameter_tree, hf_isup_transit_at_intermediate_exchange_ind, - parameter_tvb, offset, 1, instruction_indicators ); + proto_tree_add_boolean(parameter_tree, hf_isup_transit_at_intermediate_exchange_ind, + parameter_tvb, offset, 1, instruction_indicators ); - proto_tree_add_boolean(parameter_tree, hf_isup_Release_call_ind, - parameter_tvb, offset, 1, instruction_indicators ); + proto_tree_add_boolean(parameter_tree, hf_isup_Release_call_ind, + parameter_tvb, offset, 1, instruction_indicators ); - proto_tree_add_boolean(parameter_tree, hf_isup_Send_notification_ind, - parameter_tvb, offset, 1, instruction_indicators ); + proto_tree_add_boolean(parameter_tree, hf_isup_Send_notification_ind, + parameter_tvb, offset, 1, instruction_indicators ); - proto_tree_add_boolean(parameter_tree, hf_isup_Discard_message_ind_value, - parameter_tvb, offset, 1, instruction_indicators ); + proto_tree_add_boolean(parameter_tree, hf_isup_Discard_message_ind_value, + parameter_tvb, offset, 1, instruction_indicators ); - proto_tree_add_boolean(parameter_tree, hf_isup_pass_on_not_possible_indicator2, - parameter_tvb, offset, 1,instruction_indicators); + proto_tree_add_boolean(parameter_tree, hf_isup_pass_on_not_possible_indicator2, + parameter_tvb, offset, 1,instruction_indicators); - proto_tree_add_uint(parameter_tree, hf_isup_Broadband_narrowband_interworking_ind2, - parameter_tvb, offset, 1,instruction_indicators); + proto_tree_add_uint(parameter_tree, hf_isup_Broadband_narrowband_interworking_ind2, + parameter_tvb, offset, 1,instruction_indicators); - proto_tree_add_boolean(parameter_tree, hf_isup_extension_ind , - parameter_tvb, offset, 1, instruction_indicators ); + proto_tree_add_boolean(parameter_tree, hf_isup_extension_ind , + parameter_tvb, offset, 1, instruction_indicators ); proto_item_set_text(parameter_item, "Message compatibility information (%u byte%s length)", - length , plurality(length, "", "s")); + length , plurality(length, "", "s")); } /* ------------------------------------------------------------------ Dissector Parameter compatibility information @@ -4349,28 +4375,28 @@ static const true_false_string isup_transit_at_intermediate_exchange_ind_value static const true_false_string isup_Discard_message_ind_value = { - "Discard message", - "Do not discard message (pass on)", + "Discard message", + "Do not discard message (pass on)", }; static const true_false_string isup_Discard_parameter_ind_value = { - "Discard parameter", - "Do not discard parameter (pass on)", + "Discard parameter", + "Do not discard parameter (pass on)", }; static const value_string isup_Pass_on_not_possible_indicator_vals[] = { - { 0x00, "Release call" }, - { 0x01, "Discard message" }, - { 0x02, "Discard parameter" }, - { 0x03, "Reserved (interpreted as 00)" }, - { 0, NULL }, + { 0x00, "Release call" }, + { 0x01, "Discard message" }, + { 0x02, "Discard parameter" }, + { 0x03, "Reserved (interpreted as 00)" }, + { 0, NULL }, }; static const value_string ISUP_Broadband_narrowband_interworking_indicator_vals[] = { - { 0x00, "Pass on" }, - { 0x01, "Discard message" }, - { 0x02, "Release call" }, - { 0x03, "Discard parameter" }, - { 0, NULL }, + { 0x00, "Pass on" }, + { 0x01, "Discard message" }, + { 0x02, "Release call" }, + { 0x03, "Discard parameter" }, + { 0, NULL }, }; static void @@ -4392,15 +4418,15 @@ dissect_isup_parameter_compatibility_information_parameter(tvbuff_t *parameter_t upgraded_parameter = tvb_get_guint8(parameter_tvb, offset); proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, - "Upgraded parameter no: %u = %s", upgraded_parameter_no, - val_to_str(upgraded_parameter, isup_parameter_type_value, "unknown (%u)")); + "Upgraded parameter no: %u = %s", upgraded_parameter_no, + val_to_str_ext(upgraded_parameter, &isup_parameter_type_value_ext, "unknown (%u)")); offset += 1; len -= 1; instruction_indicators = tvb_get_guint8(parameter_tvb, offset); proto_tree_add_text(parameter_tree, parameter_tvb, offset, 1, - "Instruction indicators: 0x%x ", - instruction_indicators); + "Instruction indicators: 0x%x ", + instruction_indicators); proto_tree_add_boolean(parameter_tree, hf_isup_transit_at_intermediate_exchange_ind, parameter_tvb, offset, 1, instruction_indicators ); @@ -4420,13 +4446,13 @@ dissect_isup_parameter_compatibility_information_parameter(tvbuff_t *parameter_t offset += 1; len -= 1; if (!(instruction_indicators & H_8BIT_MASK)) { - if (len == 0) - return; - instruction_indicators = tvb_get_guint8(parameter_tvb, offset); - proto_tree_add_uint(parameter_tree, hf_isup_Broadband_narrowband_interworking_ind, parameter_tvb, offset, 1,instruction_indicators); - offset += 1; - len -= 1; - } + if (len == 0) + return; + instruction_indicators = tvb_get_guint8(parameter_tvb, offset); + proto_tree_add_uint(parameter_tree, hf_isup_Broadband_narrowband_interworking_ind, parameter_tvb, offset, 1,instruction_indicators); + offset += 1; + len -= 1; + } if (len == 0) return; ; @@ -4551,7 +4577,7 @@ dissect_isup_transmission_medium_requirement_prime_parameter(tvbuff_t *parameter transmission_medium_requirement = tvb_get_guint8(parameter_tvb, 0); proto_tree_add_uint(parameter_tree, hf_isup_transmission_medium_requirement_prime, parameter_tvb, 0, TRANSMISSION_MEDIUM_RQMT_PRIME_LENGTH,transmission_medium_requirement); - proto_item_set_text(parameter_item, "Transmission medium requirement prime: %u (%s)", transmission_medium_requirement, val_to_str(transmission_medium_requirement, isup_transmission_medium_requirement_prime_value, "spare/reserved")); + proto_item_set_text(parameter_item, "Transmission medium requirement prime: %u (%s)", transmission_medium_requirement, val_to_str_ext_const(transmission_medium_requirement, &isup_transmission_medium_requirement_prime_value_ext, "spare/reserved")); } /* ------------------------------------------------------------------ @@ -4583,7 +4609,7 @@ dissect_isup_location_number_parameter(tvbuff_t *parameter_tvb, proto_tree *para /* NOTE When the address presentation restricted indicator indicates address not available, the * subfields in items a), b), c) and d) are coded with 0's, and the screening indicator is set to 11 * (network provided). - * BUG 938 - Just check if there is someting more to dissect. + * BUG 938 - Just check if there is someting more to dissect. */ if (tvb_length_remaining(parameter_tvb, offset) < 3){ proto_tree_add_text(parameter_tree, parameter_tvb, 1, -1, "Location number: address not available"); @@ -4594,8 +4620,8 @@ dissect_isup_location_number_parameter(tvbuff_t *parameter_tvb, proto_tree *para offset = 2; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Location number"); + offset, -1, + "Location number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -4609,7 +4635,7 @@ dissect_isup_location_number_parameter(tvbuff_t *parameter_tvb, proto_tree *para proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -4619,7 +4645,7 @@ dissect_isup_location_number_parameter(tvbuff_t *parameter_tvb, proto_tree *para proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -4637,15 +4663,15 @@ dissect_isup_redirection_number_restriction_parameter(tvbuff_t *parameter_tvb, p indicator = tvb_get_guint8(parameter_tvb, 0); switch (indicator & BA_8BIT_MASK) { - case 0: - proto_tree_add_text(parameter_tree, parameter_tvb, 0, REDIRECTION_NUMBER_RESTRICTION_LENGTH, "Presentation indicator: Presentation allowed"); - break; - case 1: - proto_tree_add_text(parameter_tree, parameter_tvb, 0, REDIRECTION_NUMBER_RESTRICTION_LENGTH, "Presentation indicator: Presentation restricted"); - break; - default: - proto_tree_add_text(parameter_tree, parameter_tvb, 0, REDIRECTION_NUMBER_RESTRICTION_LENGTH, "Presentation indicator: spare"); - break; + case 0: + proto_tree_add_text(parameter_tree, parameter_tvb, 0, REDIRECTION_NUMBER_RESTRICTION_LENGTH, "Presentation indicator: Presentation allowed"); + break; + case 1: + proto_tree_add_text(parameter_tree, parameter_tvb, 0, REDIRECTION_NUMBER_RESTRICTION_LENGTH, "Presentation indicator: Presentation restricted"); + break; + default: + proto_tree_add_text(parameter_tree, parameter_tvb, 0, REDIRECTION_NUMBER_RESTRICTION_LENGTH, "Presentation indicator: spare"); + break; } proto_item_set_text(parameter_item, "Redirection number restriction: 0x%x ", indicator); } @@ -4706,8 +4732,8 @@ dissect_isup_call_transfer_number_parameter(tvbuff_t *parameter_tvb, proto_tree offset = 2; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Call transfer number"); + offset, -1, + "Call transfer number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -4721,7 +4747,7 @@ dissect_isup_call_transfer_number_parameter(tvbuff_t *parameter_tvb, proto_tree proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -4731,7 +4757,7 @@ dissect_isup_call_transfer_number_parameter(tvbuff_t *parameter_tvb, proto_tree proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -4852,8 +4878,8 @@ dissect_isup_called_in_number_parameter(tvbuff_t *parameter_tvb, proto_tree *par offset = 2; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Called IN Number"); + offset, -1, + "Called IN Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -4867,7 +4893,7 @@ dissect_isup_called_in_number_parameter(tvbuff_t *parameter_tvb, proto_tree *par proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -4877,7 +4903,7 @@ dissect_isup_called_in_number_parameter(tvbuff_t *parameter_tvb, proto_tree *par proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -4938,9 +4964,9 @@ static void dissect_isup_display_information_parameter(tvbuff_t *parameter_tvb, proto_tree *parameter_tree, proto_item *parameter_item) { guint length = tvb_length(parameter_tvb); proto_tree_add_text(parameter_tree, parameter_tvb, 0, length, - "Display information (-> Q.931)"); + "Display information (-> Q.931)"); proto_item_set_text(parameter_item, "Display information (%u Byte%s)", - length , plurality(length, "", "s")); + length , plurality(length, "", "s")); } /* ------------------------------------------------------------------ Parameter UID action indicators @@ -5060,8 +5086,8 @@ dissect_isup_generic_number_parameter(tvbuff_t *parameter_tvb, proto_tree *param offset = 3; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Generic number"); + offset, -1, + "Generic number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -5075,7 +5101,7 @@ dissect_isup_generic_number_parameter(tvbuff_t *parameter_tvb, proto_tree *param proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -5085,18 +5111,18 @@ dissect_isup_generic_number_parameter(tvbuff_t *parameter_tvb, proto_tree *param proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; - /* - * Indicators1 = Nature of address + /* + * Indicators1 = Nature of address * Indicators2 = Number plan indicator */ indicators1 = indicators1 & 0x7f; - indicators2 = (indicators2 & 0x70)>>4; + indicators2 = (indicators2 & 0x70)>>4; if ((indicators1 == ISUP_CALLED_PARTY_NATURE_INTERNATNL_NR)&&(indicators2==ISDN_NUMBERING_PLAN)) - dissect_e164_cc(parameter_tvb, address_digits_tree, 3, TRUE); + dissect_e164_cc(parameter_tvb, address_digits_tree, 3, TRUE); proto_item_set_text(address_digits_item, "Generic number: %s", calling_number); proto_item_set_text(parameter_item, "Generic number: %s", calling_number); @@ -5119,8 +5145,8 @@ dissect_isup_jurisdiction_parameter(tvbuff_t *parameter_tvb, proto_tree *paramet offset = 0; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Jurisdiction"); + offset, -1, + "Jurisdiction"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); while((length = tvb_reported_length_remaining(parameter_tvb, offset)) > 0){ @@ -5133,7 +5159,7 @@ dissect_isup_jurisdiction_parameter(tvbuff_t *parameter_tvb, proto_tree *paramet proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; } @@ -5142,7 +5168,7 @@ dissect_isup_jurisdiction_parameter(tvbuff_t *parameter_tvb, proto_tree *paramet proto_tree_add_uint(address_digits_tree, hf_isup_called_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); called_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } called_number[i++] = '\0'; @@ -5206,8 +5232,8 @@ dissect_isup_charge_number_parameter(tvbuff_t *parameter_tvb, proto_tree *parame offset = 2; address_digits_item = proto_tree_add_text(parameter_tree, parameter_tvb, - offset, -1, - "Charge Number"); + offset, -1, + "Charge Number"); address_digits_tree = proto_item_add_subtree(address_digits_item, ett_isup_address_digits); length = tvb_length_remaining(parameter_tvb, offset); @@ -5221,7 +5247,7 @@ dissect_isup_charge_number_parameter(tvbuff_t *parameter_tvb, proto_tree *parame proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } offset++; length = tvb_length_remaining(parameter_tvb, offset); @@ -5231,7 +5257,7 @@ dissect_isup_charge_number_parameter(tvbuff_t *parameter_tvb, proto_tree *parame proto_tree_add_uint(address_digits_tree, hf_isup_calling_party_even_address_signal_digit, parameter_tvb, offset - 1, 1, address_digit_pair); calling_number[i++] = number_to_char((address_digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10); if (i > MAXDIGITS) - THROW(ReportedBoundsError); + THROW(ReportedBoundsError); } calling_number[i++] = '\0'; @@ -5269,282 +5295,287 @@ dissect_isup_optional_parameter(tvbuff_t *optional_parameters_tvb,packet_info *p parameter_length = tvb_get_guint8(optional_parameters_tvb, offset + PARAMETER_TYPE_LENGTH); parameter_item = proto_tree_add_text(isup_tree, optional_parameters_tvb, - offset, - parameter_length + PARAMETER_TYPE_LENGTH + PARAMETER_LENGTH_IND_LENGTH, - "Parameter: type %u", - parameter_type); + offset, + parameter_length + PARAMETER_TYPE_LENGTH + PARAMETER_LENGTH_IND_LENGTH, + "Parameter: type %u", + parameter_type); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, optional_parameters_tvb, offset, PARAMETER_TYPE_LENGTH, parameter_type, "Optional Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, optional_parameters_tvb, offset, PARAMETER_TYPE_LENGTH, + parameter_type, + "Optional Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext,"unknown")); offset += PARAMETER_TYPE_LENGTH; - octet = tvb_get_guint8(optional_parameters_tvb,offset); + octet = tvb_get_guint8(optional_parameters_tvb,offset); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, optional_parameters_tvb, offset, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); offset += PARAMETER_LENGTH_IND_LENGTH; - if ( octet == 0 ) - continue; + if ( octet == 0 ) + continue; actual_length = tvb_length_remaining(optional_parameters_tvb, offset); if (actual_length > 0){ - parameter_tvb = tvb_new_subset(optional_parameters_tvb, offset, MIN(parameter_length, actual_length), parameter_length); - switch (parameter_type) { - case PARAM_TYPE_CALL_REF: - dissect_isup_call_reference_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSM_MEDIUM_REQU: - dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ACC_TRANSP: - dissect_isup_access_transport_parameter(parameter_tvb, parameter_tree, parameter_item, pinfo); - break; - case PARAM_TYPE_CALLED_PARTY_NR: - dissect_isup_called_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SUBSQT_NR: - dissect_isup_subsequent_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_NATURE_OF_CONN_IND: - dissect_isup_nature_of_connection_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_FORW_CALL_IND: - dissect_isup_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_OPT_FORW_CALL_IND: - dissect_isup_optional_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLING_PRTY_CATEG: - dissect_isup_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLING_PARTY_NR: - dissect_isup_calling_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECTING_NR: - dissect_isup_redirecting_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECTION_NR: - dissect_isup_redirection_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONNECTION_REQ: - dissect_isup_connection_request_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_INFO_REQ_IND: - dissect_isup_information_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_INFO_IND: - dissect_isup_information_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONTINUITY_IND: - dissect_isup_continuity_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_BACKW_CALL_IND: - dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CAUSE_INDICATORS: - dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECTION_INFO: - dissect_isup_redirection_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE: - dissect_isup_circuit_group_supervision_message_type_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_RANGE_AND_STATUS: - dissect_isup_range_and_status_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_FACILITY_IND: - dissect_isup_facility_ind_parameter(parameter_tvb, parameter_item); - break; - case PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD: - dissect_isup_closed_user_group_interlock_code_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_SERVICE_INFO: - dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SIGNALLING_POINT_CODE: - dissect_isup_signalling_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_TO_USER_INFO: - dissect_isup_user_to_user_information_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONNECTED_NR: - dissect_isup_connected_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SUSP_RESUME_IND: - dissect_isup_suspend_resume_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSIT_NETW_SELECT: - dissect_isup_transit_network_selection_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_EVENT_INFO: - dissect_isup_event_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CIRC_ASSIGN_MAP: - dissect_isup_circuit_assignment_map_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CIRC_STATE_IND: - dissect_isup_circuit_state_ind_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_AUTO_CONG_LEVEL: - dissect_isup_automatic_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ORIG_CALLED_NR: - dissect_isup_original_called_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_OPT_BACKW_CALL_IND: - dissect_isup_optional_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_TO_USER_IND: - dissect_isup_user_to_user_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ORIG_ISC_POINT_CODE: - dissect_isup_original_isc_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_NOTIF_IND: - dissect_isup_generic_notification_indicator_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_HIST_INFO : - dissect_isup_call_history_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ACC_DELIV_INFO: - dissect_isup_access_delivery_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_NETW_SPECIFIC_FACLTY: - dissect_isup_network_specific_facility_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_SERVICE_INFO_PR: - dissect_isup_user_service_information_prime_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_PROPAG_DELAY_COUNTER: - dissect_isup_propagation_delay_counter_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REMOTE_OPERATIONS: - dissect_isup_remote_operations_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SERVICE_ACTIVATION: - dissect_isup_service_activation_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_TELESERV_INFO: - dissect_isup_user_teleservice_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSM_MEDIUM_USED: - dissect_isup_transmission_medium_used_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_DIV_INFO: - dissect_isup_call_diversion_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ECHO_CTRL_INFO: - dissect_isup_echo_control_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MSG_COMPAT_INFO: - dissect_isup_message_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_PARAM_COMPAT_INFO: - dissect_isup_parameter_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MLPP_PRECEDENCE: - dissect_isup_mlpp_precedence_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MCID_REQ_IND: - dissect_isup_mcid_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MCID_RSP_IND: - dissect_isup_mcid_response_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_HOP_COUNTER: - dissect_isup_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR: - dissect_isup_transmission_medium_requirement_prime_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_LOCATION_NR: - dissect_isup_location_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIR_NR_RSTRCT: - dissect_isup_redirection_number_restriction_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_TRANS_REF: - dissect_isup_call_transfer_reference_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_LOOP_PREV_IND: - dissect_isup_loop_prevention_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_TRANS_NR: - dissect_isup_call_transfer_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CCSS: - dissect_isup_ccss_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_FORW_GVNS: - dissect_isup_forward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_BACKW_GVNS: - dissect_isup_backward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECT_CAPAB: - dissect_isup_redirect_capability_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_NETW_MGMT_CTRL: - dissect_isup_network_management_controls_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CORRELATION_ID: - dissect_isup_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SCF_ID: - dissect_isup_scf_id_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_DIV_TREAT_IND: - dissect_isup_call_diversion_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLED_IN_NR: - dissect_isup_called_in_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_OFF_TREAT_IND: - dissect_isup_call_offering_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CHARGED_PARTY_IDENT: - dissect_isup_charged_party_identification_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONF_TREAT_IND: - dissect_isup_conference_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_DISPLAY_INFO: - dissect_isup_display_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_UID_ACTION_IND: - dissect_isup_uid_action_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_UID_CAPAB_IND: - dissect_isup_uid_capability_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECT_COUNTER: - dissect_isup_redirect_counter_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_COLLECT_CALL_REQ: - dissect_isup_collect_call_request_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_NR: - dissect_isup_generic_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_DIGITS: - dissect_isup_generic_digits_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_APPLICATON_TRANS: - dissect_isup_application_transport_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); - break; - - default: - dissect_isup_unknown_parameter(parameter_tvb, parameter_item); - break; - } - - - offset += MIN(parameter_length, actual_length); - } - - } + parameter_tvb = tvb_new_subset(optional_parameters_tvb, offset, MIN(parameter_length, actual_length), parameter_length); + switch (parameter_type) { + case PARAM_TYPE_CALL_REF: + dissect_isup_call_reference_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSM_MEDIUM_REQU: + dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ACC_TRANSP: + dissect_isup_access_transport_parameter(parameter_tvb, parameter_tree, parameter_item, pinfo); + break; + case PARAM_TYPE_CALLED_PARTY_NR: + dissect_isup_called_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SUBSQT_NR: + dissect_isup_subsequent_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_NATURE_OF_CONN_IND: + dissect_isup_nature_of_connection_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_FORW_CALL_IND: + dissect_isup_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_OPT_FORW_CALL_IND: + dissect_isup_optional_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLING_PRTY_CATEG: + dissect_isup_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLING_PARTY_NR: + dissect_isup_calling_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECTING_NR: + dissect_isup_redirecting_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECTION_NR: + dissect_isup_redirection_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONNECTION_REQ: + dissect_isup_connection_request_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_INFO_REQ_IND: + dissect_isup_information_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_INFO_IND: + dissect_isup_information_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONTINUITY_IND: + dissect_isup_continuity_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_BACKW_CALL_IND: + dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CAUSE_INDICATORS: + dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECTION_INFO: + dissect_isup_redirection_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE: + dissect_isup_circuit_group_supervision_message_type_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_RANGE_AND_STATUS: + dissect_isup_range_and_status_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_FACILITY_IND: + dissect_isup_facility_ind_parameter(parameter_tvb, parameter_item); + break; + case PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD: + dissect_isup_closed_user_group_interlock_code_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_SERVICE_INFO: + dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SIGNALLING_POINT_CODE: + dissect_isup_signalling_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_TO_USER_INFO: + dissect_isup_user_to_user_information_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONNECTED_NR: + dissect_isup_connected_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SUSP_RESUME_IND: + dissect_isup_suspend_resume_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSIT_NETW_SELECT: + dissect_isup_transit_network_selection_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_EVENT_INFO: + dissect_isup_event_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CIRC_ASSIGN_MAP: + dissect_isup_circuit_assignment_map_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CIRC_STATE_IND: + dissect_isup_circuit_state_ind_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_AUTO_CONG_LEVEL: + dissect_isup_automatic_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ORIG_CALLED_NR: + dissect_isup_original_called_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_OPT_BACKW_CALL_IND: + dissect_isup_optional_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_TO_USER_IND: + dissect_isup_user_to_user_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ORIG_ISC_POINT_CODE: + dissect_isup_original_isc_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_NOTIF_IND: + dissect_isup_generic_notification_indicator_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_HIST_INFO : + dissect_isup_call_history_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ACC_DELIV_INFO: + dissect_isup_access_delivery_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_NETW_SPECIFIC_FACLTY: + dissect_isup_network_specific_facility_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_SERVICE_INFO_PR: + dissect_isup_user_service_information_prime_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_PROPAG_DELAY_COUNTER: + dissect_isup_propagation_delay_counter_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REMOTE_OPERATIONS: + dissect_isup_remote_operations_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SERVICE_ACTIVATION: + dissect_isup_service_activation_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_TELESERV_INFO: + dissect_isup_user_teleservice_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSM_MEDIUM_USED: + dissect_isup_transmission_medium_used_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_DIV_INFO: + dissect_isup_call_diversion_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ECHO_CTRL_INFO: + dissect_isup_echo_control_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MSG_COMPAT_INFO: + dissect_isup_message_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_PARAM_COMPAT_INFO: + dissect_isup_parameter_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MLPP_PRECEDENCE: + dissect_isup_mlpp_precedence_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MCID_REQ_IND: + dissect_isup_mcid_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MCID_RSP_IND: + dissect_isup_mcid_response_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_HOP_COUNTER: + dissect_isup_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR: + dissect_isup_transmission_medium_requirement_prime_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_LOCATION_NR: + dissect_isup_location_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIR_NR_RSTRCT: + dissect_isup_redirection_number_restriction_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_TRANS_REF: + dissect_isup_call_transfer_reference_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_LOOP_PREV_IND: + dissect_isup_loop_prevention_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_TRANS_NR: + dissect_isup_call_transfer_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CCSS: + dissect_isup_ccss_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_FORW_GVNS: + dissect_isup_forward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_BACKW_GVNS: + dissect_isup_backward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECT_CAPAB: + dissect_isup_redirect_capability_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_NETW_MGMT_CTRL: + dissect_isup_network_management_controls_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CORRELATION_ID: + dissect_isup_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SCF_ID: + dissect_isup_scf_id_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_DIV_TREAT_IND: + dissect_isup_call_diversion_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLED_IN_NR: + dissect_isup_called_in_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_OFF_TREAT_IND: + dissect_isup_call_offering_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CHARGED_PARTY_IDENT: + dissect_isup_charged_party_identification_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONF_TREAT_IND: + dissect_isup_conference_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_DISPLAY_INFO: + dissect_isup_display_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_UID_ACTION_IND: + dissect_isup_uid_action_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_UID_CAPAB_IND: + dissect_isup_uid_capability_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECT_COUNTER: + dissect_isup_redirect_counter_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_COLLECT_CALL_REQ: + dissect_isup_collect_call_request_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_NR: + dissect_isup_generic_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_DIGITS: + dissect_isup_generic_digits_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_APPLICATON_TRANS: + dissect_isup_application_transport_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); + break; + + default: + dissect_isup_unknown_parameter(parameter_tvb, parameter_item); + break; + } + + + offset += MIN(parameter_length, actual_length); + } + + } else { - /* End of optional parameters is reached */ - proto_tree_add_uint_format(isup_tree, hf_isup_parameter_type, optional_parameters_tvb , offset, PARAMETER_TYPE_LENGTH, parameter_type, "End of optional parameters (%u)", parameter_type); + /* End of optional parameters is reached */ + proto_tree_add_uint_format(isup_tree, hf_isup_parameter_type, optional_parameters_tvb , offset, PARAMETER_TYPE_LENGTH, + parameter_type, "End of optional parameters (%u)", parameter_type); } } } @@ -5572,297 +5603,300 @@ dissect_ansi_isup_optional_parameter(tvbuff_t *optional_parameters_tvb,packet_in parameter_length = tvb_get_guint8(optional_parameters_tvb, offset + PARAMETER_TYPE_LENGTH); parameter_item = proto_tree_add_text(isup_tree, optional_parameters_tvb, - offset, - parameter_length + PARAMETER_TYPE_LENGTH + PARAMETER_LENGTH_IND_LENGTH, - "Parameter: type %u", - parameter_type); + offset, + parameter_length + PARAMETER_TYPE_LENGTH + PARAMETER_LENGTH_IND_LENGTH, + "Parameter: type %u", + parameter_type); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, optional_parameters_tvb, offset, PARAMETER_TYPE_LENGTH, parameter_type, "Optional Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, ansi_isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, optional_parameters_tvb, offset, PARAMETER_TYPE_LENGTH, parameter_type, + "Optional Parameter: %u (%s)", parameter_type, + val_to_str_ext_const(parameter_type, &ansi_isup_parameter_type_value_ext,"unknown")); offset += PARAMETER_TYPE_LENGTH; - octet = tvb_get_guint8(optional_parameters_tvb,offset); + octet = tvb_get_guint8(optional_parameters_tvb,offset); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, optional_parameters_tvb, offset, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, optional_parameters_tvb, offset, PARAMETER_LENGTH_IND_LENGTH, parameter_length, + "Parameter length: %u", parameter_length); offset += PARAMETER_LENGTH_IND_LENGTH; - if ( octet == 0 ) - continue; + if ( octet == 0 ) + continue; actual_length = tvb_length_remaining(optional_parameters_tvb, offset); if (actual_length > 0){ - parameter_tvb = tvb_new_subset(optional_parameters_tvb, offset, MIN(parameter_length, actual_length), parameter_length); - switch (parameter_type) { - case PARAM_TYPE_CALL_REF: - dissect_isup_call_reference_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSM_MEDIUM_REQU: - dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ACC_TRANSP: - dissect_isup_access_transport_parameter(parameter_tvb, parameter_tree, parameter_item, pinfo); - break; - case PARAM_TYPE_CALLED_PARTY_NR: - dissect_isup_called_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SUBSQT_NR: - dissect_isup_subsequent_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_NATURE_OF_CONN_IND: - dissect_isup_nature_of_connection_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_FORW_CALL_IND: - dissect_isup_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_OPT_FORW_CALL_IND: - dissect_isup_optional_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLING_PRTY_CATEG: - dissect_isup_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLING_PARTY_NR: - dissect_isup_calling_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECTING_NR: - dissect_isup_redirecting_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECTION_NR: - dissect_isup_redirection_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONNECTION_REQ: - dissect_isup_connection_request_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_INFO_REQ_IND: - dissect_isup_information_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_INFO_IND: - dissect_isup_information_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONTINUITY_IND: - dissect_isup_continuity_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_BACKW_CALL_IND: - dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CAUSE_INDICATORS: - dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECTION_INFO: - dissect_isup_redirection_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE: - dissect_isup_circuit_group_supervision_message_type_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_RANGE_AND_STATUS: - dissect_isup_range_and_status_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_FACILITY_IND: - dissect_isup_facility_ind_parameter(parameter_tvb, parameter_item); - break; - case PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD: - dissect_isup_closed_user_group_interlock_code_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_SERVICE_INFO: - dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SIGNALLING_POINT_CODE: - dissect_isup_signalling_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_TO_USER_INFO: - dissect_isup_user_to_user_information_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONNECTED_NR: - dissect_isup_connected_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SUSP_RESUME_IND: - dissect_isup_suspend_resume_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSIT_NETW_SELECT: - dissect_isup_transit_network_selection_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_EVENT_INFO: - dissect_isup_event_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CIRC_ASSIGN_MAP: - dissect_isup_circuit_assignment_map_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CIRC_STATE_IND: - dissect_isup_circuit_state_ind_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_AUTO_CONG_LEVEL: - dissect_isup_automatic_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ORIG_CALLED_NR: - dissect_isup_original_called_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_OPT_BACKW_CALL_IND: - dissect_isup_optional_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_TO_USER_IND: - dissect_isup_user_to_user_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ORIG_ISC_POINT_CODE: - dissect_isup_original_isc_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_NOTIF_IND: - dissect_isup_generic_notification_indicator_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_HIST_INFO : - dissect_isup_call_history_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ACC_DELIV_INFO: - dissect_isup_access_delivery_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_NETW_SPECIFIC_FACLTY: - dissect_isup_network_specific_facility_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_SERVICE_INFO_PR: - dissect_isup_user_service_information_prime_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_PROPAG_DELAY_COUNTER: - dissect_isup_propagation_delay_counter_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REMOTE_OPERATIONS: - dissect_isup_remote_operations_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SERVICE_ACTIVATION: - dissect_isup_service_activation_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_USER_TELESERV_INFO: - dissect_isup_user_teleservice_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSM_MEDIUM_USED: - dissect_isup_transmission_medium_used_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_DIV_INFO: - dissect_isup_call_diversion_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ECHO_CTRL_INFO: - dissect_isup_echo_control_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MSG_COMPAT_INFO: - dissect_isup_message_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_PARAM_COMPAT_INFO: - dissect_isup_parameter_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MLPP_PRECEDENCE: - dissect_isup_mlpp_precedence_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MCID_REQ_IND: - dissect_isup_mcid_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_MCID_RSP_IND: - dissect_isup_mcid_response_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_HOP_COUNTER: - dissect_isup_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_ORIG_LINE_INFO: - dissect_isup_orig_line_info_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR: - dissect_isup_transmission_medium_requirement_prime_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_LOCATION_NR: - dissect_isup_location_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIR_NR_RSTRCT: - dissect_isup_redirection_number_restriction_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_TRANS_REF: - dissect_isup_call_transfer_reference_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_LOOP_PREV_IND: - dissect_isup_loop_prevention_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_TRANS_NR: - dissect_isup_call_transfer_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CCSS: - dissect_isup_ccss_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_FORW_GVNS: - dissect_isup_forward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_BACKW_GVNS: - dissect_isup_backward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECT_CAPAB: - dissect_isup_redirect_capability_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_NETW_MGMT_CTRL: - dissect_isup_network_management_controls_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CORRELATION_ID: - dissect_isup_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_SCF_ID: - dissect_isup_scf_id_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_DIV_TREAT_IND: - dissect_isup_call_diversion_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLED_IN_NR: - dissect_isup_called_in_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALL_OFF_TREAT_IND: - dissect_isup_call_offering_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CHARGED_PARTY_IDENT: - dissect_isup_charged_party_identification_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CONF_TREAT_IND: - dissect_isup_conference_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_DISPLAY_INFO: - dissect_isup_display_information_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_UID_ACTION_IND: - dissect_isup_uid_action_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_UID_CAPAB_IND: - dissect_isup_uid_capability_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_REDIRECT_COUNTER: - dissect_isup_redirect_counter_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_COLLECT_CALL_REQ: - dissect_isup_collect_call_request_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CALLING_GEODETIC_LOCATION: - dissect_isup_calling_geodetic_location_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_NR: - dissect_isup_generic_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_JURISDICTION: - dissect_isup_jurisdiction_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_NAME: - dissect_isup_generic_name_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_GENERIC_DIGITS: - dissect_isup_generic_digits_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_CHARGE_NR: - dissect_isup_charge_number_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case PARAM_TYPE_APPLICATON_TRANS: - dissect_isup_application_transport_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); - break; - - default: - dissect_isup_unknown_parameter(parameter_tvb, parameter_item); - break; - } - - - offset += MIN(parameter_length, actual_length); - } - - } + parameter_tvb = tvb_new_subset(optional_parameters_tvb, offset, MIN(parameter_length, actual_length), parameter_length); + switch (parameter_type) { + case PARAM_TYPE_CALL_REF: + dissect_isup_call_reference_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSM_MEDIUM_REQU: + dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ACC_TRANSP: + dissect_isup_access_transport_parameter(parameter_tvb, parameter_tree, parameter_item, pinfo); + break; + case PARAM_TYPE_CALLED_PARTY_NR: + dissect_isup_called_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SUBSQT_NR: + dissect_isup_subsequent_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_NATURE_OF_CONN_IND: + dissect_isup_nature_of_connection_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_FORW_CALL_IND: + dissect_isup_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_OPT_FORW_CALL_IND: + dissect_isup_optional_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLING_PRTY_CATEG: + dissect_isup_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLING_PARTY_NR: + dissect_isup_calling_party_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECTING_NR: + dissect_isup_redirecting_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECTION_NR: + dissect_isup_redirection_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONNECTION_REQ: + dissect_isup_connection_request_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_INFO_REQ_IND: + dissect_isup_information_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_INFO_IND: + dissect_isup_information_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONTINUITY_IND: + dissect_isup_continuity_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_BACKW_CALL_IND: + dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CAUSE_INDICATORS: + dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECTION_INFO: + dissect_isup_redirection_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE: + dissect_isup_circuit_group_supervision_message_type_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_RANGE_AND_STATUS: + dissect_isup_range_and_status_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_FACILITY_IND: + dissect_isup_facility_ind_parameter(parameter_tvb, parameter_item); + break; + case PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD: + dissect_isup_closed_user_group_interlock_code_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_SERVICE_INFO: + dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SIGNALLING_POINT_CODE: + dissect_isup_signalling_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_TO_USER_INFO: + dissect_isup_user_to_user_information_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONNECTED_NR: + dissect_isup_connected_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SUSP_RESUME_IND: + dissect_isup_suspend_resume_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSIT_NETW_SELECT: + dissect_isup_transit_network_selection_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_EVENT_INFO: + dissect_isup_event_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CIRC_ASSIGN_MAP: + dissect_isup_circuit_assignment_map_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CIRC_STATE_IND: + dissect_isup_circuit_state_ind_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_AUTO_CONG_LEVEL: + dissect_isup_automatic_congestion_level_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ORIG_CALLED_NR: + dissect_isup_original_called_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_OPT_BACKW_CALL_IND: + dissect_isup_optional_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_TO_USER_IND: + dissect_isup_user_to_user_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ORIG_ISC_POINT_CODE: + dissect_isup_original_isc_point_code_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_NOTIF_IND: + dissect_isup_generic_notification_indicator_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_HIST_INFO : + dissect_isup_call_history_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ACC_DELIV_INFO: + dissect_isup_access_delivery_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_NETW_SPECIFIC_FACLTY: + dissect_isup_network_specific_facility_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_SERVICE_INFO_PR: + dissect_isup_user_service_information_prime_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_PROPAG_DELAY_COUNTER: + dissect_isup_propagation_delay_counter_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REMOTE_OPERATIONS: + dissect_isup_remote_operations_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SERVICE_ACTIVATION: + dissect_isup_service_activation_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_USER_TELESERV_INFO: + dissect_isup_user_teleservice_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSM_MEDIUM_USED: + dissect_isup_transmission_medium_used_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_DIV_INFO: + dissect_isup_call_diversion_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ECHO_CTRL_INFO: + dissect_isup_echo_control_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MSG_COMPAT_INFO: + dissect_isup_message_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_PARAM_COMPAT_INFO: + dissect_isup_parameter_compatibility_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MLPP_PRECEDENCE: + dissect_isup_mlpp_precedence_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MCID_REQ_IND: + dissect_isup_mcid_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_MCID_RSP_IND: + dissect_isup_mcid_response_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_HOP_COUNTER: + dissect_isup_hop_counter_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_ORIG_LINE_INFO: + dissect_isup_orig_line_info_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR: + dissect_isup_transmission_medium_requirement_prime_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_LOCATION_NR: + dissect_isup_location_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIR_NR_RSTRCT: + dissect_isup_redirection_number_restriction_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_TRANS_REF: + dissect_isup_call_transfer_reference_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_LOOP_PREV_IND: + dissect_isup_loop_prevention_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_TRANS_NR: + dissect_isup_call_transfer_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CCSS: + dissect_isup_ccss_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_FORW_GVNS: + dissect_isup_forward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_BACKW_GVNS: + dissect_isup_backward_gvns_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECT_CAPAB: + dissect_isup_redirect_capability_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_NETW_MGMT_CTRL: + dissect_isup_network_management_controls_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CORRELATION_ID: + dissect_isup_correlation_id_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_SCF_ID: + dissect_isup_scf_id_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_DIV_TREAT_IND: + dissect_isup_call_diversion_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLED_IN_NR: + dissect_isup_called_in_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALL_OFF_TREAT_IND: + dissect_isup_call_offering_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CHARGED_PARTY_IDENT: + dissect_isup_charged_party_identification_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CONF_TREAT_IND: + dissect_isup_conference_treatment_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_DISPLAY_INFO: + dissect_isup_display_information_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_UID_ACTION_IND: + dissect_isup_uid_action_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_UID_CAPAB_IND: + dissect_isup_uid_capability_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_REDIRECT_COUNTER: + dissect_isup_redirect_counter_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_COLLECT_CALL_REQ: + dissect_isup_collect_call_request_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CALLING_GEODETIC_LOCATION: + dissect_isup_calling_geodetic_location_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_NR: + dissect_isup_generic_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_JURISDICTION: + dissect_isup_jurisdiction_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_NAME: + dissect_isup_generic_name_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_GENERIC_DIGITS: + dissect_isup_generic_digits_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_CHARGE_NR: + dissect_isup_charge_number_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case PARAM_TYPE_APPLICATON_TRANS: + dissect_isup_application_transport_parameter(parameter_tvb, pinfo, parameter_tree, parameter_item); + break; + + default: + dissect_isup_unknown_parameter(parameter_tvb, parameter_item); + break; + } + + + offset += MIN(parameter_length, actual_length); + } + + } else { - /* End of optional parameters is reached */ - proto_tree_add_uint_format(isup_tree, hf_isup_parameter_type, optional_parameters_tvb , offset, PARAMETER_TYPE_LENGTH, parameter_type, "End of optional parameters (%u)", parameter_type); + /* End of optional parameters is reached */ + proto_tree_add_uint_format(isup_tree, hf_isup_parameter_type, optional_parameters_tvb , offset, PARAMETER_TYPE_LENGTH, parameter_type, "End of optional parameters (%u)", parameter_type); } } } @@ -5888,7 +5922,10 @@ dissect_ansi_isup_circuit_validation_test_resp_message(tvbuff_t *message_tvb, pr parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, CVR_RESP_IND_LENGTH, "CVR Response Indicator"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"CVR Response Indicator")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext,"CVR Response Indicator")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -5899,10 +5936,13 @@ dissect_ansi_isup_circuit_validation_test_resp_message(tvbuff_t *message_tvb, pr /* Do stuff for second mandatory fixed parameter: CG Characteristics Indicator */ parameter_type = ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - CG_CHAR_IND_LENGTH, - "Circuit Group Characteristics Indicators"); + CG_CHAR_IND_LENGTH, + "Circuit Group Characteristics Indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"Circuit Group Characters")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "Circuit Group Characters")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(CG_CHAR_IND_LENGTH, actual_length), CG_CHAR_IND_LENGTH); dissect_isup_circuit_group_char_ind_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -5924,10 +5964,13 @@ dissect_ansi_isup_circuit_reservation_message(tvbuff_t *message_tvb, proto_tree /* Do stuff for mandatory fixed parameter: Nature of Connection Indicators */ parameter_type = PARAM_TYPE_NATURE_OF_CONN_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - NATURE_OF_CONNECTION_IND_LENGTH, - "Nature of Connection Indicators"); + NATURE_OF_CONNECTION_IND_LENGTH, + "Nature of Connection Indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext,"unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(NATURE_OF_CONNECTION_IND_LENGTH, actual_length), NATURE_OF_CONNECTION_IND_LENGTH); dissect_isup_nature_of_connection_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -5949,10 +5992,13 @@ dissect_isup_initial_address_message(tvbuff_t *message_tvb, proto_tree *isup_tre /* Do stuff for first mandatory fixed parameter: Nature of Connection Indicators */ parameter_type = PARAM_TYPE_NATURE_OF_CONN_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - NATURE_OF_CONNECTION_IND_LENGTH, - "Nature of Connection Indicators"); + NATURE_OF_CONNECTION_IND_LENGTH, + "Nature of Connection Indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(NATURE_OF_CONNECTION_IND_LENGTH, actual_length), NATURE_OF_CONNECTION_IND_LENGTH); dissect_isup_nature_of_connection_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -5961,10 +6007,13 @@ dissect_isup_initial_address_message(tvbuff_t *message_tvb, proto_tree *isup_tre /* Do stuff for 2nd mandatory fixed parameter: Forward Call Indicators */ parameter_type = PARAM_TYPE_FORW_CALL_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - FORWARD_CALL_IND_LENGTH, - "Forward Call Indicators"); + FORWARD_CALL_IND_LENGTH, + "Forward Call Indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(FORWARD_CALL_IND_LENGTH, actual_length), FORWARD_CALL_IND_LENGTH ); dissect_isup_forward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -5973,47 +6022,56 @@ dissect_isup_initial_address_message(tvbuff_t *message_tvb, proto_tree *isup_tre /* Do stuff for 3nd mandatory fixed parameter: Calling party's category */ parameter_type = PARAM_TYPE_CALLING_PRTY_CATEG; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - CALLING_PRTYS_CATEGORY_LENGTH, - "Calling Party's category"); + CALLING_PRTYS_CATEGORY_LENGTH, + "Calling Party's category"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(CALLING_PRTYS_CATEGORY_LENGTH, actual_length),CALLING_PRTYS_CATEGORY_LENGTH ); dissect_isup_calling_partys_category_parameter(parameter_tvb, parameter_tree, parameter_item); offset += CALLING_PRTYS_CATEGORY_LENGTH; switch (isup_standard){ - case ITU_STANDARD: - /* If ITU, do stuff for 4th mandatory fixed parameter: Transmission medium requirement */ - parameter_type = PARAM_TYPE_TRANSM_MEDIUM_REQU; - parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH, - "Transmission medium requirement"); - parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); - actual_length = tvb_ensure_length_remaining(message_tvb, offset); - parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH, actual_length), TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH); - dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item); - offset += TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH; - break; - case ANSI_STANDARD: - /* If ANSI, do stuff for the first mandatory variable parameter, USER_SERVICE_INFORMATION */ - parameter_type = PARAM_TYPE_USER_SERVICE_INFO; - parameter_pointer = tvb_get_guint8(message_tvb, offset); - parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); - parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "User Service Information"); - parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); - proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); - actual_length = tvb_ensure_length_remaining(message_tvb, offset); - parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length ); - dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item); - offset += PARAMETER_POINTER_LENGTH; - break; + case ITU_STANDARD: + /* If ITU, do stuff for 4th mandatory fixed parameter: Transmission medium requirement */ + parameter_type = PARAM_TYPE_TRANSM_MEDIUM_REQU; + parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, + TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH, + "Transmission medium requirement"); + parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); + actual_length = tvb_ensure_length_remaining(message_tvb, offset); + parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH, actual_length), TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH); + dissect_isup_transmission_medium_requirement_parameter(parameter_tvb, parameter_tree, parameter_item); + offset += TRANSMISSION_MEDIUM_REQUIREMENT_LENGTH; + break; + case ANSI_STANDARD: + /* If ANSI, do stuff for the first mandatory variable parameter, USER_SERVICE_INFORMATION */ + parameter_type = PARAM_TYPE_USER_SERVICE_INFO; + parameter_pointer = tvb_get_guint8(message_tvb, offset); + parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); + parameter_item = proto_tree_add_text(isup_tree, message_tvb, + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "User Service Information"); + parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); + actual_length = tvb_ensure_length_remaining(message_tvb, offset); + parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length ); + dissect_isup_user_service_information_parameter(parameter_tvb, parameter_tree, parameter_item); + offset += PARAMETER_POINTER_LENGTH; + break; } /* Do stuff for mandatory variable parameter Called party number */ @@ -6022,11 +6080,14 @@ dissect_isup_initial_address_message(tvbuff_t *message_tvb, proto_tree *isup_tre parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Called Party Number"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Called Party Number"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6053,11 +6114,14 @@ static gint dissect_isup_subsequent_address_message(tvbuff_t *message_tvb, proto parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Subsequent Number"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Subsequent Number"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6082,10 +6146,13 @@ dissect_isup_information_request_message(tvbuff_t *message_tvb, proto_tree *isup /* Do stuff for first mandatory fixed parameter: Information request indicators*/ parameter_type = PARAM_TYPE_INFO_REQ_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - INFO_REQUEST_IND_LENGTH, - "Information request indicators"); + INFO_REQUEST_IND_LENGTH, + "Information request indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(INFO_REQUEST_IND_LENGTH, actual_length), INFO_REQUEST_IND_LENGTH); dissect_isup_information_request_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6106,10 +6173,13 @@ dissect_isup_information_message(tvbuff_t *message_tvb, proto_tree *isup_tree) /* Do stuff for first mandatory fixed parameter: Information indicators*/ parameter_type = PARAM_TYPE_INFO_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - INFO_IND_LENGTH, - "Information indicators"); + INFO_IND_LENGTH, + "Information indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(INFO_IND_LENGTH, actual_length), INFO_IND_LENGTH); dissect_isup_information_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6130,10 +6200,13 @@ dissect_isup_continuity_message(tvbuff_t *message_tvb, proto_tree *isup_tree) /* Do stuff for first mandatory fixed parameter: Continuity indicators*/ parameter_type = PARAM_TYPE_CONTINUITY_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - CONTINUITY_IND_LENGTH, - "Continuity indicators"); + CONTINUITY_IND_LENGTH, + "Continuity indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(CONTINUITY_IND_LENGTH, actual_length), CONTINUITY_IND_LENGTH); dissect_isup_continuity_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6154,10 +6227,13 @@ dissect_isup_address_complete_message(tvbuff_t *message_tvb, proto_tree *isup_tr /* Do stuff for first mandatory fixed parameter: backward call indicators*/ parameter_type = PARAM_TYPE_BACKW_CALL_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - BACKWARD_CALL_IND_LENGTH, - "Backward Call Indicators"); + BACKWARD_CALL_IND_LENGTH, + "Backward Call Indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(BACKWARD_CALL_IND_LENGTH, actual_length), BACKWARD_CALL_IND_LENGTH); dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6178,10 +6254,13 @@ dissect_isup_connect_message(tvbuff_t *message_tvb, proto_tree *isup_tree) /* Do stuff for first mandatory fixed parameter: backward call indicators*/ parameter_type = PARAM_TYPE_BACKW_CALL_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - BACKWARD_CALL_IND_LENGTH, - "Backward Call Indicators"); + BACKWARD_CALL_IND_LENGTH, + "Backward Call Indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(BACKWARD_CALL_IND_LENGTH, actual_length), BACKWARD_CALL_IND_LENGTH); dissect_isup_backward_call_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6206,22 +6285,25 @@ dissect_isup_release_message(tvbuff_t *message_tvb, proto_tree *isup_tree) parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Cause indicators"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Cause indicators"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length ); switch (isup_standard){ - case ITU_STANDARD: - dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case ANSI_STANDARD: - dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; + case ITU_STANDARD: + dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case ANSI_STANDARD: + dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; } offset += PARAMETER_POINTER_LENGTH; @@ -6241,10 +6323,13 @@ dissect_isup_suspend_resume_message(tvbuff_t *message_tvb, proto_tree *isup_tree /* Do stuff for first mandatory fixed parameter: backward call indicators*/ parameter_type = PARAM_TYPE_SUSP_RESUME_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - SUSPEND_RESUME_IND_LENGTH, - "Suspend/Resume indicator"); + SUSPEND_RESUME_IND_LENGTH, + "Suspend/Resume indicator"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(SUSPEND_RESUME_IND_LENGTH, actual_length), SUSPEND_RESUME_IND_LENGTH); dissect_isup_suspend_resume_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6269,11 +6354,14 @@ dissect_isup_circuit_group_reset_query_message(tvbuff_t *message_tvb, proto_tree parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Range and status"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Range and status"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6297,10 +6385,13 @@ dissect_isup_circuit_group_blocking_messages(tvbuff_t *message_tvb, proto_tree * /* Do stuff for first mandatory fixed parameter: circuit group supervision message type*/ parameter_type = PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - CIRC_GRP_SV_MSG_TYPE_LENGTH, - "Circuit group supervision message type"); + CIRC_GRP_SV_MSG_TYPE_LENGTH, + "Circuit group supervision message type"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(CIRC_GRP_SV_MSG_TYPE_LENGTH, actual_length), CIRC_GRP_SV_MSG_TYPE_LENGTH); dissect_isup_circuit_group_supervision_message_type_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6313,11 +6404,14 @@ dissect_isup_circuit_group_blocking_messages(tvbuff_t *message_tvb, proto_tree * parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Range and status"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Range and status"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6342,10 +6436,13 @@ dissect_isup_facility_request_accepted_message(tvbuff_t *message_tvb, proto_tree /* Do stuff for first mandatory fixed parameter: facility indicators*/ parameter_type = PARAM_TYPE_FACILITY_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - FACILITY_IND_LENGTH, - "Facility indicator"); + FACILITY_IND_LENGTH, + "Facility indicator"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(FACILITY_IND_LENGTH, actual_length), FACILITY_IND_LENGTH); dissect_isup_facility_ind_parameter(parameter_tvb, parameter_item); @@ -6366,10 +6463,13 @@ dissect_isup_facility_reject_message(tvbuff_t *message_tvb, proto_tree *isup_tre /* Do stuff for first mandatory fixed parameter: facility indicators*/ parameter_type = PARAM_TYPE_FACILITY_IND; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - FACILITY_IND_LENGTH, - "Facility indicator"); + FACILITY_IND_LENGTH, + "Facility indicator"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(FACILITY_IND_LENGTH, actual_length), FACILITY_IND_LENGTH); dissect_isup_facility_ind_parameter(parameter_tvb, parameter_item); @@ -6382,22 +6482,25 @@ dissect_isup_facility_reject_message(tvbuff_t *message_tvb, proto_tree *isup_tre parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Cause indicators, see Q.850"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Cause indicators, see Q.850"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length ); switch (isup_standard){ - case ITU_STANDARD: - dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case ANSI_STANDARD: - dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; + case ITU_STANDARD: + dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case ANSI_STANDARD: + dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; } offset += PARAMETER_POINTER_LENGTH; @@ -6421,11 +6524,14 @@ dissect_isup_circuit_group_reset_acknowledgement_message(tvbuff_t *message_tvb, parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Range and status"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Range and status"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6453,11 +6559,14 @@ dissect_isup_circuit_group_query_response_message(tvbuff_t *message_tvb, proto_t parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Range and status"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Range and status"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6472,11 +6581,14 @@ dissect_isup_circuit_group_query_response_message(tvbuff_t *message_tvb, proto_t parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Circuit state indicator (national use)"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Circuit state indicator (national use)"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6500,10 +6612,13 @@ dissect_isup_call_progress_message(tvbuff_t *message_tvb, proto_tree *isup_tree) /* Do stuff for first mandatory fixed parameter: Event information*/ parameter_type = PARAM_TYPE_EVENT_INFO; parameter_item = proto_tree_add_text(isup_tree, message_tvb, offset, - EVENT_INFO_LENGTH, - "Event information"); + EVENT_INFO_LENGTH, + "Event information"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset, MIN(EVENT_INFO_LENGTH, actual_length), EVENT_INFO_LENGTH); dissect_isup_event_information_parameter(parameter_tvb, parameter_tree, parameter_item); @@ -6528,11 +6643,14 @@ dissect_isup_user_to_user_information_message(tvbuff_t *message_tvb, packet_info parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "User-to-user information, see Q.931"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "User-to-user information, see Q.931"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); @@ -6560,23 +6678,26 @@ dissect_isup_confusion_message(tvbuff_t *message_tvb, proto_tree *isup_tree) parameter_length = tvb_get_guint8(message_tvb, offset + parameter_pointer); parameter_item = proto_tree_add_text(isup_tree, message_tvb, - offset + parameter_pointer, - parameter_length + PARAMETER_LENGTH_IND_LENGTH, - "Cause indicators, see Q.850"); + offset + parameter_pointer, + parameter_length + PARAMETER_LENGTH_IND_LENGTH, + "Cause indicators, see Q.850"); parameter_tree = proto_item_add_subtree(parameter_item, ett_isup_parameter); - proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, "Mandatory Parameter: %u (%s)", parameter_type, val_to_str(parameter_type, isup_parameter_type_value,"unknown")); + proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_type, message_tvb, 0, 0, parameter_type, + "Mandatory Parameter: %u (%s)", + parameter_type, + val_to_str_ext_const(parameter_type, &isup_parameter_type_value_ext, "unknown")); proto_tree_add_uint_format(parameter_tree, hf_isup_mandatory_variable_parameter_pointer, message_tvb, offset, PARAMETER_POINTER_LENGTH, parameter_pointer, "Pointer to Parameter: %u", parameter_pointer); proto_tree_add_uint_format(parameter_tree, hf_isup_parameter_length, message_tvb, offset + parameter_pointer, PARAMETER_LENGTH_IND_LENGTH, parameter_length, "Parameter length: %u", parameter_length); actual_length = tvb_ensure_length_remaining(message_tvb, offset); parameter_tvb = tvb_new_subset(message_tvb, offset + parameter_pointer + PARAMETER_LENGTH_IND_LENGTH, MIN(parameter_length, actual_length), parameter_length ); switch (isup_standard){ - case ITU_STANDARD: - dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; - case ANSI_STANDARD: - dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); - break; + case ITU_STANDARD: + dissect_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; + case ANSI_STANDARD: + dissect_ansi_isup_cause_indicators_parameter(parameter_tvb, parameter_tree, parameter_item); + break; } offset += PARAMETER_POINTER_LENGTH; @@ -6594,7 +6715,7 @@ dissect_isup_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *isup gint offset, bufferlength; guint8 message_type, opt_parameter_pointer; gint opt_part_possible = FALSE; /* default setting - for message types allowing optional - params explicitely set to TRUE in case statement */ + params explicitely set to TRUE in case statement */ tap_calling_number = NULL; offset = 0; @@ -6602,12 +6723,16 @@ dissect_isup_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *isup message_type = tvb_get_guint8(message_tvb,0); switch (isup_standard){ - case ITU_STANDARD: - proto_tree_add_uint_format(isup_tree, hf_isup_message_type, message_tvb, 0, MESSAGE_TYPE_LENGTH, message_type, "Message type: %s (%u)", val_to_str(message_type, isup_message_type_value, "reserved"), message_type); - break; - case ANSI_STANDARD: - proto_tree_add_uint_format(isup_tree, hf_isup_message_type, message_tvb, 0, MESSAGE_TYPE_LENGTH, message_type, "Message type: %s (%u)", val_to_str(message_type, ansi_isup_message_type_value, "reserved"), message_type); - break; + case ITU_STANDARD: + proto_tree_add_uint_format(isup_tree, hf_isup_message_type, message_tvb, 0, MESSAGE_TYPE_LENGTH, message_type, + "Message type: %s (%u)", + val_to_str_ext_const(message_type, &isup_message_type_value_ext, "reserved"), + message_type); + break; + case ANSI_STANDARD: + proto_tree_add_uint_format(isup_tree, hf_isup_message_type, message_tvb, 0, MESSAGE_TYPE_LENGTH, message_type, "Message type: %s (%u)", + val_to_str_ext_const(message_type, &ansi_isup_message_type_value_ext, "reserved"), message_type); + break; } offset += MESSAGE_TYPE_LENGTH; @@ -6618,414 +6743,422 @@ dissect_isup_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *isup parameter_tvb = tvb_new_subset_remaining(message_tvb, offset); /* distinguish between message types:*/ - switch (isup_standard){ - case ITU_STANDARD: - switch (message_type) { - case MESSAGE_TYPE_INITIAL_ADDR: - offset += dissect_isup_initial_address_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SUBSEQ_ADDR: - offset += dissect_isup_subsequent_address_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_INFO_REQ: - offset += dissect_isup_information_request_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_INFO: - offset += dissect_isup_information_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_CONTINUITY: - offset += dissect_isup_continuity_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_ADDR_CMPL: - offset += dissect_isup_address_complete_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_CONNECT: - offset += dissect_isup_connect_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FORW_TRANS: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_ANSWER: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_RELEASE: - offset += dissect_isup_release_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SUSPEND: - offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_RESUME: - offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_REL_CMPL: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_CONT_CHECK_REQ: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_RESET_CIRCUIT: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_BLOCKING: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_UNBLOCKING: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_BLOCK_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_UNBLOCK_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CIRC_GRP_RST: - offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_BLCK: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_UNBL: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_BL_ACK: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_UNBL_ACK: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_FACILITY_REQ: - offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FACILITY_ACC: - offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FACILITY_REJ: - offset += dissect_isup_facility_reject_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_LOOP_BACK_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_PASS_ALONG: - /* call dissect_isup_message recursively */ - { guint8 pa_message_type; - pa_message_type = tvb_get_guint8(parameter_tvb, 0); - pass_along_item = proto_tree_add_text(isup_tree, parameter_tvb, offset, -1, "Pass-along: %s Message (%u)", val_to_str(pa_message_type, isup_message_type_value_acro, "reserved"), pa_message_type); - pass_along_tree = proto_item_add_subtree(pass_along_item, ett_isup_pass_along_message); - dissect_isup_message(parameter_tvb, pinfo, pass_along_tree); - break; - } - case MESSAGE_TYPE_CIRC_GRP_RST_ACK: - offset += dissect_isup_circuit_group_reset_acknowledgement_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_QRY: - offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_QRY_RSP: - offset += dissect_isup_circuit_group_query_response_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CALL_PROGRSS: - offset += dissect_isup_call_progress_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_USER2USER_INFO: - offset += dissect_isup_user_to_user_information_message(parameter_tvb, pinfo, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_UNEQUIPPED_CIC: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CONFUSION: - offset += dissect_isup_confusion_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_OVERLOAD: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CHARGE_INFO: - /* do nothing since format is a national matter */ - bufferlength = tvb_length_remaining(message_tvb, offset); - if (bufferlength != 0) - proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); - break; - case MESSAGE_TYPE_NETW_RESRC_MGMT: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FACILITY: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_USER_PART_TEST: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_USER_PART_AVAIL: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_IDENT_REQ: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_IDENT_RSP: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SEGMENTATION: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_LOOP_PREVENTION: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_APPLICATION_TRANS: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_PRE_RELEASE_INFO: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SUBSEQUENT_DIR_NUM: - /* do nothing since format is a national matter */ - bufferlength = tvb_length_remaining(message_tvb, offset); - if (bufferlength != 0) - proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); - break; - default: - bufferlength = tvb_length_remaining(message_tvb, offset); - if (bufferlength != 0) - proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Unknown Message type (possibly reserved/used in former ISUP version)"); - break; - } - break; - case ANSI_STANDARD: - /* TODO if neccessary make new "dissect_ansi_isup_xxx() routines or add branches in the current ones. - */ - switch (message_type) { - case MESSAGE_TYPE_INITIAL_ADDR: - offset += dissect_isup_initial_address_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SUBSEQ_ADDR: - offset += dissect_isup_subsequent_address_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_INFO_REQ: - offset += dissect_isup_information_request_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_INFO: - offset += dissect_isup_information_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_CONTINUITY: - offset += dissect_isup_continuity_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_ADDR_CMPL: - offset += dissect_isup_address_complete_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_CONNECT: - offset += dissect_isup_connect_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FORW_TRANS: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_ANSWER: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_RELEASE: - offset += dissect_isup_release_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SUSPEND: - offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_RESUME: - offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_REL_CMPL: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CONT_CHECK_REQ: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_RESET_CIRCUIT: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_BLOCKING: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_UNBLOCKING: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_BLOCK_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_UNBLOCK_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CIRC_GRP_RST: - offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_BLCK: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_UNBL: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_BL_ACK: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_UNBL_ACK: - offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_FACILITY_REQ: - offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FACILITY_ACC: - offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FACILITY_REJ: - offset += dissect_isup_facility_reject_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_LOOP_BACK_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_PASS_ALONG: - /* call dissect_isup_message recursively */ - { guint8 pa_message_type; - pa_message_type = tvb_get_guint8(parameter_tvb, 0); - pass_along_item = proto_tree_add_text(isup_tree, parameter_tvb, offset, -1, "Pass-along: %s Message (%u)", val_to_str(pa_message_type, isup_message_type_value_acro, "reserved"), pa_message_type); - pass_along_tree = proto_item_add_subtree(pass_along_item, ett_isup_pass_along_message); - dissect_isup_message(parameter_tvb, pinfo, pass_along_tree); - break; - } - case MESSAGE_TYPE_CIRC_GRP_RST_ACK: - offset += dissect_isup_circuit_group_reset_acknowledgement_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_QRY: - offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CIRC_GRP_QRY_RSP: - offset += dissect_isup_circuit_group_query_response_message(parameter_tvb, isup_tree); - break; - case MESSAGE_TYPE_CALL_PROGRSS: - offset += dissect_isup_call_progress_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_USER2USER_INFO: - offset += dissect_isup_user_to_user_information_message(parameter_tvb, pinfo, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_UNEQUIPPED_CIC: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CONFUSION: - offset += dissect_isup_confusion_message(parameter_tvb, isup_tree); - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_OVERLOAD: - /* no dissector necessary since no mandatory parameters included */ - break; - case MESSAGE_TYPE_CHARGE_INFO: - /* do nothing since format is a national matter */ - bufferlength = tvb_length_remaining(message_tvb, offset); - if (bufferlength != 0) - proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); - break; - case MESSAGE_TYPE_NETW_RESRC_MGMT: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_FACILITY: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_USER_PART_TEST: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_USER_PART_AVAIL: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_IDENT_REQ: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_IDENT_RSP: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SEGMENTATION: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_LOOP_PREVENTION: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_APPLICATION_TRANS: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_PRE_RELEASE_INFO: - /* no dissector necessary since no mandatory parameters included */ - opt_part_possible = TRUE; - break; - case MESSAGE_TYPE_SUBSEQUENT_DIR_NUM: - /* do nothing since format is a national matter */ - bufferlength = tvb_length_remaining(message_tvb, offset); - if (bufferlength != 0) - proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); - break; - case ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK: - /* no dissector necessary since no mandatory parameters included */ - break; - case ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES: - offset += dissect_ansi_isup_circuit_reservation_message( parameter_tvb, isup_tree ); - break; - case ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP: - opt_part_possible = TRUE; - offset += dissect_ansi_isup_circuit_validation_test_resp_message( parameter_tvb, isup_tree ); - break; - case ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST: - /* no dissector necessary since no mandatory parameters included */ - break; - default: - bufferlength = tvb_length_remaining(message_tvb, offset); - if (bufferlength != 0) - proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Unknown Message type (possibly reserved/used in former ISUP version)"); - break; - } - break; - } + switch (isup_standard){ + case ITU_STANDARD: + switch (message_type) { + case MESSAGE_TYPE_INITIAL_ADDR: + offset += dissect_isup_initial_address_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SUBSEQ_ADDR: + offset += dissect_isup_subsequent_address_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_INFO_REQ: + offset += dissect_isup_information_request_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_INFO: + offset += dissect_isup_information_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_CONTINUITY: + offset += dissect_isup_continuity_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_ADDR_CMPL: + offset += dissect_isup_address_complete_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_CONNECT: + offset += dissect_isup_connect_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FORW_TRANS: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_ANSWER: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_RELEASE: + offset += dissect_isup_release_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SUSPEND: + offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_RESUME: + offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_REL_CMPL: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_CONT_CHECK_REQ: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_RESET_CIRCUIT: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_BLOCKING: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_UNBLOCKING: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_BLOCK_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_UNBLOCK_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CIRC_GRP_RST: + offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_BLCK: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_UNBL: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_BL_ACK: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_UNBL_ACK: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_FACILITY_REQ: + offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FACILITY_ACC: + offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FACILITY_REJ: + offset += dissect_isup_facility_reject_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_LOOP_BACK_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_PASS_ALONG: + /* call dissect_isup_message recursively */ + { + guint8 pa_message_type; + pa_message_type = tvb_get_guint8(parameter_tvb, 0); + pass_along_item = proto_tree_add_text(isup_tree, parameter_tvb, offset, -1, + "Pass-along: %s Message (%u)", + val_to_str_ext_const(pa_message_type, &isup_message_type_value_acro_ext, "reserved"), + pa_message_type); + pass_along_tree = proto_item_add_subtree(pass_along_item, ett_isup_pass_along_message); + dissect_isup_message(parameter_tvb, pinfo, pass_along_tree); + break; + } + case MESSAGE_TYPE_CIRC_GRP_RST_ACK: + offset += dissect_isup_circuit_group_reset_acknowledgement_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_QRY: + offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_QRY_RSP: + offset += dissect_isup_circuit_group_query_response_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CALL_PROGRSS: + offset += dissect_isup_call_progress_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_USER2USER_INFO: + offset += dissect_isup_user_to_user_information_message(parameter_tvb, pinfo, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_UNEQUIPPED_CIC: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CONFUSION: + offset += dissect_isup_confusion_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_OVERLOAD: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CHARGE_INFO: + /* do nothing since format is a national matter */ + bufferlength = tvb_length_remaining(message_tvb, offset); + if (bufferlength != 0) + proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); + break; + case MESSAGE_TYPE_NETW_RESRC_MGMT: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FACILITY: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_USER_PART_TEST: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_USER_PART_AVAIL: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_IDENT_REQ: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_IDENT_RSP: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SEGMENTATION: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_LOOP_PREVENTION: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_APPLICATION_TRANS: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_PRE_RELEASE_INFO: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SUBSEQUENT_DIR_NUM: + /* do nothing since format is a national matter */ + bufferlength = tvb_length_remaining(message_tvb, offset); + if (bufferlength != 0) + proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); + break; + default: + bufferlength = tvb_length_remaining(message_tvb, offset); + if (bufferlength != 0) + proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Unknown Message type (possibly reserved/used in former ISUP version)"); + break; + } + break; + case ANSI_STANDARD: + /* TODO if neccessary make new "dissect_ansi_isup_xxx() routines or add branches in the current ones. + */ + switch (message_type) { + case MESSAGE_TYPE_INITIAL_ADDR: + offset += dissect_isup_initial_address_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SUBSEQ_ADDR: + offset += dissect_isup_subsequent_address_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_INFO_REQ: + offset += dissect_isup_information_request_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_INFO: + offset += dissect_isup_information_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_CONTINUITY: + offset += dissect_isup_continuity_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_ADDR_CMPL: + offset += dissect_isup_address_complete_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_CONNECT: + offset += dissect_isup_connect_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FORW_TRANS: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_ANSWER: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_RELEASE: + offset += dissect_isup_release_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SUSPEND: + offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_RESUME: + offset += dissect_isup_suspend_resume_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_REL_CMPL: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CONT_CHECK_REQ: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_RESET_CIRCUIT: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_BLOCKING: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_UNBLOCKING: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_BLOCK_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_UNBLOCK_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CIRC_GRP_RST: + offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_BLCK: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_UNBL: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_BL_ACK: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_UNBL_ACK: + offset += dissect_isup_circuit_group_blocking_messages(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_FACILITY_REQ: + offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FACILITY_ACC: + offset += dissect_isup_facility_request_accepted_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FACILITY_REJ: + offset += dissect_isup_facility_reject_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_LOOP_BACK_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_PASS_ALONG: + /* call dissect_isup_message recursively */ + { + guint8 pa_message_type; + pa_message_type = tvb_get_guint8(parameter_tvb, 0); + pass_along_item = proto_tree_add_text(isup_tree, parameter_tvb, offset, -1, + "Pass-along: %s Message (%u)", + val_to_str_ext_const(pa_message_type, &isup_message_type_value_acro_ext, "reserved"), + pa_message_type); + pass_along_tree = proto_item_add_subtree(pass_along_item, ett_isup_pass_along_message); + dissect_isup_message(parameter_tvb, pinfo, pass_along_tree); + break; + } + case MESSAGE_TYPE_CIRC_GRP_RST_ACK: + offset += dissect_isup_circuit_group_reset_acknowledgement_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_QRY: + offset += dissect_isup_circuit_group_reset_query_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CIRC_GRP_QRY_RSP: + offset += dissect_isup_circuit_group_query_response_message(parameter_tvb, isup_tree); + break; + case MESSAGE_TYPE_CALL_PROGRSS: + offset += dissect_isup_call_progress_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_USER2USER_INFO: + offset += dissect_isup_user_to_user_information_message(parameter_tvb, pinfo, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_UNEQUIPPED_CIC: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CONFUSION: + offset += dissect_isup_confusion_message(parameter_tvb, isup_tree); + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_OVERLOAD: + /* no dissector necessary since no mandatory parameters included */ + break; + case MESSAGE_TYPE_CHARGE_INFO: + /* do nothing since format is a national matter */ + bufferlength = tvb_length_remaining(message_tvb, offset); + if (bufferlength != 0) + proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); + break; + case MESSAGE_TYPE_NETW_RESRC_MGMT: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_FACILITY: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_USER_PART_TEST: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_USER_PART_AVAIL: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_IDENT_REQ: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_IDENT_RSP: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SEGMENTATION: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_LOOP_PREVENTION: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_APPLICATION_TRANS: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_PRE_RELEASE_INFO: + /* no dissector necessary since no mandatory parameters included */ + opt_part_possible = TRUE; + break; + case MESSAGE_TYPE_SUBSEQUENT_DIR_NUM: + /* do nothing since format is a national matter */ + bufferlength = tvb_length_remaining(message_tvb, offset); + if (bufferlength != 0) + proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Format is a national matter"); + break; + case ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES_ACK: + /* no dissector necessary since no mandatory parameters included */ + break; + case ANSI_ISUP_MESSAGE_TYPE_CIRCUIT_RES: + offset += dissect_ansi_isup_circuit_reservation_message( parameter_tvb, isup_tree ); + break; + case ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST_RSP: + opt_part_possible = TRUE; + offset += dissect_ansi_isup_circuit_validation_test_resp_message( parameter_tvb, isup_tree ); + break; + case ANSI_ISUP_MESSAGE_TYPE_CCT_VAL_TEST: + /* no dissector necessary since no mandatory parameters included */ + break; + default: + bufferlength = tvb_length_remaining(message_tvb, offset); + if (bufferlength != 0) + proto_tree_add_text(isup_tree, parameter_tvb, 0, bufferlength, "Unknown Message type (possibly reserved/used in former ISUP version)"); + break; + } + break; + } /* extract pointer to start of optional part (if any) */ if (opt_part_possible == TRUE){ @@ -7034,14 +7167,14 @@ dissect_isup_message(tvbuff_t *message_tvb, packet_info *pinfo, proto_tree *isup proto_tree_add_uint_format(isup_tree, hf_isup_pointer_to_start_of_optional_part, message_tvb, offset, PARAMETER_POINTER_LENGTH, opt_parameter_pointer, "Pointer to start of optional part: %u", opt_parameter_pointer); offset += opt_parameter_pointer; optional_parameter_tvb = tvb_new_subset_remaining(message_tvb, offset); - switch(isup_standard){ - case ITU_STANDARD: - dissect_isup_optional_parameter(optional_parameter_tvb, pinfo, isup_tree); - break; - case ANSI_STANDARD: - dissect_ansi_isup_optional_parameter(optional_parameter_tvb, pinfo, isup_tree); - break; - } + switch(isup_standard){ + case ITU_STANDARD: + dissect_isup_optional_parameter(optional_parameter_tvb, pinfo, isup_tree); + break; + case ANSI_STANDARD: + dissect_ansi_isup_optional_parameter(optional_parameter_tvb, pinfo, isup_tree); + break; + } } else proto_tree_add_uint_format(isup_tree, hf_isup_pointer_to_start_of_optional_part, message_tvb, offset, PARAMETER_POINTER_LENGTH, opt_parameter_pointer, "No optional parameter present (Pointer: %u)", opt_parameter_pointer); @@ -7062,75 +7195,81 @@ dissect_isup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* Set up structures needed to add the protocol subtree and manage it */ - proto_item *ti; - proto_tree *isup_tree = NULL; - tvbuff_t *message_tvb; - guint16 cic; - guint8 message_type; - - switch(mtp3_standard){ - case ANSI_STANDARD: - isup_standard = ANSI_STANDARD; - break; - default: - isup_standard = ITU_STANDARD; - } + proto_item *ti; + proto_tree *isup_tree = NULL; + tvbuff_t *message_tvb; + guint16 cic; + guint8 message_type; + + switch(mtp3_standard){ + case ANSI_STANDARD: + isup_standard = ANSI_STANDARD; + break; + default: + isup_standard = ITU_STANDARD; + } /* Make entries in Protocol column and Info column on summary display */ - switch (isup_standard){ - case ITU_STANDARD: - col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISUP(ITU)"); - break; - case ANSI_STANDARD: - col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISUP(ANSI)"); - break; - } + switch (isup_standard){ + case ITU_STANDARD: + col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISUP(ITU)"); + break; + case ANSI_STANDARD: + col_set_str(pinfo->cinfo, COL_PROTOCOL, "ISUP(ANSI)"); + break; + } /* Extract message type field */ - message_type = tvb_get_guint8(tvb, CIC_OFFSET + CIC_LENGTH); - /* dissect CIC in main dissector since pass-along message type carrying complete IUSP message w/o CIC needs - recursive message dissector call */ - if (mtp3_standard == ANSI_STANDARD) - cic = tvb_get_letohs(tvb, CIC_OFFSET) & 0x3FFF; /*since upper 2 bits spare */ - else /* ITU, China, and Japan; yes, J7's CICs are a different size */ - cic = tvb_get_letohs(tvb, CIC_OFFSET) & 0x0FFF; /*since upper 4 bits spare */ - - pinfo->ctype = CT_ISUP; - pinfo->circuit_id = cic; - - if (isup_show_cic_in_info){ - switch (isup_standard){ - case ITU_STANDARD: - col_add_fstr(pinfo->cinfo, COL_INFO, "%s (CIC %u) ", val_to_str(message_type, isup_message_type_value_acro, "reserved"), cic); - break; - case ANSI_STANDARD: - col_add_fstr(pinfo->cinfo, COL_INFO, "%s (CIC %u) ", val_to_str(message_type, ansi_isup_message_type_value_acro, "reserved"), cic); - break; - } - }else{ - switch (isup_standard){ - case ITU_STANDARD: - col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(message_type, isup_message_type_value_acro, "reserved")); - break; - case ANSI_STANDARD: - col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(message_type, ansi_isup_message_type_value_acro, "reserved")); - break; - } - } - - /* In the interest of speed, if "tree" is NULL, don't do any work not - * necessary to generate protocol tree items. - */ - if (tree) { - ti = proto_tree_add_item(tree, proto_isup, tvb, 0, -1, FALSE); - isup_tree = proto_item_add_subtree(ti, ett_isup); - - - proto_tree_add_uint_format(isup_tree, hf_isup_cic, tvb, CIC_OFFSET, CIC_LENGTH, cic, "CIC: %u", cic); - } - - message_tvb = tvb_new_subset_remaining(tvb, CIC_LENGTH); - dissect_isup_message(message_tvb, pinfo, isup_tree); + message_type = tvb_get_guint8(tvb, CIC_OFFSET + CIC_LENGTH); + /* dissect CIC in main dissector since pass-along message type carrying complete IUSP message w/o CIC needs + recursive message dissector call */ + if (mtp3_standard == ANSI_STANDARD) + cic = tvb_get_letohs(tvb, CIC_OFFSET) & 0x3FFF; /*since upper 2 bits spare */ + else /* ITU, China, and Japan; yes, J7's CICs are a different size */ + cic = tvb_get_letohs(tvb, CIC_OFFSET) & 0x0FFF; /*since upper 4 bits spare */ + + pinfo->ctype = CT_ISUP; + pinfo->circuit_id = cic; + + if (isup_show_cic_in_info){ + switch (isup_standard){ + case ITU_STANDARD: + col_add_fstr(pinfo->cinfo, COL_INFO, + "%s (CIC %u) ", + val_to_str_ext_const(message_type, &isup_message_type_value_acro_ext, "reserved"), + cic); + break; + case ANSI_STANDARD: + col_add_fstr(pinfo->cinfo, COL_INFO, + "%s (CIC %u) ", + val_to_str_ext_const(message_type, &ansi_isup_message_type_value_acro_ext, "reserved"), + cic); + break; + } + }else{ + switch (isup_standard){ + case ITU_STANDARD: + col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str_ext_const(message_type, &isup_message_type_value_acro_ext, "reserved")); + break; + case ANSI_STANDARD: + col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str_ext_const(message_type, &ansi_isup_message_type_value_acro_ext, "reserved")); + break; + } + } + + /* In the interest of speed, if "tree" is NULL, don't do any work not + * necessary to generate protocol tree items. + */ + if (tree) { + ti = proto_tree_add_item(tree, proto_isup, tvb, 0, -1, FALSE); + isup_tree = proto_item_add_subtree(ti, ett_isup); + + + proto_tree_add_uint_format(isup_tree, hf_isup_cic, tvb, CIC_OFFSET, CIC_LENGTH, cic, "CIC: %u", cic); + } + + message_tvb = tvb_new_subset_remaining(tvb, CIC_LENGTH); + dissect_isup_message(message_tvb, pinfo, isup_tree); } /* ------------------------------------------------------------------ */ @@ -7139,75 +7278,82 @@ dissect_bicc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* Set up structures needed to add the protocol subtree and manage it */ - proto_item *ti; - proto_tree *bicc_tree = NULL; - tvbuff_t *message_tvb; - guint32 bicc_cic; - guint8 message_type; + proto_item *ti; + proto_tree *bicc_tree = NULL; + tvbuff_t *message_tvb; + guint32 bicc_cic; + guint8 message_type; - /*circuit_t *circuit;*/ + /*circuit_t *circuit;*/ /* Make entries in Protocol column and Info column on summary display */ - col_set_str(pinfo->cinfo, COL_PROTOCOL, "BICC"); + col_set_str(pinfo->cinfo, COL_PROTOCOL, "BICC"); /* Extract message type field */ - message_type = tvb_get_guint8(tvb, BICC_CIC_OFFSET + BICC_CIC_LENGTH); + message_type = tvb_get_guint8(tvb, BICC_CIC_OFFSET + BICC_CIC_LENGTH); - bicc_cic = tvb_get_letohl(tvb, BICC_CIC_OFFSET); + bicc_cic = tvb_get_letohl(tvb, BICC_CIC_OFFSET); - pinfo->ctype = CT_BICC; - pinfo->circuit_id = bicc_cic; + pinfo->ctype = CT_BICC; + pinfo->circuit_id = bicc_cic; - if (isup_show_cic_in_info) { - col_add_fstr(pinfo->cinfo, COL_INFO, "%s (CIC %u) ", val_to_str(message_type, isup_message_type_value_acro, "reserved"), bicc_cic); - } else { - col_add_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(message_type, isup_message_type_value_acro, "reserved")); - } - /* dissect CIC in main dissector since pass-along message type carrying complete BICC/ISUP message w/o CIC needs - * recursive message dissector call - */ - /* In the interest of speed, if "tree" is NULL, don't do any work not - * necessary to generate protocol tree items. - */ - if (tree) { - ti = proto_tree_add_item(tree, proto_bicc, tvb, 0, -1, FALSE); - bicc_tree = proto_item_add_subtree(ti, ett_bicc); + if (isup_show_cic_in_info) { + col_add_fstr(pinfo->cinfo, COL_INFO, + "%s (CIC %u) ", + val_to_str_ext_const(message_type, &isup_message_type_value_acro_ext, "reserved"), + bicc_cic); + } else { + col_add_fstr(pinfo->cinfo, COL_INFO, + "%s ", + val_to_str_ext_const(message_type, &isup_message_type_value_acro_ext, "reserved")); + } + /* dissect CIC in main dissector since pass-along message type carrying complete BICC/ISUP message w/o CIC needs + * recursive message dissector call + */ + /* In the interest of speed, if "tree" is NULL, don't do any work not + * necessary to generate protocol tree items. + */ + if (tree) { + ti = proto_tree_add_item(tree, proto_bicc, tvb, 0, -1, FALSE); + bicc_tree = proto_item_add_subtree(ti, ett_bicc); - proto_tree_add_uint_format(bicc_tree, hf_bicc_cic, tvb, BICC_CIC_OFFSET, BICC_CIC_LENGTH, bicc_cic, "CIC: %u", bicc_cic); - } + proto_tree_add_uint_format(bicc_tree, hf_bicc_cic, tvb, BICC_CIC_OFFSET, BICC_CIC_LENGTH, bicc_cic, "CIC: %u", bicc_cic); + } - message_tvb = tvb_new_subset_remaining(tvb, BICC_CIC_LENGTH); - dissect_isup_message(message_tvb, pinfo, bicc_tree); + message_tvb = tvb_new_subset_remaining(tvb, BICC_CIC_LENGTH); + dissect_isup_message(message_tvb, pinfo, bicc_tree); } static void dissect_application_isup(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { /* Set up structures needed to add the protocol subtree and manage it */ - proto_item *ti; - proto_tree *isup_tree = NULL; - tvbuff_t *message_tvb; - guint8 message_type; + proto_item *ti; + proto_tree *isup_tree = NULL; + tvbuff_t *message_tvb; + guint8 message_type; /* Make entries in Protocol column and Info column on summary display */ - col_append_str(pinfo->cinfo, COL_PROTOCOL, "/ISUP(ITU)"); + col_append_str(pinfo->cinfo, COL_PROTOCOL, "/ISUP(ITU)"); /* Extract message type field */ - message_type = tvb_get_guint8(tvb, 0); - /* application/ISUP has no CIC */ - col_append_sep_fstr(pinfo->cinfo, COL_INFO, ", ", "ISUP:%s", val_to_str(message_type, isup_message_type_value_acro, "reserved")); + message_type = tvb_get_guint8(tvb, 0); + /* application/ISUP has no CIC */ + col_append_sep_fstr(pinfo->cinfo, COL_INFO, ", ", + "ISUP:%s", + val_to_str_ext_const(message_type, &isup_message_type_value_acro_ext, "reserved")); /* In the interest of speed, if "tree" is NULL, don't do any work not necessary to generate protocol tree items. */ - if (tree) { - ti = proto_tree_add_item(tree, proto_isup, tvb, 0, -1, FALSE); - isup_tree = proto_item_add_subtree(ti, ett_isup); - } + if (tree) { + ti = proto_tree_add_item(tree, proto_isup, tvb, 0, -1, FALSE); + isup_tree = proto_item_add_subtree(ti, ett_isup); + } - message_tvb = tvb_new_subset_remaining(tvb, 0); - dissect_isup_message(message_tvb, pinfo, isup_tree); + message_tvb = tvb_new_subset_remaining(tvb, 0); + dissect_isup_message(message_tvb, pinfo, isup_tree); } /* ---------------------------------------------------- stats tree */ @@ -7217,31 +7363,31 @@ static int st_node_dir = -1; static void msg_stats_tree_init(stats_tree* st) { - st_node_msg = stats_tree_create_node(st, "Messages by Type", 0, TRUE); - st_node_dir = stats_tree_create_node(st, "Messages by Direction", 0, TRUE); + st_node_msg = stats_tree_create_node(st, "Messages by Type", 0, TRUE); + st_node_dir = stats_tree_create_node(st, "Messages by Direction", 0, TRUE); } static int msg_stats_tree_packet(stats_tree *st, packet_info *pinfo, epan_dissect_t *edt _U_, const void *p ) { - const gchar* msg = match_strval(((const isup_tap_rec_t*)p)->message_type, isup_message_type_value_acro); - gchar src[MAX_ADDR_STR_LEN]; - gchar dst[MAX_ADDR_STR_LEN]; - gchar dir[MAX_ADDR_STR_LEN]; - int msg_node; - int dir_node; + const gchar* msg = match_strval_ext(((const isup_tap_rec_t*)p)->message_type, &isup_message_type_value_acro_ext); + gchar src[MAX_ADDR_STR_LEN]; + gchar dst[MAX_ADDR_STR_LEN]; + gchar dir[MAX_ADDR_STR_LEN]; + int msg_node; + int dir_node; - address_to_str_buf(&(pinfo->src), src, sizeof src); - address_to_str_buf(&(pinfo->dst), dst, sizeof dst); - g_snprintf(dir,sizeof(dir),"%s->%s",src,dst); + address_to_str_buf(&(pinfo->src), src, sizeof src); + address_to_str_buf(&(pinfo->dst), dst, sizeof dst); + g_snprintf(dir,sizeof(dir),"%s->%s",src,dst); - msg_node = tick_stat_node(st, msg, st_node_msg, TRUE); - tick_stat_node(st, dir, msg_node, FALSE); + msg_node = tick_stat_node(st, msg, st_node_msg, TRUE); + tick_stat_node(st, dir, msg_node, FALSE); - dir_node = tick_stat_node(st, dir, st_node_dir, TRUE); - tick_stat_node(st, msg, dir_node, FALSE); + dir_node = tick_stat_node(st, dir, st_node_dir, TRUE); + tick_stat_node(st, msg, dir_node, FALSE); - return 1; + return 1; } /*---------------------------------------------------------------------*/ @@ -7250,1011 +7396,1011 @@ void proto_register_isup(void) { /* Setup list of header fields See Section 1.6.1 for details*/ - static hf_register_info hf[] = { - { &hf_isup_cic, - { "CIC", "isup.cic", - FT_UINT16, BASE_HEX, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_message_type, - { "Message Type", "isup.message_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_parameter_type, - { "Parameter Type", "isup.parameter_type", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_parameter_length, - { "Parameter Length", "isup.parameter_length", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_mandatory_variable_parameter_pointer, - { "Pointer to Parameter", "isup.mandatory_variable_parameter_pointer", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_pointer_to_start_of_optional_part, - { "Pointer to optional parameter part", "isup.optional_parameter_part_pointer", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_satellite_indicator, - { "Satellite Indicator", "isup.satellite_indicator", - FT_UINT8, BASE_HEX, VALS(isup_satellite_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_continuity_check_indicator, - { "Continuity Check Indicator", "isup.continuity_check_indicator", - FT_UINT8, BASE_HEX, VALS(isup_continuity_check_ind_value), DC_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_echo_control_device_indicator, - { "Echo Control Device Indicator", "isup.echo_control_device_indicator", - FT_BOOLEAN, 8, TFS(&isup_echo_control_device_ind_value),E_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_natnl_inatnl_call_indicator, - { "National/international call indicator", "isup.forw_call_natnl_inatnl_call_indicator", - FT_BOOLEAN, 16, TFS(&isup_natnl_inatnl_call_ind_value),A_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_end_to_end_method_indicator, - { "End-to-end method indicator", "isup.forw_call_end_to_end_method_indicator", - FT_UINT16, BASE_HEX, VALS(isup_end_to_end_method_ind_value), CB_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_interworking_indicator, - { "Interworking indicator", "isup.forw_call_interworking_indicator", - FT_BOOLEAN, 16, TFS(&isup_interworking_ind_value), D_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_end_to_end_info_indicator, - { "End-to-end information indicator", "isup.forw_call_end_to_end_information_indicator", - FT_BOOLEAN, 16, TFS(&isup_end_to_end_info_ind_value), E_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_isdn_user_part_indicator, - { "ISDN user part indicator", "isup.forw_call_isdn_user_part_indicator", - FT_BOOLEAN, 16, TFS(&isup_ISDN_user_part_ind_value), F_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_preferences_indicator, - { "ISDN user part preference indicator", "isup.forw_call_preferences_indicator", - FT_UINT16, BASE_HEX, VALS(isup_preferences_ind_value), HG_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_isdn_access_indicator, - { "ISDN access indicator", "isup.forw_call_isdn_access_indicator", - FT_BOOLEAN, 16, TFS(&isup_ISDN_originating_access_ind_value), I_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_sccp_method_indicator, - { "SCCP method indicator", "isup.forw_call_sccp_method_indicator", - FT_UINT16, BASE_HEX, VALS(isup_SCCP_method_ind_value), KJ_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_ported_num_trans_indicator, - { "Ported number translation indicator", "isup.forw_call_ported_num_trans_indicator", - FT_BOOLEAN, 16, TFS(&isup_ISDN_ported_num_trans_ind_value), M_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_forw_call_qor_attempt_indicator, - { "Query on Release attempt indicator", "isup.forw_call_isdn_access_indicator", - FT_BOOLEAN, 16, TFS(&isup_ISDN_qor_attempt_ind_value), N_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_partys_category, - { "Calling Party's category", "isup.calling_partys_category", - FT_UINT8, BASE_HEX, VALS(isup_calling_partys_category_value), 0x0, - NULL, HFILL }}, - - { &hf_isup_transmission_medium_requirement, - { "Transmission medium requirement", "isup.transmission_medium_requirement", - FT_UINT8, BASE_DEC, VALS(isup_transmission_medium_requirement_value), 0x0, - NULL, HFILL }}, - - { &hf_isup_odd_even_indicator, - { "Odd/even indicator", "isup.isdn_odd_even_indicator", - FT_BOOLEAN, 8, TFS(&isup_odd_even_ind_value), ISUP_ODD_EVEN_MASK, - NULL, HFILL }}, - - { &hf_isup_generic_name_presentation, - { "Presentation indicator", "isup.isdn_generic_name_presentation", - FT_UINT8, BASE_DEC, VALS(isup_generic_name_presentation_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_generic_name_availability, - { "Availability indicator", "isup.isdn_generic_name_availability", - FT_BOOLEAN, 8, TFS(&isup_generic_name_availability_value), E_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_generic_name_type, - { "Type indicator", "isup.isdn_generic_name_type", - FT_UINT8, BASE_DEC, VALS(isup_generic_name_type_value), HGF_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_generic_name_ia5, - { "Generic Name", "isup.isdn_generic_name_ia5", - FT_STRING, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_called_party_nature_of_address_indicator, - { "Nature of address indicator", "isup.called_party_nature_of_address_indicator", - FT_UINT8, BASE_DEC, VALS(isup_called_party_nature_of_address_ind_value), ISUP_NATURE_OF_ADDRESS_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_party_nature_of_address_indicator, - { "Nature of address indicator", "isup.calling_party_nature_of_address_indicator", - FT_UINT8, BASE_DEC, VALS(isup_calling_party_nature_of_address_ind_value), ISUP_NATURE_OF_ADDRESS_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_charge_number_nature_of_address_indicator, - { "Nature of address indicator", "isup.charge_number_nature_of_address_indicator", - FT_UINT8, BASE_DEC, VALS(isup_charge_number_nature_of_address_ind_value), ISUP_NATURE_OF_ADDRESS_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_inn_indicator, - { "INN indicator", "isup.inn_indicator", - FT_BOOLEAN, 8, TFS(&isup_INN_ind_value), ISUP_INN_MASK, - NULL, HFILL }}, - - { &hf_isup_ni_indicator, - { "NI indicator", "isup.ni_indicator", - FT_BOOLEAN, 8, TFS(&isup_NI_ind_value), ISUP_NI_MASK, - NULL, HFILL }}, - - { &hf_isup_numbering_plan_indicator, - { "Numbering plan indicator", "isup.numbering_plan_indicator", - FT_UINT8, BASE_DEC, VALS(isup_numbering_plan_ind_value), ISUP_NUMBERING_PLAN_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_address_presentation_restricted_indicator, - { "Address presentation restricted indicator", "isup.address_presentation_restricted_indicator", - FT_UINT8, BASE_DEC, VALS(isup_address_presentation_restricted_ind_value), ISUP_ADDRESS_PRESENTATION_RESTR_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_screening_indicator, - { "Screening indicator", "isup.screening_indicator", - FT_UINT8, BASE_DEC, VALS(isup_screening_ind_value), ISUP_SCREENING_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_screening_indicator_enhanced, - { "Screening indicator", "isup.screening_indicator_enhanced", - FT_UINT8, BASE_DEC, VALS(isup_screening_ind_enhanced_value), ISUP_SCREENING_IND_MASK, - NULL, HFILL }}, - - { &hf_isup_called_party_odd_address_signal_digit, - { "Address signal digit", "isup.called_party_odd_address_signal_digit", - FT_UINT8, BASE_DEC, VALS(isup_called_party_address_digit_value), ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_party_odd_address_signal_digit, - { "Address signal digit", "isup.calling_party_odd_address_signal_digit", - FT_UINT8, BASE_DEC, VALS(isup_calling_party_address_digit_value), ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK, - NULL, HFILL }}, - - { &hf_isup_called_party_even_address_signal_digit, - { "Address signal digit", "isup.called_party_even_address_signal_digit", - FT_UINT8, BASE_DEC, VALS(isup_called_party_address_digit_value), ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_party_even_address_signal_digit, - { "Address signal digit", "isup.calling_party_even_address_signal_digit", - FT_UINT8, BASE_DEC, VALS(isup_calling_party_address_digit_value), ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_party_address_request_indicator, - { "Calling party address request indicator", "isup.calling_party_address_request_indicator", - FT_BOOLEAN, 16, TFS(&isup_calling_party_address_request_ind_value), A_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_info_req_holding_indicator, - { "Holding indicator", "isup.info_req_holding_indicator", - FT_BOOLEAN, 16, TFS(&isup_holding_ind_value), B_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_partys_category_request_indicator, - { "Calling party's category request indicator", "isup.calling_partys_category_request_indicator", - FT_BOOLEAN, 16, TFS(&isup_calling_partys_category_request_ind_value), D_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_charge_information_request_indicator, - { "Charge information request indicator", "isup.charge_information_request_indicator", - FT_BOOLEAN, 16, TFS(&isup_charge_information_request_ind_value), E_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_malicious_call_identification_request_indicator, - { "Malicious call identification request indicator (ISUP'88)", "isup.malicious_call_ident_request_indicator", - FT_BOOLEAN, 16, TFS(&isup_malicious_call_identification_request_ind_value), H_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_party_address_response_indicator, - { "Calling party address response indicator", "isup.calling_party_address_response_indicator", - FT_UINT16, BASE_HEX, VALS(isup_calling_party_address_response_ind_value), BA_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_OECD_inf_ind, - { "OECD information indicator", "isup.OECD_inf_ind_vals", - FT_UINT8, BASE_HEX, VALS(OECD_inf_ind_vals), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_IECD_inf_ind, - { "IECD information indicator", "isup.IECD_inf_ind_vals", - FT_UINT8, BASE_HEX, VALS(IECD_inf_ind_vals), DC_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_OECD_req_ind, - { "OECD request indicator", "isup.OECD_req_ind_vals", - FT_UINT8, BASE_HEX, VALS(OECD_req_ind_vals), FE_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_IECD_req_ind, - { "IECD request indicator", "isup.IECD_req_ind_vals", - FT_UINT8, BASE_HEX, VALS(IECD_req_ind_vals), HG_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_hold_provided_indicator, - { "Hold provided indicator", "isup.hold_provided_indicator", - FT_BOOLEAN, 16, TFS(&isup_hold_provided_ind_value), C_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_calling_partys_category_response_indicator, - { "Calling party's category response indicator", "isup.calling_partys_category_response_indicator", - FT_BOOLEAN, 16, TFS(&isup_calling_partys_category_response_ind_value), F_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_charge_information_response_indicator, - { "Charge information response indicator", "isup.charge_information_response_indicator", - FT_BOOLEAN, 16, TFS(&isup_charge_information_response_ind_value), G_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_solicited_indicator, - { "Solicited indicator", "isup.solicided_indicator", - FT_BOOLEAN, 16, TFS(&isup_solicited_information_ind_value), H_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_continuity_indicator, - { "Continuity indicator", "isup.continuity_indicator", - FT_BOOLEAN, 8, TFS(&isup_continuity_ind_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_charge_ind, - { "Charge indicator", "isup.charge_indicator", - FT_UINT16, BASE_HEX, VALS(isup_charge_ind_value), BA_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_called_partys_status_ind, - { "Called party's status indicator", "isup.called_partys_status_indicator", - FT_UINT16, BASE_HEX, VALS(isup_called_partys_status_ind_value), DC_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_called_partys_category_ind, - { "Called party's category indicator", "isup.called_partys_category_indicator", - FT_UINT16, BASE_HEX, VALS(isup_called_partys_category_ind_value), FE_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_end_to_end_method_ind, - { "End-to-end method indicator", "isup.backw_call_end_to_end_method_indicator", - FT_UINT16, BASE_HEX, VALS(isup_end_to_end_method_ind_value), HG_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_interworking_ind, - { "Interworking indicator", "isup.backw_call_interworking_indicator", - FT_BOOLEAN, 16, TFS(&isup_interworking_ind_value), I_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_end_to_end_info_ind, - { "End-to-end information indicator", "isup.backw_call_end_to_end_information_indicator", - FT_BOOLEAN, 16, TFS(&isup_end_to_end_info_ind_value), J_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_isdn_user_part_ind, - { "ISDN user part indicator", "isup.backw_call_isdn_user_part_indicator", - FT_BOOLEAN, 16, TFS(&isup_ISDN_user_part_ind_value), K_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_holding_ind, - { "Holding indicator", "isup.backw_call_holding_indicator", - FT_BOOLEAN, 16, TFS(&isup_holding_ind_value), L_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_isdn_access_ind, - { "ISDN access indicator", "isup.backw_call_isdn_access_indicator", - FT_BOOLEAN, 16, TFS(&isup_ISDN_terminating_access_ind_value), M_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_echo_control_device_ind, - { "Echo Control Device Indicator", "isup.backw_call_echo_control_device_indicator", - FT_BOOLEAN, 16, TFS(&isup_echo_control_device_ind_value), N_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_backw_call_sccp_method_ind, - { "SCCP method indicator", "isup.backw_call_sccp_method_indicator", - FT_UINT16, BASE_HEX, VALS(isup_SCCP_method_ind_value), PO_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_cause_indicator, - { "Cause indicator", "isup.cause_indicator", - FT_UINT8, BASE_DEC, VALS(q850_cause_code_vals), 0x7f, - NULL, HFILL }}, - - { &hf_ansi_isup_cause_indicator, - { "Cause indicator", "ansi_isup.cause_indicator", - FT_UINT8, BASE_DEC, VALS(ansi_isup_cause_code_vals), 0x7f, - NULL, HFILL }}, - - { &hf_isup_suspend_resume_indicator, - { "Suspend/Resume indicator", "isup.suspend_resume_indicator", - FT_BOOLEAN, 8, TFS(&isup_suspend_resume_ind_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_range_indicator, - { "Range indicator", "isup.range_indicator", - FT_UINT8, BASE_DEC, NULL , 0x0, - NULL, HFILL }}, - - { &hf_isup_cgs_message_type, - { "Circuit group supervision message type", "isup.cgs_message_type", - FT_UINT8, BASE_DEC, VALS(isup_cgs_message_type_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_mtc_blocking_state1, - { "Maintenance blocking state", "isup.mtc_blocking_state", - FT_UINT8, BASE_DEC, VALS(isup_mtc_blocking_state_DC00_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_mtc_blocking_state2, - { "Maintenance blocking state", "isup.mtc_blocking_state", - FT_UINT8, BASE_DEC, VALS(isup_mtc_blocking_state_DCnot00_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_call_proc_state, - { "Call processing state", "isup.call_processing_state", - FT_UINT8, BASE_DEC, VALS(isup_call_processing_state_value), DC_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_hw_blocking_state, - { "HW blocking state", "isup.hw_blocking_state", - FT_UINT8, BASE_DEC, VALS(isup_HW_blocking_state_value), FE_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_event_ind, - { "Event indicator", "isup.event_ind", - FT_UINT8, BASE_DEC, VALS(isup_event_ind_value), GFEDCBA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_event_presentation_restricted_ind, - { "Event presentation restricted indicator", "isup.event_presentatiation_restr_ind", - FT_BOOLEAN, 8, TFS(&isup_event_presentation_restricted_ind_value), H_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_cug_call_ind, - { "Closed user group call indicator", "isup.clg_call_ind", - FT_UINT8, BASE_DEC, VALS(isup_CUG_call_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_simple_segmentation_ind, - { "Simple segmentation indicator", "isup.simple_segmentation_ind", - FT_BOOLEAN, 8, TFS(&isup_simple_segmentation_ind_value), C_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_connected_line_identity_request_ind, - { "Connected line identity request indicator", "isup.connected_line_identity_request_ind", - FT_BOOLEAN, 8, TFS(&isup_connected_line_identity_request_ind_value), H_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_redirecting_ind, - { "Redirection indicator", "isup.redirecting_ind", - FT_UINT16, BASE_DEC, VALS(isup_redirecting_ind_value), CBA_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_original_redirection_reason, - { "Original redirection reason", "isup.original_redirection_reason", - FT_UINT16, BASE_DEC, VALS(isup_original_redirection_reason_value), HGFE_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_redirection_counter, - { "Redirection counter", "isup.redirection_counter", - FT_UINT16, BASE_DEC, NULL, KJI_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_redirection_reason, - { "Redirection reason", "isup.redirection_reason", - FT_UINT16, BASE_DEC, VALS(isup_redirection_reason_value), PONM_16BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_type_of_network_identification, - { "Type of network identification", "isup.type_of_network_identification", - FT_UINT8, BASE_DEC, VALS(isup_type_of_network_identification_value), GFE_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_network_identification_plan, - { "Network identification plan", "isup.network_identification_plan", - FT_UINT8, BASE_DEC, VALS(isup_network_identification_plan_value), DCBA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_map_type, - { "Map Type", "isup.map_type", - FT_UINT8, BASE_DEC, VALS(isup_map_type_value), FEDCBA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_automatic_congestion_level, - { "Automatic congestion level", "isup.automatic_congestion_level", - FT_UINT8, BASE_DEC, VALS(isup_auto_congestion_level_value), 0x0, - NULL, HFILL }}, - - { &hf_isup_inband_information_ind, - { "In-band information indicator", "isup.inband_information_ind", - FT_BOOLEAN, 8, TFS(&isup_inband_information_ind_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_call_diversion_may_occur_ind, - { "Call diversion may occur indicator", "isup.call_diversion_may_occur_ind", - FT_BOOLEAN, 8, TFS(&isup_call_diversion_may_occur_ind_value), B_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_mlpp_user_ind, - { "MLPP user indicator", "isup.mlpp_user", - FT_BOOLEAN, 8, TFS(&isup_MLPP_user_ind_value), D_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_type, - { "User-to-User indicator type", "isup.UUI_type", - FT_BOOLEAN, 8, TFS(&isup_UUI_type_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_req_service1, - { "User-to-User indicator request service 1", "isup.UUI_req_service1", - FT_UINT8, BASE_DEC, VALS(isup_UUI_request_service_values), CB_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_req_service2, - { "User-to-User indicator request service 2", "isup.UUI_req_service2", - FT_UINT8, BASE_DEC, VALS(isup_UUI_request_service_values), ED_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_req_service3, - { "User-to-User indicator request service 3", "isup.UUI_req_service3", - FT_UINT8, BASE_DEC, VALS(isup_UUI_request_service_values), GF_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_res_service1, - { "User-to-User indicator response service 1", "isup.UUI_res_service1", - FT_UINT8, BASE_DEC, VALS(isup_UUI_response_service_values), CB_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_res_service2, - { "User-to-User indicator response service 2", "isup.UUI_res_service2", - FT_UINT8, BASE_DEC, VALS(isup_UUI_response_service_values), ED_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_res_service3, - { "User-to-User response service 3", "isup.UUI_res_service3", - FT_UINT8, BASE_DEC, VALS(isup_UUI_response_service_values), GF_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_UUI_network_discard_ind, - { "User-to-User indicator network discard indicator", "isup.UUI_network_discard_ind", - FT_BOOLEAN, 8, TFS(&isup_UUI_network_discard_ind_value), H_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_access_delivery_ind, - { "Access delivery indicator", "isup.access_delivery_ind", - FT_BOOLEAN, 8, TFS(&isup_access_delivery_ind_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_transmission_medium_requirement_prime, - { "Transmission medium requirement prime", "isup.transmission_medium_requirement_prime", - FT_UINT8, BASE_DEC, VALS(isup_transmission_medium_requirement_prime_value), 0x0, - NULL, HFILL }}, - - { &hf_isup_loop_prevention_response_ind, - { "Response indicator", "isup.loop_prevention_response_ind", - FT_UINT8, BASE_DEC, VALS(isup_loop_prevention_response_ind_value), CB_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_temporary_alternative_routing_ind, - { "Temporary alternative routing indicator", "isup.temporary_alternative_routing_ind", - FT_BOOLEAN, 8, TFS(&isup_temporary_alternative_routing_ind_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_extension_ind, - { "Extension indicator", "isup.extension_ind", - FT_BOOLEAN, 8, TFS(&isup_extension_ind_value), H_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_call_to_be_diverted_ind, - { "Call to be diverted indicator", "isup.call_to_be_diverted_ind", - FT_UINT8, BASE_DEC, VALS(isup_call_to_be_diverted_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_call_to_be_offered_ind, - { "Call to be offered indicator", "isup.call_to_be_offered_ind", - FT_UINT8, BASE_DEC, VALS(isup_call_to_be_offered_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_conference_acceptance_ind, - { "Conference acceptance indicator", "isup.conference_acceptance_ind", - FT_UINT8, BASE_DEC, VALS(isup_conference_acceptance_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_transit_at_intermediate_exchange_ind, - { "Transit at intermediate exchange indicator", "isup.transit_at_intermediate_exchange_ind", - FT_BOOLEAN, 8, TFS(&isup_transit_at_intermediate_exchange_ind_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Release_call_ind, - { "Release call indicator", "isup.Release_call_ind", - FT_BOOLEAN, 8, TFS(&isup_Release_call_indicator_value), B_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Send_notification_ind, - { "Send notification indicator", "isup.Send_notification_ind", - FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value),C_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Discard_message_ind_value, - { "Discard message indicator","isup.Discard_message_ind_value", - FT_BOOLEAN, 8, TFS(&isup_Discard_message_ind_value), D_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Discard_parameter_ind, - { "Discard parameter indicator","isup.Discard_parameter_ind", - FT_BOOLEAN, 8, TFS(&isup_Discard_parameter_ind_value), E_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Pass_on_not_possible_indicator, - { "Pass on not possible indicator", "isup_Pass_on_not_possible_ind", - FT_UINT8, BASE_HEX, VALS(isup_Pass_on_not_possible_indicator_vals),GF_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_pass_on_not_possible_indicator2, - { "Pass on not possible indicator", "isup_Pass_on_not_possible_val", - FT_BOOLEAN, 8, TFS(&isup_pass_on_not_possible_indicator_value),E_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Broadband_narrowband_interworking_ind, - { "Broadband narrowband interworking indicator Bits JF", "isup_broadband-narrowband_interworking_ind", - FT_UINT8, BASE_HEX, VALS(ISUP_Broadband_narrowband_interworking_indicator_vals),BA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_Broadband_narrowband_interworking_ind2, - { "Broadband narrowband interworking indicator Bits GF", "isup_broadband-narrowband_interworking_ind2", - FT_UINT8, BASE_HEX, VALS(ISUP_Broadband_narrowband_interworking_indicator_vals),GF_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_app_cont_ident, - { "Application context identifier", "isup.app_context_identifier", - FT_UINT16, BASE_DEC, VALS(isup_application_transport_parameter_value),GFEDCBA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_app_Release_call_ind, - { "Release call indicator (RCI)", "isup.app_Release_call_indicator", - FT_BOOLEAN, 8, TFS(&isup_Release_call_indicator_value), A_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_app_Send_notification_ind, - { "Send notification indicator (SNI)", "isup.app_Send_notification_ind", - FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), B_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_apm_segmentation_ind, - { "APM segmentation indicator", "isup.apm_segmentation_ind", - FT_UINT8, BASE_DEC, VALS(isup_APM_segmentation_ind_value), FEDCBA_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_apm_si_ind, - { "Sequence indicator (SI)", "isup.APM_Sequence_ind", - FT_BOOLEAN, 8, TFS(&isup_Sequence_ind_value), G_8BIT_MASK, - NULL, HFILL }}, - - { &hf_isup_orig_addr_len, - { "Originating Address length", "isup.orig_addr_len", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_dest_addr_len, - { "Destination Address length", "isup.orig_addr_len", - FT_UINT8, BASE_DEC, NULL, 0x0, - NULL, HFILL }}, - - { &hf_isup_apm_slr, - { "Segmentation local reference (SLR)", "isup.APM_slr", - FT_UINT8, BASE_DEC, NULL,GFEDCBA_8BIT_MASK, - NULL, HFILL }}, - { &hf_isup_cause_location, - { "Cause location", "isup.cause_location", - FT_UINT8, BASE_DEC, VALS(q931_cause_location_vals), 0x0f, - NULL, HFILL }}, - - { &hf_ansi_isup_coding_standard, - { "Coding standard", "ansi_isup.coding_standard", FT_UINT8, BASE_HEX, - VALS(ansi_isup_coding_standard_vals), 0x60,NULL, HFILL }}, - - { &hf_bat_ase_identifier, - { "BAT ASE Identifiers", "bicc.bat_ase_identifier", - FT_UINT8, BASE_HEX, VALS(bat_ase_list_of_Identifiers_vals),0x0, - NULL, HFILL }}, - - { &hf_length_indicator, - { "BAT ASE Element length indicator", "bicc.bat_ase_length_indicator", - FT_UINT16, BASE_DEC, NULL,0x0, - NULL, HFILL }}, - - { &hf_Action_Indicator, - { "BAT ASE action indicator field", "bicc.bat_ase_bat_ase_action_indicator_field", - FT_UINT8, BASE_HEX, VALS(bat_ase_action_indicator_field_vals),0x00, - NULL, HFILL }}, - - { &hf_Instruction_ind_for_general_action, - { "BAT ASE Instruction indicator for general action", "bicc.bat_ase_Instruction_ind_for_general_action", - FT_UINT8, BASE_HEX, VALS(Instruction_indicator_for_general_action_vals),0x03, - NULL, HFILL }}, - - { &hf_Send_notification_ind_for_general_action, - { "Send notification indicator for general action", "bicc.bat_ase_Send_notification_ind_for_general_action", - FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), 0x04, - NULL, HFILL }}, - - { &hf_Instruction_ind_for_pass_on_not_possible, - { "Instruction ind for pass-on not possible", "bicc.bat_ase_Instruction_ind_for_pass_on_not_possible", - FT_UINT8, BASE_HEX, VALS(Instruction_indicator_for_pass_on_not_possible_vals),0x30, - NULL, HFILL }}, - - { &hf_Send_notification_ind_for_pass_on_not_possible, - { "Send notification indication for pass-on not possible", "bicc.bat_ase_Send_notification_ind_for_pass_on_not_possible", - FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), 0x40, - NULL, HFILL }}, - - { &hf_BCTP_Version_Indicator, - { "BCTP Version Indicator", "bicc.bat_ase_BCTP_Version_Indicator", - FT_UINT8, BASE_DEC, NULL,0x1f, - NULL, HFILL }}, - - { &hf_BVEI, - { "BVEI", "bicc.bat_ase_BCTP_BVEI", - FT_BOOLEAN, 8, TFS(&BCTP_BVEI_value), 0x40, - NULL, HFILL }}, - - { &hf_Tunnelled_Protocol_Indicator, - { "Tunnelled Protocol Indicator", "bicc.bat_ase_BCTP_Tunnelled_Protocol_Indicator", - FT_UINT8, BASE_DEC, VALS(BCTP_Tunnelled_Protocol_Indicator_vals),0x3f, - NULL, HFILL }}, - - { &hf_TPEI, - { "TPEI", "bicc.bat_ase_BCTP_tpei", - FT_BOOLEAN, 8, TFS(&BCTP_TPEI_value), 0x40, - NULL, HFILL }}, - - { &hf_bncid, - { "Backbone Network Connection Identifier (BNCId)", "bat_ase.bncid", - FT_UINT32, BASE_HEX, NULL, 0x0, - NULL, HFILL }}, - - { &hf_bat_ase_biwfa, - { "Interworking Function Address( X.213 NSAP encoded)", "bat_ase_biwfa", - FT_BYTES, BASE_NONE, NULL, 0x0, - NULL, HFILL }}, - - { &hf_afi, - { "X.213 Address Format Information ( AFI )", "x213.afi", - FT_UINT8, BASE_HEX, VALS(x213_afi_value),0x0, - NULL, HFILL }}, - - { &hf_bicc_nsap_dsp, - { "X.213 Address Format Information ( DSP )", "x213.dsp", - FT_BYTES, BASE_NONE, NULL,0x0, - NULL, HFILL }}, - { &hf_characteristics, - { "Backbone network connection characteristics", "bat_ase.char", - FT_UINT8, BASE_HEX, VALS(bearer_network_connection_characteristics_vals),0x0, - NULL, HFILL }}, - - { &hf_Organization_Identifier, - { "Organization identifier subfield", "bat_ase.organization_identifier_subfield", - FT_UINT8, BASE_DEC, VALS(bat_ase_organization_identifier_subfield_vals),0x0, - NULL, HFILL }}, - - { &hf_codec_type, - { "ITU-T codec type subfield", "bat_ase.ITU_T_codec_type_subfield", - FT_UINT8, BASE_HEX, VALS(ITU_T_codec_type_subfield_vals),0x0, - NULL, HFILL }}, - - { &hf_etsi_codec_type, - { "ETSI codec type subfield", "bat_ase.ETSI_codec_type_subfield", - FT_UINT8, BASE_HEX, VALS(ETSI_codec_type_subfield_vals),0x0, - NULL, HFILL }}, - - { &hf_active_code_set, - { "Active Code Set", "bat_ase.acs", - FT_UINT8, BASE_HEX, NULL,0x0, - NULL, HFILL }}, - - { &hf_active_code_set_12_2, - { "12.2 kbps rate", "bat_ase.acs.12_2", - FT_UINT8, BASE_HEX, NULL,0x80, - NULL, HFILL }}, - - { &hf_active_code_set_10_2, - { "10.2 kbps rate", "bat_ase.acs.10_2", - FT_UINT8, BASE_HEX, NULL,0x40, - NULL, HFILL }}, - - { &hf_active_code_set_7_95, - { "7.95 kbps rate", "bat_ase.acs.7_95", - FT_UINT8, BASE_HEX, NULL,0x20, - NULL, HFILL }}, - - { &hf_active_code_set_7_40, - { "7.40 kbps rate", "bat_ase.acs.7_40", - FT_UINT8, BASE_HEX, NULL,0x10, - NULL, HFILL }}, - - { &hf_active_code_set_6_70, - { "6.70 kbps rate", "bat_ase.acs.6_70", - FT_UINT8, BASE_HEX, NULL,0x08, - NULL, HFILL }}, - - { &hf_active_code_set_5_90, - { "5.90 kbps rate", "bat_ase.acs.5_90", - FT_UINT8, BASE_HEX, NULL,0x04, - NULL, HFILL }}, - - { &hf_active_code_set_5_15, - { "5.15 kbps rate", "bat_ase.acs.5_15", - FT_UINT8, BASE_HEX, NULL,0x02, - NULL, HFILL }}, - - { &hf_active_code_set_4_75, - { "4.75 kbps rate", "bat_ase.acs.4_75", - FT_UINT8, BASE_HEX, NULL,0x01, - NULL, HFILL }}, - - { &hf_supported_code_set, - { "Supported Code Set", "bat_ase.scs", - FT_UINT8, BASE_HEX, NULL,0x0, - NULL, HFILL }}, - - { &hf_supported_code_set_12_2, - { "12.2 kbps rate", "bat_ase.scs.12_2", - FT_UINT8, BASE_HEX, NULL,0x80, - NULL, HFILL }}, - - { &hf_supported_code_set_10_2, - { "10.2 kbps rate", "bat_ase.scs.10_2", - FT_UINT8, BASE_HEX, NULL,0x40, - NULL, HFILL }}, - - { &hf_supported_code_set_7_95, - { "7.95 kbps rate", "bat_ase.scs.7_95", - FT_UINT8, BASE_HEX, NULL,0x20, - NULL, HFILL }}, - - { &hf_supported_code_set_7_40, - { "7.40 kbps rate", "bat_ase.scs.7_40", - FT_UINT8, BASE_HEX, NULL,0x10, - NULL, HFILL }}, - - { &hf_supported_code_set_6_70, - { "6.70 kbps rate", "bat_ase.scs.6_70", - FT_UINT8, BASE_HEX, NULL,0x08, - NULL, HFILL }}, - - { &hf_supported_code_set_5_90, - { "5.90 kbps rate", "bat_ase.scs.5_90", - FT_UINT8, BASE_HEX, NULL,0x04, - NULL, HFILL }}, - - { &hf_supported_code_set_5_15, - { "5.15 kbps rate", "bat_ase.scs.5_15", - FT_UINT8, BASE_HEX, NULL,0x02, - NULL, HFILL }}, - - { &hf_supported_code_set_4_75, - { "4.75 kbps rate", "bat_ase.scs.4_75", - FT_UINT8, BASE_HEX, NULL,0x01, - NULL, HFILL }}, - - { &hf_optimisation_mode, - { "Optimisation Mode for ACS , OM", "bat_ase.optimisation_mode", - FT_UINT8, BASE_HEX, VALS(optimisation_mode_vals),0x8, - NULL, HFILL }}, - - { &hf_max_codec_modes, - { "Maximal number of Codec Modes, MACS", "bat_ase.macs", - FT_UINT8, BASE_DEC, NULL,0x07, - NULL, HFILL }}, - - - { &hf_bearer_control_tunneling, - { "Bearer control tunneling", "bat_ase.bearer_control_tunneling", - FT_BOOLEAN, 8, TFS(&Bearer_Control_Tunnelling_ind_value),0x01, - NULL, HFILL }}, - - { &hf_BAT_ASE_Comp_Report_Reason, - { "Compatibility report reason", "bat_ase.Comp_Report_Reason", - FT_UINT8, BASE_HEX, VALS(BAT_ASE_Report_Reason_vals),0x0, - NULL, HFILL }}, - - - { &hf_BAT_ASE_Comp_Report_ident, - { "Bearer control tunneling", "bat_ase.bearer_control_tunneling", - FT_UINT8, BASE_HEX, VALS(bat_ase_list_of_Identifiers_vals),0x0, - NULL, HFILL }}, - - { &hf_BAT_ASE_Comp_Report_diagnostic, - { "Diagnostics", "bat_ase.Comp_Report_diagnostic", - FT_UINT16, BASE_HEX, NULL,0x0, - NULL, HFILL }}, - - { &hf_Local_BCU_ID, - { "Local BCU ID", "bat_ase.Local_BCU_ID", - FT_UINT32, BASE_HEX, NULL, 0x0, - NULL, HFILL }}, - - { &hf_late_cut_trough_cap_ind, - { "Late Cut-through capability indicator", "bat_ase.late_cut_trough_cap_ind", - FT_BOOLEAN, 8, TFS(&late_cut_trough_cap_ind_value),0x01, - NULL, HFILL }}, - - { &hf_bat_ase_signal, - { "Q.765.5 - Signal Type", "bat_ase.signal_type", - FT_UINT8, BASE_HEX, VALS(BAt_ASE_Signal_Type_vals),0x0, - NULL, HFILL }}, - - { &hf_bat_ase_duration, - { "Duration in ms", "bat_ase.signal_type", - FT_UINT16, BASE_DEC, NULL,0x0, - NULL, HFILL }}, - - { &hf_bat_ase_bearer_redir_ind, - { "Redirection Indicator", "bat_ase.bearer_redir_ind", - FT_UINT8, BASE_HEX, VALS(Bearer_Redirection_Indicator_vals),0x0, - NULL, HFILL }}, - - { &hf_nsap_ipv4_addr, - { "IWFA IPv4 Address", "nsap.ipv4_addr", - FT_IPv4, BASE_NONE, NULL, 0x0, - "IPv4 address", HFILL }}, - - { &hf_nsap_ipv6_addr, - { "IWFA IPv6 Address", "nsap.ipv6_addr", - FT_IPv6, BASE_NONE, NULL, 0x0, - "IPv6 address", HFILL}}, - - { &hf_iana_icp, - { "IANA ICP", "nsap.iana_icp", - FT_UINT16, BASE_HEX, VALS(iana_icp_values),0x0, - NULL, HFILL }}, - - { &hf_isup_called, - { "ISUP Called Number", "isup.called", - FT_STRING, BASE_NONE, NULL,0x0, - NULL, HFILL }}, - - { &hf_isup_calling, - { "ISUP Calling Number", "isup.calling", - FT_STRING, BASE_NONE, NULL,0x0, - NULL, HFILL }}, - - { &hf_isup_redirecting, - { "ISUP Redirecting Number", "isup.redirecting", - FT_STRING, BASE_NONE, NULL,0x0, - NULL, HFILL }}, - {&hf_isup_apm_msg_fragments, - {"Message fragments", "isup_apm.msg.fragments", - FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } - }, - {&hf_isup_apm_msg_fragment, - {"Message fragment", "isup_apm.msg.fragment", - FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } - }, - {&hf_isup_apm_msg_fragment_overlap, - {"Message fragment overlap", "isup_apm.msg.fragment.overlap", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } - }, - {&hf_isup_apm_msg_fragment_overlap_conflicts, - {"Message fragment overlapping with conflicting data","isup_apm.msg.fragment.overlap.conflicts", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } - }, - {&hf_isup_apm_msg_fragment_multiple_tails, - {"Message has multiple tail fragments", "isup_apm.msg.fragment.multiple_tails", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } - }, - {&hf_isup_apm_msg_fragment_too_long_fragment, - {"Message fragment too long", "isup_apm.msg.fragment.too_long_fragment", - FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } - }, - {&hf_isup_apm_msg_fragment_error, - {"Message defragmentation error", "isup_apm.msg.fragment.error", - FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } - }, - {&hf_isup_apm_msg_reassembled_in, - {"Reassembled in", "isup_apm.msg.reassembled.in", - FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } - }, - {&hf_isup_apm_msg_reassembled_length, - {"Reassembled ISUP length", "isup_apm.msg.reassembled.length", - FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } - }, - {&hf_isup_cvr_rsp_ind, - {"CVR Response Ind", "conn_rsp_ind", - FT_UINT8, BASE_DEC, VALS(isup_cvr_rsp_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - {&hf_isup_cvr_cg_car_ind, - {"CVR Circuit Group Carrier","cg_carrier_ind", - FT_UINT8, BASE_HEX, VALS(isup_cvr_cg_car_ind_value), BA_8BIT_MASK, - NULL, HFILL }}, - {&hf_isup_cvr_cg_double_seize, - {"Double Seize Control", "cg_char_ind.doubleSeize", - FT_UINT8, BASE_HEX, VALS(isup_cvr_cg_double_seize_value), DC_8BIT_MASK, - NULL, HFILL }}, - {&hf_isup_cvr_cg_alarm_car_ind, - {"Alarm Carrier Indicator", "cg_alarm_car_ind", - FT_UINT8, BASE_HEX, VALS(isup_cvr_alarm_car_ind_value), FE_8BIT_MASK, - NULL, HFILL }}, - {&hf_isup_cvr_cont_chk_ind, - {"Continuity Check Indicator","cg_alarm_cnt_chk", - FT_UINT8, BASE_HEX, VALS(isup_cvr_cont_chk_ind_value), HG_8BIT_MASK, - NULL,HFILL }}, - - { &hf_isup_geo_loc_presentation_restricted_ind, - { "Calling Geodetic Location presentation restricted indicator", "isup.location_presentation_restr_ind", - FT_UINT8, BASE_DEC, VALS(isup_location_presentation_restricted_ind_value), DC_8BIT_MASK, - NULL, HFILL }}, - { &hf_isup_geo_loc_screening_ind, - { "Calling Geodetic Location screening indicator", "isup.location_screening_ind", - FT_UINT8, BASE_DEC, VALS(isup_screening_ind_enhanced_value), BA_8BIT_MASK, /* using previously defined screening values */ - NULL, HFILL }} - }; + static hf_register_info hf[] = { + { &hf_isup_cic, + { "CIC", "isup.cic", + FT_UINT16, BASE_HEX, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_message_type, + { "Message Type", "isup.message_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_parameter_type, + { "Parameter Type", "isup.parameter_type", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_parameter_length, + { "Parameter Length", "isup.parameter_length", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_mandatory_variable_parameter_pointer, + { "Pointer to Parameter", "isup.mandatory_variable_parameter_pointer", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_pointer_to_start_of_optional_part, + { "Pointer to optional parameter part", "isup.optional_parameter_part_pointer", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_satellite_indicator, + { "Satellite Indicator", "isup.satellite_indicator", + FT_UINT8, BASE_HEX, VALS(isup_satellite_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_continuity_check_indicator, + { "Continuity Check Indicator", "isup.continuity_check_indicator", + FT_UINT8, BASE_HEX, VALS(isup_continuity_check_ind_value), DC_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_echo_control_device_indicator, + { "Echo Control Device Indicator", "isup.echo_control_device_indicator", + FT_BOOLEAN, 8, TFS(&isup_echo_control_device_ind_value),E_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_natnl_inatnl_call_indicator, + { "National/international call indicator", "isup.forw_call_natnl_inatnl_call_indicator", + FT_BOOLEAN, 16, TFS(&isup_natnl_inatnl_call_ind_value),A_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_end_to_end_method_indicator, + { "End-to-end method indicator", "isup.forw_call_end_to_end_method_indicator", + FT_UINT16, BASE_HEX, VALS(isup_end_to_end_method_ind_value), CB_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_interworking_indicator, + { "Interworking indicator", "isup.forw_call_interworking_indicator", + FT_BOOLEAN, 16, TFS(&isup_interworking_ind_value), D_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_end_to_end_info_indicator, + { "End-to-end information indicator", "isup.forw_call_end_to_end_information_indicator", + FT_BOOLEAN, 16, TFS(&isup_end_to_end_info_ind_value), E_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_isdn_user_part_indicator, + { "ISDN user part indicator", "isup.forw_call_isdn_user_part_indicator", + FT_BOOLEAN, 16, TFS(&isup_ISDN_user_part_ind_value), F_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_preferences_indicator, + { "ISDN user part preference indicator", "isup.forw_call_preferences_indicator", + FT_UINT16, BASE_HEX, VALS(isup_preferences_ind_value), HG_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_isdn_access_indicator, + { "ISDN access indicator", "isup.forw_call_isdn_access_indicator", + FT_BOOLEAN, 16, TFS(&isup_ISDN_originating_access_ind_value), I_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_sccp_method_indicator, + { "SCCP method indicator", "isup.forw_call_sccp_method_indicator", + FT_UINT16, BASE_HEX, VALS(isup_SCCP_method_ind_value), KJ_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_ported_num_trans_indicator, + { "Ported number translation indicator", "isup.forw_call_ported_num_trans_indicator", + FT_BOOLEAN, 16, TFS(&isup_ISDN_ported_num_trans_ind_value), M_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_forw_call_qor_attempt_indicator, + { "Query on Release attempt indicator", "isup.forw_call_isdn_access_indicator", + FT_BOOLEAN, 16, TFS(&isup_ISDN_qor_attempt_ind_value), N_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_partys_category, + { "Calling Party's category", "isup.calling_partys_category", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &isup_calling_partys_category_value_ext, 0x0, + NULL, HFILL }}, + + { &hf_isup_transmission_medium_requirement, + { "Transmission medium requirement", "isup.transmission_medium_requirement", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &isup_transmission_medium_requirement_value_ext, 0x0, + NULL, HFILL }}, + + { &hf_isup_odd_even_indicator, + { "Odd/even indicator", "isup.isdn_odd_even_indicator", + FT_BOOLEAN, 8, TFS(&isup_odd_even_ind_value), ISUP_ODD_EVEN_MASK, + NULL, HFILL }}, + + { &hf_isup_generic_name_presentation, + { "Presentation indicator", "isup.isdn_generic_name_presentation", + FT_UINT8, BASE_DEC, VALS(isup_generic_name_presentation_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_generic_name_availability, + { "Availability indicator", "isup.isdn_generic_name_availability", + FT_BOOLEAN, 8, TFS(&isup_generic_name_availability_value), E_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_generic_name_type, + { "Type indicator", "isup.isdn_generic_name_type", + FT_UINT8, BASE_DEC, VALS(isup_generic_name_type_value), HGF_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_generic_name_ia5, + { "Generic Name", "isup.isdn_generic_name_ia5", + FT_STRING, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_called_party_nature_of_address_indicator, + { "Nature of address indicator", "isup.called_party_nature_of_address_indicator", + FT_UINT8, BASE_DEC, VALS(isup_called_party_nature_of_address_ind_value), ISUP_NATURE_OF_ADDRESS_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_party_nature_of_address_indicator, + { "Nature of address indicator", "isup.calling_party_nature_of_address_indicator", + FT_UINT8, BASE_DEC, VALS(isup_calling_party_nature_of_address_ind_value), ISUP_NATURE_OF_ADDRESS_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_charge_number_nature_of_address_indicator, + { "Nature of address indicator", "isup.charge_number_nature_of_address_indicator", + FT_UINT8, BASE_DEC, VALS(isup_charge_number_nature_of_address_ind_value), ISUP_NATURE_OF_ADDRESS_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_inn_indicator, + { "INN indicator", "isup.inn_indicator", + FT_BOOLEAN, 8, TFS(&isup_INN_ind_value), ISUP_INN_MASK, + NULL, HFILL }}, + + { &hf_isup_ni_indicator, + { "NI indicator", "isup.ni_indicator", + FT_BOOLEAN, 8, TFS(&isup_NI_ind_value), ISUP_NI_MASK, + NULL, HFILL }}, + + { &hf_isup_numbering_plan_indicator, + { "Numbering plan indicator", "isup.numbering_plan_indicator", + FT_UINT8, BASE_DEC, VALS(isup_numbering_plan_ind_value), ISUP_NUMBERING_PLAN_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_address_presentation_restricted_indicator, + { "Address presentation restricted indicator", "isup.address_presentation_restricted_indicator", + FT_UINT8, BASE_DEC, VALS(isup_address_presentation_restricted_ind_value), ISUP_ADDRESS_PRESENTATION_RESTR_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_screening_indicator, + { "Screening indicator", "isup.screening_indicator", + FT_UINT8, BASE_DEC, VALS(isup_screening_ind_value), ISUP_SCREENING_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_screening_indicator_enhanced, + { "Screening indicator", "isup.screening_indicator_enhanced", + FT_UINT8, BASE_DEC, VALS(isup_screening_ind_enhanced_value), ISUP_SCREENING_IND_MASK, + NULL, HFILL }}, + + { &hf_isup_called_party_odd_address_signal_digit, + { "Address signal digit", "isup.called_party_odd_address_signal_digit", + FT_UINT8, BASE_DEC, VALS(isup_called_party_address_digit_value), ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_party_odd_address_signal_digit, + { "Address signal digit", "isup.calling_party_odd_address_signal_digit", + FT_UINT8, BASE_DEC, VALS(isup_calling_party_address_digit_value), ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK, + NULL, HFILL }}, + + { &hf_isup_called_party_even_address_signal_digit, + { "Address signal digit", "isup.called_party_even_address_signal_digit", + FT_UINT8, BASE_DEC, VALS(isup_called_party_address_digit_value), ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_party_even_address_signal_digit, + { "Address signal digit", "isup.calling_party_even_address_signal_digit", + FT_UINT8, BASE_DEC, VALS(isup_calling_party_address_digit_value), ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_party_address_request_indicator, + { "Calling party address request indicator", "isup.calling_party_address_request_indicator", + FT_BOOLEAN, 16, TFS(&isup_calling_party_address_request_ind_value), A_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_info_req_holding_indicator, + { "Holding indicator", "isup.info_req_holding_indicator", + FT_BOOLEAN, 16, TFS(&isup_holding_ind_value), B_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_partys_category_request_indicator, + { "Calling party's category request indicator", "isup.calling_partys_category_request_indicator", + FT_BOOLEAN, 16, TFS(&isup_calling_partys_category_request_ind_value), D_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_charge_information_request_indicator, + { "Charge information request indicator", "isup.charge_information_request_indicator", + FT_BOOLEAN, 16, TFS(&isup_charge_information_request_ind_value), E_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_malicious_call_identification_request_indicator, + { "Malicious call identification request indicator (ISUP'88)", "isup.malicious_call_ident_request_indicator", + FT_BOOLEAN, 16, TFS(&isup_malicious_call_identification_request_ind_value), H_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_party_address_response_indicator, + { "Calling party address response indicator", "isup.calling_party_address_response_indicator", + FT_UINT16, BASE_HEX, VALS(isup_calling_party_address_response_ind_value), BA_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_OECD_inf_ind, + { "OECD information indicator", "isup.OECD_inf_ind_vals", + FT_UINT8, BASE_HEX, VALS(OECD_inf_ind_vals), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_IECD_inf_ind, + { "IECD information indicator", "isup.IECD_inf_ind_vals", + FT_UINT8, BASE_HEX, VALS(IECD_inf_ind_vals), DC_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_OECD_req_ind, + { "OECD request indicator", "isup.OECD_req_ind_vals", + FT_UINT8, BASE_HEX, VALS(OECD_req_ind_vals), FE_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_IECD_req_ind, + { "IECD request indicator", "isup.IECD_req_ind_vals", + FT_UINT8, BASE_HEX, VALS(IECD_req_ind_vals), HG_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_hold_provided_indicator, + { "Hold provided indicator", "isup.hold_provided_indicator", + FT_BOOLEAN, 16, TFS(&isup_hold_provided_ind_value), C_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_calling_partys_category_response_indicator, + { "Calling party's category response indicator", "isup.calling_partys_category_response_indicator", + FT_BOOLEAN, 16, TFS(&isup_calling_partys_category_response_ind_value), F_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_charge_information_response_indicator, + { "Charge information response indicator", "isup.charge_information_response_indicator", + FT_BOOLEAN, 16, TFS(&isup_charge_information_response_ind_value), G_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_solicited_indicator, + { "Solicited indicator", "isup.solicided_indicator", + FT_BOOLEAN, 16, TFS(&isup_solicited_information_ind_value), H_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_continuity_indicator, + { "Continuity indicator", "isup.continuity_indicator", + FT_BOOLEAN, 8, TFS(&isup_continuity_ind_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_charge_ind, + { "Charge indicator", "isup.charge_indicator", + FT_UINT16, BASE_HEX, VALS(isup_charge_ind_value), BA_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_called_partys_status_ind, + { "Called party's status indicator", "isup.called_partys_status_indicator", + FT_UINT16, BASE_HEX, VALS(isup_called_partys_status_ind_value), DC_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_called_partys_category_ind, + { "Called party's category indicator", "isup.called_partys_category_indicator", + FT_UINT16, BASE_HEX, VALS(isup_called_partys_category_ind_value), FE_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_end_to_end_method_ind, + { "End-to-end method indicator", "isup.backw_call_end_to_end_method_indicator", + FT_UINT16, BASE_HEX, VALS(isup_end_to_end_method_ind_value), HG_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_interworking_ind, + { "Interworking indicator", "isup.backw_call_interworking_indicator", + FT_BOOLEAN, 16, TFS(&isup_interworking_ind_value), I_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_end_to_end_info_ind, + { "End-to-end information indicator", "isup.backw_call_end_to_end_information_indicator", + FT_BOOLEAN, 16, TFS(&isup_end_to_end_info_ind_value), J_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_isdn_user_part_ind, + { "ISDN user part indicator", "isup.backw_call_isdn_user_part_indicator", + FT_BOOLEAN, 16, TFS(&isup_ISDN_user_part_ind_value), K_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_holding_ind, + { "Holding indicator", "isup.backw_call_holding_indicator", + FT_BOOLEAN, 16, TFS(&isup_holding_ind_value), L_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_isdn_access_ind, + { "ISDN access indicator", "isup.backw_call_isdn_access_indicator", + FT_BOOLEAN, 16, TFS(&isup_ISDN_terminating_access_ind_value), M_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_echo_control_device_ind, + { "Echo Control Device Indicator", "isup.backw_call_echo_control_device_indicator", + FT_BOOLEAN, 16, TFS(&isup_echo_control_device_ind_value), N_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_backw_call_sccp_method_ind, + { "SCCP method indicator", "isup.backw_call_sccp_method_indicator", + FT_UINT16, BASE_HEX, VALS(isup_SCCP_method_ind_value), PO_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_cause_indicator, + { "Cause indicator", "isup.cause_indicator", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q850_cause_code_vals_ext, 0x7f, + NULL, HFILL }}, + + { &hf_ansi_isup_cause_indicator, + { "Cause indicator", "ansi_isup.cause_indicator", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &ansi_isup_cause_code_vals_ext, 0x7f, + NULL, HFILL }}, + + { &hf_isup_suspend_resume_indicator, + { "Suspend/Resume indicator", "isup.suspend_resume_indicator", + FT_BOOLEAN, 8, TFS(&isup_suspend_resume_ind_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_range_indicator, + { "Range indicator", "isup.range_indicator", + FT_UINT8, BASE_DEC, NULL , 0x0, + NULL, HFILL }}, + + { &hf_isup_cgs_message_type, + { "Circuit group supervision message type", "isup.cgs_message_type", + FT_UINT8, BASE_DEC, VALS(isup_cgs_message_type_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_mtc_blocking_state1, + { "Maintenance blocking state", "isup.mtc_blocking_state", + FT_UINT8, BASE_DEC, VALS(isup_mtc_blocking_state_DC00_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_mtc_blocking_state2, + { "Maintenance blocking state", "isup.mtc_blocking_state", + FT_UINT8, BASE_DEC, VALS(isup_mtc_blocking_state_DCnot00_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_call_proc_state, + { "Call processing state", "isup.call_processing_state", + FT_UINT8, BASE_DEC, VALS(isup_call_processing_state_value), DC_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_hw_blocking_state, + { "HW blocking state", "isup.hw_blocking_state", + FT_UINT8, BASE_DEC, VALS(isup_HW_blocking_state_value), FE_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_event_ind, + { "Event indicator", "isup.event_ind", + FT_UINT8, BASE_DEC, VALS(isup_event_ind_value), GFEDCBA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_event_presentation_restricted_ind, + { "Event presentation restricted indicator", "isup.event_presentatiation_restr_ind", + FT_BOOLEAN, 8, TFS(&isup_event_presentation_restricted_ind_value), H_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_cug_call_ind, + { "Closed user group call indicator", "isup.clg_call_ind", + FT_UINT8, BASE_DEC, VALS(isup_CUG_call_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_simple_segmentation_ind, + { "Simple segmentation indicator", "isup.simple_segmentation_ind", + FT_BOOLEAN, 8, TFS(&isup_simple_segmentation_ind_value), C_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_connected_line_identity_request_ind, + { "Connected line identity request indicator", "isup.connected_line_identity_request_ind", + FT_BOOLEAN, 8, TFS(&isup_connected_line_identity_request_ind_value), H_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_redirecting_ind, + { "Redirection indicator", "isup.redirecting_ind", + FT_UINT16, BASE_DEC, VALS(isup_redirecting_ind_value), CBA_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_original_redirection_reason, + { "Original redirection reason", "isup.original_redirection_reason", + FT_UINT16, BASE_DEC, VALS(isup_original_redirection_reason_value), HGFE_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_redirection_counter, + { "Redirection counter", "isup.redirection_counter", + FT_UINT16, BASE_DEC, NULL, KJI_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_redirection_reason, + { "Redirection reason", "isup.redirection_reason", + FT_UINT16, BASE_DEC, VALS(isup_redirection_reason_value), PONM_16BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_type_of_network_identification, + { "Type of network identification", "isup.type_of_network_identification", + FT_UINT8, BASE_DEC, VALS(isup_type_of_network_identification_value), GFE_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_network_identification_plan, + { "Network identification plan", "isup.network_identification_plan", + FT_UINT8, BASE_DEC, VALS(isup_network_identification_plan_value), DCBA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_map_type, + { "Map Type", "isup.map_type", + FT_UINT8, BASE_DEC, VALS(isup_map_type_value), FEDCBA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_automatic_congestion_level, + { "Automatic congestion level", "isup.automatic_congestion_level", + FT_UINT8, BASE_DEC, VALS(isup_auto_congestion_level_value), 0x0, + NULL, HFILL }}, + + { &hf_isup_inband_information_ind, + { "In-band information indicator", "isup.inband_information_ind", + FT_BOOLEAN, 8, TFS(&isup_inband_information_ind_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_call_diversion_may_occur_ind, + { "Call diversion may occur indicator", "isup.call_diversion_may_occur_ind", + FT_BOOLEAN, 8, TFS(&isup_call_diversion_may_occur_ind_value), B_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_mlpp_user_ind, + { "MLPP user indicator", "isup.mlpp_user", + FT_BOOLEAN, 8, TFS(&isup_MLPP_user_ind_value), D_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_type, + { "User-to-User indicator type", "isup.UUI_type", + FT_BOOLEAN, 8, TFS(&isup_UUI_type_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_req_service1, + { "User-to-User indicator request service 1", "isup.UUI_req_service1", + FT_UINT8, BASE_DEC, VALS(isup_UUI_request_service_values), CB_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_req_service2, + { "User-to-User indicator request service 2", "isup.UUI_req_service2", + FT_UINT8, BASE_DEC, VALS(isup_UUI_request_service_values), ED_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_req_service3, + { "User-to-User indicator request service 3", "isup.UUI_req_service3", + FT_UINT8, BASE_DEC, VALS(isup_UUI_request_service_values), GF_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_res_service1, + { "User-to-User indicator response service 1", "isup.UUI_res_service1", + FT_UINT8, BASE_DEC, VALS(isup_UUI_response_service_values), CB_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_res_service2, + { "User-to-User indicator response service 2", "isup.UUI_res_service2", + FT_UINT8, BASE_DEC, VALS(isup_UUI_response_service_values), ED_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_res_service3, + { "User-to-User response service 3", "isup.UUI_res_service3", + FT_UINT8, BASE_DEC, VALS(isup_UUI_response_service_values), GF_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_UUI_network_discard_ind, + { "User-to-User indicator network discard indicator", "isup.UUI_network_discard_ind", + FT_BOOLEAN, 8, TFS(&isup_UUI_network_discard_ind_value), H_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_access_delivery_ind, + { "Access delivery indicator", "isup.access_delivery_ind", + FT_BOOLEAN, 8, TFS(&isup_access_delivery_ind_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_transmission_medium_requirement_prime, + { "Transmission medium requirement prime", "isup.transmission_medium_requirement_prime", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &isup_transmission_medium_requirement_prime_value_ext, 0x0, + NULL, HFILL }}, + + { &hf_isup_loop_prevention_response_ind, + { "Response indicator", "isup.loop_prevention_response_ind", + FT_UINT8, BASE_DEC, VALS(isup_loop_prevention_response_ind_value), CB_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_temporary_alternative_routing_ind, + { "Temporary alternative routing indicator", "isup.temporary_alternative_routing_ind", + FT_BOOLEAN, 8, TFS(&isup_temporary_alternative_routing_ind_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_extension_ind, + { "Extension indicator", "isup.extension_ind", + FT_BOOLEAN, 8, TFS(&isup_extension_ind_value), H_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_call_to_be_diverted_ind, + { "Call to be diverted indicator", "isup.call_to_be_diverted_ind", + FT_UINT8, BASE_DEC, VALS(isup_call_to_be_diverted_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_call_to_be_offered_ind, + { "Call to be offered indicator", "isup.call_to_be_offered_ind", + FT_UINT8, BASE_DEC, VALS(isup_call_to_be_offered_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_conference_acceptance_ind, + { "Conference acceptance indicator", "isup.conference_acceptance_ind", + FT_UINT8, BASE_DEC, VALS(isup_conference_acceptance_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_transit_at_intermediate_exchange_ind, + { "Transit at intermediate exchange indicator", "isup.transit_at_intermediate_exchange_ind", + FT_BOOLEAN, 8, TFS(&isup_transit_at_intermediate_exchange_ind_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Release_call_ind, + { "Release call indicator", "isup.Release_call_ind", + FT_BOOLEAN, 8, TFS(&isup_Release_call_indicator_value), B_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Send_notification_ind, + { "Send notification indicator", "isup.Send_notification_ind", + FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value),C_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Discard_message_ind_value, + { "Discard message indicator","isup.Discard_message_ind_value", + FT_BOOLEAN, 8, TFS(&isup_Discard_message_ind_value), D_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Discard_parameter_ind, + { "Discard parameter indicator","isup.Discard_parameter_ind", + FT_BOOLEAN, 8, TFS(&isup_Discard_parameter_ind_value), E_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Pass_on_not_possible_indicator, + { "Pass on not possible indicator", "isup_Pass_on_not_possible_ind", + FT_UINT8, BASE_HEX, VALS(isup_Pass_on_not_possible_indicator_vals),GF_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_pass_on_not_possible_indicator2, + { "Pass on not possible indicator", "isup_Pass_on_not_possible_val", + FT_BOOLEAN, 8, TFS(&isup_pass_on_not_possible_indicator_value),E_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Broadband_narrowband_interworking_ind, + { "Broadband narrowband interworking indicator Bits JF", "isup_broadband-narrowband_interworking_ind", + FT_UINT8, BASE_HEX, VALS(ISUP_Broadband_narrowband_interworking_indicator_vals),BA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_Broadband_narrowband_interworking_ind2, + { "Broadband narrowband interworking indicator Bits GF", "isup_broadband-narrowband_interworking_ind2", + FT_UINT8, BASE_HEX, VALS(ISUP_Broadband_narrowband_interworking_indicator_vals),GF_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_app_cont_ident, + { "Application context identifier", "isup.app_context_identifier", + FT_UINT16, BASE_DEC, VALS(isup_application_transport_parameter_value),GFEDCBA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_app_Release_call_ind, + { "Release call indicator (RCI)", "isup.app_Release_call_indicator", + FT_BOOLEAN, 8, TFS(&isup_Release_call_indicator_value), A_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_app_Send_notification_ind, + { "Send notification indicator (SNI)", "isup.app_Send_notification_ind", + FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), B_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_apm_segmentation_ind, + { "APM segmentation indicator", "isup.apm_segmentation_ind", + FT_UINT8, BASE_DEC, VALS(isup_APM_segmentation_ind_value), FEDCBA_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_apm_si_ind, + { "Sequence indicator (SI)", "isup.APM_Sequence_ind", + FT_BOOLEAN, 8, TFS(&isup_Sequence_ind_value), G_8BIT_MASK, + NULL, HFILL }}, + + { &hf_isup_orig_addr_len, + { "Originating Address length", "isup.orig_addr_len", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_dest_addr_len, + { "Destination Address length", "isup.orig_addr_len", + FT_UINT8, BASE_DEC, NULL, 0x0, + NULL, HFILL }}, + + { &hf_isup_apm_slr, + { "Segmentation local reference (SLR)", "isup.APM_slr", + FT_UINT8, BASE_DEC, NULL,GFEDCBA_8BIT_MASK, + NULL, HFILL }}, + { &hf_isup_cause_location, + { "Cause location", "isup.cause_location", + FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q931_cause_location_vals_ext, 0x0f, + NULL, HFILL }}, + + { &hf_ansi_isup_coding_standard, + { "Coding standard", "ansi_isup.coding_standard", FT_UINT8, BASE_HEX, + VALS(ansi_isup_coding_standard_vals), 0x60,NULL, HFILL }}, + + { &hf_bat_ase_identifier, + { "BAT ASE Identifiers", "bicc.bat_ase_identifier", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bat_ase_list_of_Identifiers_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_length_indicator, + { "BAT ASE Element length indicator", "bicc.bat_ase_length_indicator", + FT_UINT16, BASE_DEC, NULL,0x0, + NULL, HFILL }}, + + { &hf_Action_Indicator, + { "BAT ASE action indicator field", "bicc.bat_ase_bat_ase_action_indicator_field", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bat_ase_action_indicator_field_vals_ext,0x00, + NULL, HFILL }}, + + { &hf_Instruction_ind_for_general_action, + { "BAT ASE Instruction indicator for general action", "bicc.bat_ase_Instruction_ind_for_general_action", + FT_UINT8, BASE_HEX, VALS(Instruction_indicator_for_general_action_vals),0x03, + NULL, HFILL }}, + + { &hf_Send_notification_ind_for_general_action, + { "Send notification indicator for general action", "bicc.bat_ase_Send_notification_ind_for_general_action", + FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), 0x04, + NULL, HFILL }}, + + { &hf_Instruction_ind_for_pass_on_not_possible, + { "Instruction ind for pass-on not possible", "bicc.bat_ase_Instruction_ind_for_pass_on_not_possible", + FT_UINT8, BASE_HEX, VALS(Instruction_indicator_for_pass_on_not_possible_vals),0x30, + NULL, HFILL }}, + + { &hf_Send_notification_ind_for_pass_on_not_possible, + { "Send notification indication for pass-on not possible", "bicc.bat_ase_Send_notification_ind_for_pass_on_not_possible", + FT_BOOLEAN, 8, TFS(&isup_Send_notification_ind_value), 0x40, + NULL, HFILL }}, + + { &hf_BCTP_Version_Indicator, + { "BCTP Version Indicator", "bicc.bat_ase_BCTP_Version_Indicator", + FT_UINT8, BASE_DEC, NULL,0x1f, + NULL, HFILL }}, + + { &hf_BVEI, + { "BVEI", "bicc.bat_ase_BCTP_BVEI", + FT_BOOLEAN, 8, TFS(&BCTP_BVEI_value), 0x40, + NULL, HFILL }}, + + { &hf_Tunnelled_Protocol_Indicator, + { "Tunnelled Protocol Indicator", "bicc.bat_ase_BCTP_Tunnelled_Protocol_Indicator", + FT_UINT8, BASE_DEC, VALS(BCTP_Tunnelled_Protocol_Indicator_vals),0x3f, + NULL, HFILL }}, + + { &hf_TPEI, + { "TPEI", "bicc.bat_ase_BCTP_tpei", + FT_BOOLEAN, 8, TFS(&BCTP_TPEI_value), 0x40, + NULL, HFILL }}, + + { &hf_bncid, + { "Backbone Network Connection Identifier (BNCId)", "bat_ase.bncid", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL }}, + + { &hf_bat_ase_biwfa, + { "Interworking Function Address( X.213 NSAP encoded)", "bat_ase_biwfa", + FT_BYTES, BASE_NONE, NULL, 0x0, + NULL, HFILL }}, + + { &hf_afi, + { "X.213 Address Format Information ( AFI )", "x213.afi", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &x213_afi_value_ext,0x0, + NULL, HFILL }}, + + { &hf_bicc_nsap_dsp, + { "X.213 Address Format Information ( DSP )", "x213.dsp", + FT_BYTES, BASE_NONE, NULL,0x0, + NULL, HFILL }}, + { &hf_characteristics, + { "Backbone network connection characteristics", "bat_ase.char", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bearer_network_connection_characteristics_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_Organization_Identifier, + { "Organization identifier subfield", "bat_ase.organization_identifier_subfield", + FT_UINT8, BASE_DEC, VALS(bat_ase_organization_identifier_subfield_vals),0x0, + NULL, HFILL }}, + + { &hf_codec_type, + { "ITU-T codec type subfield", "bat_ase.ITU_T_codec_type_subfield", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ITU_T_codec_type_subfield_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_etsi_codec_type, + { "ETSI codec type subfield", "bat_ase.ETSI_codec_type_subfield", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &ETSI_codec_type_subfield_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_active_code_set, + { "Active Code Set", "bat_ase.acs", + FT_UINT8, BASE_HEX, NULL,0x0, + NULL, HFILL }}, + + { &hf_active_code_set_12_2, + { "12.2 kbps rate", "bat_ase.acs.12_2", + FT_UINT8, BASE_HEX, NULL,0x80, + NULL, HFILL }}, + + { &hf_active_code_set_10_2, + { "10.2 kbps rate", "bat_ase.acs.10_2", + FT_UINT8, BASE_HEX, NULL,0x40, + NULL, HFILL }}, + + { &hf_active_code_set_7_95, + { "7.95 kbps rate", "bat_ase.acs.7_95", + FT_UINT8, BASE_HEX, NULL,0x20, + NULL, HFILL }}, + + { &hf_active_code_set_7_40, + { "7.40 kbps rate", "bat_ase.acs.7_40", + FT_UINT8, BASE_HEX, NULL,0x10, + NULL, HFILL }}, + + { &hf_active_code_set_6_70, + { "6.70 kbps rate", "bat_ase.acs.6_70", + FT_UINT8, BASE_HEX, NULL,0x08, + NULL, HFILL }}, + + { &hf_active_code_set_5_90, + { "5.90 kbps rate", "bat_ase.acs.5_90", + FT_UINT8, BASE_HEX, NULL,0x04, + NULL, HFILL }}, + + { &hf_active_code_set_5_15, + { "5.15 kbps rate", "bat_ase.acs.5_15", + FT_UINT8, BASE_HEX, NULL,0x02, + NULL, HFILL }}, + + { &hf_active_code_set_4_75, + { "4.75 kbps rate", "bat_ase.acs.4_75", + FT_UINT8, BASE_HEX, NULL,0x01, + NULL, HFILL }}, + + { &hf_supported_code_set, + { "Supported Code Set", "bat_ase.scs", + FT_UINT8, BASE_HEX, NULL,0x0, + NULL, HFILL }}, + + { &hf_supported_code_set_12_2, + { "12.2 kbps rate", "bat_ase.scs.12_2", + FT_UINT8, BASE_HEX, NULL,0x80, + NULL, HFILL }}, + + { &hf_supported_code_set_10_2, + { "10.2 kbps rate", "bat_ase.scs.10_2", + FT_UINT8, BASE_HEX, NULL,0x40, + NULL, HFILL }}, + + { &hf_supported_code_set_7_95, + { "7.95 kbps rate", "bat_ase.scs.7_95", + FT_UINT8, BASE_HEX, NULL,0x20, + NULL, HFILL }}, + + { &hf_supported_code_set_7_40, + { "7.40 kbps rate", "bat_ase.scs.7_40", + FT_UINT8, BASE_HEX, NULL,0x10, + NULL, HFILL }}, + + { &hf_supported_code_set_6_70, + { "6.70 kbps rate", "bat_ase.scs.6_70", + FT_UINT8, BASE_HEX, NULL,0x08, + NULL, HFILL }}, + + { &hf_supported_code_set_5_90, + { "5.90 kbps rate", "bat_ase.scs.5_90", + FT_UINT8, BASE_HEX, NULL,0x04, + NULL, HFILL }}, + + { &hf_supported_code_set_5_15, + { "5.15 kbps rate", "bat_ase.scs.5_15", + FT_UINT8, BASE_HEX, NULL,0x02, + NULL, HFILL }}, + + { &hf_supported_code_set_4_75, + { "4.75 kbps rate", "bat_ase.scs.4_75", + FT_UINT8, BASE_HEX, NULL,0x01, + NULL, HFILL }}, + + { &hf_optimisation_mode, + { "Optimisation Mode for ACS , OM", "bat_ase.optimisation_mode", + FT_UINT8, BASE_HEX, VALS(optimisation_mode_vals),0x8, + NULL, HFILL }}, + + { &hf_max_codec_modes, + { "Maximal number of Codec Modes, MACS", "bat_ase.macs", + FT_UINT8, BASE_DEC, NULL,0x07, + NULL, HFILL }}, + + + { &hf_bearer_control_tunneling, + { "Bearer control tunneling", "bat_ase.bearer_control_tunneling", + FT_BOOLEAN, 8, TFS(&Bearer_Control_Tunnelling_ind_value),0x01, + NULL, HFILL }}, + + { &hf_BAT_ASE_Comp_Report_Reason, + { "Compatibility report reason", "bat_ase.Comp_Report_Reason", + FT_UINT8, BASE_HEX, VALS(BAT_ASE_Report_Reason_vals),0x0, + NULL, HFILL }}, + + + { &hf_BAT_ASE_Comp_Report_ident, + { "Bearer control tunneling", "bat_ase.bearer_control_tunneling", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &bat_ase_list_of_Identifiers_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_BAT_ASE_Comp_Report_diagnostic, + { "Diagnostics", "bat_ase.Comp_Report_diagnostic", + FT_UINT16, BASE_HEX, NULL,0x0, + NULL, HFILL }}, + + { &hf_Local_BCU_ID, + { "Local BCU ID", "bat_ase.Local_BCU_ID", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL }}, + + { &hf_late_cut_trough_cap_ind, + { "Late Cut-through capability indicator", "bat_ase.late_cut_trough_cap_ind", + FT_BOOLEAN, 8, TFS(&late_cut_trough_cap_ind_value),0x01, + NULL, HFILL }}, + + { &hf_bat_ase_signal, + { "Q.765.5 - Signal Type", "bat_ase.signal_type", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &BAt_ASE_Signal_Type_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_bat_ase_duration, + { "Duration in ms", "bat_ase.signal_type", + FT_UINT16, BASE_DEC, NULL,0x0, + NULL, HFILL }}, + + { &hf_bat_ase_bearer_redir_ind, + { "Redirection Indicator", "bat_ase.bearer_redir_ind", + FT_UINT8, BASE_HEX|BASE_EXT_STRING, &Bearer_Redirection_Indicator_vals_ext,0x0, + NULL, HFILL }}, + + { &hf_nsap_ipv4_addr, + { "IWFA IPv4 Address", "nsap.ipv4_addr", + FT_IPv4, BASE_NONE, NULL, 0x0, + "IPv4 address", HFILL }}, + + { &hf_nsap_ipv6_addr, + { "IWFA IPv6 Address", "nsap.ipv6_addr", + FT_IPv6, BASE_NONE, NULL, 0x0, + "IPv6 address", HFILL}}, + + { &hf_iana_icp, + { "IANA ICP", "nsap.iana_icp", + FT_UINT16, BASE_HEX, VALS(iana_icp_values),0x0, + NULL, HFILL }}, + + { &hf_isup_called, + { "ISUP Called Number", "isup.called", + FT_STRING, BASE_NONE, NULL,0x0, + NULL, HFILL }}, + + { &hf_isup_calling, + { "ISUP Calling Number", "isup.calling", + FT_STRING, BASE_NONE, NULL,0x0, + NULL, HFILL }}, + + { &hf_isup_redirecting, + { "ISUP Redirecting Number", "isup.redirecting", + FT_STRING, BASE_NONE, NULL,0x0, + NULL, HFILL }}, + {&hf_isup_apm_msg_fragments, + {"Message fragments", "isup_apm.msg.fragments", + FT_NONE, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, + {&hf_isup_apm_msg_fragment, + {"Message fragment", "isup_apm.msg.fragment", + FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, + {&hf_isup_apm_msg_fragment_overlap, + {"Message fragment overlap", "isup_apm.msg.fragment.overlap", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } + }, + {&hf_isup_apm_msg_fragment_overlap_conflicts, + {"Message fragment overlapping with conflicting data","isup_apm.msg.fragment.overlap.conflicts", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } + }, + {&hf_isup_apm_msg_fragment_multiple_tails, + {"Message has multiple tail fragments", "isup_apm.msg.fragment.multiple_tails", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } + }, + {&hf_isup_apm_msg_fragment_too_long_fragment, + {"Message fragment too long", "isup_apm.msg.fragment.too_long_fragment", + FT_BOOLEAN, BASE_NONE, NULL, 0x0, NULL, HFILL } + }, + {&hf_isup_apm_msg_fragment_error, + {"Message defragmentation error", "isup_apm.msg.fragment.error", + FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, + {&hf_isup_apm_msg_reassembled_in, + {"Reassembled in", "isup_apm.msg.reassembled.in", + FT_FRAMENUM, BASE_NONE, NULL, 0x00, NULL, HFILL } + }, + {&hf_isup_apm_msg_reassembled_length, + {"Reassembled ISUP length", "isup_apm.msg.reassembled.length", + FT_UINT32, BASE_DEC, NULL, 0x00, NULL, HFILL } + }, + {&hf_isup_cvr_rsp_ind, + {"CVR Response Ind", "conn_rsp_ind", + FT_UINT8, BASE_DEC, VALS(isup_cvr_rsp_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + {&hf_isup_cvr_cg_car_ind, + {"CVR Circuit Group Carrier","cg_carrier_ind", + FT_UINT8, BASE_HEX, VALS(isup_cvr_cg_car_ind_value), BA_8BIT_MASK, + NULL, HFILL }}, + {&hf_isup_cvr_cg_double_seize, + {"Double Seize Control", "cg_char_ind.doubleSeize", + FT_UINT8, BASE_HEX, VALS(isup_cvr_cg_double_seize_value), DC_8BIT_MASK, + NULL, HFILL }}, + {&hf_isup_cvr_cg_alarm_car_ind, + {"Alarm Carrier Indicator", "cg_alarm_car_ind", + FT_UINT8, BASE_HEX, VALS(isup_cvr_alarm_car_ind_value), FE_8BIT_MASK, + NULL, HFILL }}, + {&hf_isup_cvr_cont_chk_ind, + {"Continuity Check Indicator","cg_alarm_cnt_chk", + FT_UINT8, BASE_HEX, VALS(isup_cvr_cont_chk_ind_value), HG_8BIT_MASK, + NULL,HFILL }}, + + { &hf_isup_geo_loc_presentation_restricted_ind, + { "Calling Geodetic Location presentation restricted indicator", "isup.location_presentation_restr_ind", + FT_UINT8, BASE_DEC, VALS(isup_location_presentation_restricted_ind_value), DC_8BIT_MASK, + NULL, HFILL }}, + { &hf_isup_geo_loc_screening_ind, + { "Calling Geodetic Location screening indicator", "isup.location_screening_ind", + FT_UINT8, BASE_DEC, VALS(isup_screening_ind_enhanced_value), BA_8BIT_MASK, /* using previously defined screening values */ + NULL, HFILL }} + }; /* Setup protocol subtree array */ - static gint *ett[] = { - &ett_isup, - &ett_isup_parameter, - &ett_isup_address_digits, - &ett_isup_pass_along_message, - &ett_isup_circuit_state_ind, - &ett_bat_ase, - &ett_bat_ase_element, - &ett_bat_ase_iwfa, - &ett_scs, - &ett_acs, - &ett_isup_apm_msg_fragment, - &ett_isup_apm_msg_fragments, - }; + static gint *ett[] = { + &ett_isup, + &ett_isup_parameter, + &ett_isup_address_digits, + &ett_isup_pass_along_message, + &ett_isup_circuit_state_ind, + &ett_bat_ase, + &ett_bat_ase_element, + &ett_bat_ase_iwfa, + &ett_scs, + &ett_acs, + &ett_isup_apm_msg_fragment, + &ett_isup_apm_msg_fragments, + }; /* Register the protocol name and description */ - proto_isup = proto_register_protocol("ISDN User Part", - "ISUP", "isup"); + proto_isup = proto_register_protocol("ISDN User Part", + "ISUP", "isup"); - register_dissector("isup", dissect_isup, proto_isup); + register_dissector("isup", dissect_isup, proto_isup); /* Required function calls to register the header fields and subtrees used */ - proto_register_field_array(proto_isup, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + proto_register_field_array(proto_isup, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); - isup_tap = register_tap("isup"); + isup_tap = register_tap("isup"); - isup_module = prefs_register_protocol(proto_isup, NULL); + isup_module = prefs_register_protocol(proto_isup, NULL); - prefs_register_bool_preference(isup_module, "show_cic_in_info", "Show CIC in Info column", - "Show the CIC value (in addition to the message type) in the Info column", - (gint *)&isup_show_cic_in_info); + prefs_register_bool_preference(isup_module, "show_cic_in_info", "Show CIC in Info column", + "Show the CIC value (in addition to the message type) in the Info column", + (gint *)&isup_show_cic_in_info); - prefs_register_bool_preference(isup_module, "defragment_apm", - "Reassemble APM messages", - "Whether APM messages datagrams should be reassembled", - &isup_apm_desegment); + prefs_register_bool_preference(isup_module, "defragment_apm", + "Reassemble APM messages", + "Whether APM messages datagrams should be reassembled", + &isup_apm_desegment); - /* Register the stats_tree */ - stats_tree_register_with_group("isup", "isup_msg", "_ISUP Messages", - 0, msg_stats_tree_packet, msg_stats_tree_init, - NULL, REGISTER_STAT_GROUP_TELEPHONY); + /* Register the stats_tree */ + stats_tree_register_with_group("isup", "isup_msg", "_ISUP Messages", + 0, msg_stats_tree_packet, msg_stats_tree_init, + NULL, REGISTER_STAT_GROUP_TELEPHONY); } @@ -8278,24 +8424,24 @@ void proto_register_bicc(void) { /* Setup list of header fields See Section 1.6.1 for details*/ - static hf_register_info hf[] = { - { &hf_bicc_cic, - { "Call identification Code (CIC)", "bicc.cic", - FT_UINT32, BASE_HEX, NULL, 0x0, - NULL, HFILL }}, - }; + static hf_register_info hf[] = { + { &hf_bicc_cic, + { "Call identification Code (CIC)", "bicc.cic", + FT_UINT32, BASE_HEX, NULL, 0x0, + NULL, HFILL }}, + }; /* Setup protocol subtree array */ - static gint *ett[] = { - &ett_bicc - }; - proto_bicc = proto_register_protocol("Bearer Independent Call Control", - "BICC", "bicc"); + static gint *ett[] = { + &ett_bicc + }; + proto_bicc = proto_register_protocol("Bearer Independent Call Control", + "BICC", "bicc"); /* Required function calls to register the header fields and subtrees used */ - proto_register_field_array(proto_bicc, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); + proto_register_field_array(proto_bicc, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); - register_init_routine(isup_apm_defragment_init); + register_init_routine(isup_apm_defragment_init); } /* Register isup with the sub-laying MTP L3 dissector */ |