fsfw/src/fsfw/cfdp/handler/PutRequest.cpp

60 lines
1.8 KiB
C++

#include "PutRequest.h"
using namespace returnvalue;
[[nodiscard]] bool cfdp::PutRequest::isMetadataOnly() const {
return destNameSize > 0 and sourceNameSize > 0;
}
ReturnValue_t cfdp::PutRequest::serialize(uint8_t **buffer, size_t *size, size_t maxSize,
SerializeIF::Endianness streamEndianness) const {
ReturnValue_t result = destId.serialize(buffer, size, maxSize, streamEndianness);
if (result != OK) {
return result;
}
if (*size + 1 > maxSize) {
return SerializeIF::BUFFER_TOO_SHORT;
}
**buffer = metadataOnly;
*size += 1;
if (transmissionMode) {
**buffer = transmissionMode;
*size += 1;
*buffer += 1;
}
if (!metadataOnly) {
result = SerializeAdapter::serialize(&sourceNameSize, buffer, size, maxSize, streamEndianness);
if (result != OK) {
return result;
}
if (*size + sourceNameSize > maxSize) {
return SerializeIF::BUFFER_TOO_SHORT;
}
std::memcpy(*buffer, sourceName, sourceNameSize);
*buffer += sourceNameSize;
*size += sourceNameSize;
result = SerializeAdapter::serialize(&destNameSize, buffer, size, maxSize, streamEndianness);
if (result != OK) {
return result;
}
std::memcpy(*buffer, destName, destNameSize);
*buffer += destNameSize;
*size += destNameSize;
if (*size + 1 > maxSize) {
**buffer = transmissionMode;
*size += 1;
*buffer += 1;
}
if (*size + 1 > maxSize) {
**buffer = closureRequested;
*size += 1;
*buffer += 1;
}
}
return returnvalue::OK;
}
ReturnValue_t cfdp::PutRequest::deSerialize(const uint8_t **buffer, size_t *size,
SerializeIF::Endianness streamEndianness) {
return returnvalue::OK;
}
size_t cfdp::PutRequest::getSerializedSize() const { return 0; }