summaryrefslogtreecommitdiffstats
path: root/avahi-core/wide-area.c
diff options
context:
space:
mode:
authorFederico Lucifredi <flucifredi@acm.org>2008-01-14 03:46:13 +0000
committerFederico Lucifredi <flucifredi@acm.org>2008-01-14 03:46:13 +0000
commit6f5b69ea24985a79ab8656a54a1c051cb3f33631 (patch)
tree4f4908e22b05f31e27fe730086d98878636cfd42 /avahi-core/wide-area.c
parent03ea73e25686fd6e0e9f5e4d74869c210f00d1e8 (diff)
deletion now functional, but needs tweaking.
git-svn-id: file:///home/lennart/svn/public/avahi/branches/federico@1710 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-core/wide-area.c')
-rw-r--r--avahi-core/wide-area.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/avahi-core/wide-area.c b/avahi-core/wide-area.c
index fc39763..a8602fb 100644
--- a/avahi-core/wide-area.c
+++ b/avahi-core/wide-area.c
@@ -828,6 +828,8 @@ int avahi_wide_area_publish(AvahiRecord *r, const char *zone, uint16_t id, int f
char globalfield[AVAHI_DOMAIN_NAME_MAX];
char *backup = NULL;
char *backupfield = NULL;
+ uint16_t backupclass;
+ uint32_t backupttl;
char *tmp;
AvahiDnsPacket *p;
@@ -922,6 +924,12 @@ int avahi_wide_area_publish(AvahiRecord *r, const char *zone, uint16_t id, int f
}
if(action == AVAHI_WIDEAREA_DELETE) { /* deleting pre-existing record */
+ backupclass = r->key->clazz;
+ r->key->clazz = AVAHI_DNS_CLASS_NONE;
+
+ backupttl = r->ttl; /* TODO: fix library limit, support 0 TTL */
+ r->ttl = 0;
+
result = avahi_dns_packet_append_record(p, r, 0, 0); /* bind max TTL to 0, deletion */
} else { /* publishing new record */
if(r->key->type == AVAHI_DNS_TYPE_A) { /* standardize TTLs independent of record for wide-area */
@@ -972,6 +980,7 @@ int avahi_wide_area_publish(AvahiRecord *r, const char *zone, uint16_t id, int f
/* cleanup */
r->key->name = backup; /* restore original key */
+
if (backupfield)
if (r->key->type == AVAHI_DNS_TYPE_SRV) { /* SRV has a different layout than other records in the union */
r->data.srv.name = backupfield; /* restore field if altered */
@@ -979,5 +988,10 @@ int avahi_wide_area_publish(AvahiRecord *r, const char *zone, uint16_t id, int f
r->data.ptr.name = backupfield; /* restore field if altered */
}
+ if(action == AVAHI_WIDEAREA_DELETE) { /* restore class if altered */
+ r->key->clazz = backupclass;
+ r->ttl = backupttl;
+ }
+
return 0;
}