diff options
author | Roland Knall <rknall@gmail.com> | 2022-06-03 10:25:15 +0200 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2022-06-03 10:25:15 +0200 |
commit | 05759d3ec5160d8d7c1d955c6f073c421b2bcfc7 (patch) | |
tree | de9c56d9211185ef11d1f2b8b7d3d1ae457e0df7 | |
parent | 056fd8a1e3e67dc13835d8a79c8964bc65a23882 (diff) |
Qt: Better handle retapping for traffic tables
Retapping can have some side-effects and was done in
an overflowing way. Reducing the number of times retapping
is required and done, and also giving control for taps
reload to TrafficTab
-rw-r--r-- | ui/qt/conversation_dialog.cpp | 9 | ||||
-rw-r--r-- | ui/qt/conversation_dialog.h | 1 | ||||
-rw-r--r-- | ui/qt/endpoint_dialog.cpp | 10 | ||||
-rw-r--r-- | ui/qt/endpoint_dialog.h | 1 | ||||
-rw-r--r-- | ui/qt/models/atap_data_model.cpp | 7 | ||||
-rw-r--r-- | ui/qt/traffic_table_dialog.cpp | 3 | ||||
-rw-r--r-- | ui/qt/widgets/traffic_tab.cpp | 24 | ||||
-rw-r--r-- | ui/qt/widgets/traffic_tab.h | 11 |
8 files changed, 23 insertions, 43 deletions
diff --git a/ui/qt/conversation_dialog.cpp b/ui/qt/conversation_dialog.cpp index c55feef48a..c264b530d5 100644 --- a/ui/qt/conversation_dialog.cpp +++ b/ui/qt/conversation_dialog.cpp @@ -92,14 +92,12 @@ ConversationDialog::ConversationDialog(QWidget &parent, CaptureFile &cf, int cli TrafficTableDialog(parent, cf, filter, table_name_), tcp_graph_requested_(false) { - trafficTab()->setProtocolInfo(tr("Conversation"), &(recent.conversation_tabs), &createModel); - trafficTab()->setFirstTab(cli_proto_id); + trafficTab()->setProtocolInfo(tr("Conversation"), cli_proto_id, &(recent.conversation_tabs), &createModel); trafficTab()->setDelegate(CONV_COLUMN_START, &createDelegate); trafficTab()->setDelegate(CONV_COLUMN_DURATION, &createDelegate); connect(trafficTab(), &TrafficTab::filterAction, this, &ConversationDialog::filterAction); connect(trafficTab()->tabBar(), &QTabBar::currentChanged, this, &ConversationDialog::tabChanged); connect(trafficTab(), &TrafficTab::tabDataChanged, this, &ConversationDialog::tabChanged); - connect(absoluteTimeCheckBox(), &QCheckBox::toggled, trafficTab(), &TrafficTab::useAbsoluteTime); follow_bt_ = buttonBox()->addButton(tr("Follow Stream…"), QDialogButtonBox::ActionRole); follow_bt_->setToolTip(tr("Follow a TCP or UDP stream.")); @@ -122,13 +120,8 @@ ConversationDialog::ConversationDialog(QWidget &parent, CaptureFile &cf, int cli } updateWidgets(); - - cap_file_.delayedRetapPackets(); } -ConversationDialog::~ConversationDialog() -{} - void ConversationDialog::captureFileClosing() { trafficTab()->disableTap(); diff --git a/ui/qt/conversation_dialog.h b/ui/qt/conversation_dialog.h index aa61c2c23e..d1487a4c3b 100644 --- a/ui/qt/conversation_dialog.h +++ b/ui/qt/conversation_dialog.h @@ -25,7 +25,6 @@ public: * @param filter Display filter to apply. */ explicit ConversationDialog(QWidget &parent, CaptureFile &cf, int cli_proto_id = -1, const char *filter = NULL); - ~ConversationDialog(); protected: void captureFileClosing(); diff --git a/ui/qt/endpoint_dialog.cpp b/ui/qt/endpoint_dialog.cpp index 91e32f66f5..57c9eedf8c 100644 --- a/ui/qt/endpoint_dialog.cpp +++ b/ui/qt/endpoint_dialog.cpp @@ -66,10 +66,8 @@ static ATapDataModel * createModel(int protoId, QString filter) EndpointDialog::EndpointDialog(QWidget &parent, CaptureFile &cf, int cli_proto_id, const char *filter) : TrafficTableDialog(parent, cf, filter, table_name_) { - trafficTab()->setProtocolInfo(tr("Endpoints"), &(recent.endpoint_tabs), &createModel); - trafficTab()->setFirstTab(cli_proto_id); + trafficTab()->setProtocolInfo(tr("Endpoints"), cli_proto_id, &(recent.endpoint_tabs), &createModel); connect(trafficTab(), &TrafficTab::filterAction, this, &EndpointDialog::filterAction); - connect(trafficTab(), &TrafficTab::tabDataChanged, this, &EndpointDialog::tabChanged); connect(trafficTab(), &TrafficTab::currentChanged, this, &EndpointDialog::tabChanged); @@ -93,12 +91,6 @@ EndpointDialog::EndpointDialog(QWidget &parent, CaptureFile &cf, int cli_proto_i } updateWidgets(); - - cap_file_.delayedRetapPackets(); -} - -EndpointDialog::~EndpointDialog() -{ } void EndpointDialog::captureFileClosing() diff --git a/ui/qt/endpoint_dialog.h b/ui/qt/endpoint_dialog.h index 38a83145a5..cc8cab33e3 100644 --- a/ui/qt/endpoint_dialog.h +++ b/ui/qt/endpoint_dialog.h @@ -28,7 +28,6 @@ public: * @param filter Display filter to apply. */ explicit EndpointDialog(QWidget &parent, CaptureFile &cf, int cli_proto_id = -1, const char *filter = NULL); - ~EndpointDialog(); signals: diff --git a/ui/qt/models/atap_data_model.cpp b/ui/qt/models/atap_data_model.cpp index 4b5838346d..6b7538bb3a 100644 --- a/ui/qt/models/atap_data_model.cpp +++ b/ui/qt/models/atap_data_model.cpp @@ -108,7 +108,9 @@ bool ATapDataModel::enableTap() _disableTap = true; return false; } - g_string_free(errorString, TRUE); + + if (errorString) + g_string_free(errorString, TRUE); return true; } @@ -274,7 +276,8 @@ void ATapDataModel::setFilter(QString filter) disableTap(); } - g_string_free(errorString, TRUE); + if (errorString) + g_string_free(errorString, TRUE); } ATapDataModel::dataModelType ATapDataModel::modelType() const diff --git a/ui/qt/traffic_table_dialog.cpp b/ui/qt/traffic_table_dialog.cpp index e8f947e980..b7d65edb30 100644 --- a/ui/qt/traffic_table_dialog.cpp +++ b/ui/qt/traffic_table_dialog.cpp @@ -63,6 +63,9 @@ TrafficTableDialog::TrafficTableDialog(QWidget &parent, CaptureFile &cf, const c connect(mainApp, SIGNAL(addressResolutionChanged()), this, SLOT(currentTabChanged())); connect(ui->trafficTab, SIGNAL(currentChanged(int)), this, SLOT(currentTabChanged())); connect(&cap_file_, SIGNAL(captureEvent(CaptureEvent)), this, SLOT(captureEvent(CaptureEvent))); + + connect(ui->absoluteTimeCheckBox, &QCheckBox::toggled, trafficTab(), &TrafficTab::useAbsoluteTime); + connect(trafficTab(), &TrafficTab::retapRequired, &cap_file_, &CaptureFile::delayedRetapPackets); } TrafficTableDialog::~TrafficTableDialog() diff --git a/ui/qt/widgets/traffic_tab.cpp b/ui/qt/widgets/traffic_tab.cpp index 31eeebb30e..22562906e4 100644 --- a/ui/qt/widgets/traffic_tab.cpp +++ b/ui/qt/widgets/traffic_tab.cpp @@ -101,9 +101,10 @@ TrafficTab::~TrafficTab() } } -void TrafficTab::setProtocolInfo(QString tableName, GList ** recentList, ATapModelCallback createModel) +void TrafficTab::setProtocolInfo(QString tableName, int cliId, GList ** recentList, ATapModelCallback createModel) { _tableName = tableName; + _cliId = cliId; _recentList = recentList; if (createModel) _createModel = createModel; @@ -120,6 +121,12 @@ void TrafficTab::setProtocolInfo(QString tableName, GList ** recentList, ATapMod _protocols << proto_get_id_by_filter_name(name.toStdString().c_str()); } + // Bring the command-line specified type to the front. + if ((_cliId > 0) && (get_conversation_by_proto_id(_cliId))) { + _protocols.removeAll(_cliId); + _protocols.prepend(_cliId); + } + QWidget * container = new QWidget(this); container->setFixedHeight(tabBar()->height()); container->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed)); @@ -164,19 +171,6 @@ void TrafficTab::toggleTab(bool checked) updateTabs(); } -void TrafficTab::setFirstTab(int cliId) -{ - _cliId = cliId; - - // Bring the command-line specified type to the front. - if ((_cliId > 0) && (get_conversation_by_proto_id(_cliId))) { - _protocols.removeAll(_cliId); - _protocols.prepend(_cliId); - } - - updateTabs(); -} - void TrafficTab::setDelegate(int column, ATapCreateDelegate createDelegate) { if (! createDelegate || column < 0) @@ -328,6 +322,8 @@ void TrafficTab::updateTabs() TabData tabData = qvariant_cast<TabData>(tabBar()->tabData(idx)); _tabs.insert(tabData.protoId(), idx); } + + emit retapRequired(); } void TrafficTab::doCurrentIndexChange(const QModelIndex & cur, const QModelIndex &) diff --git a/ui/qt/widgets/traffic_tab.h b/ui/qt/widgets/traffic_tab.h index 71a9a3e904..08856a8f45 100644 --- a/ui/qt/widgets/traffic_tab.h +++ b/ui/qt/widgets/traffic_tab.h @@ -96,19 +96,13 @@ public: * without having to removing the predefined object during setup of the UI. * * @param tableName The name for the table. Used for the protocol selection button + * @param cliId a protocol id for the first tab * @param recentList The list to store the selected protocols in * @param createModel A callback, which will create the correct model for the trees * * @see ATapModelCallback */ - void setProtocolInfo(QString tableName, GList ** recentList, ATapModelCallback createModel); - - /** - * @brief Ensure, that the given protocol id is the first tab set - * - * @param cliId a protocol id for the first tab - */ - void setFirstTab(int cliId); + void setProtocolInfo(QString tableName, int cliId, GList ** recentList, ATapModelCallback createModel); /** * @brief Set the Delegate object for a specific column @@ -226,6 +220,7 @@ public slots: signals: void filterAction(QString filter, FilterAction::Action action, FilterAction::ActionType type); void tabDataChanged(int index); + void retapRequired(); private: QString _tableName; |