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