X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FProtocols%2FINet%2FINetAddressing.cci;h=320e8eeda3852fe46c7926865e3677b2d3e48f90;hb=fa696fb7164ff243f6b7c1c5bda35ed75af153dc;hp=4b280575caee64bf87083b987241232a4f0c8239;hpb=fb08e3defcfb7cd8851ede0fab6cad424d168485;p=senf.git diff --git a/Socket/Protocols/INet/INetAddressing.cci b/Socket/Protocols/INet/INetAddressing.cci index 4b28057..320e8ee 100644 --- a/Socket/Protocols/INet/INetAddressing.cci +++ b/Socket/Protocols/INet/INetAddressing.cci @@ -38,16 +38,6 @@ prefix_ senf::INet4SocketAddress::INet4SocketAddress() clear(); } -prefix_ senf::INet4SocketAddress::INet4SocketAddress(char const * address) -{ - assignString(address); -} - -prefix_ senf::INet4SocketAddress::INet4SocketAddress(std::string const & address) -{ - assignString(address); -} - prefix_ bool senf::INet4SocketAddress::operator==(INet4SocketAddress const & other) const { @@ -55,11 +45,10 @@ prefix_ bool senf::INet4SocketAddress::operator==(INet4SocketAddress const & oth addr_.sin_addr.s_addr == other.addr_.sin_addr.s_addr; } -prefix_ std::string senf::INet4SocketAddress::host() +prefix_ senf::INet4Address senf::INet4SocketAddress::address() const { - char buffer[128]; - return std::string(::inet_ntop(AF_INET,&addr_.sin_addr,buffer,128)); + return INet4Address::from_inaddr(addr_.sin_addr.s_addr); } prefix_ unsigned senf::INet4SocketAddress::port() @@ -68,73 +57,42 @@ prefix_ unsigned senf::INet4SocketAddress::port() return ntohs(addr_.sin_port); } -prefix_ struct sockaddr * senf::INet4SocketAddress::sockaddr_p() -{ - return reinterpret_cast(&addr_); -} - -prefix_ struct sockaddr const * senf::INet4SocketAddress::sockaddr_p() +prefix_ bool senf::INet4SocketAddress::boolean_test() const { - return reinterpret_cast(&addr_); + return port() || address(); } -prefix_ unsigned senf::INet4SocketAddress::sockaddr_len() - const +prefix_ void senf::INet4SocketAddress::address(INet4Address const & addr) { - return sizeof(addr_); + addr_.sin_addr.s_addr = addr.inaddr(); } -prefix_ std::ostream & senf::operator<<(std::ostream & os, INet4SocketAddress const & addr) +prefix_ void senf::INet4SocketAddress::port(unsigned p) { - os << addr.str(); - return os; + addr_.sin_port = htons(p); } -/////////////////////////////////////////////////////////////////////////// -// senf::INet6Address - -prefix_ senf::INet6Address::INet6Address() -{ - clear(); -} - -prefix_ senf::INet6Address::INet6Address(struct in6_addr const & addr) -{ - addr_ = addr; -} - -prefix_ struct in6_addr & senf::INet6Address::addr() -{ - return addr_; -} - -prefix_ struct in6_addr const & senf::INet6Address::addr() - const -{ - return addr_; -} - -prefix_ struct in6_addr * senf::INet6Address::addr_p() +prefix_ struct sockaddr * senf::INet4SocketAddress::sockaddr_p() { - return & addr_; + return reinterpret_cast(&addr_); } -prefix_ struct in6_addr const * senf::INet6Address::addr_p() +prefix_ struct sockaddr const * senf::INet4SocketAddress::sockaddr_p() const { - return & addr_; + return reinterpret_cast(&addr_); } -prefix_ unsigned senf::INet6Address::addr_len() +prefix_ unsigned senf::INet4SocketAddress::sockaddr_len() const { return sizeof(addr_); } -prefix_ std::ostream & senf::operator<<(std::ostream & os, INet6Address const & addr) +prefix_ std::ostream & senf::operator<<(std::ostream & os, INet4SocketAddress const & addr) { - os << addr.address(); + os << addr.address() << ":" << addr.port(); return os; } @@ -152,16 +110,10 @@ prefix_ senf::INet6SocketAddress::INet6SocketAddress(std::string const & addr) assignAddr(addr); } -prefix_ senf::INet6SocketAddress::INet6SocketAddress(char const * addr) -{ - clear(); - assignAddr(addr); -} - prefix_ senf::INet6SocketAddress::INet6SocketAddress(INet6Address const & addr, unsigned port) { clear(); - sockaddr_.sin6_addr = addr.addr(); + std::copy(addr.begin(), addr.end(), &sockaddr_.sin6_addr.s6_addr[0]); sockaddr_.sin6_port = htons(port); } @@ -169,7 +121,7 @@ prefix_ senf::INet6SocketAddress::INet6SocketAddress(INet6Address const & addr, std::string const & iface) { clear(); - sockaddr_.sin6_addr = addr.addr(); + std::copy(addr.begin(), addr.end(), &sockaddr_.sin6_addr.s6_addr[0]); sockaddr_.sin6_port = htons(port); assignIface(iface); } @@ -182,15 +134,15 @@ prefix_ senf::INet6SocketAddress::INet6SocketAddress(std::string const & addr, assignIface(iface); } -prefix_ senf::INet6Address senf::INet6SocketAddress::host() +prefix_ senf::INet6Address senf::INet6SocketAddress::address() const { - return INet6Address(sockaddr_.sin6_addr); + return INet6Address::from_data(&sockaddr_.sin6_addr.s6_addr[0]); } -prefix_ void senf::INet6SocketAddress::host(INet6Address const & addr) +prefix_ void senf::INet6SocketAddress::address(INet6Address const & addr) { - sockaddr_.sin6_addr = addr.addr(); + std::copy(addr.begin(), addr.end(), &sockaddr_.sin6_addr.s6_addr[0]); } prefix_ unsigned senf::INet6SocketAddress::port() @@ -228,7 +180,11 @@ prefix_ unsigned senf::INet6SocketAddress::sockaddr_len() prefix_ std::ostream & senf::operator<<(std::ostream & os, INet6SocketAddress const & addr) { - os << addr.address(); + os << '[' << addr.address(); + std::string iface (addr.iface()); + if (! iface.empty()) + os << '%' << iface; + os << "]:" << addr.port(); return os; }