diff options
author | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2023-09-12 19:47:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-12 19:47:14 +0200 |
commit | c5cd4df0568de8b01baa7294a0fc12964bee4272 (patch) | |
tree | c40c33d6545d08917198d3245bbbc3239114d0e9 | |
parent | 5bcf3c2dddf1f4373994d6ee06b9ff468eb72a60 (diff) |
Add `ndpi_domain_classify_finalize()` function (#2084)
The "domain classify" data structure is immutable, since it uses
"bitmap64".
Allow to finalize it before starting to process packets (i.e. before
calling `ndpi_domain_classify_contains()`) to avoid, in the data-path,
all the memory allocations due to compression.
Calling `ndpi_domain_classify_finalize()` is optional.
-rw-r--r-- | src/include/ndpi_api.h | 1 | ||||
-rw-r--r-- | src/lib/ndpi_domain_classify.c | 16 | ||||
-rw-r--r-- | src/lib/ndpi_main.c | 1 |
3 files changed, 18 insertions, 0 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 9189a3a95..8de858188 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -2104,6 +2104,7 @@ extern "C" { u_int32_t ndpi_domain_classify_add_domains(ndpi_domain_classify *s, u_int8_t class_id, char *file_path); + bool ndpi_domain_classify_finalize(ndpi_domain_classify *s); bool ndpi_domain_classify_contains(ndpi_domain_classify *s, u_int8_t *class_id /* out */, const char *domain); diff --git a/src/lib/ndpi_domain_classify.c b/src/lib/ndpi_domain_classify.c index b56101a7e..c475c46f9 100644 --- a/src/lib/ndpi_domain_classify.c +++ b/src/lib/ndpi_domain_classify.c @@ -179,6 +179,22 @@ u_int32_t ndpi_domain_classify_add_domains(ndpi_domain_classify *s, /* ********************************************************** */ +bool ndpi_domain_classify_finalize(ndpi_domain_classify *s) { + u_int32_t i; + + if(!s) + return(false); + + for(i=0; i<MAX_NUM_NDPI_DOMAIN_CLASSIFICATIONS; i++) { + if(s->classes[i].class_id != 0) { + ndpi_bitmap64_compress(s->classes[i].domains); + } + } + return(true); +} + +/* ********************************************************** */ + static bool is_valid_domain_char(u_char c) { if(((c >= 'A')&& (c <= 'Z')) || ((c >= 'a')&& (c <= 'z')) diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index c2a5b2f2f..6cbbcf252 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -6959,6 +6959,7 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str) } #else ndpi_domain_classify_free(ndpi_str->custom_categories.sc_hostnames); + ndpi_domain_classify_finalize(ndpi_str->custom_categories.sc_hostnames_shadow); ndpi_str->custom_categories.sc_hostnames = ndpi_str->custom_categories.sc_hostnames_shadow; ndpi_str->custom_categories.sc_hostnames_shadow = ndpi_domain_classify_alloc(); #endif |