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); }
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); }