diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2013-06-04 20:21:17 +0000 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2013-06-04 20:21:17 +0000 |
commit | 1bb2081fd28f92ff695f0396b3e0dc77cc8b444a (patch) | |
tree | 465aa7f801597082305f33e5b225578a395e5620 /asn1/c1222 | |
parent | 3bfeaff546d18319c860dbb996c620289177d2f0 (diff) |
From Ed Beroset via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8746 :
Add procedure numbers to C12.22 dissection
svn path=/trunk/; revision=49775
Diffstat (limited to 'asn1/c1222')
-rw-r--r-- | asn1/c1222/packet-c1222-template.c | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/asn1/c1222/packet-c1222-template.c b/asn1/c1222/packet-c1222-template.c index adfce1ce25..98890b212f 100644 --- a/asn1/c1222/packet-c1222-template.c +++ b/asn1/c1222/packet-c1222-template.c @@ -128,6 +128,7 @@ static int hf_c1222_write_table = -1; static int hf_c1222_write_offset = -1; static int hf_c1222_write_size = -1; static int hf_c1222_write_data = -1; +static int hf_c1222_procedure_num = -1; static int hf_c1222_write_chksum = -1; static int hf_c1222_wait_secs = -1; static int hf_c1222_neg_pkt_size = -1; @@ -229,7 +230,7 @@ static const value_string tableflags[] = { static const value_string procflags[] = { { 0x00, "SF" }, - { 0x01, "MF" }, + { 0x08, "MF" }, { 0, NULL } }; @@ -362,6 +363,7 @@ parse_c1222_detailed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int cm guint8 wait_seconds = 0; int numrates = 0; guint16 packet_size; + guint16 procedure_num; guint8 nbr_packet; /* timing setup parameters */ guint8 traffic; @@ -477,18 +479,36 @@ parse_c1222_detailed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int cm *offset += 2; *length -= 2; if (*length >= tblsize+1U) { + if (table == 7) {/* is it a procedure call? */ + procedure_num = tvb_get_letohs(tvb, *offset); + proto_tree_add_uint(tree, hf_c1222_procedure_num, tvb, *offset, 2, procedure_num); + *offset += 2; + *length -= 2; + tblsize -= 2; + } proto_tree_add_item(tree, hf_c1222_write_data, tvb, *offset, tblsize, ENC_NA); *offset += tblsize; *length -= tblsize; chksum = tvb_get_guint8(tvb, *offset); item = proto_tree_add_uint(tree, hf_c1222_write_chksum, tvb, *offset, 1, chksum); - calcsum = c1222_cksum(tvb, (*offset)-tblsize, tblsize); + if (table == 7) {/* is it a procedure call? */ + calcsum = c1222_cksum(tvb, (*offset)-tblsize-2, tblsize+2); + } else { + calcsum = c1222_cksum(tvb, (*offset)-tblsize, tblsize); + } if (chksum != calcsum) { expert_add_info_format_text(pinfo, item, &ei_c1222_bad_checksum, "Bad checksum [should be 0x%02x]", calcsum); } - proto_item_set_text(tree, "C12.22 EPSEM: %s (%s-%d)", - val_to_str(cmd,commandnames,"Unknown (0x%02x)"), - val_to_str((table >> 8) & 0xF8, tableflags,"Unknown (0x%04x)"), table & 0x7FF); + if (table == 7) {/* is it a procedure call? */ + proto_item_set_text(tree, "C12.22 EPSEM: %s (%s-%d, %s-%d)", + val_to_str(cmd,commandnames,"Unknown (0x%02x)"), + val_to_str((table >> 8) & 0xF8, tableflags,"Unknown (0x%04x)"), table & 0x7FF, + val_to_str((procedure_num >> 8) & 0xF8, procflags,"Unknown (0x%04x)"), procedure_num & 0x7FF); + } else { + proto_item_set_text(tree, "C12.22 EPSEM: %s (%s-%d)", + val_to_str(cmd,commandnames,"Unknown (0x%02x)"), + val_to_str((table >> 8) & 0xF8, tableflags,"Unknown (0x%04x)"), table & 0x7FF); + } *offset += 1; *length -= 1; } else { @@ -1209,6 +1229,12 @@ void proto_register_c1222(void) { NULL, 0x0, NULL, HFILL } }, + { &hf_c1222_procedure_num, + { "C12.22 Procedure Number", "c1222.procedure.num", + FT_UINT16, BASE_DEC, + NULL, 0x7ff, + NULL, HFILL } + }, { &hf_c1222_neg_pkt_size, { "C12.22 Negotiate Packet Size", "c1222.negotiate.pktsize", FT_UINT16, BASE_DEC, |