diff --git a/dmentry.c b/dmentry.c index 0731baef..4f839636 100644 --- a/dmentry.c +++ b/dmentry.c @@ -193,6 +193,19 @@ int dm_ctx_clean_sub(struct dmctx *ctx) return 0; } +int dmentry_get_parameter_leaf_value(struct dmctx *ctx, int cmd, char *inparam) +{ + int err = 0, fault = 0; + bool setnotif = true; + if (!inparam) inparam = ""; + ctx->in_param = inparam; + + if (ctx->dm_type == DM_CWMP && ctx->in_param[0] == dm_delim && strlen(ctx->in_param) == 1) + fault = FAULT_9005; + else + fault = dm_entry_get_full_param_value(ctx); +} + int dm_entry_param_method(struct dmctx *ctx, int cmd, char *inparam, char *arg1, char *arg2) { int err = 0, fault = 0; diff --git a/dmentry.h b/dmentry.h index 06c4afed..83748374 100644 --- a/dmentry.h +++ b/dmentry.h @@ -56,7 +56,7 @@ void dm_execute_cli_shell(int argc, char** argv, unsigned int dmtype, unsigned i void dm_execute_cli_command(char *file, unsigned int dmtype, unsigned int amd_version, unsigned int instance_mode); void wepkey_cli(int argc, char** argv); int free_dynamic_arrays(void); - +int dmentry_get_parameter_leaf_value(struct dmctx *ctx, int cmd, char *inparam); #ifdef BBF_TR064 #define DM_ENTRY_UPNP_CHECK_CHANGES() \ do { \ diff --git a/libbbf_api/dmbbf.c b/libbbf_api/dmbbf.c index f4f70b78..d01753bd 100644 --- a/libbbf_api/dmbbf.c +++ b/libbbf_api/dmbbf.c @@ -1169,6 +1169,27 @@ void dmentry_instance_lookup_inparam(struct dmctx *ctx) /* ********** * get value * **********/ + +int dm_entry_get_full_param_value(struct dmctx *dmctx) +{ + int err = 0; + unsigned char findparam_check = 0; + DMOBJ *root = dmctx->dm_entryobj; + DMNODE node = {.current_object = ""}; + dmctx->inparam_isparam = 1; + dmctx->findparam = 0; + dmctx->stop = 0; + dmctx->checkobj = plugin_obj_match; + dmctx->checkleaf = plugin_leaf_match; + dmctx->method_obj = mobj_get_value_in_param; + dmctx->method_param = mparam_get_value_in_param; + err = dm_browse(dmctx, &node, root, NULL, NULL); + if (findparam_check && dmctx->findparam) + return 0; + else + return err; +} + int dm_entry_get_value(struct dmctx *dmctx) { int err = 0; diff --git a/libbbf_api/dmbbf.h b/libbbf_api/dmbbf.h index 33974122..dc7b3b64 100644 --- a/libbbf_api/dmbbf.h +++ b/libbbf_api/dmbbf.h @@ -600,6 +600,7 @@ char *dm_print_path(char *fpath, ...); int dm_link_inst_obj(struct dmctx *dmctx, DMNODE *parent_node, void *data, char *instance); void dm_check_dynamic_obj(struct dmctx *dmctx, DMNODE *parent_node, DMOBJ *entryobj, char *full_obj, char *obj, DMOBJ **root_entry, int *obj_found); int free_dm_browse_node_dynamic_object_tree(DMNODE *parent_node, DMOBJ *entryobj); +int dm_entry_get_full_param_value(struct dmctx *dmctx); #ifdef BBF_TR064 void dm_upnp_apply_config(void); void add_list_upnp_param_track(struct dmctx *dmctx, struct list_head *pchead, char *param, char *key, char *value, unsigned int isobj);