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
* @date 2023-04-05
* 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
*
@ -256,7 +257,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
{
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();
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;
break;
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"))))
{
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;
break;
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");
@ -488,7 +489,6 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
if(end)
{
//printf("###Found BODY\n");
_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
@ -519,7 +519,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
}
break;
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");
@ -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
//printf("###TEST NOTIFICATION Type done\n");
_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
@ -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;
break;*/
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");

View File

@ -201,7 +201,7 @@ typedef struct gadget_bridge_event_data
};
} 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.

View File

@ -6,6 +6,7 @@
* @version 0.1
* @date 2023-04-05
* 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
*
@ -252,7 +253,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
{
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();
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;
break;
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"))))
{
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;
break;
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");
@ -512,7 +513,7 @@ gadget_bridge_parser_code_e gadget_bridge_parser_run(void)
}
break;
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");
@ -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;
break;*/
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");

View File

@ -202,7 +202,7 @@ typedef struct gadget_bridge_event_data
};
} 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.

View File

@ -50,18 +50,19 @@
<stdlib.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"
<stdio.h>
<stdlib.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>
<stdbool.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>
<stdlib.h>
<string.h>

View File

@ -7,14 +7,14 @@
<Cursor1 position="4496" topLine="288" />
</Cursor>
</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>
<Cursor1 position="71209" topLine="1490" />
<Cursor1 position="35064" topLine="963" />
</Cursor>
</File>
<File name="main.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="11686" topLine="156" />
<Cursor1 position="11548" topLine="333" />
</Cursor>
</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]
**/
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));
@ -351,6 +351,11 @@ const char *sample[] =
"ux pour la backyard ",
"!\nEncore bravo :cla",
"p::+1:\"})[10]",
"[16]GB({t:\"notify\",id",
":1697570919,src:\"Gadget",
"bridge\",subject:\"12345678912345678912345678912345678\",body:\"12345678912345678912345678912345678\",sender:\"12345678912345678912345678912345678\",tel:\"12345678912345678912345678912345678\"})[10]"
};
int main()