projects
/
project
/
mdnsd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dont delete records but set ttl to 1
[project/mdnsd.git]
/
dns.c
diff --git
a/dns.c
b/dns.c
index
fc93f4a
..
0d192ac
100644
(file)
--- a/
dns.c
+++ b/
dns.c
@@
-22,7
+22,6
@@
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
-#include <asm/byteorder.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include <stdlib.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include <stdlib.h>
@@
-69,12
+68,8
@@
dns_type_string(uint16_t type)
void
dns_send_question(struct interface *iface, const char *question, int type)
{
void
dns_send_question(struct interface *iface, const char *question, int type)
{
- static struct dns_header h = {
- .questions = cpu_to_be16(1),
- };
- static struct dns_question q = {
- .class = cpu_to_be16(1),
- };
+ static struct dns_header h;
+ static struct dns_question q;
static struct iovec iov[] = {
{
.iov_base = &h,
static struct iovec iov[] = {
{
.iov_base = &h,
@@
-90,7
+85,9
@@
dns_send_question(struct interface *iface, const char *question, int type)
};
int len;
};
int len;
- q.type = __cpu_to_be16(type);
+ h.questions = cpu_to_be16(1);
+ q.class = cpu_to_be16(1);
+ q.type = cpu_to_be16(type);
len = dn_comp(question, (void *) name_buffer, sizeof(name_buffer), NULL, NULL);
if (len < 1)
len = dn_comp(question, (void *) name_buffer, sizeof(name_buffer), NULL, NULL);
if (len < 1)
@@
-123,7
+120,7
@@
dns_init_answer(void)
}
void
}
void
-dns_add_answer(int type, const uint8_t *rdata, uint16_t rdlength)
+dns_add_answer(int type, const uint8_t *rdata, uint16_t rdlength
, int ttl
)
{
struct blob_attr *attr;
struct dns_answer *a;
{
struct blob_attr *attr;
struct dns_answer *a;
@@
-132,7
+129,7
@@
dns_add_answer(int type, const uint8_t *rdata, uint16_t rdlength)
a = blob_data(attr);
a->type = cpu_to_be16(type);
a->class = cpu_to_be16(1);
a = blob_data(attr);
a->type = cpu_to_be16(type);
a->class = cpu_to_be16(1);
- a->ttl = cpu_to_be32(
announce_
ttl);
+ a->ttl = cpu_to_be32(ttl);
a->rdlength = cpu_to_be16(rdlength);
memcpy(a + 1, rdata, rdlength);
a->rdlength = cpu_to_be16(rdlength);
memcpy(a + 1, rdata, rdlength);
@@
-152,8
+149,8
@@
dns_send_answer(struct interface *iface, const char *answer)
if (!dns_answer_cnt)
return;
if (!dns_answer_cnt)
return;
- h.answers =
__
cpu_to_be16(dns_answer_cnt);
- h.flags =
__
cpu_to_be16(0x8400);
+ h.answers = cpu_to_be16(dns_answer_cnt);
+ h.flags = cpu_to_be16(0x8400);
iov = alloca(sizeof(struct iovec) * ((dns_answer_cnt * 2) + 1));
iov = alloca(sizeof(struct iovec) * ((dns_answer_cnt * 2) + 1));
@@
-216,7
+213,7
@@
dns_consume_header(uint8_t **data, int *len)
return NULL;
while (endianess--) {
return NULL;
while (endianess--) {
- *swap =
__
be16_to_cpu(*swap);
+ *swap = be16_to_cpu(*swap);
swap++;
}
swap++;
}
@@
-237,7
+234,7
@@
dns_consume_question(uint8_t **data, int *len)
return NULL;
while (endianess--) {
return NULL;
while (endianess--) {
- *swap =
__
be16_to_cpu(*swap);
+ *swap = be16_to_cpu(*swap);
swap++;
}
swap++;
}
@@
-255,10
+252,10
@@
dns_consume_answer(uint8_t **data, int *len)
if (*len < sizeof(struct dns_answer))
return NULL;
if (*len < sizeof(struct dns_answer))
return NULL;
- a->type =
__
be16_to_cpu(a->type);
- a->class =
__
be16_to_cpu(a->class);
- a->ttl =
__
be32_to_cpu(a->ttl);
- a->rdlength =
__
be16_to_cpu(a->rdlength);
+ a->type = be16_to_cpu(a->type);
+ a->class = be16_to_cpu(a->class);
+ a->ttl = be32_to_cpu(a->ttl);
+ a->rdlength = be16_to_cpu(a->rdlength);
*len -= sizeof(struct dns_answer);
*data += sizeof(struct dns_answer);
*len -= sizeof(struct dns_answer);
*data += sizeof(struct dns_answer);
@@
-328,12
+325,12
@@
parse_question(struct interface *iface, char *name, struct dns_question *q)
switch (q->type) {
case TYPE_ANY:
if (!strcmp(name, mdns_hostname_local))
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);
break;
case TYPE_PTR:
service_announce_services(iface, name);
- service_reply(iface, name);
+ service_reply(iface, name
, announce_ttl
);
break;
case TYPE_AAAA:
break;
case TYPE_AAAA:
@@
-342,7
+339,7
@@
parse_question(struct interface *iface, char *name, struct dns_question *q)
if (host)
*host = '\0';
if (!strcmp(mdns_hostname, name))
if (host)
*host = '\0';
if (!strcmp(mdns_hostname, name))
- service_reply_a(iface, q->type);
+ service_reply_a(iface, q->type
, announce_ttl
);
break;
};
}
break;
};
}
@@
-383,11
+380,15
@@
dns_handle_packet(struct interface *iface, uint8_t *buffer, int len)
return;
while (h->answers-- > 0)
return;
while (h->answers-- > 0)
- parse_answer(iface, buffer, len, &b, &rlen, 1);
+ if (parse_answer(iface, buffer, len, &b, &rlen, 1))
+ return;
while (h->authority-- > 0)
while (h->authority-- > 0)
- parse_answer(iface, buffer, len, &b, &rlen, 0);
+ if (parse_answer(iface, buffer, len, &b, &rlen, 1))
+ return;
while (h->additional-- > 0)
while (h->additional-- > 0)
- parse_answer(iface, buffer, len, &b, &rlen, 1);
+ if (parse_answer(iface, buffer, len, &b, &rlen, 1))
+ return;
+
}
}