aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Labedzki <michal.labedzki@tieto.com>2016-10-24 15:49:29 +0200
committerMichal Labedzki <michal.labedzki@tieto.com>2016-11-04 09:23:05 +0000
commitc7996990402b7bba13a9df6807797febb9ebaf98 (patch)
tree49961fcf2f0bca46c87304eeafff63d03c170f77
parent3eae603b73c3709addc8984d23f094496bdb6d62 (diff)
Qt/Bluetooth: Split LE Meta Events
Add 3rd level subtree in Event->LE Meta, because of existance of "Subevent" which is in similar thing to Event or Opcode in CommandComplete. Change-Id: Ib732ab417c5141251736b608de2e4e64b702c20a Reviewed-on: https://code.wireshark.org/review/18667 Reviewed-by: Michal Labedzki <michal.labedzki@tieto.com>
-rw-r--r--epan/dissectors/packet-bluetooth.h2
-rw-r--r--epan/dissectors/packet-bthci_evt.c18
-rw-r--r--ui/qt/bluetooth_hci_summary_dialog.cpp116
-rw-r--r--ui/qt/bluetooth_hci_summary_dialog.ui47
4 files changed, 177 insertions, 6 deletions
diff --git a/epan/dissectors/packet-bluetooth.h b/epan/dissectors/packet-bluetooth.h
index 649ceb1c7a..6a2f6dfd88 100644
--- a/epan/dissectors/packet-bluetooth.h
+++ b/epan/dissectors/packet-bluetooth.h
@@ -256,6 +256,7 @@ enum bluetooth_hci_summary_type {
BLUETOOTH_HCI_SUMMARY_OPCODE,
BLUETOOTH_HCI_SUMMARY_EVENT_OPCODE,
BLUETOOTH_HCI_SUMMARY_EVENT,
+ BLUETOOTH_HCI_SUMMARY_SUBEVENT,
BLUETOOTH_HCI_SUMMARY_VENDOR_OPCODE,
BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT_OPCODE,
BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT,
@@ -272,6 +273,7 @@ typedef struct _bluetooth_hci_summary_tap_t {
guint16 ocf;
guint8 ogf;
guint8 event;
+ guint8 subevent;
guint8 status;
guint8 reason;
guint8 hardware_error;
diff --git a/epan/dissectors/packet-bthci_evt.c b/epan/dissectors/packet-bthci_evt.c
index 644b5971fd..15e82c7f6f 100644
--- a/epan/dissectors/packet-bthci_evt.c
+++ b/epan/dissectors/packet-bthci_evt.c
@@ -1972,6 +1972,24 @@ dissect_bthci_evt_le_meta(tvbuff_t *tvb, int offset, packet_info *pinfo,
subevent_code = tvb_get_guint8(tvb, offset);
proto_tree_add_item(tree, hf_bthci_evt_le_meta_subevent, tvb, offset, 1, ENC_LITTLE_ENDIAN);
+ if (have_tap_listener(bluetooth_hci_summary_tap)) {
+ bluetooth_hci_summary_tap_t *tap_hci_summary;
+
+ tap_hci_summary = wmem_new(wmem_packet_scope(), bluetooth_hci_summary_tap_t);
+
+ tap_hci_summary->interface_id = bluetooth_data->interface_id;
+ tap_hci_summary->adapter_id = bluetooth_data->adapter_id;
+
+ tap_hci_summary->type = BLUETOOTH_HCI_SUMMARY_SUBEVENT;
+ tap_hci_summary->event = 0x3E; /* LE Meta */
+ tap_hci_summary->subevent = subevent_code;
+ if (try_val_to_str(subevent_code, evt_le_meta_subevent))
+ tap_hci_summary->name = val_to_str(subevent_code, evt_le_meta_subevent, "Unknown 0x%04x");
+ else
+ tap_hci_summary->name = NULL;
+ tap_queue_packet(bluetooth_hci_summary_tap, pinfo, tap_hci_summary);
+ }
+
col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", val_to_str(subevent_code, evt_le_meta_subevent, "Unknown 0x%02x"));
offset += 1;
diff --git a/ui/qt/bluetooth_hci_summary_dialog.cpp b/ui/qt/bluetooth_hci_summary_dialog.cpp
index 250646fe6c..886df89d6d 100644
--- a/ui/qt/bluetooth_hci_summary_dialog.cpp
+++ b/ui/qt/bluetooth_hci_summary_dialog.cpp
@@ -46,10 +46,11 @@ static const int column_number_ogf = 1;
static const int column_number_ocf = 2;
static const int column_number_opcode = 3;
static const int column_number_event = 4;
-static const int column_number_status = 5;
-static const int column_number_reason = 6;
-static const int column_number_hardware_error = 7;
-static const int column_number_occurrence = 8;
+static const int column_number_subevent = 5;
+static const int column_number_status = 6;
+static const int column_number_reason = 7;
+static const int column_number_hardware_error = 8;
+static const int column_number_occurrence = 9;
typedef struct _item_data_t {
guint32 interface_id;
@@ -287,6 +288,7 @@ void BluetoothHciSummaryDialog::on_actionCopy_Rows_triggered()
.arg((*i_item)->text(column_number_ocf), -10)
.arg((*i_item)->text(column_number_opcode), -10)
.arg((*i_item)->text(column_number_event), -10)
+ .arg((*i_item)->text(column_number_subevent), -10)
.arg((*i_item)->text(column_number_status), -10)
.arg((*i_item)->text(column_number_reason), -10)
.arg((*i_item)->text(column_number_hardware_error), -15)
@@ -352,6 +354,7 @@ gboolean BluetoothHciSummaryDialog::tapPacket(void *tapinfo_ptr, packet_info *pi
QTreeWidgetItem *main_item = NULL;
QTreeWidgetItem *item = NULL;
QTreeWidgetItem *frame_item = NULL;
+ QTreeWidgetItem *meta_item = NULL;
item_data_t *item_data = NULL;
QString adapter;
QString name;
@@ -502,18 +505,40 @@ gboolean BluetoothHciSummaryDialog::tapPacket(void *tapinfo_ptr, packet_info *pi
item->setText(column_number_name, name);
item->setText(column_number_event, QString("").sprintf("0x%02X", tap_hci->event));
+ item->setText(column_number_occurrence, QString::number(0));
main_item->addChild(item);
main_item->sortChildren(column_number_event, Qt::AscendingOrder);
main_item->setText(column_number_occurrence, QString::number(main_item->text(column_number_occurrence).toInt() + 1));
}
- item->setText(column_number_occurrence, QString::number(item->text(column_number_occurrence).toInt() + 1));
-
/* I believe bthci_cmd/bthci_evt already add frame item */
if (tap_hci->type == BLUETOOTH_HCI_SUMMARY_VENDOR_EVENT)
break;
+ if (tap_hci->event == 0x3E) { /* LE Meta */
+ int i_item;
+ for (i_item = 0; i_item < item->childCount(); i_item +=1) {
+ if (item->child(i_item)->text(column_number_name) != QString(tr("Unknown")))
+ continue;
+ }
+
+ if (i_item >= item->childCount()) {
+ frame_item = new QTreeWidgetItem();
+ frame_item->setText(column_number_name, QString(tr("Unknown")));
+ frame_item->setText(column_number_occurrence, QString::number(1));
+ item->addChild(frame_item);
+ item->setText(column_number_occurrence, QString::number(item->text(column_number_occurrence).toInt() + 1));
+
+ item = frame_item;
+ } else {
+ item = item->child(i_item);
+ item->setText(column_number_occurrence, QString::number(item->text(column_number_occurrence).toInt() + 1));
+ }
+ } else {
+ item->setText(column_number_occurrence, QString::number(item->text(column_number_occurrence).toInt() + 1));
+ }
+
frame_item = new QTreeWidgetItem();
frame_item->setText(column_number_name, QString(tr("Frame %1")).arg(pinfo->num));
frame_item->setText(column_number_event, QString("").sprintf("0x%02X", tap_hci->event));
@@ -526,6 +551,82 @@ gboolean BluetoothHciSummaryDialog::tapPacket(void *tapinfo_ptr, packet_info *pi
frame_item->setData(0, Qt::UserRole, QVariant::fromValue<item_data_t *>(item_data));
break;
+ case BLUETOOTH_HCI_SUMMARY_SUBEVENT:
+ main_item = dialog->item_events_;
+
+ meta_item = NULL;
+
+ for (int i_item = 0; i_item < main_item->childCount(); i_item +=1) {
+ if (main_item->child(i_item)->text(column_number_event) != QString("").sprintf("0x%02X", tap_hci->event))
+ continue;
+
+ meta_item = main_item->child(i_item);
+ break;
+ }
+
+ if (meta_item == NULL)
+ break;
+
+ item = NULL;
+
+ for (int i_item = 0; i_item < meta_item->childCount(); i_item +=1) {
+ if (meta_item->child(i_item)->text(column_number_subevent) != QString("").sprintf("0x%02X", tap_hci->subevent))
+ continue;
+
+ item = meta_item->child(i_item);
+ item->setText(column_number_occurrence, QString::number(item->text(column_number_occurrence).toInt() + 1));
+
+ break;
+ }
+
+ if (item == NULL) {
+ item = new QTreeWidgetItem();
+ item->setText(column_number_name, tap_hci->name);
+ item->setText(column_number_subevent, QString("").sprintf("0x%02X", tap_hci->subevent));
+ item->setText(column_number_occurrence, QString::number(1));
+
+ meta_item->addChild(item);
+ meta_item->setText(column_number_occurrence, QString::number(meta_item->text(column_number_occurrence).toInt() + 1));
+ meta_item->sortChildren(column_number_subevent, Qt::AscendingOrder);
+ }
+
+ frame_item = new QTreeWidgetItem();
+ frame_item->setText(column_number_name, QString(tr("Frame %1")).arg(pinfo->num));
+ frame_item->setText(column_number_event, QString("").sprintf("0x%02X", tap_hci->event));
+ frame_item->setText(column_number_subevent, QString("").sprintf("0x%02X", tap_hci->subevent));
+
+ item_data = wmem_new(wmem_file_scope(), item_data_t);
+ item_data->interface_id = tap_hci->interface_id;
+ item_data->adapter_id = tap_hci->adapter_id;
+ item_data->frame_number = pinfo->num;
+
+ frame_item->setData(0, Qt::UserRole, QVariant::fromValue<item_data_t *>(item_data));
+
+ item->addChild(frame_item);
+
+ /* Remove item that is known now */
+ for (int i_item = 0; i_item < meta_item->childCount(); i_item +=1) {
+ if (meta_item->child(i_item)->text(column_number_name) != QString(tr("Unknown")))
+ continue;
+
+ item = meta_item->child(i_item);
+ for (int ii_item = 0; ii_item < item->childCount(); ii_item +=1) {
+ if (item->child(ii_item)->text(column_number_name) != QString(tr("Frame %1")).arg(pinfo->num))
+ continue;
+
+ delete item->child(ii_item);
+ item->setText(column_number_occurrence, QString::number(item->text(column_number_occurrence).toInt() - 1));
+ if (item->childCount() == 0) {
+ delete item;
+ meta_item->setText(column_number_occurrence, QString::number(meta_item->text(column_number_occurrence).toInt() - 1));
+ }
+
+ break;
+ }
+ break;
+ }
+
+ break;
case BLUETOOTH_HCI_SUMMARY_STATUS:
main_item = dialog->item_status_;
@@ -715,6 +816,7 @@ void BluetoothHciSummaryDialog::recursiveCopyTreeItems(QTreeWidgetItem *item, QS
.arg(child_item->text(column_number_ocf), -10)
.arg(child_item->text(column_number_opcode), -10)
.arg(child_item->text(column_number_event), -10)
+ .arg(child_item->text(column_number_subevent), -10)
.arg(child_item->text(column_number_status), -10)
.arg(child_item->text(column_number_reason), -10)
.arg(child_item->text(column_number_hardware_error), -15)
@@ -738,6 +840,7 @@ void BluetoothHciSummaryDialog::on_actionCopy_All_triggered()
.arg(item->text(column_number_ocf), -10)
.arg(item->text(column_number_opcode), -10)
.arg(item->text(column_number_event), -10)
+ .arg(item->text(column_number_subevent), -10)
.arg(item->text(column_number_status), -10)
.arg(item->text(column_number_reason), -10)
.arg(item->text(column_number_hardware_error), -15)
@@ -752,6 +855,7 @@ void BluetoothHciSummaryDialog::on_actionCopy_All_triggered()
.arg(item->text(column_number_ocf), -10)
.arg(item->text(column_number_opcode), -10)
.arg(item->text(column_number_event), -10)
+ .arg(item->text(column_number_subevent), -10)
.arg(item->text(column_number_status), -10)
.arg(item->text(column_number_reason), -10)
.arg(item->text(column_number_hardware_error), -15)
diff --git a/ui/qt/bluetooth_hci_summary_dialog.ui b/ui/qt/bluetooth_hci_summary_dialog.ui
index 3e8f20802c..55b8e87e88 100644
--- a/ui/qt/bluetooth_hci_summary_dialog.ui
+++ b/ui/qt/bluetooth_hci_summary_dialog.ui
@@ -109,6 +109,11 @@
</column>
<column>
<property name="text">
+ <string>Subevent</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
<string>Status</string>
</property>
</column>
@@ -153,6 +158,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -182,6 +190,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -211,6 +222,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -240,6 +254,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -269,6 +286,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -298,6 +318,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -327,6 +350,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -356,6 +382,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -385,6 +414,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -414,6 +446,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -443,6 +478,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -472,6 +510,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -501,6 +542,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>
@@ -530,6 +574,9 @@
<string/>
</property>
<property name="text">
+ <string/>
+ </property>
+ <property name="text">
<string>0</string>
</property>
</item>