diff --git a/AK/IPv4Address.h b/AK/IPv4Address.h new file mode 100644 index 0000000000..f39aa2cb0e --- /dev/null +++ b/AK/IPv4Address.h @@ -0,0 +1,58 @@ +#pragma once + +#include + +namespace AK { + +class [[gnu::packed]] IPv4Address +{ +public: + IPv4Address() {} + IPv4Address(const byte data[4]) + { + m_data[0] = data[0]; + m_data[1] = data[1]; + m_data[2] = data[2]; + m_data[3] = data[3]; + } + IPv4Address(byte a, byte b, byte c, byte d) + { + m_data[0] = a; + m_data[1] = b; + m_data[2] = c; + m_data[3] = d; + } + + byte operator[](int i) const + { + ASSERT(i >= 0 && i < 4); + return m_data[i]; + } + + String to_string() const + { + return String::format("%u.%u.%u.%u", m_data[0], m_data[1], m_data[2], m_data[3]); + } + + bool operator==(const IPv4Address& other) const { return m_data_as_dword == other.m_data_as_dword; } + bool operator!=(const IPv4Address& other) const { return m_data_as_dword != other.m_data_as_dword; } + +private: + union { + byte m_data[4]; + dword m_data_as_dword { 0 }; + }; +}; + +static_assert(sizeof(IPv4Address) == 4); + +template<> +struct Traits { + static unsigned hash(const IPv4Address& address) { return string_hash((const char*)&address, sizeof(address)); } + static void dump(const IPv4Address& address) { kprintf("%s", address.to_string().characters()); } +}; + +} + +using AK::IPv4Address; + diff --git a/Kernel/Net/IPv4.h b/Kernel/Net/IPv4.h index 3463bf3cee..aa802df6cb 100644 --- a/Kernel/Net/IPv4.h +++ b/Kernel/Net/IPv4.h @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -13,58 +14,6 @@ enum class IPv4Protocol : word { NetworkOrdered internet_checksum(const void*, size_t); -class [[gnu::packed]] IPv4Address -{ -public: - IPv4Address() {} - IPv4Address(const byte data[4]) - { - m_data[0] = data[0]; - m_data[1] = data[1]; - m_data[2] = data[2]; - m_data[3] = data[3]; - } - IPv4Address(byte a, byte b, byte c, byte d) - { - m_data[0] = a; - m_data[1] = b; - m_data[2] = c; - m_data[3] = d; - } - - byte operator[](int i) const - { - ASSERT(i >= 0 && i < 4); - return m_data[i]; - } - - String to_string() const - { - return String::format("%u.%u.%u.%u", m_data[0], m_data[1], m_data[2], m_data[3]); - } - - bool operator==(const IPv4Address& other) const { return m_data_as_dword == other.m_data_as_dword; } - bool operator!=(const IPv4Address& other) const { return m_data_as_dword != other.m_data_as_dword; } - -private: - union { - byte m_data[4]; - dword m_data_as_dword { 0 }; - }; -}; - -static_assert(sizeof(IPv4Address) == 4); - -namespace AK { - -template<> -struct Traits { - static unsigned hash(const IPv4Address& address) { return string_hash((const char*)&address, sizeof(address)); } - static void dump(const IPv4Address& address) { kprintf("%s", address.to_string().characters()); } -}; - -} - class [[gnu::packed]] IPv4Packet { public: diff --git a/LibCore/CSocketAddress.h b/LibCore/CSocketAddress.h index 33ad5c0253..019a0869fb 100644 --- a/LibCore/CSocketAddress.h +++ b/LibCore/CSocketAddress.h @@ -1,6 +1,6 @@ #pragma once -#include +#include class CSocketAddress { public: