END_TEST START_TEST(test_decode_response_with_high_trans_id) { char buf[512]; struct query q; int len; int ret; len = sizeof(buf); memset(&buf, 0, sizeof(buf)); ret = dns_decode(buf, len, &q, QR_ANSWER, answer_packet_high_trans_id, sizeof(answer_packet_high_trans_id)-1); fail_unless(ret == strlen(msgData), "Bad data length: %d, expected %d", ret, strlen(msgData)); fail_unless(strncmp(msgData, buf, strlen(msgData)) == 0, "Did not extract expected data"); fail_unless(q.id == 0x8539, "q.id was %08X instead of %08X!", q.id, 0x8539); }
static int get_request(void *req, char *output, t_conf *conf, struct sockaddr_in *sa) { char buffer[MAX_HOST_NAME_ENCODED + 1]; int len; char *data; data = JUMP_DNS_HDR(req); if (mystrnlen(data, MAX_HOST_NAME_ENCODED + 1) > MAX_HOST_NAME_ENCODED) return (-1); if (dns_decode((char *)req, data, buffer, conf, sa) == -1) return (-1); len = base64_decode((unsigned char *)output, buffer); output[len] = 0; return (len); }
END_TEST START_TEST(test_decode_query) { char buf[512]; char *domain; struct query q; struct encoder *enc; size_t len; memset(&q, 0, sizeof(struct query)); memset(&buf, 0, sizeof(buf)); q.id = 0; len = sizeof(query_packet) - 1; enc = get_base32_encoder(); dns_decode(buf, sizeof(buf), &q, QR_QUERY, query_packet, len); domain = strstr(q.name, topdomain); len = sizeof(buf); unpack_data((uint8_t *)buf, len, (uint8_t *)(q.name + 1), (int) (domain - q.name) - 1, enc); fail_unless(strncmp(buf, innerData, strlen(innerData)) == 0, "Did not extract expected host: '%s'", buf); fail_unless(strlen(buf) == strlen(innerData), "Bad host length: %d, expected %d: '%s'", strlen(buf), strlen(innerData), buf); }