///////////////////////////////////////////////////////////////////////////
// senf::INet4Address
-prefix_ senf::INet4Address::INet4Address()
+prefix_ senf::INet4SocketAddress::INet4SocketAddress()
{
clear();
}
-prefix_ senf::INet4Address::INet4Address(char const * address)
-{
- assignString(address);
-}
-
-prefix_ senf::INet4Address::INet4Address(std::string address)
-{
- assignString(address);
-}
-
-prefix_ bool senf::INet4Address::operator==(INet4Address const & other)
+prefix_ bool senf::INet4SocketAddress::operator==(INet4SocketAddress const & other)
const
{
return addr_.sin_port == other.addr_.sin_port &&
addr_.sin_addr.s_addr == other.addr_.sin_addr.s_addr;
}
-prefix_ std::string senf::INet4Address::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::INet4Address::port()
+prefix_ unsigned senf::INet4SocketAddress::port()
const
{
return ntohs(addr_.sin_port);
}
-prefix_ struct sockaddr * senf::INet4Address::sockaddr_p()
-{
- return reinterpret_cast<struct sockaddr *>(&addr_);
-}
-
-prefix_ struct sockaddr const * senf::INet4Address::sockaddr_p()
+prefix_ bool senf::INet4SocketAddress::boolean_test()
const
{
- return reinterpret_cast<struct sockaddr const *>(&addr_);
-}
-
-prefix_ unsigned senf::INet4Address::sockaddr_len()
- const
-{
- return sizeof(addr_);
-}
-
-prefix_ std::ostream & senf::operator<<(std::ostream & os, INet4Address const & addr)
-{
- os << addr.str();
- return os;
-}
-
-///////////////////////////////////////////////////////////////////////////
-// senf::INet6Address
-
-prefix_ senf::INet6Address::INet6Address()
-{
- clear();
-}
-
-prefix_ senf::INet6Address::INet6Address(struct in6_addr const & addr)
-{
- addr_ = addr;
+ return port() || address();
}
-prefix_ struct in6_addr & senf::INet6Address::addr()
+prefix_ void senf::INet4SocketAddress::address(INet4Address const & addr)
{
- return addr_;
+ addr_.sin_addr.s_addr = addr.inaddr();
}
-prefix_ struct in6_addr const & senf::INet6Address::addr()
- const
+prefix_ void senf::INet4SocketAddress::port(unsigned p)
{
- return addr_;
+ addr_.sin_port = htons(p);
}
-prefix_ struct in6_addr * senf::INet6Address::addr_p()
+prefix_ struct sockaddr * senf::INet4SocketAddress::sockaddr_p()
{
- return & addr_;
+ return reinterpret_cast<struct sockaddr *>(&addr_);
}
-prefix_ struct in6_addr const * senf::INet6Address::addr_p()
+prefix_ struct sockaddr const * senf::INet4SocketAddress::sockaddr_p()
const
{
- return & addr_;
+ return reinterpret_cast<struct sockaddr const *>(&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;
}
clear();
}
-prefix_ senf::INet6SocketAddress::INet6SocketAddress(std::string const & addr)
-{
- clear();
- 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);
}
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);
}
-prefix_ senf::INet6SocketAddress::INet6SocketAddress(std::string const & addr,
- std::string const & iface)
-{
- clear();
- assignAddr(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()
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;
}