diff --git a/fsfw b/fsfw index 8c116852..9ef63825 160000 --- a/fsfw +++ b/fsfw @@ -1 +1 @@ -Subproject commit 8c1168524049ef0e5b2144b6c04aeb01538053c2 +Subproject commit 9ef63825f3d8486b05c3f6193ae0503833e6f8a4 diff --git a/mission/cfdp/CfdpUser.cpp b/mission/cfdp/CfdpUser.cpp index 65c1f456..c2e6024d 100644 --- a/mission/cfdp/CfdpUser.cpp +++ b/mission/cfdp/CfdpUser.cpp @@ -2,34 +2,43 @@ #include +using namespace returnvalue; + namespace cfdp { -EiveUserHandler::EiveUserHandler(HasFileSystemIF& vfs, MessageQueueId_t cfdpRequestId) - : cfdp::UserBase(vfs) { - userQueue = QueueFactory::instance()->createMessageQueue(10); +EiveUserHandler::EiveUserHandler(HasFileSystemIF& vfs, StorageManagerIF& ipcStore, + MessageQueueId_t cfdpRequestId) + : cfdp::UserBase(vfs), userQueue(QueueFactory::instance()->createMessageQueue(10)) { + if (userQueue == nullptr) { + sif::error << "EiveUserHandler: Queue creation failed" << std::endl; + return; + } userQueue->setDefaultDestination(cfdpRequestId); + reservedMsgParser = new ReservedMessageParser(ipcStore, *userQueue, cfdpRequestId); } -EiveUserHandler::~EiveUserHandler() { - QueueFactory::instance()->deleteMessageQueue(userQueue); -} +EiveUserHandler::~EiveUserHandler() { QueueFactory::instance()->deleteMessageQueue(userQueue); } void EiveUserHandler::transactionIndication(const cfdp::TransactionId& id) {} void EiveUserHandler::eofSentIndication(const cfdp::TransactionId& id) {} -void EiveUserHandler::transactionFinishedIndication( - const cfdp::TransactionFinishedParams& params) { +void EiveUserHandler::transactionFinishedIndication(const cfdp::TransactionFinishedParams& params) { sif::info << "File transaction finished for transaction with " << params.id << std::endl; } void EiveUserHandler::metadataRecvdIndication(const cfdp::MetadataRecvdParams& params) { - // TODO: Parse user messages and convert them into put requests where applicable. sif::info << "Metadata received for transaction with " << params.id << std::endl; + if (params.numberOfMsgsToUser > 0 and params.msgsToUserArray != nullptr) { + ReturnValue_t result = + reservedMsgParser->parse(params.msgsToUserArray, params.numberOfMsgsToUser); + if (result != OK) { + sif::warning << "EiveUserHandler: Parsing reserved CFDP messages failed" << std::endl; + } + } } -void EiveUserHandler::fileSegmentRecvdIndication( - const cfdp::FileSegmentRecvdParams& params) {} +void EiveUserHandler::fileSegmentRecvdIndication(const cfdp::FileSegmentRecvdParams& params) {} void EiveUserHandler::reportIndication(const cfdp::TransactionId& id, cfdp::StatusReportIF& report) {} -void EiveUserHandler::suspendedIndication(const cfdp::TransactionId& id, - cfdp::ConditionCode code) {} +void EiveUserHandler::suspendedIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code) { +} void EiveUserHandler::resumedIndication(const cfdp::TransactionId& id, size_t progress) {} void EiveUserHandler::faultIndication(const cfdp::TransactionId& id, cfdp::ConditionCode code, size_t progress) {} diff --git a/mission/cfdp/CfdpUser.h b/mission/cfdp/CfdpUser.h index fa4d0485..ba981cf1 100644 --- a/mission/cfdp/CfdpUser.h +++ b/mission/cfdp/CfdpUser.h @@ -1,13 +1,15 @@ #ifndef MISSION_CFDP_CFDPUSER_H_ #define MISSION_CFDP_CFDPUSER_H_ +#include #include namespace cfdp { class EiveUserHandler : public cfdp::UserBase { public: - explicit EiveUserHandler(HasFileSystemIF& vfs, MessageQueueId_t cfdpRequestId); + explicit EiveUserHandler(HasFileSystemIF& vfs, StorageManagerIF& ipcStore, + MessageQueueId_t cfdpRequestId); virtual ~EiveUserHandler(); @@ -27,6 +29,7 @@ class EiveUserHandler : public cfdp::UserBase { private: MessageQueueIF* userQueue; + ReservedMessageParser* reservedMsgParser; }; } // namespace cfdp diff --git a/mission/genericFactory.cpp b/mission/genericFactory.cpp index 9bd000c7..73645f79 100644 --- a/mission/genericFactory.cpp +++ b/mission/genericFactory.cpp @@ -277,7 +277,7 @@ void ObjectFactory::produceGenericObjects(HealthTableIF** healthTable_, PusTmFun auto* tmtcQueue = QueueFactory::instance()->createMessageQueue(32); auto* cfdpQueue = QueueFactory::instance()->createMessageQueue(16); - auto eiveUserHandler = new cfdp::EiveUserHandler(HOST_FS, cfdpQueue->getId()); + auto eiveUserHandler = new cfdp::EiveUserHandler(HOST_FS, **ipcStore, cfdpQueue->getId()); FsfwHandlerParams params(objects::CFDP_HANDLER, HOST_FS, **cfdpFunnel, *tcStore, **tmStore, *tmtcQueue, *cfdpQueue); cfdp::IndicationCfg indicationCfg;