1 /* sctp_all_assocs_dialog.cpp
2 *
3 * Wireshark - Network traffic analyzer
4 * By Gerald Combs <gerald@wireshark.org>
5 * Copyright 1998 Gerald Combs
6 *
7 * SPDX-License-Identifier: GPL-2.0-or-later
8 */
9
10 #include "sctp_all_assocs_dialog.h"
11 #include <ui_sctp_all_assocs_dialog.h>
12 #include "sctp_assoc_analyse_dialog.h"
13
14 #include <ui/qt/utils/qt_ui_utils.h>
15 //#include "wireshark_application.h"
16 #include "file.h"
17 #include "ui/qt/main_window.h"
18
19 #include <QWidget>
20 #include <QDir>
21 #include <QPushButton>
22
23 //#include <QDebug>
24
SCTPAllAssocsDialog(QWidget * parent,capture_file * cf)25 SCTPAllAssocsDialog::SCTPAllAssocsDialog(QWidget *parent, capture_file *cf) :
26 QDialog(parent),
27 ui(new Ui::SCTPAllAssocsDialog),
28 cap_file_(cf)
29 {
30 ui->setupUi(this);
31 Qt::WindowFlags flags = Qt::Window | Qt::WindowSystemMenuHint
32 | Qt::WindowMinimizeButtonHint
33 | Qt::WindowMaximizeButtonHint
34 | Qt::WindowCloseButtonHint;
35 this->setWindowFlags(flags);
36 fillTable();
37 }
38
~SCTPAllAssocsDialog()39 SCTPAllAssocsDialog::~SCTPAllAssocsDialog()
40 {
41 delete ui;
42 }
43
fillTable()44 void SCTPAllAssocsDialog::fillTable()
45 {
46 const sctp_allassocs_info_t *sctp_assocs;
47 GList *list;
48 const sctp_assoc_info_t* assinfo;
49 int numAssocs;
50
51 ui->assocList->setColumnHidden(0, true);
52 ui->assocList->setColumnWidth(1, 85);
53 ui->assocList->setColumnWidth(2, 85);
54 ui->assocList->setColumnWidth(3, 150);
55 ui->assocList->setColumnWidth(4, 150);
56
57 sctp_assocs = sctp_stat_get_info();
58 if (sctp_assocs->is_registered == FALSE) {
59 register_tap_listener_sctp_stat();
60 /* (redissect all packets) */
61 cf_retap_packets(cap_file_);
62 }
63 numAssocs = 0;
64 ui->assocList->setRowCount(static_cast<int>(g_list_length(sctp_assocs->assoc_info_list)));
65
66 list = g_list_first(sctp_assocs->assoc_info_list);
67
68 while (list) {
69 assinfo = gxx_list_data(const sctp_assoc_info_t*, list);
70 ui->assocList->setItem(numAssocs, 0, new QTableWidgetItem(QString("%1").arg(assinfo->assoc_id)));
71 ui->assocList->setItem(numAssocs, 1, new QTableWidgetItem(QString("%1").arg(assinfo->port1)));
72 ui->assocList->setItem(numAssocs, 2, new QTableWidgetItem(QString("%1").arg(assinfo->port2)));
73 ui->assocList->setItem(numAssocs, 3, new QTableWidgetItem(QString("%1").arg(assinfo->n_packets)));
74 ui->assocList->setItem(numAssocs, 4, new QTableWidgetItem(QString("%1").arg(assinfo->n_data_chunks)));
75 ui->assocList->setItem(numAssocs, 5, new QTableWidgetItem(QString("%1").arg(assinfo->n_data_bytes)));
76 list = gxx_list_next(list);
77 numAssocs++;
78 }
79 ui->analyseButton->setEnabled(false);
80 ui->setFilterButton->setEnabled(false);
81 connect(ui->assocList, SIGNAL(itemSelectionChanged()), this, SLOT(getSelectedItem()));
82 }
83
getSelectedItem()84 void SCTPAllAssocsDialog::getSelectedItem()
85 {
86 ui->analyseButton->setEnabled(true);
87 ui->setFilterButton->setEnabled(true);
88 ui->analyseButton->setFocus(Qt::OtherFocusReason);
89 selected_assoc_id = ui->assocList->item(ui->assocList->selectedItems().at(0)->row(), 0)->data(0).toInt();
90 }
91
on_analyseButton_clicked()92 void SCTPAllAssocsDialog::on_analyseButton_clicked()
93 {
94 const sctp_assoc_info_t* selected_assoc = SCTPAssocAnalyseDialog::findAssoc(this, selected_assoc_id);
95 if (!selected_assoc) return;
96
97 SCTPAssocAnalyseDialog *sctp_analyse = new SCTPAssocAnalyseDialog(this, selected_assoc, cap_file_);
98 connect(sctp_analyse, SIGNAL(filterPackets(QString&,bool)),
99 parent(), SLOT(filterPackets(QString&,bool)));
100
101 if (sctp_analyse->isMinimized() == true)
102 {
103 sctp_analyse->showNormal();
104 }
105 else
106 {
107 sctp_analyse->show();
108 }
109
110 sctp_analyse->raise();
111 sctp_analyse->activateWindow();
112 }
113
on_setFilterButton_clicked()114 void SCTPAllAssocsDialog::on_setFilterButton_clicked()
115 {
116 QString newFilter = QString("sctp.assoc_index==%1").arg(selected_assoc_id);
117 emit filterPackets(newFilter, false);
118 }
119