diff options
| author | Rafał Miłecki | 2017-05-22 09:57:47 +0000 |
|---|---|---|
| committer | Rafał Miłecki | 2017-05-22 09:57:47 +0000 |
| commit | 0e8b948ff8dd1cb1763180c99b522390529c7841 (patch) | |
| tree | 78fce2add664ce7bfc8a42f3332ca9506a8cc561 | |
| parent | 49fdb9f7a5454f7e11e8bcd621bff17cbf9da5ca (diff) | |
| download | mdnsd-0e8b948ff8dd1cb1763180c99b522390529c7841.tar.gz | |
Support specifying instance name in JSON file
So far we were using host label as the instance name for every service.
This change allows specifying it manually and fallbacks to the label for
backward compatibility.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Acked-by: John Crispin <john@phrozen.org>
| -rw-r--r-- | service.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -34,6 +34,7 @@ #include "announce.h" enum { + SERVICE_INSTANCE, SERVICE_SERVICE, SERVICE_PORT, SERVICE_TXT, @@ -55,6 +56,7 @@ struct service { }; static const struct blobmsg_policy service_policy[__SERVICE_MAX] = { + [SERVICE_INSTANCE] = { .name = "instance", .type = BLOBMSG_TYPE_STRING }, [SERVICE_SERVICE] = { .name = "service", .type = BLOBMSG_TYPE_STRING }, [SERVICE_PORT] = { .name = "port", .type = BLOBMSG_TYPE_INT32 }, [SERVICE_TXT] = { .name = "txt", .type = BLOBMSG_TYPE_ARRAY }, @@ -210,7 +212,7 @@ service_load_blob(struct blob_attr *b) { struct blob_attr *txt, *_tb[__SERVICE_MAX]; struct service *s; - char *d_service, *d_id; + char *d_instance, *d_service, *d_id; uint8_t *d_txt; int rem2; int txt_len = 0; @@ -226,6 +228,7 @@ service_load_blob(struct blob_attr *b) s = calloc_a(sizeof(*s), &d_id, strlen(blobmsg_name(b)) + 1, + &d_instance, _tb[SERVICE_INSTANCE] ? strlen(blobmsg_get_string(_tb[SERVICE_INSTANCE])) + 1 : 0, &d_service, strlen(blobmsg_get_string(_tb[SERVICE_SERVICE])) + 1, &d_txt, txt_len); if (!s) @@ -233,7 +236,10 @@ service_load_blob(struct blob_attr *b) s->port = blobmsg_get_u32(_tb[SERVICE_PORT]); s->id = strcpy(d_id, blobmsg_name(b)); - s->instance = umdns_host_label; + if (_tb[SERVICE_INSTANCE]) + s->instance = strcpy(d_instance, blobmsg_get_string(_tb[SERVICE_INSTANCE])); + else + s->instance = umdns_host_label; s->service = strcpy(d_service, blobmsg_get_string(_tb[SERVICE_SERVICE])); s->active = 1; s->t = 0; |