summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2015-05-12 18:43:30 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2015-05-12 17:59:15 +0000
commit2e7ec36cd85649358f01c3019011251e759de9d4 (patch)
treed7aeac12cc6d558b4942c393fe9b420cae0fe44a
parent8de774af16980d70553c2e8a8dbe161d7cbf4a41 (diff)
downloadwireshark-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.c5
-rw-r--r--epan/dissectors/packet-usb.c4
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 {