avahi_simple_poll_set_func((*self)->simple_poll, poll_func, *self);
- if (!((*self)->client = avahi_client_new(avahi_simple_poll_get((*self)->simple_poll), client_callback, *self, &error))) {
+ if (!((*self)->client = avahi_client_new(avahi_simple_poll_get((*self)->simple_poll), 0, client_callback, *self, &error))) {
result = map_error(error);
goto fail;
}
return;
switch (state) {
- case AVAHI_CLIENT_DISCONNECTED:
+ case AVAHI_CLIENT_FAILURE:
reg_report_status(data, SW_DISCOVERY_PUBLISH_INVALID);
break;
}
case AVAHI_CLIENT_S_COLLISION:
+ case AVAHI_CLIENT_S_REGISTERING:
/* Remove our entry */
avahi_entry_group_reset(data->object);
break;
- case AVAHI_CLIENT_S_REGISTERING:
+ case AVAHI_CLIENT_CONNECTING:
/* Ignore */
break;
}
oid_data *data;
sw_result result = SW_E_UNKNOWN;
service_data *sdata;
+ AvahiStringList *txt = NULL;
assert(self);
assert(name);
AVAHI_WARN_LINKAGE;
- if ((*oid = oid_alloc(self, OID_ENTRY_GROUP)) == (sw_discovery_oid) -1)
+ if (text_record && text_record_len > 0)
+ if (avahi_string_list_parse(text_record, text_record_len, &txt) < 0)
+ return SW_E_UNKNOWN;
+
+ if ((*oid = oid_alloc(self, OID_ENTRY_GROUP)) == (sw_discovery_oid) -1) {
+ avahi_string_list_free(txt);
return SW_E_UNKNOWN;
+ }
if (!(sdata = service_data_new(self))) {
+ avahi_string_list_free(txt);
oid_release(self, *oid);
return SW_E_MEM;
}
sdata->domain = domain ? avahi_normalize_name_strdup(domain) : NULL;
sdata->host = host ? avahi_normalize_name_strdup(host) : NULL;
sdata->port = port;
- sdata->txt = text_record && text_record_len > 0 ? avahi_string_list_parse(text_record, text_record_len) : NULL;
+ sdata->txt = txt;
/* Some OOM checking would be cool here */