mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:38:11 +00:00

Previously, a DNS packet containing an invalid name would be returned with an empty name. With this change, an error is returned if any error is encountered during parsing.
48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2021, Sergey Bugaev <bugaevc@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/DeprecatedString.h>
|
|
#include <AK/Forward.h>
|
|
|
|
namespace DNS {
|
|
|
|
class Name {
|
|
public:
|
|
Name() = default;
|
|
Name(DeprecatedString const&);
|
|
|
|
static ErrorOr<Name> parse(ReadonlyBytes data, size_t& offset, size_t recursion_level = 0);
|
|
|
|
size_t serialized_size() const;
|
|
DeprecatedString const& as_string() const { return m_name; }
|
|
ErrorOr<void> write_to_stream(Stream&) const;
|
|
|
|
void randomize_case();
|
|
|
|
bool operator==(Name const& other) const { return Traits::equals(*this, other); }
|
|
|
|
class Traits : public AK::Traits<Name> {
|
|
public:
|
|
static unsigned hash(Name const& name);
|
|
static bool equals(Name const&, Name const&);
|
|
};
|
|
|
|
private:
|
|
DeprecatedString m_name;
|
|
};
|
|
|
|
}
|
|
|
|
template<>
|
|
struct AK::Formatter<DNS::Name> : Formatter<StringView> {
|
|
ErrorOr<void> format(FormatBuilder& builder, DNS::Name const& value)
|
|
{
|
|
return Formatter<StringView>::format(builder, value.as_string());
|
|
}
|
|
};
|