diff options
author | Darien Spencer <cusneud@mail.com> | 2018-08-04 12:27:29 +0300 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2018-08-04 13:49:04 +0000 |
commit | 51c6fde9c703089db217472b11685ce7442023cf (patch) | |
tree | 9dd3518b5b593c935c63840b513d40f91cdea6db /epan/dissectors/packet-at.c | |
parent | a0814af296aa597867125a75094c7d7cfb1b045d (diff) |
AT: Distinguish between numeric and textual CME errors
Change-Id: Ibf57da87f0ecd3a25461b333883ae8f84b3b4e31
Reviewed-on: https://code.wireshark.org/review/28951
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-at.c')
-rw-r--r-- | epan/dissectors/packet-at.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/epan/dissectors/packet-at.c b/epan/dissectors/packet-at.c index 8f58948e9d..a8945752ff 100644 --- a/epan/dissectors/packet-at.c +++ b/epan/dissectors/packet-at.c @@ -42,6 +42,7 @@ static int hf_cmer_ind = -1; static int hf_cmer_bfr = -1; static int hf_cmee = -1; static int hf_cme_error = -1; +static int hf_cme_error_verbose = -1; static int hf_cnum_speed = -1; static int hf_cnum_service = -1; static int hf_cnum_itc = -1; @@ -815,6 +816,8 @@ dissect_cme_error_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t guint parameter_number, gint parameter_length, void **data _U_) { guint32 value; + gint i; + guint8 *next_char; if (!(role == ROLE_DCE && type == TYPE_RESPONSE)) { return FALSE; @@ -822,6 +825,17 @@ dissect_cme_error_parameter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t if (parameter_number > 0) return FALSE; + /* CME Error might work in 2 modes: Numeric error codes or Verbose error messages */ + /* if the parameter stream contains any letters, assume verbose */ + next_char = parameter_stream; + for (i = 0; i < parameter_length; i++) { + if (g_ascii_isalpha(next_char)) { + proto_tree_add_item(tree, hf_cme_error_verbose, tvb, offset, parameter_length, ENC_NA | ENC_ASCII); + return TRUE; + } + next_char++; + } + /* Assume numeric error code*/ value = get_uint_parameter(parameter_stream, parameter_length); proto_tree_add_uint(tree, hf_cme_error, tvb, offset, parameter_length, value); @@ -1461,10 +1475,15 @@ proto_register_at_command(void) NULL, HFILL} }, { &hf_cme_error, - { "CME Error", "at.cme_error", + { "CME Error (Numeric)", "at.cme_error", FT_UINT8, BASE_DEC, VALS(cme_error_vals), 0, NULL, HFILL} }, + { &hf_cme_error_verbose, + { "CME Error (Verbose)", "at.cme_error_verbose", + FT_STRING, BASE_NONE, NULL, 0, + NULL, HFILL} + }, { &hf_cmee, { "Mode", "at.cmee", FT_UINT8, BASE_DEC, VALS(cmee_vals), 0, |