aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-btsmp.c
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2015-09-27 18:22:32 +0200
committerMichal Labedzki <michal.labedzki@tieto.com>2015-10-17 10:22:02 +0000
commitbdf3c0b558d90b13a59b5d22f745f0072a91ca30 (patch)
tree686a38bd87036a062adb0e13a7c24ce269cc44eb /epan/dissectors/packet-btsmp.c
parent106c2893695b54a481f8e9baa4200fee2dfea880 (diff)
Bluetooth: Make dissectors independent of passed data
If Bluetooth dissectors has additional data from previous layer - good. But if do not... try to decode as much as possible - probably using some "force" dissector preferences you can decode payload correctly. Change-Id: I6427afafb987ed3b9b751fd91616e670802b3542 Reviewed-on: https://code.wireshark.org/review/11021 Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
Diffstat (limited to 'epan/dissectors/packet-btsmp.c')
-rw-r--r--epan/dissectors/packet-btsmp.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/epan/dissectors/packet-btsmp.c b/epan/dissectors/packet-btsmp.c
index 9fe5057c25..3d47d20cc1 100644
--- a/epan/dissectors/packet-btsmp.c
+++ b/epan/dissectors/packet-btsmp.c
@@ -182,19 +182,23 @@ dissect_btsmp_key_dist(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree
static int
dissect_btsmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
{
- int offset = 0;
- proto_item *ti;
- proto_tree *st;
- guint8 opcode;
- btl2cap_data_t *l2cap_data;
- guint32 interface_id;
- guint32 adapter_id;
-
- l2cap_data = (btl2cap_data_t *) data;
-
- if (l2cap_data) {
- interface_id = l2cap_data->interface_id;
- adapter_id = l2cap_data->adapter_id;
+ int offset = 0;
+ proto_item *ti;
+ proto_tree *st;
+ guint8 opcode;
+ guint32 interface_id;
+ guint32 adapter_id;
+ gint previous_proto;
+
+ previous_proto = (GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_frame_prev(wmem_list_tail(pinfo->layers)))));
+ if (data && previous_proto == proto_btl2cap) {
+ btl2cap_data_t *l2cap_data;
+
+ l2cap_data = (btl2cap_data_t *) data;
+ if (l2cap_data) {
+ interface_id = l2cap_data->interface_id;
+ adapter_id = l2cap_data->adapter_id;
+ }
} else {
interface_id = HCI_INTERFACE_DEFAULT;
adapter_id = HCI_ADAPTER_DEFAULT;