diff options
author | dec05eba <dec05eba@protonmail.com> | 2018-06-06 20:06:14 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-08-18 22:56:48 +0200 |
commit | ed71e8adf36e3d0c3f6f2b54794fe069091d3376 (patch) | |
tree | e42eb457ea930a67d4e7352672e5d68082f3a2b4 /src/IpAddress.cpp | |
parent | c10dbcb7b59a5187061b1dcd162e8120c89a5973 (diff) |
Add bootstrap class (server)
Diffstat (limited to 'src/IpAddress.cpp')
-rw-r--r-- | src/IpAddress.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/IpAddress.cpp b/src/IpAddress.cpp new file mode 100644 index 0000000..22e81e5 --- /dev/null +++ b/src/IpAddress.cpp @@ -0,0 +1,40 @@ +#include "../include/sibs/IpAddress.hpp" +#include <cstring> + +namespace sibs +{ + Ipv4::Ipv4(const char *ip, unsigned short port) + { + address.sin_family = AF_INET; + address.sin_port = htons(port); + if(ip) + { + if(strlen(ip) > 15) + throw InvalidAddressException("Ip address is too long"); + + if(inet_pton(AF_INET, ip, &address.sin_addr.s_addr) != 1) + { + std::string errMsg = "Ip "; + errMsg += ip; + errMsg += " is not a valid ip"; + throw InvalidAddressException(errMsg); + } + } + else + address.sin_addr.s_addr = INADDR_ANY; + memset(address.sin_zero, 0, sizeof(address.sin_zero)); + } + + std::string Ipv4::getAddress() const + { + std::string result; + result.resize(INET_ADDRSTRLEN); + inet_ntop(AF_INET, &address.sin_addr, &result[0], INET_ADDRSTRLEN); + return result; + } + + unsigned short Ipv4::getPort() const + { + return ntohs(address.sin_port); + } +} |