aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2017-09-16 16:52:23 +0200
committerMichael Mann <mmann78@netscape.net>2017-09-18 21:24:16 +0000
commitc41bab1f667cfe51b09b80869497a2db68abecce (patch)
treef61fbf402e9cfe58b9a694eabf4dd389bed94796 /ui/qt
parenta593fce94cb7fd0fa3f5eef7fae9c0128cb6f7e3 (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.cpp2
-rw-r--r--ui/qt/sequence_dialog.cpp52
-rw-r--r--ui/qt/sequence_dialog.h2
-rw-r--r--ui/qt/voip_calls_dialog.cpp2
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_);