Esempio n. 1
0
File: addr.hpp Progetto: coxley/acrs
     /* 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 "";
	}
}