diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2015-05-12 18:43:30 +0200 |
---|---|---|
committer | Alexis La Goutte <alexis.lagoutte@gmail.com> | 2015-05-12 17:59:15 +0000 |
commit | 2e7ec36cd85649358f01c3019011251e759de9d4 (patch) | |
tree | d7aeac12cc6d558b4942c393fe9b420cae0fe44a | |
parent | 8de774af16980d70553c2e8a8dbe161d7cbf4a41 (diff) | |
download | wireshark-2e7ec36cd85649358f01c3019011251e759de9d4.tar.gz |
USB: allow to call sub dissectors for setup response packets without transaction available
This is useful when people export displayed packets of a USB sub dissector (like MBIM) without keeping
the USB setup requests and still expect to have "Decode As" functionality working
Change-Id: Iad32ddc7b87544ff568a091f03e393a106f38554
Reviewed-on: https://code.wireshark.org/review/8430
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
-rw-r--r-- | epan/dissectors/packet-mbim.c | 5 | ||||
-rw-r--r-- | epan/dissectors/packet-usb.c | 4 |
2 files changed, 6 insertions, 3 deletions
diff --git a/epan/dissectors/packet-mbim.c b/epan/dissectors/packet-mbim.c index be1aad207f..f37430ea2c 100644 --- a/epan/dissectors/packet-mbim.c +++ b/epan/dissectors/packet-mbim.c @@ -3657,7 +3657,7 @@ dissect_mbim_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * if (data) { usb_trans_info_t *usb_trans_info = ((usb_conv_info_t *)data)->usb_trans_info; - if ((usb_trans_info->setup.request == 0x00) && (USB_HEADER_IS_LINUX(usb_trans_info->header_type))) { + if (usb_trans_info && (usb_trans_info->setup.request == 0x00) && (USB_HEADER_IS_LINUX(usb_trans_info->header_type))) { /* Skip Send Encapsulated Command header */ offset += 7; tree = proto_tree_get_parent_tree(tree); @@ -4953,6 +4953,9 @@ dissect_mbim_decode_as(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void switch (usb_conv_info->transfer_type) { case URB_CONTROL: + if (!usb_trans_info) { + return dissect_mbim_control(tvb, pinfo, tree, usb_conv_info); + } if (((usb_trans_info->setup.request == 0x00) && (USB_HEADER_IS_LINUX(usb_trans_info->header_type) || (pinfo->srcport != NO_ENDPOINT))) || ((usb_trans_info->setup.request == 0x01) && (pinfo->srcport != NO_ENDPOINT))) { diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c index 25db658802..01f6a1136c 100644 --- a/epan/dissectors/packet-usb.c +++ b/epan/dissectors/packet-usb.c @@ -2899,8 +2899,8 @@ dissect_usb_setup_response(packet_info *pinfo, proto_tree *tree, parent = proto_tree_get_parent_tree(tree); - if (usb_conv_info && usb_conv_info->usb_trans_info) { - if (is_usb_standard_setup_request(usb_conv_info->usb_trans_info)) { + if (usb_conv_info) { + if (usb_conv_info->usb_trans_info && is_usb_standard_setup_request(usb_conv_info->usb_trans_info)) { offset = dissect_usb_standard_setup_response(pinfo, parent, tvb, offset, usb_conv_info); } else { |