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

87 lines
2.9 KiB
C++
Raw Normal View History

2023-07-21 16:35:05 +02:00
#include "PutRequest.h"
using namespace returnvalue;
2023-07-24 10:58:18 +02:00
2023-07-24 11:15:50 +02:00
cfdp::PutRequest::PutRequest(cfdp::EntityId destId, const uint8_t *msgsToUser,
size_t msgsToUserTotalSize, const uint8_t *fsRequests,
size_t fsRequestsSize)
: destId(std::move(destId)),
metadataOnly(true),
msgsToUsersTotalSize(msgsToUserTotalSize),
msgsToUserStartPtr(msgsToUser),
fsRequestsTotalSize(fsRequestsSize),
fsRequestStartPtr(fsRequests) {}
[[nodiscard]] bool cfdp::PutRequest::isMetadataOnly() const { return metadataOnly; }
2023-07-24 10:11:16 +02:00
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;
}
2023-07-24 11:05:11 +02:00
if (*size + getSerializedSize() > maxSize) {
return SerializeIF::BUFFER_TOO_SHORT;
}
**buffer = metadataOnly;
*size += 1;
if (!metadataOnly) {
result = SerializeAdapter::serialize(&sourceNameSize, buffer, size, maxSize, streamEndianness);
if (result != OK) {
return result;
}
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;
}
}
2023-07-24 10:58:18 +02:00
result =
SerializeAdapter::serialize(&msgsToUsersTotalSize, buffer, size, maxSize, streamEndianness);
if (result != OK) {
return result;
}
2023-07-24 11:15:50 +02:00
std::memcpy(*buffer, msgsToUserStartPtr, msgsToUsersTotalSize);
2023-07-24 10:58:18 +02:00
*buffer += msgsToUsersTotalSize;
*size += msgsToUsersTotalSize;
2023-07-24 10:58:18 +02:00
result =
SerializeAdapter::serialize(&fsRequestsTotalSize, buffer, size, maxSize, streamEndianness);
if (result != OK) {
return result;
}
2023-07-24 11:15:50 +02:00
std::memcpy(*buffer, fsRequestStartPtr, fsRequestsTotalSize);
2023-07-24 10:58:18 +02:00
*buffer += fsRequestsTotalSize;
*size += fsRequestsTotalSize;
return OK;
2023-07-24 10:11:16 +02:00
}
2023-07-24 10:58:18 +02:00
2023-07-24 10:11:16 +02:00
ReturnValue_t cfdp::PutRequest::deSerialize(const uint8_t **buffer, size_t *size,
SerializeIF::Endianness streamEndianness) {
2023-07-24 10:58:18 +02:00
return OK;
2023-07-24 10:11:16 +02:00
}
2023-07-24 11:05:11 +02:00
size_t cfdp::PutRequest::getSerializedSize() const {
size_t baseSize = destId.getSerializedSize() + 1;
if (!metadataOnly) {
baseSize += sizeof(sourceNameSize) + sourceNameSize + sizeof(destNameSize) + destNameSize + 2;
}
2023-07-24 11:15:50 +02:00
baseSize += sizeof(msgsToUsersTotalSize) + msgsToUsersTotalSize + sizeof(fsRequestsTotalSize) +
fsRequestsTotalSize;
2023-07-24 11:05:11 +02:00
return baseSize;
}