static int srv_callback(void *context, u_char *answer, int len, u_char *fullanswer) { struct srv_context *c = (struct srv_context *)context; if (parse_srv(c->host, c->hostlen, c->port, answer, len, fullanswer)) { ast_log(LOG_WARNING, "Failed to parse srv\n"); return -1; } if (!ast_strlen_zero(c->host)) return 1; return 0; }
dns_result ReadName(unsigned char *reader, size_t data_len, unsigned short type, unsigned char *dns, char *output_buf, size_t output_buf_size) { if (type < 1 || type > 256) { return DNS_RESULT_ERR; } switch (type) { case T_A: return parse_ip(reader, output_buf, output_buf_size); break; case T_NS: // printf("datalen: %d", data_len); parse_ns(reader, (unsigned short)data_len, dns, output_buf, output_buf_size); break; case T_CNAME: parse_cname(reader, dns, output_buf, output_buf_size, data_len); break; case T_SOA: parse_soa(reader, (unsigned short)data_len, dns, output_buf, output_buf_size); break; case T_PTR: parse_ptr(reader, (unsigned short)data_len, dns, output_buf, output_buf_size); break; case T_HINFO: parse_hinfo(reader, (unsigned short)data_len, output_buf, output_buf_size); break; case T_MX: parse_mx(reader, (unsigned short)data_len, dns, output_buf, output_buf_size); break; case T_TXT: return parse_txt(reader, data_len, output_buf, output_buf_size); break; case T_RP: parse_rp(reader, dns, output_buf, output_buf_size, data_len); break; case T_AFSDB: parse_afsdb(reader, dns, output_buf, output_buf_size, data_len); break; case T_AAAA: parse_aaaa(reader, output_buf, output_buf_size); break; case T_LOC: parse_loc(reader, output_buf, output_buf_size); break; case T_SRV: parse_srv(reader, dns, output_buf, output_buf_size, data_len); break; case T_NAPTR: return parse_naptr(reader, (unsigned short)data_len, output_buf, output_buf_size); break; case T_RRSIG: parse_rrsig(reader, dns, (unsigned short)data_len, output_buf, output_buf_size); break; case T_NSEC: parse_nsec(reader, dns, output_buf, output_buf_size, data_len); break; case T_DNSKEY: parse_dnskey(reader, (unsigned short)data_len, output_buf, output_buf_size); break; default: parse_default(reader, (unsigned short)data_len, output_buf, output_buf_size); break; } return DNS_RESULT_OK; }