[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