mirror of
https://github.com/cesanta/mongoose.git
synced 2025-01-02 03:27:52 +08:00
f443c64341
Until I read the doc and find how to limit the retention, otherwise it just eats all my ram and cpu and things start to fall apart. PUBLISHED_FROM=eb33fb44736f07b992270689217aca4af70513ff
72 lines
2.1 KiB
Plaintext
72 lines
2.1 KiB
Plaintext
=== DNS server
|
|
|
|
Disabled by default; enable with `-DMG_ENABLE_DNS_SERVER`.
|
|
|
|
==== mg_dns_create_reply()
|
|
|
|
[source,c]
|
|
----
|
|
struct mg_dns_reply mg_dns_create_reply(struct mbuf *io,
|
|
struct mg_dns_message *msg);
|
|
----
|
|
Create a DNS reply.
|
|
|
|
The reply will be based on an existing query message `msg`.
|
|
The query body will be appended to the output buffer.
|
|
"reply + recursion allowed" will be added to the message flags and
|
|
message's num_answers will be set to 0.
|
|
|
|
Answer records can be appended with `mg_dns_send_reply` or by lower
|
|
level function defined in the DNS API.
|
|
|
|
In order to send the reply use `mg_dns_send_reply`.
|
|
It's possible to use a connection's send buffer as reply buffers,
|
|
and it will work for both UDP and TCP connections.
|
|
|
|
Example:
|
|
|
|
```c
|
|
reply = mg_dns_create_reply(&nc->send_mbuf, msg);
|
|
for (i = 0; i < msg->num_questions; i++) {
|
|
rr = &msg->questions[i];
|
|
if (rr->rtype == MG_DNS_A_RECORD) {
|
|
mg_dns_reply_record(&reply, rr, 3600, &dummy_ip_addr, 4);
|
|
}
|
|
}
|
|
mg_dns_send_reply(nc, &reply);
|
|
```
|
|
|
|
==== mg_dns_reply_record()
|
|
|
|
[source,c]
|
|
----
|
|
int mg_dns_reply_record(struct mg_dns_reply *reply,
|
|
struct mg_dns_resource_record *question,
|
|
const char *name, int rtype, int ttl, const void *rdata,
|
|
size_t rdata_len);
|
|
----
|
|
Append a DNS reply record to the IO buffer and to the DNS message.
|
|
|
|
The message num_answers field will be incremented. It's caller's duty
|
|
to ensure num_answers is propertly initialized.
|
|
|
|
Returns -1 on error.
|
|
|
|
==== mg_dns_send_reply()
|
|
|
|
[source,c]
|
|
----
|
|
void mg_dns_send_reply(struct mg_connection *nc, struct mg_dns_reply *r);
|
|
----
|
|
Send a DNS reply through a connection.
|
|
|
|
The DNS data is stored in an IO buffer pointed by reply structure in `r`.
|
|
This function mutates the content of that buffer in order to ensure that
|
|
the DNS header reflects size and flags of the mssage, that might have been
|
|
updated either with `mg_dns_reply_record` or by direct manipulation of
|
|
`r->message`.
|
|
|
|
Once sent, the IO buffer will be trimmed unless the reply IO buffer
|
|
is the connection's send buffer and the connection is not in UDP mode.
|
|
|