From 29a5bfbafa2f356dd8b5caebda23533cb28e6452 Mon Sep 17 00:00:00 2001 From: Patrick Fallberg Date: Tue, 12 Jan 2016 08:39:05 +0100 Subject: [PATCH] Backport of bugfix (#259) in repeaters when forwarding signed messages --- libraries/MySensors/MySensor.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/libraries/MySensors/MySensor.cpp b/libraries/MySensors/MySensor.cpp index e101dd1..b97ccae 100644 --- a/libraries/MySensors/MySensor.cpp +++ b/libraries/MySensors/MySensor.cpp @@ -396,7 +396,9 @@ boolean MySensor::sendRoute(MyMessage &message) { } // After this point, only the 'last' member of the message structure is allowed to be altered if the message has been signed, // or signature will become invalid and the message rejected by the receiver - } else mSetSigned(message, 0); // Message is not supposed to be signed, make sure it is marked unsigned + } else if (nc.nodeId == message.sender) { + mSetSigned(message, 0); // Message is not supposed to be signed, make sure it is marked unsigned + } #endif if (dest == GATEWAY_ADDRESS || !repeaterMode) { @@ -588,11 +590,18 @@ boolean MySensor::process() { } #endif - // Add string termination, good if we later would want to print it. - msg.data[mGetLength(msg)] = '\0'; - debug(PSTR("read: %d-%d-%d s=%d,c=%d,t=%d,pt=%d,l=%d,sg=%d:%s\n"), + if (msg.destination == nc.nodeId) { + debug(PSTR("read: %d-%d-%d s=%d,c=%d,t=%d,pt=%d,l=%d,sg=%d:%s\n"), + msg.sender, msg.last, msg.destination, msg.sensor, mGetCommand(msg), msg.type, mGetPayloadType(msg), mGetLength(msg), mGetSigned(msg), msg.getString(convBuf)); + } else { + if (repeaterMode && nc.nodeId != AUTO) { + debug(PSTR("read and forward: %d-%d-%d s=%d,c=%d,t=%d,pt=%d,l=%d,sg=%d:%s\n"), msg.sender, msg.last, msg.destination, msg.sensor, mGetCommand(msg), msg.type, mGetPayloadType(msg), mGetLength(msg), mGetSigned(msg), msg.getString(convBuf)); - mSetSigned(msg,0); // Clear the sign-flag now as verification (and debug printing) is completed + } else { + debug(PSTR("read and drop: %d-%d-%d s=%d,c=%d,t=%d,pt=%d,l=%d,sg=%d:%s\n"), + msg.sender, msg.last, msg.destination, msg.sensor, mGetCommand(msg), msg.type, mGetPayloadType(msg), mGetLength(msg), mGetSigned(msg), msg.getString(convBuf)); + } + } if(!(mGetVersion(msg) == PROTOCOL_VERSION)) { debug(PSTR("ver mismatch\n")); @@ -610,6 +619,7 @@ boolean MySensor::process() { if (destination == nc.nodeId) { // This message is addressed to this node + mSetSigned(msg,0); if (repeaterMode && last != nc.parentNodeId) { // Message is from one of the child nodes. Add it to routing table.