summaryrefslogtreecommitdiffstats
path: root/ui/qt/voip_calls_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/voip_calls_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/voip_calls_dialog.h')
-rw-r--r--ui/qt/voip_calls_dialog.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/ui/qt/voip_calls_dialog.h b/ui/qt/voip_calls_dialog.h
new file mode 100644
index 00000000..0386dfa7
--- /dev/null
+++ b/ui/qt/voip_calls_dialog.h
@@ -0,0 +1,144 @@
+/** @file
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef VOIP_CALLS_DIALOG_H
+#define VOIP_CALLS_DIALOG_H
+
+#include <config.h>
+
+#include <glib.h>
+#include <mutex>
+
+#include "cfile.h"
+
+#include "ui/voip_calls.h"
+#include "ui/rtp_stream.h"
+#include "ui/rtp_stream_id.h"
+
+#include <ui/qt/models/voip_calls_info_model.h>
+#include <ui/qt/models/cache_proxy_model.h>
+#include "ui/rtp_stream_id.h"
+#include "wireshark_dialog.h"
+
+#include <QMenu>
+#include <QAbstractButton>
+#include <QPushButton>
+#include <QToolButton>
+
+class SequenceInfo;
+
+namespace Ui {
+class VoipCallsDialog;
+}
+
+// Singleton by https://refactoring.guru/design-patterns/singleton/cpp/example#example-1
+class VoipCallsDialog : public WiresharkDialog
+{
+ Q_OBJECT
+
+public:
+ /**
+ * Returns singleton
+ */
+ static VoipCallsDialog *openVoipCallsDialogVoip(QWidget &parent, CaptureFile &cf, QObject *packet_list);
+ static VoipCallsDialog *openVoipCallsDialogSip(QWidget &parent, CaptureFile &cf, QObject *packet_list);
+
+ /**
+ * Should not be clonnable and assignable
+ */
+ VoipCallsDialog(VoipCallsDialog &other) = delete;
+ void operator=(const VoipCallsDialog &) = delete;
+
+signals:
+ void updateFilter(QString filter, bool force = false);
+ void captureFileChanged(capture_file *cf);
+ 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 rtpStreamsDialogSelectRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+ void rtpStreamsDialogDeselectRtpStreams(QVector<rtpstream_id_t *> stream_ids);
+
+public slots:
+ void displayFilterSuccess(bool success);
+ void rtpPlayerReplace();
+ void rtpPlayerAdd();
+ void rtpPlayerRemove();
+
+protected:
+ explicit VoipCallsDialog(QWidget &parent, CaptureFile &cf, bool all_flows = false);
+ ~VoipCallsDialog();
+
+ void contextMenuEvent(QContextMenuEvent *event);
+ virtual void removeTapListeners();
+ void captureFileClosing();
+ void captureFileClosed();
+ bool eventFilter(QObject *obj, QEvent *event);
+
+protected slots:
+ void changeEvent(QEvent* event);
+
+private:
+ // We have two singletones - one for all protocols, one for sip protocol
+ static VoipCallsDialog *pinstance_voip_;
+ static VoipCallsDialog *pinstance_sip_;
+ bool all_flows_;
+ static std::mutex init_mutex_;
+
+ Ui::VoipCallsDialog *ui;
+ VoipCallsInfoModel *call_infos_model_;
+ CacheProxyModel *cache_model_;
+ QSortFilterProxyModel *sorted_model_;
+
+ QWidget &parent_;
+ voip_calls_tapinfo_t tapinfo_;
+ SequenceInfo *sequence_info_;
+ QPushButton *prepare_button_;
+ QPushButton *sequence_button_;
+ QToolButton *player_button_;
+ QPushButton *copy_button_;
+ bool voip_calls_tap_listeners_removed_;
+ GQueue* shown_callsinfos_; /* queue with all shown calls (voip_calls_info_t) */
+
+ // Tap callbacks
+ static void tapReset(void *tapinfo_ptr);
+ static tap_packet_status tapPacket(void *tapinfo_ptr, packet_info *pinfo, epan_dissect_t *, const void *data, tap_flags_t flags);
+ static void tapDraw(void *tapinfo_ptr);
+ static gint compareCallNums(gconstpointer a, gconstpointer b);
+
+ void updateCalls();
+ void prepareFilter();
+ void showSequence();
+ void showPlayer();
+ void removeAllCalls();
+ void invertSelection();
+
+ QList<QVariant> streamRowData(int row) const;
+ QVector<rtpstream_id_t *>getSelectedRtpIds();
+
+private slots:
+ void selectAll();
+ void selectNone();
+ void copyAsCSV();
+ void copyAsYAML();
+ void switchTimeOfDay();
+ void on_callTreeView_activated(const QModelIndex &index);
+ void on_buttonBox_clicked(QAbstractButton *button);
+ void on_buttonBox_helpRequested();
+ void updateWidgets();
+ void captureEvent(CaptureEvent e);
+ void displayFilterCheckBoxToggled(bool checked);
+ void on_actionSelectAll_triggered();
+ void on_actionSelectInvert_triggered();
+ void on_actionSelectNone_triggered();
+ void on_actionSelectRtpStreams_triggered();
+ void on_actionDeselectRtpStreams_triggered();
+};
+
+#endif // VOIP_CALLS_DIALOG_H