that should do the job
This commit is contained in:
parent
69fd6d0f6a
commit
5d3f00da7f
@ -1,4 +1,3 @@
|
|||||||
target_sources(
|
target_sources(
|
||||||
${LIB_FSFW_NAME}
|
${LIB_FSFW_NAME} PRIVATE SourceHandler.cpp DestHandler.cpp PutRequest.cpp
|
||||||
PRIVATE SourceHandler.cpp DestHandler.cpp MetadataParser.cpp
|
FaultHandlerBase.cpp UserBase.cpp)
|
||||||
PutRequest.cpp FaultHandlerBase.cpp UserBase.cpp)
|
|
||||||
|
@ -16,7 +16,7 @@ using namespace returnvalue;
|
|||||||
|
|
||||||
cfdp::DestHandler::DestHandler(DestHandlerParams params, FsfwParams fsfwParams)
|
cfdp::DestHandler::DestHandler(DestHandlerParams params, FsfwParams fsfwParams)
|
||||||
: tlvVec(params.maxTlvsInOnePdu),
|
: tlvVec(params.maxTlvsInOnePdu),
|
||||||
userTlvVec(params.maxTlvsInOnePdu),
|
msgToUserVec(params.maxTlvsInOnePdu),
|
||||||
destParams(std::move(params)),
|
destParams(std::move(params)),
|
||||||
fsfwParams(fsfwParams),
|
fsfwParams(fsfwParams),
|
||||||
transactionParams(params.maxFilenameLen) {
|
transactionParams(params.maxFilenameLen) {
|
||||||
@ -137,7 +137,7 @@ ReturnValue_t cfdp::DestHandler::handleMetadataPdu(const PacketInfo& info) {
|
|||||||
cfdp::StringLv destFileName;
|
cfdp::StringLv destFileName;
|
||||||
MetadataInfo metadataInfo(transactionParams.fileSize, sourceFileName, destFileName);
|
MetadataInfo metadataInfo(transactionParams.fileSize, sourceFileName, destFileName);
|
||||||
MetadataPduReader reader(constAccessorPair.second.data(), constAccessorPair.second.size(),
|
MetadataPduReader reader(constAccessorPair.second.data(), constAccessorPair.second.size(),
|
||||||
metadataInfo, nullptr, 0);
|
metadataInfo, tlvVec.data(), tlvVec.size());
|
||||||
ReturnValue_t result = reader.parseData();
|
ReturnValue_t result = reader.parseData();
|
||||||
// TODO: The standard does not really specify what happens if this kind of error happens
|
// TODO: The standard does not really specify what happens if this kind of error happens
|
||||||
// I think it might be a good idea to cache some sort of error code, which
|
// I think it might be a good idea to cache some sort of error code, which
|
||||||
@ -355,9 +355,15 @@ ReturnValue_t cfdp::DestHandler::startTransaction(MetadataPduReader& reader, Met
|
|||||||
params.fileSize = transactionParams.fileSize.getSize();
|
params.fileSize = transactionParams.fileSize.getSize();
|
||||||
params.destFileName = transactionParams.destName.data();
|
params.destFileName = transactionParams.destName.data();
|
||||||
params.sourceFileName = transactionParams.sourceName.data();
|
params.sourceFileName = transactionParams.sourceName.data();
|
||||||
// TODO: Is this really correct? Implement this correctly..
|
unsigned tlvIdx = 0;
|
||||||
// params.msgsToUserArray = dynamic_cast<MessageToUserTlv*>(userTlvVec.data());
|
for (const auto& opt : tlvVec) {
|
||||||
// params.msgsToUserLen = reader.getNumberOfParsedOptions();
|
if (opt.getType() == TlvType::MSG_TO_USER) {
|
||||||
|
msgToUserVec[tlvIdx] = MessageToUserTlv(opt.getValue(), opt.getLengthField());
|
||||||
|
tlvIdx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
params.msgsToUserArray = msgToUserVec.data();
|
||||||
|
params.msgsToUserLen = tlvIdx;
|
||||||
destParams.user.metadataRecvdIndication(params);
|
destParams.user.metadataRecvdIndication(params);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "fsfw/cfdp/handler/mib.h"
|
#include "fsfw/cfdp/handler/mib.h"
|
||||||
#include "fsfw/cfdp/pdu/MetadataPduReader.h"
|
#include "fsfw/cfdp/pdu/MetadataPduReader.h"
|
||||||
#include "fsfw/cfdp/pdu/PduConfig.h"
|
#include "fsfw/cfdp/pdu/PduConfig.h"
|
||||||
|
#include "fsfw/cfdp/tlv/MessageToUserTlv.h"
|
||||||
#include "fsfw/container/DynamicFIFO.h"
|
#include "fsfw/container/DynamicFIFO.h"
|
||||||
#include "fsfw/storagemanager/StorageManagerIF.h"
|
#include "fsfw/storagemanager/StorageManagerIF.h"
|
||||||
#include "fsfw/storagemanager/storeAddress.h"
|
#include "fsfw/storagemanager/storeAddress.h"
|
||||||
@ -30,6 +31,9 @@ struct DestHandlerParams {
|
|||||||
// TODO: This container can potentially take tons of space. For a better
|
// TODO: This container can potentially take tons of space. For a better
|
||||||
// memory efficient implementation, an additional abstraction could be
|
// memory efficient implementation, an additional abstraction could be
|
||||||
// be used so users can use uint32_t as the pair type
|
// be used so users can use uint32_t as the pair type
|
||||||
|
// TODO: Actually, we can provide a better abstraction via interface, which
|
||||||
|
// allows using something like a bounded map. This simplifies
|
||||||
|
// the implementation significantly.
|
||||||
LostSegmentsListBase& lostSegmentsContainer)
|
LostSegmentsListBase& lostSegmentsContainer)
|
||||||
: cfg(std::move(cfg)),
|
: cfg(std::move(cfg)),
|
||||||
user(user),
|
user(user),
|
||||||
@ -43,7 +47,7 @@ struct DestHandlerParams {
|
|||||||
|
|
||||||
PacketInfoListBase& packetListRef;
|
PacketInfoListBase& packetListRef;
|
||||||
LostSegmentsListBase& lostSegmentsContainer;
|
LostSegmentsListBase& lostSegmentsContainer;
|
||||||
uint8_t maxTlvsInOnePdu = 10;
|
uint8_t maxTlvsInOnePdu = 20;
|
||||||
size_t maxFilenameLen = 255;
|
size_t maxFilenameLen = 255;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -143,7 +147,7 @@ class DestHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::vector<cfdp::Tlv> tlvVec;
|
std::vector<cfdp::Tlv> tlvVec;
|
||||||
std::vector<cfdp::Tlv> userTlvVec;
|
std::vector<MessageToUserTlv> msgToUserVec;
|
||||||
DestHandlerParams destParams;
|
DestHandlerParams destParams;
|
||||||
cfdp::FsfwParams fsfwParams;
|
cfdp::FsfwParams fsfwParams;
|
||||||
TransactionParams transactionParams;
|
TransactionParams transactionParams;
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
#include "MetadataParser.h"
|
|
||||||
|
|
||||||
cfdp::MetadataParser::MetadataParser(MetadataPduReader& reader) {}
|
|
@ -1,15 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "fsfw/cfdp/pdu/MetadataPduReader.h"
|
|
||||||
|
|
||||||
namespace cfdp {
|
|
||||||
|
|
||||||
class MetadataParser {
|
|
||||||
public:
|
|
||||||
explicit MetadataParser(MetadataPduReader& reader);
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace cfdp
|
|
@ -7,3 +7,6 @@ MessageToUserTlv::MessageToUserTlv() : Tlv() {}
|
|||||||
|
|
||||||
MessageToUserTlv::MessageToUserTlv(const std::vector<uint8_t>& data)
|
MessageToUserTlv::MessageToUserTlv(const std::vector<uint8_t>& data)
|
||||||
: Tlv(cfdp::TlvType::MSG_TO_USER, data.data(), data.size()) {}
|
: Tlv(cfdp::TlvType::MSG_TO_USER, data.data(), data.size()) {}
|
||||||
|
|
||||||
|
MessageToUserTlv::MessageToUserTlv(const uint8_t* value, size_t size)
|
||||||
|
: Tlv(cfdp::TlvType::MSG_TO_USER, value, size) {}
|
||||||
|
@ -9,6 +9,7 @@ class MessageToUserTlv : public cfdp::Tlv {
|
|||||||
public:
|
public:
|
||||||
MessageToUserTlv();
|
MessageToUserTlv();
|
||||||
MessageToUserTlv(uint8_t* value, size_t size);
|
MessageToUserTlv(uint8_t* value, size_t size);
|
||||||
|
MessageToUserTlv(const uint8_t* value, size_t size);
|
||||||
explicit MessageToUserTlv(const std::vector<uint8_t>& data);
|
explicit MessageToUserTlv(const std::vector<uint8_t>& data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user