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.

svn path=/trunk/; revision=34794
This commit is contained in:
Bill Meier 2010-11-05 22:44:03 +00:00
parent 76bc0e537b
commit b78ec52693
13 changed files with 4634 additions and 4479 deletions

View File

@ -7102,7 +7102,7 @@ void proto_register_camel(void) {
"ERROR code", HFILL }},
{ &hf_camel_cause_indicator, /* Currently not enabled */
{ "Cause indicator", "camel.cause_indicator",
FT_UINT8, BASE_DEC, VALS(q850_cause_code_vals), 0x7f,
FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q850_cause_code_vals_ext, 0x7f,
NULL, HFILL }},
{ &hf_digit,
{ "Digit Value", "camel.digit_value",
@ -8654,7 +8654,7 @@ void proto_register_camel(void) {
NULL, HFILL }},
{ &hf_camel_callingPartysCategory,
{ "callingPartysCategory", "camel.callingPartysCategory",
FT_UINT16, BASE_DEC, VALS(isup_calling_partys_category_value), 0,
FT_UINT16, BASE_DEC|BASE_EXT_STRING, &isup_calling_partys_category_value_ext, 0,
NULL, HFILL }},
{ &hf_camel_redirectingPartyID,
{ "redirectingPartyID", "camel.redirectingPartyID",

View File

@ -2307,7 +2307,7 @@ de_call_state(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gc
case 0:
proto_tree_add_uint_format_value(subtree, hf_gsm_a_dtap_call_state, tvb,
offset, 1, call_state, "%s (%u)",
val_to_str(call_state, q931_call_state_vals, "Reserved"),
val_to_str_ext_const(call_state, &q931_call_state_vals_ext, "Reserved"),
call_state);
break;
case 1:
@ -3030,7 +3030,7 @@ de_prog_ind(tvbuff_t *tvb, proto_tree *tree, guint32 offset, guint len _U_, gcha
case 0:
proto_tree_add_uint_format_value(tree, hf_gsm_a_dtap_progress_description, tvb,
curr_offset, 1, progress_description, "%s (%u)",
val_to_str(progress_description, q931_progress_description_vals, "Reserved"),
val_to_str_ext_const(progress_description, &q931_progress_description_vals_ext, "Reserved"),
progress_description);
break;
case 1:
@ -6605,7 +6605,7 @@ proto_register_gsm_a_dtap(void)
},
{ &hf_gsm_a_dtap_afi,
{ "Authority and Format Identifier", "gsm_a.dtap.afi",
FT_UINT8, BASE_HEX, VALS(x213_afi_value), 0x0,
FT_UINT8, BASE_HEX|BASE_EXT_STRING, &x213_afi_value_ext, 0x0,
NULL, HFILL }
},
{ &hf_gsm_a_dtap_rej_cause,

View File

@ -7636,7 +7636,7 @@ void proto_register_h225(void) {
NULL, HFILL }},
{ &hf_h225_protocol_discriminator,
{ "protocol-discriminator", "h225.protocol_discriminator",
FT_UINT32, BASE_DEC, VALS(q931_protocol_discriminator_vals), 0,
FT_UINT32, BASE_DEC|BASE_EXT_STRING, &q931_protocol_discriminator_vals_ext, 0,
"INTEGER_0_255", HFILL }},
{ &hf_h225_user_information,
{ "user-information", "h225.user_information",

View File

@ -1245,7 +1245,7 @@ void proto_register_h248_annex_c(void) {
{ &hf_h248_pkg_annexc_tmr,
{ "TMR", "h248.pkg.annexc.tmr",
FT_UINT8, BASE_HEX, VALS(isup_transmission_medium_requirement_value), 0,
FT_UINT8, BASE_HEX|BASE_EXT_STRING, &isup_transmission_medium_requirement_value_ext, 0,
"Transmission Medium Requirement", HFILL }},
{ &hf_h248_pkg_annexc_tmrsr,
{ "TMSR", "h248.pkg.annexc.tmsr",

View File

@ -443,7 +443,7 @@ void proto_register_q1950(void) {
},
{ &hf_h248_pkg_BCP_BNCChar,
{ "BNCChar (BNC Characteristics)", "h248.pkg.bcp.bncchar",
FT_UINT32, BASE_HEX, VALS(bearer_network_connection_characteristics_vals), 0, "BNC Characteristics", HFILL }
FT_UINT32, BASE_HEX|BASE_EXT_STRING, &bearer_network_connection_characteristics_vals_ext, 0, "BNC Characteristics", HFILL }
},
/* A.4 Bearer Network connection cut-through package */

View File

@ -9985,7 +9985,7 @@ void proto_register_inap(void) {
NULL, HFILL }},
{ &hf_inap_callingPartysCategory,
{ "callingPartysCategory", "inap.callingPartysCategory",
FT_UINT16, BASE_DEC, VALS(isup_calling_partys_category_value), 0,
FT_UINT16, BASE_DEC|BASE_EXT_STRING, &isup_calling_partys_category_value_ext, 0,
NULL, HFILL }},
{ &hf_inap_iPSSPCapabilities,
{ "iPSSPCapabilities", "inap.iPSSPCapabilities",

File diff suppressed because it is too large Load Diff

View File

@ -27,144 +27,145 @@
#ifndef PACKET_ISUP_H
#define PACKET_ISUP_H
#define ISUP_MAX_NUM_MESSAGE_TYPES 256
#define ISUP_MAX_NUM_MESSAGE_TYPES 256
typedef struct _isup_tap_rec_t {
guint8 message_type;
guint8 message_type;
/* added for VoIP calls analysis, see gtk/voip_calls.c*/
gchar *called_number;
gchar *calling_number;
guint8 cause_value;
guint8 cause_value;
} isup_tap_rec_t;
/*
* the following allows TAP code access to the messages
* without having to duplicate it. With MSVC and a
* without having to duplicate it. With MSVC and a
* libwireshark.dll, we need a special declaration.
*/
WS_VAR_IMPORT const value_string isup_message_type_value[];
WS_VAR_IMPORT const value_string isup_message_type_value_acro[];
WS_VAR_IMPORT const value_string q850_cause_code_vals[];
WS_VAR_IMPORT value_string_ext isup_message_type_value_acro_ext;
WS_VAR_IMPORT value_string_ext q850_cause_code_vals_ext;
/*
* Export some definitions and value_string tables for other dissectors
*/
/* Definition of Parameter Types */
#define PARAM_TYPE_END_OF_OPT_PARAMS 0
#define PARAM_TYPE_CALL_REF 1
#define PARAM_TYPE_TRANSM_MEDIUM_REQU 2
#define PARAM_TYPE_ACC_TRANSP 3
#define PARAM_TYPE_CALLED_PARTY_NR 4
#define PARAM_TYPE_SUBSQT_NR 5
#define PARAM_TYPE_NATURE_OF_CONN_IND 6
#define PARAM_TYPE_FORW_CALL_IND 7
#define PARAM_TYPE_OPT_FORW_CALL_IND 8
#define PARAM_TYPE_CALLING_PRTY_CATEG 9
#define PARAM_TYPE_CALLING_PARTY_NR 10
#define PARAM_TYPE_REDIRECTING_NR 11
#define PARAM_TYPE_REDIRECTION_NR 12
#define PARAM_TYPE_CONNECTION_REQ 13
#define PARAM_TYPE_INFO_REQ_IND 14
#define PARAM_TYPE_INFO_IND 15
#define PARAM_TYPE_CONTINUITY_IND 16
#define PARAM_TYPE_BACKW_CALL_IND 17
#define PARAM_TYPE_CAUSE_INDICATORS 18
#define PARAM_TYPE_REDIRECTION_INFO 19
#define PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE 21
#define PARAM_TYPE_RANGE_AND_STATUS 22
#define PARAM_TYPE_FACILITY_IND 24
#define PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD 26
#define PARAM_TYPE_USER_SERVICE_INFO 29
#define PARAM_TYPE_SIGNALLING_POINT_CODE 30
#define PARAM_TYPE_USER_TO_USER_INFO 32
#define PARAM_TYPE_CONNECTED_NR 33
#define PARAM_TYPE_SUSP_RESUME_IND 34
#define PARAM_TYPE_TRANSIT_NETW_SELECT 35
#define PARAM_TYPE_EVENT_INFO 36
#define PARAM_TYPE_CIRC_ASSIGN_MAP 37
#define PARAM_TYPE_CIRC_STATE_IND 38
#define PARAM_TYPE_AUTO_CONG_LEVEL 39
#define PARAM_TYPE_ORIG_CALLED_NR 40
#define PARAM_TYPE_OPT_BACKW_CALL_IND 41
#define PARAM_TYPE_USER_TO_USER_IND 42
#define PARAM_TYPE_ORIG_ISC_POINT_CODE 43
#define PARAM_TYPE_GENERIC_NOTIF_IND 44
#define PARAM_TYPE_CALL_HIST_INFO 45
#define PARAM_TYPE_ACC_DELIV_INFO 46
#define PARAM_TYPE_NETW_SPECIFIC_FACLTY 47
#define PARAM_TYPE_USER_SERVICE_INFO_PR 48
#define PARAM_TYPE_PROPAG_DELAY_COUNTER 49
#define PARAM_TYPE_REMOTE_OPERATIONS 50
#define PARAM_TYPE_SERVICE_ACTIVATION 51
#define PARAM_TYPE_USER_TELESERV_INFO 52
#define PARAM_TYPE_TRANSM_MEDIUM_USED 53
#define PARAM_TYPE_CALL_DIV_INFO 54
#define PARAM_TYPE_ECHO_CTRL_INFO 55
#define PARAM_TYPE_MSG_COMPAT_INFO 56
#define PARAM_TYPE_PARAM_COMPAT_INFO 57
#define PARAM_TYPE_MLPP_PRECEDENCE 58
#define PARAM_TYPE_MCID_REQ_IND 59
#define PARAM_TYPE_MCID_RSP_IND 60
#define PARAM_TYPE_HOP_COUNTER 61
#define PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR 62
#define PARAM_TYPE_LOCATION_NR 63
#define PARAM_TYPE_REDIR_NR_RSTRCT 64
#define PARAM_TYPE_CALL_TRANS_REF 67
#define PARAM_TYPE_LOOP_PREV_IND 68
#define PARAM_TYPE_CALL_TRANS_NR 69
#define PARAM_TYPE_CCSS 75
#define PARAM_TYPE_FORW_GVNS 76
#define PARAM_TYPE_BACKW_GVNS 77
#define PARAM_TYPE_REDIRECT_CAPAB 78
#define PARAM_TYPE_NETW_MGMT_CTRL 91
#define PARAM_TYPE_CORRELATION_ID 101
#define PARAM_TYPE_SCF_ID 102
#define PARAM_TYPE_CALL_DIV_TREAT_IND 110
#define PARAM_TYPE_CALLED_IN_NR 111
#define PARAM_TYPE_CALL_OFF_TREAT_IND 112
#define PARAM_TYPE_CHARGED_PARTY_IDENT 113
#define PARAM_TYPE_CONF_TREAT_IND 114
#define PARAM_TYPE_DISPLAY_INFO 115
#define PARAM_TYPE_UID_ACTION_IND 116
#define PARAM_TYPE_UID_CAPAB_IND 117
#define PARAM_TYPE_REDIRECT_COUNTER 119
#define PARAM_TYPE_APPLICATON_TRANS 120
#define PARAM_TYPE_COLLECT_CALL_REQ 121
#define PARAM_TYPE_CALLING_GEODETIC_LOCATION 129 /* ANSI is the same */
#define PARAM_TYPE_GENERIC_NR 192
#define PARAM_TYPE_GENERIC_DIGITS 193
#define PARAM_TYPE_JURISDICTION 196
#define PARAM_TYPE_GENERIC_NAME 199
#define PARAM_TYPE_ORIG_LINE_INFO 234
#define PARAM_TYPE_CHARGE_NR 235
#define PARAM_TYPE_END_OF_OPT_PARAMS 0
#define PARAM_TYPE_CALL_REF 1
#define PARAM_TYPE_TRANSM_MEDIUM_REQU 2
#define PARAM_TYPE_ACC_TRANSP 3
#define PARAM_TYPE_CALLED_PARTY_NR 4
#define PARAM_TYPE_SUBSQT_NR 5
#define PARAM_TYPE_NATURE_OF_CONN_IND 6
#define PARAM_TYPE_FORW_CALL_IND 7
#define PARAM_TYPE_OPT_FORW_CALL_IND 8
#define PARAM_TYPE_CALLING_PRTY_CATEG 9
#define PARAM_TYPE_CALLING_PARTY_NR 10
#define PARAM_TYPE_REDIRECTING_NR 11
#define PARAM_TYPE_REDIRECTION_NR 12
#define PARAM_TYPE_CONNECTION_REQ 13
#define PARAM_TYPE_INFO_REQ_IND 14
#define PARAM_TYPE_INFO_IND 15
#define PARAM_TYPE_CONTINUITY_IND 16
#define PARAM_TYPE_BACKW_CALL_IND 17
#define PARAM_TYPE_CAUSE_INDICATORS 18
#define PARAM_TYPE_REDIRECTION_INFO 19
#define PARAM_TYPE_CIRC_GRP_SV_MSG_TYPE 21
#define PARAM_TYPE_RANGE_AND_STATUS 22
#define PARAM_TYPE_FACILITY_IND 24
#define PARAM_TYPE_CLSD_USR_GRP_ILOCK_CD 26
#define PARAM_TYPE_USER_SERVICE_INFO 29
#define PARAM_TYPE_SIGNALLING_POINT_CODE 30
#define PARAM_TYPE_USER_TO_USER_INFO 32
#define PARAM_TYPE_CONNECTED_NR 33
#define PARAM_TYPE_SUSP_RESUME_IND 34
#define PARAM_TYPE_TRANSIT_NETW_SELECT 35
#define PARAM_TYPE_EVENT_INFO 36
#define PARAM_TYPE_CIRC_ASSIGN_MAP 37
#define PARAM_TYPE_CIRC_STATE_IND 38
#define PARAM_TYPE_AUTO_CONG_LEVEL 39
#define PARAM_TYPE_ORIG_CALLED_NR 40
#define PARAM_TYPE_OPT_BACKW_CALL_IND 41
#define PARAM_TYPE_USER_TO_USER_IND 42
#define PARAM_TYPE_ORIG_ISC_POINT_CODE 43
#define PARAM_TYPE_GENERIC_NOTIF_IND 44
#define PARAM_TYPE_CALL_HIST_INFO 45
#define PARAM_TYPE_ACC_DELIV_INFO 46
#define PARAM_TYPE_NETW_SPECIFIC_FACLTY 47
#define PARAM_TYPE_USER_SERVICE_INFO_PR 48
#define PARAM_TYPE_PROPAG_DELAY_COUNTER 49
#define PARAM_TYPE_REMOTE_OPERATIONS 50
#define PARAM_TYPE_SERVICE_ACTIVATION 51
#define PARAM_TYPE_USER_TELESERV_INFO 52
#define PARAM_TYPE_TRANSM_MEDIUM_USED 53
#define PARAM_TYPE_CALL_DIV_INFO 54
#define PARAM_TYPE_ECHO_CTRL_INFO 55
#define PARAM_TYPE_MSG_COMPAT_INFO 56
#define PARAM_TYPE_PARAM_COMPAT_INFO 57
#define PARAM_TYPE_MLPP_PRECEDENCE 58
#define PARAM_TYPE_MCID_REQ_IND 59
#define PARAM_TYPE_MCID_RSP_IND 60
#define PARAM_TYPE_HOP_COUNTER 61
#define PARAM_TYPE_TRANSM_MEDIUM_RQUR_PR 62
#define PARAM_TYPE_LOCATION_NR 63
#define PARAM_TYPE_REDIR_NR_RSTRCT 64
#define PARAM_TYPE_CALL_TRANS_REF 67
#define PARAM_TYPE_LOOP_PREV_IND 68
#define PARAM_TYPE_CALL_TRANS_NR 69
#define PARAM_TYPE_CCSS 75
#define PARAM_TYPE_FORW_GVNS 76
#define PARAM_TYPE_BACKW_GVNS 77
#define PARAM_TYPE_REDIRECT_CAPAB 78
#define PARAM_TYPE_NETW_MGMT_CTRL 91
#define PARAM_TYPE_CORRELATION_ID 101
#define PARAM_TYPE_SCF_ID 102
#define PARAM_TYPE_CALL_DIV_TREAT_IND 110
#define PARAM_TYPE_CALLED_IN_NR 111
#define PARAM_TYPE_CALL_OFF_TREAT_IND 112
#define PARAM_TYPE_CHARGED_PARTY_IDENT 113
#define PARAM_TYPE_CONF_TREAT_IND 114
#define PARAM_TYPE_DISPLAY_INFO 115
#define PARAM_TYPE_UID_ACTION_IND 116
#define PARAM_TYPE_UID_CAPAB_IND 117
#define PARAM_TYPE_REDIRECT_COUNTER 119
#define PARAM_TYPE_APPLICATON_TRANS 120
#define PARAM_TYPE_COLLECT_CALL_REQ 121
#define PARAM_TYPE_CALLING_GEODETIC_LOCATION 129 /* ANSI is the same */
#define PARAM_TYPE_GENERIC_NR 192
#define PARAM_TYPE_GENERIC_DIGITS 193
#define PARAM_TYPE_JURISDICTION 196
#define PARAM_TYPE_GENERIC_NAME 199
#define PARAM_TYPE_ORIG_LINE_INFO 234
#define PARAM_TYPE_CHARGE_NR 235
#define ANSI_ISUP_PARAM_TYPE_OPER_SERV_INF 0xC2
#define ANSI_ISUP_PARAM_TYPE_EGRESS 0xC3
#define ANSI_ISUP_PARAM_TYPE_JURISDICTION 0xC4
#define ANSI_ISUP_PARAM_TYPE_CARRIER_ID 0xC5
#define ANSI_ISUP_PARAM_TYPE_BUSINESS_GRP 0xC6
#define ANSI_ISUP_PARAM_TYPE_GENERIC_NAME 0xC7
#define ANSI_ISUP_PARAM_TYPE_NOTIF_IND 0xE1
#define ANSI_ISUP_PARAM_TYPE_OPER_SERV_INF 0xC2 /* 194 */
#define ANSI_ISUP_PARAM_TYPE_EGRESS 0xC3 /* 195 */
#define ANSI_ISUP_PARAM_TYPE_JURISDICTION 0xC4 /* 196 */
#define ANSI_ISUP_PARAM_TYPE_CARRIER_ID 0xC5 /* 197 */
#define ANSI_ISUP_PARAM_TYPE_BUSINESS_GRP 0xC6 /* 198 */
#define ANSI_ISUP_PARAM_TYPE_GENERIC_NAME 0xC7 /* 199*/
#define ANSI_ISUP_PARAM_TYPE_NOTIF_IND 0xE1 /* 225 */
#define ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND 229
#define ANSI_ISUP_PARAM_TYPE_CVR_RESP_IND 230
#define ANSI_ISUP_PARAM_TYPE_OUT_TRK_GRP_NM 231
#define ANSI_ISUP_PARAM_TYPE_CI_NAME_IND 232
#define ANSI_ISUP_PARAM_CLLI_CODE 233
#define ANSI_ISUP_PARAM_TYPE_CG_CHAR_IND 229
#define ANSI_ISUP_PARAM_TYPE_CVR_RESP_IND 230
#define ANSI_ISUP_PARAM_TYPE_OUT_TRK_GRP_NM 231
#define ANSI_ISUP_PARAM_TYPE_CI_NAME_IND 232
#define ANSI_ISUP_PARAM_CLLI_CODE 233
#define ANSI_ISUP_PARAM_ORIG_LINE_INF 0xEA
#define ANSI_ISUP_PARAM_CHRG_NO 0xEB
#define ANSI_ISUP_PARAM_SERV_CODE_IND 0xEC
#define ANSI_ISUP_PARAM_SPEC_PROC_REQ 0xED
#define ANSI_ISUP_PARAM_CARRIER_SEL_INF 0xEE
#define ANSI_ISUP_PARAM_NET_TRANS 0xEF
#define ANSI_ISUP_PARAM_ORIG_LINE_INF 0xEA /* 234 */
#define ANSI_ISUP_PARAM_CHRG_NO 0xEB /* 235 */
#define ANSI_ISUP_PARAM_SERV_CODE_IND 0xEC /* 236 */
#define ANSI_ISUP_PARAM_SPEC_PROC_REQ 0xED /* 237 */
#define ANSI_ISUP_PARAM_CARRIER_SEL_INF 0xEE /* 238 */
#define ANSI_ISUP_PARAM_NET_TRANS 0xEF /* 239 */
extern const value_string isup_parameter_type_value[];
extern const value_string isup_transmission_medium_requirement_value[];
WS_VAR_IMPORT const value_string isup_calling_partys_category_value[];
extern const value_string bearer_network_connection_characteristics_vals[];
extern const value_string x213_afi_value[];
extern const value_string isup_parameter_type_value[];
extern value_string_ext isup_transmission_medium_requirement_value_ext;
extern value_string_ext bearer_network_connection_characteristics_vals_ext;
extern value_string_ext x213_afi_value_ext;
WS_VAR_IMPORT value_string_ext isup_calling_partys_category_value_ext;
/*
* Export dissection of some parameters
*/

View File

@ -112,8 +112,8 @@ static int hf_q931_segment_overlap_conflict = -1;
static int hf_q931_segment_multiple_tails = -1;
static int hf_q931_segment_too_long_segment = -1;
static int hf_q931_segment_error = -1;
static int hf_q931_reassembled_in = -1;
static int hf_q931_reassembled_length = -1;
static int hf_q931_reassembled_in = -1;
static int hf_q931_reassembled_length = -1;
static gint ett_q931 = -1;
static gint ett_q931_ie = -1;
@ -154,7 +154,7 @@ static gboolean q931_desegment = TRUE;
static dissector_handle_t h225_handle;
static dissector_handle_t q931_tpkt_handle;
static dissector_handle_t q931_tpkt_pdu_handle;
static dissector_handle_t data_handle = NULL;
static dissector_handle_t data_handle = NULL;
static heur_dissector_list_t q931_user_heur_subdissector_list;
@ -166,50 +166,52 @@ const value_string q931_message_type_vals[] = {
{ Q931_ESCAPE, "ESCAPE" },
{ Q931_ALERTING, "ALERTING" },
{ Q931_CALL_PROCEEDING, "CALL PROCEEDING" },
{ Q931_CONNECT, "CONNECT" },
{ Q931_CONNECT_ACK, "CONNECT ACKNOWLEDGE" },
{ Q931_PROGRESS, "PROGRESS" },
{ Q931_SETUP, "SETUP" },
{ Q931_GROUIP_SERVICE, "GROUP SERVICE" },
{ Q931_CONNECT, "CONNECT" },
{ Q931_RESYNC_REQ, "RESYNC REQ" },
{ Q931_RESYNC_RESP, "RESYNC RESP" },
{ Q931_VERSION, "VERSION" },
{ Q931_GROUIP_SERVICE_ACK, "GROUP SERVICE ACK" },
{ Q931_SETUP_ACK, "SETUP ACKNOWLEDGE" },
{ Q931_HOLD, "HOLD" },
{ Q931_HOLD_ACK, "HOLD_ACKNOWLEDGE" },
{ Q931_HOLD_REJECT, "HOLD_REJECT" },
{ Q931_RESUME, "RESUME" },
{ Q931_RESUME_ACK, "RESUME ACKNOWLEDGE" },
{ Q931_CONNECT_ACK, "CONNECT ACKNOWLEDGE" },
{ Q931_USER_INFORMATION, "USER INFORMATION" },
{ Q931_SUSPEND_REJECT, "SUSPEND REJECT" },
{ Q931_RESUME_REJECT, "RESUME REJECT" },
{ Q931_HOLD, "HOLD" },
{ Q931_SUSPEND, "SUSPEND" },
{ Q931_RESUME, "RESUME" },
{ Q931_HOLD_ACK, "HOLD_ACKNOWLEDGE" },
{ Q931_SUSPEND_ACK, "SUSPEND ACKNOWLEDGE" },
{ Q931_RESUME_ACK, "RESUME ACKNOWLEDGE" },
{ Q931_HOLD_REJECT, "HOLD_REJECT" },
{ Q931_RETRIEVE, "RETRIEVE" },
{ Q931_RETRIEVE_ACK, "RETRIEVE ACKNOWLEDGE" },
{ Q931_RETRIEVE_REJECT, "RETRIEVE REJECT" },
{ Q931_SUSPEND, "SUSPEND" },
{ Q931_SUSPEND_ACK, "SUSPEND ACKNOWLEDGE" },
{ Q931_SUSPEND_REJECT, "SUSPEND REJECT" },
{ Q931_USER_INFORMATION, "USER INFORMATION" },
{ Q931_DETACH, "DETACH" },
{ Q931_DETACH_ACKNOWLEDGE, "DETACH ACKNOWLEDGE" },
{ Q931_DISCONNECT, "DISCONNECT" },
{ Q931_RELEASE, "RELEASE" },
{ Q931_RELEASE_COMPLETE, "RELEASE COMPLETE" },
{ Q931_RESTART, "RESTART" },
{ Q931_DETACH_ACKNOWLEDGE, "DETACH ACKNOWLEDGE" },
{ Q931_RELEASE, "RELEASE" },
{ Q931_RESTART_ACK, "RESTART ACKNOWLEDGE" },
{ Q931_CONGESTION_CONTROL, "CONGESTION CONTROL" },
{ Q931_FACILITY, "FACILITY" },
{ Q931_FACILITY_ACKNOWLEDGE, "FACILITY ACKNOWLEDGE" },
{ Q931_FACILITY_REJECT, "FACILITY REJECT" },
{ Q931_INFORMATION, "INFORMATION" },
{ Q931_NOTIFY, "NOTIFY" },
{ Q931_REGISTER, "REGISTER" },
{ Q931_RELEASE_COMPLETE, "RELEASE COMPLETE" },
{ Q931_SEGMENT, "SEGMENT" },
{ Q931_STATUS, "STATUS" },
{ Q931_FACILITY, "FACILITY" },
{ Q931_REGISTER, "REGISTER" },
{ Q931_FACILITY_ACKNOWLEDGE, "FACILITY ACKNOWLEDGE" },
{ Q931_NOTIFY, "NOTIFY" },
{ Q931_FACILITY_REJECT, "FACILITY REJECT" },
{ Q931_STATUS_ENQUIRY, "STATUS ENQUIRY" },
{ Q931_VERSION, "VERSION" },
{ Q931_GROUIP_SERVICE, "GROUP SERVICE" },
{ Q931_GROUIP_SERVICE_ACK, "GROUP SERVICE ACK" },
{ Q931_RESYNC_REQ, "RESYNC REQ" },
{ Q931_RESYNC_RESP, "RESYNC RESP" },
{ Q931_CONGESTION_CONTROL, "CONGESTION CONTROL" },
{ Q931_INFORMATION, "INFORMATION" },
{ Q931_STATUS, "STATUS" },
{ 0, NULL }
};
static value_string_ext q931_message_type_vals_ext = VALUE_STRING_EXT_INIT(q931_message_type_vals);
const value_string dms_message_type_vals[] = {
static const value_string dms_message_type_vals[] = {
{ DMS_SERVICE_ACKNOWLEDGE, "SERVICE ACKNOWLEDGE" },
{ DMS_SERVICE, "SERVICE" },
{ 0, NULL }
@ -426,6 +428,7 @@ static const value_string q931_info_element_vals0[] = {
{ Q931_IE_CONNECTED_SUBADDR, "Connected subaddress" },
{ 0, NULL }
};
/* Codeset 1 */
static const value_string q931_info_element_vals1[] = {
{ 0, NULL }
@ -572,6 +575,7 @@ static const value_string q931_uil1_vals[] = {
{ 0x0b, "Recommendation G.729 CS-ACELP" },
{ 0, NULL }
};
static value_string_ext q931_uil1_vals_ext = VALUE_STRING_EXT_INIT(q931_uil1_vals);
static const value_string q931_l1_user_rate_vals[] = {
{ 0x00, "Rate indicated by E-bits" },
@ -603,6 +607,7 @@ static const value_string q931_l1_user_rate_vals[] = {
{ 0x1F, "12 kbit/s" },
{ 0, NULL }
};
static value_string_ext q931_l1_user_rate_vals_ext = VALUE_STRING_EXT_INIT(q931_l1_user_rate_vals);
static const value_string q931_l1_intermediate_rate_vals[] = {
{ 0x20, "8 kbit/s" },
@ -650,6 +655,7 @@ static const value_string q931_l1_modem_type_vals[] = {
{ 0x1E, "V.34" },
{ 0, NULL }
};
static value_string_ext q931_l1_modem_type_vals_ext = VALUE_STRING_EXT_INIT(q931_l1_modem_type_vals);
#define Q931_UIL2_USER_SPEC 0x10
@ -670,6 +676,7 @@ static const value_string q931_uil2_vals[] = {
{ 0x11, "ISO 7776 DTE-DTE operation" },
{ 0, NULL }
};
static value_string_ext q931_uil2_vals_ext = VALUE_STRING_EXT_INIT(q931_uil2_vals);
static const value_string q931_mode_vals[] = {
{ 0x20, "Normal mode" },
@ -736,7 +743,7 @@ static const value_string q931_bearer_capability_layer_ident_vals[] = {
{ 0x02, "Layer 2 identifier" },
{ 0x03, "Layer 3 identifier" },
{ 0x00, NULL }
};
};
void
dissect_q931_bearer_capability_ie(tvbuff_t *tvb, int offset, int len,
@ -830,7 +837,7 @@ dissect_q931_bearer_capability_ie(tvbuff_t *tvb, int offset, int len,
(octet & 0x20) ? "" : "not ");
proto_tree_add_text(tree, tvb, offset, 1,
"User rate: %s",
val_to_str(octet & 0x1F, q931_l1_user_rate_vals,
val_to_str_ext(octet & 0x1F, &q931_l1_user_rate_vals_ext,
"Unknown (0x%02X)"));
offset += 1;
len -= 1;
@ -922,7 +929,7 @@ dissect_q931_bearer_capability_ie(tvbuff_t *tvb, int offset, int len,
} else {
proto_tree_add_text(tree, tvb, offset, 1,
"Modem type: %s",
val_to_str(modem_type, q931_l1_modem_type_vals,
val_to_str_ext(modem_type, &q931_l1_modem_type_vals_ext,
"Unknown (0x%02X)"));
}
offset += 1;
@ -943,7 +950,7 @@ l1_done:
uil2_protocol = octet & 0x1F;
proto_tree_add_text(tree, tvb, offset, 1,
"User information layer 2 protocol: %s",
val_to_str(uil2_protocol, q931_uil2_vals,
val_to_str_ext(uil2_protocol, &q931_uil2_vals_ext,
"Unknown (0x%02X)"));
offset += 1;
len -= 1;
@ -1075,7 +1082,7 @@ l3_done:
*/
const value_string q931_cause_location_vals[] = {
static const value_string q931_cause_location_vals[] = {
{ 0x00, "User (U)" },
{ 0x01, "Private network serving the local user (LPN)" },
{ 0x02, "Public network serving the local user (LN)" },
@ -1086,6 +1093,7 @@ const value_string q931_cause_location_vals[] = {
{ 0x0A, "Network beyond interworking point (BI)" },
{ 0, NULL }
};
value_string_ext q931_cause_location_vals_ext = VALUE_STRING_EXT_INIT(q931_cause_location_vals);
static const value_string q931_cause_recommendation_vals[] = {
{ 0x00, "Q.931" },
@ -1113,7 +1121,7 @@ static const value_string q931_cause_recommendation_vals[] = {
#define Q931_CAUSE_MSG_INCOMPAT_W_CS 0x65
#define Q931_CAUSE_REC_TIMER_EXP 0x66
const value_string q931_cause_code_vals[] = {
static const value_string q931_cause_code_vals[] = {
{ 0x00, "Valid cause code not yet received" },
{ Q931_CAUSE_UNALLOC_NUMBER, "Unallocated (unassigned) number" },
{ 0x02, "No route to specified transit network" },
@ -1211,6 +1219,7 @@ const value_string q931_cause_code_vals[] = {
{ 0x7F, "Internetworking, unspecified" },
{ 0, NULL }
};
value_string_ext q931_cause_code_vals_ext = VALUE_STRING_EXT_INIT(q931_cause_code_vals);
static const value_string q931_cause_condition_vals[] = {
{ 0x00, "Unknown" },
@ -1234,7 +1243,7 @@ static const gchar *get_message_name(guint8 prot_discr, guint8 message_type) {
if (prot_discr == NLPID_DMS)
return val_to_str(message_type, dms_message_type_vals, "Unknown (0x%02X)");
else
return val_to_str(message_type, q931_message_type_vals, "Unknown (0x%02X)");
return val_to_str_ext(message_type, &q931_message_type_vals_ext, "Unknown (0x%02X)");
}
static void
@ -1378,7 +1387,7 @@ dissect_q931_cause_ie_unsafe(tvbuff_t *tvb, int offset, int len,
case Q931_CAUSE_MSG_INCOMPAT_W_CS:
proto_tree_add_text(tree, tvb, offset, 1,
"Message type: %s",
val_to_str(tvb_get_guint8(tvb, offset), q931_message_type_vals,
val_to_str_ext(tvb_get_guint8(tvb, offset), &q931_message_type_vals_ext,
"Unknown (0x%02X)"));
break;
@ -1441,7 +1450,7 @@ dissect_q931_change_status_ie(tvbuff_t *tvb, int offset, int len _U_, proto_tree
/*
* Dissect a Call state information element.
*/
const value_string q931_call_state_vals[] = {
static const value_string q931_call_state_vals[] = {
{ 0x00, "Null" },
{ 0x01, "Call initiated" },
{ 0x02, "Overlap sending" },
@ -1463,6 +1472,7 @@ const value_string q931_call_state_vals[] = {
{ 0x3E, "Restart" },
{ 0, NULL }
};
value_string_ext q931_call_state_vals_ext = VALUE_STRING_EXT_INIT(q931_call_state_vals);
static void
dissect_q931_call_state_ie(tvbuff_t *tvb, int offset, int len,
@ -1488,7 +1498,7 @@ dissect_q931_call_state_ie(tvbuff_t *tvb, int offset, int len,
}
proto_tree_add_text(tree, tvb, offset, 1,
"Call state: %s",
val_to_str(octet & 0x3F, q931_call_state_vals,
val_to_str_ext(octet & 0x3F, &q931_call_state_vals_ext,
"Unknown (0x%02X)"));
}
@ -1539,7 +1549,7 @@ dissect_q931_channel_identification_ie(tvbuff_t *tvb, int offset, int len,
proto_tree_add_item(tree, hf_q931_channel_interface_type, tvb, offset, 1, FALSE);
proto_tree_add_item(tree, hf_q931_channel_exclusive, tvb, offset, 1, FALSE);
proto_tree_add_item(tree, hf_q931_channel_dchan, tvb, offset, 1, FALSE);
if (octet & Q931_NOT_BASIC_CHANNEL) {
proto_tree_add_item(tree, hf_q931_channel_selection_pri, tvb, offset, 1, FALSE);
} else {
@ -1590,7 +1600,7 @@ dissect_q931_channel_identification_ie(tvbuff_t *tvb, int offset, int len,
}
proto_tree_add_item(tree, hf_q931_channel_map, tvb, offset, 1, FALSE);
proto_tree_add_item(tree, hf_q931_channel_element_type, tvb, offset, 1, FALSE);
offset += 1;
len -= 1;
@ -1602,7 +1612,7 @@ dissect_q931_channel_identification_ie(tvbuff_t *tvb, int offset, int len,
"Slot map: 0x%02x", octet2);
offset += 1;
len -= 1;
}
}
} else {
guint8 octet2;
do {
@ -1623,7 +1633,7 @@ dissect_q931_channel_identification_ie(tvbuff_t *tvb, int offset, int len,
/*
* Dissect a Progress indicator information element.
*/
const value_string q931_progress_description_vals[] = {
static const value_string q931_progress_description_vals[] = {
{ 0x01, "Call is not end-to-end ISDN - progress information available in-band" },
{ 0x02, "Destination address is non-ISDN" },
{ 0x03, "Origination address is non-ISDN" },
@ -1632,6 +1642,7 @@ const value_string q931_progress_description_vals[] = {
{ 0x08, "In-band information or an appropriate pattern is now available" },
{ 0, NULL }
};
value_string_ext q931_progress_description_vals_ext = VALUE_STRING_EXT_INIT(q931_progress_description_vals);
void
dissect_q931_progress_indicator_ie(tvbuff_t *tvb, int offset, int len,
@ -1657,7 +1668,7 @@ dissect_q931_progress_indicator_ie(tvbuff_t *tvb, int offset, int len,
}
proto_tree_add_text(tree, tvb, offset, 1,
"Location: %s",
val_to_str(octet & 0x0F, q931_cause_location_vals,
val_to_str_ext(octet & 0x0F, &q931_cause_location_vals_ext,
"Unknown (0x%X)"));
offset += 1;
len -= 1;
@ -1667,7 +1678,7 @@ dissect_q931_progress_indicator_ie(tvbuff_t *tvb, int offset, int len,
octet = tvb_get_guint8(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 1,
"Progress description: %s",
val_to_str(octet & 0x7F, q931_progress_description_vals,
val_to_str_ext(octet & 0x7F, &q931_progress_description_vals_ext,
"Unknown (0x%02X)"));
}
@ -1823,6 +1834,7 @@ static const value_string q931_signal_vals[] = {
{ 0x4F, "Alerting off" },
{ 0, NULL }
};
static value_string_ext q931_signal_vals_ext = VALUE_STRING_EXT_INIT(q931_signal_vals);
static void
dissect_q931_signal_ie(tvbuff_t *tvb, int offset, int len,
@ -1835,7 +1847,7 @@ dissect_q931_signal_ie(tvbuff_t *tvb, int offset, int len,
}
proto_tree_add_text(tree, tvb, offset, 1,
"Signal: %s",
val_to_str(tvb_get_guint8(tvb, offset), q931_signal_vals,
val_to_str_ext(tvb_get_guint8(tvb, offset), &q931_signal_vals_ext,
"Unknown (0x%02X)"));
}
@ -1856,6 +1868,7 @@ static const value_string q931_throughput_class_vals[] = {
{ 0x0D, "64000 bit/s" },
{ 0, NULL }
};
static value_string_ext q931_throughput_class_vals_ext = VALUE_STRING_EXT_INIT(q931_throughput_class_vals);
static void
dissect_q931_information_rate_ie(tvbuff_t *tvb, int offset, int len,
@ -1868,20 +1881,20 @@ dissect_q931_information_rate_ie(tvbuff_t *tvb, int offset, int len,
}
proto_tree_add_text(tree, tvb, offset + 0, 1,
"Incoming information rate: %s",
val_to_str(tvb_get_guint8(tvb, offset + 0) & 0x1F,
q931_throughput_class_vals, "Unknown (0x%02X)"));
val_to_str_ext(tvb_get_guint8(tvb, offset + 0) & 0x1F,
&q931_throughput_class_vals_ext, "Unknown (0x%02X)"));
proto_tree_add_text(tree, tvb, offset + 1, 1,
"Outgoing information rate: %s",
val_to_str(tvb_get_guint8(tvb, offset + 1) & 0x1F,
q931_throughput_class_vals, "Unknown (0x%02X)"));
val_to_str_ext(tvb_get_guint8(tvb, offset + 1) & 0x1F,
&q931_throughput_class_vals_ext, "Unknown (0x%02X)"));
proto_tree_add_text(tree, tvb, offset + 2, 1,
"Minimum incoming information rate: %s",
val_to_str(tvb_get_guint8(tvb, offset + 2) & 0x1F,
q931_throughput_class_vals, "Unknown (0x%02X)"));
val_to_str_ext(tvb_get_guint8(tvb, offset + 2) & 0x1F,
&q931_throughput_class_vals_ext, "Unknown (0x%02X)"));
proto_tree_add_text(tree, tvb, offset + 3, 1,
"Minimum outgoing information rate: %s",
val_to_str(tvb_get_guint8(tvb, offset + 3) & 0x1F,
q931_throughput_class_vals, "Unknown (0x%02X)"));
val_to_str_ext(tvb_get_guint8(tvb, offset + 3) & 0x1F,
&q931_throughput_class_vals_ext, "Unknown (0x%02X)"));
}
static int
@ -2189,7 +2202,7 @@ dissect_q931_number_ie(tvbuff_t *tvb, int offset, int len,
proto_tree_add_uint(tree, hf_q931_numbering_plan, tvb, offset, 1, octet);
proto_tree_add_uint(tree, hf_q931_number_type, tvb, offset, 1, octet);
proto_tree_add_boolean(tree, hf_q931_extension_ind, tvb, offset, 1, octet);
offset += 1;
len -= 1;
@ -2330,9 +2343,10 @@ static const value_string q931_high_layer_characteristics_vals[] = {
{ Q931_AUDIOVISUAL, "F.720/F.821 and F.731 Profile 1a videotelephony" },
{ 0x61, "F.702 and F.731 Profile 1b videoconferencing" },
{ 0x62, "F.702 and F.731 audiographic conferencing" },
{ 0x68, "F.700-series Multimedia services" },
{ 0x68, "F.700-series Multimedia services" },
{ 0, NULL }
};
static value_string_ext q931_high_layer_characteristics_vals_ext = VALUE_STRING_EXT_INIT(q931_high_layer_characteristics_vals);
static const value_string q931_extended_high_layer_characteristics_vals[] = {
{ 0x01, "Telephony" },
@ -2352,9 +2366,10 @@ static const value_string q931_extended_high_layer_characteristics_vals[] = {
{ Q931_AUDIOVISUAL, "F.720/F.821 and F.731 Profile 1a videotelephony" },
{ 0x61, "F.702 and F.731 Profile 1b videoconferencing" },
{ 0x62, "F.702 and F.731 audiographic conferencing" },
{ 0x68, "F.700-series Multimedia services" },
{ 0x68, "F.700-series Multimedia services" },
{ 0, NULL }
};
static value_string_ext q931_extended_high_layer_characteristics_vals_ext = VALUE_STRING_EXT_INIT(q931_extended_high_layer_characteristics_vals);
static const value_string q931_audiovisual_characteristics_vals[] = {
{ 0x01, "Capability set of initial channel of H.221" },
@ -2430,11 +2445,11 @@ dissect_q931_high_layer_compat_ie(tvbuff_t *tvb, int offset, int len,
(characteristics == 0x68)) {
proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
proto_tree_add_uint(tree, hf_q931_extended_audiovisual_characteristics, tvb, offset, 1, octet);
}
}
else if ((characteristics == Q931_MANAGEMENT) || (characteristics == Q931_MAINTENANCE)) {
proto_tree_add_item(tree, hf_q931_extension_ind, tvb, offset, 1, FALSE);
proto_tree_add_uint(tree, hf_q931_extended_high_layer_characteristics, tvb, offset, 1, octet);
}
}
}
}
@ -2446,7 +2461,7 @@ dissect_q931_high_layer_compat_ie(tvbuff_t *tvb, int offset, int len,
#define Q931_PROTOCOL_DISCRIMINATOR_IA5 0x04
#define Q931_PROTOCOL_DISCRIMINATOR_ASN1 0x05
const value_string q931_protocol_discriminator_vals[] = {
static const value_string q931_protocol_discriminator_vals[] = {
{ Q931_PROTOCOL_DISCRIMINATOR_USER, "User-specific protocol" },
{ 0x01, "OSI high layer protocols" },
{ 0x02, "X.244" },
@ -2456,6 +2471,7 @@ const value_string q931_protocol_discriminator_vals[] = {
{ 0x08, "Q.931/I.451 user-network call control messages" },
{ 0, NULL }
};
value_string_ext q931_protocol_discriminator_vals_ext = VALUE_STRING_EXT_INIT(q931_protocol_discriminator_vals);
void
dissect_q931_user_user_ie(tvbuff_t *tvb, packet_info *pinfo, int offset, int len,
@ -2469,7 +2485,7 @@ dissect_q931_user_user_ie(tvbuff_t *tvb, packet_info *pinfo, int offset, int len
octet = tvb_get_guint8(tvb, offset);
proto_tree_add_text(tree, tvb, offset, 1,
"Protocol discriminator: %s",
val_to_str(octet, q931_protocol_discriminator_vals,
val_to_str_ext(octet, &q931_protocol_discriminator_vals_ext,
"Unknown (0x%02x)"));
offset += 1;
len -= 1;
@ -2556,7 +2572,7 @@ dissect_q931_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
guint8 message_type, segmented_message_type;
guint8 info_element;
guint16 info_element_len;
gboolean first_frag, more_frags;
gboolean first_frag, more_frags;
guint32 frag_len;
fragment_data *fd_head;
tvbuff_t *next_tvb = NULL;
@ -2588,7 +2604,7 @@ dissect_q931_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
case 2: call_ref_val = tvb_get_ntohs(tvb, offset); break;
case 3: call_ref_val = tvb_get_ntoh24(tvb, offset); break;
default: call_ref_val = tvb_get_ntohl(tvb, offset);
}
}
if (call_ref_len != 0) {
tvb_memcpy(tvb, call_ref, offset, call_ref_len);
if (q931_tree != NULL) {
@ -2623,7 +2639,7 @@ dissect_q931_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
/*
* And now for the information elements....
*/
if ((message_type != Q931_SEGMENT) || !q931_reassembly ||
if ((message_type != Q931_SEGMENT) || !q931_reassembly ||
(tvb_reported_length_remaining(tvb, offset) <= 4)) {
dissect_q931_IEs(tvb, pinfo, tree, q931_tree, is_over_ip, offset, 0);
return;
@ -2646,8 +2662,8 @@ dissect_q931_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
more_frags = (tvb_get_guint8(tvb, offset + 2) & 0x7F) != 0;
segmented_message_type = tvb_get_guint8(tvb, offset + 3);
if (check_col(pinfo->cinfo, COL_INFO)) {
col_append_fstr(pinfo->cinfo, COL_INFO, " of %s",
val_to_str(segmented_message_type, q931_message_type_vals, "Unknown message type (0x%02X)"));
col_append_fstr(pinfo->cinfo, COL_INFO, " of %s",
val_to_str_ext(segmented_message_type, &q931_message_type_vals_ext, "Unknown message type (0x%02X)"));
}
offset += 1 + 1 + info_element_len;
/* Reassembly */
@ -2674,7 +2690,7 @@ dissect_q931_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
if (check_col(pinfo->cinfo, COL_INFO)) {
col_add_fstr(pinfo->cinfo, COL_INFO, "%s [reassembled]",
val_to_str(segmented_message_type, q931_message_type_vals, "Unknown message type (0x%02X)"));
val_to_str_ext(segmented_message_type, &q931_message_type_vals_ext, "Unknown message type (0x%02X)"));
}
} else {
if (tree) proto_tree_add_uint(q931_tree, hf_q931_reassembled_in, tvb, offset, frag_len, fd_head->reassembled_in);
@ -2755,7 +2771,7 @@ dissect_q931_IEs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *root_tree,
switch ((codeset << 8) | (info_element & Q931_IE_SO_IDENTIFIER_MASK)) {
case CS0 | Q931_IE_MORE_DATA_OR_SEND_COMP:
switch (info_element) {
switch (info_element) {
case Q931_IE_MORE_DATA:
if (q931_tree != NULL) {
@ -2845,14 +2861,14 @@ dissect_q931_IEs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *root_tree,
2, "Length: %u", info_element_len);
proto_tree_add_text(ie_tree, tvb, offset + 3,
1, "Protocol discriminator: %s",
val_to_str(tvb_get_guint8(tvb, offset + 3),
q931_protocol_discriminator_vals,
val_to_str_ext(tvb_get_guint8(tvb, offset + 3),
&q931_protocol_discriminator_vals_ext,
"Unknown (0x%02x)"));
}
if (info_element_len > 1) {
/*
* If we don't desegment limit the length
* If we don't desegment limit the length
* to the actual size in the frame
*/
if (!pinfo->can_desegment) {
@ -2921,7 +2937,7 @@ dissect_q931_IEs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *root_tree,
dissect_q931_segmented_message_ie(tvb, offset + 2, info_element_len, ie_tree);
if (check_col(pinfo->cinfo, COL_INFO)) {
col_append_fstr(pinfo->cinfo, COL_INFO, " of %s",
val_to_str(tvb_get_guint8(tvb, offset + 3), q931_message_type_vals, "Unknown message type (0x%02X)"));
val_to_str_ext(tvb_get_guint8(tvb, offset + 3), &q931_message_type_vals_ext, "Unknown message type (0x%02X)"));
}
if (tvb_get_guint8(tvb, offset + 2) & 0x80) { /* the 1st segment */
first_segment = TRUE;
@ -3317,7 +3333,7 @@ dissect_q931_ie_cs7(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
dissect_q931_IEs(tvb, pinfo, NULL, tree, FALSE, 0, 7);
}
static void
static void
q931_init(void) {
/* Initialize the fragment and reassembly tables */
fragment_table_init(&q931_fragment_table);
@ -3345,7 +3361,7 @@ proto_register_q931(void)
NULL, HFILL }},
{ &hf_q931_message_type,
{ "Message type", "q931.message_type", FT_UINT8, BASE_HEX, VALS(q931_message_type_vals), 0x0,
{ "Message type", "q931.message_type", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &q931_message_type_vals_ext, 0x0,
NULL, HFILL }},
{ &hf_q931_maintenance_message_type,
@ -3353,7 +3369,7 @@ proto_register_q931(void)
NULL, HFILL }},
{ &hf_q931_segment_type,
{ "Segmented message type", "q931.segment_type", FT_UINT8, BASE_HEX, VALS(q931_message_type_vals), 0x0,
{ "Segmented message type", "q931.segment_type", FT_UINT8, BASE_HEX|BASE_EXT_STRING, &q931_message_type_vals_ext, 0x0,
NULL, HFILL }},
{ &hf_q931_coding_standard,
@ -3369,12 +3385,12 @@ proto_register_q931(void)
VALS(q931_pres_meth_prot_prof_vals), 0x03, NULL, HFILL}},
{ &hf_q931_high_layer_characteristics,
{ "High layer characteristics identification", "q931.high_layer_characteristics", FT_UINT8, BASE_HEX,
VALS(q931_high_layer_characteristics_vals), 0x7f, NULL, HFILL }},
{ "High layer characteristics identification", "q931.high_layer_characteristics", FT_UINT8, BASE_HEX|BASE_EXT_STRING,
&q931_high_layer_characteristics_vals_ext, 0x7f, NULL, HFILL }},
{ &hf_q931_extended_high_layer_characteristics,
{ "Extended high layer characteristics identification", "q931.extended_high_layer_characteristics", FT_UINT8, BASE_HEX,
VALS(q931_extended_high_layer_characteristics_vals), 0x7f, NULL, HFILL }},
{ "Extended high layer characteristics identification", "q931.extended_high_layer_characteristics", FT_UINT8, BASE_HEX|BASE_EXT_STRING,
&q931_extended_high_layer_characteristics_vals_ext, 0x7f, NULL, HFILL }},
{ &hf_q931_extended_audiovisual_characteristics,
{ "Extended audiovisual characteristics identification", "q931.extended_audiovisual_characteristics", FT_UINT8, BASE_HEX,
@ -3397,15 +3413,15 @@ proto_register_q931(void)
VALS(q931_bearer_capability_layer_ident_vals), 0x60, NULL, HFILL }},
{ &hf_q931_uil1,
{ "User information layer 1 protocol", "q931.uil1", FT_UINT8, BASE_HEX,
VALS(q931_uil1_vals), 0x1f,NULL, HFILL }},
{ "User information layer 1 protocol", "q931.uil1", FT_UINT8, BASE_HEX|BASE_EXT_STRING,
&q931_uil1_vals_ext, 0x1f,NULL, HFILL }},
{ &hf_q931_cause_location,
{ "Cause location", "q931.cause_location", FT_UINT8, BASE_DEC, VALS(q931_cause_location_vals), 0x0f,
{ "Cause location", "q931.cause_location", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q931_cause_location_vals_ext, 0x0f,
NULL, HFILL }},
{ &hf_q931_cause_value,
{ "Cause value", "q931.cause_value", FT_UINT8, BASE_DEC, VALS(q931_cause_code_vals), 0x7f,
{ "Cause value", "q931.cause_value", FT_UINT8, BASE_DEC|BASE_EXT_STRING, &q931_cause_code_vals_ext, 0x7f,
NULL, HFILL }},
{ &hf_q931_number_type,
@ -3517,11 +3533,11 @@ proto_register_q931(void)
{ &hf_q931_reassembled_in,
{ "Reassembled Q.931 in frame", "q931.reassembled_in", FT_FRAMENUM, BASE_NONE, NULL, 0x0,
"This Q.931 message is reassembled in this frame", HFILL}},
"This Q.931 message is reassembled in this frame", HFILL}},
{ &hf_q931_reassembled_length,
{ "Reassembled Q.931 length", "q931.reassembled.length", FT_UINT32, BASE_DEC, NULL, 0x0,
"The total length of the reassembled payload", HFILL}},
"The total length of the reassembled payload", HFILL}},
};
static gint *ett[] = {
&ett_q931,

View File

@ -42,14 +42,14 @@ extern void dissect_q931_high_layer_compat_ie(tvbuff_t *, int, int,
extern void dissect_q931_user_user_ie(tvbuff_t *tvb, packet_info *pinfo, int offset, int len,
proto_tree *tree);
extern const value_string q931_cause_location_vals[];
extern value_string_ext q931_cause_location_vals_ext;
typedef struct _q931_packet_info {
gchar *calling_number;
gchar *called_number;
guint8 cause_value;
gint32 crv;
guint8 message_type;
guint8 message_type;
} q931_packet_info;
/*
@ -57,65 +57,65 @@ typedef struct _q931_packet_info {
* without having to duplicate it. With MSVC and a
* libwireshark.dll, we need a special declaration.
*/
WS_VAR_IMPORT const value_string q931_cause_code_vals[];
WS_VAR_IMPORT value_string_ext q931_cause_code_vals_ext;
WS_VAR_IMPORT const value_string q931_message_type_vals[];
extern const value_string q931_protocol_discriminator_vals[];
extern const value_string q931_progress_description_vals[];
extern const value_string q931_call_state_vals[];
extern value_string_ext q931_protocol_discriminator_vals_ext;
extern value_string_ext q931_progress_description_vals_ext;
extern value_string_ext q931_call_state_vals_ext;
/*
* Q.931 message types.
*/
#define Q931_ESCAPE 0x00
#define Q931_ALERTING 0x01
#define Q931_CALL_PROCEEDING 0x02
#define Q931_CONNECT 0x07
#define Q931_CONNECT_ACK 0x0F
#define Q931_PROGRESS 0x03
#define Q931_SETUP 0x05
#define Q931_SETUP_ACK 0x0D
#define Q931_HOLD 0x24
#define Q931_HOLD_ACK 0x28
#define Q931_HOLD_REJECT 0x30
#define Q931_RESUME 0x26
#define Q931_RESUME_ACK 0x2E
#define Q931_RESUME_REJECT 0x22
#define Q931_RETRIEVE 0x31
#define Q931_RETRIEVE_ACK 0x33
#define Q931_RETRIEVE_REJECT 0x37
#define Q931_SUSPEND 0x25
#define Q931_SUSPEND_ACK 0x2D
#define Q931_SUSPEND_REJECT 0x21
#define Q931_USER_INFORMATION 0x20
#define Q931_DETACH 0x40
#define Q931_DETACH_ACKNOWLEDGE 0x48
#define Q931_DISCONNECT 0x45
#define Q931_RELEASE 0x4D
#define Q931_RELEASE_COMPLETE 0x5A
#define Q931_RESTART 0x46
#define Q931_RESTART_ACK 0x4E
#define Q931_CONGESTION_CONTROL 0x79
#define Q931_FACILITY 0x62
#define Q931_FACILITY_ACKNOWLEDGE 0x6A
#define Q931_FACILITY_REJECT 0x72
#define Q931_INFORMATION 0x7B
#define Q931_NOTIFY 0x6E
#define Q931_REGISTER 0x64
#define Q931_SEGMENT 0x60
#define Q931_STATUS 0x7D
#define Q931_STATUS_ENQUIRY 0x75
#define Q931_VERSION 0x0a
#define Q931_GROUIP_SERVICE 0x06
#define Q931_GROUIP_SERVICE_ACK 0x0b
#define Q931_RESYNC_REQ 0x08
#define Q931_RESYNC_RESP 0x09
#define Q931_ESCAPE 0x00
#define Q931_ALERTING 0x01
#define Q931_CALL_PROCEEDING 0x02
#define Q931_PROGRESS 0x03
#define Q931_SETUP 0x05
#define Q931_GROUIP_SERVICE 0x06
#define Q931_CONNECT 0x07
#define Q931_RESYNC_REQ 0x08
#define Q931_RESYNC_RESP 0x09
#define Q931_VERSION 0x0A
#define Q931_GROUIP_SERVICE_ACK 0x0B
#define Q931_SETUP_ACK 0x0D
#define Q931_CONNECT_ACK 0x0F
#define Q931_USER_INFORMATION 0x20
#define Q931_SUSPEND_REJECT 0x21
#define Q931_RESUME_REJECT 0x22
#define Q931_HOLD 0x24
#define Q931_SUSPEND 0x25
#define Q931_RESUME 0x26
#define Q931_HOLD_ACK 0x28
#define Q931_SUSPEND_ACK 0x2D
#define Q931_RESUME_ACK 0x2E
#define Q931_HOLD_REJECT 0x30
#define Q931_RETRIEVE 0x31
#define Q931_RETRIEVE_ACK 0x33
#define Q931_RETRIEVE_REJECT 0x37
#define Q931_DETACH 0x40
#define Q931_DISCONNECT 0x45
#define Q931_RESTART 0x46
#define Q931_DETACH_ACKNOWLEDGE 0x48
#define Q931_RELEASE 0x4D
#define Q931_RESTART_ACK 0x4E
#define Q931_RELEASE_COMPLETE 0x5A
#define Q931_SEGMENT 0x60
#define Q931_FACILITY 0x62
#define Q931_REGISTER 0x64
#define Q931_FACILITY_ACKNOWLEDGE 0x6A
#define Q931_NOTIFY 0x6E
#define Q931_FACILITY_REJECT 0x72
#define Q931_STATUS_ENQUIRY 0x75
#define Q931_CONGESTION_CONTROL 0x79
#define Q931_INFORMATION 0x7B
#define Q931_STATUS 0x7D
/*
* Maintenance message types.
* AT&T TR41459, Nortel NIS A211-1, Telcordia SR-4994, ...
*/
#define DMS_SERVICE_ACKNOWLEDGE 0x07
#define DMS_SERVICE 0x0F
#define DMS_SERVICE_ACKNOWLEDGE 0x07
#define DMS_SERVICE 0x0F
#endif

View File

@ -1414,7 +1414,7 @@ dissect_sip_reason_header(tvbuff_t *tvb, proto_tree *tree, gint start_offset, gi
cause_value = atoi(tvb_get_ephemeral_string(tvb, current_offset, length));
proto_tree_add_text(tree, tvb, current_offset, length,
"Cause: %u(0x%x)[%s]", cause_value,cause_value,
val_to_str(cause_value, q850_cause_code_vals, "Unknown (%d)" ));
val_to_str_ext(cause_value, &q850_cause_code_vals_ext, "Unknown (%d)" ));
}

View File

@ -622,9 +622,8 @@ ipv4_get_net_order_addr
is_big_endian
is_default_profile
is_tpkt
isup_calling_partys_category_value DATA
isup_message_type_value_acro DATA
isup_message_type_value DATA
isup_calling_partys_category_value_ext DATA
isup_message_type_value_acro_ext DATA
list_stat_cmd_args
llc_add_oui
LocationRejectReason_vals DATA
@ -845,8 +844,8 @@ ptvcursor_pop_subtree
ptvcursor_add_with_subtree
ptvcursor_add_text_with_subtree
ptvcursor_set_subtree
q850_cause_code_vals DATA
q931_cause_code_vals DATA
q850_cause_code_vals_ext DATA
q931_cause_code_vals_ext DATA
q931_message_type_vals DATA
range_convert_range
range_convert_str

View File

@ -632,7 +632,11 @@ static void RTP_packet_draw(void *prs _U_)
new_gai->port_src = rtp_listinfo->src_port;
new_gai->port_dst = rtp_listinfo->dest_port;
duration = (guint32)(nstime_to_msec(&rtp_listinfo->stop_rel) - nstime_to_msec(&rtp_listinfo->start_rel));
new_gai->frame_label = g_strdup_printf("%s (%s) %s", (rtp_listinfo->is_srtp)?"SRTP":"RTP", rtp_listinfo->pt_str, (rtp_listinfo->rtp_event == -1)?"":val_to_str(rtp_listinfo->rtp_event, rtp_event_type_values, "Unknown RTP Event"));
new_gai->frame_label = g_strdup_printf("%s (%s) %s",
(rtp_listinfo->is_srtp)?"SRTP":"RTP",
rtp_listinfo->pt_str,
(rtp_listinfo->rtp_event == -1)?
"":val_to_str_const(rtp_listinfo->rtp_event, rtp_event_type_values, "Unknown RTP Event"));
new_gai->comment = g_strdup_printf("%s Num packets:%u Duration:%u.%03us SSRC:0x%X",
(rtp_listinfo->is_srtp)?"SRTP":"RTP", rtp_listinfo->npackets,
duration/1000,(duration%1000), rtp_listinfo->ssrc);
@ -1086,7 +1090,6 @@ isup_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co
GList *list;
gchar *frame_label = NULL;
gchar *comment = NULL;
int i;
/*voip_calls_tapinfo_t *tapinfo = &the_tapinfo_struct; unused */
const isup_tap_rec_t *pi = isup_info;
@ -1173,15 +1176,7 @@ isup_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co
/* Let's analyze the call state */
for (i=0;(isup_message_type_value[i].strptr!=NULL)&& (isup_message_type_value[i].value!=pi->message_type);i++);
if (isup_message_type_value[i].value==pi->message_type){
frame_label = g_strdup(isup_message_type_value_acro[i].strptr);
}
else{
frame_label = g_strdup("Unknown");
}
frame_label = g_strdup(val_to_str_ext_const(pi->message_type, &isup_message_type_value_acro_ext, "Unknown"));
if (callsinfo->npackets == 1){ /* this is the first packet, that must be an IAM */
@ -1224,13 +1219,9 @@ isup_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co
callsinfo->call_state = VOIP_COMPLETED;
tapinfo->completed_calls++;
}
for (i=0;(q931_cause_code_vals[i].strptr!=NULL)&& (q931_cause_code_vals[i].value!=pi->cause_value);i++);
if (q931_cause_code_vals[i].value==pi->cause_value){
comment = g_strdup_printf("Cause %i - %s",pi->cause_value, q931_cause_code_vals[i].strptr);
}
else{
comment = g_strdup_printf("Cause %i",pi->cause_value);
}
comment = g_strdup_printf("Cause %i - %s",
pi->cause_value,
val_to_str_ext_const(pi->cause_value, &q931_cause_code_vals_ext, "(Unknown)"));
break;
}
@ -1515,7 +1506,8 @@ q931_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co
} else if (h225_cstype == H225_RELEASE_COMPLET) {
/* get the Q931 Release cause code */
if (q931_cause_value != 0xFF){
comment = g_strdup_printf("H225 Q931 Rel Cause (%i):%s", q931_cause_value, val_to_str(q931_cause_value, q931_cause_code_vals, "<unknown>"));
comment = g_strdup_printf("H225 Q931 Rel Cause (%i):%s", q931_cause_value,
val_to_str_ext_const(q931_cause_value, &q931_cause_code_vals_ext, "<unknown>"));
} else { /* Cause not set */
comment = g_strdup("H225 No Q931 Rel Cause");
}
@ -1635,7 +1627,8 @@ q931_calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, co
tapinfo->completed_calls++;
}
if (q931_cause_value != 0xFF){
comment = g_strdup_printf("AC_ISDN trunk:%u Q931 Rel Cause (%i):%s", actrace_trunk, q931_cause_value, val_to_str(q931_cause_value, q931_cause_code_vals, "<unknown>"));
comment = g_strdup_printf("AC_ISDN trunk:%u Q931 Rel Cause (%i):%s", actrace_trunk, q931_cause_value,
val_to_str_ext_const(q931_cause_value, &q931_cause_code_vals_ext, "<unknown>"));
} else { /* Cause not set */
comment = g_strdup("AC_ISDN No Q931 Rel Cause");
}
@ -1927,7 +1920,7 @@ H225calls_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, con
default:
comment = g_strdup("H225 RAS");
}
frame_label = g_strdup(val_to_str(pi->msg_tag, h225_RasMessage_vals, "<unknown>"));
frame_label = g_strdup(val_to_str_const(pi->msg_tag, h225_RasMessage_vals, "<unknown>"));
} else {
frame_label = g_strdup("H225: Unknown");
comment = NULL;