mirror of
https://github.com/ZmnSCPxj/clboss.git
synced 2026-08-15 12:50:42 +02:00
82 lines
1.8 KiB
C++
82 lines
1.8 KiB
C++
#ifndef NET_IPADDRORONION_HPP
|
|
#define NET_IPADDRORONION_HPP
|
|
|
|
#include<memory>
|
|
#include<string>
|
|
|
|
namespace Net { class IPAddr; }
|
|
namespace Net { class IPAddrOrOnion; }
|
|
std::ostream& operator<<(std::ostream&, Net::IPAddrOrOnion const&);
|
|
|
|
namespace Net {
|
|
|
|
/** class Net::IPAddrOrOnion
|
|
*
|
|
* @brief representation for an access point for a
|
|
* node.
|
|
*/
|
|
class IPAddrOrOnion {
|
|
private:
|
|
class Impl;
|
|
std::shared_ptr<Impl> pimpl;
|
|
|
|
explicit
|
|
IPAddrOrOnion(std::shared_ptr<Impl> pimpl_);
|
|
|
|
public:
|
|
/* Set to IP 127.0.0.1 */
|
|
IPAddrOrOnion();
|
|
|
|
/* Autodetect string. */
|
|
explicit
|
|
IPAddrOrOnion(std::string const&);
|
|
|
|
IPAddrOrOnion(IPAddrOrOnion const&) =default;
|
|
IPAddrOrOnion(IPAddrOrOnion&&) =default;
|
|
IPAddrOrOnion& operator=(IPAddrOrOnion const&) =default;
|
|
IPAddrOrOnion& operator=(IPAddrOrOnion&&) =default;
|
|
|
|
/* Explicit factories. */
|
|
static
|
|
IPAddrOrOnion from_ip_addr(IPAddr);
|
|
static
|
|
IPAddrOrOnion from_ip_addr_v4(std::string const&);
|
|
static
|
|
IPAddrOrOnion from_ip_addr_v6(std::string const&);
|
|
static
|
|
IPAddrOrOnion from_onion(std::string const&);
|
|
|
|
/* Printing. */
|
|
explicit
|
|
operator std::string() const;
|
|
|
|
/* Destructuring. */
|
|
bool is_ip_addr() const { return !is_onion(); }
|
|
void to_ip_addr(IPAddr& ip) const;
|
|
bool is_ip_addr(IPAddr& ip) const {
|
|
auto rv = is_ip_addr();
|
|
if (rv)
|
|
to_ip_addr(ip);
|
|
return rv;
|
|
}
|
|
bool is_onion() const;
|
|
void to_onion(std::string& onion) const;
|
|
bool is_onion(std::string& onion) const {
|
|
auto rv = is_onion();
|
|
if (rv)
|
|
to_onion(onion);
|
|
return rv;
|
|
}
|
|
|
|
/* Equality and inequality check. */
|
|
bool operator==(Net::IPAddrOrOnion const& o) const;
|
|
bool operator!=(Net::IPAddrOrOnion const& o) const {
|
|
return !(*this == o);
|
|
}
|
|
|
|
friend std::ostream& ::operator<<(std::ostream&, Net::IPAddrOrOnion const&);
|
|
};
|
|
|
|
}
|
|
|
|
#endif /* !defined(NET_IPADDRORONION_HPP) */
|