[LEDE-DEV] [PATCH] mdnsd: the service is ignoring questions
John Crispin
john at phrozen.org
Mon Dec 19 07:58:53 PST 2016
When a question is incoming the service was incorrectly resettig the
query timeout regardless of it being the right service. This causes
the code to never answer the questions it is being asked.
Reported-by: Cristian Morales Vega <cristian at samknows.com>
Signed-off-by: John Crispin <john at phrozen.org>
---
service.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
Hi Cristian
the patch is only runtime tested, could you give it a spin to see if it solves your problem ?
John
diff --git a/service.c b/service.c
index fe6e5a9..8d514c2 100644
--- a/service.c
+++ b/service.c
@@ -107,7 +107,7 @@ service_add_srv(struct service *s, int ttl)
#define TOUT_LOOKUP 60
-static int
+static time_t
service_timeout(struct service *s)
{
time_t t = monotonic_time();
@@ -115,9 +115,7 @@ service_timeout(struct service *s)
if (t - s->t <= TOUT_LOOKUP)
return 0;
- s->t = t;
-
- return 1;
+ return t;
}
void
@@ -154,8 +152,10 @@ service_reply_single(struct interface *iface, struct service *s, const char *mat
{
const char *host = service_name(s->service);
char *service = strstr(host, "._");
+ time_t t = service_timeout(s);
+
- if (!force && (!s->active || !service || !service_timeout(s)))
+ if (!force && (!s->active || !service || !t))
return;
service++;
@@ -163,6 +163,8 @@ service_reply_single(struct interface *iface, struct service *s, const char *mat
if (match && strcmp(match, s->service))
return;
+ s->t = t;
+
dns_init_answer();
service_add_ptr(service_name(s->service), ttl);
dns_send_answer(iface, service);
--
1.7.10.4
More information about the Lede-dev
mailing list