95 lines
2.9 KiB
C++
95 lines
2.9 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;
|
|
}
|
|
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; }
|