X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=server.h;h=ba1af789f2b7b5dbc46446d96dff36372d7634cc;hb=7dce450bdc23ea306a61e00f914481e29ebcb176;hp=f90bfe77aaa11e009ca7b63f2e884417502cb74b;hpb=0a985aa6c5453fe09bf0a3a79fe66d49c698b309;p=catta diff --git a/server.h b/server.h index f90bfe7..ba1af78 100644 --- a/server.h +++ b/server.h @@ -1,9 +1,7 @@ -#ifndef fooflxserverhfoo -#define fooflxserverhfoo +#ifndef fooAvahiserverhfoo +#define fooAvahiserverhfoo -typedef struct _flxServerEntry flxServerEntry; - -#include "flx.h" +#include "Avahi.h" #include "iface.h" #include "prioq.h" #include "llist.h" @@ -11,35 +9,53 @@ typedef struct _flxServerEntry flxServerEntry; #include "announce.h" #include "subscribe.h" -struct _flxServerEntry { - flxRecord *record; - gint id; +struct _AvahiEntry { + AvahiServer *server; + AvahiEntryGroup *group; + + gboolean dead; + + AvahiEntryFlags flags; + AvahiRecord *record; gint interface; guchar protocol; - flxServerEntryFlags flags; + AVAHI_LLIST_FIELDS(AvahiEntry, entries); + AVAHI_LLIST_FIELDS(AvahiEntry, by_key); + AVAHI_LLIST_FIELDS(AvahiEntry, by_group); + + AVAHI_LLIST_HEAD(AvahiAnnouncement, announcements); +}; + +struct _AvahiEntryGroup { + AvahiServer *server; + gboolean dead; - FLX_LLIST_FIELDS(flxServerEntry, entry); - FLX_LLIST_FIELDS(flxServerEntry, by_key); - FLX_LLIST_FIELDS(flxServerEntry, by_id); + AvahiEntryGroupState state; + gpointer userdata; + AvahiEntryGroupCallback callback; + + guint n_probing; - FLX_LLIST_HEAD(flxAnnouncement, announcements); + AVAHI_LLIST_FIELDS(AvahiEntryGroup, groups); + AVAHI_LLIST_HEAD(AvahiEntry, entries); }; -struct _flxServer { +struct _AvahiServer { GMainContext *context; - flxInterfaceMonitor *monitor; + AvahiInterfaceMonitor *monitor; - gint current_id; - - FLX_LLIST_HEAD(flxServerEntry, entries); - GHashTable *rrset_by_id; - GHashTable *rrset_by_key; + AVAHI_LLIST_HEAD(AvahiEntry, entries); + GHashTable *entries_by_key; - FLX_LLIST_HEAD(flxSubscription, subscriptions); + AVAHI_LLIST_HEAD(AvahiEntryGroup, groups); + + AVAHI_LLIST_HEAD(AvahiSubscription, subscriptions); GHashTable *subscription_hashtable; - flxTimeEventQueue *time_event_queue; + gboolean need_entry_cleanup, need_group_cleanup; + + AvahiTimeEventQueue *time_event_queue; gchar *hostname; @@ -47,9 +63,17 @@ struct _flxServer { GPollFD pollfd_ipv4, pollfd_ipv6; GSource *source; - + + gboolean ignore_bad_ttl; }; -gboolean flx_server_entry_match_interface(flxServerEntry *e, flxInterface *i); +gboolean avahi_server_entry_match_interface(AvahiEntry *e, AvahiInterface *i); + +void avahi_server_post_query(AvahiServer *s, gint interface, guchar protocol, AvahiKey *key); +void avahi_server_post_response(AvahiServer *s, gint interface, guchar protocol, AvahiRecord *record, gboolean flush_cache); + +void avahi_entry_group_change_state(AvahiEntryGroup *g, AvahiEntryGroupState state); + +gboolean avahi_entry_commited(AvahiEntry *e); #endif