mirror of
https://github.com/espressif/openthread.git
synced 2026-08-19 00:49:53 +00:00
NcpBuffer: Fixing bug with handling of longer frame segments (#1643)
This commit is contained in:
committed by
Jonathan Hui
parent
3d68d1ad3a
commit
c4feef569c
@@ -121,7 +121,7 @@ uint8_t *NcpFrameBuffer::Next(uint8_t *aBufPtr) const
|
||||
}
|
||||
|
||||
// Returns an advanced (moved forward) version of the given buffer pointer by the given offset.
|
||||
uint8_t *NcpFrameBuffer::Advance(uint8_t *aBufPtr, uint8_t aOffset) const
|
||||
uint8_t *NcpFrameBuffer::Advance(uint8_t *aBufPtr, uint16_t aOffset) const
|
||||
{
|
||||
aBufPtr += aOffset;
|
||||
|
||||
@@ -365,7 +365,7 @@ ThreadError NcpFrameBuffer::OutFramePrepareSegment(void)
|
||||
|
||||
// Find tail/end of current segment.
|
||||
mReadSegmentTail = Advance(mReadSegmentHead,
|
||||
kSegmentHeaderSize + static_cast<uint8_t>(header & kSegmentHeaderLengthMask));
|
||||
kSegmentHeaderSize + (header & kSegmentHeaderLengthMask));
|
||||
|
||||
// Update the current read pointer to skip the segment header.
|
||||
mReadPointer = Advance(mReadSegmentHead, kSegmentHeaderSize);
|
||||
@@ -588,7 +588,7 @@ ThreadError NcpFrameBuffer::OutFrameRemove(void)
|
||||
}
|
||||
|
||||
// Move the pointer to next segment.
|
||||
bufPtr = Advance(bufPtr, kSegmentHeaderSize + static_cast<uint8_t>(header & kSegmentHeaderLengthMask));
|
||||
bufPtr = Advance(bufPtr, kSegmentHeaderSize + (header & kSegmentHeaderLengthMask));
|
||||
}
|
||||
|
||||
mReadFrameStart = bufPtr;
|
||||
@@ -658,7 +658,7 @@ uint16_t NcpFrameBuffer::OutFrameGetLength(void)
|
||||
frameLength += (header & kSegmentHeaderLengthMask);
|
||||
|
||||
// Move the pointer to next segment.
|
||||
bufPtr = Advance(bufPtr, kSegmentHeaderSize + static_cast<uint8_t>(header & kSegmentHeaderLengthMask));
|
||||
bufPtr = Advance(bufPtr, kSegmentHeaderSize + (header & kSegmentHeaderLengthMask));
|
||||
}
|
||||
|
||||
// Remember the calculated frame length for current frame.
|
||||
|
||||
@@ -306,7 +306,7 @@ private:
|
||||
// Private methods
|
||||
|
||||
uint8_t * Next(uint8_t *aBufferPtr) const;
|
||||
uint8_t * Advance(uint8_t *aBufPtr, uint8_t aOffset) const;
|
||||
uint8_t * Advance(uint8_t *aBufPtr, uint16_t aOffset) const;
|
||||
uint16_t GetDistance(uint8_t *aStartPtr, uint8_t *aEndPtr) const;
|
||||
|
||||
uint16_t ReadUint16At(uint8_t *aBufPtr);
|
||||
|
||||
Reference in New Issue
Block a user