diff options
author | Michal Labedzki <michal.labedzki@tieto.com> | 2016-10-24 15:49:29 +0200 |
---|---|---|
committer | Michal Labedzki <michal.labedzki@tieto.com> | 2016-11-04 09:23:05 +0000 |
commit | c7996990402b7bba13a9df6807797febb9ebaf98 (patch) | |
tree | 49961fcf2f0bca46c87304eeafff63d03c170f77 | |
parent | 3eae603b73c3709addc8984d23f094496bdb6d62 (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.h | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-bthci_evt.c | 18 | ||||
-rw-r--r-- | ui/qt/bluetooth_hci_summary_dialog.cpp | 116 | ||||
-rw-r--r-- | ui/qt/bluetooth_hci_summary_dialog.ui | 47 |
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> |