diff options
author | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2023-01-18 18:18:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-18 18:18:36 +0100 |
commit | 1b98bec0abb61fb86180a13869434da8519bd261 (patch) | |
tree | fce6f0e35e87b1f7027d319e5645b0907e3fde94 /src/lib/protocols/stun.c | |
parent | de24206adccf2347addc05d6d62b3bf743fef411 (diff) |
LRU caches: add a generic (optional and configurable) expiration logic (#1855)
Two caches already implemented a similar mechanism: make it generic.
Diffstat (limited to 'src/lib/protocols/stun.c')
-rw-r--r-- | src/lib/protocols/stun.c | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/src/lib/protocols/stun.c b/src/lib/protocols/stun.c index 8610565ba..6792bfe8a 100644 --- a/src/lib/protocols/stun.c +++ b/src/lib/protocols/stun.c @@ -56,7 +56,7 @@ u_int32_t get_stun_lru_key(struct ndpi_flow_struct *flow, u_int8_t rev) { int stun_search_into_zoom_cache(struct ndpi_detection_module_struct *ndpi_struct, struct ndpi_flow_struct *flow) { - u_int16_t when; + u_int16_t dummy; u_int32_t key; if(ndpi_struct->stun_zoom_cache && @@ -67,15 +67,12 @@ int stun_search_into_zoom_cache(struct ndpi_detection_module_struct *ndpi_struct #endif if(ndpi_lru_find_cache(ndpi_struct->stun_zoom_cache, key, - &when, 0 /* Don't remove it as it can be used for other connections */)) { - u_int16_t tdiff = ((flow->last_packet_time_ms /1000) & 0xFFFF) - when; - + &dummy, 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow))) { #ifdef DEBUG_ZOOM_LRU - printf("[LRU ZOOM] Found, diff %d\n", tdiff); + printf("[LRU ZOOM] Found"); #endif - - if(tdiff < 60 /* sec */) - return 1; + return 1; } } return 0; @@ -102,7 +99,8 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd u_int16_t cached_proto; if(ndpi_lru_find_cache(ndpi_struct->stun_cache, key, - &cached_proto, 0 /* Don't remove it as it can be used for other connections */)) { + &cached_proto, 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow))) { #ifdef DEBUG_LRU printf("[LRU] FOUND %u / %u: no need to cache %u.%u\n", key, cached_proto, proto, app_proto); #endif @@ -114,7 +112,8 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd u_int32_t key_rev = get_stun_lru_key(flow, 1); if(ndpi_lru_find_cache(ndpi_struct->stun_cache, key_rev, - &cached_proto, 0 /* Don't remove it as it can be used for other connections */)) { + &cached_proto, 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow))) { #ifdef DEBUG_LRU printf("[LRU] FOUND %u / %u: no need to cache %u.%u\n", key_rev, cached_proto, proto, app_proto); #endif @@ -131,8 +130,8 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd ntohs(packet->udp->source), ntohs(packet->udp->dest)); #endif - ndpi_lru_add_to_cache(ndpi_struct->stun_cache, key, app_proto); - ndpi_lru_add_to_cache(ndpi_struct->stun_cache, key_rev, app_proto); + ndpi_lru_add_to_cache(ndpi_struct->stun_cache, key, app_proto, ndpi_get_current_time(flow)); + ndpi_lru_add_to_cache(ndpi_struct->stun_cache, key_rev, app_proto, ndpi_get_current_time(flow)); } } } @@ -147,7 +146,7 @@ static void ndpi_int_stun_add_connection(struct ndpi_detection_module_struct *nd printf("[LRU ZOOM] ADDING %u [src_port %u]\n", key, ntohs(flow->c_port)); #endif ndpi_lru_add_to_cache(ndpi_struct->stun_zoom_cache, key, - (flow->last_packet_time_ms / 1000) & 0xFFFF /* 16 bit */); + 0 /* dummy */, ndpi_get_current_time(flow)); } ndpi_set_detected_protocol(ndpi_struct, flow, app_proto, NDPI_PROTOCOL_STUN, confidence); @@ -234,7 +233,8 @@ static ndpi_int_stun_t ndpi_int_check_stun(struct ndpi_detection_module_struct * u_int16_t proto; u_int32_t key = get_stun_lru_key(flow, 0); int rc = ndpi_lru_find_cache(ndpi_struct->stun_cache, key, &proto, - 0 /* Don't remove it as it can be used for other connections */); + 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow)); #ifdef DEBUG_LRU printf("[LRU] Searching %u\n", key); @@ -243,7 +243,8 @@ static ndpi_int_stun_t ndpi_int_check_stun(struct ndpi_detection_module_struct * if(!rc) { key = get_stun_lru_key(flow, 1); rc = ndpi_lru_find_cache(ndpi_struct->stun_cache, key, &proto, - 0 /* Don't remove it as it can be used for other connections */); + 0 /* Don't remove it as it can be used for other connections */, + ndpi_get_current_time(flow)); #ifdef DEBUG_LRU printf("[LRU] Searching %u\n", key); |