From b20b689d17243eca277dd3488c9ed05dcd93aa6c Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sun, 11 Sep 2016 15:04:55 +0200 Subject: [PATCH] Improve decoding --- kernel/src/net/dns_layer.cpp | 24 +++++++++++++++++++----- kernel/src/net/udp_layer.cpp | 2 +- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/kernel/src/net/dns_layer.cpp b/kernel/src/net/dns_layer.cpp index fce777e7..e7cb1ab8 100644 --- a/kernel/src/net/dns_layer.cpp +++ b/kernel/src/net/dns_layer.cpp @@ -57,17 +57,31 @@ void network::dns::decode(network::interface_descriptor& /*interface*/, network: auto additional_rrs = switch_endian_16(dns_header->additional_rrs); logging::logf(logging::log_level::TRACE, "dns: Identification %h \n", size_t(identification)); - logging::logf(logging::log_level::TRACE, "dns: Answers %h \n", size_t(answers)); - logging::logf(logging::log_level::TRACE, "dns: Questions %h \n", size_t(questions)); - logging::logf(logging::log_level::TRACE, "dns: Authorithy RRs %h \n", size_t(authority_rrs)); - logging::logf(logging::log_level::TRACE, "dns: Additional RRs %h \n", size_t(additional_rrs)); + logging::logf(logging::log_level::TRACE, "dns: Answers %u \n", size_t(answers)); + logging::logf(logging::log_level::TRACE, "dns: Questions %u \n", size_t(questions)); + logging::logf(logging::log_level::TRACE, "dns: Authorithy RRs %u \n", size_t(authority_rrs)); + logging::logf(logging::log_level::TRACE, "dns: Additional RRs %u \n", size_t(additional_rrs)); auto flags = dns_header->flags; if(flags.qr){ logging::logf(logging::log_level::TRACE, "dns: Query\n"); } else { - logging::logf(logging::log_level::TRACE, "dns: Response\n"); + auto response_code = flags.rcode; + + if(response_code == 0x0){ + logging::logf(logging::log_level::TRACE, "dns: Response OK\n"); + } else if(response_code == 0x1){ + logging::logf(logging::log_level::TRACE, "dns: Format Error\n"); + } else if(response_code == 0x2){ + logging::logf(logging::log_level::TRACE, "dns: Server Failure\n"); + } else if(response_code == 0x3){ + logging::logf(logging::log_level::TRACE, "dns: Name Error\n"); + } else if(response_code == 0x4){ + logging::logf(logging::log_level::TRACE, "dns: Not Implemented\n"); + } else if(response_code == 0x5){ + logging::logf(logging::log_level::TRACE, "dns: Refused\n"); + } } //TODO diff --git a/kernel/src/net/udp_layer.cpp b/kernel/src/net/udp_layer.cpp index cdf09185..4971e4f5 100644 --- a/kernel/src/net/udp_layer.cpp +++ b/kernel/src/net/udp_layer.cpp @@ -104,7 +104,7 @@ void network::udp::decode(network::interface_descriptor& interface, network::eth packet.index += sizeof(header); - if(target_port == 53){ + if(source_port == 53){ network::dns::decode(interface, packet); } }