#include <glib.h>
+#include "strlst.h"
+#include "address.h"
+
enum {
FLX_DNS_TYPE_A = 0x01,
FLX_DNS_TYPE_NS = 0x02,
};
enum {
- FLX_DNS_CLASS_IN = 0x01
+ FLX_DNS_CLASS_IN = 0x01,
+ FLX_DNS_CACHE_FLUSH = 0x8000
};
#define FLX_DEFAULT_TTL (120*60)
guint ref;
flxKey *key;
- gpointer data;
- guint16 size;
guint32 ttl;
+
+ union {
+ struct {
+ gpointer data;
+ guint16 size;
+ } generic;
+
+ struct {
+ guint16 priority;
+ guint16 weight;
+ guint16 port;
+ gchar *name;
+ } srv;
+
+ struct {
+ gchar *name;
+ } ptr; /* and cname */
+
+ struct {
+ gchar *cpu;
+ gchar *os;
+ } hinfo;
+
+ struct {
+ flxStringList *string_list;
+ } txt;
+
+ struct {
+ flxIPv4Address address;
+ } a;
+
+ struct {
+ flxIPv6Address address;
+ } aaaa;
+
+ } data;
+
} flxRecord;
flxKey *flx_key_new(const gchar *name, guint16 class, guint16 type);
guint flx_key_hash(const flxKey *k);
-flxRecord *flx_record_new(flxKey *k, gconstpointer data, guint16 size, guint32 ttl);
-flxRecord *flx_record_new_full(const gchar *name, guint16 class, guint16 type, gconstpointer data, guint16 size, guint32 ttl);
+flxRecord *flx_record_new(flxKey *k);
+flxRecord *flx_record_new_full(const gchar *name, guint16 class, guint16 type);
flxRecord *flx_record_ref(flxRecord *r);
void flx_record_unref(flxRecord *r);
const gchar *flx_dns_class_to_string(guint16 class);
const gchar *flx_dns_type_to_string(guint16 type);
-gchar *flx_key_to_string(flxKey *k); /* g_free() the result! */
-gchar *flx_record_to_string(flxRecord *r); /* g_free() the result! */
+gchar *flx_key_to_string(const flxKey *k); /* g_free() the result! */
+gchar *flx_record_to_string(const flxRecord *r); /* g_free() the result! */
gboolean flx_record_equal_no_ttl(const flxRecord *a, const flxRecord *b);
+flxRecord *flx_record_copy(flxRecord *r);
+
+/* returns a maximum estimate for the space that is needed to store
+ * this key in a DNS packet */
+guint flx_key_get_estimate_size(flxKey *k);
+
+/* ditto */
+guint flx_record_get_estimate_size(flxRecord *r);
+
+gint flx_record_lexicographical_compare(flxRecord *a, flxRecord *b);
+
#endif