diff options
author | Irene RĂ¼ngeler <I.Ruengeler@fh-muenster.de> | 2013-12-13 07:25:30 +0000 |
---|---|---|
committer | Irene RĂ¼ngeler <I.Ruengeler@fh-muenster.de> | 2013-12-13 07:25:30 +0000 |
commit | 796bf409b0c286dd76e6ecd5c61d0d947d54b479 (patch) | |
tree | 42d21c7d8b1175adf0f155f5c0fb9f53feb795d5 /ui/qt/sctp_all_assocs_dialog.cpp | |
parent | 28e6aa4e8a06299895d7924508a32a895a5454ab (diff) |
Add dialogs and graphs to analyse SCTP behavior similar to the GTK version.
svn path=/trunk/; revision=54026
Diffstat (limited to 'ui/qt/sctp_all_assocs_dialog.cpp')
-rw-r--r-- | ui/qt/sctp_all_assocs_dialog.cpp | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/ui/qt/sctp_all_assocs_dialog.cpp b/ui/qt/sctp_all_assocs_dialog.cpp new file mode 100644 index 0000000000..d51522c4fd --- /dev/null +++ b/ui/qt/sctp_all_assocs_dialog.cpp @@ -0,0 +1,144 @@ +#include "sctp_all_assocs_dialog.h" +#include "ui_sctp_all_assocs_dialog.h" +#include "sctp_assoc_analyse_dialog.h" + +#include "qt_ui_utils.h" +//#include "wireshark_application.h" +#include "file.h" +#include "ui/qt/main_window.h" + +#include <QWidget> +#include <QDir> +#include <QFileDialog> +#include <QIcon> +#include <QPushButton> + +//#include <QDebug> + +SCTPAllAssocsDialog::SCTPAllAssocsDialog(QWidget *parent, capture_file *cf) : + QDialog(parent), + ui(new Ui::SCTPAllAssocsDialog), + cap_file_(cf) +{ + ui->setupUi(this); + sctp_assocs = (sctp_allassocs_info_t *)g_malloc(sizeof(sctp_allassocs_info_t)); + fillTable(); +} + +SCTPAllAssocsDialog::~SCTPAllAssocsDialog() +{ + delete ui; +} + +void SCTPAllAssocsDialog::fillTable() +{ + QString output; + GList *list; + sctp_assoc_info_t* assinfo; + int numAssocs; + + ui->assocList->setColumnHidden(0, true); + ui->assocList->setColumnWidth(1, 85); + ui->assocList->setColumnWidth(2, 85); + ui->assocList->setColumnWidth(3, 150); + ui->assocList->setColumnWidth(4, 150); + + sctp_assocs = (sctp_allassocs_info_t*)sctp_stat_get_info(); + if (sctp_stat_get_info()->is_registered == FALSE) { + register_tap_listener_sctp_stat(); + } + /* (redissect all packets) */ + cf_retap_packets(cap_file_); + numAssocs = 0; + ui->assocList->setRowCount(g_list_length(sctp_assocs->assoc_info_list)); + + list = g_list_first(sctp_assocs->assoc_info_list); + + while (list) { + assinfo = (sctp_assoc_info_t*)(list->data); + ui->assocList->setItem(numAssocs, 0, new QTableWidgetItem(QString("%1").arg(assinfo->assoc_id))); + ui->assocList->setItem(numAssocs, 1, new QTableWidgetItem(QString("%1").arg(assinfo->port1))); + ui->assocList->setItem(numAssocs, 2, new QTableWidgetItem(QString("%1").arg(assinfo->port2))); + ui->assocList->setItem(numAssocs, 3, new QTableWidgetItem(QString("%1").arg(assinfo->n_packets))); + ui->assocList->setItem(numAssocs, 4, new QTableWidgetItem(QString("%1").arg(assinfo->n_data_chunks))); + ui->assocList->setItem(numAssocs, 5, new QTableWidgetItem(QString("%1").arg(assinfo->n_data_bytes))); + list = g_list_next(list); + numAssocs++; + } + ui->analyseButton->setEnabled(false); + ui->setFilterButton->setEnabled(false); + connect(ui->assocList, SIGNAL(itemSelectionChanged()), this, SLOT(getSelectedItem())); + } + +sctp_assoc_info_t* SCTPAllAssocsDialog::findSelectedAssoc() +{ + QTableWidgetItem *selection; + GList *list; + sctp_assoc_info_t* assinfo; + int row, id; + + selection = ui->assocList->selectedItems()[0]; + row = selection->row(); + selection = ui->assocList->item(row, 0); + id = (selection->data(0)).toInt(); + list = g_list_first(sctp_assocs->assoc_info_list); + + while (list) { + assinfo = (sctp_assoc_info_t*)(list->data); + if (assinfo->assoc_id == id) { + return assinfo; + } + list = g_list_next(list); + } + return NULL; +} + +void SCTPAllAssocsDialog::getSelectedItem() +{ + ui->analyseButton->setEnabled(true); + ui->setFilterButton->setEnabled(true); + ui->analyseButton->setFocus(Qt::OtherFocusReason); + selected_assoc = findSelectedAssoc(); + printf("selection changed assoc now %p with id %d\n", + selected_assoc, selected_assoc->assoc_id); +} + +void SCTPAllAssocsDialog::on_analyseButton_clicked() +{ + + if (!selected_assoc) { + selected_assoc = findSelectedAssoc(); + printf("on_analyseButton_clicked found assoc %p with id %d\n", + selected_assoc, selected_assoc->assoc_id); + } + + SCTPAssocAnalyseDialog *sctp_analyse = new SCTPAssocAnalyseDialog(this, selected_assoc, cap_file_, this); + connect(sctp_analyse, SIGNAL(filterPackets(QString&,bool)), + parent(), SLOT(filterPackets(QString&,bool))); + + if (sctp_analyse->isMinimized() == true) + { + sctp_analyse->showNormal(); + } + else + { + sctp_analyse->show(); + } + + sctp_analyse->raise(); + sctp_analyse->activateWindow(); +} + +void SCTPAllAssocsDialog::on_setFilterButton_clicked() +{ + + if (!selected_assoc){ + selected_assoc = findSelectedAssoc(); + printf("on_setFilterButton_clicked found assoc %p with id %d\n", + selected_assoc, selected_assoc->assoc_id); + } + + QString newFilter = QString("sctp.assoc_index==%1").arg(selected_assoc->assoc_id); + selected_assoc = NULL; + emit filterPackets(newFilter, false); +} |