mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2025-12-10 07:44:39 +01:00
obuspa: Get data model schema present in DUT
- Obuspa required to register the schema present in DUT, in the current methods, for multi-instance objects the instance is only visible if at-least one object/instance present, this leads to anomaly in obuspa, when some objects getting created in run-time. e.g: Device.WiFi.AccessPoint.1.AssociatedDevice. - This change will dump the complete schema irrespective of that node/object availability.
This commit is contained in:
parent
f3c9ed9efd
commit
bfd4f7bae5
4 changed files with 137 additions and 1 deletions
|
|
@ -295,6 +295,11 @@ int dm_entry_param_method(struct dmctx *ctx, int cmd, char *inparam, char *arg1,
|
|||
ctx->in_value = arg1 ? arg1 : "";
|
||||
operate_list_cmds(ctx);
|
||||
break;
|
||||
|
||||
case CMD_GET_SCHEMA:
|
||||
ctx->in_value = arg1 ? arg1 : "";
|
||||
fault = dm_entry_get_schema(ctx);
|
||||
break;
|
||||
#ifdef BBF_TR064
|
||||
case CMD_UPNP_GET_SUPPORTED_PARAMETERS:
|
||||
ctx->depth = atoi(arg1);
|
||||
|
|
|
|||
|
|
@ -1079,7 +1079,10 @@ static int set_RoutingRouterIPv6Forwarding_Alias(char *refparam, struct dmctx *c
|
|||
|
||||
static char *get_routing_perm(char *refparam, struct dmctx *dmctx, void *data, char *instance)
|
||||
{
|
||||
return ((struct routingfwdargs *)data)->permission;
|
||||
if (data != NULL)
|
||||
return ((struct routingfwdargs *)data)->permission;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct dm_permession_s DMRouting = {"0", &get_routing_perm};
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ static int mparam_set_notification_in_obj(DMPARAM_ARGS);
|
|||
static int mobj_set_notification_in_param(DMOBJECT_ARGS);
|
||||
static int mparam_set_notification_in_param(DMPARAM_ARGS);
|
||||
static int mobj_set_notification_in_obj(DMOBJECT_ARGS);
|
||||
static int dm_browse_schema(struct dmctx *dmctx, DMNODE *parent_node,
|
||||
DMOBJ *entryobj, void *data, char *instance);
|
||||
#ifdef BBF_TR064
|
||||
static int mparam_upnp_get_instances(DMPARAM_ARGS);
|
||||
static int mobj_upnp_get_instances(DMOBJECT_ARGS);
|
||||
|
|
@ -1222,6 +1224,130 @@ int dm_entry_get_name(struct dmctx *ctx)
|
|||
return err;
|
||||
}
|
||||
|
||||
|
||||
static void dm_browse_schema_entry(struct dmctx *dmctx, DMNODE *parent_node,
|
||||
DMOBJ *entryobj, void *data, char *instance,
|
||||
char *parent_obj, int *err)
|
||||
{
|
||||
DMNODE node = {0};
|
||||
|
||||
node.obj = entryobj;
|
||||
node.parent = parent_node;
|
||||
node.instance_level = parent_node->instance_level;
|
||||
node.matched = parent_node->matched;
|
||||
|
||||
if (!bbfdatamodel_matches(entryobj->bbfdm_type))
|
||||
return;
|
||||
|
||||
if (entryobj->browseinstobj) {
|
||||
dmasprintf(&(node.current_object), "%s%s%c{i}%c", parent_obj, entryobj->obj, dm_delim, dm_delim);
|
||||
if (dmctx->method_obj) {
|
||||
*err = dmctx->method_obj(dmctx, &node, entryobj->permission,
|
||||
entryobj->addobj, entryobj->delobj,
|
||||
entryobj->forced_inform,
|
||||
entryobj->notification,
|
||||
entryobj->get_linker,
|
||||
data, instance);
|
||||
}
|
||||
} else {
|
||||
dmasprintf(&(node.current_object), "%s%s%c", parent_obj, entryobj->obj, dm_delim);
|
||||
}
|
||||
|
||||
|
||||
if (entryobj->leaf) {
|
||||
*err = dm_browse_leaf(dmctx, &node, entryobj->leaf, data, instance);
|
||||
}
|
||||
|
||||
if (entryobj->nextobj || entryobj->nextdynamicobj) {
|
||||
*err = dm_browse_schema(dmctx, &node, entryobj->nextobj, data, instance);
|
||||
}
|
||||
}
|
||||
|
||||
static int dm_browse_schema(struct dmctx *dmctx, DMNODE *parent_node,
|
||||
DMOBJ *entryobj, void *data, char *instance)
|
||||
{
|
||||
DMOBJ *jentryobj;
|
||||
struct dm_dynamic_obj *next_dyn_array;
|
||||
int i, j, err = 0;
|
||||
|
||||
char *parent_obj = parent_node->current_object;
|
||||
|
||||
if (entryobj) {
|
||||
for (; entryobj->obj; entryobj++) {
|
||||
dm_browse_schema_entry(dmctx, parent_node, entryobj, data, instance, parent_obj, &err);
|
||||
if (dmctx->stop)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
if (parent_node->obj) {
|
||||
if (parent_node->obj->nextdynamicobj) {
|
||||
for (i = 0; i < __INDX_DYNAMIC_MAX; i++) {
|
||||
next_dyn_array = parent_node->obj->nextdynamicobj + i;
|
||||
if (next_dyn_array->nextobj) {
|
||||
for (j = 0; next_dyn_array->nextobj[j]; j++) {
|
||||
jentryobj = next_dyn_array->nextobj[j];
|
||||
for (; (jentryobj && jentryobj->obj); jentryobj++) {
|
||||
dm_browse_schema_entry(dmctx, parent_node, jentryobj, data, instance, parent_obj, &err);
|
||||
if (dmctx->stop)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// get schema
|
||||
static int mobj_get_schema_name(DMOBJECT_ARGS)
|
||||
{
|
||||
char *refparam;
|
||||
char *perm = permission->val;
|
||||
refparam = node->current_object;
|
||||
if (permission->get_permission != NULL)
|
||||
perm = permission->get_permission(refparam, dmctx, data, instance);
|
||||
|
||||
add_list_paramameter(dmctx, refparam, perm, "xsd:object", NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mparam_get_schema_name(DMPARAM_ARGS)
|
||||
{
|
||||
char *refparam;
|
||||
|
||||
char *perm = permission->val;
|
||||
|
||||
dmastrcat(&refparam, node->current_object, lastname);
|
||||
|
||||
if (permission->get_permission != NULL)
|
||||
perm = permission->get_permission(refparam, dmctx, data, instance);
|
||||
|
||||
add_list_paramameter(dmctx, refparam, perm, DMT_TYPE[type], NULL, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dm_entry_get_schema(struct dmctx *ctx)
|
||||
{
|
||||
DMOBJ *root = ctx->dm_entryobj;
|
||||
DMNODE node = {.current_object = ""};
|
||||
unsigned char findparam_check = 0;
|
||||
int err;
|
||||
ctx->inparam_isparam = 0;
|
||||
ctx->findparam = 0;
|
||||
ctx->stop = 0;
|
||||
ctx->checkobj = NULL;
|
||||
ctx->checkleaf = NULL;
|
||||
ctx->method_obj = mobj_get_schema_name;
|
||||
ctx->method_param = mparam_get_schema_name;
|
||||
err = dm_browse_schema(ctx, &node, root, NULL, NULL);
|
||||
if (findparam_check && ctx->findparam)
|
||||
return 0;
|
||||
else
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mparam_get_name(DMPARAM_ARGS)
|
||||
{
|
||||
char *refparam;
|
||||
|
|
|
|||
|
|
@ -335,6 +335,7 @@ enum {
|
|||
CMD_INFORM,
|
||||
CMD_USP_OPERATE,
|
||||
CMD_USP_LIST_OPERATE,
|
||||
CMD_GET_SCHEMA,
|
||||
#ifdef BBF_TR064
|
||||
CMD_UPNP_GET_SUPPORTED_PARAMETERS,
|
||||
CMD_UPNP_GET_INSTANCES,
|
||||
|
|
@ -555,6 +556,7 @@ int string_to_bool(char *v, bool *b);
|
|||
void dmentry_instance_lookup_inparam(struct dmctx *ctx);
|
||||
int dm_entry_get_value(struct dmctx *ctx);
|
||||
int dm_entry_get_name(struct dmctx *ctx);
|
||||
int dm_entry_get_schema(struct dmctx *ctx);
|
||||
int dm_entry_get_notification(struct dmctx *ctx);
|
||||
int dm_entry_inform(struct dmctx *ctx);
|
||||
int dm_entry_add_object(struct dmctx *ctx);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue