diff options
-rw-r--r-- | example/ndpiReader.c | 14 | ||||
-rw-r--r-- | src/lib/ndpi_domain_classify.c | 16 |
2 files changed, 22 insertions, 8 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c index 65c07d2bc..bd5f989b1 100644 --- a/example/ndpiReader.c +++ b/example/ndpiReader.c @@ -5473,6 +5473,19 @@ void domainSearchUnitTest() { /* *********************************************** */ +void domainSearchUnitTest2() { + ndpi_domain_classify *c = ndpi_domain_classify_alloc(); + u_int16_t class_id = 9; + + ndpi_domain_classify_add(c, class_id, "ntop.org"); + ndpi_domain_classify_add(c, class_id, "apple.com"); + + assert(ndpi_domain_classify_contains(c,"ntop.com") == 0); + ndpi_domain_classify_free(c); +} + +/* *********************************************** */ + /** @brief MAIN FUNCTION **/ @@ -5513,6 +5526,7 @@ int main(int argc, char **argv) { #endif domainSearchUnitTest(); + domainSearchUnitTest2(); sketchUnitTest(); linearUnitTest(); zscoreUnitTest(); diff --git a/src/lib/ndpi_domain_classify.c b/src/lib/ndpi_domain_classify.c index b0cf06d72..f0e6ff7cb 100644 --- a/src/lib/ndpi_domain_classify.c +++ b/src/lib/ndpi_domain_classify.c @@ -104,7 +104,7 @@ static u_int32_t ndpi_domain_search_size(ndpi_domain_search *search) { /* NOTE: domain will be modified: copy it if necessary */ static bool ndpi_domain_search_add(ndpi_domain_search *search, char *domain) { char *elem; - u_int32_t bitmap_id = 0, len; + u_int32_t bitmap_id = 0, len, hsum = 0; bool quit = false; if(domain == NULL) return(false); @@ -133,9 +133,9 @@ static bool ndpi_domain_search_add(ndpi_domain_search *search, char *domain) { h += END_OF_TOKENS_DELIMITER; } - ndpi_bitmap_set(search->bitmap[bitmap_id], h); + ndpi_bitmap_set(search->bitmap[bitmap_id], h + hsum); - bitmap_id++; + bitmap_id++, hsum += h; if(quit) break; @@ -158,7 +158,7 @@ static bool ndpi_domain_search_add(ndpi_domain_search *search, char *domain) { static bool ndpi_domain_search_contains(ndpi_domain_search *search, char *domain) { char *elem; - u_int32_t bitmap_id = 0; + u_int32_t bitmap_id = 0, hsum = 0; bool quit = false; if((elem = strrchr(domain, '.')) == NULL) @@ -171,16 +171,16 @@ static bool ndpi_domain_search_contains(ndpi_domain_search *search, char *domain h = ndpi_hash_string(elem); - if(!ndpi_bitmap_isset(search->bitmap[bitmap_id], h)) { + if(!ndpi_bitmap_isset(search->bitmap[bitmap_id], h + hsum)) { /* Exact match does not work, so let's see if a partial match works instead */ /* We're adding the beginning of the domain, hence the last token before quitting */ h += END_OF_TOKENS_DELIMITER; - return(ndpi_bitmap_isset(search->bitmap[bitmap_id], h)); + return(ndpi_bitmap_isset(search->bitmap[bitmap_id], h + hsum)); } - bitmap_id++; + bitmap_id++, hsum += h; if(quit) break; @@ -306,7 +306,7 @@ u_int32_t ndpi_domain_classify_add_domains(ndpi_domain_classify *_s, return(false); s->class[i]->class_id = class_id; - s->class[i]->domains = ndpi_domain_search_alloc(); + s->class[i]->domains = ndpi_domain_search_alloc(); break; } } |