summaryrefslogtreecommitdiffstats
path: root/rr.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-03-26 13:58:11 +0000
committerLennart Poettering <lennart@poettering.net>2005-03-26 13:58:11 +0000
commit8e7f83aa5b6d910e80c56b31f4eb79b02e7ca67b (patch)
tree6a2da3b54fe17c82a998254d35b3c5d562e21ac4 /rr.c
parentad1f9d3725a300f10eca071c6fe2f2c583f51436 (diff)
* add subscription feature - with reissuing
* interpret goodbye responses git-svn-id: file:///home/lennart/svn/public/avahi/trunk@17 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'rr.c')
-rw-r--r--rr.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/rr.c b/rr.c
index c984934..4108c54 100644
--- a/rr.c
+++ b/rr.c
@@ -50,12 +50,11 @@ flxRecord *flx_record_new(flxKey *k, gconstpointer data, guint16 size, guint32 t
g_assert(k);
g_assert(data);
- g_assert(size > 0);
r = g_new(flxRecord, 1);
r->ref = 1;
r->key = flx_key_ref(k);
- r->data = g_memdup(data, size);
+ r->data = size > 0 ? g_memdup(data, size) : NULL;
r->size = size;
r->ttl = ttl;
@@ -154,10 +153,17 @@ gchar *flx_record_to_string(flxRecord *r) {
}
case FLX_DNS_TYPE_TXT: {
- g_assert(((guchar*) r->data)[0] == r->size-1);
- memcpy(t, r->data+1, ((guchar*) r->data)[0]);
- t[((guchar*) r->data)[0]] = 0;
+ if (r->size == 0)
+ t[0] = 0;
+ else {
+ guchar l = ((guchar*) r->data)[0];
+
+ if ((size_t) l+1 <= r->size) {
+ memcpy(t, r->data+1, ((guchar*) r->data)[0]);
+ t[((guchar*) r->data)[0]] = 0;
+ }
+ }
break;
}
@@ -203,7 +209,7 @@ gchar *flx_record_to_string(flxRecord *r) {
}
p = flx_key_to_string(r->key);
- s = g_strdup_printf("[%s %s ; ttl=%u]", p, t, r->ttl);
+ s = g_strdup_printf("%s %s ; ttl=%u", p, t, r->ttl);
g_free(p);
return s;
@@ -224,12 +230,12 @@ guint flx_key_hash(const flxKey *k) {
return g_str_hash(k->name) + k->type + k->class;
}
-gboolean flx_record_equal(const flxRecord *a, const flxRecord *b) {
+gboolean flx_record_equal_no_ttl(const flxRecord *a, const flxRecord *b) {
g_assert(a);
g_assert(b);
return flx_key_equal(a->key, b->key) &&
- a->ttl == b->ttl &&
+/* a->ttl == b->ttl && */
a->size == b->size &&
- memcmp(a->data, b->data, a->size) == 0;
+ (a->size == 0 || memcmp(a->data, b->data, a->size) == 0);
}