summaryrefslogtreecommitdiffstats
path: root/rr.c
diff options
context:
space:
mode:
Diffstat (limited to 'rr.c')
-rw-r--r--rr.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/rr.c b/rr.c
index fe475eb..f72557b 100644
--- a/rr.c
+++ b/rr.c
@@ -121,6 +121,9 @@ void flx_record_unref(flxRecord *r) {
}
const gchar *flx_dns_class_to_string(guint16 class) {
+ if (class & FLX_DNS_CACHE_FLUSH)
+ return "FLUSH";
+
if (class == FLX_DNS_CLASS_IN)
return "IN";
@@ -143,6 +146,8 @@ const gchar *flx_dns_type_to_string(guint16 type) {
return "TXT";
case FLX_DNS_TYPE_SRV:
return "SRV";
+ case FLX_DNS_TYPE_ANY:
+ return "ANY";
default:
return NULL;
}
@@ -344,3 +349,49 @@ flxRecord *flx_record_copy(flxRecord *r) {
return copy;
}
+
+
+guint flx_key_get_estimate_size(flxKey *k) {
+ g_assert(k);
+
+ return strlen(k->name)+1+4;
+}
+
+guint flx_record_get_estimate_size(flxRecord *r) {
+ guint n;
+ g_assert(r);
+
+ n = flx_key_get_estimate_size(r->key) + 4 + 2;
+
+ switch (r->key->type) {
+ case FLX_DNS_TYPE_PTR:
+ case FLX_DNS_TYPE_CNAME:
+ n += strlen(r->data.ptr.name) + 1;
+ break;
+
+ case FLX_DNS_TYPE_SRV:
+ n += 6 + strlen(r->data.srv.name) + 1;
+ break;
+
+ case FLX_DNS_TYPE_HINFO:
+ n += strlen(r->data.hinfo.os) + 1 + strlen(r->data.hinfo.cpu) + 1;
+ break;
+
+ case FLX_DNS_TYPE_TXT:
+ n += flx_string_list_serialize(r->data.txt.string_list, NULL, 0);
+ break;
+
+ case FLX_DNS_TYPE_A:
+ n += sizeof(flxIPv4Address);
+ break;
+
+ case FLX_DNS_TYPE_AAAA:
+ n += sizeof(flxIPv6Address);
+ break;
+
+ default:
+ n += r->data.generic.size;
+ }
+
+ return n;
+}