X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-core%2Frr.c;h=c1faa501f9be9a485e73213596f4888598eae243;hb=fa8febc102b08ad9c5ff4732dfa5dbfda7361874;hp=704f5beb43b520d77d22e276064843807e2fde33;hpb=4f0a5e7572a4257894b4bfede42c26d65152609e;p=catta diff --git a/avahi-core/rr.c b/avahi-core/rr.c index 704f5be..c1faa50 100644 --- a/avahi-core/rr.c +++ b/avahi-core/rr.c @@ -47,7 +47,7 @@ AvahiKey *avahi_key_new(const char *name, uint16_t class, uint16_t type) { return NULL; } - if (!(k->name = avahi_normalize_name(name))) { + if (!(k->name = avahi_normalize_name_strdup(name))) { avahi_log_error("avahi_normalize_name() failed."); avahi_free(k); return NULL; @@ -60,6 +60,19 @@ AvahiKey *avahi_key_new(const char *name, uint16_t class, uint16_t type) { return k; } +AvahiKey *avahi_key_new_cname(AvahiKey *key) { + assert(key); + + if (key->clazz != AVAHI_DNS_CLASS_IN) + return NULL; + + if (key->type == AVAHI_DNS_TYPE_CNAME) + return NULL; + + return avahi_key_new(key->name, key->clazz, AVAHI_DNS_TYPE_CNAME); +} + + AvahiKey *avahi_key_ref(AvahiKey *k) { assert(k); assert(k->ref >= 1); @@ -142,6 +155,7 @@ void avahi_record_unref(AvahiRecord *r) { case AVAHI_DNS_TYPE_PTR: case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: avahi_free(r->data.ptr.name); break; @@ -199,6 +213,10 @@ const char *avahi_dns_type_to_string(uint16_t type) { return "SRV"; case AVAHI_DNS_TYPE_ANY: return "ANY"; + case AVAHI_DNS_TYPE_SOA: + return "SOA"; + case AVAHI_DNS_TYPE_NS: + return "NS"; default: return NULL; } @@ -231,7 +249,8 @@ char *avahi_record_to_string(const AvahiRecord *r) { break; case AVAHI_DNS_TYPE_PTR: - case AVAHI_DNS_TYPE_CNAME : + case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: t = r->data.ptr.name; break; @@ -335,6 +354,7 @@ static int rdata_equal(const AvahiRecord *a, const AvahiRecord *b) { case AVAHI_DNS_TYPE_PTR: case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: return avahi_domain_equal(a->data.ptr.name, b->data.ptr.name); case AVAHI_DNS_TYPE_HINFO: @@ -386,6 +406,7 @@ AvahiRecord *avahi_record_copy(AvahiRecord *r) { switch (r->key->type) { case AVAHI_DNS_TYPE_PTR: case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: if (!(copy->data.ptr.name = avahi_strdup(r->data.ptr.name))) goto fail; break; @@ -455,6 +476,7 @@ size_t avahi_record_get_estimate_size(AvahiRecord *r) { switch (r->key->type) { case AVAHI_DNS_TYPE_PTR: case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: n += strlen(r->data.ptr.name) + 1; break; @@ -530,6 +552,7 @@ int avahi_record_lexicographical_compare(AvahiRecord *a, AvahiRecord *b) { case AVAHI_DNS_TYPE_PTR: case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: return avahi_binary_domain_cmp(a->data.ptr.name, b->data.ptr.name); case AVAHI_DNS_TYPE_SRV: { @@ -627,6 +650,7 @@ int avahi_record_is_valid(AvahiRecord *r) { case AVAHI_DNS_TYPE_PTR: case AVAHI_DNS_TYPE_CNAME: + case AVAHI_DNS_TYPE_NS: return avahi_is_valid_domain_name(r->data.ptr.name); case AVAHI_DNS_TYPE_SRV: