Browse Source

setting namespaceIndex for VariableNodes with generated node ids

Stasik0 10 years ago
parent
commit
211e7eddf4
2 changed files with 7 additions and 1 deletions
  1. 4 1
      src/server/ua_nodestore.c
  2. 3 0
      src/server/ua_nodestore_concurrent.c

+ 4 - 1
src/server/ua_nodestore.c

@@ -252,6 +252,9 @@ UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node, const UA_Node
         // find a unique nodeid that is not taken
         node->nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
         node->nodeId.namespaceIndex = 1; // namespace 1 is always in the local nodestore
+        if(node->nodeClass==UA_NODECLASS_VARIABLE){ //set namespaceIndex in browseName in case id is generated
+        	((UA_VariableNode*)node)->browseName.namespaceIndex=node->nodeId.namespaceIndex;
+        }
         UA_Int32 identifier = ns->count+1; // start value
         UA_Int32 size = ns->size;
         hash_t increase = mod2(identifier, size);
@@ -267,7 +270,7 @@ UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node, const UA_Node
         if(containsNodeId(ns, &node->nodeId, &slot))
             return UA_STATUSCODE_BADNODEIDEXISTS;
     }
-    
+
     struct nodeEntry *entry = nodeEntryFromNode(node);
     if(!entry)
         return UA_STATUSCODE_BADOUTOFMEMORY;

+ 3 - 0
src/server/ua_nodestore_concurrent.c

@@ -175,6 +175,9 @@ UA_StatusCode UA_NodeStore_insert(UA_NodeStore *ns, UA_Node *node, const UA_Node
         /* create a unique nodeid */
         ((UA_Node *)&entry->node)->nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
         ((UA_Node *)&entry->node)->nodeId.namespaceIndex = 1; // namespace 1 is always in the local nodestore
+        if(((UA_Node *)&entry->node)->nodeClass==UA_NODECLASS_VARIABLE){ //set namespaceIndex in browseName in case id is generated
+        	((UA_VariableNode*)&entry->node)->browseName.namespaceIndex=((UA_Node *)&entry->node)->nodeId.namespaceIndex;
+        }
         unsigned long identifier;
         long before, after;
         rcu_read_lock();