From 0985a2ef2a594577c0919c05b9cd57dcbea51228 Mon Sep 17 00:00:00 2001 From: Jirka Novak Date: Sun, 13 Dec 2020 13:04:11 +0000 Subject: 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) --- ui/qt/models/voip_calls_info_model.cpp | 7 +++++++ ui/qt/models/voip_calls_info_model.h | 1 + ui/qt/voip_calls_dialog.cpp | 12 ++++++++---- ui/qt/voip_calls_dialog.h | 2 +- ui/voip_calls.c | 3 +++ 5 files changed, 20 insertions(+), 5 deletions(-) (limited to 'ui') 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(tapinfo_ptr); + VoipCallsDialog *voip_calls_dialog = static_cast(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); -- cgit v1.2.3