#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; } if (*size + destNameSize > maxSize) { return SerializeIF::BUFFER_TOO_SHORT; } 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; } } result = SerializeAdapter::serialize(&msgsToUsersTotalSize, buffer, size, maxSize, streamEndianness); if (result != OK) { return result; } result = SerializeAdapter::serialize(&numOfMsgsToUser, buffer, size, maxSize, streamEndianness); if (result != OK) { return result; } if (*size + msgsToUsersTotalSize > maxSize) { return SerializeIF::BUFFER_TOO_SHORT; } std::memcpy(*buffer, messagesToUserStartPtr, msgsToUsersTotalSize); *buffer += msgsToUsersTotalSize; *size += msgsToUsersTotalSize; result = SerializeAdapter::serialize(&fsRequestsTotalSize, buffer, size, maxSize, streamEndianness); if (result != OK) { return result; } result = SerializeAdapter::serialize(&numOfFsRequests, buffer, size, maxSize, streamEndianness); if (result != OK) { return result; } if (*size + fsRequestsTotalSize > maxSize) { return SerializeIF::BUFFER_TOO_SHORT; } std::memcpy(*buffer, fsRequest, fsRequestsTotalSize); *buffer += fsRequestsTotalSize; *size += fsRequestsTotalSize; return OK; } ReturnValue_t cfdp::PutRequest::deSerialize(const uint8_t **buffer, size_t *size, SerializeIF::Endianness streamEndianness) { return OK; } size_t cfdp::PutRequest::getSerializedSize() const { return 0; }