]> git.meshlink.io Git - catta/blobdiff - rr.c
add known answer suppresion server part
[catta] / rr.c
diff --git a/rr.c b/rr.c
index 4108c54cf1be6cba627b38a772dcd1ca89eeb0fe..600e7219bb7b58116f378f8b300b06ca05e4261a 100644 (file)
--- a/rr.c
+++ b/rr.c
@@ -49,8 +49,8 @@ flxRecord *flx_record_new(flxKey *k, gconstpointer data, guint16 size, guint32 t
     flxRecord *r;
     
     g_assert(k);
-    g_assert(data);
-
+    g_assert(size == 0 || data);
+    
     r = g_new(flxRecord, 1);
     r->ref = 1;
     r->key = flx_key_ref(k);
@@ -64,6 +64,9 @@ flxRecord *flx_record_new(flxKey *k, gconstpointer data, guint16 size, guint32 t
 flxRecord *flx_record_new_full(const gchar *name, guint16 class, guint16 type, gconstpointer data, guint16 size, guint32 ttl) {
     flxRecord *r;
     flxKey *k;
+
+    g_assert(name);
+    g_assert(size == 0 || data);
     
     k = flx_key_new(name, class, type);
     r = flx_record_new(k, data, size, ttl);
@@ -221,9 +224,31 @@ gboolean flx_key_equal(const flxKey *a, const flxKey *b) {
 
 /*     g_message("equal: %p %p", a, b); */
     
-    return strcmp(a->name, b->name) == 0 && a->type == b->type && a->class == b->class;
+    return strcmp(a->name, b->name) == 0 &&
+        a->type == b->type &&
+        a->class == b->class;
+}
+
+gboolean flx_key_pattern_match(const flxKey *pattern, const flxKey *k) {
+    g_assert(pattern);
+    g_assert(k);
+
+/*     g_message("equal: %p %p", a, b); */
+
+    g_assert(!flx_key_is_pattern(k));
+    
+    return strcmp(pattern->name, k->name) == 0 &&
+        (pattern->type == k->type || pattern->type == FLX_DNS_TYPE_ANY) &&
+        pattern->class == k->class;
+}
+
+gboolean flx_key_is_pattern(const flxKey *k) {
+    g_assert(k);
+
+    return k->type == FLX_DNS_TYPE_ANY;
 }
 
+
 guint flx_key_hash(const flxKey *k) {
     g_assert(k);