-struct _flxLocalAddrSource;
-typedef struct _flxLocalAddrSource flxLocalAddrSource;
-
-flxLocalAddrSource *flx_local_addr_source_new(flxServer *s);
-void flx_local_addr_source_free(flxLocalAddrSource *l);
-
-#define FLX_DNS_TYPE_A 0x01
-#define FLX_DNS_TYPE_AAAA 0x1C
-#define FLX_DNS_TYPE_PTR 0x0C
-#define FLX_DNS_TYPE_HINFO 0x0D
-#define FLX_DNS_TYPE_CNAME 0x05
-#define FLX_DNS_TYPE_NS 0x02
-#define FLX_DNS_TYPE_SOA 0x06
-#define FLX_DNS_TYPE_MX 0x0F
-#define FLX_DNS_TYPE_TXT 0x10
-
-#define FLX_DNS_CLASS_IN 0x01
-
-#define FLX_DEFAULT_TTL (120*60)
+flxEntryGroup *flx_entry_group_new(flxServer *s, flxEntryGroupCallback callback, gpointer userdata);
+void flx_entry_group_free(flxEntryGroup *g);
+void flx_entry_group_commit(flxEntryGroup *g);
+flxEntryGroupState flx_entry_group_get_state(flxEntryGroup *g);
+
+void flx_server_add(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ flxEntryFlags flags,
+ flxRecord *r);
+
+void flx_server_add_ptr(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ flxEntryFlags flags,
+ const gchar *name,
+ const gchar *dest);
+
+void flx_server_add_address(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ flxEntryFlags flags,
+ const gchar *name,
+ flxAddress *a);
+
+void flx_server_add_text(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ flxEntryFlags flags,
+ const gchar *name,
+ ... /* text records, terminated by NULL */);
+
+void flx_server_add_text_va(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ flxEntryFlags flags,
+ const gchar *name,
+ va_list va);
+
+void flx_server_add_text_strlst(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ flxEntryFlags flags,
+ const gchar *name,
+ flxStringList *strlst);
+
+void flx_server_add_service(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ const gchar *type,
+ const gchar *name,
+ const gchar *domain,
+ const gchar *host,
+ guint16 port,
+ ... /* text records, terminated by NULL */);
+
+void flx_server_add_service_va(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ const gchar *type,
+ const gchar *name,
+ const gchar *domain,
+ const gchar *host,
+ guint16 port,
+ va_list va);
+
+void flx_server_add_service_strlst(
+ flxServer *s,
+ flxEntryGroup *g,
+ gint interface,
+ guchar protocol,
+ const gchar *type,
+ const gchar *name,
+ const gchar *domain,
+ const gchar *host,
+ guint16 port,
+ flxStringList *strlst);
+
+typedef enum {
+ FLX_SUBSCRIPTION_NEW,
+ FLX_SUBSCRIPTION_REMOVE,
+ FLX_SUBSCRIPTION_CHANGE
+} flxSubscriptionEvent;
+
+typedef struct _flxSubscription flxSubscription;
+
+typedef void (*flxSubscriptionCallback)(flxSubscription *s, flxRecord *record, gint interface, guchar protocol, flxSubscriptionEvent event, gpointer userdata);
+
+flxSubscription *flx_subscription_new(flxServer *s, flxKey *key, gint interface, guchar protocol, flxSubscriptionCallback callback, gpointer userdata);
+void flx_subscription_free(flxSubscription *s);