All checks were successful
fsfw/fsfw/pipeline/pr-development This commit looks good
80 lines
2.9 KiB
C++
80 lines
2.9 KiB
C++
#include "fsfw/cfdp/tlv/FilestoreRequestTlv.h"
|
|
|
|
#include "fsfw/FSFW.h"
|
|
|
|
FilestoreRequestTlv::FilestoreRequestTlv(cfdp::FilestoreActionCode actionCode,
|
|
cfdp::Lv &firstFileName)
|
|
: FilestoreTlvBase(actionCode, firstFileName) {}
|
|
|
|
FilestoreRequestTlv::FilestoreRequestTlv(cfdp::Lv &firstFileName)
|
|
: FilestoreTlvBase(cfdp::FilestoreActionCode::INVALID, firstFileName) {}
|
|
|
|
void FilestoreRequestTlv::setSecondFileName(cfdp::Lv *secondFileName) {
|
|
this->secondFileName = secondFileName;
|
|
}
|
|
|
|
ReturnValue_t FilestoreRequestTlv::serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
|
Endianness streamEndianness) const {
|
|
ReturnValue_t result = commonSerialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
result = firstFileName.serialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
if (requiresSecondFileName()) {
|
|
if (secondFileName == nullptr) {
|
|
secondFileNameMissing();
|
|
return cfdp::FILESTORE_REQUIRES_SECOND_FILE;
|
|
}
|
|
secondFileName->serialize(buffer, size, maxSize, streamEndianness);
|
|
}
|
|
return HasReturnvaluesIF::RETURN_OK;
|
|
}
|
|
|
|
ReturnValue_t FilestoreRequestTlv::deSerialize(const uint8_t **buffer, size_t *size,
|
|
Endianness streamEndianness) {
|
|
ReturnValue_t result = commonDeserialize(buffer, size, streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
return deSerializeFromValue(buffer, size, streamEndianness);
|
|
}
|
|
|
|
ReturnValue_t FilestoreRequestTlv::deSerialize(cfdp::Tlv &tlv, SerializeIF::Endianness endianness) {
|
|
const uint8_t *ptr = tlv.getValue();
|
|
size_t remSz = tlv.getSerializedSize();
|
|
|
|
return deSerializeFromValue(&ptr, &remSz, endianness);
|
|
}
|
|
|
|
uint8_t FilestoreRequestTlv::getLengthField() const {
|
|
size_t secondFileNameLen = 0;
|
|
if (secondFileName != nullptr and requiresSecondFileName()) {
|
|
secondFileNameLen = secondFileName->getSerializedSize();
|
|
}
|
|
return 1 + firstFileName.getSerializedSize() + secondFileNameLen;
|
|
}
|
|
|
|
ReturnValue_t FilestoreRequestTlv::deSerializeFromValue(const uint8_t **buffer, size_t *size,
|
|
Endianness streamEndianness) {
|
|
this->actionCode = static_cast<cfdp::FilestoreActionCode>((**buffer >> 4) & 0x0f);
|
|
*buffer += 1;
|
|
*size -= 1;
|
|
ReturnValue_t result = firstFileName.deSerialize(buffer, size, streamEndianness);
|
|
if (result != HasReturnvaluesIF::RETURN_OK) {
|
|
return result;
|
|
}
|
|
if (requiresSecondFileName()) {
|
|
if (secondFileName == nullptr) {
|
|
secondFileNameMissing();
|
|
return HasReturnvaluesIF::RETURN_FAILED;
|
|
}
|
|
result = secondFileName->deSerialize(buffer, size, streamEndianness);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
cfdp::TlvTypes FilestoreRequestTlv::getType() const { return cfdp::TlvTypes::FILESTORE_REQUEST; }
|