X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fmdnsd.git;a=blobdiff_plain;f=service.c;h=1cf50e3b8119f4e9177c768a46e9bb16c5076c8f;hp=b8eb40608e3578689a9f7ef987bf5733a0a7c2c2;hb=9061708d9d39f011c5e78f922a5262ad571607cb;hpb=df298a725d5ef2c1aa5591775b316d0afecbf713 diff --git a/service.c b/service.c index b8eb406..1cf50e3 100644 --- a/service.c +++ b/service.c @@ -83,10 +83,9 @@ service_name(const char *domain) } static void -service_add_ptr(struct service *s) +service_add_ptr(const char *host) { unsigned char buffer[MAX_NAME_LEN]; - const char *host = service_name(s->service); int len = dn_comp(host, buffer, MAX_NAME_LEN, NULL, NULL); if (len < 1) @@ -96,31 +95,6 @@ service_add_ptr(struct service *s) } static void -service_add_ptr_c(const char *host) -{ - unsigned char buffer[MAX_NAME_LEN]; - int len = dn_comp(host, buffer, MAX_NAME_LEN, NULL, NULL); - - if (len < 1) - return; - - dns_add_answer(TYPE_PTR, buffer, len); -} - -static void -service_send_a(struct interface *iface) -{ - unsigned char buffer[MAX_NAME_LEN]; - char *host = service_name("local"); - int len = dn_comp(host, buffer, MAX_NAME_LEN, NULL, NULL); - - if (len < 1) - return; - - dns_add_answer(TYPE_A, (uint8_t *) &iface->v4_addr.s_addr, 4); -} - -static void service_add_srv(struct service *s) { unsigned char buffer[MAX_NAME_LEN]; @@ -164,7 +138,7 @@ service_reply_a(struct interface *iface, int type) return; dns_init_answer(); - service_send_a(iface); + dns_add_answer(TYPE_A, (uint8_t *) &iface->v4_addr.s_addr, 4); dns_send_answer(iface, service_name("local")); } @@ -186,7 +160,7 @@ service_reply(struct interface *iface, const char *match) continue; dns_init_answer(); - service_add_ptr(s); + service_add_ptr(service_name(s->service)); dns_send_answer(iface, service); dns_init_answer(); @@ -199,9 +173,7 @@ service_reply(struct interface *iface, const char *match) if (match) return; - dns_init_answer(); - service_send_a(iface); - dns_send_answer(iface, service_name("local")); + service_reply_a(iface, TYPE_A); } void @@ -222,7 +194,7 @@ service_announce_services(struct interface *iface, const char *service) continue; s->t = 0; dns_init_answer(); - service_add_ptr_c(s->service); + service_add_ptr(s->service); if (tcp) dns_send_answer(iface, sdtcp); else @@ -328,4 +300,5 @@ void service_cleanup(void) { vlist_flush(&services); + blob_buf_free(&b); }