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:
parent
59a42c7309
commit
2fc99479c5
@ -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");
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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");
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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()
|
||||||
|
Loading…
Reference in New Issue
Block a user