/* ------------------------------------------- Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. ------------------------------------------- */ #pragma once #include #include #include #include namespace Kernel { class RawIPAddress6; class RawIPAddress; class IPFactory; class RawIPAddress final { private: explicit RawIPAddress(char bytes[4]); ~RawIPAddress() = default; RawIPAddress& operator=(const RawIPAddress&) = delete; RawIPAddress(const RawIPAddress&) = default; public: Char* Address(); Char& operator[](const Size& index); BOOL operator==(const RawIPAddress& ipv6); BOOL operator!=(const RawIPAddress& ipv6); private: Char fAddr[4]; friend IPFactory; // it is the one creating these addresses, thus this // is why the constructors are private. }; /** * @brief IPv6 address. */ class RawIPAddress6 final { private: explicit RawIPAddress6(char Bytes[8]); ~RawIPAddress6() = default; RawIPAddress6& operator=(const RawIPAddress6&) = delete; RawIPAddress6(const RawIPAddress6&) = default; public: char* Address() { return fAddr; } char& operator[](const Size& index); bool operator==(const RawIPAddress6& ipv6); bool operator!=(const RawIPAddress6& ipv6); private: char fAddr[8]; friend IPFactory; }; /** * @brief IP Creation helpers */ class IPFactory final { public: static ErrorOr ToKString(Ref& ipv6); static ErrorOr ToKString(Ref& ipv4); static bool IpCheckVersion4(const Char* ip); }; } // namespace Kernel