summaryrefslogtreecommitdiffstats
path: root/ui/qt/rtp_analysis_dialog.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /ui/qt/rtp_analysis_dialog.h
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ui/qt/rtp_analysis_dialog.h')
-rw-r--r--ui/qt/rtp_analysis_dialog.h174
1 files changed, 174 insertions, 0 deletions
diff --git a/ui/qt/rtp_analysis_dialog.h b/ui/qt/rtp_analysis_dialog.h
new file mode 100644
index 0000000..a7fcfce
--- /dev/null
+++ b/ui/qt/rtp_analysis_dialog.h
@@ -0,0 +1,174 @@
+/** @file
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef RTP_ANALYSIS_DIALOG_H
+#define RTP_ANALYSIS_DIALOG_H
+
+#include <config.h>
+
+#include <glib.h>
+#include <mutex>
+
+#include "epan/address.h"
+
+#include "ui/rtp_stream.h"
+#include "ui/tap-rtp-common.h"
+#include "ui/tap-rtp-analysis.h"
+
+#include <QMenu>
+#include <QTreeWidget>
+#include <QLabel>
+#include <QFile>
+#include <QCheckBox>
+#include <QHBoxLayout>
+#include <QToolButton>
+
+#include "wireshark_dialog.h"
+
+namespace Ui {
+class RtpAnalysisDialog;
+}
+
+class QCPGraph;
+class QTemporaryFile;
+class QDialogButtonBox;
+
+typedef struct {
+ rtpstream_info_t stream;
+ QVector<double> *time_vals;
+ QVector<double> *jitter_vals;
+ QVector<double> *diff_vals;
+ QVector<double> *delta_vals;
+ QTreeWidget *tree_widget;
+ QLabel *statistics_label;
+ QString *tab_name;
+ QCPGraph *jitter_graph;
+ QCPGraph *diff_graph;
+ QCPGraph *delta_graph;
+ QHBoxLayout *graphHorizontalLayout;
+ QCheckBox *stream_checkbox;
+ QCheckBox *jitter_checkbox;
+ QCheckBox *diff_checkbox;
+ QCheckBox *delta_checkbox;
+} tab_info_t;
+
+// Singleton by https://refactoring.guru/design-patterns/singleton/cpp/example#example-1
+class RtpAnalysisDialog : public WiresharkDialog
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Returns singleton
+ */
+ static RtpAnalysisDialog *openRtpAnalysisDialog(QWidget &parent, CaptureFile &cf, QObject *packet_list);
+
+ /**
+ * Should not be clonnable and assignable
+ */
+ RtpAnalysisDialog(RtpAnalysisDialog &other) = delete;
+ void operator=(const RtpAnalysisDialog &) = delete;
+
+ /**
+ * @brief Common routine to add a "Analyze" button to a QDialogButtonBox.
+ * @param button_box Caller's QDialogButtonBox.
+ * @return The new "Analyze" button.
+ */
+ static QToolButton *addAnalyzeButton(QDialogButtonBox *button_box, QDialog *dialog);
+
+ /** Replace/Add/Remove an RTP streams to analyse.
+ * Requires array of rtpstream_id_t.
+ *
+ * @param stream_ids structs with rtpstream_id
+ */
+ void replaceRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+ void addRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+ void removeRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+
+signals:
+ void goToPacket(int packet_num);
+ void rtpPlayerDialogReplaceRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+ void rtpPlayerDialogAddRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+ void rtpPlayerDialogRemoveRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+ void updateFilter(QString filter, bool force = false);
+
+public slots:
+ void rtpPlayerReplace();
+ void rtpPlayerAdd();
+ void rtpPlayerRemove();
+
+protected slots:
+ virtual void updateWidgets();
+
+protected:
+ explicit RtpAnalysisDialog(QWidget &parent, CaptureFile &cf);
+ ~RtpAnalysisDialog();
+
+private slots:
+ void on_actionGoToPacket_triggered();
+ void on_actionNextProblem_triggered();
+ void on_actionSaveOneCsv_triggered();
+ void on_actionSaveAllCsv_triggered();
+ void on_actionSaveGraph_triggered();
+ void on_buttonBox_helpRequested();
+ void showStreamMenu(QPoint pos);
+ void graphClicked(QMouseEvent *event);
+ void closeTab(int index);
+ void rowCheckboxChanged(int checked);
+ void singleCheckboxChanged(int checked);
+ void on_actionPrepareFilterOne_triggered();
+ void on_actionPrepareFilterAll_triggered();
+
+private:
+ static RtpAnalysisDialog *pinstance_;
+ static std::mutex init_mutex_;
+ static std::mutex run_mutex_;
+
+ Ui::RtpAnalysisDialog *ui;
+ enum StreamDirection { dir_all_, dir_one_ };
+ int tab_seq;
+
+ QVector<tab_info_t *> tabs_;
+ QMultiHash<guint, tab_info_t *> tab_hash_;
+
+ QToolButton *player_button_;
+
+ // Graph data for QCustomPlot
+ QList<QCPGraph *>graphs_;
+
+ QString err_str_;
+
+ QMenu stream_ctx_menu_;
+ QMenu graph_ctx_menu_;
+
+ // Tap callbacks
+ static void tapReset(void *tapinfo_ptr);
+ static tap_packet_status tapPacket(void *tapinfo_ptr, packet_info *pinfo, epan_dissect_t *, const void *rtpinfo_ptr, tap_flags_t flags);
+ static void tapDraw(void *tapinfo_ptr);
+
+ void resetStatistics();
+ void addPacket(tab_info_t *tab, packet_info *pinfo, const struct _rtp_info *rtpinfo);
+ void updateStatistics();
+ void updateGraph();
+
+ void saveCsvHeader(QFile *save_file, QTreeWidget *tree);
+ void saveCsvData(QFile *save_file, QTreeWidget *tree);
+ void saveCsv(StreamDirection direction);
+
+ bool eventFilter(QObject*, QEvent* event);
+
+ QVector<rtpstream_id_t *>getSelectedRtpIds();
+ int addTabUI(tab_info_t *new_tab);
+ tab_info_t *getTabInfoForCurrentTab();
+ void deleteTabInfo(tab_info_t *tab_info);
+ void clearLayout(QLayout *layout);
+ void addRtpStreamsPrivate(QVector<rtpstream_id_t *> stream_ids);
+};
+
+#endif // RTP_ANALYSIS_DIALOG_H