67 lines
2.4 KiB
C++
67 lines
2.4 KiB
C++
#include "MetadataPduCreator.h"
|
|
|
|
MetadataPduCreator::MetadataPduCreator(PduConfig &conf, MetadataGenericInfo &info,
|
|
cfdp::StringLv &srcFileName, cfdp::StringLv &destFileName,
|
|
cfdp::Tlv **optionsArray, size_t optionsLen)
|
|
: FileDirectiveCreator(conf, cfdp::FileDirective::METADATA, 5),
|
|
info(info),
|
|
srcFileName(srcFileName),
|
|
destFileName(destFileName),
|
|
optionsArray(optionsArray),
|
|
optionsLen(optionsLen) {
|
|
updateDirectiveFieldLen();
|
|
}
|
|
|
|
void MetadataPduCreator::updateDirectiveFieldLen() {
|
|
size_t dirFieldLen = MetadataGenericInfo::getSerializedSize(HeaderCreator::getLargeFileFlag()) +
|
|
srcFileName.getSerializedSize() + destFileName.getSerializedSize();
|
|
if (optionsLen > 0 and optionsArray != nullptr) {
|
|
for (size_t idx = 0; idx < optionsLen; idx++) {
|
|
dirFieldLen += optionsArray[idx]->getSerializedSize();
|
|
}
|
|
}
|
|
setDirectiveDataFieldLen(dirFieldLen);
|
|
}
|
|
|
|
size_t MetadataPduCreator::getSerializedSize() const {
|
|
return FileDirectiveCreator::getWholePduSize();
|
|
}
|
|
|
|
ReturnValue_t MetadataPduCreator::serialize(uint8_t **buffer, size_t *size, size_t maxSize,
|
|
Endianness streamEndianness) const {
|
|
ReturnValue_t result = FileDirectiveCreator::serialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != returnvalue::OK) {
|
|
return result;
|
|
}
|
|
if (*size + 1 >= maxSize) {
|
|
return SerializeIF::BUFFER_TOO_SHORT;
|
|
}
|
|
**buffer = info.isClosureRequested() << 6 | info.getChecksumType();
|
|
*buffer += 1;
|
|
*size += 1;
|
|
result = info.getFileSize().serialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != returnvalue::OK) {
|
|
return result;
|
|
}
|
|
result = srcFileName.serialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != returnvalue::OK) {
|
|
return result;
|
|
}
|
|
result = destFileName.serialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != returnvalue::OK) {
|
|
return result;
|
|
}
|
|
|
|
if (optionsLen > 0 and optionsArray != nullptr) {
|
|
for (size_t idx = 0; idx < optionsLen; idx++) {
|
|
result = optionsArray[idx]->serialize(buffer, size, maxSize, streamEndianness);
|
|
if (result != returnvalue::OK) {
|
|
return result;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
const cfdp::StringLv &MetadataPduCreator::getSourceFileName() const { return srcFileName; }
|
|
const cfdp::StringLv &MetadataPduCreator::getDestFileName() const { return destFileName; }
|