diff options
author | Evan Huus <eapache@gmail.com> | 2012-10-08 19:31:17 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2012-10-08 19:31:17 +0000 |
commit | d0183357dc6c1804f4e5a82826a0e4258b6af0d1 (patch) | |
tree | 269c0a4e8fe04d6ec89821f9c3296c50b7a787b2 /epan/dissectors/packet-usb.c | |
parent | 9b78939cb34ee98e3135b83ebe1b1597c1e1f8f9 (diff) |
From Steve Magnani via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7796
Add summary information to USB isodesc trees to make interesting descriptors
obvious to the user.
svn path=/trunk/; revision=45403
Diffstat (limited to 'epan/dissectors/packet-usb.c')
-rw-r--r-- | epan/dissectors/packet-usb.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c index d5e63068c2..d1ae5767b8 100644 --- a/epan/dissectors/packet-usb.c +++ b/epan/dissectors/packet-usb.c @@ -2485,26 +2485,32 @@ dissect_linux_usb_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent, data_base = offset + iso_numdesc * 16; urb_tree = tree; for (i = 0; i != iso_numdesc; i++) { + /* Fetch ISO descriptor fields stored in host + * endian byte order. + */ + tvb_memcpy(tvb, (guint8 *)&iso_status, offset, 4); + tvb_memcpy(tvb, (guint8 *)&iso_off, offset+4, 4); + tvb_memcpy(tvb, (guint8 *)&iso_len, offset+8, 4); + if (parent) { proto_item *ti = NULL; - ti = proto_tree_add_protocol_format(urb_tree, proto_usb, tvb, offset, - 16, "USB isodesc %u", i); + if (iso_len > 0) { + ti = proto_tree_add_protocol_format(urb_tree, proto_usb, tvb, offset, + 16, "USB isodesc %u [%s] (%u bytes)", i, + val_to_str(iso_status, usb_urb_status_vals, "Error %d"), iso_len); + } else { + ti = proto_tree_add_protocol_format(urb_tree, proto_usb, tvb, offset, + 16, "USB isodesc %u [%s]", i, val_to_str(iso_status, usb_urb_status_vals, "Error %d")); + } tree = proto_item_add_subtree(ti, usb_isodesc); } - /* Add ISO descriptor fields which are stored in host - * endian byte order so use tvb_memcopy() and - * proto_tree_add_uint()/proto_tree_add_int() pair. - */ - tvb_memcpy(tvb, (guint8 *)&iso_status, offset, 4); proto_tree_add_int(tree, hf_usb_iso_status, tvb, offset, 4, iso_status); offset += 4; - tvb_memcpy(tvb, (guint8 *)&iso_off, offset, 4); proto_tree_add_uint(tree, hf_usb_iso_off, tvb, offset, 4, iso_off); offset += 4; - tvb_memcpy(tvb, (guint8 *)&iso_len, offset, 4); proto_tree_add_uint(tree, hf_usb_iso_len, tvb, offset, 4, iso_len); offset += 4; |