[LEDE-DEV] [PATCH] mdnsd: the service is ignoring questions
John Crispin
john at phrozen.org
Mon Dec 19 08:02:30 PST 2016
On 19/12/2016 16:58, John Crispin wrote:
> 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 ?
>
s/runtime/compile/g ...
> 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);
>
More information about the Lede-dev
mailing list