diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2017-09-16 16:52:23 +0200 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2017-09-18 21:24:16 +0000 |
commit | c41bab1f667cfe51b09b80869497a2db68abecce (patch) | |
tree | f61fbf402e9cfe58b9a694eabf4dd389bed94796 /ui/qt | |
parent | a593fce94cb7fd0fa3f5eef7fae9c0128cb6f7e3 (diff) |
Move most of sequence analysis code from ui/ to epan/
Create registration system to allow creation of analysis items
to be localized to the dissector. For now only frame (all) and
TCP are supported.
VOIP functionality will be covered in a separate patch.
Change-Id: I5b05ef6d5afff8d0b162b03a0f451ab810602e81
Reviewed-on: https://code.wireshark.org/review/23571
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/sequence_diagram.cpp | 2 | ||||
-rw-r--r-- | ui/qt/sequence_dialog.cpp | 52 | ||||
-rw-r--r-- | ui/qt/sequence_dialog.h | 2 | ||||
-rw-r--r-- | ui/qt/voip_calls_dialog.cpp | 2 |
4 files changed, 47 insertions, 11 deletions
diff --git a/ui/qt/sequence_diagram.cpp b/ui/qt/sequence_diagram.cpp index 0dd52c59b1..98071b18a6 100644 --- a/ui/qt/sequence_diagram.cpp +++ b/ui/qt/sequence_diagram.cpp @@ -263,7 +263,7 @@ void SequenceDiagram::draw(QCPPainter *painter) fg_pen.setColor(sel_pal.color(QPalette::HighlightedText)); bg_color = sel_pal.color(QPalette::Highlight); selected_key_ = cur_key; - } else if (sainfo_->type == SEQ_ANALYSIS_ANY) { + } else if (strcmp(sainfo_->name, "any") == 0) { if (sai->has_color_filter) { fg_pen.setColor(QColor().fromRgb(sai->fg_color)); bg_color = QColor().fromRgb(sai->bg_color); diff --git a/ui/qt/sequence_dialog.cpp b/ui/qt/sequence_dialog.cpp index 0d058fe556..786a73076d 100644 --- a/ui/qt/sequence_dialog.cpp +++ b/ui/qt/sequence_dialog.cpp @@ -33,6 +33,7 @@ #include <ui/qt/utils/qt_ui_utils.h> #include "sequence_diagram.h" #include "wireshark_application.h" +#include <ui/qt/utils/variant_pointer.h> #include <QDir> #include <QFileDialog> @@ -65,6 +66,12 @@ static const double min_top_ = -1.0; static const double min_left_ = -0.5; +typedef struct { + int curr_index; + QComboBox *flow; + SequenceInfo *info; +} sequence_items_t; + SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *info) : WiresharkDialog(parent, cf), ui(new Ui::SequenceDialog), @@ -80,7 +87,7 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i if (!info_) { info_ = new SequenceInfo(sequence_analysis_info_new()); - info_->sainfo()->type = SEQ_ANALYSIS_ANY; + info_->sainfo()->name = "any"; info_->sainfo()->all_packets = TRUE; } else { info_->ref(); @@ -153,13 +160,16 @@ SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, SequenceInfo *i ui->showComboBox->setCurrentIndex(0); ui->addressComboBox->setCurrentIndex(0); - QComboBox *fcb = ui->flowComboBox; - fcb->addItem(ui->actionFlowAny->text(), SEQ_ANALYSIS_ANY); - fcb->addItem(ui->actionFlowTcp->text(), SEQ_ANALYSIS_TCP); + sequence_items_t item_data; + + item_data.curr_index = 0; + item_data.flow = ui->flowComboBox; + item_data.info = info_; - ui->flowComboBox->setCurrentIndex(info_->sainfo()->type); + //Add all registered analysis to combo box + sequence_analysis_table_iterate_tables(addFlowSequenceItem, &item_data); - if (info_->sainfo()->type == SEQ_ANALYSIS_VOIP) { + if (strcmp(info_->sainfo()->name, "voip") == 0) { ui->flowComboBox->blockSignals(true); ui->controlFrame->hide(); } @@ -405,7 +415,7 @@ void SequenceDialog::fillDiagram() QCustomPlot *sp = ui->sequencePlot; - if (info_->sainfo()->type == SEQ_ANALYSIS_VOIP) { + if (strcmp(info_->sainfo()->name, "voip") == 0) { seq_diagram_->setData(info_->sainfo()); } else { seq_diagram_->clearData(); @@ -587,9 +597,12 @@ void SequenceDialog::on_showComboBox_activated(int index) void SequenceDialog::on_flowComboBox_activated(int index) { - if (!info_->sainfo() || info_->sainfo()->type == SEQ_ANALYSIS_VOIP || index < 0) return; + if (!info_->sainfo() || (strcmp(info_->sainfo()->name, "voip") == 0) || index < 0) + return; + + register_analysis_t* analysis = VariantPointer<register_analysis_t>::asPtr(ui->flowComboBox->itemData(index)); + info_->sainfo()->name = sequence_analysis_get_name(analysis); - info_->sainfo()->type = static_cast<seq_analysis_type>(ui->flowComboBox->itemData(index).toInt()); fillDiagram(); } @@ -673,6 +686,27 @@ void SequenceDialog::zoomXAxis(bool in) sp->replot(); } +gboolean SequenceDialog::addFlowSequenceItem(const void* key, void *value, void *userdata) +{ + const char* name = (const char*)key; + register_analysis_t* analysis = (register_analysis_t*)value; + sequence_items_t* item_data = (sequence_items_t*)userdata; + + /* XXX - Although "voip" isn't a registered name yet, it appears to have special + handling that will be done outside of registered data */ + if (strcmp(name, "voip") == 0) + return FALSE; + + item_data->flow->addItem(sequence_analysis_get_ui_name(analysis), VariantPointer<register_analysis_t>::asQVariant(analysis)); + + if (item_data->flow->itemData(item_data->curr_index).toString().compare(item_data->info->sainfo()->name) == 0) + item_data->flow->setCurrentIndex(item_data->curr_index); + + item_data->curr_index++; + + return FALSE; +} + SequenceInfo::SequenceInfo(seq_analysis_info_t *sainfo) : sainfo_(sainfo), count_(1) diff --git a/ui/qt/sequence_dialog.h b/ui/qt/sequence_dialog.h index e6f0afef11..110e1f948e 100644 --- a/ui/qt/sequence_dialog.h +++ b/ui/qt/sequence_dialog.h @@ -117,6 +117,8 @@ private: void panAxes(int x_pixels, int y_pixels); void resetAxes(bool keep_lower = false); void goToAdjacentPacket(bool next); + + static gboolean addFlowSequenceItem(const void *key, void *value, void *userdata); }; #endif // SEQUENCE_DIALOG_H diff --git a/ui/qt/voip_calls_dialog.cpp b/ui/qt/voip_calls_dialog.cpp index ef7ce35760..2016c01eaa 100644 --- a/ui/qt/voip_calls_dialog.cpp +++ b/ui/qt/voip_calls_dialog.cpp @@ -103,7 +103,7 @@ VoipCallsDialog::VoipCallsDialog(QWidget &parent, CaptureFile &cf, bool all_flow tapinfo_.h225_cstype = H225_OTHER; tapinfo_.fs_option = all_flows ? FLOW_ALL : FLOW_ONLY_INVITES; /* flow show option */ tapinfo_.graph_analysis = sequence_analysis_info_new(); - tapinfo_.graph_analysis->type = SEQ_ANALYSIS_VOIP; + tapinfo_.graph_analysis->name = "voip"; sequence_info_ = new SequenceInfo(tapinfo_.graph_analysis); voip_calls_init_all_taps(&tapinfo_); |