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);