summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui/gtk/flow_graph.c9
-rw-r--r--ui/gtk/lbm_uimflow_dlg.c24
-rw-r--r--ui/tap-sequence-analysis.c33
-rw-r--r--ui/tap-sequence-analysis.h10
-rw-r--r--ui/voip_calls.c30
5 files changed, 48 insertions, 58 deletions
diff --git a/ui/gtk/flow_graph.c b/ui/gtk/flow_graph.c
index 66a6ac5601..c974ef5752 100644
--- a/ui/gtk/flow_graph.c
+++ b/ui/gtk/flow_graph.c
@@ -64,10 +64,9 @@ static GtkWidget *net_src_dst_rb;
/****************************************************************************/
static void
flow_graph_data_init(void) {
- graph_analysis = (seq_analysis_info_t *)g_malloc0(sizeof(seq_analysis_info_t));
+ graph_analysis = sequence_analysis_info_new();
graph_analysis->type = SEQ_ANALYSIS_ANY;
graph_analysis->all_packets = TRUE;
- graph_analysis->items = g_queue_new();
}
@@ -77,13 +76,11 @@ flow_graph_data_init(void) {
static void
flow_graph_on_destroy(GObject *object _U_, gpointer user_data _U_)
{
- /* Clean up memory used by tap */
- sequence_analysis_list_free(graph_analysis);
-
g_assert(graph_analysis != NULL);
g_assert(graph_analysis_data != NULL);
- g_free(graph_analysis);
+ /* Clean up memory used by tap */
+ sequence_analysis_info_free(graph_analysis);
graph_analysis = NULL;
g_free(graph_analysis_data);
diff --git a/ui/gtk/lbm_uimflow_dlg.c b/ui/gtk/lbm_uimflow_dlg.c
index d766d0f7e4..a2f17ec722 100644
--- a/ui/gtk/lbm_uimflow_dlg.c
+++ b/ui/gtk/lbm_uimflow_dlg.c
@@ -60,14 +60,10 @@ static lbm_uimflow_dialog_t dialog_data = { FALSE, -1, NULL, NULL, NULL, select_
static void lbmc_uim_flow_graph_data_init(void)
{
- dialog_data.graph_analysis = (seq_analysis_info_t *)g_malloc0(sizeof(seq_analysis_info_t));
+ dialog_data.graph_analysis = sequence_analysis_info_new();
dialog_data.graph_analysis->type = SEQ_ANALYSIS_ANY;
dialog_data.graph_analysis->all_packets = TRUE;
dialog_data.graph_analysis->any_addr = TRUE;
- dialog_data.graph_analysis->nconv = 0;
- dialog_data.graph_analysis->items = g_queue_new();
- dialog_data.graph_analysis->ht = NULL;
- dialog_data.graph_analysis->num_nodes = 0;
}
static void lbmc_uim_flow_toggle_select_all_cb(GtkWidget * widget _U_, gpointer user_data _U_)
@@ -90,24 +86,10 @@ static void lbmc_uim_flow_toggle_select_displayed_cb(GtkWidget * widget _U_, gpo
static void lbmc_uim_flow_tap_reset(void * tap_data _U_)
{
- seq_analysis_item_t * graph_item;
- GList * list;
-
if (dialog_data.graph_analysis != NULL)
{
/* free the graph data items */
- list = g_queue_peek_nth_link(dialog_data.graph_analysis->items, 0);
- while (list)
- {
- graph_item = (seq_analysis_item_t *)list->data;
- g_free(graph_item->frame_label);
- g_free(graph_item->time_str);
- g_free(graph_item->comment);
- g_free(list->data);
- list = g_list_next(list);
- }
- g_queue_clear(dialog_data.graph_analysis->items);
- dialog_data.graph_analysis->nconv = 0;
+ sequence_analysis_list_free(dialog_data.graph_analysis);
}
}
@@ -310,7 +292,7 @@ static void lbmc_uim_flow_graph_on_destroy_cb(GtkWidget * widget _U_, gpointer u
g_assert(dialog_data.graph_analysis != NULL);
g_assert(dialog_data.graph_analysis_data != NULL);
- g_free(dialog_data.graph_analysis);
+ sequence_analysis_info_free(dialog_data.graph_analysis);
dialog_data.graph_analysis = NULL;
g_free(dialog_data.graph_analysis_data);
diff --git a/ui/tap-sequence-analysis.c b/ui/tap-sequence-analysis.c
index b207492f8a..abaf6f19b1 100644
--- a/ui/tap-sequence-analysis.c
+++ b/ui/tap-sequence-analysis.c
@@ -48,6 +48,27 @@
#define CONV_TIME_HEADER_LENGTH 16
#define TIME_HEADER_LENGTH 10
+seq_analysis_info_t *
+sequence_analysis_info_new(void)
+{
+ seq_analysis_info_t *sainfo = g_new0(seq_analysis_info_t, 1);
+ sainfo->items = g_queue_new();
+ sainfo->ht= g_hash_table_new(g_int_hash, g_int_equal);
+ return sainfo;
+}
+
+void sequence_analysis_info_free(seq_analysis_info_t *sainfo)
+{
+ if (!sainfo) return;
+
+ sequence_analysis_list_free(sainfo);
+
+ g_queue_free(sainfo->items);
+ g_hash_table_destroy(sainfo->ht);
+
+ g_free(sainfo);
+}
+
/****************************************************************************/
/* whenever a frame packet is seen by the tap listener */
/* Add a new frame into the graph */
@@ -246,13 +267,15 @@ sequence_analysis_list_get(capture_file *cf, seq_analysis_info_t *sainfo)
g_queue_foreach(sainfo->items, sequence_analysis_item_set_timestamp, cf->epan);
}
-
static void sequence_analysis_item_free(gpointer data)
{
seq_analysis_item_t *seq_item = (seq_analysis_item_t *)data;
g_free(seq_item->frame_label);
g_free(seq_item->time_str);
g_free(seq_item->comment);
+ g_free((void *)seq_item->src_addr.data);
+ g_free((void *)seq_item->dst_addr.data);
+ g_free(data);
}
void
@@ -263,8 +286,10 @@ sequence_analysis_list_free(seq_analysis_info_t *sainfo)
if (!sainfo) return;
/* free the graph data items */
+
#if GLIB_CHECK_VERSION (2, 32, 0)
g_queue_free_full(sainfo->items, sequence_analysis_item_free);
+ sainfo->items = g_queue_new();
#else
{
GList *list = g_queue_peek_nth_link(sainfo->items, 0);
@@ -273,12 +298,14 @@ sequence_analysis_list_free(seq_analysis_info_t *sainfo)
sequence_analysis_item_free(list->data);
list = g_list_next(list);
}
- g_queue_free(sainfo->items);
+ g_queue_clear(sainfo->items);
}
#endif
+ if (NULL != sainfo->ht) {
+ g_hash_table_remove_all(sainfo->ht);
+ }
sainfo->nconv = 0;
- sainfo->items = g_queue_new();
for (i=0; i<MAX_NUM_NODES; i++) {
sainfo->nodes[i].type = AT_NONE;
diff --git a/ui/tap-sequence-analysis.h b/ui/tap-sequence-analysis.h
index 1fedf838af..b8262f7d5b 100644
--- a/ui/tap-sequence-analysis.h
+++ b/ui/tap-sequence-analysis.h
@@ -77,6 +77,16 @@ typedef struct _seq_analysis_info {
guint32 num_nodes; /**< actual number of nodes */
} seq_analysis_info_t;
+/** Create and initialize a seq_analysis_info_t struct
+ * @return A pointer to a newly allocated seq_analysis_info_t struct.
+ */
+seq_analysis_info_t *sequence_analysis_info_new(void);
+
+/** Free a seq_analysis_info_t struct.
+ * @param sainfo A pointer to the seq_analysis_info_t struct to be freed.
+ */
+void sequence_analysis_info_free(seq_analysis_info_t * sainfo);
+
/** Fill in the segment list for sequence analysis
*
* @param cf Capture file to scan
diff --git a/ui/voip_calls.c b/ui/voip_calls.c
index ac46d404e5..5e42156025 100644
--- a/ui/voip_calls.c
+++ b/ui/voip_calls.c
@@ -267,8 +267,6 @@ void voip_calls_remove_all_tap_listeners(voip_calls_tapinfo_t *tap_id_base)
}
}
-static void graph_analysis_data_init(voip_calls_tapinfo_t *tapinfo);
-
/****************************************************************************/
/* when there is a [re]reading of packet's */
void
@@ -276,7 +274,6 @@ voip_calls_reset_all_taps(voip_calls_tapinfo_t *tapinfo)
{
voip_calls_info_t *callsinfo;
voip_rtp_stream_info_t *strinfo;
- seq_analysis_item_t *graph_item;
GList *list = NULL;
/* free the data items first */
@@ -304,25 +301,10 @@ voip_calls_reset_all_taps(voip_calls_tapinfo_t *tapinfo)
/* free the graph data items first */
if(NULL == tapinfo->graph_analysis) {
- graph_analysis_data_init(tapinfo);
+ tapinfo->graph_analysis = sequence_analysis_info_new();
}
- if (NULL != tapinfo->graph_analysis->ht) {
- g_hash_table_remove_all(tapinfo->graph_analysis->ht);
- }
- list = g_queue_peek_nth_link(tapinfo->graph_analysis->items, 0);
- while (list)
- {
- graph_item = (seq_analysis_item_t *)list->data;
- g_free(graph_item->frame_label);
- g_free(graph_item->comment);
- g_free((void *)graph_item->src_addr.data);
- g_free((void *)graph_item->dst_addr.data);
- g_free(graph_item->time_str);
- g_free(list->data);
- list = g_list_next(list);
- }
- g_queue_clear(tapinfo->graph_analysis->items);
+ sequence_analysis_list_free(tapinfo->graph_analysis);
/* free the strinfo data items first */
list = g_list_first(tapinfo->rtp_stream_list);
@@ -345,14 +327,6 @@ voip_calls_reset_all_taps(voip_calls_tapinfo_t *tapinfo)
}
/****************************************************************************/
-void
-graph_analysis_data_init(voip_calls_tapinfo_t *tapinfo) {
- tapinfo->graph_analysis = (seq_analysis_info_t *) g_new0(seq_analysis_info_t, 1);
- tapinfo->graph_analysis->items = g_queue_new();
- tapinfo->graph_analysis->ht= g_hash_table_new(g_int_hash, g_int_equal);
-}
-
-/****************************************************************************/
/* Add a new item into the graph */
static void
add_to_graph(voip_calls_tapinfo_t *tapinfo, packet_info *pinfo, epan_dissect_t *edt, const gchar *frame_label, const gchar *comment, guint16 call_num, address *src_addr, address *dst_addr, guint16 line_style)