forked from Bananymous/banan-os
resolver: dump errors to debug output
This commit is contained in:
parent
acf79570ef
commit
f117027175
|
@ -1,4 +1,5 @@
|
||||||
#include <BAN/ByteSpan.h>
|
#include <BAN/ByteSpan.h>
|
||||||
|
#include <BAN/Debug.h>
|
||||||
#include <BAN/Endianness.h>
|
#include <BAN/Endianness.h>
|
||||||
#include <BAN/HashMap.h>
|
#include <BAN/HashMap.h>
|
||||||
#include <BAN/IPv4.h>
|
#include <BAN/IPv4.h>
|
||||||
|
@ -83,7 +84,7 @@ bool send_dns_query(int socket, BAN::StringView domain, uint16_t id)
|
||||||
nameserver.sin_addr.s_addr = inet_addr("8.8.8.8");
|
nameserver.sin_addr.s_addr = inet_addr("8.8.8.8");
|
||||||
if (sendto(socket, &request, sizeof(DNSPacket) + idx, 0, (sockaddr*)&nameserver, sizeof(nameserver)) == -1)
|
if (sendto(socket, &request, sizeof(DNSPacket) + idx, 0, (sockaddr*)&nameserver, sizeof(nameserver)) == -1)
|
||||||
{
|
{
|
||||||
perror("sendto");
|
dprintln("sendto: {}", strerror(errno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,19 +98,19 @@ BAN::Optional<DNSEntry> read_dns_response(int socket, uint16_t id)
|
||||||
ssize_t nrecv = recvfrom(socket, buffer, sizeof(buffer), 0, nullptr, nullptr);
|
ssize_t nrecv = recvfrom(socket, buffer, sizeof(buffer), 0, nullptr, nullptr);
|
||||||
if (nrecv == -1)
|
if (nrecv == -1)
|
||||||
{
|
{
|
||||||
perror("recvfrom");
|
dprintln("recvfrom: {}", strerror(errno));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
DNSPacket& reply = *reinterpret_cast<DNSPacket*>(buffer);
|
DNSPacket& reply = *reinterpret_cast<DNSPacket*>(buffer);
|
||||||
if (reply.identification != id)
|
if (reply.identification != id)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Reply to invalid packet\n");
|
dprintln("Reply to invalid packet");
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
if (reply.flags & 0x0F)
|
if (reply.flags & 0x0F)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "DNS error (rcode %u)\n", (unsigned)(reply.flags & 0xF));
|
dprintln("DNS error (rcode {})", (unsigned)(reply.flags & 0xF));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,12 +125,12 @@ BAN::Optional<DNSEntry> read_dns_response(int socket, uint16_t id)
|
||||||
DNSAnswer& answer = *reinterpret_cast<DNSAnswer*>(&reply.data[idx]);
|
DNSAnswer& answer = *reinterpret_cast<DNSAnswer*>(&reply.data[idx]);
|
||||||
if (answer.type() != QTYPE::A)
|
if (answer.type() != QTYPE::A)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Not A record\n");
|
dprintln("Not A record");
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
if (answer.data_len() != 4)
|
if (answer.data_len() != 4)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "corrupted package\n");
|
dprintln("corrupted package");
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +146,7 @@ int create_service_socket()
|
||||||
int socket = ::socket(AF_UNIX, SOCK_SEQPACKET, 0);
|
int socket = ::socket(AF_UNIX, SOCK_SEQPACKET, 0);
|
||||||
if (socket == -1)
|
if (socket == -1)
|
||||||
{
|
{
|
||||||
perror("socket");
|
dprintln("socket: {}", strerror(errno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,21 +155,21 @@ int create_service_socket()
|
||||||
strcpy(addr.sun_path, "/tmp/resolver.sock");
|
strcpy(addr.sun_path, "/tmp/resolver.sock");
|
||||||
if (bind(socket, (sockaddr*)&addr, sizeof(addr)) == -1)
|
if (bind(socket, (sockaddr*)&addr, sizeof(addr)) == -1)
|
||||||
{
|
{
|
||||||
perror("bind");
|
dprintln("bind: {}", strerror(errno));
|
||||||
close(socket);
|
close(socket);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chmod("/tmp/resolver.sock", 0777) == -1)
|
if (chmod("/tmp/resolver.sock", 0777) == -1)
|
||||||
{
|
{
|
||||||
perror("chmod");
|
dprintln("chmod: {}", strerror(errno));
|
||||||
close(socket);
|
close(socket);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (listen(socket, 10) == -1)
|
if (listen(socket, 10) == -1)
|
||||||
{
|
{
|
||||||
perror("listen");
|
dprintln("listen: {}", strerror(errno));
|
||||||
close(socket);
|
close(socket);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -182,7 +183,7 @@ BAN::Optional<BAN::String> read_service_query(int socket)
|
||||||
ssize_t nrecv = recv(socket, buffer, sizeof(buffer), 0);
|
ssize_t nrecv = recv(socket, buffer, sizeof(buffer), 0);
|
||||||
if (nrecv == -1)
|
if (nrecv == -1)
|
||||||
{
|
{
|
||||||
perror("recv");
|
dprintln("recv: {}", strerror(errno));
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
buffer[nrecv] = '\0';
|
buffer[nrecv] = '\0';
|
||||||
|
@ -200,7 +201,7 @@ int main(int, char**)
|
||||||
int dns_socket = socket(AF_INET, SOCK_DGRAM, 0);
|
int dns_socket = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
if (dns_socket == -1)
|
if (dns_socket == -1)
|
||||||
{
|
{
|
||||||
perror("socket");
|
dprintln("socket: {}", strerror(errno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +212,7 @@ int main(int, char**)
|
||||||
int client = accept(service_socket, nullptr, nullptr);
|
int client = accept(service_socket, nullptr, nullptr);
|
||||||
if (client == -1)
|
if (client == -1)
|
||||||
{
|
{
|
||||||
perror("accept");
|
dprintln("accept: {}", strerror(errno));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,7 +253,7 @@ int main(int, char**)
|
||||||
memcpy(storage.ss_storage, &result->address.raw, sizeof(result->address.raw));
|
memcpy(storage.ss_storage, &result->address.raw, sizeof(result->address.raw));
|
||||||
|
|
||||||
if (send(client, &storage, sizeof(storage), 0) == -1)
|
if (send(client, &storage, sizeof(storage), 0) == -1)
|
||||||
perror("send");
|
dprintln("send: {}", strerror(errno));
|
||||||
|
|
||||||
close(client);
|
close(client);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue