#pragma once #include #include #include "fsfw/cfdp/VarLenFields.h" #include "fsfw/cfdp/tlv/FilestoreRequestTlv.h" #include "fsfw/cfdp/tlv/MessageToUserTlv.h" namespace cfdp { class PutRequest : public SerializeIF { public: EntityId destId; /** * Metadata only constructor. * @param destId * @param msgsToUser * @param msgsToUserTotalSize * @param fsRequests * @param fsRequestsSize */ PutRequest(EntityId destId, const uint8_t* msgsToUser, size_t msgsToUserTotalSize, const uint8_t* fsRequests, size_t fsRequestsSize); /** * Default constructor for deserialization. */ PutRequest() = default; [[nodiscard]] ReturnValue_t serialize(uint8_t** buffer, size_t* size, size_t maxSize, Endianness streamEndianness) const override; ReturnValue_t deSerialize(const uint8_t** buffer, size_t* size, Endianness streamEndianness) override; [[nodiscard]] size_t getSerializedSize() const override; [[nodiscard]] bool isMetadataOnly() const; private: uint8_t destIdWidth = 0; uint8_t metadataOnly = true; // Transaction parameters. Omitted if the put request is metadata only. const char* destName = nullptr; uint64_t destNameSize = 0; const char* sourceName = nullptr; uint64_t sourceNameSize = 0; uint8_t transmissionMode = TransmissionMode::UNACKNOWLEDGED; uint8_t closureRequested = false; // Metadata size_t msgsToUsersTotalSize = 0; const uint8_t* msgsToUserStartPtr = nullptr; size_t fsRequestsTotalSize = 0; const uint8_t* fsRequestStartPtr = nullptr; }; } // namespace cfdp