Пример #1
0
DWORD pGetIPv6Addr(DWORD cbBuffer, LPBYTE lpbBuffer)
{
	//
	// BUGBUG:
	// Does not seem to be working. Should be fixed later
	// After fix this function, add to the procTable in pGetHostInfo()
	//

	static const INET6_ADDRESS_LEN = 16 * sizeof(UCHAR);

	AutoSocket s = ::WSASocket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, 0);
	if (INVALID_SOCKET == s) {
		return 0;
	}

	LPSOCKET_ADDRESS_LIST pAddrList = pCreateSocketAddressList(s);
	if (NULL == pAddrList) {
		return 0;
	}
	AutoHLocal hLocal = (HLOCAL) pAddrList;

	DWORD cbUsed = 2;
	if (cbBuffer < cbUsed) {
		return 0;
	}

	PUCHAR pucCount = lpbBuffer;
	++lpbBuffer;
	PUCHAR pucAddressLen = lpbBuffer;
	++lpbBuffer;
	*pucAddressLen = INET6_ADDRESS_LEN;
	*pucCount = 0;

	for (DWORD i = 0; 
		i < pAddrList->iAddressCount && 
		cbUsed + INET6_ADDRESS_LEN <= cbBuffer; 
		++i) 
	{
		PSOCKADDR_IN pSockAddr = (PSOCKADDR_IN)
			pAddrList->Address[i].lpSockaddr;
		::CopyMemory(
			lpbBuffer, 
			&pSockAddr->sin_addr,
			INET6_ADDRESS_LEN);
		++(*pucCount);
		cbUsed += INET6_ADDRESS_LEN;
		lpbBuffer += INET6_ADDRESS_LEN;
	}

	return cbUsed;
}
Пример #2
0
LPSOCKET_ADDRESS_LIST
pCreateLocalLpxAddressList()
{
	AutoSocket sock = ::WSASocket(
		AF_LPX,
		SOCK_DGRAM,
		LPXPROTO_DGRAM,
		NULL,
		0,
		0);
	
	if (INVALID_SOCKET == sock) {
		return NULL;
	}

	return pCreateSocketAddressList(sock);
}
Пример #3
0
DWORD pGetLpxAddr(DWORD cbBuffer, LPBYTE lpbBuffer)
{
	static const LPX_ADDRESS_LEN = 6 * sizeof(UCHAR);

	AutoSocket s = ::WSASocket(AF_LPX, SOCK_DGRAM, LPXPROTO_DGRAM, NULL, 0, 0);
	if (INVALID_SOCKET == s) {
		return 0;
	}

	LPSOCKET_ADDRESS_LIST pAddrList = pCreateSocketAddressList(s);
	if (NULL == pAddrList) {
		return 0;
	}
	AutoHLocal hLocal = (HLOCAL) pAddrList;

	DWORD cbUsed = 2;
	if (cbBuffer < cbUsed) {
		return 0;
	}

	PUCHAR pucCount = lpbBuffer;
	++lpbBuffer;
	PUCHAR pucAddressLen = lpbBuffer;
	++lpbBuffer;

	*pucAddressLen = LPX_ADDRESS_LEN;
	*pucCount = 0;

	for (DWORD i = 0; 
		i < pAddrList->iAddressCount && 
		cbUsed + LPX_ADDRESS_LEN <= cbBuffer; 
		++i) 
	{
		PSOCKADDR_LPX pSockAddrLpx = (PSOCKADDR_LPX)
			pAddrList->Address[i].lpSockaddr;
		::CopyMemory(
			lpbBuffer, 
			&pSockAddrLpx->LpxAddress.Node[0], 
			LPX_ADDRESS_LEN);
		++(*pucCount);
		cbUsed += LPX_ADDRESS_LEN;
		lpbBuffer += LPX_ADDRESS_LEN;
	}

	return cbUsed;
}
Пример #4
0
DWORD pGetIPv4Addr(DWORD cbBuffer, LPBYTE lpbBuffer)
{
	static const INET_ADDRESS_LEN = 4 * sizeof(UCHAR);

	AutoSocket s = ::WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, 0);
	if (INVALID_SOCKET == s) {
		return 0;
	}

	LPSOCKET_ADDRESS_LIST pAddrList = pCreateSocketAddressList(s);
	if (NULL == pAddrList) {
		return 0;
	}
	AutoHLocal hLocal = (HLOCAL) pAddrList;

	DWORD cbUsed = 2;
	if (cbBuffer < cbUsed) {
		return 0;
	}

	PUCHAR pucCount = lpbBuffer;
	++lpbBuffer;
	PUCHAR pucAddressLen = lpbBuffer;
	++lpbBuffer;
	*pucAddressLen = INET_ADDRESS_LEN;
	*pucCount = 0;

	for (DWORD i = 0; 
		i < pAddrList->iAddressCount && 
		cbUsed + INET_ADDRESS_LEN <= cbBuffer; 
		++i) 
	{
		PSOCKADDR_IN pSockAddr = (PSOCKADDR_IN)
			pAddrList->Address[i].lpSockaddr;
		::CopyMemory(
			lpbBuffer, 
			&pSockAddr->sin_addr,
			INET_ADDRESS_LEN);
		++(*pucCount);
		cbUsed += INET_ADDRESS_LEN;
		lpbBuffer += INET_ADDRESS_LEN;
	}

	return cbUsed;
}