diff options
Diffstat (limited to 'epan/capture_dissectors.c')
-rw-r--r-- | epan/capture_dissectors.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/epan/capture_dissectors.c b/epan/capture_dissectors.c index a68d76f4cb..1692533682 100644 --- a/epan/capture_dissectors.c +++ b/epan/capture_dissectors.c @@ -39,6 +39,11 @@ struct capture_dissector_handle protocol_t* protocol; }; +typedef struct capture_dissector_count +{ + guint32 count; +} capture_dissector_count_t; + static GHashTable *capture_dissector_tables = NULL; static void @@ -116,6 +121,28 @@ gboolean try_capture_dissector(const char* name, const guint32 pattern, const gu return handle->dissector(pd, offset, len, cpinfo, pseudo_header); } +guint32 capture_dissector_get_count(packet_counts* counts, const int proto) +{ + capture_dissector_count_t* hash_count = (capture_dissector_count_t*)g_hash_table_lookup(counts->counts_hash, GUINT_TO_POINTER(proto)); + if (hash_count == NULL) + return 0; + + return hash_count->count; +} + +void capture_dissector_increment_count(capture_packet_info_t *cpinfo, const int proto) +{ + /* See if we already have a counter for the protocol */ + capture_dissector_count_t* hash_count = (capture_dissector_count_t*)g_hash_table_lookup(cpinfo->counts, GUINT_TO_POINTER(proto)); + if (hash_count == NULL) + { + hash_count = g_new0(capture_dissector_count_t, 1); + g_hash_table_insert(cpinfo->counts, GUINT_TO_POINTER(proto), (gpointer)hash_count); + } + + hash_count->count++; +} + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * |