[Retain] Fix bug in last retained msg and add retain commands to tinytests

This commit is contained in:
Francois BIOT
2023-04-17 02:40:15 +02:00
parent 42d89cdf06
commit 6b9d764c23
3 changed files with 44 additions and 9 deletions

View File

@@ -957,14 +957,19 @@ void MqttBroker::retainDrop()
void MqttBroker::retain(const Topic& topic, const MqttMessage& msg)
{
debug("MqttBroker::retain msg_type=" << _HEX(msg.type()));
debug("MqttBroker::retain msg_type=" << _HEX(msg.type()) << ", retain_size=" << retain_size);
if (retain_size==0 or msg.type() != MqttMessage::Publish) return;
if (msg.flags() & 1) // flag RETAIN
{
debug(" retaining " << topic.str());
if (retained.find(topic) == retained.end()) retainDrop();
auto old = retained.find(topic);
if (old == retained.end())
retainDrop();
else
retained.erase(old);
// FIXME if payload size == 0 remove message from retained
Retain r(micros(), msg);
r.msg.retained();
retained.insert({ topic, std::move(r)});
}
}