|
@@ -35,11 +35,11 @@ UA_Server_getNodeContext(UA_Server *server, UA_NodeId nodeId,
|
|
UA_StatusCode
|
|
UA_StatusCode
|
|
getNodeContext(UA_Server *server, UA_NodeId nodeId,
|
|
getNodeContext(UA_Server *server, UA_NodeId nodeId,
|
|
void **nodeContext) {
|
|
void **nodeContext) {
|
|
- const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &nodeId);
|
|
|
|
|
|
+ const UA_Node *node = UA_NODESTORE_GET(server, &nodeId);
|
|
if(!node)
|
|
if(!node)
|
|
return UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
return UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
*nodeContext = node->context;
|
|
*nodeContext = node->context;
|
|
- UA_Nodestore_releaseNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, node);
|
|
return UA_STATUSCODE_GOOD;
|
|
return UA_STATUSCODE_GOOD;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -99,7 +99,7 @@ checkParentReference(UA_Server *server, UA_Session *session, UA_NodeClass nodeCl
|
|
return UA_STATUSCODE_GOOD;
|
|
return UA_STATUSCODE_GOOD;
|
|
|
|
|
|
/* See if the parent exists */
|
|
/* See if the parent exists */
|
|
- const UA_Node *parent = UA_Nodestore_getNode(server->nsCtx, parentNodeId);
|
|
|
|
|
|
+ const UA_Node *parent = UA_NODESTORE_GET(server, parentNodeId);
|
|
if(!parent) {
|
|
if(!parent) {
|
|
UA_LOG_NODEID_WRAP(parentNodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(parentNodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Parent node %.*s not found",
|
|
"AddNodes: Parent node %.*s not found",
|
|
@@ -108,11 +108,11 @@ checkParentReference(UA_Server *server, UA_Session *session, UA_NodeClass nodeCl
|
|
}
|
|
}
|
|
|
|
|
|
UA_NodeClass parentNodeClass = parent->nodeClass;
|
|
UA_NodeClass parentNodeClass = parent->nodeClass;
|
|
- UA_Nodestore_releaseNode(server->nsCtx, parent);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, parent);
|
|
|
|
|
|
/* Check the referencetype exists */
|
|
/* Check the referencetype exists */
|
|
const UA_ReferenceTypeNode *referenceType = (const UA_ReferenceTypeNode*)
|
|
const UA_ReferenceTypeNode *referenceType = (const UA_ReferenceTypeNode*)
|
|
- UA_Nodestore_getNode(server->nsCtx, referenceTypeId);
|
|
|
|
|
|
+ UA_NODESTORE_GET(server, referenceTypeId);
|
|
if(!referenceType) {
|
|
if(!referenceType) {
|
|
UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Reference type %.*s to the parent not found",
|
|
"AddNodes: Reference type %.*s to the parent not found",
|
|
@@ -125,12 +125,12 @@ checkParentReference(UA_Server *server, UA_Session *session, UA_NodeClass nodeCl
|
|
UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Reference type %.*s to the parent is not a ReferenceTypeNode",
|
|
"AddNodes: Reference type %.*s to the parent is not a ReferenceTypeNode",
|
|
(int)nodeIdStr.length, nodeIdStr.data));
|
|
(int)nodeIdStr.length, nodeIdStr.data));
|
|
- UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)referenceType);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, (const UA_Node*)referenceType);
|
|
return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
|
|
return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
|
|
}
|
|
}
|
|
|
|
|
|
UA_Boolean referenceTypeIsAbstract = referenceType->isAbstract;
|
|
UA_Boolean referenceTypeIsAbstract = referenceType->isAbstract;
|
|
- UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)referenceType);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, (const UA_Node*)referenceType);
|
|
/* Check that the reference type is not abstract */
|
|
/* Check that the reference type is not abstract */
|
|
if(referenceTypeIsAbstract == true) {
|
|
if(referenceTypeIsAbstract == true) {
|
|
UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(referenceTypeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
@@ -162,8 +162,7 @@ checkParentReference(UA_Server *server, UA_Session *session, UA_NodeClass nodeCl
|
|
}
|
|
}
|
|
|
|
|
|
/* Test if the referencetype is hierarchical */
|
|
/* Test if the referencetype is hierarchical */
|
|
- if(!isNodeInTree(server->nsCtx, referenceTypeId,
|
|
|
|
- &hierarchicalReferences, &subtypeId, 1)) {
|
|
|
|
|
|
+ if(!isNodeInTree(server, referenceTypeId, &hierarchicalReferences, &subtypeId, 1)) {
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Reference type to the parent is not hierarchical");
|
|
"AddNodes: Reference type to the parent is not hierarchical");
|
|
return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
|
|
return UA_STATUSCODE_BADREFERENCETYPEIDINVALID;
|
|
@@ -337,12 +336,12 @@ useVariableTypeAttributes(UA_Server *server, UA_Session *session,
|
|
/* If the node was modified, update the pointer to the new version */
|
|
/* If the node was modified, update the pointer to the new version */
|
|
if(modified) {
|
|
if(modified) {
|
|
const UA_VariableNode *updated = (const UA_VariableNode*)
|
|
const UA_VariableNode *updated = (const UA_VariableNode*)
|
|
- UA_Nodestore_getNode(server->nsCtx, &node->nodeId);
|
|
|
|
|
|
+ UA_NODESTORE_GET(server, &node->nodeId);
|
|
|
|
|
|
if(!updated)
|
|
if(!updated)
|
|
return UA_STATUSCODE_BADINTERNALERROR;
|
|
return UA_STATUSCODE_BADINTERNALERROR;
|
|
|
|
|
|
- UA_Nodestore_releaseNode(server->nsCtx, (const UA_Node*)node);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, (const UA_Node*)node);
|
|
*node_ptr = updated;
|
|
*node_ptr = updated;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -396,7 +395,7 @@ static UA_Boolean
|
|
isMandatoryChild(UA_Server *server, UA_Session *session,
|
|
isMandatoryChild(UA_Server *server, UA_Session *session,
|
|
const UA_NodeId *childNodeId) {
|
|
const UA_NodeId *childNodeId) {
|
|
/* Get the child */
|
|
/* Get the child */
|
|
- const UA_Node *child = UA_Nodestore_getNode(server->nsCtx, childNodeId);
|
|
|
|
|
|
+ const UA_Node *child = UA_NODESTORE_GET(server, childNodeId);
|
|
if(!child)
|
|
if(!child)
|
|
return false;
|
|
return false;
|
|
|
|
|
|
@@ -409,13 +408,13 @@ isMandatoryChild(UA_Server *server, UA_Session *session,
|
|
continue;
|
|
continue;
|
|
for(size_t j = 0; j < refs->refTargetsSize; ++j) {
|
|
for(size_t j = 0; j < refs->refTargetsSize; ++j) {
|
|
if(UA_NodeId_equal(&mandatoryId, &refs->refTargets[j].target.nodeId)) {
|
|
if(UA_NodeId_equal(&mandatoryId, &refs->refTargets[j].target.nodeId)) {
|
|
- UA_Nodestore_releaseNode(server->nsCtx, child);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, child);
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- UA_Nodestore_releaseNode(server->nsCtx, child);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, child);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -487,7 +486,7 @@ copyChild(UA_Server *server, UA_Session *session, const UA_NodeId *destinationNo
|
|
rd->nodeClass == UA_NODECLASS_OBJECT) {
|
|
rd->nodeClass == UA_NODECLASS_OBJECT) {
|
|
/* Make a copy of the node */
|
|
/* Make a copy of the node */
|
|
UA_Node *node;
|
|
UA_Node *node;
|
|
- retval = UA_Nodestore_getNodeCopy(server->nsCtx, &rd->nodeId.nodeId, &node);
|
|
|
|
|
|
+ retval = UA_NODESTORE_GETCOPY(server, &rd->nodeId.nodeId, &node);
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
return retval;
|
|
return retval;
|
|
|
|
|
|
@@ -509,7 +508,7 @@ copyChild(UA_Server *server, UA_Session *session, const UA_NodeId *destinationNo
|
|
&node->nodeId);
|
|
&node->nodeId);
|
|
UA_LOCK(server->serviceMutex);
|
|
UA_LOCK(server->serviceMutex);
|
|
if(retval != UA_STATUSCODE_GOOD) {
|
|
if(retval != UA_STATUSCODE_GOOD) {
|
|
- UA_Nodestore_deleteNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_DELETE(server, node);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -525,7 +524,7 @@ copyChild(UA_Server *server, UA_Session *session, const UA_NodeId *destinationNo
|
|
|
|
|
|
/* Add the node to the nodestore */
|
|
/* Add the node to the nodestore */
|
|
UA_NodeId newNodeId;
|
|
UA_NodeId newNodeId;
|
|
- retval = UA_Nodestore_insertNode(server->nsCtx, node, &newNodeId);
|
|
|
|
|
|
+ retval = UA_NODESTORE_INSERT(server, node, &newNodeId);
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
return retval;
|
|
return retval;
|
|
|
|
|
|
@@ -533,7 +532,7 @@ copyChild(UA_Server *server, UA_Session *session, const UA_NodeId *destinationNo
|
|
retval = AddNode_addRefs(server, session, &newNodeId, destinationNodeId,
|
|
retval = AddNode_addRefs(server, session, &newNodeId, destinationNodeId,
|
|
&rd->referenceTypeId, &rd->typeDefinition.nodeId);
|
|
&rd->referenceTypeId, &rd->typeDefinition.nodeId);
|
|
if(retval != UA_STATUSCODE_GOOD) {
|
|
if(retval != UA_STATUSCODE_GOOD) {
|
|
- UA_Nodestore_removeNode(server->nsCtx, &newNodeId);
|
|
|
|
|
|
+ UA_NODESTORE_REMOVE(server, &newNodeId);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -631,7 +630,7 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
|
|
const UA_NodeId *typeDefinitionId) {
|
|
const UA_NodeId *typeDefinitionId) {
|
|
/* Get the node */
|
|
/* Get the node */
|
|
const UA_Node *type = NULL;
|
|
const UA_Node *type = NULL;
|
|
- const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, nodeId);
|
|
|
|
|
|
+ const UA_Node *node = UA_NODESTORE_GET(server, nodeId);
|
|
if(!node)
|
|
if(!node)
|
|
return UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
return UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
|
|
|
|
@@ -642,11 +641,11 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
|
|
node->nodeClass == UA_NODECLASS_DATATYPE) {
|
|
node->nodeClass == UA_NODECLASS_DATATYPE) {
|
|
if(UA_NodeId_equal(referenceTypeId, &UA_NODEID_NULL))
|
|
if(UA_NodeId_equal(referenceTypeId, &UA_NODEID_NULL))
|
|
referenceTypeId = &hasSubtype;
|
|
referenceTypeId = &hasSubtype;
|
|
- const UA_Node *parentNode = UA_Nodestore_getNode(server->nsCtx, parentNodeId);
|
|
|
|
|
|
+ const UA_Node *parentNode = UA_NODESTORE_GET(server, parentNodeId);
|
|
if(parentNode) {
|
|
if(parentNode) {
|
|
if(parentNode->nodeClass == node->nodeClass)
|
|
if(parentNode->nodeClass == node->nodeClass)
|
|
typeDefinitionId = parentNodeId;
|
|
typeDefinitionId = parentNodeId;
|
|
- UA_Nodestore_releaseNode(server->nsCtx, parentNode);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, parentNode);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -692,7 +691,7 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
|
|
* and type-nodes. See the above checks. */
|
|
* and type-nodes. See the above checks. */
|
|
if(!UA_NodeId_isNull(typeDefinitionId)) {
|
|
if(!UA_NodeId_isNull(typeDefinitionId)) {
|
|
/* Get the type node */
|
|
/* Get the type node */
|
|
- type = UA_Nodestore_getNode(server->nsCtx, typeDefinitionId);
|
|
|
|
|
|
+ type = UA_NODESTORE_GET(server, typeDefinitionId);
|
|
if(!type) {
|
|
if(!type) {
|
|
UA_LOG_NODEID_WRAP(typeDefinitionId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(typeDefinitionId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Node type %.*s not found",
|
|
"AddNodes: Node type %.*s not found",
|
|
@@ -760,9 +759,9 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
|
|
* object type which again is below BaseObjectType */
|
|
* object type which again is below BaseObjectType */
|
|
const UA_NodeId variableTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
|
|
const UA_NodeId variableTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE);
|
|
const UA_NodeId objectTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
|
|
const UA_NodeId objectTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
|
|
- if(!isNodeInTree(server->nsCtx, parentNodeId, &variableTypes,
|
|
|
|
|
|
+ if(!isNodeInTree(server, parentNodeId, &variableTypes,
|
|
parentTypeHierarchy, parentTypeHierarchySize) &&
|
|
parentTypeHierarchy, parentTypeHierarchySize) &&
|
|
- !isNodeInTree(server->nsCtx, parentNodeId, &objectTypes,
|
|
|
|
|
|
+ !isNodeInTree(server, parentNodeId, &objectTypes,
|
|
parentTypeHierarchy, parentTypeHierarchySize)) {
|
|
parentTypeHierarchy, parentTypeHierarchySize)) {
|
|
UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Type of variable node %.*s must "
|
|
"AddNodes: Type of variable node %.*s must "
|
|
@@ -795,11 +794,13 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
|
|
/* Object node created of an abstract ObjectType. Only allowed
|
|
/* Object node created of an abstract ObjectType. Only allowed
|
|
* if within BaseObjectType folder or if it's an event (subType of BaseEventType) */
|
|
* if within BaseObjectType folder or if it's an event (subType of BaseEventType) */
|
|
const UA_NodeId objectTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
|
|
const UA_NodeId objectTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE);
|
|
- UA_Boolean isInBaseObjectType = isNodeInTree(server->nsCtx, parentNodeId, &objectTypes,
|
|
|
|
- parentTypeHierarchy, parentTypeHierarchySize);
|
|
|
|
|
|
+ UA_Boolean isInBaseObjectType =
|
|
|
|
+ isNodeInTree(server, parentNodeId, &objectTypes,
|
|
|
|
+ parentTypeHierarchy, parentTypeHierarchySize);
|
|
|
|
|
|
const UA_NodeId eventTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
|
|
const UA_NodeId eventTypes = UA_NODEID_NUMERIC(0, UA_NS0ID_BASEEVENTTYPE);
|
|
- UA_Boolean isInBaseEventType = isNodeInTree(server->nsCtx, &type->nodeId, &eventTypes, &hasSubtype, 1);
|
|
|
|
|
|
+ UA_Boolean isInBaseEventType =
|
|
|
|
+ isNodeInTree(server, &type->nodeId, &eventTypes, &hasSubtype, 1);
|
|
|
|
|
|
if(!isInBaseObjectType && !(isInBaseEventType && UA_NodeId_isNull(parentNodeId))) {
|
|
if(!isInBaseObjectType && !(isInBaseEventType && UA_NodeId_isNull(parentNodeId))) {
|
|
UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_NODEID_WRAP(nodeId, UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
@@ -850,9 +851,9 @@ AddNode_addRefs(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId,
|
|
}
|
|
}
|
|
|
|
|
|
cleanup:
|
|
cleanup:
|
|
- UA_Nodestore_releaseNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, node);
|
|
if(type)
|
|
if(type)
|
|
- UA_Nodestore_releaseNode(server->nsCtx, type);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, type);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -887,7 +888,7 @@ AddNode_raw(UA_Server *server, UA_Session *session, void *nodeContext,
|
|
}
|
|
}
|
|
|
|
|
|
/* Create a node */
|
|
/* Create a node */
|
|
- UA_Node *node = UA_Nodestore_newNode(server->nsCtx, item->nodeClass);
|
|
|
|
|
|
+ UA_Node *node = UA_NODESTORE_NEW(server, item->nodeClass);
|
|
if(!node) {
|
|
if(!node) {
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Node could not create a node "
|
|
"AddNodes: Node could not create a node "
|
|
@@ -911,7 +912,7 @@ AddNode_raw(UA_Server *server, UA_Session *session, void *nodeContext,
|
|
goto create_error;
|
|
goto create_error;
|
|
|
|
|
|
/* Add the node to the nodestore */
|
|
/* Add the node to the nodestore */
|
|
- retval = UA_Nodestore_insertNode(server->nsCtx, node, outNewNodeId);
|
|
|
|
|
|
+ retval = UA_NODESTORE_INSERT(server, node, outNewNodeId);
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Node could not add the new node "
|
|
"AddNodes: Node could not add the new node "
|
|
@@ -923,7 +924,7 @@ create_error:
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"AddNodes: Node could not create a node "
|
|
"AddNodes: Node could not create a node "
|
|
"with error code %s", UA_StatusCode_name(retval));
|
|
"with error code %s", UA_StatusCode_name(retval));
|
|
- UA_Nodestore_deleteNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_DELETE(server, node);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1113,11 +1114,11 @@ recursiveCallConstructors(UA_Server *server, UA_Session *session,
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
for(size_t i = 0; i < br.referencesSize; ++i) {
|
|
for(size_t i = 0; i < br.referencesSize; ++i) {
|
|
UA_ReferenceDescription *rd = &br.references[i];
|
|
UA_ReferenceDescription *rd = &br.references[i];
|
|
- const UA_Node *target = UA_Nodestore_getNode(server->nsCtx, &rd->nodeId.nodeId);
|
|
|
|
|
|
+ const UA_Node *target = UA_NODESTORE_GET(server, &rd->nodeId.nodeId);
|
|
if(!target)
|
|
if(!target)
|
|
continue;
|
|
continue;
|
|
if(target->constructed) {
|
|
if(target->constructed) {
|
|
- UA_Nodestore_releaseNode(server->nsCtx, target);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, target);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1126,15 +1127,15 @@ recursiveCallConstructors(UA_Server *server, UA_Session *session,
|
|
node->nodeClass == UA_NODECLASS_OBJECT) {
|
|
node->nodeClass == UA_NODECLASS_OBJECT) {
|
|
targetType = getNodeType(server, target);
|
|
targetType = getNodeType(server, target);
|
|
if(!targetType) {
|
|
if(!targetType) {
|
|
- UA_Nodestore_releaseNode(server->nsCtx, target);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, target);
|
|
retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
|
|
retval = UA_STATUSCODE_BADTYPEDEFINITIONINVALID;
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
retval = recursiveCallConstructors(server, session, target, targetType);
|
|
retval = recursiveCallConstructors(server, session, target, targetType);
|
|
- UA_Nodestore_releaseNode(server->nsCtx, target);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, target);
|
|
if(targetType)
|
|
if(targetType)
|
|
- UA_Nodestore_releaseNode(server->nsCtx, targetType);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, targetType);
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
if(retval != UA_STATUSCODE_GOOD)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -1227,7 +1228,7 @@ AddNode_finish(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId)
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
UA_StatusCode retval = UA_STATUSCODE_GOOD;
|
|
|
|
|
|
/* Get the node */
|
|
/* Get the node */
|
|
- const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, nodeId);
|
|
|
|
|
|
+ const UA_Node *node = UA_NODESTORE_GET(server, nodeId);
|
|
if(!node)
|
|
if(!node)
|
|
return UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
return UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
|
|
|
|
@@ -1270,12 +1271,12 @@ AddNode_finish(UA_Server *server, UA_Session *session, const UA_NodeId *nodeId)
|
|
|
|
|
|
cleanup:
|
|
cleanup:
|
|
if(type)
|
|
if(type)
|
|
- UA_Nodestore_releaseNode(server->nsCtx, type);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, type);
|
|
if(retval != UA_STATUSCODE_GOOD) {
|
|
if(retval != UA_STATUSCODE_GOOD) {
|
|
recursiveDeconstructNode(server, session, 0, NULL, node);
|
|
recursiveDeconstructNode(server, session, 0, NULL, node);
|
|
recursiveDeleteNode(server, session, 0, NULL, node, true);
|
|
recursiveDeleteNode(server, session, 0, NULL, node, true);
|
|
}
|
|
}
|
|
- UA_Nodestore_releaseNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, node);
|
|
return retval;
|
|
return retval;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1494,7 +1495,7 @@ recursiveDeconstructNode(UA_Server *server, UA_Session *session,
|
|
&node->nodeId, &context);
|
|
&node->nodeId, &context);
|
|
UA_LOCK(server->serviceMutex);
|
|
UA_LOCK(server->serviceMutex);
|
|
}
|
|
}
|
|
- UA_Nodestore_releaseNode(server->nsCtx, type);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, type);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1529,14 +1530,14 @@ recursiveDeconstructNode(UA_Server *server, UA_Session *session,
|
|
/* Deconstruct every child node */
|
|
/* Deconstruct every child node */
|
|
for(size_t i = 0; i < br.referencesSize; ++i) {
|
|
for(size_t i = 0; i < br.referencesSize; ++i) {
|
|
UA_ReferenceDescription *rd = &br.references[i];
|
|
UA_ReferenceDescription *rd = &br.references[i];
|
|
- const UA_Node *child = UA_Nodestore_getNode(server->nsCtx, &rd->nodeId.nodeId);
|
|
|
|
|
|
+ const UA_Node *child = UA_NODESTORE_GET(server, &rd->nodeId.nodeId);
|
|
if(!child)
|
|
if(!child)
|
|
continue;
|
|
continue;
|
|
/* Only delete child nodes that have no other parent */
|
|
/* Only delete child nodes that have no other parent */
|
|
if(!multipleHierarchies(hierarchicalRefsSize, hierarchicalRefs, child))
|
|
if(!multipleHierarchies(hierarchicalRefsSize, hierarchicalRefs, child))
|
|
recursiveDeconstructNode(server, session, hierarchicalRefsSize,
|
|
recursiveDeconstructNode(server, session, hierarchicalRefsSize,
|
|
hierarchicalRefs, child);
|
|
hierarchicalRefs, child);
|
|
- UA_Nodestore_releaseNode(server->nsCtx, child);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, child);
|
|
}
|
|
}
|
|
|
|
|
|
UA_BrowseResult_clear(&br);
|
|
UA_BrowseResult_clear(&br);
|
|
@@ -1568,14 +1569,14 @@ recursiveDeleteNode(UA_Server *server, UA_Session *session,
|
|
/* Check for self-reference to avoid endless loop */
|
|
/* Check for self-reference to avoid endless loop */
|
|
if(UA_NodeId_equal(&node->nodeId, &rd->nodeId.nodeId))
|
|
if(UA_NodeId_equal(&node->nodeId, &rd->nodeId.nodeId))
|
|
continue;
|
|
continue;
|
|
- const UA_Node *child = UA_Nodestore_getNode(server->nsCtx, &rd->nodeId.nodeId);
|
|
|
|
|
|
+ const UA_Node *child = UA_NODESTORE_GET(server, &rd->nodeId.nodeId);
|
|
if(!child)
|
|
if(!child)
|
|
continue;
|
|
continue;
|
|
/* Only delete child nodes that have no other parent */
|
|
/* Only delete child nodes that have no other parent */
|
|
if(!multipleHierarchies(hierarchicalRefsSize, hierarchicalRefs, child))
|
|
if(!multipleHierarchies(hierarchicalRefsSize, hierarchicalRefs, child))
|
|
recursiveDeleteNode(server, session, hierarchicalRefsSize,
|
|
recursiveDeleteNode(server, session, hierarchicalRefsSize,
|
|
hierarchicalRefs, child, true);
|
|
hierarchicalRefs, child, true);
|
|
- UA_Nodestore_releaseNode(server->nsCtx, child);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, child);
|
|
}
|
|
}
|
|
|
|
|
|
UA_BrowseResult_clear(&br);
|
|
UA_BrowseResult_clear(&br);
|
|
@@ -1583,7 +1584,7 @@ recursiveDeleteNode(UA_Server *server, UA_Session *session,
|
|
if(removeTargetRefs)
|
|
if(removeTargetRefs)
|
|
removeIncomingReferences(server, session, node);
|
|
removeIncomingReferences(server, session, node);
|
|
|
|
|
|
- UA_Nodestore_removeNode(server->nsCtx, &node->nodeId);
|
|
|
|
|
|
+ UA_NODESTORE_REMOVE(server, &node->nodeId);
|
|
}
|
|
}
|
|
|
|
|
|
static void
|
|
static void
|
|
@@ -1601,7 +1602,7 @@ deleteNodeOperation(UA_Server *server, UA_Session *session, void *context,
|
|
UA_LOCK(server->serviceMutex);
|
|
UA_LOCK(server->serviceMutex);
|
|
}
|
|
}
|
|
|
|
|
|
- const UA_Node *node = UA_Nodestore_getNode(server->nsCtx, &item->nodeId);
|
|
|
|
|
|
+ const UA_Node *node = UA_NODESTORE_GET(server, &item->nodeId);
|
|
if(!node) {
|
|
if(!node) {
|
|
*result = UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
*result = UA_STATUSCODE_BADNODEIDUNKNOWN;
|
|
return;
|
|
return;
|
|
@@ -1611,7 +1612,7 @@ deleteNodeOperation(UA_Server *server, UA_Session *session, void *context,
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
UA_LOG_INFO_SESSION(&server->config.logger, session,
|
|
"Delete Nodes: Cannot delete a type node "
|
|
"Delete Nodes: Cannot delete a type node "
|
|
"with active instances or subtypes");
|
|
"with active instances or subtypes");
|
|
- UA_Nodestore_releaseNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, node);
|
|
*result = UA_STATUSCODE_BADINTERNALERROR;
|
|
*result = UA_STATUSCODE_BADINTERNALERROR;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -1639,7 +1640,7 @@ deleteNodeOperation(UA_Server *server, UA_Session *session, void *context,
|
|
item->deleteTargetReferences);
|
|
item->deleteTargetReferences);
|
|
UA_Array_delete(hierarchicalRefs, hierarchicalRefsSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
|
|
UA_Array_delete(hierarchicalRefs, hierarchicalRefsSize, &UA_TYPES[UA_TYPES_EXPANDEDNODEID]);
|
|
|
|
|
|
- UA_Nodestore_releaseNode(server->nsCtx, node);
|
|
|
|
|
|
+ UA_NODESTORE_RELEASE(server, node);
|
|
}
|
|
}
|
|
|
|
|
|
void Service_DeleteNodes(UA_Server *server, UA_Session *session,
|
|
void Service_DeleteNodes(UA_Server *server, UA_Session *session,
|