#include <avahi-common/llist.h>
#include <avahi-common/malloc.h>
+#include <avahi-common/alternative.h>
+#include <avahi-common/error.h>
#include <avahi-core/log.h>
#include "main.h"
s->type = s->host_name = s->domain_name = NULL;
s->port = 0;
- s->protocol = AF_UNSPEC;
+ s->protocol = AVAHI_PROTO_UNSPEC;
s->txt_records = NULL;
/* This service group is already registered in the server */
return;
- if (g->chosen_name)
- avahi_free(g->chosen_name);
-
- if (g->replace_wildcards)
- g->chosen_name = replacestr(g->name, "%h", avahi_server_get_host_name(avahi_server));
- else
- g->chosen_name = avahi_strdup(g->name);
+ if (!g->chosen_name) {
+
+ if (g->replace_wildcards)
+ g->chosen_name = replacestr(g->name, "%h", avahi_server_get_host_name(avahi_server));
+ else
+ g->chosen_name = avahi_strdup(g->name);
+ }
+
if (!g->entry_group)
g->entry_group = avahi_s_entry_group_new(avahi_server, entry_group_callback, g);
XML_TAG_DOMAIN_NAME,
XML_TAG_HOST_NAME,
XML_TAG_PORT,
- XML_TAG_PROTOCOL,
XML_TAG_TXT_RECORD
} xml_tag_name;
u->group->replace_wildcards = strcmp(attr[1], "yes") == 0;
else
goto invalid_attr;
- }
- if (attr[2])
- goto invalid_attr;
+ if (attr[2])
+ goto invalid_attr;
+ }
} else if (u->current_tag == XML_TAG_SERVICE_GROUP && strcmp(el, "service") == 0) {
- if (attr[0])
- goto invalid_attr;
+ u->current_tag = XML_TAG_SERVICE;
assert(!u->service);
u->service = static_service_new(u->group);
- u->current_tag = XML_TAG_SERVICE;
+ if (attr[0]) {
+ if (strcmp(attr[0], "protocol") == 0) {
+ AvahiProtocol protocol;
+
+ if (strcmp(attr[1], "ipv4") == 0) {
+ protocol = AVAHI_PROTO_INET;
+ } else if (strcmp(attr[1], "ipv6") == 0) {
+ protocol = AVAHI_PROTO_INET6;
+ } else if (strcmp(attr[1], "any") == 0) {
+ protocol = AVAHI_PROTO_UNSPEC;
+ } else {
+ avahi_log_error("%s: parse failure: invalid protocol specification \"%s\".", u->group->filename, attr[1]);
+ u->failed = 1;
+ return;
+ }
+
+ u->service->protocol = protocol;
+ } else
+ goto invalid_attr;
+
+ if (attr[2])
+ goto invalid_attr;
+ }
+
} else if (u->current_tag == XML_TAG_SERVICE && strcmp(el, "type") == 0) {
if (attr[0])
goto invalid_attr;
goto invalid_attr;
u->current_tag = XML_TAG_PORT;
- } else if (u->current_tag == XML_TAG_SERVICE && strcmp(el, "protocol") == 0) {
- if (attr[0])
- goto invalid_attr;
-
- u->current_tag = XML_TAG_PROTOCOL;
} else if (u->current_tag == XML_TAG_SERVICE && strcmp(el, "txt-record") == 0) {
if (attr[0])
goto invalid_attr;
break;
}
- case XML_TAG_PROTOCOL: {
- int protocol;
- assert(u->service);
-
- if (strcasecmp (u->buf, "ipv4") == 0) {
- protocol = AF_INET;
- } else if (strcasecmp (u->buf, "ipv6") == 0) {
- protocol = AF_INET6;
- } else if (strcasecmp (u->buf, "any") == 0) {
- protocol = AF_UNSPEC;
- } else {
- avahi_log_error("%s: parse failure: invalid protocol specification \"%s\".", u->group->filename, u->buf);
- u->failed = 1;
- return;
- }
-
- u->service->protocol = protocol;
- break;
- }
-
case XML_TAG_TXT_RECORD: {
assert(u->service);
break;
case XML_TAG_PORT:
- case XML_TAG_PROTOCOL:
case XML_TAG_TXT_RECORD:
assert(u->service);
u->buf = append_cdata(u->buf, s, len);
if (strcmp(g->filename, n) == 0)
return;
- avahi_log_info("Loading service file %s", n);
+ avahi_log_info("Loading service file %s.", n);
g = static_service_group_new(n);
if (static_service_group_load(g) < 0) {