char *domain_name;
char *host_name;
uint16_t port;
+ int protocol;
AvahiStringList *txt_records;
s->type = s->host_name = s->domain_name = NULL;
s->port = 0;
+ s->protocol = AVAHI_PROTO_UNSPEC;
s->txt_records = NULL;
StaticService *s;
assert(g);
+
+ if (g->entry_group && !avahi_s_entry_group_is_empty(g->entry_group))
+ /* This service group is already registered in the server */
+ return;
if (g->chosen_name)
avahi_free(g->chosen_name);
if (avahi_server_add_service_strlst(
avahi_server,
g->entry_group,
- -1, AF_UNSPEC,
+ -1, s->protocol,
g->chosen_name, s->type,
s->domain_name, s->host_name, s->port,
s->txt_records) < 0) {
XML_TAG_DOMAIN_NAME,
XML_TAG_HOST_NAME,
XML_TAG_PORT,
+ XML_TAG_PROTOCOL,
XML_TAG_TXT_RECORD
} xml_tag_name;
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 (u->buf && strcasecmp (u->buf, "ipv4") == 0) {
+ protocol = AVAHI_PROTO_INET;
+ } else if (u->buf && strcasecmp (u->buf, "ipv6") == 0) {
+ protocol = AVAHI_PROTO_INET6;
+ } else if (u->buf && strcasecmp (u->buf, "any") == 0) {
+ protocol = AVAHI_PROTO_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;
+ u->current_tag = XML_TAG_SERVICE;
+ 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);
break;