diff options
author | Michal Labedzki <michal.labedzki@tieto.com> | 2015-09-27 18:22:32 +0200 |
---|---|---|
committer | Michal Labedzki <michal.labedzki@tieto.com> | 2015-10-17 10:22:02 +0000 |
commit | bdf3c0b558d90b13a59b5d22f745f0072a91ca30 (patch) | |
tree | 686a38bd87036a062adb0e13a7c24ce269cc44eb /epan/dissectors/packet-btsmp.c | |
parent | 106c2893695b54a481f8e9baa4200fee2dfea880 (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.c | 30 |
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; |