Commit 983bc9ac authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

【修改内容】增加属性设置时参数根据物模型所定义的mix,max以及length进行有效性判断

See merge request chenweican/k-sdk!24
parents 5c98ce43 fc3801f2
...@@ -57,6 +57,112 @@ void kk_sendData2gw(void* data, int len, char* chalMark){ ...@@ -57,6 +57,112 @@ void kk_sendData2gw(void* data, int len, char* chalMark){
kk_ipc_send_ex(IPC_MID2PLAT, data, len + 1, chalMark); kk_ipc_send_ex(IPC_MID2PLAT, data, len + 1, chalMark);
} }
}
static int kk_property_set_data_check(cJSON * payload,const char *deviceCode){
cJSON *params = NULL;
dm_mgr_dev_node_t *node = NULL;
kk_tsl_data_t *property = NULL;
cJSON *propertyItem = NULL;
int res = 0;
int idx = 0;
int value = 0;
res = dm_mgr_get_device_by_devicecode(deviceCode,&node);
if (res != SUCCESS_RETURN) {
ERROR_PRINT("ERROR [%s][%d] res:%d\n",__FUNCTION__,__LINE__,res);
return FAIL_RETURN;
}
params = cJSON_GetObjectItem(payload, MSG_PARAMS_STR);
if(params != NULL){
for(idx = 0; idx < node->dev_shadow->property_number; idx++){
property = (kk_tsl_data_t *)(node->dev_shadow->properties + idx);
if(property == NULL){
continue;
}
propertyItem = cJSON_GetObjectItem(params, property->identifier);
if(propertyItem != NULL){
if(property->data_value.type == KK_TSL_DATA_TYPE_STRUCT){
kk_tsl_data_value_complex_t *complex_struct = NULL;
kk_tsl_data_t *current_data = NULL;
int index;
complex_struct = property->data_value.value;
for (index = 0; index < complex_struct->size; index++) {
current_data = (kk_tsl_data_t *)complex_struct->value + index;
cJSON *propertyItem_1 = NULL;
propertyItem_1 = cJSON_GetObjectItem(propertyItem, current_data->identifier);
if(propertyItem_1 == NULL){
continue;
}
if(current_data->data_value.type != KK_TSL_DATA_TYPE_STRUCT){
if(current_data->data_value.type == KK_TSL_DATA_TYPE_INT){
value = propertyItem_1->valueint;
if(value < current_data->data_value.mix ||value > current_data->data_value.max ){
ERROR_PRINT("ERROR ------------>value:%d,mix:%d,max:%d\n",value,current_data->data_value.mix,current_data->data_value.max);
return INVALID_PARAMETER;
}
}
else if(current_data->data_value.type == KK_TSL_DATA_TYPE_TEXT){
if(strlen(propertyItem_1->valuestring) > current_data->data_value.length ){
ERROR_PRINT("ERROR ------------>strlen(propertyItem_1->valuestring):%d,current_data->data_value.length:%d\n",strlen(propertyItem_1->valuestring),current_data->data_value.length);
return INVALID_PARAMETER;
}
}
}
else{
kk_tsl_data_value_complex_t *complex_struct_1 = NULL;
kk_tsl_data_t *current_data_1 = NULL;
int index_1;
complex_struct_1 = current_data->data_value.value;
for(index_1 = 0; index_1 < complex_struct_1->size; index_1++){
current_data_1 = (kk_tsl_data_t *)complex_struct_1->value + index_1;
cJSON *propertyItem_2 = NULL;
propertyItem_2 = cJSON_GetObjectItem(propertyItem_1, current_data_1->identifier);
if(propertyItem_2 == NULL){
continue;
}
if(current_data_1->data_value.type == KK_TSL_DATA_TYPE_INT){
value = propertyItem_2->valueint;
if(value < current_data_1->data_value.mix ||value > current_data_1->data_value.max ){
ERROR_PRINT("ERROR------------>value:%d,mix:%d,max:%d\n",value,current_data_1->data_value.mix,current_data_1->data_value.max);
return INVALID_PARAMETER;
}
}
else if(current_data_1->data_value.type == KK_TSL_DATA_TYPE_TEXT){
if(strlen(propertyItem_2->valuestring) > current_data_1->data_value.length ){
ERROR_PRINT("ERROR ------------>strlen(propertyItem_2->valuestring):%d,propertyItem_2->data_value.length:%d\n",strlen(propertyItem_2->valuestring),current_data_1->data_value.length);
return INVALID_PARAMETER;
}
}
}
}
}
}else if(property->data_value.type == KK_TSL_DATA_TYPE_INT){
value = propertyItem->valueint;
if(value < property->data_value.mix ||value > property->data_value.max ){
ERROR_PRINT("ERROR ------------>value:%d,mix:%d,max:%d\n",value,property->data_value.mix,property->data_value.max);
return INVALID_PARAMETER;
}
}
else if(property->data_value.type == KK_TSL_DATA_TYPE_TEXT){
if(strlen(propertyItem->valuestring) > property->data_value.length ){
ERROR_PRINT("ERROR ------------>strlen(propertyItem->valuestring):%d,property->data_value.length:%d\n",strlen(propertyItem->valuestring),property->data_value.length );
return INVALID_PARAMETER;
}
}
}
}
}
return SUCCESS_RETURN;
} }
void mid_cb(void* data, int len){ void mid_cb(void* data, int len){
if (data != NULL){ if (data != NULL){
...@@ -85,6 +191,16 @@ void mid_cb(void* data, int len){ ...@@ -85,6 +191,16 @@ void mid_cb(void* data, int len){
cJSON_Delete(json); cJSON_Delete(json);
return; return;
} }
/*****属性设置需要先检测设置参数是否超出物模型给定范围*******/
if (strcmp(type->valuestring, KK_THING_SERVICE_PROPERTY_SET)==0){
cJSON* payload = cJSON_GetObjectItem(json, MSG_PAYLOAD_STR);
if(payload != NULL){
res = kk_property_set_data_check(payload,deviceCode->valuestring);
if(res != SUCCESS_RETURN){
return;
}
}
}
int devType = 0; int devType = 0;
dm_mgr_get_devicetype_by_devicecode(deviceCode->valuestring,&devType); dm_mgr_get_devicetype_by_devicecode(deviceCode->valuestring,&devType);
......
...@@ -409,12 +409,6 @@ static int _kk_msg_request_parse(_IN_ char *payload, _IN_ int payload_len, _OU_ ...@@ -409,12 +409,6 @@ static int _kk_msg_request_parse(_IN_ char *payload, _IN_ int payload_len, _OU_
&request->params) != SUCCESS_RETURN) { &request->params) != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
} }
INFO_PRINT("Current Request Message ID: %.*s", request->id.value_length, request->id.value);
INFO_PRINT("Current Request Message Version: %.*s", request->version.value_length, request->version.value);
INFO_PRINT("Current Request Message Method: %.*s", request->method.value_length, request->method.value);
INFO_PRINT("Current Request Message Params: %.*s", request->params.value_length, request->params.value);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
......
#ifndef __KK_TSL_COM__ #ifndef __KK_TSL_COM__
#define __KK_TSL_COM__ #define __KK_TSL_COM__
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <stdint.h> #include <stdint.h>
#ifndef _IN_ #ifndef _IN_
#define _IN_ #define _IN_
#endif #endif
#ifndef _OU_ #ifndef _OU_
#define _OU_ #define _OU_
#endif #endif
//typedef unsigned long int uint64_t; //typedef unsigned long int uint64_t;
#define PRODUCT_TYPE_MAXLEN (32 + 1) #define PRODUCT_TYPE_MAXLEN (32 + 1)
#define PRODUCT_CODE_MAXLEN (32 + 1) #define PRODUCT_CODE_MAXLEN (32 + 1)
#define DEVICE_CODE_MAXLEN (32 + 1) #define DEVICE_CODE_MAXLEN (32 + 1)
#define DEVICE_MAC_MAXLEN (16 + 1) #define DEVICE_MAC_MAXLEN (16 + 1)
#define DEVICE_SN_MAXLEN (32 + 1) #define DEVICE_SN_MAXLEN (32 + 1)
#define DEVICE_VERSION_MAXLEN (32 + 1) #define DEVICE_VERSION_MAXLEN (32 + 1)
#define DM_UTILS_UINT16_STRLEN (5) #define DM_UTILS_UINT16_STRLEN (5)
#define DM_UTILS_UINT32_STRLEN (10) #define DM_UTILS_UINT32_STRLEN (10)
#define DM_UTILS_UINT64_STRLEN (20) #define DM_UTILS_UINT64_STRLEN (20)
#define KK_TSL_KEY_SCHEMA "schema" #define KK_TSL_KEY_SCHEMA "schema"
#define KK_TSL_KEY_LINK "link" #define KK_TSL_KEY_LINK "link"
#define KK_TSL_KEY_PROFILE "profile" #define KK_TSL_KEY_PROFILE "profile"
#define KK_TSL_KEY_PROPERTIES "properties" #define KK_TSL_KEY_PROPERTIES "properties"
#define KK_TSL_KEY_EVENTS "events" #define KK_TSL_KEY_EVENTS "events"
#define KK_TSL_KEY_SERVICES "services" #define KK_TSL_KEY_SERVICES "services"
#define KK_TSL_KEY_PROFILE_PK "productKey" #define KK_TSL_KEY_PROFILE_PK "productKey"
#define KK_TSL_KEY_PROFILE_DN "deviceName" #define KK_TSL_KEY_PROFILE_DN "deviceName"
#define KK_TSL_KEY_IDENTIFIER "identifier" #define KK_TSL_KEY_IDENTIFIER "identifier"
#define KK_TSL_KEY_NAME "name" #define KK_TSL_KEY_NAME "name"
#define KK_TSL_KEY_DESC "desc" #define KK_TSL_KEY_DESC "desc"
#define KK_TSL_KEY_ACCESS_MODE "accessMode" #define KK_TSL_KEY_ACCESS_MODE "accessMode"
#define KK_TSL_KEY_REQUIRED "required" #define KK_TSL_KEY_REQUIRED "required"
#define KK_TSL_KEY_METHOD "method" #define KK_TSL_KEY_METHOD "method"
#define KK_TSL_KEY_CALLTYPE "callType" #define KK_TSL_KEY_CALLTYPE "callType"
#define KK_TSL_KEY_OUTPUTDATA "outputData" #define KK_TSL_KEY_OUTPUTDATA "outputData"
#define KK_TSL_KEY_INPUTDATA "inputData" #define KK_TSL_KEY_INPUTDATA "inputData"
#define KK_TSL_KEY_DATATYPE "dataType" #define KK_TSL_KEY_DATATYPE "dataType"
#define KK_TSL_KEY_TYPE "type" #define KK_TSL_KEY_TYPE "type"
#define KK_TSL_KEY_SPECS "specs" #define KK_TSL_KEY_SPECS "specs"
#define KK_TSL_KEY_UNIT "unit" #define KK_TSL_KEY_UNIT "unit"
#define KK_TSL_KEY_UNITNAME "unitName" #define KK_TSL_KEY_UNITNAME "unitName"
#define KK_TSL_KEY_MIN "min" #define KK_TSL_KEY_MIN "min"
#define KK_TSL_KEY_MAX "max" #define KK_TSL_KEY_MAX "max"
#define KK_TSL_KEY_LENGTH "length" #define KK_TSL_KEY_LENGTH "length"
#define KK_TSL_KEY_SIZE "size" #define KK_TSL_KEY_SIZE "size"
#define KK_TSL_KEY_ITEM "item" #define KK_TSL_KEY_ITEM "item"
#define KK_MSG_KEY_DELIMITER '.' #define KK_MSG_KEY_DELIMITER '.'
#define KK_URI_SERVICE_DELIMITER '/' #define KK_URI_SERVICE_DELIMITER '/'
#define KK_URI_OFFSET 0 #define KK_URI_OFFSET 0
//Special Service And Event //Special Service And Event
#define KK_TSL_SPECIAL_SERVICE_SET_IDENTIFIER "set" #define KK_TSL_SPECIAL_SERVICE_SET_IDENTIFIER "set"
#define KK_TSL_SPECIAL_SERVICE_SET_METHOD "thing.service.property.set" #define KK_TSL_SPECIAL_SERVICE_SET_METHOD "thing.service.property.set"
#define KK_TSL_SPECIAL_SERVICE_GET_IDENTIFIER "get" #define KK_TSL_SPECIAL_SERVICE_GET_IDENTIFIER "get"
#define KK_TSL_SPECIAL_SERVICE_GET_METHOD "thing.service.property.get" #define KK_TSL_SPECIAL_SERVICE_GET_METHOD "thing.service.property.get"
#define KK_TSL_SPECIAL_EVENT_POST_IDENTIFIER "post" #define KK_TSL_SPECIAL_EVENT_POST_IDENTIFIER "post"
#define KK_TSL_SPECIAL_EVENT_POST_METHOD "thing.event.property.post" #define KK_TSL_SPECIAL_EVENT_POST_METHOD "thing.event.property.post"
#define KK_TSL_VERSION_IDENTIFIER "Version" #define KK_TSL_VERSION_IDENTIFIER "Version"
#define KK_TSL_CCU_LANIP_IDENTIFIER "LanIPAddress" #define KK_TSL_CCU_LANIP_IDENTIFIER "LanIPAddress"
#define KK_TSL_CCU_WANIP_IDENTIFIER "WanIPAddress" #define KK_TSL_CCU_WANIP_IDENTIFIER "WanIPAddress"
#define KK_TSL_CCU_WANSTATE_IDENTIFIER "WanState" #define KK_TSL_CCU_WANSTATE_IDENTIFIER "WanState"
#define KK_TSL_CCU_IOTCLOUD_IDENTIFIER "IOTCloudState" #define KK_TSL_CCU_IOTCLOUD_IDENTIFIER "IOTCloudState"
#define KK_TSL_GATAWAY_VERSION_IDENTIFIER "Version" #define KK_TSL_GATAWAY_VERSION_IDENTIFIER "Version"
#define KK_TSL_GATAWAY_IP_IDENTIFIER "IPAddress" #define KK_TSL_GATAWAY_IP_IDENTIFIER "IPAddress"
#define KK_TSL_GATAWAY_MAC_IDENTIFIER "MACAddress" #define KK_TSL_GATAWAY_MAC_IDENTIFIER "MACAddress"
#define KK_TSL_GATAWAY_PORT_IDENTIFIER "Port" #define KK_TSL_GATAWAY_PORT_IDENTIFIER "Port"
#define KK_TSL_GATAWAY_SN_IDENTIFIER "SN" #define KK_TSL_GATAWAY_SN_IDENTIFIER "SN"
#define KK_TSL_GATAWAY_WHITELIST_IDENTIFIER "WhiteListState" #define KK_TSL_GATAWAY_WHITELIST_IDENTIFIER "WhiteListState"
typedef enum { typedef enum {
KK_TSL_DATA_TARGET_SERVICE_INPUT_DATA, KK_TSL_DATA_TARGET_SERVICE_INPUT_DATA,
KK_TSL_DATA_TARGET_SERVICE_OUTPUT_DATA KK_TSL_DATA_TARGET_SERVICE_OUTPUT_DATA
} kk_tsl_data_target_e; } kk_tsl_data_target_e;
typedef enum { typedef enum {
DEVICE_HEARTBEAT_TIMEOUT = -15, DEVICE_HEARTBEAT_TIMEOUT = -15,
TSL_ALREADY_EXIST = -14, TSL_ALREADY_EXIST = -14,
TSL_SERVICE_GET_FAILED = -13, TSL_SERVICE_GET_FAILED = -13,
TSL_SERVICE_SET_FAILED = -12, TSL_SERVICE_SET_FAILED = -12,
TSL_EVENT_GET_FAILED = -11, TSL_EVENT_GET_FAILED = -11,
TSL_EVENT_SET_FAILED = -10, TSL_EVENT_SET_FAILED = -10,
TSL_PROPERTY_GET_FAILED = -9, TSL_PROPERTY_GET_FAILED = -9,
TSL_PROPERTY_SET_FAILED = -8, TSL_PROPERTY_SET_FAILED = -8,
TSL_EVENT_NOT_EXIST = -7, TSL_EVENT_NOT_EXIST = -7,
TSL_PROPERTY_NOT_EXIST = -6, TSL_PROPERTY_NOT_EXIST = -6,
TSL_SERVICE_NOT_EXIST = -5, TSL_SERVICE_NOT_EXIST = -5,
JSON_PARSE_FAILED = -4, JSON_PARSE_FAILED = -4,
MEMORY_NOT_ENOUGH = -3, MEMORY_NOT_ENOUGH = -3,
INVALID_PARAMETER = -2, INVALID_PARAMETER = -2,
FAIL_RETURN = -1, FAIL_RETURN = -1,
SUCCESS_RETURN = 0, SUCCESS_RETURN = 0,
} kk_tsl_error_code_t; } kk_tsl_error_code_t;
typedef enum { typedef enum {
KK_TSL_DATA_TYPE_NONE, //none KK_TSL_DATA_TYPE_NONE, //none
KK_TSL_DATA_TYPE_INT, //int KK_TSL_DATA_TYPE_INT, //int
KK_TSL_DATA_TYPE_FLOAT, //float KK_TSL_DATA_TYPE_FLOAT, //float
KK_TSL_DATA_TYPE_DOUBLE, //double KK_TSL_DATA_TYPE_DOUBLE, //double
KK_TSL_DATA_TYPE_TEXT, //string KK_TSL_DATA_TYPE_TEXT, //string
KK_TSL_DATA_TYPE_ENUM, //int KK_TSL_DATA_TYPE_ENUM, //int
KK_TSL_DATA_TYPE_DATE, //string KK_TSL_DATA_TYPE_DATE, //string
KK_TSL_DATA_TYPE_BOOL, //bool,0 or 1 KK_TSL_DATA_TYPE_BOOL, //bool,0 or 1
KK_TSL_DATA_TYPE_ARRAY, //support int, float, double, text KK_TSL_DATA_TYPE_ARRAY, //support int, float, double, text
KK_TSL_DATA_TYPE_STRUCT, //support above 8 data types KK_TSL_DATA_TYPE_STRUCT, //support above 8 data types
} kk_tsl_data_type_e; } kk_tsl_data_type_e;
typedef struct { typedef struct {
kk_tsl_data_type_e type; kk_tsl_data_type_e type;
int size; int size;
void *value; void *value;
} kk_tsl_data_value_complex_t; } kk_tsl_data_value_complex_t;
typedef struct { typedef struct {
kk_tsl_data_type_e type; kk_tsl_data_type_e type;
union { int mix;
int value_int; int max;
float value_float; int length;
double value_double; union {
void *value; //string or complex type accroding to data type int value_int;
}; float value_float;
} kk_tsl_data_value_t; double value_double;
void *value; //string or complex type accroding to data type
};
typedef struct { } kk_tsl_data_value_t;
char *identifier;
kk_tsl_data_value_t data_value;
} kk_tsl_data_t; typedef struct {
char *identifier;
typedef struct { kk_tsl_data_value_t data_value;
char *identifier; } kk_tsl_data_t;
int input_data_number; //input_data Number
kk_tsl_data_t *input_datas; //input_data array, type is dm_shw_data_t typedef struct {
int output_data_number; //ouput_data Number char *identifier;
kk_tsl_data_t *output_datas; //output_data array, type is dm_shw_data_t int input_data_number; //input_data Number
} kk_tsl_event_t; kk_tsl_data_t *input_datas; //input_data array, type is dm_shw_data_t
int output_data_number; //ouput_data Number
typedef struct { kk_tsl_data_t *output_datas; //output_data array, type is dm_shw_data_t
char *identifier; //synchronized or asynchronized } kk_tsl_event_t;
int input_data_number; //input_data_number
kk_tsl_data_t *input_datas; //input_data array, type is dm_shw_data_t typedef struct {
int output_data_number; //ouput_data Number char *identifier; //synchronized or asynchronized
kk_tsl_data_t *output_datas; //output_data array, type is dm_shw_data_t int input_data_number; //input_data_number
} kk_tsl_service_t; kk_tsl_data_t *input_datas; //input_data array, type is dm_shw_data_t
int output_data_number; //ouput_data Number
kk_tsl_data_t *output_datas; //output_data array, type is dm_shw_data_t
typedef struct { } kk_tsl_service_t;
int property_number;
kk_tsl_data_t *properties; //property array, type is dm_shw_data_t
int event_number; typedef struct {
kk_tsl_event_t *events; //event array, type is dm_shw_event_t int property_number;
int service_number; kk_tsl_data_t *properties; //property array, type is dm_shw_data_t
kk_tsl_service_t *services; //service array, type is dm_shw_service_t int event_number;
} kk_tsl_t; kk_tsl_event_t *events; //event array, type is dm_shw_event_t
int service_number;
#endif kk_tsl_service_t *services; //service array, type is dm_shw_service_t
} kk_tsl_t;
#endif
...@@ -351,7 +351,38 @@ static int _kk_tsl_array_struct_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_ ...@@ -351,7 +351,38 @@ static int _kk_tsl_array_struct_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
static int _kk_tsl_opt_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cjson_t *root)
{
int res = 0;
lite_cjson_t lite_item;
if(data_value->type == KK_TSL_DATA_TYPE_TEXT){
res = lite_cjson_object_item(root, KK_TSL_KEY_LENGTH, strlen(KK_TSL_KEY_LENGTH), &lite_item);
if(res == SUCCESS_RETURN){
data_value->length = atoi(lite_item.value);
}
}
else if(data_value->type == KK_TSL_DATA_TYPE_INT){
res = lite_cjson_object_item(root, KK_TSL_KEY_MIN, strlen(KK_TSL_KEY_MIN), &lite_item);
if(res == SUCCESS_RETURN){
data_value->mix = atoi(lite_item.value);
printf("------------>[%s][%d]data_value->mix:%d\n",__FUNCTION__,__LINE__,data_value->mix);
}
res = lite_cjson_object_item(root, KK_TSL_KEY_MAX, strlen(KK_TSL_KEY_MAX), &lite_item);
if(res == SUCCESS_RETURN){
data_value->max = atoi(lite_item.value);
printf("------------>[%s][%d]data_value->max:%d\n",__FUNCTION__,__LINE__,data_value->max);
}
}
return SUCCESS_RETURN;
}
static int _kk_tsl_data_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cjson_t *root) static int _kk_tsl_data_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cjson_t *root)
{ {
...@@ -376,7 +407,8 @@ static int _kk_tsl_data_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cj ...@@ -376,7 +407,8 @@ static int _kk_tsl_data_parse(_IN_ kk_tsl_data_value_t *data_value, _IN_ lite_cj
memset(&lite_item, 0, sizeof(lite_cjson_t)); memset(&lite_item, 0, sizeof(lite_cjson_t));
res = lite_cjson_object_item(root, KK_TSL_KEY_SPECS, strlen(KK_TSL_KEY_SPECS), &lite_item); res = lite_cjson_object_item(root, KK_TSL_KEY_SPECS, strlen(KK_TSL_KEY_SPECS), &lite_item);
if (res == SUCCESS_RETURN) { if (res == SUCCESS_RETURN) {
/* dm_log_debug("TSL Data Specs: %.*s",lite_item.value_length,lite_item.value); */ _kk_tsl_opt_parse(data_value,&lite_item);
} }
//Parse Type And Value //Parse Type And Value
...@@ -407,7 +439,6 @@ static int _kk_tsl_property_parse(_IN_ kk_tsl_data_t *property, _IN_ lite_cjson_ ...@@ -407,7 +439,6 @@ static int _kk_tsl_property_parse(_IN_ kk_tsl_data_t *property, _IN_ lite_cjson_
if (res != SUCCESS_RETURN) { if (res != SUCCESS_RETURN) {
return FAIL_RETURN; return FAIL_RETURN;
} }
//printf("Identifier: %s\n", property->identifier);
//Parse DataType //Parse DataType
memset(&lite_item, 0, sizeof(lite_cjson_t)); memset(&lite_item, 0, sizeof(lite_cjson_t));
...@@ -432,12 +463,10 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro ...@@ -432,12 +463,10 @@ static int _kk_tsl_properties_parse(_IN_ kk_tsl_t *shadow, _IN_ lite_cjson_t *ro
memset(&lite_properties, 0, sizeof(lite_cjson_t)); memset(&lite_properties, 0, sizeof(lite_cjson_t));
res = lite_cjson_object_item(root, KK_TSL_KEY_PROPERTIES, strlen(KK_TSL_KEY_PROPERTIES), &lite_properties); res = lite_cjson_object_item(root, KK_TSL_KEY_PROPERTIES, strlen(KK_TSL_KEY_PROPERTIES), &lite_properties);
if (res == SUCCESS_RETURN) { if (res == SUCCESS_RETURN) {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
if (!lite_cjson_is_array(&lite_properties)) { if (!lite_cjson_is_array(&lite_properties)) {
return JSON_PARSE_FAILED; return JSON_PARSE_FAILED;
} }
} else { } else {
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
return SUCCESS_RETURN; return SUCCESS_RETURN;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment