/* Converts network form data (in_addr_t, in6_addr) into a presentation * form string using the provided function to get the network form * data. */ template <typename T> std::string getPresData(std::tr1::function<T ()> getFunc) const { char buf[getAddrStrLen()]; T addr_net_form = getFunc(); decltype(addr_net_form.getAddr()) addr = addr_net_form.getAddr(); inet_ntop(getAddrFamily(), &addr, buf, sizeof(buf)); return std::string(buf); }
int CArchNetworkBSD::getAddrPort(CArchNetAddress addr) { assert(addr != NULL); switch (getAddrFamily(addr)) { case kINET: { struct sockaddr_in* ipAddr = reinterpret_cast<struct sockaddr_in*>(&addr->m_addr); return ntohs(ipAddr->sin_port); } default: assert(0 && "unknown address family"); return 0; } }
bool CArchNetworkBSD::isAnyAddr(CArchNetAddress addr) { assert(addr != NULL); switch (getAddrFamily(addr)) { case kINET: { struct sockaddr_in* ipAddr = reinterpret_cast<struct sockaddr_in*>(&addr->m_addr); return (ipAddr->sin_addr.s_addr == INADDR_ANY && addr->m_len == (socklen_t)sizeof(struct sockaddr_in)); } default: assert(0 && "unknown address family"); return true; } }
void CArchNetworkBSD::setAddrPort(CArchNetAddress addr, int port) { assert(addr != NULL); switch (getAddrFamily(addr)) { case kINET: { struct sockaddr_in* ipAddr = reinterpret_cast<struct sockaddr_in*>(&addr->m_addr); ipAddr->sin_port = htons(port); break; } default: assert(0 && "unknown address family"); break; } }
std::string CArchNetworkBSD::addrToString(CArchNetAddress addr) { assert(addr != NULL); switch (getAddrFamily(addr)) { case kINET: { struct sockaddr_in* ipAddr = reinterpret_cast<struct sockaddr_in*>(&addr->m_addr); ARCH->lockMutex(m_mutex); std::string s = inet_ntoa(ipAddr->sin_addr); ARCH->unlockMutex(m_mutex); return s; } default: assert(0 && "unknown address family"); return ""; } }