- for (e = s->entries; e; e = e->entries_next) {
- char *t;
- char ln[256];
-
- if (e->dead)
- continue;
-
- if (!(t = avahi_record_to_string(e->record)))
- return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
-
- snprintf(ln, sizeof(ln), "%s ; iface=%i proto=%i", t, e->interface, e->protocol);
- avahi_free(t);
-
- callback(ln, userdata);
- }
-
- avahi_dump_caches(s->monitor, callback, userdata);
- return AVAHI_OK;
-}
-
-int avahi_server_add_ptr(
- AvahiServer *s,
- AvahiSEntryGroup *g,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiEntryFlags flags,
- uint32_t ttl,
- const char *name,
- const char *dest) {
-
- AvahiRecord *r;
- int ret;
-
- assert(s);
- assert(dest);
-
- if (!(r = avahi_record_new_full(name ? name : s->host_name_fqdn, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_PTR, ttl)))
- return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
-
- r->data.ptr.name = avahi_normalize_name(dest);
- ret = avahi_server_add(s, g, interface, protocol, flags, r);
- avahi_record_unref(r);
- return ret;
-}
-
-int avahi_server_add_address(
- AvahiServer *s,
- AvahiSEntryGroup *g,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiEntryFlags flags,
- const char *name,
- AvahiAddress *a) {
-
- char *n = NULL;
- int ret = AVAHI_OK;
- assert(s);
- assert(a);
-
- if (name) {
- if (!(n = avahi_normalize_name(name)))
- return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
-
- name = n;
- } else
- name = s->host_name_fqdn;
-
- if (!avahi_is_valid_domain_name(name)) {
- ret = avahi_server_set_errno(s, AVAHI_ERR_INVALID_HOST_NAME);
- goto fail;
- }
-
- if (a->family == AVAHI_PROTO_INET) {
- char *reverse;
- AvahiRecord *r;
-
- if (!(r = avahi_record_new_full(name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_A, AVAHI_DEFAULT_TTL_HOST_NAME))) {
- ret = avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
- goto fail;
- }
-
- r->data.a.address = a->data.ipv4;
- ret = avahi_server_add(s, g, interface, protocol, flags | AVAHI_ENTRY_UNIQUE | AVAHI_ENTRY_ALLOWMUTIPLE, r);
- avahi_record_unref(r);
-
- if (ret < 0)
- goto fail;
-
- if (!(reverse = avahi_reverse_lookup_name_ipv4(&a->data.ipv4))) {
- ret = avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
- goto fail;
- }
-
- ret = avahi_server_add_ptr(s, g, interface, protocol, flags | AVAHI_ENTRY_UNIQUE, AVAHI_DEFAULT_TTL_HOST_NAME, reverse, name);
- avahi_free(reverse);
-
- } else {
- char *reverse;
- AvahiRecord *r;
-
- assert(a->family == AVAHI_PROTO_INET6);
-
- if (!(r = avahi_record_new_full(name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_AAAA, AVAHI_DEFAULT_TTL_HOST_NAME))) {
- ret = avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
- goto fail;
- }
-
- r->data.aaaa.address = a->data.ipv6;
- ret = avahi_server_add(s, g, interface, protocol, flags | AVAHI_ENTRY_UNIQUE | AVAHI_ENTRY_ALLOWMUTIPLE, r);
- avahi_record_unref(r);
-
- if (ret < 0)
- goto fail;
-
- if (!(reverse = avahi_reverse_lookup_name_ipv6_arpa(&a->data.ipv6))) {
- ret = avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
- goto fail;
- }
-
- ret = avahi_server_add_ptr(s, g, interface, protocol, flags | AVAHI_ENTRY_UNIQUE, AVAHI_DEFAULT_TTL_HOST_NAME, reverse, name);
- avahi_free(reverse);
-
- if (ret < 0)
- goto fail;
-
- if (!(reverse = avahi_reverse_lookup_name_ipv6_int(&a->data.ipv6))) {
- ret = avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
- goto fail;
- }
-
- ret = avahi_server_add_ptr(s, g, interface, protocol, flags | AVAHI_ENTRY_UNIQUE, AVAHI_DEFAULT_TTL_HOST_NAME, reverse, name);
- avahi_free(reverse);
- }
-
-fail:
-
- avahi_free(n);
-
- return ret;
-}
-
-static int server_add_txt_strlst_nocopy(
- AvahiServer *s,
- AvahiSEntryGroup *g,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiEntryFlags flags,
- uint32_t ttl,
- const char *name,
- AvahiStringList *strlst) {
-
- AvahiRecord *r;
- int ret;
-
- assert(s);
-
- if (!(r = avahi_record_new_full(name ? name : s->host_name_fqdn, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_TXT, ttl)))
- return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
-
- r->data.txt.string_list = strlst;
- ret = avahi_server_add(s, g, interface, protocol, flags, r);
- avahi_record_unref(r);
-
- return ret;
-}
-
-int avahi_server_add_txt_strlst(
- AvahiServer *s,
- AvahiSEntryGroup *g,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiEntryFlags flags,
- uint32_t ttl,
- const char *name,
- AvahiStringList *strlst) {
-
- assert(s);
-
- return server_add_txt_strlst_nocopy(s, g, interface, protocol, flags, ttl, name, avahi_string_list_copy(strlst));
-}
-
-int avahi_server_add_txt_va(
- AvahiServer *s,
- AvahiSEntryGroup *g,
- AvahiIfIndex interface,
- AvahiProtocol protocol,
- AvahiEntryFlags flags,
- uint32_t ttl,
- const char *name,
- va_list va) {