mirror of https://github.com/Chizi123/dnscomp.git

Joel Grunbaum
2022-05-23 ab157baf15984b6e967c3fadf9784e3a7c92fc36
dns.c
@@ -69,6 +69,8 @@
    char* rdata;
};
// Test server dns_ip as IPv4 string for hostname
// Writes received packet to buf, which is supplied and returns time for request
struct timespec resolve(unsigned char* buf, char* hostname, char* dns_ip, int query_type)
{
    int s, i;
@@ -112,14 +114,17 @@
    //send request
    // return less than 0 is a fail
    clock_gettime(CLOCK_MONOTONIC, &start);
    sendto(s,(char*)buf, sizeof(struct DNS_HEADER)+strlen((const char*)qname)+1+sizeof(struct QUESTION), 0, (struct sockaddr*)&dest, sizeof(dest));
    i = sendto(s,(char*)buf, sizeof(struct DNS_HEADER)+strlen((const char*)qname)+1+sizeof(struct QUESTION), 0, (struct sockaddr*)&dest, sizeof(dest));
    //receive response
    //negative return is a fail
    i = sizeof(dest);
    i = recvfrom(s, (char*)buf, 65536, 0, (struct sockaddr*)&dest, (socklen_t*)&i);
    clock_gettime(CLOCK_MONOTONIC, &end);
    if (i < 0) {
        //receive response
        //negative return is a fail
        i = sizeof(dest);
        i = recvfrom(s, (char*)buf, 65536, 0, (struct sockaddr*)&dest, (socklen_t*)&i);
        clock_gettime(CLOCK_MONOTONIC, &end);
    }
    // Make sure packet was returned
    if (i == -1)
        total.tv_nsec = -1;
    else
@@ -132,6 +137,7 @@
    return total;
}
// Print dns packet content, not terribly reliable but works for testing resolve with A requests
void print_packet(unsigned char* buf)
{
    struct RES_RECORD answers[20], auth[20], addit[20];
@@ -242,7 +248,8 @@
    }
}
// convert from dot format to dns format
// eg google.com to 6google3com
void change_to_DNS_name_format(unsigned char* dns, unsigned char* host)
{
    int lock = 0;
@@ -262,6 +269,7 @@
    *dns++ = '\0';
}
// Convert from dns to dot format
char* read_name(unsigned char* reader, unsigned char* buffer, int* count)
{
    char* name;