diff options
author | Anders Broman <anders.broman@ericsson.com> | 2012-11-05 11:42:10 +0000 |
---|---|---|
committer | Anders Broman <anders.broman@ericsson.com> | 2012-11-05 11:42:10 +0000 |
commit | 892ff116c97cb48bcf19e1972f65b912168f0abf (patch) | |
tree | d420f5534f84e24602e64c35c4cddfd239aea964 /epan/dissectors/packet-btl2cap.c | |
parent | 45953625a5c9238300ef706aa8b816b935b4621f (diff) |
From Michal Labedzki:
Add support for AVDTP/A2DP/VDP and SBC
Part of
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7893
svn path=/trunk/; revision=45921
Diffstat (limited to 'epan/dissectors/packet-btl2cap.c')
-rw-r--r-- | epan/dissectors/packet-btl2cap.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/epan/dissectors/packet-btl2cap.c b/epan/dissectors/packet-btl2cap.c index ef27504c77..f499c3aad1 100644 --- a/epan/dissectors/packet-btl2cap.c +++ b/epan/dissectors/packet-btl2cap.c @@ -155,6 +155,8 @@ typedef struct _config_data_t { typedef struct _psm_data_t { guint16 scid; guint16 dcid; + guint32 first_scid_frame; + guint32 first_dcid_frame; guint16 psm; gboolean local_service; config_data_t in; @@ -418,6 +420,8 @@ dissect_connrequest(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *t psm_data->scid = (scid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x8000 : 0x0000)); psm_data->dcid = 0; psm_data->psm = psm; + psm_data->first_scid_frame = 0; + psm_data->first_dcid_frame = 0; psm_data->local_service = (pinfo->p2p_dir == P2P_DIR_RECV) ? TRUE : FALSE; psm_data->in.mode = 0; psm_data->in.txwindow = 0; @@ -1290,6 +1294,8 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) l2cap_data = ep_alloc(sizeof(btl2cap_data_t)); l2cap_data->chandle = (acl_data)? acl_data->chandle : 0; l2cap_data->cid = cid; + l2cap_data->psm = 0; + l2cap_data->first_scid_frame = 0; pd_save = pinfo->private_data; pinfo->private_data = l2cap_data; @@ -1485,11 +1491,23 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) psm_data = se_tree_lookup32_array_le(cid_to_psm_table, key); if (psm_data && - ((psm_data->scid == (cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x0000 : 0x8000))) - || (psm_data->dcid == (cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x0000 : 0x8000)))) - ) { + ((psm_data->scid == (cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x0000 : 0x8000))) || + (psm_data->dcid == (cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x0000 : 0x8000))))) { + + if ((psm_data->scid == (cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x0000 : 0x8000))) && + psm_data->first_scid_frame == 0) { + psm_data->first_scid_frame = pinfo->fd->num; + } + + if ((psm_data->dcid == (cid | ((pinfo->p2p_dir == P2P_DIR_RECV) ? 0x0000 : 0x8000))) && + psm_data->first_dcid_frame == 0) { + psm_data->first_dcid_frame = pinfo->fd->num; + } + psm = psm_data->psm; l2cap_data->psm = psm; + l2cap_data->first_scid_frame = psm_data->first_scid_frame; + l2cap_data->first_dcid_frame = psm_data->first_dcid_frame; if (pinfo->p2p_dir == P2P_DIR_RECV) config_data = &(psm_data->in); |