Browse Source

reworked some code

FlorianPalm 10 years ago
parent
commit
52c398bfbc

+ 1 - 0
CMakeLists.txt

@@ -27,6 +27,7 @@ set(lib_sources src/ua_types.c
                 src/server/ua_server.c
                 src/server/ua_securechannel_manager.c
                 src/server/ua_session_manager.c
+                src/server/ua_namespace.c
                 src/server/ua_namespace_manager.c
 				src/server/ua_server_binary.c
                 src/server/ua_services_attribute.c

+ 0 - 8
include/ua_server.h

@@ -35,14 +35,6 @@ typedef struct UA_Server UA_Server;
 struct open62541NodeStore;
 typedef struct open62541NodeStore open62541NodeStore;
 
-//struct UA_Namespace;
-//typedef struct UA_Namespace UA_Namespace;
-typedef struct UA_Namespace
-{
-	UA_UInt16 index;
-	UA_String url;
-	UA_NodeStoreInterface *nodeStore;
-}UA_Namespace;
 
 struct UA_NamespaceManager;
 typedef struct UA_NamespaceManager UA_NamespaceManager;

+ 4 - 4
src/server/nodestore/open62541_nodestore_concurrent_core.c

@@ -258,12 +258,12 @@ UA_StatusCode open62541NodeStore_insert(open62541NodeStore *ns, UA_Node **node,
 
     cds_lfht_node_init(&entry->htn);
     entry->readcount = ALIVE_BIT;
-    if(flags & open62541NodeStore_INSERT_GETMANAGED)
+    if(flags & UA_NODESTORE_INSERT_GETMANAGED)
         entry->readcount++;
 
     hash_t nhash = hash(&(*node)->nodeId);
     struct cds_lfht_node *result;
-    if(flags & open62541NodeStore_INSERT_UNIQUE) {
+    if(flags & UA_NODESTORE_INSERT_UNIQUE) {
         rcu_read_lock();
         result = cds_lfht_add_unique(ns->ht, nhash, compare, &entry->node.nodeId, &entry->htn);
         rcu_read_unlock();
@@ -285,7 +285,7 @@ UA_StatusCode open62541NodeStore_insert(open62541NodeStore *ns, UA_Node **node,
     }
 
     UA_free((UA_Node *)*node);     /* The old node is replaced by a managed node. */
-    if(flags & open62541NodeStore_INSERT_GETMANAGED)
+    if(flags & UA_NODESTORE_INSERT_GETMANAGED)
         *node = &entry->node;
     else
         *node = UA_NULL;
@@ -335,7 +335,7 @@ UA_StatusCode open62541NodeStore_get(const open62541NodeStore *ns, const UA_Node
     return UA_STATUSCODE_GOOD;
 }
 
-void open62541NodeStore_iterate(const open62541NodeStore *ns, open62541NodeStore_nodeVisitor visitor) {
+void open62541NodeStore_iterate(const open62541NodeStore *ns, UA_NodeStore_nodeVisitor visitor) {
     struct cds_lfht     *ht = ns->ht;
     struct cds_lfht_iter iter;
 

+ 6 - 1
src/server/nodestore/open62541_nodestore_view.c

@@ -217,7 +217,12 @@ static void getBrowseResult(open62541NodeStore *ns, const UA_BrowseDescription *
             }
             currentRefs++;
         }
-        browseResult->referencesSize = currentRefs;
+        if(currentRefs != 0)
+        	browseResult->referencesSize = currentRefs;
+        else {
+        	UA_free(browseResult->references);
+        	browseResult->references = UA_NULL;
+        }
     }
 
     open62541NodeStore_release(parentNode);

+ 31 - 16
src/server/ua_namespace_manager.c

@@ -15,36 +15,51 @@ struct namespace_list_entry {
     LIST_ENTRY(namespace_list_entry) pointers;
 };
 
-struct UA_NamespaceManager {
-    LIST_HEAD(namespace_list, namespace_list_entry) namespaces;
-    UA_UInt32    currentNamespaceCount;
-};
 
-UA_NamespaceManager* UA_NamespaceManager_new()
+
+UA_StatusCode UA_NamespaceManager_init( UA_NamespaceManager* namespaceManager)
 {
-	UA_NamespaceManager* namespaceManager = UA_alloc(sizeof(UA_NamespaceManager));
+	LIST_INIT(&namespaceManager->namespaces);
 	namespaceManager->currentNamespaceCount = 0;
-	LIST_INIT(&(namespaceManager->namespaces));
-	return namespaceManager;
+	return UA_STATUSCODE_GOOD;
+}
+
+void UA_NamespaceManager_deleteMembers(UA_NamespaceManager *namespaceManager)
+{
+	struct namespace_list_entry *current = LIST_FIRST(&namespaceManager->namespaces);
+    while(current) {
+        LIST_REMOVE(current, pointers);
+        if(current->namespace.nodeStore != UA_NULL)
+            current->namespace.nodeStore = UA_NULL; // the channel is no longer attached to a session
+        UA_Namespace_deleteMembers(&current->namespace);
+        UA_free(current);
+        current = LIST_FIRST(&namespaceManager->namespaces);
+    }
 
 }
 
-UA_StatusCode UA_NamespaceManager_addNamespace(UA_NamespaceManager *namespaceManager,UA_UInt16 index, UA_NodeStoreInterface *nodeStore)
+UA_StatusCode UA_NamespaceManager_createNamespace(UA_NamespaceManager *namespaceManager,UA_UInt16 index, UA_NodeStoreInterface *nodeStore)
 {
 	if(namespaceManager->currentNamespaceCount<UA_UINT16_MAX){
-		namespaceManager->currentNamespaceCount++;
+
 		struct namespace_list_entry *newentry = UA_alloc(sizeof(struct namespace_list_entry));
+		UA_Namespace_init(&newentry->namespace);
 		newentry->namespace.index = index;
 		if(nodeStore != UA_NULL ){
 
-			newentry->namespace.nodeStore = UA_NodeStore_new();
-			UA_NodeStore_copy(nodeStore,newentry->namespace.nodeStore);
+			newentry->namespace.nodeStore = UA_NodeStoreInterface_new();
+			UA_NodeStoreInterface_copy(nodeStore,newentry->namespace.nodeStore);
 		}
-		UA_String_init(&newentry->namespace.url);
-		LIST_INSERT_HEAD(&namespaceManager->namespaces, newentry, pointers);
-		return UA_STATUSCODE_GOOD;
+		namespaceManager->currentNamespaceCount++;
+	    LIST_INSERT_HEAD(&namespaceManager->namespaces, newentry, pointers);
+
+	    return UA_STATUSCODE_GOOD;
+
 	}
 	return UA_STATUSCODE_BADNOTFOUND;
+
+
+
 }
 
 UA_StatusCode UA_NamespaceManager_removeNamespace(UA_NamespaceManager *namespaceManager,UA_UInt16 index)
@@ -93,7 +108,7 @@ UA_Int32 UA_NamespaceManager_setNodeStore(UA_NamespaceManager *namespaceManager,
 	}
 	if(nodeStore != UA_NULL ){
 		if(namespace->nodeStore == UA_NULL){
-			namespace->nodeStore = UA_NodeStore_new();
+			namespace->nodeStore = UA_NodeStoreInterface_new();
 		}
 	}
 	namespace->nodeStore = nodeStore;

+ 10 - 2
src/server/ua_namespace_manager.h

@@ -9,11 +9,19 @@
 #define UA_NAMESPACE_MANAGER_H_
 #include "ua_server.h"
 #include "ua_nodestore_interface.h"
+#include "ua_namespace.h"
+#include "ua_util.h"
 
+struct UA_NamespaceManager {
+    LIST_HEAD(namespace_list, namespace_list_entry) namespaces;
+    UA_UInt32    currentNamespaceCount;
+};
 
-UA_NamespaceManager* UA_NamespaceManager_new();
+UA_StatusCode UA_NamespaceManager_init( UA_NamespaceManager* namespaceManager);
 
-UA_Int32  UA_NamespaceManager_addNamespace(UA_NamespaceManager *namespaceManager, UA_UInt16 index, UA_NodeStoreInterface *nodeStore);
+void UA_NamespaceManager_deleteMembers(UA_NamespaceManager *namespaceManager);
+
+UA_Int32  UA_NamespaceManager_createNamespace(UA_NamespaceManager *namespaceManager, UA_UInt16 index, UA_NodeStoreInterface *nodeStore);
 
 UA_Int32  UA_NamespaceManager_removeNamespace(UA_NamespaceManager *namespaceManager,UA_UInt16 index);
 

+ 4 - 4
src/server/ua_nodestore_interface.c

@@ -68,11 +68,11 @@ UA_StatusCode UA_NodeStoreInterface_registerBrowseNodesOperation(UA_NodeStoreInt
 	return UA_STATUSCODE_GOOD;
 }
 
-UA_NodeStoreInterface* UA_NodeStore_new(){
+UA_NodeStoreInterface* UA_NodeStoreInterface_new(){
 	return UA_alloc(sizeof(UA_NodeStoreInterface));
 }
 
-UA_StatusCode UA_NodeStore_copy(const UA_NodeStoreInterface *src,UA_NodeStoreInterface *dst){
+UA_StatusCode UA_NodeStoreInterface_copy(const UA_NodeStoreInterface *src,UA_NodeStoreInterface *dst){
 	if(src!=UA_NULL){
 		if(dst!=UA_NULL){
 			dst->addNodes = src->addNodes;
@@ -87,8 +87,8 @@ UA_StatusCode UA_NodeStore_copy(const UA_NodeStoreInterface *src,UA_NodeStoreInt
 	}
 	return UA_STATUSCODE_BADINTERNALERROR;
 }
-void UA_NodeStore_delete(UA_NodeStoreInterface *nodestore){
-	UA_free(nodestore);
+void UA_NodeStoreInterface_delete(UA_NodeStoreInterface *nodestoreInterface){
+	UA_free(nodestoreInterface);
 }
 //add method to add a 'delete nodestore'
 

+ 3 - 3
src/server/ua_nodestore_interface.h

@@ -19,9 +19,9 @@ UA_StatusCode UA_EXPORT UA_NodeStoreInterface_registerBrowseNodesOperation(UA_No
 
 
 
-UA_NodeStoreInterface* UA_NodeStore_new();
-UA_StatusCode UA_NodeStore_copy(const UA_NodeStoreInterface *src,UA_NodeStoreInterface *dst);
-void UA_NodeStore_delete(UA_NodeStoreInterface *nodestore);
+UA_NodeStoreInterface* UA_NodeStoreInterface_new();
+UA_StatusCode UA_NodeStoreInterface_copy(const UA_NodeStoreInterface *src,UA_NodeStoreInterface *dst);
+void UA_NodeStoreInterface_delete(UA_NodeStoreInterface *nodestore);
 
 UA_Boolean UA_NodeStore_nodeExists(UA_NodeId nodeId);
 

+ 105 - 101
src/server/ua_server.c

@@ -12,12 +12,13 @@ void UA_Server_delete(UA_Server *server) {
 	UA_ApplicationDescription_deleteMembers(&server->description);
 	UA_SecureChannelManager_deleteMembers(&server->secureChannelManager);
 	UA_SessionManager_deleteMembers(&server->sessionManager);
-	//UA_NodeStore_delete(server->nodestore);
+	UA_NamespaceManager_deleteMembers(&server->namespaceManager);
 	UA_ByteString_deleteMembers(&server->serverCertificate);
 	UA_Array_delete(server->endpointDescriptions,
 			server->endpointDescriptionsSize,
 			&UA_TYPES[UA_ENDPOINTDESCRIPTION]);
 	UA_free(server);
+
 }
 void addSingleReference(UA_Namespace *namespace,
 		UA_AddReferencesItem *addReferencesItem) {
@@ -50,88 +51,90 @@ static void UA_Server_registerNS0Operations(UA_Server *server, UA_NodeStoreInter
 static void ns0_addObjectNode(UA_Server *server, UA_NodeId REFTYPE_NODEID,
 		UA_ExpandedNodeId REQ_NODEID, UA_ExpandedNodeId PARENTNODEID,
 		char* BROWSENAME, char* DISPLAYNAME, char* DESCRIPTION) {
-	UA_ObjectAttributes *objAttr = UA_ObjectAttributes_new();
-	UA_ObjectAttributes_init(objAttr);
-	UA_AddNodesItem *addNodesItem = UA_AddNodesItem_new();
-	UA_AddNodesItem_init(addNodesItem);
+	UA_ObjectAttributes objAttr;
+	UA_ObjectAttributes_init(&objAttr);
+	UA_AddNodesItem addNodesItem;
+	UA_AddNodesItem_init(&addNodesItem);
 
 	UA_Namespace *ns0 = UA_NULL;
-	UA_NamespaceManager_getNamespace(server->namespaceManager, 0, &ns0);
-	addNodesItem->parentNodeId = PARENTNODEID;
-	addNodesItem->requestedNewNodeId = REQ_NODEID;
-	addNodesItem->referenceTypeId = REFTYPE_NODEID;
-	addNodesItem->nodeClass = UA_NODECLASS_OBJECT;\
-	UA_QualifiedName_copycstring(BROWSENAME, &addNodesItem->browseName);
-	UA_LocalizedText_copycstring(DISPLAYNAME, &objAttr->displayName);
-	UA_LocalizedText_copycstring(DESCRIPTION, &objAttr->description);
-	objAttr->userWriteMask = 0;
-	objAttr->writeMask = 0;
-	objAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_BROWSENAME;
-	objAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
-	objAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
-	addNodesItem->typeDefinition.nodeId.identifier.numeric = 354;
-	addNodesItem->typeDefinition.nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
-	addNodesItem->typeDefinition.nodeId.namespaceIndex = 0;
-	addNodesItem->nodeAttributes.typeId = addNodesItem->typeDefinition.nodeId;
+	UA_NamespaceManager_getNamespace(&server->namespaceManager, 0, &ns0);
+	addNodesItem.parentNodeId = PARENTNODEID;
+	addNodesItem.requestedNewNodeId = REQ_NODEID;
+	addNodesItem.referenceTypeId = REFTYPE_NODEID;
+	addNodesItem.nodeClass = UA_NODECLASS_OBJECT;\
+	UA_QualifiedName_copycstring(BROWSENAME, &addNodesItem.browseName);
+	UA_LocalizedText_copycstring(DISPLAYNAME, &objAttr.displayName);
+	UA_LocalizedText_copycstring(DESCRIPTION, &objAttr.description);
+	objAttr.userWriteMask = 0;
+	objAttr.writeMask = 0;
+	objAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_BROWSENAME;
+	objAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
+	objAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
+	addNodesItem.typeDefinition.nodeId.identifier.numeric = 354;
+	addNodesItem.typeDefinition.nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
+	addNodesItem.typeDefinition.nodeId.namespaceIndex = 0;
+	addNodesItem.nodeAttributes.typeId = addNodesItem.typeDefinition.nodeId;
 	UA_UInt32 offset = 0;
-	UA_ByteString_newMembers(&addNodesItem->nodeAttributes.body,
-			UA_ObjectAttributes_calcSizeBinary(objAttr));
-	UA_ObjectAttributes_encodeBinary(objAttr,
-			&addNodesItem->nodeAttributes.body, &offset);
-	addSingleNode(ns0, addNodesItem);
-	UA_AddNodesItem_delete(addNodesItem);
-	UA_ObjectAttributes_delete(objAttr);
+	UA_ByteString_newMembers(&addNodesItem.nodeAttributes.body,
+			UA_ObjectAttributes_calcSizeBinary(&objAttr));
+	UA_ObjectAttributes_encodeBinary(&objAttr,
+			&addNodesItem.nodeAttributes.body, &offset);
+	addSingleNode(ns0, &addNodesItem);
+	UA_ObjectAttributes_deleteMembers(&objAttr);
+	UA_AddNodesItem_deleteMembers(&addNodesItem);
+	UA_ByteString_deleteMembers(&addNodesItem.nodeAttributes.body);
 }
 static void ns0_addVariableNode(UA_Server *server, UA_NodeId refTypeNodeId,
 		UA_ExpandedNodeId requestedNodeId, UA_ExpandedNodeId parentNodeId,
 		UA_QualifiedName browseName, UA_LocalizedText displayName,
 		UA_LocalizedText description, UA_DataValue *dataValue,
 		UA_Int32 valueRank) {
-	UA_VariableAttributes *varAttr = UA_VariableAttributes_new();
-	UA_VariableAttributes_init(varAttr);
-	UA_AddNodesItem *addNodesItem = UA_AddNodesItem_new();
-	UA_AddNodesItem_init(addNodesItem);
+	UA_VariableAttributes varAttr;
+	UA_VariableAttributes_init(&varAttr);
+	UA_AddNodesItem addNodesItem;
+	UA_AddNodesItem_init(&addNodesItem);
 	UA_Namespace *ns0 = UA_NULL;
-	UA_NamespaceManager_getNamespace(server->namespaceManager, 0, &ns0);
-	addNodesItem->parentNodeId = parentNodeId;
-	addNodesItem->requestedNewNodeId = requestedNodeId;
-	addNodesItem->referenceTypeId = refTypeNodeId;
-	addNodesItem->nodeClass = UA_NODECLASS_VARIABLE;
-	addNodesItem->browseName = browseName;
-	addNodesItem->typeDefinition.nodeId.identifier.numeric = 357;
-	addNodesItem->typeDefinition.nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
-	addNodesItem->typeDefinition.nodeId.namespaceIndex = 0;
-	addNodesItem->nodeAttributes.typeId = addNodesItem->typeDefinition.nodeId;
-	varAttr->displayName = displayName;
-	varAttr->description = description;
-	UA_Variant_copy(&dataValue->value,&varAttr->value);
-	varAttr->userWriteMask = 0;
-	varAttr->writeMask = 0;
-
-	varAttr->dataType = dataValue->value.vt->typeId;
-	varAttr->valueRank = valueRank;
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUERANK;
-
-	varAttr->arrayDimensions =
+	UA_NamespaceManager_getNamespace(&server->namespaceManager, 0, &ns0);
+	addNodesItem.parentNodeId = parentNodeId;
+	addNodesItem.requestedNewNodeId = requestedNodeId;
+	addNodesItem.referenceTypeId = refTypeNodeId;
+	addNodesItem.nodeClass = UA_NODECLASS_VARIABLE;
+	addNodesItem.browseName = browseName;
+	addNodesItem.typeDefinition.nodeId.identifier.numeric = 357;
+	addNodesItem.typeDefinition.nodeId.identifierType = UA_NODEIDTYPE_NUMERIC;
+	addNodesItem.typeDefinition.nodeId.namespaceIndex = 0;
+	addNodesItem.nodeAttributes.typeId = addNodesItem.typeDefinition.nodeId;
+	varAttr.displayName = displayName;
+	varAttr.description = description;
+	UA_Variant_copy(&dataValue->value,&varAttr.value);
+	varAttr.userWriteMask = 0;
+	varAttr.writeMask = 0;
+
+	varAttr.dataType = dataValue->value.vt->typeId;
+	varAttr.valueRank = valueRank;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUERANK;
+
+	varAttr.arrayDimensions =
 			(UA_UInt32*) dataValue->value.storage.data.arrayDimensions;
-	varAttr->arrayDimensionsSize =
+	varAttr.arrayDimensionsSize =
 			dataValue->value.storage.data.arrayDimensionsLength;
 
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_BROWSENAME;
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUE;
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DATATYPE;
-	varAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ARRAYDIMENSIONS;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_BROWSENAME;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_VALUE;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DATATYPE;
+	varAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_ARRAYDIMENSIONS;
 
 	UA_UInt32 offset = 0;
-	UA_ByteString_newMembers(&addNodesItem->nodeAttributes.body,
-			UA_VariableAttributes_calcSizeBinary(varAttr));
-	UA_VariableAttributes_encodeBinary(varAttr,
-			&addNodesItem->nodeAttributes.body, &offset);
-	addSingleNode(ns0, addNodesItem);
-	UA_AddNodesItem_delete(addNodesItem);
-	UA_VariableAttributes_delete(varAttr);
+	UA_ByteString_newMembers(&addNodesItem.nodeAttributes.body,
+			UA_VariableAttributes_calcSizeBinary(&varAttr));
+	UA_VariableAttributes_encodeBinary(&varAttr,
+			&addNodesItem.nodeAttributes.body, &offset);
+	addSingleNode(ns0, &addNodesItem);
+	UA_VariableAttributes_deleteMembers(&varAttr);
+	UA_AddNodesItem_deleteMembers(&addNodesItem);
+	UA_ByteString_deleteMembers(&addNodesItem.nodeAttributes.body);
 }
 
 static void ns0_addReferenceTypeNode(UA_Server *server, UA_NodeId REFTYPE_NODEID,
@@ -139,38 +142,39 @@ static void ns0_addReferenceTypeNode(UA_Server *server, UA_NodeId REFTYPE_NODEID
 		char* REFTYPE_BROWSENAME, char* REFTYPE_DISPLAYNAME,
 		char*REFTYPE_DESCRIPTION, UA_Boolean IS_ABSTRACT,
 		UA_Boolean IS_SYMMETRIC) {
-	UA_AddNodesItem *addNodesItem = UA_AddNodesItem_new();
+	UA_AddNodesItem addNodesItem;
+	UA_AddNodesItem_init(&addNodesItem);
 	UA_Namespace *ns0;
-	UA_NamespaceManager_getNamespace(server->namespaceManager, 0, &ns0);
-	UA_ReferenceTypeAttributes *refTypeAttr = UA_ReferenceTypeAttributes_new();
-	UA_ReferenceTypeAttributes_init(refTypeAttr);
-	addNodesItem->parentNodeId = PARENTNODEID;
-	addNodesItem->requestedNewNodeId = REQ_NODEID;
-	addNodesItem->referenceTypeId = REFTYPE_NODEID;
-	addNodesItem->nodeClass = UA_NODECLASS_REFERENCETYPE;
-	UA_QualifiedName_copycstring(REFTYPE_BROWSENAME, &addNodesItem->browseName);
-	UA_LocalizedText_copycstring(REFTYPE_DISPLAYNAME, &refTypeAttr->displayName);
-	UA_LocalizedText_copycstring(REFTYPE_DESCRIPTION, &refTypeAttr->description);
-	refTypeAttr->isAbstract = IS_ABSTRACT;
-	refTypeAttr->symmetric = IS_SYMMETRIC;
-	refTypeAttr->userWriteMask = 0;
-	refTypeAttr->writeMask = 0;
-	refTypeAttr->inverseName.locale.length = 0;
-	refTypeAttr->inverseName.text.length = 0;
-	refTypeAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_BROWSENAME;
-	refTypeAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
-	refTypeAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
-	refTypeAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_ISABSTRACT;
-	refTypeAttr->specifiedAttributes |= UA_NODEATTRIBUTESMASK_SYMMETRIC;
+	UA_NamespaceManager_getNamespace(&server->namespaceManager, 0, &ns0);
+	UA_ReferenceTypeAttributes refTypeAttr;
+	UA_ReferenceTypeAttributes_init(&refTypeAttr);
+	addNodesItem.parentNodeId = PARENTNODEID;
+	addNodesItem.requestedNewNodeId = REQ_NODEID;
+	addNodesItem.referenceTypeId = REFTYPE_NODEID;
+	addNodesItem.nodeClass = UA_NODECLASS_REFERENCETYPE;
+	UA_QualifiedName_copycstring(REFTYPE_BROWSENAME, &addNodesItem.browseName);
+	UA_LocalizedText_copycstring(REFTYPE_DISPLAYNAME, &refTypeAttr.displayName);
+	UA_LocalizedText_copycstring(REFTYPE_DESCRIPTION, &refTypeAttr.description);
+	refTypeAttr.isAbstract = IS_ABSTRACT;
+	refTypeAttr.symmetric = IS_SYMMETRIC;
+	refTypeAttr.userWriteMask = 0;
+	refTypeAttr.writeMask = 0;
+	UA_LocalizedText_copycstring(REFTYPE_DISPLAYNAME,&refTypeAttr.inverseName);
+	refTypeAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_BROWSENAME;
+	refTypeAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
+	refTypeAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DESCRIPTION;
+	refTypeAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_ISABSTRACT;
+	refTypeAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_SYMMETRIC;
+	refTypeAttr.specifiedAttributes |= UA_NODEATTRIBUTESMASK_INVERSENAME;
 	UA_UInt32 offset = 0;
-	UA_ByteString_newMembers(&addNodesItem->nodeAttributes.body,
-			UA_ReferenceTypeAttributes_calcSizeBinary(refTypeAttr));
-	UA_ReferenceTypeAttributes_encodeBinary(refTypeAttr,
-			&addNodesItem->nodeAttributes.body, &offset);
-	addSingleNode(ns0, addNodesItem);
-	UA_AddNodesItem_delete(addNodesItem);
-	UA_ReferenceTypeAttributes_delete(refTypeAttr);
-
+	UA_ByteString_newMembers(&addNodesItem.nodeAttributes.body,
+			UA_ReferenceTypeAttributes_calcSizeBinary(&refTypeAttr));
+	UA_ReferenceTypeAttributes_encodeBinary(&refTypeAttr,
+			&addNodesItem.nodeAttributes.body, &offset);
+	addSingleNode(ns0, &addNodesItem);
+	UA_ReferenceTypeAttributes_deleteMembers(&refTypeAttr);
+	UA_AddNodesItem_deleteMembers(&addNodesItem);
+	UA_ByteString_deleteMembers(&addNodesItem.nodeAttributes.body);
 }
 
 UA_Server * UA_Server_new(UA_String *endpointUrl,
@@ -184,12 +188,12 @@ UA_Server * UA_Server_new(UA_String *endpointUrl,
 
 	//add namespace zero
 	UA_NodeStoreInterface nodestoreInterface;
-	server->namespaceManager = UA_NamespaceManager_new();
+	UA_NamespaceManager_init(&server->namespaceManager);
 	if(!useOpen62541NodeStore){
 		nodestoreInterface = *ns0Nodestore;
 	}
 	UA_Server_registerNS0Operations(server,&nodestoreInterface);
-	UA_NamespaceManager_addNamespace(server->namespaceManager, 0, &nodestoreInterface);
+	UA_NamespaceManager_createNamespace(&server->namespaceManager, 0, &nodestoreInterface);
 
 	// mockup application description
 	UA_ApplicationDescription_init(&server->description);
@@ -584,7 +588,7 @@ void UA_Server_addScalarVariableNode(UA_Server *server,
 UA_Int32 UA_Server_addNamespace(UA_Server *server, UA_UInt16 namespaceIndex,
 		UA_NodeStoreInterface *nodeStore) {
 
-	return (UA_Int32) UA_NamespaceManager_addNamespace(server->namespaceManager,
+	return (UA_Int32) UA_NamespaceManager_createNamespace(&server->namespaceManager,
 			namespaceIndex, nodeStore);
 }
 

+ 1 - 1
src/server/ua_server_internal.h

@@ -11,7 +11,7 @@ struct UA_Server {
     UA_Int32 endpointDescriptionsSize;
     UA_EndpointDescription *endpointDescriptions;
     UA_ByteString serverCertificate;
-    UA_NamespaceManager *namespaceManager;
+    UA_NamespaceManager namespaceManager;
     UA_SecureChannelManager secureChannelManager;
     UA_SessionManager sessionManager;
     UA_NodeStoreInterface *nodestore;

+ 2 - 2
src/server/ua_services_attribute.c

@@ -259,7 +259,7 @@ void Service_Read(UA_Server *server, UA_Session *session,
 
 	for (UA_UInt32 i = 0; i < differentNamespaceIndexCount; i++) {
 		UA_Namespace *tmpNamespace;
-		UA_NamespaceManager_getNamespace(server->namespaceManager,
+		UA_NamespaceManager_getNamespace(&server->namespaceManager,
 				associatedIndices[i], &tmpNamespace);
 		if (tmpNamespace != UA_NULL) {
 
@@ -347,7 +347,7 @@ void Service_Write(UA_Server *server, UA_Session *session,
 
 	for (UA_UInt32 i = 0; i < differentNamespaceIndexCount; i++) {
 		UA_Namespace *tmpNamespace;
-		UA_NamespaceManager_getNamespace(server->namespaceManager,
+		UA_NamespaceManager_getNamespace(&server->namespaceManager,
 				associatedIndices[i], &tmpNamespace);
 		if (tmpNamespace != UA_NULL) {
 

+ 2 - 2
src/server/ua_services_nodemanagement.c

@@ -60,7 +60,7 @@ void Service_AddNodes(UA_Server *server, UA_Session *session,
 
 	for (UA_UInt32 i = 0; i < differentNamespaceIndexCount; i++) {
 		UA_Namespace *tmpNamespace;
-		UA_NamespaceManager_getNamespace(server->namespaceManager,
+		UA_NamespaceManager_getNamespace(&server->namespaceManager,
 				associatedIndices[i], &tmpNamespace);
 		if (tmpNamespace != UA_NULL) {
 			//build up index array for each read operation onto a different namespace
@@ -138,7 +138,7 @@ void Service_AddReferences(UA_Server *server, UA_Session *session,
 
 	for (UA_UInt32 i = 0; i < differentNamespaceIndexCount; i++) {
 		UA_Namespace *tmpNamespace;
-		UA_NamespaceManager_getNamespace(server->namespaceManager,
+		UA_NamespaceManager_getNamespace(&server->namespaceManager,
 				associatedIndices[i], &tmpNamespace);
 		if (tmpNamespace != UA_NULL) {
 			//build up index array for each read operation onto a different namespace

+ 1 - 1
src/server/ua_services_view.c

@@ -49,7 +49,7 @@ void Service_Browse(UA_Server *server, UA_Session *session,
 
     for(UA_UInt32 i = 0; i < differentNamespaceIndexCount; i++){
     	UA_Namespace *tmpNamespace;
-    	UA_NamespaceManager_getNamespace(server->namespaceManager,associatedIndices[i],&tmpNamespace);
+    	UA_NamespaceManager_getNamespace(&server->namespaceManager,associatedIndices[i],&tmpNamespace);
     	if(tmpNamespace != UA_NULL){
 
     	    //build up index array for each read operation onto a different namespace