예제 #1
0
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;
}