Updated the GadgetBridge parser to fix an issue where a double quote was added in the parsed data if we received a notification text with 35 characters, removed the const attribute of the parameter passed in the event callback

This commit is contained in:
anschrammh 2023-10-19 08:07:26 +02:00
parent 59a42c7309
commit 2fc99479c5
7 changed files with 27 additions and 21 deletions

View File

@ -6,6 +6,7 @@
* @version 0.1 * @version 0.1
* @date 2023-04-05 * @date 2023-04-05
* Updated : 2023-10-15, fixed potential memory leak. * Updated : 2023-10-15, fixed potential memory leak.
* Updated : 2023-10-17, fixed potential issue where a double quote is added at the start of a parsed string.
* *
* @copyright MIT * @copyright MIT
* *
@ -256,7 +257,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
{ {
case GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE: case GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE:
// To prevent a potential memory leak if the parser is fed with bad data // To prevent a potential memory leak if the parser is fed with ill formed data
_free_event_data(); _free_event_data();
if((start = strstr(_gadget_bridge_internals.buffer, "setTime(")) if((start = strstr(_gadget_bridge_internals.buffer, "setTime("))
@ -435,7 +436,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
else to_return = GADGET_BRIDGE_PARSER_CODE_OK; else to_return = GADGET_BRIDGE_PARSER_CODE_OK;
break; break;
case GADGET_BRIDGE_PARSER_FSM_FOUND_ID_SRC: case GADGET_BRIDGE_PARSER_FSM_FOUND_ID_SRC:
if((start = strstr(_gadget_bridge_internals.buffer, "src:")) && if((start = strstr(_gadget_bridge_internals.buffer, "src:\"")) &&
((end = strstr(_gadget_bridge_internals.buffer, ",title")) || (end2 = strstr(_gadget_bridge_internals.buffer, ",subject")))) ((end = strstr(_gadget_bridge_internals.buffer, ",title")) || (end2 = strstr(_gadget_bridge_internals.buffer, ",subject"))))
{ {
if((end && !end2) || (end != NULL && end < end2)) if((end && !end2) || (end != NULL && end < end2))
@ -465,7 +466,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
else to_return = GADGET_BRIDGE_PARSER_CODE_OK; else to_return = GADGET_BRIDGE_PARSER_CODE_OK;
break; break;
case GADGET_BRIDGE_PARSER_FSM_FOUND_TITLE: case GADGET_BRIDGE_PARSER_FSM_FOUND_TITLE:
if((start = strstr(_gadget_bridge_internals.buffer, "title:"))) if((start = strstr(_gadget_bridge_internals.buffer, "title:\"")))
{ {
//printf("###Parsing TITLE content\n"); //printf("###Parsing TITLE content\n");
@ -488,7 +489,6 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
if(end) if(end)
{ {
//printf("###Found BODY\n"); //printf("###Found BODY\n");
_parser_extract_char_str(_gadget_bridge_internals.buffer, end - 1, &_gadget_bridge_internals.event_data.notification.title); _parser_extract_char_str(_gadget_bridge_internals.buffer, end - 1, &_gadget_bridge_internals.event_data.notification.title);
// We remove the parsed part from the buffer // We remove the parsed part from the buffer
@ -519,7 +519,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
} }
break; break;
case GADGET_BRIDGE_PARSER_FSM_FOUND_SRC_BODY: case GADGET_BRIDGE_PARSER_FSM_FOUND_SRC_BODY:
if((start = strstr(_gadget_bridge_internals.buffer, "body:"))) if((start = strstr(_gadget_bridge_internals.buffer, "body:\"")))
{ {
//printf("###Parsing BODY content\n"); //printf("###Parsing BODY content\n");
@ -603,7 +603,6 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
{ {
// We don't care about the sender nor the tel tag // We don't care about the sender nor the tel tag
//printf("###TEST NOTIFICATION Type done\n"); //printf("###TEST NOTIFICATION Type done\n");
_parser_extract_char_str(_gadget_bridge_internals.buffer, end - 1, &_gadget_bridge_internals.event_data.notification.body); _parser_extract_char_str(_gadget_bridge_internals.buffer, end - 1, &_gadget_bridge_internals.event_data.notification.body);
// We remove the parsed part from the buffer // We remove the parsed part from the buffer
@ -711,7 +710,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
_gadget_bridge_internals.gadget_bridge_parser_fsm = GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE; _gadget_bridge_internals.gadget_bridge_parser_fsm = GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE;
break;*/ break;*/
case GADGET_BRIDGE_PARSER_FSM_FOUND_SUBJECT: case GADGET_BRIDGE_PARSER_FSM_FOUND_SUBJECT:
if((start = strstr(_gadget_bridge_internals.buffer, "subject:"))) if((start = strstr(_gadget_bridge_internals.buffer, "subject:\"")))
{ {
//printf("###Parsing SUBJECT content\n"); //printf("###Parsing SUBJECT content\n");

View File

@ -201,7 +201,7 @@ typedef struct gadget_bridge_event_data
}; };
} gadget_bridge_event_data_t; } gadget_bridge_event_data_t;
typedef void (*parser_event_callback_t)(const gadget_bridge_event_data_t *gadget_bridge_event_data); typedef void (*parser_event_callback_t)(gadget_bridge_event_data_t *gadget_bridge_event_data);
/** /**
* @brief Sends an Android toast to GadgetBridge to be displayed on the phone. * @brief Sends an Android toast to GadgetBridge to be displayed on the phone.

View File

@ -6,6 +6,7 @@
* @version 0.1 * @version 0.1
* @date 2023-04-05 * @date 2023-04-05
* Updated : 2023-10-15, fixed potential memory leak. * Updated : 2023-10-15, fixed potential memory leak.
* Updated : 2023-10-17, fixed potential issue where a double quote is added at the start of a parsed string.
* *
* @copyright MIT * @copyright MIT
* *
@ -252,7 +253,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
{ {
case GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE: case GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE:
// To prevent a potential memory leak if the parser is fed with bad data // To prevent a potential memory leak if the parser is fed with ill formed data
_free_event_data(); _free_event_data();
if((start = strstr(_gadget_bridge_internals.buffer, "setTime(")) if((start = strstr(_gadget_bridge_internals.buffer, "setTime("))
@ -428,7 +429,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
else to_return = GADGET_BRIDGE_PARSER_CODE_OK; else to_return = GADGET_BRIDGE_PARSER_CODE_OK;
break; break;
case GADGET_BRIDGE_PARSER_FSM_FOUND_ID_SRC: case GADGET_BRIDGE_PARSER_FSM_FOUND_ID_SRC:
if((start = strstr(_gadget_bridge_internals.buffer, "src:")) && if((start = strstr(_gadget_bridge_internals.buffer, "src:\"")) &&
((end = strstr(_gadget_bridge_internals.buffer, ",title")) || (end2 = strstr(_gadget_bridge_internals.buffer, ",subject")))) ((end = strstr(_gadget_bridge_internals.buffer, ",title")) || (end2 = strstr(_gadget_bridge_internals.buffer, ",subject"))))
{ {
if((end && !end2) || (end != NULL && end < end2)) if((end && !end2) || (end != NULL && end < end2))
@ -458,7 +459,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
else to_return = GADGET_BRIDGE_PARSER_CODE_OK; else to_return = GADGET_BRIDGE_PARSER_CODE_OK;
break; break;
case GADGET_BRIDGE_PARSER_FSM_FOUND_TITLE: case GADGET_BRIDGE_PARSER_FSM_FOUND_TITLE:
if((start = strstr(_gadget_bridge_internals.buffer, "title:"))) if((start = strstr(_gadget_bridge_internals.buffer, "title:\"")))
{ {
printf("###Parsing TITLE content\n"); printf("###Parsing TITLE content\n");
@ -512,7 +513,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
} }
break; break;
case GADGET_BRIDGE_PARSER_FSM_FOUND_SRC_BODY: case GADGET_BRIDGE_PARSER_FSM_FOUND_SRC_BODY:
if((start = strstr(_gadget_bridge_internals.buffer, "body:"))) if((start = strstr(_gadget_bridge_internals.buffer, "body:\"")))
{ {
printf("###Parsing BODY content\n"); printf("###Parsing BODY content\n");
@ -704,7 +705,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
_gadget_bridge_internals.gadget_bridge_parser_fsm = GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE; _gadget_bridge_internals.gadget_bridge_parser_fsm = GADGET_BRIDGE_PARSER_FSM_NEW_MESSAGE;
break;*/ break;*/
case GADGET_BRIDGE_PARSER_FSM_FOUND_SUBJECT: case GADGET_BRIDGE_PARSER_FSM_FOUND_SUBJECT:
if((start = strstr(_gadget_bridge_internals.buffer, "subject:"))) if((start = strstr(_gadget_bridge_internals.buffer, "subject:\"")))
{ {
printf("###Parsing SUBJECT content\n"); printf("###Parsing SUBJECT content\n");

View File

@ -202,7 +202,7 @@ typedef struct gadget_bridge_event_data
}; };
} gadget_bridge_event_data_t; } gadget_bridge_event_data_t;
typedef void (*parser_event_callback_t)(const gadget_bridge_event_data_t *gadget_bridge_event_data); typedef void (*parser_event_callback_t)(gadget_bridge_event_data_t *gadget_bridge_event_data);
/** /**
* @brief Sends an Android toast to GadgetBridge to be displayed on the phone. * @brief Sends an Android toast to GadgetBridge to be displayed on the phone.

View File

@ -50,18 +50,19 @@
<stdlib.h> <stdlib.h>
<string.h> <string.h>
1696357704 source:d:\users\think\documents\w800_smart_watch\src\gadget_bridge_parser\gadget_bridge.c 1697540423 source:d:\users\think\documents\w800_smart_watch\src\gadget_bridge_parser\gadget_bridge.c
"gadget_bridge.h" "gadget_bridge.h"
<stdio.h> <stdio.h>
<stdlib.h> <stdlib.h>
<string.h> <string.h>
<assert.h>
1695293778 d:\users\think\documents\w800_smart_watch\src\gadget_bridge_parser\gadget_bridge.h 1696487243 d:\users\think\documents\w800_smart_watch\src\gadget_bridge_parser\gadget_bridge.h
<stdint.h> <stdint.h>
<stdbool.h> <stdbool.h>
<time.h> <time.h>
1695293778 source:d:\users\think\documents\w800_smart_watch\src\gadget_bridge_parser\main.c 1697572727 source:d:\users\think\documents\w800_smart_watch\src\gadget_bridge_parser\main.c
<stdio.h> <stdio.h>
<stdlib.h> <stdlib.h>
<string.h> <string.h>

View File

@ -7,14 +7,14 @@
<Cursor1 position="4496" topLine="288" /> <Cursor1 position="4496" topLine="288" />
</Cursor> </Cursor>
</File> </File>
<File name="gadget_bridge.c" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="gadget_bridge.c" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="71209" topLine="1490" /> <Cursor1 position="35064" topLine="963" />
</Cursor> </Cursor>
</File> </File>
<File name="main.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0"> <File name="main.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor> <Cursor>
<Cursor1 position="11686" topLine="156" /> <Cursor1 position="11548" topLine="333" />
</Cursor> </Cursor>
</File> </File>
</CodeBlocks_layout_file> </CodeBlocks_layout_file>

View File

@ -39,7 +39,7 @@ GB({t:"act",hrm:false,stp:true,int:10})[10]
[16]GB({t:"act",hrm:false,stp:false,int:10})[10] [16]GB({t:"act",hrm:false,stp:false,int:10})[10]
**/ **/
void parser_event(const gadget_bridge_event_data_t *gadget_bridge_event_data) void parser_event(gadget_bridge_event_data_t *gadget_bridge_event_data)
{ {
printf("----------->Event of type : %s\n", gadget_bridge_event_type_2_str(gadget_bridge_event_data->event_type)); printf("----------->Event of type : %s\n", gadget_bridge_event_type_2_str(gadget_bridge_event_data->event_type));
@ -351,6 +351,11 @@ const char *sample[] =
"ux pour la backyard ", "ux pour la backyard ",
"!\nEncore bravo :cla", "!\nEncore bravo :cla",
"p::+1:\"})[10]", "p::+1:\"})[10]",
"[16]GB({t:\"notify\",id",
":1697570919,src:\"Gadget",
"bridge\",subject:\"12345678912345678912345678912345678\",body:\"12345678912345678912345678912345678\",sender:\"12345678912345678912345678912345678\",tel:\"12345678912345678912345678912345678\"})[10]"
}; };
int main() int main()