ANSI IS-637 A: fix display of reserved bits when using 7bits GSM encoding

Change-Id: Ida59c339d174e8f9a3b8bf108374875d12c51b21
Reviewed-on: https://code.wireshark.org/review/15153
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
Pascal Quantin 2016-04-29 00:14:30 +02:00
parent cefea72034
commit e65ab3cd94
1 changed files with 63 additions and 3 deletions

View File

@ -290,6 +290,7 @@ static int hf_ansi_637_reserved_bits_8_07 = -1;
static int hf_ansi_637_reserved_bits_8_0f = -1;
static int hf_ansi_637_reserved_bits_8_3f = -1;
static int hf_ansi_637_reserved_bits_8_7f = -1;
static int hf_ansi_637_reserved_bits_16_generic = -1;
static int hf_ansi_637_tele_cmas_encoding = -1;
static int hf_ansi_637_tele_cmas_num_fields = -1;
static int hf_ansi_637_tele_cmas_protocol_version = -1;
@ -1120,7 +1121,25 @@ tele_param_user_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint
switch (cset)
{
case GSM_7BITS:
proto_tree_add_bits_item(tree, hf_ansi_637_reserved_bits_8_generic, tvb, ((orig_offset + len - 1)*8), reserved_bits, ENC_NA); /* MSBs */
{
crumb_spec_t crumbs[3];
guint8 i = 0;
guint bits_offset;
if (reserved_bits > 3) {
bits_offset = ((orig_offset + len - 2)*8)+5;
crumbs[i].crumb_bit_offset = 0;
crumbs[i++].crumb_bit_length = reserved_bits - 3;
crumbs[i].crumb_bit_offset = 8;
} else {
bits_offset = ((orig_offset + len - 1)*8)+5;
crumbs[i].crumb_bit_offset = 0;
}
crumbs[i++].crumb_bit_length = 3;
crumbs[i].crumb_bit_offset = 0;
crumbs[i].crumb_bit_length = 0;
proto_tree_add_split_bits_item_ret_val(tree, hf_ansi_637_reserved_bits_16_generic, tvb, bits_offset, crumbs, NULL);
}
break;
default:
@ -1522,7 +1541,25 @@ tele_param_mult_enc_user_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
switch (cset)
{
case GSM_7BITS:
proto_tree_add_bits_item(tree, hf_ansi_637_reserved_bits_8_generic, tvb, ((orig_offset + len - 1)*8), reserved_bits, ENC_NA); /* MSBs */
{
crumb_spec_t crumbs[3];
guint8 i = 0;
guint bits_offset;
if (reserved_bits > 3) {
bits_offset = ((orig_offset + len - 2)*8)+5;
crumbs[i].crumb_bit_offset = 0;
crumbs[i++].crumb_bit_length = reserved_bits - 3;
crumbs[i].crumb_bit_offset = 8;
} else {
bits_offset = ((orig_offset + len - 1)*8)+5;
crumbs[i].crumb_bit_offset = 0;
}
crumbs[i++].crumb_bit_length = 3;
crumbs[i].crumb_bit_offset = 0;
crumbs[i].crumb_bit_length = 0;
proto_tree_add_split_bits_item_ret_val(tree, hf_ansi_637_reserved_bits_16_generic, tvb, bits_offset, crumbs, NULL);
}
break;
default:
@ -1670,7 +1707,25 @@ tele_param_srvc_cat_prog_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre
switch (cset)
{
case GSM_7BITS:
proto_tree_add_bits_item(tree, hf_ansi_637_reserved_bits_8_generic, tvb, ((orig_offset + len - 1)*8), reserved_bits, ENC_NA); /* MSBs */
{
crumb_spec_t crumbs[3];
guint8 i = 0;
guint bits_offset;
if (reserved_bits > 3) {
bits_offset = ((orig_offset + len - 2)*8)+5;
crumbs[i].crumb_bit_offset = 0;
crumbs[i++].crumb_bit_length = reserved_bits - 3;
crumbs[i].crumb_bit_offset = 8;
} else {
bits_offset = ((orig_offset + len - 1)*8)+5;
crumbs[i].crumb_bit_offset = 0;
}
crumbs[i++].crumb_bit_length = 3;
crumbs[i].crumb_bit_offset = 0;
crumbs[i].crumb_bit_length = 0;
proto_tree_add_split_bits_item_ret_val(tree, hf_ansi_637_reserved_bits_16_generic, tvb, bits_offset, crumbs, NULL);
}
break;
default:
@ -3063,6 +3118,11 @@ proto_register_ansi_637(void)
FT_UINT8, BASE_DEC, NULL, 0x7f,
NULL, HFILL }
},
{ &hf_ansi_637_reserved_bits_16_generic,
{ "Reserved bit(s)", "ansi_637_tele.reserved",
FT_UINT16, BASE_DEC, NULL, 0,
NULL, HFILL }
},
{ &hf_ansi_637_tele_cmas_encoding,
{ "Encoding", "ansi_637_tele.cmas.encoding",
FT_UINT16, BASE_DEC, NULL, 0xf800,