mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 16:02:45 +00:00 
			
		
		
		
	 1793f51bc6
			
		
	
	
		1793f51bc6
		
	
	
	
	
		
			
			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());
 | |
|     }
 | |
| };
 |