diff --git a/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.c b/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.c index 74d79bd..9d563ea 100644 --- a/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.c +++ b/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.c @@ -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"); diff --git a/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.h b/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.h index 9741601..2f01af3 100644 --- a/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.h +++ b/src/W800_SDK_v1.00.10/app/ble/gadget_bridge.h @@ -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. diff --git a/src/gadget_bridge_parser/gadget_bridge.c b/src/gadget_bridge_parser/gadget_bridge.c index ee678b5..806476d 100644 --- a/src/gadget_bridge_parser/gadget_bridge.c +++ b/src/gadget_bridge_parser/gadget_bridge.c @@ -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"); diff --git a/src/gadget_bridge_parser/gadget_bridge.h b/src/gadget_bridge_parser/gadget_bridge.h index 18258fe..5115904 100644 --- a/src/gadget_bridge_parser/gadget_bridge.h +++ b/src/gadget_bridge_parser/gadget_bridge.h @@ -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. diff --git a/src/gadget_bridge_parser/gadget_bridge_parser.depend b/src/gadget_bridge_parser/gadget_bridge_parser.depend index 07a6d99..2b8d674 100644 --- a/src/gadget_bridge_parser/gadget_bridge_parser.depend +++ b/src/gadget_bridge_parser/gadget_bridge_parser.depend @@ -50,18 +50,19 @@ -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" + -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 -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 diff --git a/src/gadget_bridge_parser/gadget_bridge_parser.layout b/src/gadget_bridge_parser/gadget_bridge_parser.layout index 7a2cad4..0242993 100644 --- a/src/gadget_bridge_parser/gadget_bridge_parser.layout +++ b/src/gadget_bridge_parser/gadget_bridge_parser.layout @@ -7,14 +7,14 @@ - + - + - + diff --git a/src/gadget_bridge_parser/main.c b/src/gadget_bridge_parser/main.c index 7943f12..77602ef 100644 --- a/src/gadget_bridge_parser/main.c +++ b/src/gadget_bridge_parser/main.c @@ -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()