Пример #1
0
VOID
CNdasUnitDevice::UpdatePrimaryHostInfo(
	CONST NDAS_UNITDEVICE_PRIMARY_HOST_INFO& info)
{
	ximeta::CAutoLock autolock(this);

	::CopyMemory(
		&m_PrimaryHostInfo,
		&info,
		sizeof(NDAS_UNITDEVICE_PRIMARY_HOST_INFO));

	m_PrimaryHostInfo.LastUpdate = ::GetTickCount();

	DBGPRT_NOISE(
		_FT("Primary Host Usage Updated: %s, Timestamp %d\n"), 
		this->ToString(),
		m_PrimaryHostInfo.LastUpdate);
}
Пример #2
0
void
CNdasDeviceHeartbeatListener::OnReceive(CLpxDatagramSocket& sock)
{
	SOCKADDR_LPX remoteAddr;
	DWORD cbReceived;

	PNDAS_DEVICE_HEARTBEAT pData = NULL;

	DWORD dwRecvFlags;
	BOOL fSuccess = sock.GetRecvFromResult(
		&remoteAddr, 
		&cbReceived, 
		(BYTE**)&pData,
		&dwRecvFlags);

	if (!fSuccess) 
	{
		DBGPRT_ERR_EX(_FT("Heartbeat Packet Receive failed: "));
		return;
	}

	DBGPRT_NOISE(_FT("Received Heartbeat Packet (%d bytes) ")
		_T("from %s at %s: ")
		_T("Receive Flag %08X\n"),
		cbReceived, 
		CSockLpxAddr(remoteAddr).ToString(),
		CSockLpxAddr(sock.GetBoundAddr()).ToString(),
		dwRecvFlags);


	fSuccess = IsValidHeartbeat(cbReceived, (LPCVOID) pData);

	if (!fSuccess) 
	{
		DBGPRT_WARN(_FT("Invalid packet received!\n"));
		return;
	}

	const NDAS_DEVICE_HEARTBEAT* pHeartbeat = 
		reinterpret_cast<const NDAS_DEVICE_HEARTBEAT*>(pData);

	NDAS_DEVICE_HEARTBEAT_INFO eventData = {0};
	
	::CopyMemory(
		eventData.DeviceAddress.Node,
		remoteAddr.LpxAddress.Node,
		sizeof(remoteAddr.LpxAddress.Node));

	C_ASSERT(
		sizeof(eventData.DeviceAddress.Node) ==
		sizeof(remoteAddr.LpxAddress.Node));

	::CopyMemory(
		eventData.LocalAddress.Node,
		sock.GetBoundAddr()->LpxAddress.Node,
		sizeof(remoteAddr.LpxAddress.Node));

	C_ASSERT(
		sizeof(eventData.LocalAddress.Node) ==
		sizeof(remoteAddr.LpxAddress.Node));

	eventData.Timestamp = ::GetTickCount();
	eventData.Type = pHeartbeat->Type;
	eventData.Version = pHeartbeat->Version;

	__raise this->OnHeartbeat(eventData);
}