]> git.meshlink.io Git - catta/blobdiff - rr.c
add client part of probing
[catta] / rr.c
diff --git a/rr.c b/rr.c
index fe475eb0e5a58f69ed11cab5d5c0214130802877..f72557b055ebf01101a00707cfad7c3cc5d82ff8 100644 (file)
--- 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;
+}