}
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";
return "TXT";
case FLX_DNS_TYPE_SRV:
return "SRV";
+ case FLX_DNS_TYPE_ANY:
+ return "ANY";
default:
return NULL;
}
gchar *flx_record_to_string(const flxRecord *r) {
gchar *p, *s;
- char buf[257], *t, *d = NULL;
+ char buf[257], *t = NULL, *d = NULL;
switch (r->key->type) {
case FLX_DNS_TYPE_A:
/* g_message("equal: %p %p", a, b); */
- return strcmp(a->name, b->name) == 0 &&
+ return flx_domain_equal(a->name, b->name) &&
a->type == b->type &&
a->class == b->class;
}
g_assert(!flx_key_is_pattern(k));
- return strcmp(pattern->name, k->name) == 0 &&
+ return flx_domain_equal(pattern->name, k->name) &&
(pattern->type == k->type || pattern->type == FLX_DNS_TYPE_ANY) &&
pattern->class == k->class;
}
guint flx_key_hash(const flxKey *k) {
g_assert(k);
- return g_str_hash(k->name) + k->type + k->class;
+ return flx_domain_hash(k->name) + k->type + k->class;
}
static gboolean rdata_equal(const flxRecord *a, const flxRecord *b) {
a->data.srv.priority == b->data.srv.priority &&
a->data.srv.weight == b->data.srv.weight &&
a->data.srv.port == b->data.srv.port &&
- !strcmp(a->data.srv.name, b->data.srv.name);
+ flx_domain_equal(a->data.srv.name, b->data.srv.name);
case FLX_DNS_TYPE_PTR:
case FLX_DNS_TYPE_CNAME:
- return !strcmp(a->data.ptr.name, b->data.ptr.name);
+ return flx_domain_equal(a->data.ptr.name, b->data.ptr.name);
case FLX_DNS_TYPE_HINFO:
return
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;
+}