]> git.meshlink.io Git - catta/blobdiff - cache.h
Rename flx_* to avahi_*
[catta] / cache.h
diff --git a/cache.h b/cache.h
index f2014dfd8c6a1037f90ed2190bb0f68bd1bb6b1d..de0ec9fc5bb01bc1db1d39fd47e91537dd9299b0 100644 (file)
--- a/cache.h
+++ b/cache.h
@@ -1,22 +1,66 @@
 #ifndef foocachehfoo
 #define foocachehfoo
 
+#include <glib.h>
+
+struct _AvahiCache;
+typedef struct _AvahiCache AvahiCache;
+
+#include "prioq.h"
+#include "server.h"
+#include "llist.h"
+#include "timeeventq.h"
+
 typedef enum {
-    FLX_CACHE_VALID,
-    FLX_CACHE_EXPIRY1,
-    FLX_CACHE_EXPIRY2,
-    FLX_CACHE_EXPIRY3
-        
-} flxCacheEntry;
-
-typedef struct flxCacheEntry {
+    AVAHI_CACHE_VALID,
+    AVAHI_CACHE_EXPIRY1,
+    AVAHI_CACHE_EXPIRY2,
+    AVAHI_CACHE_EXPIRY3,
+    AVAHI_CACHE_FINAL
+} AvahiCacheEntryState;
+
+typedef struct AvahiCacheEntry AvahiCacheEntry;
+
+struct AvahiCacheEntry {
+    AvahiCache *cache;
+    AvahiRecord *record;
     GTimeVal timestamp;
-    flxRecord rr;
-    gint interface;
-    flxAddress origin;
+    GTimeVal expiry;
+    
+    AvahiAddress origin;
+
+    AvahiCacheEntryState state;
+    AvahiTimeEvent *time_event;
 
-    flxCacheEntryState state;
+    AVAHI_LLIST_FIELDS(AvahiCacheEntry, by_key);
+    AVAHI_LLIST_FIELDS(AvahiCacheEntry, entry);
+};
+
+struct _AvahiCache {
+    AvahiServer *server;
+    
+    AvahiInterface *interface;
     
-} flxCacheEntry;
+    GHashTable *hash_table;
+
+    AVAHI_LLIST_HEAD(AvahiCacheEntry, entries);
+};
+
+AvahiCache *avahi_cache_new(AvahiServer *server, AvahiInterface *interface);
+void avahi_cache_free(AvahiCache *c);
+
+AvahiCacheEntry *avahi_cache_lookup_key(AvahiCache *c, AvahiKey *k);
+AvahiCacheEntry *avahi_cache_lookup_record(AvahiCache *c, AvahiRecord *r);
+
+void avahi_cache_update(AvahiCache *c, AvahiRecord *r, gboolean unique, const AvahiAddress *a);
+
+void avahi_cache_drop_record(AvahiCache *c,  AvahiRecord *r);
+
+void avahi_cache_dump(AvahiCache *c, FILE *f);
+
+typedef gpointer AvahiCacheWalkCallback(AvahiCache *c, AvahiKey *pattern, AvahiCacheEntry *e, gpointer userdata);
+gpointer avahi_cache_walk(AvahiCache *c, AvahiKey *pattern, AvahiCacheWalkCallback cb, gpointer userdata);
+
+gboolean avahi_cache_entry_half_ttl(AvahiCache *c, AvahiCacheEntry *e);
 
 #endif