Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1488abb517 | ||
|
|
1f52a17fc2 | ||
|
|
7f6f21cdb7 | ||
|
|
38952f8405 | ||
|
|
68ea3bb3a4 |
+29
-5
@@ -372,6 +372,12 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
if (res == TF_RENEW) {
|
||||
renew_id_listener(ilst);
|
||||
}
|
||||
else if (res == TF_CLOSE) {
|
||||
// Set userdata to NULL to avoid calling user for cleanup
|
||||
ilst->userdata = NULL;
|
||||
ilst->userdata2 = NULL;
|
||||
cleanup_id_listener(tf, i, ilst);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -389,8 +395,12 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
res = tlst->fn(tf, &msg);
|
||||
|
||||
if (res != TF_NEXT) {
|
||||
// if it's TF_CLOSE, we assume user already cleaned up userdata
|
||||
// TF_RENEW doesn't make sense here because type listeners don't expire
|
||||
// type listeners don't have userdata.
|
||||
// TF_RENEW doesn't make sense here because type listeners don't expire = same as TF_STAY
|
||||
|
||||
if (res == TF_CLOSE) {
|
||||
cleanup_type_listener(tf, i, tlst);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -404,8 +414,16 @@ static void _TF_FN TF_HandleReceivedMessage(TinyFrame *tf)
|
||||
res = glst->fn(tf, &msg);
|
||||
|
||||
if (res != TF_NEXT) {
|
||||
// if it's TF_CLOSE, we assume user already cleaned up userdata
|
||||
// TF_RENEW doesn't make sense here because generic listeners don't expire
|
||||
// generic listeners don't have userdata.
|
||||
// TF_RENEW doesn't make sense here because generic listeners don't expire = same as TF_STAY
|
||||
|
||||
// note: It's not expected that user will have multiple generic listeners, or
|
||||
// ever actually remove them. They're most useful as default callbacks if no other listener
|
||||
// handled the message.
|
||||
|
||||
if (res == TF_CLOSE) {
|
||||
cleanup_generic_listener(tf, i, glst);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -467,6 +485,7 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
||||
}
|
||||
#endif
|
||||
|
||||
//@formatter:off
|
||||
switch (tf->state) {
|
||||
case TFState_SOF:
|
||||
if (c == TF_SOF_BYTE) {
|
||||
@@ -518,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;
|
||||
@@ -570,6 +590,7 @@ void _TF_FN TF_AcceptChar(TinyFrame *tf, unsigned char c)
|
||||
}
|
||||
break;
|
||||
}
|
||||
//@formatter:on
|
||||
|
||||
// we get here after finishing HEAD, if no data are to be received - handle and clear
|
||||
if (tf->len == 0 && tf->state == TFState_DATA) {
|
||||
@@ -753,6 +774,8 @@ static bool _TF_FN TF_SendFrame(TinyFrame *tf, TF_Msg *msg, TF_Listener listener
|
||||
}
|
||||
}
|
||||
|
||||
// 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);
|
||||
@@ -761,8 +784,9 @@ static bool _TF_FN TF_SendFrame(TinyFrame *tf, TF_Msg *msg, TF_Listener listener
|
||||
|
||||
// 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);
|
||||
|
||||
return true;
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
* Upstream URL: https://github.com/MightyPork/TinyFrame
|
||||
*/
|
||||
|
||||
#define TF_VERSION "2.0.1"
|
||||
#define TF_VERSION "2.0.3"
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
#include <stdint.h> // for uint8_t etc
|
||||
|
||||
Reference in New Issue
Block a user