aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/cli/tap-rtp.c2
-rw-r--r--ui/gtk/rtp_stream_dlg.c14
-rw-r--r--ui/qt/rtp_stream_dialog.cpp10
-rw-r--r--ui/qt/rtp_stream_dialog.h1
-rw-r--r--ui/rtp_stream.h2
-rw-r--r--ui/tap-rtp-common.c7
6 files changed, 32 insertions, 4 deletions
diff --git a/ui/cli/tap-rtp.c b/ui/cli/tap-rtp.c
index eee1f13e9e..98190a0632 100644
--- a/ui/cli/tap-rtp.c
+++ b/ui/cli/tap-rtp.c
@@ -51,7 +51,7 @@ void register_tap_listener_rtp_streams(void);
/* The one and only global rtpstream_tapinfo_t structure for tshark and wireshark.
*/
static rtpstream_tapinfo_t the_tapinfo_struct =
- {NULL, NULL, NULL, 0, NULL, 0, TAP_ANALYSE, NULL, NULL, NULL, FALSE};
+ {NULL, NULL, NULL, NULL, 0, NULL, 0, TAP_ANALYSE, NULL, NULL, NULL, FALSE};
static void
rtp_streams_stat_draw(void *arg _U_)
diff --git a/ui/gtk/rtp_stream_dlg.c b/ui/gtk/rtp_stream_dlg.c
index 8916eed598..d3dce19fb5 100644
--- a/ui/gtk/rtp_stream_dlg.c
+++ b/ui/gtk/rtp_stream_dlg.c
@@ -51,6 +51,7 @@ static const gchar FWD_LABEL_TEXT[] = "Select a forward stream with left mouse b
static const gchar FWD_ONLY_LABEL_TEXT[] = "Select a forward stream with Ctrl + left mouse button";
static const gchar REV_LABEL_TEXT[] = "Select a reverse stream with Ctrl + left mouse button";
+static void rtpstream_tap_reset(rtpstream_tapinfo_t *ti_ptr);
static void rtpstream_tap_draw(rtpstream_tapinfo_t *ti_ptr);
static void rtpstream_dlg_mark_packet(rtpstream_tapinfo_t *tapinfo, frame_data *fd);
void register_tap_listener_rtp_stream_dlg(void);
@@ -58,8 +59,8 @@ void register_tap_listener_rtp_stream_dlg(void);
/* The one and only global rtpstream_tapinfo_t structure for tshark and wireshark.
*/
static rtpstream_tapinfo_t the_tapinfo_struct =
- { rtpstream_tap_draw, rtpstream_dlg_mark_packet, NULL, 0, NULL, 0,
- TAP_ANALYSE, NULL, NULL, NULL, FALSE
+ { rtpstream_tap_reset, rtpstream_tap_draw, rtpstream_dlg_mark_packet,
+ NULL, 0, NULL, 0, TAP_ANALYSE, NULL, NULL, NULL, FALSE
};
/****************************************************************************/
@@ -1105,6 +1106,15 @@ rtpstream_dlg_update(GList *list_lcl)
}
static void
+rtpstream_tap_reset(rtpstream_tapinfo_t *tapinfo _U_)
+{
+ if (rtp_stream_dlg != NULL) {
+ gtk_list_store_clear(list_store);
+ streams_nb = 0;
+ }
+}
+
+static void
rtpstream_tap_draw(rtpstream_tapinfo_t *tapinfo)
{
if (tapinfo) {
diff --git a/ui/qt/rtp_stream_dialog.cpp b/ui/qt/rtp_stream_dialog.cpp
index 52f96008b0..fa77c8e864 100644
--- a/ui/qt/rtp_stream_dialog.cpp
+++ b/ui/qt/rtp_stream_dialog.cpp
@@ -265,6 +265,7 @@ RtpStreamDialog::RtpStreamDialog(QWidget &parent, CaptureFile &cf) :
/* Register the tap listener */
memset(&tapinfo_, 0, sizeof(rtpstream_tapinfo_t));
+ tapinfo_.tap_reset = tapReset;
tapinfo_.tap_draw = tapDraw;
tapinfo_.tap_mark_packet = tapMarkPacket;
tapinfo_.tap_data = this;
@@ -314,6 +315,15 @@ bool RtpStreamDialog::eventFilter(QObject *, QEvent *event)
return false;
}
+void RtpStreamDialog::tapReset(rtpstream_tapinfo_t *tapinfo)
+{
+ RtpStreamDialog *rtp_stream_dialog = dynamic_cast<RtpStreamDialog *>((RtpStreamDialog *)tapinfo->tap_data);
+ if (rtp_stream_dialog) {
+ /* invalidate items which refer to old strinfo_list items. */
+ rtp_stream_dialog->ui->streamTreeWidget->clear();
+ }
+}
+
void RtpStreamDialog::tapDraw(rtpstream_tapinfo_t *tapinfo)
{
RtpStreamDialog *rtp_stream_dialog = dynamic_cast<RtpStreamDialog *>((RtpStreamDialog *)tapinfo->tap_data);
diff --git a/ui/qt/rtp_stream_dialog.h b/ui/qt/rtp_stream_dialog.h
index 8005a818ba..953d2e319c 100644
--- a/ui/qt/rtp_stream_dialog.h
+++ b/ui/qt/rtp_stream_dialog.h
@@ -63,6 +63,7 @@ private:
QMenu ctx_menu_;
bool need_redraw_;
+ static void tapReset(rtpstream_tapinfo_t *tapinfo);
static void tapDraw(rtpstream_tapinfo_t *tapinfo);
static void tapMarkPacket(rtpstream_tapinfo_t *tapinfo, frame_data *fd);
diff --git a/ui/rtp_stream.h b/ui/rtp_stream.h
index 358ec17890..d5c85b9f96 100644
--- a/ui/rtp_stream.h
+++ b/ui/rtp_stream.h
@@ -89,12 +89,14 @@ typedef enum
typedef struct _rtpstream_tapinfo rtpstream_tapinfo_t;
+typedef void (*rtpstream_tap_reset_cb)(rtpstream_tapinfo_t *tapinfo);
typedef void (*rtpstream_tap_draw_cb)(rtpstream_tapinfo_t *tapinfo);
typedef void (*tap_mark_packet_cb)(rtpstream_tapinfo_t *tapinfo, frame_data *fd);
/* structure that holds the information about all detected streams */
/** struct holding all information of the tap */
struct _rtpstream_tapinfo {
+ rtpstream_tap_reset_cb tap_reset; /**< tap reset callback */
rtpstream_tap_draw_cb tap_draw; /**< tap draw callback */
tap_mark_packet_cb tap_mark_packet; /**< packet marking callback */
void *tap_data; /**< data for tap callbacks */
diff --git a/ui/tap-rtp-common.c b/ui/tap-rtp-common.c
index f8d1e22280..f4a5b1aea3 100644
--- a/ui/tap-rtp-common.c
+++ b/ui/tap-rtp-common.c
@@ -101,7 +101,12 @@ void rtpstream_reset(rtpstream_tapinfo_t *tapinfo)
void rtpstream_reset_cb(void *arg)
{
- rtpstream_reset((rtpstream_tapinfo_t *)arg);
+ rtpstream_tapinfo_t *ti =(rtpstream_tapinfo_t *)arg;
+ if (ti->tap_reset) {
+ /* Give listeners a chance to cleanup references. */
+ ti->tap_reset(ti);
+ }
+ rtpstream_reset(ti);
}
/*