X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=cache.h;h=7830b4fd96f1b06c11f150cebe499f4698a07c6a;hb=c78cfb1475f755c85949882e0d9d857a800348a1;hp=b4433eb9424a81fb3693528aac641845041a429b;hpb=c81c04811e98e633b0610bad2e7d2b55302022ae;p=project%2Fmdnsd.git diff --git a/cache.h b/cache.h index b4433eb..7830b4f 100644 --- a/cache.h +++ b/cache.h @@ -19,14 +19,17 @@ #include #include "dns.h" +#include "interface.h" -struct cache_entry { +struct cache_service { struct avl_node avl; const char *entry; const char *host; uint32_t ttl; time_t time; + struct interface *iface; + int refresh; }; struct cache_record { @@ -40,17 +43,21 @@ struct cache_record { const uint8_t *rdata; uint16_t rdlength; time_t time; + struct interface *iface; }; -extern struct avl_tree entries; +extern struct avl_tree services; int cache_init(void); -void cache_scan(void); -void cache_cleanup(void); +void cache_update(void); +void cache_cleanup(struct interface *iface); void cache_answer(struct interface *iface, uint8_t *base, int blen, - char *name, struct dns_answer *a, uint8_t *rdata); + char *name, struct dns_answer *a, uint8_t *rdata, int flush); int cache_host_is_known(char *record); -char *cache_lookup_name(const char *key); +static inline bool cache_service_is_host(struct cache_service *s) { + return *((char *)s->avl.key) != '_'; +} void cache_dump_records(struct blob_buf *buf, const char *name); +void cache_dump_recursive(struct blob_buf *b, const char *name, uint16_t type, struct interface *iface); #endif