hash and apply type added

This commit is contained in:
Bogdan Pilyugin 2023-07-27 18:36:59 +02:00
parent 8feca7d470
commit 66bf716d79
4 changed files with 65 additions and 27 deletions

View File

@ -45,6 +45,7 @@ typedef enum
SYS_ERROR_PARSE_MESSAGEID, SYS_ERROR_PARSE_MESSAGEID,
SYS_ERROR_PARSE_MSGTYPE, SYS_ERROR_PARSE_MSGTYPE,
SYS_ERROR_PARSE_PAYLOADTYPE, SYS_ERROR_PARSE_PAYLOADTYPE,
SYS_ERROR_PARSE_APPLYTYPE,
SYS_ERROR_PARSE_KEY1, SYS_ERROR_PARSE_KEY1,
SYS_ERROR_PARSE_KEY2, SYS_ERROR_PARSE_KEY2,

View File

@ -52,9 +52,9 @@ esp_err_t SetConfVar(char *name, char *val)
switch (V->vartype) switch (V->vartype)
{ {
case VAR_BOOL: case VAR_BOOL:
if (!strcmp(val, "true")) if (!strcmp(val, "true") || !strcmp(val, "1"))
*((bool*) V->ref) = true; *((bool*) V->ref) = true;
else if (!strcmp(val, "false")) else if (!strcmp(val, "false") || !strcmp(val, "0"))
*((bool*) V->ref) = 0; *((bool*) V->ref) = 0;
else else
return ESP_ERR_INVALID_ARG; return ESP_ERR_INVALID_ARG;
@ -92,7 +92,7 @@ esp_err_t GetConfVar(char *name, char *val)
switch (V->vartype) switch (V->vartype)
{ {
case VAR_BOOL: case VAR_BOOL:
strcpy(val, *((bool*) V->ref) ? "true" : "false"); strcpy(val, *((bool*) V->ref) ? "1" : "0");
break; break;
case VAR_INT: case VAR_INT:
itoa(*((int*) V->ref), val, 10); itoa(*((int*) V->ref), val, 10);

View File

@ -30,13 +30,11 @@
"msgtype":1, "msgtype":1,
"payloadtype":1, "payloadtype":1,
"payload":{ "payload":{
"variables":[ "applytype":1,
{"name":"variablename1","val":"variablevalue1"}, "variables":[{"name":"netname","val":"DEVICE_HOSTNAME"},
{"name":"variablename2","val":"variablevalue2"}, {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"},
{"name":"variablename3","val":"variablevalue3"}, {"name":"ledenab","val":"0"},
{"name":"variablename4","val":"variablevalue4"}, {"name":"otaint","val":"3600"}]
{"name":"variablename5","val":"variablevalue5"},
{"name":"variablename6","val":"variablevalue6"},]
}}, }},
"signature":"6a11b872e8f766673eb82e127b6918a0dc96a42c5c9d184604f9787f3d27bcef"} "signature":"6a11b872e8f766673eb82e127b6918a0dc96a42c5c9d184604f9787f3d27bcef"}
@ -48,13 +46,10 @@
"msgtype":2, "msgtype":2,
"payloadtype":1 "payloadtype":1
"payload":{ "payload":{
"variables":[ "variables":[{"name":"netname","val":""},
{"name":"variablename1","val":""}, {"name":"otaurl","val":""},
{"name":"variablename2","val":""}, {"name":"ledenab","val":""},
{"name":"variablename3","val":""}, {"name":"otaint","val":""}]
{"name":"variablename4","val":""},
{"name":"variablename5","val":""},
{"name":"variablename6","val":""},]
}}, }},
"signature":"3c1254d5b0e7ecc7e662dd6397554f02622ef50edba18d0b30ecb5d53e409bcb"} "signature":"3c1254d5b0e7ecc7e662dd6397554f02622ef50edba18d0b30ecb5d53e409bcb"}
@ -67,13 +62,10 @@
"msgtype": 3, "msgtype": 3,
"payloadtype":1, "payloadtype":1,
"payload":{ "payload":{
"variables":[ "variables":[{"name":"netname","val":"DEVICE_HOSTNAME"},
{"name":"variablename1","val":"variablevalue1"}, {"name":"otaurl","val":"https://iotronic.cloud/firmware/firmware.bin"},
{"name":"variablename2","val":"variablevalue2"}, {"name":"ledenab","val":"0"},
{"name":"variablename3","val":"variablevalue3"}, {"name":"otaint","val":"3600"}]
{"name":"variablename4","val":"variablevalue4"},
{"name":"variablename5","val":"variablevalue5"},
{"name":"variablename6","val":"variablevalue6"},]
}, },
"error":"SYS_OK", "error":"SYS_OK",
"error_descr":"Result successful"}, "error_descr":"Result successful"},
@ -161,7 +153,7 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
else else
{ //Read variables { //Read variables
esp_err_t res = GetConfVar(VarName, VarValue); esp_err_t res = GetConfVar(VarName, VarValue);
if ( res != ESP_OK) if (res != ESP_OK)
strcpy(VarValue, esp_err_to_name(res)); strcpy(VarValue, esp_err_to_name(res));
jwObj_string("name", VarName); jwObj_string("name", VarName);
jwObj_string("val", VarValue); jwObj_string("val", VarValue);
@ -178,10 +170,52 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
jwObj_string("error", (char*) err_br); jwObj_string("error", (char*) err_br);
jwObj_string("error_descr", (char*) err_desc); jwObj_string("error_descr", (char*) err_desc);
jwEnd(); jwEnd();
char* datap = strstr(MSG->outputDataBuffer, "\"data\":");
if(datap)
{
datap += sizeof("\"data\":") - 1;
SHA256hmacHash((unsigned char*) datap , strlen(datap), (unsigned char*) "mykey", sizeof("mykey"),
MSG->parsedData.sha256);
unsigned char sha_print[32 * 2 + 1];
BytesToStr(MSG->parsedData.sha256, sha_print, 32);
sha_print[32 * 2] = 0x00;
ESP_LOGI(TAG, "SHA256 of DATA object is %s", sha_print);
jwObj_string("signature", (char*)sha_print);
}
else
return SYS_ERROR_SHA256_DATA;
jwEnd(); jwEnd();
jwObj_string("signature", "1234567890");
jwClose(); jwClose();
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'applytype'", &result);
if (result.elements == 1)
{
int atype = atoi((char*) result.pValue);
switch (atype)
{
case 0:
break;
case 1:
//WriteNVSSysConfig(GetSysConf());
break;
case 2:
//WriteNVSSysConfig(GetSysConf());
//DelayedRestart();
break;
default:
return SYS_ERROR_PARSE_APPLYTYPE;
}
}
else
{
if (MSG->parsedData.msgType == DATA_MESSAGE_TYPE_COMMAND)
return SYS_ERROR_PARSE_APPLYTYPE;
}
return SYS_OK_DATA; return SYS_OK_DATA;
} }
@ -260,8 +294,9 @@ static sys_error_code SysDataParser(data_message_t *MSG)
case 1: case 1:
//MSG->parsedData.payload = malloc(sizeof(payload_type_vars)); Not needed for this case //MSG->parsedData.payload = malloc(sizeof(payload_type_vars)); Not needed for this case
return SysPayloadTypeVarsHandler(MSG); return SysPayloadTypeVarsHandler(MSG);
break; break;
default:
return SYS_ERROR_PARSE_PAYLOADTYPE;
} }
return SYS_ERROR_UNKNOWN; return SYS_ERROR_UNKNOWN;

