Fix empty payload checksum being appended even if payload is empty.

pull/14/head
Ondřej Hruška 7 years ago
parent 7f6f21cdb7
commit 1f52a17fc2
  1. 18
      TinyFrame.c

@ -537,6 +537,7 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
} }
if (tf->len == 0) { if (tf->len == 0) {
// if the message has no body, we're done.
TF_HandleReceivedMessage(tf); TF_HandleReceivedMessage(tf);
TF_ResetParser(tf); TF_ResetParser(tf);
break; 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 // Checksum only if message had a body
if (TF_SENDBUF_LEN - len < sizeof(TF_CKSUM)) { if (msg->len > 0) {
TF_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len); // Flush if checksum wouldn't fit in the buffer
len = 0; 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_WriteImpl(tf, (const uint8_t *) tf->sendbuf, len);
TF_ReleaseTx(tf); TF_ReleaseTx(tf);
return true; return true;

Loading…
Cancel
Save