g_assert(record);
g_assert(i);
+ t = avahi_record_to_string(record);
+
+/* avahi_log_debug("incoming_probe()"); */
+
for (e = g_hash_table_lookup(s->entries_by_key, record->key); e; e = n) {
gint cmp;
n = e->by_key_next;
}
}
- t = avahi_record_to_string(record);
-
if (!ours) {
if (won)
else if (lost) {
avahi_log_debug("Recieved conflicting probe [%s]. Local host lost. Withdrawing.", t);
withdraw_rrset(s, record->key);
- }
+ }/* else */
+/* avahi_log_debug("Not conflicting probe"); */
}
g_free(t);
avahi_log_debug("Recieved conflicting record [%s]. Resetting our record.", t);
avahi_entry_return_to_initial_state(s, conflicting_entry, i);
- /* Local unique records are returned to probin
+ /* Local unique records are returned to probing
* state. Local shared records are reannounced. */
}
withdraw_host_rrs(s);
g_free(s->domain_name);
- s->domain_name = domain_name ? avahi_normalize_name(domain_name) : g_strdup("local.");
+ s->domain_name = domain_name ? avahi_normalize_name(domain_name) : g_strdup("local");
update_fqdn(s);
delayed_register_stuff(s);
/* Get host name */
s->host_name = s->config.host_name ? avahi_normalize_name(s->config.host_name) : avahi_get_host_name();
s->host_name[strcspn(s->host_name, ".")] = 0;
- s->domain_name = s->config.domain_name ? avahi_normalize_name(s->config.domain_name) : g_strdup("local.");
+ s->domain_name = s->config.domain_name ? avahi_normalize_name(s->config.domain_name) : g_strdup("local");
s->host_name_fqdn = NULL;
update_fqdn(s);
return avahi_record_ref((*e)->record);
}
-void avahi_server_dump(AvahiServer *s, FILE *f) {
+void avahi_server_dump(AvahiServer *s, AvahiDumpCallback callback, gpointer userdata) {
AvahiEntry *e;
+
g_assert(s);
- g_assert(f);
+ g_assert(callback);
- fprintf(f, "\n;;; ZONE DUMP FOLLOWS ;;;\n");
+ callback(";;; ZONE DUMP FOLLOWS ;;;", userdata);
for (e = s->entries; e; e = e->entries_next) {
gchar *t;
+ gchar ln[256];
if (e->dead)
continue;
t = avahi_record_to_string(e->record);
- fprintf(f, "%s ; iface=%i proto=%i\n", t, e->interface, e->protocol);
+ snprintf(ln, sizeof(ln), "%s ; iface=%i proto=%i", t, e->interface, e->protocol);
g_free(t);
+
+ callback(ln, userdata);
}
- avahi_dump_caches(s->monitor, f);
+ avahi_dump_caches(s->monitor, callback, userdata);
}
gint avahi_server_add_ptr(
AvahiStringList *strlst) {
gchar ptr_name[256], svc_name[256], ename[64], enum_ptr[256];
+ gchar *t, *d;
AvahiRecord *r;
gint ret = 0;
if (!host)
host = s->host_name_fqdn;
- snprintf(ptr_name, sizeof(ptr_name), "%s.%s", type, domain);
- snprintf(svc_name, sizeof(svc_name), "%s.%s.%s", ename, type, domain);
+ d = avahi_normalize_name(domain);
+ t = avahi_normalize_name(type);
+ snprintf(ptr_name, sizeof(ptr_name), "%s.%s", t, d);
+ snprintf(svc_name, sizeof(svc_name), "%s.%s.%s", ename, t, d);
+
ret = avahi_server_add_ptr(s, g, interface, protocol, AVAHI_ENTRY_NULL, AVAHI_DEFAULT_TTL, ptr_name, svc_name);
r = avahi_record_new_full(svc_name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_SRV, AVAHI_DEFAULT_TTL_HOST_NAME);
ret |= avahi_server_add_txt_strlst(s, g, interface, protocol, AVAHI_ENTRY_UNIQUE, AVAHI_DEFAULT_TTL, svc_name, strlst);
- snprintf(enum_ptr, sizeof(enum_ptr), "_services._dns-sd._udp.%s", domain);
+ snprintf(enum_ptr, sizeof(enum_ptr), "_services._dns-sd._udp.%s", d);
ret |=avahi_server_add_ptr(s, g, interface, protocol, AVAHI_ENTRY_NULL, AVAHI_DEFAULT_TTL, enum_ptr, ptr_name);
+ g_free(d);
+ g_free(t);
+
return ret;
}
guint16 port /** should be 53 */) {
gint ret = -1;
- gchar t[256];
+ gchar t[256], *d;
AvahiRecord *r;
g_assert(s);
} else
domain = s->domain_name;
- snprintf(t, sizeof(t), "%s.%s", type == AVAHI_DNS_SERVER_RESOLVE ? "_domain._udp" : "_dns-update._udp", domain);
+ d = avahi_normalize_name(domain);
+ snprintf(t, sizeof(t), "%s.%s", type == AVAHI_DNS_SERVER_RESOLVE ? "_domain._udp" : "_dns-update._udp", d);
+ g_free(d);
r = avahi_record_new_full(t, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_SRV, AVAHI_DEFAULT_TTL_HOST_NAME);
r->data.srv.priority = 0;
return ret;
}
-
static void post_query_callback(AvahiInterfaceMonitor *m, AvahiInterface *i, gpointer userdata) {
AvahiKey *k = userdata;