aboutsummaryrefslogtreecommitdiffstats
path: root/ui/tap-sequence-analysis.c
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2014-11-24 14:51:13 -0600
committerGerald Combs <gerald@wireshark.org>2014-11-26 00:04:05 +0000
commit2ebaa59a3b195c30b1b3aa746c266ee6159fe6f7 (patch)
tree977b20e058e48d23571aa1576d8ef0a8935be118 /ui/tap-sequence-analysis.c
parent5b360a96716eb9aadb91096108c23c047d7bcb70 (diff)
Consolidate sequence analysis code.
Move scattered code for seq_analysis_info_t creation and destruction to tap-sequence-analysis.[ch]. Change-Id: I87c14b1c83105a48d0ab149a3abba71e2a2fe21f Reviewed-on: https://code.wireshark.org/review/5479 Petri-Dish: Gerald Combs <gerald@wireshark.org> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'ui/tap-sequence-analysis.c')
-rw-r--r--ui/tap-sequence-analysis.c33
1 files changed, 30 insertions, 3 deletions
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;