switch (q->type) {
case TYPE_ANY:
if (!strcmp(name, mdns_hostname_local))
- service_reply(iface, NULL);
+ service_reply(iface, NULL, announce_ttl);
break;
case TYPE_PTR:
service_announce_services(iface, name);
- service_reply(iface, name);
+ service_reply(iface, name, announce_ttl);
break;
case TYPE_AAAA:
if (host)
*host = '\0';
if (!strcmp(mdns_hostname, name))
- service_reply_a(iface, q->type);
+ service_reply_a(iface, q->type, announce_ttl);
break;
};
}
}
static void
-service_add_ptr(const char *host)
+service_add_ptr(const char *host, int ttl)
{
int len = dn_comp(host, mdns_buf, sizeof(mdns_buf), NULL, NULL);
if (len < 1)
return;
- dns_add_answer(TYPE_PTR, mdns_buf, len, announce_ttl);
+ dns_add_answer(TYPE_PTR, mdns_buf, len, ttl);
}
static void
-service_add_srv(struct service *s)
+service_add_srv(struct service *s, int ttl)
{
struct dns_srv_data *sd = (struct dns_srv_data *) mdns_buf;
int len = sizeof(*sd);
return;
sd->port = cpu_to_be16(s->port);
- dns_add_answer(TYPE_SRV, mdns_buf, len, announce_ttl);
+ dns_add_answer(TYPE_SRV, mdns_buf, len, ttl);
}
#define TOUT_LOOKUP 60
}
void
-service_reply_a(struct interface *iface, int type)
+service_reply_a(struct interface *iface, int type, int ttl)
{
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;
sa = (struct sockaddr_in *) ifa->ifa_addr;
addr = inet_ntoa(sa->sin_addr);
printf("Interface: %s\tAddress4: %s\n", ifa->ifa_name, addr);
- dns_add_answer(TYPE_A, (uint8_t *) &sa->sin_addr, 4, announce_ttl);
+ dns_add_answer(TYPE_A, (uint8_t *) &sa->sin_addr, 4, ttl);
}
if (ifa->ifa_addr->sa_family==AF_INET6) {
uint8_t ll_prefix[] = {0xfe, 0x80 };
if (!memcmp(&sa6->sin6_addr, &ll_prefix, 2)) {
if (inet_ntop(AF_INET6, &sa6->sin6_addr, buf, 64))
printf("Interface: %s\tAddress6: %s\n", ifa->ifa_name, buf);
- dns_add_answer(TYPE_AAAA, (uint8_t *) &sa6->sin6_addr, 16, announce_ttl);
+ dns_add_answer(TYPE_AAAA, (uint8_t *) &sa6->sin6_addr, 16, ttl);
}
}
}
}
void
-service_reply(struct interface *iface, const char *match)
+service_reply(struct interface *iface, const char *match, int ttl)
{
struct service *s;
continue;
dns_init_answer();
- service_add_ptr(service_name(s->service));
+ service_add_ptr(service_name(s->service), ttl);
dns_send_answer(iface, service);
dns_init_answer();
- service_add_srv(s);
+ service_add_srv(s, ttl);
if (s->txt && s->txt_len)
- dns_add_answer(TYPE_TXT, (uint8_t *) s->txt, s->txt_len, announce_ttl);
+ dns_add_answer(TYPE_TXT, (uint8_t *) s->txt, s->txt_len, ttl);
dns_send_answer(iface, host);
}
if (match)
return;
- service_reply_a(iface, TYPE_A);
+ service_reply_a(iface, TYPE_A, ttl);
}
void
continue;
s->t = 0;
dns_init_answer();
- service_add_ptr(s->service);
+ service_add_ptr(s->service, announce_ttl);
if (tcp)
dns_send_answer(iface, sdtcp);
else
dns_send_answer(iface, sdudp);
- service_reply(iface, s->service);
+ service_reply(iface, s->service, announce_ttl);
}
}