diff options
Diffstat (limited to 'Userland/Services/LookupServer/DNSAnswer.h')
-rw-r--r-- | Userland/Services/LookupServer/DNSAnswer.h | 47 |
1 files changed, 41 insertions, 6 deletions
diff --git a/Userland/Services/LookupServer/DNSAnswer.h b/Userland/Services/LookupServer/DNSAnswer.h index d5dffe597c..a015a050d8 100644 --- a/Userland/Services/LookupServer/DNSAnswer.h +++ b/Userland/Services/LookupServer/DNSAnswer.h @@ -7,21 +7,35 @@ #pragma once #include "DNSName.h" +#include <AK/Format.h> #include <AK/String.h> #include <AK/Types.h> namespace LookupServer { +enum class DNSRecordType : u16 { + A = 1, + NS = 2, + CNAME = 5, + SOA = 6, + PTR = 12, + MX = 15, +}; + +enum class DNSRecordClass : u16 { + IN = 1 +}; + #define MDNS_CACHE_FLUSH 0x8000 class DNSAnswer { public: - DNSAnswer(const DNSName& name, u16 type, u16 class_code, u32 ttl, const String& record_data, bool mdns_cache_flush); + DNSAnswer(const DNSName& name, DNSRecordType type, DNSRecordClass class_code, u32 ttl, const String& record_data, bool mdns_cache_flush); const DNSName& name() const { return m_name; } - u16 type() const { return m_type; } - u16 class_code() const { return m_class_code; } - u16 raw_class_code() const { return m_class_code | (m_mdns_cache_flush ? MDNS_CACHE_FLUSH : 0); } + DNSRecordType type() const { return m_type; } + DNSRecordClass class_code() const { return m_class_code; } + u16 raw_class_code() const { return (u16)m_class_code | (m_mdns_cache_flush ? MDNS_CACHE_FLUSH : 0); } u32 ttl() const { return m_ttl; } const String& record_data() const { return m_record_data; } bool mdns_cache_flush() const { return m_mdns_cache_flush; } @@ -30,8 +44,8 @@ public: private: DNSName m_name; - u16 m_type { 0 }; - u16 m_class_code { 0 }; + DNSRecordType m_type { 0 }; + DNSRecordClass m_class_code { 0 }; u32 m_ttl { 0 }; time_t m_expiration_time { 0 }; String m_record_data; @@ -39,3 +53,24 @@ private: }; } +template<> +struct AK::Formatter<LookupServer::DNSRecordType> : StandardFormatter { + Formatter() = default; + explicit Formatter(StandardFormatter formatter) + : StandardFormatter(formatter) + { + } + + void format(AK::FormatBuilder&, LookupServer::DNSRecordType); +}; + +template<> +struct AK::Formatter<LookupServer::DNSRecordClass> : StandardFormatter { + Formatter() = default; + explicit Formatter(StandardFormatter formatter) + : StandardFormatter(formatter) + { + } + + void format(AK::FormatBuilder&, LookupServer::DNSRecordClass); +}; |