View File

@ -41,6 +41,8 @@ const sys_error_t SysErrors[] = {
{ SYS_ERROR_PARSE_MESSAGEID, "SYS_ERROR_PARSE_MESSAGEID", "Key 'msgid' not found or have illegal value" }, { SYS_ERROR_PARSE_MESSAGEID, "SYS_ERROR_PARSE_MESSAGEID", "Key 'msgid' not found or have illegal value" },
{ SYS_ERROR_PARSE_MSGTYPE, "SYS_ERROR_PARSE_MSGTYPE", "Key 'msgtype' not found or have illegal value"}, { SYS_ERROR_PARSE_MSGTYPE, "SYS_ERROR_PARSE_MSGTYPE", "Key 'msgtype' not found or have illegal value"},
{ SYS_ERROR_PARSE_PAYLOADTYPE, "SYS_ERROR_PARSE_PAYLOADTYPE", "Key 'payloadtype' not found or have illegal value"}, { SYS_ERROR_PARSE_PAYLOADTYPE, "SYS_ERROR_PARSE_PAYLOADTYPE", "Key 'payloadtype' not found or have illegal value"},
{ SYS_ERROR_PARSE_APPLYTYPE, "SYS_ERROR_PARSE_APPLYTYPE", "Key 'applytype' not found or have illegal value"},
{ SYS_ERROR_PARSE_KEY1, "SYS_ERROR_PARSE_KEY1", "Key 'key1' not found or have illegal value"}, { SYS_ERROR_PARSE_KEY1, "SYS_ERROR_PARSE_KEY1", "Key 'key1' not found or have illegal value"},
{ SYS_ERROR_PARSE_KEY2, "SYS_ERROR_PARSE_KEY2", "Key 'key2' not found or have illegal value"}, { SYS_ERROR_PARSE_KEY2, "SYS_ERROR_PARSE_KEY2", "Key 'key2' not found or have illegal value"},