X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finet.cpp;h=29e24aa7836d6843652da740fb47de576e8db387;hb=21c596567e3b6fd794ed6af73d304ce2bc70e58f;hp=41b5ae7cb0b232d847be91054e07e05319dfd397;hpb=729a80158708fd499d942663eb5115d93d247f46;p=libs%2Fnet.git diff --git a/source/inet.cpp b/source/inet.cpp index 41b5ae7..29e24aa 100644 --- a/source/inet.cpp +++ b/source/inet.cpp @@ -1,5 +1,11 @@ +#ifdef WIN32 +#include +#else +#include +#endif #include #include "inet.h" +#include "sockaddr_private.h" using namespace std; @@ -7,37 +13,39 @@ namespace Msp { namespace Net { InetAddr::InetAddr(): - addr(0), port(0) -{ } - -InetAddr::InetAddr(const sockaddr_in &sa): - addr(sa.sin_addr.s_addr), - port(sa.sin_port) -{ } - -InetAddr::InetAddr(in_addr_t a, in_port_t p): - addr(htonl(a)), - port(htons(p)) -{ } +{ + fill(addr, addr+4, 0); +} -string InetAddr::str() const +InetAddr::InetAddr(const SysAddr &sa) { - const unsigned char *ptr = reinterpret_cast(&addr); - string result = format("%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]); - if(port) - result += format(":%d", ntohs(port)); - return result; + 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); } -unsigned InetAddr::fill_sockaddr(sockaddr &sa) const +SockAddr::SysAddr InetAddr::to_sys() const { - sockaddr_in &sai = reinterpret_cast(sa); + 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; - sai.sin_port = port; + sai.sin_addr.s_addr = (addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | (addr[3]); + sai.sin_port = htons(port); - return sizeof(sockaddr_in); + 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