From 1f52a17fc2f31da8596bcfd3299b30c3f2c4a3f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Sat, 23 Dec 2017 16:23:59 +0100 Subject: [PATCH] Fix empty payload checksum being appended even if payload is empty. --- TinyFrame.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/TinyFrame.c b/TinyFrame.c index 07d4cf8..fb6d8ac 100644 --- a/TinyFrame.c +++ b/TinyFrame.c @@ -537,6 +537,7 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c) } if (tf->len == 0) { + // if the message has no body, we're done. TF_HandleReceivedMessage(tf); TF_ResetParser(tf); break; @@ -773,16 +774,19 @@ static bool _TF_FN TF_SendFrame(TinyFrame *tf, TF_Msg *msg, TF_Listener listener } } - // Flush if checksum wouldn't fit in the buffer - if (TF_SENDBUF_LEN - len < sizeof(TF_CKSUM)) { - TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len); - len = 0; + // Checksum only if message had a body + if (msg->len > 0) { + // Flush if checksum wouldn't fit in the buffer + if (TF_SENDBUF_LEN - len < sizeof(TF_CKSUM)) { + TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len); + len = 0; + } + + // Add checksum, flush what remains to be sent + len += TF_ComposeTail(tf->sendbuf + len, &cksum); } - // Add checksum, flush what remains to be sent - len += TF_ComposeTail(tf->sendbuf+len, &cksum); TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len); - TF_ReleaseTx(tf); return true;