From dad7e99d9575c306493a310f01845b77320d8ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eckl=2C=20M=C3=A1t=C3=A9?= <ecklm94@gmail.com> Date: Fri, 27 May 2016 13:01:17 +0200 Subject: [PATCH] =?UTF-8?q?Adatb=C3=A1zisb=C3=B3l=20nem=20t=C3=A1mogatott?= =?UTF-8?q?=20t=C3=ADpus=20kiv=C3=A9tel=20(#11)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/dns_answer.h | 1 + include/dns_message.h | 1 + src/dns_answer.cpp | 4 ++-- src/dns_message.cpp | 4 ++-- src/dns_server.cpp | 4 ++++ 5 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/dns_answer.h b/include/dns_answer.h index 5a71039..9e6972f 100644 --- a/include/dns_answer.h +++ b/include/dns_answer.h @@ -88,6 +88,7 @@ public: * The format should be treated on the side of the caller. * @param new_rdata Bytes to the rdata to store * @param new_rdata_len Number of bytes in new_rdata + * @throws server_error when unsupported DNS type is set */ void set_rdata(const char *new_rdatas); diff --git a/include/dns_message.h b/include/dns_message.h index 6c9979f..0222b14 100644 --- a/include/dns_message.h +++ b/include/dns_message.h @@ -37,6 +37,7 @@ public: * Adds error parts to the DNS message. * This means a pseudo record to the additional section. * After this, the message should be sent. + * Sets FORMERR flag in the additional section. * @param msg The textual message to add to the additional section. */ void set_error(const char *msg); diff --git a/src/dns_answer.cpp b/src/dns_answer.cpp index b43ad95..bc0d64c 100644 --- a/src/dns_answer.cpp +++ b/src/dns_answer.cpp @@ -1,5 +1,6 @@ #include "../include/dns_answer.h" #include "../include/dns_types.h" +#include "../include/exceptions/server_error.h" #include <string.h> dns_answer::dns_answer(const dns_answer& other) : dns_question(other), ttl(other.ttl), rd_length(other.rd_length) { @@ -39,8 +40,7 @@ void dns_answer::set_rdata(const char* new_rdata) { treat_TXT_rdata(new_rdata); break; default: - // May throw some exception... - return; + throw server_error("This record type is not supported."); } } diff --git a/src/dns_message.cpp b/src/dns_message.cpp index 2899ef6..1a809a3 100644 --- a/src/dns_message.cpp +++ b/src/dns_message.cpp @@ -19,9 +19,9 @@ void dns_message_em::set_error(const char* msg) { err_report.set_name("error.dns"); err_report.set_type(DNS_TYPE_TXT); err_report.set_ttl(300); - err_report.set_rdata(msg); + err_report.set_rdata(msg); // No exception may occure (TXT must be supported) add_additional(err_report); -// header.set_flag(DNS_FLAG_RCODE_FORMERR); // In case it has not been set yet. + header.set_flag(DNS_FLAG_RCODE_FORMERR); // In case it has not been set yet. } void dns_message_em::add_answer(const dns_answer& new_answer) { diff --git a/src/dns_server.cpp b/src/dns_server.cpp index 0e09876..1df2868 100644 --- a/src/dns_server.cpp +++ b/src/dns_server.cpp @@ -119,6 +119,10 @@ void dns_server::serve_one_request() { { log_on_demand(LOG_ERR, ex.what()); } + catch(server_error err) + { + resp.set_error(err.what()); + } //--- this->socket.sendto_wp(resp, 0, (sockaddr*) &sender, slen); -- GitLab