#include <stdio.h>
#include <time.h>
-#include <uci.h>
-#include <uci_blob.h>
-
#include <libubus.h>
#include <libubox/vlist.h>
#include <libubox/uloop.h>
static int
service_timeout(struct service *s)
{
- time_t t = time(NULL);
+ time_t t = monotonic_time();
if (t - s->t <= TOUT_LOOKUP)
return 0;
}
void
-service_reply_a(struct interface *iface, int type, int ttl)
+service_reply_a(struct interface *iface, int ttl)
{
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
if (strcmp(ifa->ifa_name, iface->name))
continue;
- if (ifa->ifa_addr->sa_family==AF_INET) {
+ if (ifa->ifa_addr->sa_family == AF_INET) {
sa = (struct sockaddr_in *) ifa->ifa_addr;
dns_add_answer(TYPE_A, (uint8_t *) &sa->sin_addr, 4, ttl);
}
- if (ifa->ifa_addr->sa_family==AF_INET6) {
+ if (ifa->ifa_addr->sa_family == AF_INET6) {
uint8_t ll_prefix[] = {0xfe, 0x80 };
sa6 = (struct sockaddr_in6 *) ifa->ifa_addr;
if (!memcmp(&sa6->sin6_addr, &ll_prefix, 2))
if (match)
return;
- service_reply_a(iface, TYPE_A, ttl);
+ if (ttl)
+ service_reply_a(iface, ttl);
}
void
-service_announce_services(struct interface *iface, const char *service)
+service_announce_services(struct interface *iface, const char *service, int ttl)
{
struct service *s;
int tcp = 1;
if (!strstr(s->service, "._udp") && !tcp)
continue;
s->t = 0;
- dns_init_answer();
- 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, announce_ttl);
+ if (ttl) {
+ dns_init_answer();
+ service_add_ptr(s->service, ttl);
+ if (tcp)
+ dns_send_answer(iface, sdtcp);
+ else
+ dns_send_answer(iface, sdudp);
+ }
+ service_reply(iface, s->service, ttl);
}
}
void
-service_announce(struct interface *iface)
+service_announce(struct interface *iface, int ttl)
{
- service_announce_services(iface, sdudp);
- service_announce_services(iface, sdtcp);
+ service_announce_services(iface, sdudp, ttl);
+ service_announce_services(iface, sdtcp, ttl);
}
static void
void
service_init(int announce)
{
+ get_hostname();
+
service_init_announce = announce;
ubus_service_list(service_init_cb);
}