diff options
Diffstat (limited to 'Userland/Services/LookupServer')
-rw-r--r-- | Userland/Services/LookupServer/DNSName.cpp | 12 | ||||
-rw-r--r-- | Userland/Services/LookupServer/DNSName.h | 3 | ||||
-rw-r--r-- | Userland/Services/LookupServer/DNSPacket.cpp | 14 |
3 files changed, 17 insertions, 12 deletions
diff --git a/Userland/Services/LookupServer/DNSName.cpp b/Userland/Services/LookupServer/DNSName.cpp index ce9ad68f56..d3e8bf732a 100644 --- a/Userland/Services/LookupServer/DNSName.cpp +++ b/Userland/Services/LookupServer/DNSName.cpp @@ -26,6 +26,7 @@ */ #include "DNSName.h" +#include <AK/Vector.h> namespace LookupServer { @@ -69,4 +70,15 @@ DNSName DNSName::parse(const u8* data, size_t& offset, size_t max_offset, size_t } } +OutputStream& operator<<(OutputStream& stream, const DNSName& name) +{ + auto parts = name.as_string().split_view('.'); + for (auto& part : parts) { + stream << (u8)part.length(); + stream << part.bytes(); + } + stream << '\0'; + return stream; +} + } diff --git a/Userland/Services/LookupServer/DNSName.h b/Userland/Services/LookupServer/DNSName.h index 21d1b88e47..dc0fe7b5c2 100644 --- a/Userland/Services/LookupServer/DNSName.h +++ b/Userland/Services/LookupServer/DNSName.h @@ -27,6 +27,7 @@ #pragma once +#include <AK/Forward.h> #include <AK/String.h> namespace LookupServer { @@ -43,4 +44,6 @@ private: String m_name; }; +OutputStream& operator<<(OutputStream& stream, const DNSName&); + } diff --git a/Userland/Services/LookupServer/DNSPacket.cpp b/Userland/Services/LookupServer/DNSPacket.cpp index 0bf84d5ac3..b2658aa944 100644 --- a/Userland/Services/LookupServer/DNSPacket.cpp +++ b/Userland/Services/LookupServer/DNSPacket.cpp @@ -83,22 +83,12 @@ ByteBuffer DNSPacket::to_byte_buffer() const stream << ReadonlyBytes { &header, sizeof(header) }; for (auto& question : m_questions) { - auto parts = question.name().as_string().split('.'); - for (auto& part : parts) { - stream << (u8)part.length(); - stream << part.bytes(); - } - stream << '\0'; + stream << question.name(); stream << htons(question.record_type()); stream << htons(question.class_code()); } for (auto& answer : m_answers) { - auto parts = answer.name().as_string().split('.'); - for (auto& part : parts) { - stream << (u8)part.length(); - stream << part.bytes(); - } - stream << '\0'; + stream << answer.name(); stream << htons(answer.type()); stream << htons(answer.class_code()); stream << htonl(answer.ttl()); |