CSocketAddress.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <AK/IPv4Address.h>
  3. class CSocketAddress {
  4. public:
  5. enum class Type {
  6. Invalid,
  7. IPv4,
  8. Local
  9. };
  10. CSocketAddress() {}
  11. CSocketAddress(const IPv4Address& address)
  12. : m_type(Type::IPv4)
  13. , m_ipv4_address(address)
  14. {
  15. }
  16. static CSocketAddress local(const String& address)
  17. {
  18. CSocketAddress addr;
  19. addr.m_type = Type::Local;
  20. addr.m_local_address = address;
  21. return addr;
  22. }
  23. Type type() const { return m_type; }
  24. bool is_valid() const { return m_type != Type::Invalid; }
  25. IPv4Address ipv4_address() const { return m_ipv4_address; }
  26. String to_string() const
  27. {
  28. switch (m_type) {
  29. case Type::IPv4:
  30. return m_ipv4_address.to_string();
  31. case Type::Local:
  32. return m_local_address;
  33. default:
  34. return "[CSocketAddress]";
  35. }
  36. }
  37. private:
  38. Type m_type { Type::Invalid };
  39. IPv4Address m_ipv4_address;
  40. String m_local_address;
  41. };
  42. inline const LogStream& operator<<(const LogStream& stream, const CSocketAddress& value)
  43. {
  44. return stream << value;
  45. }