summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafał Miłecki2017-05-22 09:57:47 +0000
committerRafał Miłecki2017-05-22 09:57:47 +0000
commit0e8b948ff8dd1cb1763180c99b522390529c7841 (patch)
tree78fce2add664ce7bfc8a42f3332ca9506a8cc561
parent49fdb9f7a5454f7e11e8bcd621bff17cbf9da5ca (diff)
downloadmdnsd-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.c10
1 files changed, 8 insertions, 2 deletions
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;