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