aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-bthci_evt.c
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2015-05-04 12:54:29 +0200
committerMichal Labedzki <michal.labedzki@tieto.com>2015-05-18 07:09:15 +0000
commit72ea3b1ca2294bf30154296ed7ce2e61f9a84346 (patch)
tree7dd0982c3b178829aaccd262d60b8ed753df2996 /epan/dissectors/packet-bthci_evt.c
parentf169900be9510bc3acc78b6df7b0ff69fd9c1ddb (diff)
Bluetooth: SCO: Add Stream Number generated field
It is used to distinguish SCO streams. Stream Number increase any time when new SCO connection is created. Change-Id: I6cf68914112980cdbad345e52469bf2baf214551 Reviewed-on: https://code.wireshark.org/review/8510 Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
Diffstat (limited to 'epan/dissectors/packet-bthci_evt.c')
-rw-r--r--epan/dissectors/packet-bthci_evt.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/epan/dissectors/packet-bthci_evt.c b/epan/dissectors/packet-bthci_evt.c
index 6210d7dc1b..0ff9be9931 100644
--- a/epan/dissectors/packet-bthci_evt.c
+++ b/epan/dissectors/packet-bthci_evt.c
@@ -39,6 +39,7 @@
#include <epan/decode_as.h>
#include "packet-bluetooth.h"
+#include "packet-bthci_sco.h"
static dissector_handle_t bthci_cmd_handle;
static dissector_handle_t bthci_evt_handle;
@@ -3258,19 +3259,22 @@ dissect_bthci_evt_sync_connection_complete(tvbuff_t *tvb, int offset,
if (!pinfo->fd->flags.visited && status == 0x00) {
- wmem_tree_key_t key[5];
- guint32 k_interface_id;
- guint32 k_adapter_id;
- guint32 k_connection_handle;
- guint32 k_frame_number;
- remote_bdaddr_t *remote_bdaddr;
- chandle_session_t *chandle_session;
+ wmem_tree_key_t key[5];
+ guint32 k_interface_id;
+ guint32 k_adapter_id;
+ guint32 k_connection_handle;
+ guint32 k_frame_number;
+ remote_bdaddr_t *remote_bdaddr;
+ chandle_session_t *chandle_session;
+ bthci_sco_stream_number_t *sco_stream_number;
+ guint32 stream_number;
k_interface_id = bluetooth_data->interface_id;
k_adapter_id = bluetooth_data->adapter_id;
k_connection_handle = connection_handle;
k_frame_number = pinfo->fd->num;
+ /* chandle to bdaddr */
key[0].length = 1;
key[0].key = &k_interface_id;
key[1].length = 1;
@@ -3290,10 +3294,32 @@ dissect_bthci_evt_sync_connection_complete(tvbuff_t *tvb, int offset,
wmem_tree_insert32_array(bluetooth_data->chandle_to_bdaddr, key, remote_bdaddr);
+ /* chandle session */
chandle_session = (chandle_session_t *) wmem_new(wmem_file_scope(), chandle_session_t);
chandle_session->connect_in_frame = k_frame_number;
chandle_session->disconnect_in_frame = max_disconnect_in_frame;
wmem_tree_insert32_array(bluetooth_data->chandle_sessions, key, chandle_session);
+
+ /* stream number */
+ key[2].length = 0;
+ key[2].key = NULL;
+
+ subtree = (wmem_tree_t *) wmem_tree_lookup32_array(bthci_sco_stream_numbers, key);
+ sco_stream_number = (subtree) ? (bthci_sco_stream_number_t *) wmem_tree_lookup32_le(subtree, pinfo->fd->num) : NULL;
+ if (!sco_stream_number) {
+ stream_number = 1;
+ } else {
+ stream_number = sco_stream_number->stream_number + 1;
+ }
+
+ key[2].length = 1;
+ key[2].key = &frame_number;
+ key[3].length = 0;
+ key[3].key = NULL;
+
+ sco_stream_number = (bthci_sco_stream_number_t *) wmem_new(wmem_file_scope(), bthci_sco_stream_number_t);
+ sco_stream_number->stream_number = stream_number;
+ wmem_tree_insert32_array(bthci_sco_stream_numbers, key, sco_stream_number);
}
return offset;