diff options
author | Trent Lloyd <lathiat@bur.st> | 2005-08-19 17:55:51 +0000 |
---|---|---|
committer | Trent Lloyd <lathiat@bur.st> | 2005-08-19 17:55:51 +0000 |
commit | a52bd64a8db2c07bb2309cf2d8b888cc1a47ec56 (patch) | |
tree | 592dc6a9b9faacd293805d105666d0bb2d19c2c9 /avahi-daemon | |
parent | 2551f4d1cb1c2dfb02474c3ff4b5c2606076ffba (diff) |
* Add support for specifying the protocol in service definition files
* Add support for proper URL encoding of IPv6 addresses to avahi-bookmarks
* Cast some calls in dbus-watch-glue to get rid of warnings
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@357 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
Diffstat (limited to 'avahi-daemon')
-rw-r--r-- | avahi-daemon/avahi-service.dtd | 2 | ||||
-rw-r--r-- | avahi-daemon/example.service | 1 | ||||
-rw-r--r-- | avahi-daemon/static-services.c | 32 |
3 files changed, 34 insertions, 1 deletions
diff --git a/avahi-daemon/avahi-service.dtd b/avahi-daemon/avahi-service.dtd index 3c62764..c8477f1 100644 --- a/avahi-daemon/avahi-service.dtd +++ b/avahi-daemon/avahi-service.dtd @@ -14,5 +14,7 @@ <!ATTLIST host-name> <!ELEMENT port (#PCDATA)> <!ATTLIST port> +<!ELEMENT protocol (#PCDATA)> +<!ATTLIST protocol> <!ELEMENT txt-record (#PCDATA)> <!ATTLIST txt-record> diff --git a/avahi-daemon/example.service b/avahi-daemon/example.service index 9b2e891..72ab8ea 100644 --- a/avahi-daemon/example.service +++ b/avahi-daemon/example.service @@ -21,6 +21,7 @@ <domain-name>local</domain-name> <host-name>quux.local</host-name> <port>4711</port> + <protocol>any</protocol> <txt-record>this=is</txt-record> <txt-record>a=really</txt-record> <txt-record>bad=example</txt-record> diff --git a/avahi-daemon/static-services.c b/avahi-daemon/static-services.c index 0c0c563..f659371 100644 --- a/avahi-daemon/static-services.c +++ b/avahi-daemon/static-services.c @@ -50,6 +50,7 @@ struct StaticService { char *domain_name; char *host_name; uint16_t port; + int protocol; AvahiStringList *txt_records; @@ -110,6 +111,7 @@ static StaticService *static_service_new(StaticServiceGroup *group) { s->type = s->host_name = s->domain_name = NULL; s->port = 0; + s->protocol = AF_UNSPEC; s->txt_records = NULL; @@ -215,7 +217,7 @@ static void add_static_service_group_to_server(StaticServiceGroup *g) { 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) { @@ -246,6 +248,7 @@ typedef enum { XML_TAG_DOMAIN_NAME, XML_TAG_HOST_NAME, XML_TAG_PORT, + XML_TAG_PROTOCOL, XML_TAG_TXT_RECORD } xml_tag_name; @@ -312,6 +315,11 @@ static void XMLCALL xml_start(void *data, const char *el, const char *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; @@ -383,6 +391,26 @@ static void XMLCALL xml_end(void *data, const char *el) { 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); @@ -452,7 +480,9 @@ static void XMLCALL xml_cdata(void *data, const XML_Char *s, int len) { 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; |