From 0b50c29101b3e8e2095c42df43eddf0181f885fb Mon Sep 17 00:00:00 2001 From: Mohd Husaam Mehdi Date: Sun, 14 Jan 2024 20:18:32 +0530 Subject: [PATCH] display more srv attributes in output of ubus browse function In the output of ubus call umdns browse, the following srv params have been exposed with this commit: * domain, * ttl, * last_update, * priority * weight The new output looks as follows: "_http._tcp": { "Apache service": { "iface": "br-lan", "host": "user831.local", "domain": "local", "port": 80, "ttl": 120, "last_update": "2024-01-16T02:41:02Z", "priority": 0, "weight": 0, "ipv4": "192.168.1.245", "ipv6": "9999:1234:830::1f0", "ipv6": "fdc5:c8b6:f412::1f0", "ipv6": "fdc5:c8b6:f412:0:a800:aaff:fe53:101", "ipv6": "9999:1234:830:0:a800:aaff:fe53:101" } } Signed-off-by: Mohd Husaam --- cache.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/cache.c b/cache.c index 384487a..2412ed2 100644 --- a/cache.c +++ b/cache.c @@ -460,8 +460,47 @@ cache_dump_records(struct blob_buf *buf, const char *name, int array, if (hostname) *hostname = (char *)r->rdata + sizeof(struct dns_srv_data); } - if (r->port) - blobmsg_add_u32(buf, "port", r->port); + + + if (r->record) { + const struct dns_srv_data *dsd; + char *domain = NULL; + + domain = strstr(r->record, "._udp."); + + if (!domain) + domain = strstr(r->record, "._tcp."); + + if (!domain) + break; + + domain = domain + strlen("._udp."); + blobmsg_add_string(buf, "domain", domain); + + if (r->port) + blobmsg_add_u32(buf, "port", r->port); + + if (r->ttl) + blobmsg_add_u32(buf, "ttl", r->ttl); + + if (r->time) { + struct tm *local_time; + char str_tm[32] = {0}; + time_t last_update = time(NULL) - (monotonic_time() - r->time); + local_time = localtime(&last_update); + strftime(str_tm, sizeof(str_tm), "%Y-%m-%dT%H:%M:%SZ", local_time); + + blobmsg_add_string(buf, "last_update", str_tm); + } + + dsd = (const struct dns_srv_data*)r->rdata; + + if (r->rdlength > sizeof(*dsd)) { + blobmsg_add_u32(buf, "priority", be16_to_cpu(dsd->priority)); + blobmsg_add_u32(buf, "weight", be16_to_cpu(dsd->weight)); + } + } + break; } -- 2.30.2