aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorJirka Novak <j.novak@netsystem.cz>2020-12-13 13:04:11 +0000
committerPascal Quantin <pascal@wireshark.org>2020-12-29 19:36:52 +0000
commit0985a2ef2a594577c0919c05b9cd57dcbea51228 (patch)
treec6f725fa57b0b017ccf07f35c3f2cf3e9d23757e /ui
parent89f62ccec2cd3d78d8e92156e038d8b42057dbb4 (diff)
VoIP: VoIP calls statistics are cleared when retap is issued
Every press of Play Stream or Prepare Filter caused incorrect increasing of Packets count and added Comments. The reason was that callinfo statistics were not clear before recap therefore all new values were added to exiting ones. Patch solves it. (cherry picked from commit ff3fffcf5cc6a72ff6e37354cf5abafe0987fec0)
Diffstat (limited to 'ui')
-rw-r--r--ui/qt/models/voip_calls_info_model.cpp7
-rw-r--r--ui/qt/models/voip_calls_info_model.h1
-rw-r--r--ui/qt/voip_calls_dialog.cpp12
-rw-r--r--ui/qt/voip_calls_dialog.h2
-rw-r--r--ui/voip_calls.c3
5 files changed, 20 insertions, 5 deletions
diff --git a/ui/qt/models/voip_calls_info_model.cpp b/ui/qt/models/voip_calls_info_model.cpp
index c3caebc9f3..5baed965e3 100644
--- a/ui/qt/models/voip_calls_info_model.cpp
+++ b/ui/qt/models/voip_calls_info_model.cpp
@@ -198,6 +198,13 @@ void VoipCallsInfoModel::updateCalls(GQueue *callsinfos)
}
}
+void VoipCallsInfoModel::removeAllCalls()
+{
+ beginRemoveRows(QModelIndex(), 0, rowCount() - 1);
+ callinfos_.clear();
+ endRemoveRows();
+}
+
// Proxy model that allows columns to be sorted.
VoipCallsInfoSortedModel::VoipCallsInfoSortedModel(QObject *parent) :
diff --git a/ui/qt/models/voip_calls_info_model.h b/ui/qt/models/voip_calls_info_model.h
index 3f8931d380..dc833b2c1e 100644
--- a/ui/qt/models/voip_calls_info_model.h
+++ b/ui/qt/models/voip_calls_info_model.h
@@ -33,6 +33,7 @@ public:
void setTimeOfDay(bool timeOfDay);
bool timeOfDay() const;
void updateCalls(GQueue *callsinfos);
+ void removeAllCalls();
static voip_calls_info_t *indexToCallInfo(const QModelIndex &index);
diff --git a/ui/qt/voip_calls_dialog.cpp b/ui/qt/voip_calls_dialog.cpp
index 051cfda3be..29008ddc34 100644
--- a/ui/qt/voip_calls_dialog.cpp
+++ b/ui/qt/voip_calls_dialog.cpp
@@ -81,6 +81,7 @@ VoipCallsDialog::VoipCallsDialog(QWidget &parent, CaptureFile &cf, bool all_flow
memset (&tapinfo_, 0, sizeof(tapinfo_));
tapinfo_.tap_packet = tapPacket;
+ tapinfo_.tap_reset = tapReset;
tapinfo_.tap_draw = tapDraw;
tapinfo_.tap_data = this;
tapinfo_.callsinfos = g_queue_new();
@@ -176,10 +177,13 @@ void VoipCallsDialog::changeEvent(QEvent *event)
QDialog::changeEvent(event);
}
-//void VoipCallsDialog::tapReset(void *)
-//{
-// voip_calls_tapinfo_t *tapinfo = (voip_calls_tapinfo_t *) tapinfo_ptr;
-//}
+void VoipCallsDialog::tapReset(void *tapinfo_ptr)
+{
+ voip_calls_tapinfo_t *tapinfo = static_cast<voip_calls_tapinfo_t *>(tapinfo_ptr);
+ VoipCallsDialog *voip_calls_dialog = static_cast<VoipCallsDialog *>(tapinfo->tap_data);
+ voip_calls_dialog->call_infos_model_->removeAllCalls();
+ voip_calls_reset_all_taps(tapinfo);
+}
tap_packet_status VoipCallsDialog::tapPacket(void *, packet_info *, epan_dissect_t *, const void *)
{
diff --git a/ui/qt/voip_calls_dialog.h b/ui/qt/voip_calls_dialog.h
index f1bf5c5efb..e28a46b6b0 100644
--- a/ui/qt/voip_calls_dialog.h
+++ b/ui/qt/voip_calls_dialog.h
@@ -68,7 +68,7 @@ private:
bool voip_calls_tap_listeners_removed_;
// Tap callbacks
-// static void tapReset(void *tapinfo_ptr);
+ static void tapReset(void *tapinfo_ptr);
static tap_packet_status tapPacket(void *tapinfo_ptr, packet_info *pinfo, epan_dissect_t *, const void *data);
static void tapDraw(void *tapinfo_ptr);
diff --git a/ui/voip_calls.c b/ui/voip_calls.c
index 8613411035..c52548a95d 100644
--- a/ui/voip_calls.c
+++ b/ui/voip_calls.c
@@ -286,7 +286,10 @@ voip_calls_reset_all_taps(voip_calls_tapinfo_t *tapinfo)
g_queue_clear(tapinfo->callsinfos);
/* free the SIP_HASH */
if(NULL!=tapinfo->callsinfo_hashtable[SIP_HASH])
+ {
g_hash_table_remove_all (tapinfo->callsinfo_hashtable[SIP_HASH]);
+ tapinfo->callsinfo_hashtable[SIP_HASH] = NULL;
+ }
/* free the strinfo data items first */
list = g_list_first(tapinfo->rtpstream_list);