Show default value from json in get

This commit is contained in:
suvendhu 2022-09-22 15:18:40 +05:30 committed by Suvendhu Hansa
parent 83d92cdafa
commit 4f0dda9f80
3 changed files with 81 additions and 62 deletions

View file

@ -1566,7 +1566,7 @@ static char** fill_unique_keys(size_t count, struct json_object *obj)
static void parse_param(char *object, char *param, json_object *jobj, DMLEAF *pleaf, int i, int json_version, struct list_head *list)
{
/* PARAM, permission, type, getvalue, setvalue, bbfdm_type(6)*/
struct json_object *type = NULL, *protocols = NULL, *write = NULL, *async = NULL, *version = NULL;;
struct json_object *type = NULL, *protocols = NULL, *write = NULL, *async = NULL, *version = NULL, *def_value = NULL;
char full_param[512] = {0};
size_t n_proto;
char **in_p = NULL, **out_p = NULL, **ev_arg = NULL, **tmp = NULL;
@ -1613,6 +1613,14 @@ static void parse_param(char *object, char *param, json_object *jobj, DMLEAF *pl
pleaf[i].permission = (write && json_object_get_boolean(write)) ? &DMWRITE : &DMREAD;
}
//default value
json_object_object_get_ex(jobj, "default", &def_value);
char *val = json_object_get_string(def_value);
if (val != NULL)
pleaf[i].default_value = dm_dynamic_strdup(&json_memhead, val);
else
pleaf[i].default_value = NULL;
//getvalue
if (pleaf[i].type == DMT_EVENT) {
int param_count = 0;

View file

@ -83,11 +83,7 @@ do { \
#define DMPARAM_ARGS \
struct dmctx *dmctx, \
struct dmnode *node, \
char *lastname, \
struct dm_permession_s *permission, \
int type, \
int (*get_cmd)(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value), \
int (*set_cmd)(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action), \
DMLEAF *leaf, \
void *data, \
char *instance
@ -133,6 +129,7 @@ typedef struct dm_leaf_s {
int (*setvalue)(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action);
int bbfdm_type;
char version[10];
char *default_value;
} DMLEAF;
typedef struct dm_obj_s {

View file

@ -264,7 +264,7 @@ static int dm_browse_leaf(struct dmctx *dmctx, DMNODE *parent_node, DMLEAF *leaf
}
snprintf(dm_browse_path, MAX_DM_PATH, "%s%s", parent_node->current_object, leaf->parameter);
err = dmctx->method_param(dmctx, parent_node, leaf->parameter, leaf->permission, leaf->type, leaf->getvalue, leaf->setvalue, data, instance);
err = dmctx->method_param(dmctx, parent_node, leaf, data, instance);
if (dmctx->stop)
return err;
}
@ -290,7 +290,7 @@ static int dm_browse_leaf(struct dmctx *dmctx, DMNODE *parent_node, DMLEAF *leaf
}
snprintf(dm_browse_path, MAX_DM_PATH, "%s%s", parent_node->current_object, jleaf->parameter);
err = dmctx->method_param(dmctx, parent_node, jleaf->parameter, jleaf->permission, jleaf->type, jleaf->getvalue, jleaf->setvalue, data, instance);
err = dmctx->method_param(dmctx, parent_node, jleaf, data, instance);
if (dmctx->stop)
return err;
}
@ -1174,12 +1174,19 @@ static int get_value_param(DMPARAM_ARGS)
char *full_param;
char *value = "";
dmastrcat(&full_param, node->current_object, lastname);
(get_cmd)(full_param, dmctx, data, instance, &value);
dmastrcat(&full_param, node->current_object, leaf->parameter);
(leaf->getvalue)(full_param, dmctx, data, instance, &value);
value = (value && *value) ? check_value_by_type(value, type) : get_default_value_by_type(type);
if (value && *value) {
value = check_value_by_type(value, leaf->type);
} else {
if (leaf->default_value)
value = check_value_by_type(leaf->default_value, leaf->type);
else
value = get_default_value_by_type(leaf->type);
}
add_list_parameter(dmctx, full_param, value, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, full_param, value, DMT_TYPE[leaf->type], NULL);
return 0;
}
@ -1192,17 +1199,24 @@ static int mparam_get_value_in_param(DMPARAM_ARGS)
char *full_param;
char *value = "";
dmastrcat(&full_param, node->current_object, lastname);
dmastrcat(&full_param, node->current_object, leaf->parameter);
if (DM_STRCMP(dmctx->in_param, full_param) != 0) {
dmfree(full_param);
return FAULT_9005;
}
(get_cmd)(full_param, dmctx, data, instance, &value);
(leaf->getvalue)(full_param, dmctx, data, instance, &value);
value = (value && *value) ? check_value_by_type(value, type) : get_default_value_by_type(type);
if (value && *value) {
value = check_value_by_type(value, leaf->type);
} else {
if (leaf->default_value)
value = check_value_by_type(leaf->default_value, leaf->type);
else
value = get_default_value_by_type(leaf->type);
}
add_list_parameter(dmctx, full_param, value, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, full_param, value, DMT_TYPE[leaf->type], NULL);
dmctx->stop = true;
return 0;
}
@ -1263,13 +1277,13 @@ int dm_entry_get_name(struct dmctx *ctx)
static int mparam_get_name(DMPARAM_ARGS)
{
char *refparam;
char *perm = permission->val;
char *perm = leaf->permission->val;
dmastrcat(&refparam, node->current_object, lastname);
if (permission->get_permission != NULL)
perm = permission->get_permission(refparam, dmctx, data, instance);
dmastrcat(&refparam, node->current_object, leaf->parameter);
if (leaf->permission->get_permission != NULL)
perm = leaf->permission->get_permission(refparam, dmctx, data, instance);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[leaf->type], NULL);
return 0;
}
@ -1288,9 +1302,9 @@ static int mobj_get_name(DMOBJECT_ARGS)
static int mparam_get_name_in_param(DMPARAM_ARGS)
{
char *refparam;
char *perm = permission->val;
char *perm = leaf->permission->val;
dmastrcat(&refparam, node->current_object, lastname);
dmastrcat(&refparam, node->current_object, leaf->parameter);
if (DM_STRCMP(refparam, dmctx->in_param) != 0) {
dmfree(refparam);
return FAULT_9005;
@ -1303,10 +1317,10 @@ static int mparam_get_name_in_param(DMPARAM_ARGS)
return FAULT_9003;
}
if (permission->get_permission != NULL)
perm = permission->get_permission(refparam, dmctx, data, instance);
if (leaf->permission->get_permission != NULL)
perm = leaf->permission->get_permission(refparam, dmctx, data, instance);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[leaf->type], NULL);
return 0;
}
@ -1318,14 +1332,14 @@ static int mobj_get_name_in_param(DMOBJECT_ARGS)
static int mparam_get_name_in_obj(DMPARAM_ARGS)
{
char *refparam;
char *perm = permission->val;
char *perm = leaf->permission->val;
dmastrcat(&refparam, node->current_object, lastname);
dmastrcat(&refparam, node->current_object, leaf->parameter);
if (permission->get_permission != NULL)
perm = permission->get_permission(refparam, dmctx, data, instance);
if (leaf->permission->get_permission != NULL)
perm = leaf->permission->get_permission(refparam, dmctx, data, instance);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[leaf->type], NULL);
return 0;
}
@ -1384,10 +1398,10 @@ static int mobj_get_schema_name(DMOBJECT_ARGS)
static int mparam_get_schema_name(DMPARAM_ARGS)
{
char *refparam;
char *perm = permission->val;
dmastrcat(&refparam, node->current_object, lastname);
char *perm = leaf->permission->val;
dmastrcat(&refparam, node->current_object, leaf->parameter);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, refparam, perm, DMT_TYPE[leaf->type], NULL);
return 0;
}
@ -1416,28 +1430,28 @@ static int mparam_get_supported_dm(DMPARAM_ARGS)
char *value = NULL;
char *refparam;
dmastrcat(&refparam, node->current_object, lastname);
dmastrcat(&refparam, node->current_object, leaf->parameter);
if (node->matched) {
if (type == DMT_EVENT) {
if (leaf->type == DMT_EVENT) {
if (dmctx->isevent) {
if (get_cmd)
(get_cmd)(refparam, dmctx, data, instance, &value);
if (leaf->getvalue)
(leaf->getvalue)(refparam, dmctx, data, instance, &value);
add_list_parameter(dmctx, refparam, value, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, refparam, value, DMT_TYPE[leaf->type], NULL);
}
} else if (type == DMT_COMMAND) {
} else if (leaf->type == DMT_COMMAND) {
if(dmctx->iscommand) {
if (get_cmd)
(get_cmd)(refparam, dmctx, data, instance, &value);
if (leaf->getvalue)
(leaf->getvalue)(refparam, dmctx, data, instance, &value);
add_list_parameter(dmctx, refparam, value, DMT_TYPE[type], permission->val);
add_list_parameter(dmctx, refparam, value, DMT_TYPE[leaf->type], leaf->permission->val);
}
}
else {
add_list_parameter(dmctx, refparam, permission->val, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, refparam, leaf->permission->val, DMT_TYPE[leaf->type], NULL);
}
}
return 0;
@ -1667,27 +1681,27 @@ static int mparam_set_value(DMPARAM_ARGS)
{
char refparam[MAX_DM_PATH];
snprintf(refparam, MAX_DM_PATH, "%s%s", node->current_object, lastname);
snprintf(refparam, MAX_DM_PATH, "%s%s", node->current_object, leaf->parameter);
if (DM_STRCMP(refparam, dmctx->in_param) != 0)
return FAULT_9005;
dmctx->stop = 1;
if (dmctx->setaction == VALUECHECK) {
char *perm = permission->val;
if (permission->get_permission != NULL)
perm = permission->get_permission(refparam, dmctx, data, instance);
char *perm = leaf->permission->val;
if (leaf->permission->get_permission != NULL)
perm = leaf->permission->get_permission(refparam, dmctx, data, instance);
if (perm[0] == '0' || !set_cmd)
if (perm[0] == '0' || !leaf->setvalue)
return FAULT_9008;
int fault = (set_cmd)(refparam, dmctx, data, instance, dmctx->in_value, VALUECHECK);
int fault = (leaf->setvalue)(refparam, dmctx, data, instance, dmctx->in_value, VALUECHECK);
if (fault)
return fault;
add_set_list_tmp(dmctx, dmctx->in_param, dmctx->in_value);
} else if (dmctx->setaction == VALUESET) {
int fault = (set_cmd)(refparam, dmctx, data, instance, dmctx->in_value, VALUESET);
int fault = (leaf->setvalue)(refparam, dmctx, data, instance, dmctx->in_value, VALUESET);
if (fault)
return fault;
}
@ -1809,11 +1823,11 @@ static int mparam_list_operates_name(DMPARAM_ARGS)
char *full_param;
char *value = NULL;
dmastrcat(&full_param, node->current_object, lastname);
if (get_cmd)
(get_cmd)(full_param, dmctx, data, instance, &value);
dmastrcat(&full_param, node->current_object, leaf->parameter);
if (leaf->getvalue)
(leaf->getvalue)(full_param, dmctx, data, instance, &value);
add_list_parameter(dmctx, full_param, value, DMT_TYPE[type], permission->val);
add_list_parameter(dmctx, full_param, value, DMT_TYPE[leaf->type], leaf->permission->val);
return 0;
}
@ -1848,17 +1862,17 @@ static int mparam_operate(DMPARAM_ARGS)
{
char full_param[MAX_DM_PATH];
snprintf(full_param, MAX_DM_PATH, "%s%s", node->current_object, lastname);
snprintf(full_param, MAX_DM_PATH, "%s%s", node->current_object, leaf->parameter);
if (DM_STRCMP(full_param, dmctx->in_param) != 0)
return CMD_NOT_FOUND;
dmctx->stop = 1;
if (!set_cmd)
if (!leaf->setvalue)
return CMD_FAIL;
json_object *j_input = (dmctx->in_value) ? json_tokener_parse(dmctx->in_value) : NULL;
int fault = (set_cmd)(full_param, dmctx, data, instance, (char *)j_input, VALUESET);
int fault = (leaf->setvalue)(full_param, dmctx, data, instance, (char *)j_input, VALUESET);
json_object_put(j_input);
return fault;
}
@ -1899,11 +1913,11 @@ static int mparam_list_events_name(DMPARAM_ARGS)
char *value = NULL;
char *full_param;
dmastrcat(&full_param, node->current_object, lastname);
if (get_cmd)
(get_cmd)(full_param, dmctx, data, instance, &value);
dmastrcat(&full_param, node->current_object, leaf->parameter);
if (leaf->getvalue)
(leaf->getvalue)(full_param, dmctx, data, instance, &value);
add_list_parameter(dmctx, full_param, value, DMT_TYPE[type], NULL);
add_list_parameter(dmctx, full_param, value, DMT_TYPE[leaf->type], NULL);
return 0;
}