CFDP SOURCE handler #157
@ -117,6 +117,7 @@ ReturnValue_t cfdp::VarLenField::deSerialize(const uint8_t **buffer, size_t *siz
|
|||||||
switch (width) {
|
switch (width) {
|
||||||
case (cfdp::WidthInBytes::ONE_BYTE): {
|
case (cfdp::WidthInBytes::ONE_BYTE): {
|
||||||
value.oneByte = **buffer;
|
value.oneByte = **buffer;
|
||||||
|
*buffer += 1;
|
||||||
*size += 1;
|
*size += 1;
|
||||||
return returnvalue::OK;
|
return returnvalue::OK;
|
||||||
}
|
}
|
||||||
|
@ -106,6 +106,10 @@ ReturnValue_t cfdp::PutRequest::deSerialize(const uint8_t **buffer, size_t *size
|
|||||||
if (result != OK) {
|
if (result != OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
result = SerializeAdapter::deSerialize(&hasTransmissionMode, buffer, size, streamEndianness);
|
||||||
|
if (result != OK) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
result = SerializeAdapter::deSerialize(&transmissionMode, buffer, size, streamEndianness);
|
result = SerializeAdapter::deSerialize(&transmissionMode, buffer, size, streamEndianness);
|
||||||
if (result != OK) {
|
if (result != OK) {
|
||||||
return result;
|
return result;
|
||||||
@ -141,7 +145,7 @@ size_t cfdp::PutRequest::getSerializedSize() const {
|
|||||||
// Entity ID LV (1 leading size byte) and the metadata only flag.
|
// Entity ID LV (1 leading size byte) and the metadata only flag.
|
||||||
size_t baseSize = 1 + destId.getSerializedSize() + 1;
|
size_t baseSize = 1 + destId.getSerializedSize() + 1;
|
||||||
if (!metadataOnly) {
|
if (!metadataOnly) {
|
||||||
baseSize += sourceName.getSerializedSize() + destName.getSerializedSize() + 2;
|
baseSize += sourceName.getSerializedSize() + destName.getSerializedSize() + 4;
|
||||||
}
|
}
|
||||||
baseSize += sizeof(msgsToUsersTotalSize) + msgsToUsersTotalSize + sizeof(fsRequestsTotalSize) +
|
baseSize += sizeof(msgsToUsersTotalSize) + msgsToUsersTotalSize + sizeof(fsRequestsTotalSize) +
|
||||||
fsRequestsTotalSize;
|
fsRequestsTotalSize;
|
||||||
@ -175,3 +179,8 @@ void cfdp::PutRequest::setClosureRequest(bool closureRequested_) {
|
|||||||
this->closureRequested = closureRequested_;
|
this->closureRequested = closureRequested_;
|
||||||
hasClosureRequested = true;
|
hasClosureRequested = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const uint8_t *cfdp::PutRequest::getMessagesToUser(size_t &totalSize) {
|
||||||
|
totalSize = this->msgsToUsersTotalSize;
|
||||||
|
return msgsToUserStartPtr;
|
||||||
|
}
|
||||||
|
@ -49,6 +49,8 @@ class PutRequest : public SerializeIF {
|
|||||||
void setClosureRequest(bool closureRequested);
|
void setClosureRequest(bool closureRequested);
|
||||||
void clearClosureRequest();
|
void clearClosureRequest();
|
||||||
|
|
||||||
|
const uint8_t* getMessagesToUser(size_t& msgSize);
|
||||||
|
|
||||||
[[nodiscard]] bool isMetadataOnly() const;
|
[[nodiscard]] bool isMetadataOnly() const;
|
||||||
|
|
||||||
[[nodiscard]] const EntityId& getDestId() const;
|
[[nodiscard]] const EntityId& getDestId() const;
|
||||||
|
@ -26,15 +26,33 @@ TEST_CASE("Put Request", "[cfdp]") {
|
|||||||
ReservedMessageCreator creator(static_cast<uint8_t>(ProxyOpMessageType::PUT_REQUEST),
|
ReservedMessageCreator creator(static_cast<uint8_t>(ProxyOpMessageType::PUT_REQUEST),
|
||||||
reservedMsgCustomData.data(), msgSize);
|
reservedMsgCustomData.data(), msgSize);
|
||||||
msgSize = 0;
|
msgSize = 0;
|
||||||
ReturnValue_t result = creator.serializeBe(buffer.data(), msgSize, buffer.size());
|
ReturnValue_t result = creator.serializeBe(reservedMsgBuf.data(), msgSize, buffer.size());
|
||||||
CHECK(result == returnvalue::OK);
|
CHECK(result == returnvalue::OK);
|
||||||
|
|
||||||
SECTION("Put Request with reserved message") {
|
SECTION("Put Request with reserved message") {
|
||||||
PutRequest putRequest(destId, reservedMsgCustomData.data(), msgSize, nullptr, 0);
|
PutRequest putRequest(destId, reservedMsgBuf.data(), msgSize, nullptr, 0);
|
||||||
uint8_t* bufPtr = buffer.data();
|
uint8_t* bufPtr = buffer.data();
|
||||||
size_t serLen = 0;
|
size_t serLen = 0;
|
||||||
REQUIRE(putRequest.serialize(&bufPtr, &serLen, buffer.size(),
|
REQUIRE(putRequest.serialize(&bufPtr, &serLen, buffer.size(),
|
||||||
SerializeIF::Endianness::NETWORK) == OK);
|
SerializeIF::Endianness::NETWORK) == OK);
|
||||||
|
|
||||||
CHECK(putRequest.getSerializedSize() == serLen);
|
CHECK(putRequest.getSerializedSize() == serLen);
|
||||||
|
PutRequest requestDeserialized;
|
||||||
|
size_t deserLen = putRequest.getSerializedSize();
|
||||||
|
const uint8_t* deserPtr = buffer.data();
|
||||||
|
REQUIRE(requestDeserialized.deSerialize(&deserPtr, &deserLen, SerializeIF::Endianness::NETWORK) == OK);
|
||||||
|
CHECK(requestDeserialized.getDestId().getWidth() == destId.getWidth());
|
||||||
|
CHECK(requestDeserialized.getDestId().getValue() == destId.getValue());
|
||||||
|
size_t totalMsgsSize = 0;
|
||||||
|
const uint8_t* msgsToUserStart = requestDeserialized.getMessagesToUser(totalMsgsSize);
|
||||||
|
CHECK(totalMsgsSize == msgSize);
|
||||||
|
cfdp::Tlv genericTlv;
|
||||||
|
genericTlv.deSerialize(&msgsToUserStart, &totalMsgsSize, SerializeIF::Endianness::NETWORK);
|
||||||
|
CHECK(genericTlv.getType() == TlvType::MSG_TO_USER);
|
||||||
|
CHECK(genericTlv.getLengthField() == genericTlv.getSerializedSize() - 2);
|
||||||
|
CHECK(genericTlv.getValue()[0] == 'c');
|
||||||
|
CHECK(genericTlv.getValue()[1] == 'f');
|
||||||
|
CHECK(genericTlv.getValue()[2] == 'd');
|
||||||
|
CHECK(genericTlv.getValue()[3] == 'p');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user