2022-08-03 16:00:48 +02:00
|
|
|
#include "FileDataReader.h"
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-03 16:00:48 +02:00
|
|
|
FileDataReader::FileDataReader(const uint8_t* pduBuf, size_t maxSize, FileDataInfo& info)
|
2022-09-08 11:08:40 +02:00
|
|
|
: PduHeaderReader(pduBuf, maxSize), info(info) {}
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-03 16:00:48 +02:00
|
|
|
ReturnValue_t FileDataReader::parseData() {
|
2022-09-08 11:08:40 +02:00
|
|
|
ReturnValue_t result = PduHeaderReader::parseData();
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
|
|
|
}
|
2022-09-08 11:08:40 +02:00
|
|
|
size_t currentIdx = PduHeaderReader::getHeaderSize();
|
2022-08-08 18:29:32 +02:00
|
|
|
const uint8_t* buf = pointers.rawPtr + currentIdx;
|
2022-09-08 11:08:40 +02:00
|
|
|
size_t remSize = PduHeaderReader::getWholePduSize() - currentIdx;
|
2022-02-02 10:29:30 +01:00
|
|
|
if (remSize < 1) {
|
|
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
|
|
|
}
|
|
|
|
if (hasSegmentMetadataFlag()) {
|
|
|
|
info.setSegmentMetadataFlag(true);
|
|
|
|
info.setRecordContinuationState(static_cast<cfdp::RecordContinuationState>((*buf >> 6) & 0b11));
|
|
|
|
size_t segmentMetadataLen = *buf & 0b00111111;
|
|
|
|
info.setSegmentMetadataLen(segmentMetadataLen);
|
|
|
|
if (remSize < segmentMetadataLen + 1) {
|
|
|
|
return SerializeIF::STREAM_TOO_SHORT;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
2022-02-02 10:29:30 +01:00
|
|
|
if (segmentMetadataLen > 0) {
|
|
|
|
buf += 1;
|
|
|
|
remSize -= 1;
|
|
|
|
info.setSegmentMetadata(buf);
|
|
|
|
buf += segmentMetadataLen;
|
|
|
|
remSize -= segmentMetadataLen;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
2022-02-02 10:29:30 +01:00
|
|
|
}
|
|
|
|
result = info.getOffset().deSerialize(&buf, &remSize, this->getEndianness());
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
if (remSize > 0) {
|
|
|
|
info.setFileData(buf, remSize);
|
|
|
|
}
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::OK;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
2022-08-03 16:00:48 +02:00
|
|
|
SerializeIF::Endianness FileDataReader::getEndianness() const { return endianness; }
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-03 16:00:48 +02:00
|
|
|
void FileDataReader::setEndianness(SerializeIF::Endianness endianness_) {
|
|
|
|
endianness = endianness_;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|