aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-usb-masstorage.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2012-12-31 20:12:45 +0000
committerMichael Mann <mmann78@netscape.net>2012-12-31 20:12:45 +0000
commit37d19a12023567f65f2049400cd72255b8f2c9d2 (patch)
tree471eba6ef251bf466712f0a317e150bccc80e0d8 /epan/dissectors/packet-usb-masstorage.c
parentb03e7cec0052bc974b833eaecfc62efc3ff73312 (diff)
Add heuristic for USB MassStorage dissector to be dissected by USB. Bug 8131 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8131)
svn path=/trunk/; revision=46877
Diffstat (limited to 'epan/dissectors/packet-usb-masstorage.c')
-rw-r--r--epan/dissectors/packet-usb-masstorage.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/epan/dissectors/packet-usb-masstorage.c b/epan/dissectors/packet-usb-masstorage.c
index 868d408351..a141ca1083 100644
--- a/epan/dissectors/packet-usb-masstorage.c
+++ b/epan/dissectors/packet-usb-masstorage.c
@@ -361,6 +361,23 @@ dissect_usb_ms_bulk(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
}
+static gboolean
+dissect_usb_ms_bulk_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
+{
+ const gchar usbc[] = {0x55, 0x53, 0x42, 0x43};
+ const gchar usbs[] = {0x55, 0x53, 0x42, 0x53};
+ if (tvb_reported_length(tvb) < 4)
+ return FALSE;
+
+ if (tvb_memeql(tvb, 0, usbc, sizeof(usbc)) == 0 ||
+ tvb_memeql(tvb, 0, usbs, sizeof(usbs)) == 0) {
+ dissect_usb_ms_bulk(tvb, pinfo, tree);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
void
proto_register_usb_ms(void)
{
@@ -446,4 +463,6 @@ proto_reg_handoff_usb_ms(void)
usb_ms_control_handle = new_create_dissector_handle(dissect_usb_ms_control, proto_usb_ms);
dissector_add_uint("usb.control", IF_CLASS_MASS_STORAGE, usb_ms_control_handle);
+
+ heur_dissector_add("usb.bulk", dissect_usb_ms_bulk_heur, proto_usb_ms);
}