2022-08-09 14:05:43 +02:00
|
|
|
#include "FaultHandlerBase.h"
|
|
|
|
|
2022-08-09 14:55:08 +02:00
|
|
|
namespace cfdp {
|
2022-08-09 14:39:03 +02:00
|
|
|
|
2022-08-09 14:55:08 +02:00
|
|
|
FaultHandlerBase::FaultHandlerBase() = default;
|
|
|
|
FaultHandlerBase::~FaultHandlerBase() = default;
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
bool FaultHandlerBase::getFaultHandler(cfdp::ConditionCode code,
|
|
|
|
cfdp::FaultHandlerCode& handler) const {
|
2022-08-09 14:39:03 +02:00
|
|
|
auto iter = faultHandlerMap.find(code);
|
2022-08-09 14:55:08 +02:00
|
|
|
if (iter == faultHandlerMap.end()) {
|
2022-08-09 14:39:03 +02:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
handler = iter->second;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
bool FaultHandlerBase::setFaultHandler(cfdp::ConditionCode code, cfdp::FaultHandlerCode handler) {
|
2022-08-09 14:39:03 +02:00
|
|
|
if (not faultHandlerMap.contains(code)) {
|
|
|
|
return false;
|
|
|
|
}
|
2022-09-15 18:41:15 +02:00
|
|
|
if (handler != FaultHandlerCode::NOTICE_OF_SUSPENSION and
|
|
|
|
handler != FaultHandlerCode::ABANDON_TRANSACTION and
|
|
|
|
handler != FaultHandlerCode::NOTICE_OF_CANCELLATION and
|
|
|
|
handler != FaultHandlerCode::IGNORE_ERROR) {
|
2022-08-09 15:29:22 +02:00
|
|
|
return false;
|
|
|
|
}
|
2022-08-09 14:39:03 +02:00
|
|
|
faultHandlerMap[code] = handler;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2022-09-15 18:41:15 +02:00
|
|
|
bool FaultHandlerBase::reportFault(cfdp::TransactionId& id, cfdp::ConditionCode code) {
|
2022-08-09 14:39:03 +02:00
|
|
|
if (not faultHandlerMap.contains(code)) {
|
|
|
|
return false;
|
|
|
|
}
|
2022-09-15 18:41:15 +02:00
|
|
|
cfdp::FaultHandlerCode fh = faultHandlerMap[code];
|
|
|
|
if (fh == cfdp::FaultHandlerCode::IGNORE_ERROR) {
|
2022-09-15 16:46:09 +02:00
|
|
|
ignoreCb(id, code);
|
2022-09-15 18:41:15 +02:00
|
|
|
} else if (fh == cfdp::FaultHandlerCode::ABANDON_TRANSACTION) {
|
2022-09-15 16:46:09 +02:00
|
|
|
abandonCb(id, code);
|
2022-09-15 18:41:15 +02:00
|
|
|
} else if (fh == cfdp::FaultHandlerCode::NOTICE_OF_CANCELLATION) {
|
2022-09-15 16:46:09 +02:00
|
|
|
noticeOfCancellationCb(id, code);
|
2022-09-15 18:41:15 +02:00
|
|
|
} else if (fh == cfdp::FaultHandlerCode::NOTICE_OF_SUSPENSION) {
|
2022-09-15 16:46:09 +02:00
|
|
|
noticeOfSuspensionCb(id, code);
|
2022-08-09 15:29:22 +02:00
|
|
|
} else {
|
|
|
|
// Should never happen, but use defensive programming
|
|
|
|
return false;
|
2022-08-09 14:39:03 +02:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
2022-08-09 14:55:08 +02:00
|
|
|
} // namespace cfdp
|