int WaypointMessageHelper::readWaypointMessageForTarget (const void *pWaypointMsgPayload, uint32 ui32Offset, uint32 ui32TotalLen, PreviousMessageIds &previouMessagesSentToTargets, uint32 &ui32WaypointMsgPayloadLen) { ui32WaypointMsgPayloadLen = ui32TotalLen; BufferReader br (pWaypointMsgPayload, ui32TotalLen); br.setPosition (ui32Offset); uint32 ui32LatestMessageSentLen = 0; if (br.read32 (&ui32LatestMessageSentLen) < 0) { return -1; } ui32WaypointMsgPayloadLen -= 4; if (ui32LatestMessageSentLen > 0) { static const uint16 BUF_LEN = 1024; char buf[BUF_LEN]; if ((ui32LatestMessageSentLen + 1) > BUF_LEN) { return -2; } if (br.readBytes (buf, ui32LatestMessageSentLen) < 0) { return -3; } buf[ui32LatestMessageSentLen] = '\0'; previouMessagesSentToTargets = buf; ui32WaypointMsgPayloadLen -= ui32LatestMessageSentLen; } return 0; }