aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2012-10-08 19:31:17 +0000
committerEvan Huus <eapache@gmail.com>2012-10-08 19:31:17 +0000
commitd0183357dc6c1804f4e5a82826a0e4258b6af0d1 (patch)
tree269c0a4e8fe04d6ec89821f9c3296c50b7a787b2 /epan/dissectors/packet-usb.c
parent9b78939cb34ee98e3135b83ebe1b1597c1e1f8f9 (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.c24
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;