2021-12-03 15:37:49 +01:00
|
|
|
#include "fsfw/cfdp/tlv/FilestoreRequestTlv.h"
|
2022-02-02 10:29:30 +01:00
|
|
|
|
2021-12-03 15:37:49 +01:00
|
|
|
#include "fsfw/FSFW.h"
|
|
|
|
|
|
|
|
FilestoreRequestTlv::FilestoreRequestTlv(cfdp::FilestoreActionCode actionCode,
|
2022-08-10 10:34:02 +02:00
|
|
|
cfdp::StringLv &firstFileName)
|
2022-02-02 10:29:30 +01:00
|
|
|
: FilestoreTlvBase(actionCode, firstFileName) {}
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-08-10 10:34:02 +02:00
|
|
|
FilestoreRequestTlv::FilestoreRequestTlv(cfdp::StringLv &firstFileName)
|
2022-02-02 10:29:30 +01:00
|
|
|
: FilestoreTlvBase(cfdp::FilestoreActionCode::INVALID, firstFileName) {}
|
2021-12-03 15:37:49 +01:00
|
|
|
|
|
|
|
void FilestoreRequestTlv::setSecondFileName(cfdp::Lv *secondFileName) {
|
2022-02-02 10:29:30 +01:00
|
|
|
this->secondFileName = secondFileName;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t FilestoreRequestTlv::serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
2022-02-02 10:29:30 +01:00
|
|
|
Endianness streamEndianness) const {
|
|
|
|
ReturnValue_t result = commonSerialize(buffer, size, maxSize, streamEndianness);
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
result = firstFileName.serialize(buffer, size, maxSize, streamEndianness);
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
if (requiresSecondFileName()) {
|
|
|
|
if (secondFileName == nullptr) {
|
|
|
|
secondFileNameMissing();
|
|
|
|
return cfdp::FILESTORE_REQUIRES_SECOND_FILE;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
2022-02-02 10:29:30 +01:00
|
|
|
secondFileName->serialize(buffer, size, maxSize, streamEndianness);
|
|
|
|
}
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::OK;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t FilestoreRequestTlv::deSerialize(const uint8_t **buffer, size_t *size,
|
2022-02-02 10:29:30 +01:00
|
|
|
Endianness streamEndianness) {
|
|
|
|
ReturnValue_t result = commonDeserialize(buffer, size, streamEndianness);
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2022-02-02 10:29:30 +01:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
return deSerializeFromValue(buffer, size, streamEndianness);
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
ReturnValue_t FilestoreRequestTlv::deSerialize(cfdp::Tlv &tlv, SerializeIF::Endianness endianness) {
|
|
|
|
const uint8_t *ptr = tlv.getValue();
|
|
|
|
size_t remSz = tlv.getSerializedSize();
|
2021-12-03 15:37:49 +01:00
|
|
|
|
2022-02-02 10:29:30 +01:00
|
|
|
return deSerializeFromValue(&ptr, &remSz, endianness);
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t FilestoreRequestTlv::getLengthField() const {
|
2022-02-02 10:29:30 +01:00
|
|
|
size_t secondFileNameLen = 0;
|
|
|
|
if (secondFileName != nullptr and requiresSecondFileName()) {
|
|
|
|
secondFileNameLen = secondFileName->getSerializedSize();
|
|
|
|
}
|
|
|
|
return 1 + firstFileName.getSerializedSize() + secondFileNameLen;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
ReturnValue_t FilestoreRequestTlv::deSerializeFromValue(const uint8_t **buffer, size_t *size,
|
2022-02-02 10:29:30 +01:00
|
|
|
Endianness streamEndianness) {
|
|
|
|
this->actionCode = static_cast<cfdp::FilestoreActionCode>((**buffer >> 4) & 0x0f);
|
|
|
|
*buffer += 1;
|
|
|
|
*size -= 1;
|
|
|
|
ReturnValue_t result = firstFileName.deSerialize(buffer, size, streamEndianness);
|
2022-08-16 01:08:26 +02:00
|
|
|
if (result != returnvalue::OK) {
|
2021-12-03 15:37:49 +01:00
|
|
|
return result;
|
2022-02-02 10:29:30 +01:00
|
|
|
}
|
|
|
|
if (requiresSecondFileName()) {
|
|
|
|
if (secondFileName == nullptr) {
|
|
|
|
secondFileNameMissing();
|
2022-08-16 01:08:26 +02:00
|
|
|
return returnvalue::FAILED;
|
2022-02-02 10:29:30 +01:00
|
|
|
}
|
|
|
|
result = secondFileName->deSerialize(buffer, size, streamEndianness);
|
|
|
|
}
|
|
|
|
return result;
|
2021-12-03 15:37:49 +01:00
|
|
|
}
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
cfdp::TlvType FilestoreRequestTlv::getType() const { return cfdp::TlvType::FILESTORE_REQUEST; }
|