From: Rafał Miłecki Date: Mon, 22 May 2017 09:57:47 +0000 (+0200) Subject: Support specifying instance name in JSON file X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=commitdiff_plain;h=0e8b948ff8dd1cb1763180c99b522390529c7841 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 Acked-by: John Crispin --- diff --git a/service.c b/service.c index 67e8f40..0a9e25d 100644 --- a/service.c +++ b/service.c @@ -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;