diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-19 03:42:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-19 03:42:46 +0100 |
| commit | 3bc2fca2c9beff13586b8bf3089ce439acb09de1 (patch) | |
| tree | 4cf13eb975ef8a133ca0b28de29814c94f7daccc /dev/lib/net | |
| parent | c9fd682f3662e0eec09de49a36a4ea199656da34 (diff) | |
| parent | b0292253ca9732b228ef505e3e719ae05c07c10c (diff) | |
Merge pull request #12 from amlel-el-mahrouss/develop
New OCL Distrib helpers.
Diffstat (limited to 'dev/lib/net')
| -rw-r--r-- | dev/lib/net/modem.hpp | 29 | ||||
| -rw-r--r-- | dev/lib/net/url.hpp | 22 |
2 files changed, 36 insertions, 15 deletions
diff --git a/dev/lib/net/modem.hpp b/dev/lib/net/modem.hpp index 7c07191..5bcf3fd 100644 --- a/dev/lib/net/modem.hpp +++ b/dev/lib/net/modem.hpp @@ -16,16 +16,18 @@ #include <string> #include <cstddef> -#define OCL_MODEM_INTERFACE : public ocl::net::basic_modem +#define OCL_MODEM_INTERFACE : public ocl::net::modem namespace ocl::net { - class basic_modem; - - typedef int64_t socket_type; + class modem; + using socket_type = int64_t; + + /// ============================================================================= /// @brief Modem container concept, a container to read and write on a network stream. - class basic_modem + /// ============================================================================= + class modem final { private: socket_type fd_{}; @@ -35,20 +37,25 @@ namespace ocl::net public: const bool& bad{bad_}; - explicit basic_modem() = default; + explicit modem() = default; - virtual ~basic_modem() + ~modem() { this->destroy(); } - basic_modem& operator=(const basic_modem&) = delete; - basic_modem(const basic_modem&) = delete; + modem& operator=(const modem&) = delete; + modem(const modem&) = delete; static constexpr auto local_address_ip4 = "127.0.0.1"; static constexpr auto local_address_ip6 = "::1"; static constexpr const auto backlog_count = 5U; + /// ============================================================================= + /// @brief Check if the modem is valid. + /// @return true if valid, false otherwise. + /// ============================================================================= + bool is_valid() const noexcept { return this->fd_ != -1 && !this->bad_; @@ -107,7 +114,7 @@ namespace ocl::net } template <int32_t af, int32_t kind, int32_t port> - bool construct(const char* addr = basic_modem::local_address_ip4, const bool& is_server = false) noexcept + bool construct(const char* addr = modem::local_address_ip4, const bool& is_server = false) noexcept { static_assert(af != 0, "Address family is zero"); static_assert(kind != 0, "Kind is zero"); @@ -139,7 +146,7 @@ namespace ocl::net bad_ = ret == -1; - ::listen(fd_, basic_modem::backlog_count); + ::listen(fd_, modem::backlog_count); return bad_ == false; } diff --git a/dev/lib/net/url.hpp b/dev/lib/net/url.hpp index b77e790..e4eca2a 100644 --- a/dev/lib/net/url.hpp +++ b/dev/lib/net/url.hpp @@ -33,6 +33,7 @@ namespace ocl::net { url_protocol m_protocol_{url_protocol::invalid}; std::basic_stringstream<char_type> m_ss_{}; + std::basic_string<char_type> m_port_{""}; public: explicit basic_url(const std::basic_string<char_type>& protocol) @@ -65,6 +66,12 @@ namespace ocl::net if (in.empty()) return *this; + if (in.starts_with(":")) + { + m_port_ = in.substr(1); + return *this; + } + m_ss_ += in; return *this; } @@ -81,14 +88,21 @@ namespace ocl::net } public: - bool protocol_exists() + auto protocol() const noexcept { - return this->m_protocol_ != url_protocol::bad || this->m_protocol_ != url_protocol::invalid; + return this->m_protocol_; } - bool is_valid() + auto port() const noexcept { - return m_ss_.size() > 0 && this->protocol_exists(); + return this->m_port_; + } + + auto is_valid() const noexcept + { + return m_ss_.size() > 0 && this->m_protocol_ != url_protocol::bad || this->m_protocol_ != url_protocol::invalid; } }; + + using url = basic_url<char>; } // namespace ocl::net |
