1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

node-iec61850-goose: log error instead of crashing on unsupported mms value

Signed-off-by: Philipp Jungkamp <philipp.jungkamp@rwth-aachen.de>
This commit is contained in:
Philipp Jungkamp 2023-03-14 15:44:51 +00:00
parent 9dcef61c99
commit 98ac02a85b
2 changed files with 12 additions and 8 deletions

View file

@ -124,7 +124,7 @@ protected:
SubscriberConfig subscriber_config;
GooseNode *node;
std::vector<GooseSignal> values;
std::vector<std::optional<GooseSignal>> values;
int last_state_num;
};

View file

@ -261,7 +261,7 @@ void GooseNode::onEvent(GooseSubscriber subscriber, GooseNode::InputEventContext
for (unsigned int i = 0; i < MmsValue_getArraySize(mms_values); i++) {
auto mms_value = MmsValue_getElement(mms_values, i);
auto goose_value = GooseSignal::fromMmsValue(mms_value).value();
auto goose_value = GooseSignal::fromMmsValue(mms_value);
ctx.values.push_back(goose_value);
}
@ -292,15 +292,19 @@ void GooseNode::pushSample(uint64_t timestamp) noexcept
auto& mapping = input.mappings[signal];
auto& values = input.contexts[mapping.subscriber].values;
if (mapping.index >= values.size())
continue;
if (mapping.type->mms_type != values[mapping.index].mmsType()) {
logger->error("unexpected mms_type for signal {}", sample->signals->getByIndex(signal)->toString());
if (mapping.index >= values.size() || !values[mapping.index]) {
auto signal_str = sample->signals->getByIndex(signal)->toString();
logger->error("tried to access unavailable goose value for signal {}", signal_str);
continue;
}
sample->data[signal] = values[mapping.index].signal_data;
if (mapping.type->mms_type != values[mapping.index]->mmsType()) {
auto signal_str = sample->signals->getByIndex(signal)->toString();
logger->error("unexpected mms_type for signal {}", signal_str);
continue;
}
sample->data[signal] = values[mapping.index]->signal_data;
}
if (queue_signalled_push(&input.queue, sample) != 1)