diff options
author | defanor <defanor@uberspace.net> | 2020-11-14 15:23:22 +0300 |
---|---|---|
committer | defanor <defanor@uberspace.net> | 2020-11-14 17:19:55 +0300 |
commit | 37e8a87ea675b1708d854d39839ee02fcbb9f3aa (patch) | |
tree | f3d0fe29660d93327e6022f1c6cea9c3338c6154 /src/rexmpp_dns.c | |
parent | 3749774b44405f7cdafcd3bb13c7ecbcf34a2f26 (diff) |
Remove the c-ares dependency
Diffstat (limited to 'src/rexmpp_dns.c')
-rw-r--r-- | src/rexmpp_dns.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/rexmpp_dns.c b/src/rexmpp_dns.c new file mode 100644 index 0000000..6a8e743 --- /dev/null +++ b/src/rexmpp_dns.c @@ -0,0 +1,36 @@ +/** + @file rexmpp_dns.c + @brief DNS helper functions + @author defanor <defanor@uberspace.net> + @date 2020 + @copyright MIT license. +*/ + +#include "rexmpp_dns.h" +#include <memory.h> + +/* https://tools.ietf.org/html/rfc1035#section-3.1 */ +int rexmpp_parse_srv (char *in, int in_len, struct rexmpp_dns_srv *out) { + int i; + char *name; + if (in_len < 7 || in_len > 255 + 6) { + return -1; + } + out->priority = in[0] * 0x100 + in[1]; + out->weight = in[2] * 0x100 + in[3]; + out->port = in[4] * 0x100 + in[5]; + name = in + 6; + i = 0; + while (name[i]) { + if (i + name[i] < 255) { + memcpy(out->target + i, name + i + 1, name[i]); + i += name[i]; + out->target[i] = '.'; + i++; + out->target[i] = '\0'; + } else { + return -1; + } + } + return 0; +} |