]> git.meshlink.io Git - catta/blobdiff - avahi-common/rr.c
* add proper error codes and patch everything to make use of it
[catta] / avahi-common / rr.c
index b0c03a965ec09db687dca49ab0aebb7b231247ae..1a30146bbe68ddfede2ca83001ec5da5da7d5e54 100644 (file)
@@ -39,7 +39,7 @@ AvahiKey *avahi_key_new(const gchar *name, guint16 class, guint16 type) {
     k = g_new(AvahiKey, 1);
     k->ref = 1;
     k->name = avahi_normalize_name(name);    
-    k->class = class;
+    k->clazz = class;
     k->type = type;
 
 /*     g_message("%p %% ref=1", k); */
@@ -182,14 +182,13 @@ const gchar *avahi_dns_type_to_string(guint16 type) {
     }
 }
 
-
 gchar *avahi_key_to_string(const AvahiKey *k) {
     g_assert(k);
     g_assert(k->ref >= 1);
     
     return g_strdup_printf("%s\t%s\t%s",
                            k->name,
-                           avahi_dns_class_to_string(k->class),
+                           avahi_dns_class_to_string(k->clazz),
                            avahi_dns_type_to_string(k->type));
 }
 
@@ -254,7 +253,7 @@ gboolean avahi_key_equal(const AvahiKey *a, const AvahiKey *b) {
     
     return avahi_domain_equal(a->name, b->name) &&
         a->type == b->type &&
-        a->class == b->class;
+        a->clazz == b->clazz;
 }
 
 gboolean avahi_key_pattern_match(const AvahiKey *pattern, const AvahiKey *k) {
@@ -270,7 +269,7 @@ gboolean avahi_key_pattern_match(const AvahiKey *pattern, const AvahiKey *k) {
     
     return avahi_domain_equal(pattern->name, k->name) &&
         (pattern->type == k->type || pattern->type == AVAHI_DNS_TYPE_ANY) &&
-        (pattern->class == k->class || pattern->type == AVAHI_DNS_CLASS_ANY);
+        (pattern->clazz == k->clazz || pattern->clazz == AVAHI_DNS_CLASS_ANY);
 }
 
 gboolean avahi_key_is_pattern(const AvahiKey *k) {
@@ -278,7 +277,7 @@ gboolean avahi_key_is_pattern(const AvahiKey *k) {
 
     return
         k->type == AVAHI_DNS_TYPE_ANY ||
-        k->class == AVAHI_DNS_CLASS_ANY;
+        k->clazz == AVAHI_DNS_CLASS_ANY;
 }
 
 guint avahi_key_hash(const AvahiKey *k) {
@@ -287,7 +286,7 @@ guint avahi_key_hash(const AvahiKey *k) {
     return
         avahi_domain_hash(k->name) + 
         k->type +
-        k->class;
+        k->clazz;
 }
 
 static gboolean rdata_equal(const AvahiRecord *a, const AvahiRecord *b) {
@@ -481,7 +480,7 @@ gint avahi_record_lexicographical_compare(AvahiRecord *a, AvahiRecord *b) {
     if (a == b)
         return 0;
 
-    if ((r = uint16_cmp(a->key->class, b->key->class)) ||
+    if ((r = uint16_cmp(a->key->clazz, b->key->clazz)) ||
         (r = uint16_cmp(a->key->type, b->key->type)))
         return r;
 
@@ -553,3 +552,49 @@ gboolean avahi_record_is_goodbye(AvahiRecord *r) {
 
     return r->ttl == 0;
 }
+
+gboolean avahi_key_valid(AvahiKey *k) {
+    g_assert(k);
+
+    if (!avahi_valid_domain_name(k->name))
+        return FALSE;
+    
+    return TRUE;
+}
+
+gboolean avahi_record_valid(AvahiRecord *r) {
+    g_assert(r);
+
+    if (!avahi_key_valid(r->key))
+        return FALSE;
+
+    switch (r->key->type) {
+
+        case AVAHI_DNS_TYPE_PTR:
+        case AVAHI_DNS_TYPE_CNAME:
+            return avahi_valid_domain_name(r->data.ptr.name);
+
+        case AVAHI_DNS_TYPE_SRV:
+            return avahi_valid_domain_name(r->data.srv.name);
+
+        case AVAHI_DNS_TYPE_HINFO:
+            return
+                strlen(r->data.hinfo.os) <= 255 &&
+                strlen(r->data.hinfo.cpu) <= 255;
+
+            
+        case AVAHI_DNS_TYPE_TXT: {
+
+            AvahiStringList *strlst;
+
+            for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next)
+                if (strlst->size > 255)
+                    return FALSE;
+
+            return TRUE;
+        }
+    }
+            
+
+    return TRUE;
+}