X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=server.h;h=97b2d6b41a358d46a2d6843ca667c49227fc6962;hb=3bbfb70938c6b08b72a8958e5a6499a9280a7d8f;hp=fbd5715445c392891b2e146ab4f4d6c333c223c8;hpb=c18626ad35cdf94edbff196070ccbb6ae825abd0;p=catta diff --git a/server.h b/server.h index fbd5715..97b2d6b 100644 --- a/server.h +++ b/server.h @@ -1,38 +1,60 @@ #ifndef fooflxserverhfoo #define fooflxserverhfoo -typedef struct _flxEntry flxEntry; - #include "flx.h" #include "iface.h" #include "prioq.h" #include "llist.h" #include "timeeventq.h" +#include "announce.h" +#include "subscribe.h" struct _flxEntry { + flxServer *server; + flxEntryGroup *group; + + gboolean dead; + + flxEntryFlags flags; flxRecord *record; - gint id; gint interface; guchar protocol; - gboolean unique; + FLX_LLIST_FIELDS(flxEntry, entries); + FLX_LLIST_FIELDS(flxEntry, by_key); + FLX_LLIST_FIELDS(flxEntry, by_group); + + FLX_LLIST_HEAD(flxAnnouncement, announcements); +}; + +struct _flxEntryGroup { + flxServer *server; + gboolean dead; + + flxEntryGroupStatus status; + gpointer userdata; + flxEntryGroupCallback callback; - FLX_LLIST_FIELDS(flxEntry, entry); - FLX_LLIST_FIELDS(flxEntry, by_name); - FLX_LLIST_FIELDS(flxEntry, by_id); + guint n_probing; + + FLX_LLIST_FIELDS(flxEntryGroup, groups); + FLX_LLIST_HEAD(flxEntry, entries); }; struct _flxServer { GMainContext *context; flxInterfaceMonitor *monitor; - gint current_id; - - GHashTable *rrset_by_id; - GHashTable *rrset_by_name; - FLX_LLIST_HEAD(flxEntry, entries); + GHashTable *entries_by_key; + + FLX_LLIST_HEAD(flxEntryGroup, groups); + + FLX_LLIST_HEAD(flxSubscription, subscriptions); + GHashTable *subscription_hashtable; + gboolean need_entry_cleanup, need_group_cleanup; + flxTimeEventQueue *time_event_queue; gchar *hostname; @@ -41,8 +63,17 @@ struct _flxServer { GPollFD pollfd_ipv4, pollfd_ipv6; GSource *source; - + + gboolean ignore_bad_ttl; }; +gboolean flx_server_entry_match_interface(flxEntry *e, flxInterface *i); + +void flx_server_post_query(flxServer *s, gint interface, guchar protocol, flxKey *key); +void flx_server_post_response(flxServer *s, gint interface, guchar protocol, flxRecord *record, gboolean flush_cache); + +void flx_entry_group_run_callback(flxEntryGroup *g, flxEntryGroupStatus state); + +gboolean flx_entry_commited(flxEntry *e); #endif