Wireshark  4.3.0
The Wireshark network protocol analyzer
voip_calls_dialog.h
Go to the documentation of this file.
1 
10 #ifndef VOIP_CALLS_DIALOG_H
11 #define VOIP_CALLS_DIALOG_H
12 
13 #include <config.h>
14 
15 #include <glib.h>
16 #include <mutex>
17 
18 #include "cfile.h"
19 
20 #include "ui/voip_calls.h"
21 #include "ui/rtp_stream.h"
22 #include "ui/rtp_stream_id.h"
23 
26 #include "ui/rtp_stream_id.h"
27 #include "wireshark_dialog.h"
28 
29 #include <QMenu>
30 #include <QAbstractButton>
31 #include <QPushButton>
32 #include <QToolButton>
33 
34 class SequenceInfo;
35 
36 namespace Ui {
37 class VoipCallsDialog;
38 }
39 
40 // Singleton by https://refactoring.guru/design-patterns/singleton/cpp/example#example-1
42 {
43  Q_OBJECT
44 
45 public:
49  static VoipCallsDialog *openVoipCallsDialogVoip(QWidget &parent, CaptureFile &cf, QObject *packet_list);
50  static VoipCallsDialog *openVoipCallsDialogSip(QWidget &parent, CaptureFile &cf, QObject *packet_list);
51 
55  VoipCallsDialog(VoipCallsDialog &other) = delete;
56  void operator=(const VoipCallsDialog &) = delete;
57 
58 signals:
59  void updateFilter(QString filter, bool force = false);
60  void captureFileChanged(capture_file *cf);
61  void goToPacket(int packet_num);
62  void rtpPlayerDialogReplaceRtpStreams(QVector<rtpstream_id_t *> stream_ids);
63  void rtpPlayerDialogAddRtpStreams(QVector<rtpstream_id_t *> stream_ids);
64  void rtpPlayerDialogRemoveRtpStreams(QVector<rtpstream_id_t *> stream_ids);
65  void rtpStreamsDialogSelectRtpStreams(QVector<rtpstream_id_t *> stream_ids);
66  void rtpStreamsDialogDeselectRtpStreams(QVector<rtpstream_id_t *> stream_ids);
67 
68 public slots:
69  void displayFilterSuccess(bool success);
70  void rtpPlayerReplace();
71  void rtpPlayerAdd();
72  void rtpPlayerRemove();
73 
74 protected:
75  explicit VoipCallsDialog(QWidget &parent, CaptureFile &cf, bool all_flows = false);
76  ~VoipCallsDialog();
77 
78  void contextMenuEvent(QContextMenuEvent *event);
79  virtual void removeTapListeners();
80  void captureFileClosing();
81  void captureFileClosed();
82  bool eventFilter(QObject *obj, QEvent *event);
83 
84 protected slots:
85  void changeEvent(QEvent* event);
86 
87 private:
88  // We have two singletones - one for all protocols, one for sip protocol
89  static VoipCallsDialog *pinstance_voip_;
90  static VoipCallsDialog *pinstance_sip_;
91  bool all_flows_;
92  static std::mutex init_mutex_;
93 
94  Ui::VoipCallsDialog *ui;
95  VoipCallsInfoModel *call_infos_model_;
96  CacheProxyModel *cache_model_;
97  QSortFilterProxyModel *sorted_model_;
98 
99  QWidget &parent_;
100  voip_calls_tapinfo_t tapinfo_;
101  SequenceInfo *sequence_info_;
102  QPushButton *prepare_button_;
103  QPushButton *sequence_button_;
104  QToolButton *player_button_;
105  QPushButton *copy_button_;
106  bool voip_calls_tap_listeners_removed_;
107  GQueue* shown_callsinfos_; /* queue with all shown calls (voip_calls_info_t) */
108 
109  // Tap callbacks
110  static void tapReset(void *tapinfo_ptr);
111  static tap_packet_status tapPacket(void *tapinfo_ptr, packet_info *pinfo, epan_dissect_t *, const void *data, tap_flags_t flags);
112  static void tapDraw(void *tapinfo_ptr);
113  static gint compareCallNums(gconstpointer a, gconstpointer b);
114 
115  void updateCalls();
116  void prepareFilter();
117  void showSequence();
118  void showPlayer();
119  void removeAllCalls();
120  void invertSelection();
121 
122  QList<QVariant> streamRowData(int row) const;
123  QVector<rtpstream_id_t *>getSelectedRtpIds();
124 
125 private slots:
126  void selectAll();
127  void selectNone();
128  void copyAsCSV();
129  void copyAsYAML();
130  void switchTimeOfDay();
131  void on_callTreeView_activated(const QModelIndex &index);
132  void on_buttonBox_clicked(QAbstractButton *button);
133  void on_buttonBox_helpRequested();
134  void updateWidgets();
135  void captureEvent(CaptureEvent e);
136  void displayFilterCheckBoxToggled(bool checked);
137  void on_actionSelectAll_triggered();
138  void on_actionSelectInvert_triggered();
139  void on_actionSelectNone_triggered();
140  void on_actionSelectRtpStreams_triggered();
141  void on_actionDeselectRtpStreams_triggered();
142 };
143 
144 #endif // VOIP_CALLS_DIALOG_H
Definition: cache_proxy_model.h:26
Definition: capture_event.h:20
Definition: capture_file.h:23
Definition: sequence_dialog.h:35
Definition: voip_calls_dialog.h:42
static VoipCallsDialog * openVoipCallsDialogVoip(QWidget &parent, CaptureFile &cf, QObject *packet_list)
Definition: voip_calls_dialog.cpp:50
void captureFileClosing()
Called when the capture file is about to close. This can be used to disconnect taps and similar actio...
Definition: voip_calls_dialog.cpp:237
VoipCallsDialog(VoipCallsDialog &other)=delete
void captureFileClosed()
Called when the capture file was closed. This can be used to enable or disable widgets according to t...
Definition: voip_calls_dialog.cpp:251
virtual void removeTapListeners()
Remove all tap listeners registered via registerTapListener.
Definition: voip_calls_dialog.cpp:228
Definition: voip_calls_info_model.h:23
Definition: wireshark_dialog.h:35
Definition: cfile.h:67
Definition: packet_info.h:44
Definition: voip_calls.h:173
Definition: epan_dissect.h:28
tap_packet_status
Definition: tap.h:25