aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2014-04-14 18:59:07 +0200
committerMichal Labedzki <michal.labedzki@tieto.com>2014-05-30 11:27:33 +0000
commit1258ce7bcebe10e674a83d7b8b25559db74956d9 (patch)
tree910931000f2697f36a880eee4d264068dd3f573a
parent49cc95784b1116bbb023bd54e1c479ededceede8 (diff)
Bluetooth: AVDTP: First step to fully support AVDTP session
Session should be finished too on HCI Disconnect and Adapter disappear. Change-Id: I0823872e60ec932fc0831975e54dc33d49fb5dbc Reviewed-on: https://code.wireshark.org/review/1882 Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
-rw-r--r--epan/dissectors/packet-btavdtp.c12
-rw-r--r--epan/dissectors/packet-btl2cap.c4
-rw-r--r--epan/dissectors/packet-btl2cap.h7
3 files changed, 18 insertions, 5 deletions
diff --git a/epan/dissectors/packet-btavdtp.c b/epan/dissectors/packet-btavdtp.c
index e7688c1e6b..9f0f051c9d 100644
--- a/epan/dissectors/packet-btavdtp.c
+++ b/epan/dissectors/packet-btavdtp.c
@@ -541,6 +541,8 @@ typedef struct _channels_info_t {
wmem_tree_t *stream_numbers;
guint32 disconnect_in_frame;
guint32 *l2cap_disconnect_in_frame;
+ guint32 *hci_disconnect_in_frame;
+ guint32 *adapter_disconnect_in_frame;
sep_entry_t *sep;
} channels_info_t;
@@ -1300,7 +1302,11 @@ dissect_btavdtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
subtree = (wmem_tree_t *) wmem_tree_lookup32_array(channels, key);
channels_info = (subtree) ? (channels_info_t *) wmem_tree_lookup32_le(subtree, frame_number) : NULL;
- if (!(channels_info && *channels_info->l2cap_disconnect_in_frame >= pinfo->fd->num && channels_info->disconnect_in_frame >= pinfo->fd->num)) {
+ if (!(channels_info &&
+ *channels_info->adapter_disconnect_in_frame >= pinfo->fd->num &&
+ *channels_info->hci_disconnect_in_frame >= pinfo->fd->num &&
+ *channels_info->l2cap_disconnect_in_frame >= pinfo->fd->num &&
+ channels_info->disconnect_in_frame >= pinfo->fd->num)) {
channels_info = (channels_info_t *) wmem_new (wmem_file_scope(), channels_info_t);
channels_info->control_local_cid = l2cap_data->local_cid;
@@ -1308,7 +1314,9 @@ dissect_btavdtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
channels_info->media_local_cid = BTL2CAP_UNKNOWN_CID;
channels_info->media_remote_cid = BTL2CAP_UNKNOWN_CID;
channels_info->disconnect_in_frame = G_MAXUINT32;
- channels_info->l2cap_disconnect_in_frame = l2cap_data->disconnect_in_frame;
+ channels_info->l2cap_disconnect_in_frame = l2cap_data->disconnect_in_frame;
+ channels_info->hci_disconnect_in_frame = l2cap_data->hci_disconnect_in_frame;
+ channels_info->adapter_disconnect_in_frame = l2cap_data->adapter_disconnect_in_frame;
channels_info->sep = NULL;
if (!pinfo->fd->flags.visited) {
diff --git a/epan/dissectors/packet-btl2cap.c b/epan/dissectors/packet-btl2cap.c
index c2bca42bff..f3895c35eb 100644
--- a/epan/dissectors/packet-btl2cap.c
+++ b/epan/dissectors/packet-btl2cap.c
@@ -1790,7 +1790,9 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
l2cap_data->remote_cid = BTL2CAP_UNKNOWN_CID;
l2cap_data->is_local_psm = FALSE;
l2cap_data->psm = 0;
- l2cap_data->disconnect_in_frame = &max_disconnect_in_frame;
+ l2cap_data->disconnect_in_frame = &max_disconnect_in_frame;
+ l2cap_data->hci_disconnect_in_frame = &max_disconnect_in_frame;
+ l2cap_data->adapter_disconnect_in_frame = &max_disconnect_in_frame;
l2cap_data->remote_bd_addr_oui = (acl_data) ? acl_data->remote_bd_addr_oui : 0;
l2cap_data->remote_bd_addr_id = (acl_data) ? acl_data->remote_bd_addr_id : 0;
diff --git a/epan/dissectors/packet-btl2cap.h b/epan/dissectors/packet-btl2cap.h
index 5de3436dfb..c67daf9ee3 100644
--- a/epan/dissectors/packet-btl2cap.h
+++ b/epan/dissectors/packet-btl2cap.h
@@ -54,13 +54,16 @@
typedef struct _btl2cap_data_t {
guint32 interface_id;
guint32 adapter_id;
+ guint32 *adapter_disconnect_in_frame;
guint16 chandle; /* only low 12 bits used */
+ guint32 *hci_disconnect_in_frame;
+ guint16 psm;
+ guint32 *disconnect_in_frame;
guint16 cid;
guint32 local_cid;
guint32 remote_cid;
- guint32 *disconnect_in_frame;
+
gboolean is_local_psm; /* otherwise it is PSM in remote device */
- guint16 psm;
guint32 remote_bd_addr_oui;
guint32 remote_bd_addr_id;
} btl2cap_data_t;