X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fnet%2Finet.cpp;fp=source%2Fnet%2Finet.cpp;h=29e24aa7836d6843652da740fb47de576e8db387;hp=0000000000000000000000000000000000000000;hb=50e9f9ea7f7385a2c5931fca2b8fb1103078e67c;hpb=21c596567e3b6fd794ed6af73d304ce2bc70e58f diff --git a/source/net/inet.cpp b/source/net/inet.cpp new file mode 100644 index 0000000..29e24aa --- /dev/null +++ b/source/net/inet.cpp @@ -0,0 +1,52 @@ +#ifdef WIN32 +#include +#else +#include +#endif +#include +#include "inet.h" +#include "sockaddr_private.h" + +using namespace std; + +namespace Msp { +namespace Net { + +InetAddr::InetAddr(): + port(0) +{ + fill(addr, addr+4, 0); +} + +InetAddr::InetAddr(const SysAddr &sa) +{ + const sockaddr_in &sai = reinterpret_cast(sa.addr); + addr[0] = sai.sin_addr.s_addr>>24; + addr[1] = sai.sin_addr.s_addr>>16; + addr[2] = sai.sin_addr.s_addr>>8; + addr[3] = sai.sin_addr.s_addr; + port = ntohs(sai.sin_port); +} + +SockAddr::SysAddr InetAddr::to_sys() const +{ + SysAddr sa; + sa.size = sizeof(sockaddr_in); + sockaddr_in &sai = reinterpret_cast(sa.addr); + sai.sin_family = AF_INET; + sai.sin_addr.s_addr = (addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | (addr[3]); + sai.sin_port = htons(port); + + return sa; +} + +string InetAddr::str() const +{ + string result = format("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]); + if(port) + result += format(":%d", port); + return result; +} + +} // namespace Net +} // namespace Msp