X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Finet.cpp;h=29e24aa7836d6843652da740fb47de576e8db387;hb=21c596567e3b6fd794ed6af73d304ce2bc70e58f;hp=181c73403cfa3606731d384abb90a056953f07b4;hpb=f59eded7c3e162bbdfc6db424c9badc730017698;p=libs%2Fnet.git diff --git a/source/inet.cpp b/source/inet.cpp index 181c734..29e24aa 100644 --- a/source/inet.cpp +++ b/source/inet.cpp @@ -1,12 +1,11 @@ -/* $Id$ - -This file is part of libmspnet -Copyright © 2008 Mikkosoft Productions, Mikko Rasa -Distributed under the LGPL -*/ - -#include +#ifdef WIN32 +#include +#else +#include +#endif +#include #include "inet.h" +#include "sockaddr_private.h" using namespace std; @@ -14,34 +13,39 @@ namespace Msp { namespace Net { InetAddr::InetAddr(): - addr(0), port(0) -{ } - -InetAddr::InetAddr(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); - return format("%d.%d.%d.%d:%d", static_cast(ptr[0]), static_cast(ptr[1]), static_cast(ptr[2]), static_cast(ptr[3]), ntohs(port)); + 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); - sai.sin_family=AF_INET; - sai.sin_addr.s_addr=addr; - sai.sin_port=port; + 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; +} - return sizeof(sockaddr_in); +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