diff options
Diffstat (limited to 'avahi-core/wide-area.h')
-rw-r--r-- | avahi-core/wide-area.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/avahi-core/wide-area.h b/avahi-core/wide-area.h index b41d6b7..3702277 100644 --- a/avahi-core/wide-area.h +++ b/avahi-core/wide-area.h @@ -35,6 +35,67 @@ typedef void (*AvahiWideAreaLookupCallback)( AvahiRecord *r, void *userdata); +typedef struct AvahiWideAreaCacheEntry AvahiWideAreaCacheEntry; + +struct AvahiWideAreaCacheEntry { + AvahiWideAreaLookupEngine *engine; + + AvahiRecord *record; + struct timeval timestamp; + struct timeval expiry; + + AvahiTimeEvent *time_event; + + AVAHI_LLIST_FIELDS(AvahiWideAreaCacheEntry, by_key); + AVAHI_LLIST_FIELDS(AvahiWideAreaCacheEntry, cache); +}; + +struct AvahiWideAreaLookup { + AvahiWideAreaLookupEngine *engine; + int dead; + + uint32_t id; /* effectively just an uint16_t, but we need it as an index for a hash table */ + AvahiTimeEvent *time_event; + + AvahiKey *key, *cname_key; + + int n_send; + AvahiDnsPacket *packet; + + AvahiWideAreaLookupCallback callback; + void *userdata; + + AvahiAddress dns_server_used; + + AVAHI_LLIST_FIELDS(AvahiWideAreaLookup, lookups); + AVAHI_LLIST_FIELDS(AvahiWideAreaLookup, by_key); +}; + +struct AvahiWideAreaLookupEngine { + AvahiServer *server; + + int fd_ipv4, fd_ipv6; + AvahiWatch *watch_ipv4, *watch_ipv6; + + uint16_t next_id; + + /* Cache */ + AVAHI_LLIST_HEAD(AvahiWideAreaCacheEntry, cache); + AvahiHashmap *cache_by_key; + unsigned cache_n_entries; + + /* Lookups */ + AVAHI_LLIST_HEAD(AvahiWideAreaLookup, lookups); + AvahiHashmap *lookups_by_id; + AvahiHashmap *lookups_by_key; + + int cleanup_dead; + + AvahiAddress dns_servers[AVAHI_WIDE_AREA_SERVERS_MAX]; + unsigned n_dns_servers; + unsigned current_dns_server; +}; + AvahiWideAreaLookupEngine *avahi_wide_area_engine_new(AvahiServer *s); void avahi_wide_area_engine_free(AvahiWideAreaLookupEngine *e); |