Lines Matching refs:cache

13 static void dns_cache_clean(struct dns_cache const *cache);
15 int dns_cache_flush(struct dns_cache *cache) in dns_cache_flush() argument
17 k_mutex_lock(cache->lock, K_FOREVER); in dns_cache_flush()
18 for (size_t i = 0; i < cache->size; i++) { in dns_cache_flush()
19 cache->entries[i].in_use = false; in dns_cache_flush()
21 k_mutex_unlock(cache->lock); in dns_cache_flush()
26 int dns_cache_add(struct dns_cache *cache, char const *query, struct dns_addrinfo const *addrinfo, in dns_cache_add() argument
33 if (cache == NULL || query == NULL || addrinfo == NULL || ttl == 0) { in dns_cache_add()
44 k_mutex_lock(cache->lock, K_FOREVER); in dns_cache_add()
48 dns_cache_clean(cache); in dns_cache_add()
50 for (size_t i = 0; i < cache->size; i++) { in dns_cache_add()
51 if (!cache->entries[i].in_use) { in dns_cache_add()
55 } else if (sys_timepoint_cmp(closest_to_expiry, cache->entries[i].expiry) > 0) { in dns_cache_add()
57 closest_to_expiry = cache->entries[i].expiry; in dns_cache_add()
62 NET_DBG("Overwrite \"%s\"", cache->entries[index_to_replace].query); in dns_cache_add()
65 strncpy(cache->entries[index_to_replace].query, query, in dns_cache_add()
67 cache->entries[index_to_replace].data = *addrinfo; in dns_cache_add()
68 cache->entries[index_to_replace].expiry = sys_timepoint_calc(K_SECONDS(ttl)); in dns_cache_add()
69 cache->entries[index_to_replace].in_use = true; in dns_cache_add()
71 k_mutex_unlock(cache->lock); in dns_cache_add()
76 int dns_cache_remove(struct dns_cache *cache, char const *query) in dns_cache_remove() argument
78 if (cache == NULL || query == NULL) { in dns_cache_remove()
90 k_mutex_lock(cache->lock, K_FOREVER); in dns_cache_remove()
92 dns_cache_clean(cache); in dns_cache_remove()
94 for (size_t i = 0; i < cache->size; i++) { in dns_cache_remove()
95 if (cache->entries[i].in_use && strcmp(cache->entries[i].query, query) == 0) { in dns_cache_remove()
96 cache->entries[i].in_use = false; in dns_cache_remove()
100 k_mutex_unlock(cache->lock); in dns_cache_remove()
105 int dns_cache_find(struct dns_cache const *cache, const char *query, enum dns_query_type type, in dns_cache_find() argument
112 if (cache == NULL || query == NULL || addrinfo == NULL || addrinfo_array_len <= 0) { in dns_cache_find()
129 k_mutex_lock(cache->lock, K_FOREVER); in dns_cache_find()
131 dns_cache_clean(cache); in dns_cache_find()
133 for (size_t i = 0; i < cache->size; i++) { in dns_cache_find()
134 if (!cache->entries[i].in_use) { in dns_cache_find()
137 if (strcmp(cache->entries[i].query, query) != 0) { in dns_cache_find()
140 if (cache->entries[i].data.ai_family != family) { in dns_cache_find()
147 addrinfo[found] = cache->entries[i].data; in dns_cache_find()
153 k_mutex_unlock(cache->lock); in dns_cache_find()
166 static void dns_cache_clean(struct dns_cache const *cache) in dns_cache_clean() argument
168 for (size_t i = 0; i < cache->size; i++) { in dns_cache_clean()
169 if (!cache->entries[i].in_use) { in dns_cache_clean()
173 if (sys_timepoint_expired(cache->entries[i].expiry)) { in dns_cache_clean()
174 NET_DBG("Remove \"%s\"", cache->entries[i].query); in dns_cache_clean()
175 cache->entries[i].in_use = false; in dns_cache_clean()