Ver código fonte

use less pointers in the user-facing API

Julius Pfrommer 9 anos atrás
pai
commit
008ea5f927

+ 45 - 45
examples/server.c

@@ -223,25 +223,25 @@ int main(int argc, char** argv) {
   UA_Server_addNetworkLayer(server, ServerNetworkLayerTCP_new(UA_ConnectionConfig_standard, 16664));
 
   // add node with the datetime data source
-  UA_NodeId nodeId_currentTime;
   UA_DataSource dateDataSource = (UA_DataSource) {.handle = NULL, .read = readTimeData, .write = NULL};
   UA_VariableAttributes v_attr;
   UA_VariableAttributes_init(&v_attr);
   v_attr.description = UA_LOCALIZEDTEXT("en_US","current time");
   v_attr.displayName = UA_LOCALIZEDTEXT("en_US","current time");
   const UA_QualifiedName dateName = UA_QUALIFIEDNAME(1, "current time");
-  UA_Server_addDataSourceVariableNode(server, &UA_EXPANDEDNODEID_NULL,
-                                      &UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                      &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                      &dateName, NULL, &v_attr, &dateDataSource);
+  UA_AddNodesResult res;
+  res = UA_Server_addDataSourceVariableNode(server, UA_EXPANDEDNODEID_NULL,
+                                            UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
+                                            UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), dateName,
+                                            UA_EXPANDEDNODEID_NULL, v_attr, dateDataSource);
 
   // Get and reattach the datasource
   UA_DataSource dataSourceCopy;
-  UA_Server_getNodeAttribute_value_dataSource(server, nodeId_currentTime, &dataSourceCopy);
+  UA_Server_getNodeAttribute_value_dataSource(server, res.addedNodeId, &dataSourceCopy);
   if (dataSourceCopy.read != dateDataSource.read)
     UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND, "The returned dataSource is not the same as we set?");
   else
-    UA_Server_setNodeAttribute_value_dataSource(server, nodeId_currentTime, dataSourceCopy);
+    UA_Server_setNodeAttribute_value_dataSource(server, res.addedNodeId, dataSourceCopy);
 #ifndef _WIN32
   /* cpu temperature monitoring for linux machines */
   if((temperatureFile = fopen("/sys/class/thermal/thermal_zone0/temp", "r"))) {
@@ -251,10 +251,10 @@ int main(int argc, char** argv) {
           UA_VariableAttributes_init(&v_attr);
           v_attr.description = UA_LOCALIZEDTEXT("en_US","temperature");
           v_attr.displayName = UA_LOCALIZEDTEXT("en_US","temperature");
-          UA_Server_addDataSourceVariableNode(server, &UA_EXPANDEDNODEID_NULL,
-                                              &UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                              &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                              &tempName, NULL, &v_attr, &temperatureDataSource);
+          UA_Server_addDataSourceVariableNode(server, UA_EXPANDEDNODEID_NULL,
+                                              UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
+                                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), tempName,
+                                              UA_EXPANDEDNODEID_NULL, v_attr, temperatureDataSource);
   }
 
   /* LED control for rpi */
@@ -274,10 +274,10 @@ int main(int argc, char** argv) {
       v_attr.description = UA_LOCALIZEDTEXT("en_US","status LED");
       v_attr.displayName = UA_LOCALIZEDTEXT("en_US","status LED");
       const UA_QualifiedName statusName = UA_QUALIFIEDNAME(0, "status LED");
-      UA_Server_addDataSourceVariableNode(server, &UA_EXPANDEDNODEID_NULL,
-                                          &UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                                          &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                                          &statusName, NULL, &v_attr, &ledStatusDataSource);
+      UA_Server_addDataSourceVariableNode(server, UA_EXPANDEDNODEID_NULL,
+                                          UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
+                                          UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), statusName,
+                                          UA_EXPANDEDNODEID_NULL, v_attr, ledStatusDataSource);
     } else
       UA_LOG_WARNING(logger, UA_LOGCATEGORY_USERLAND,
                      "[Raspberry Pi] LED file exist, but is not accessible (try to run server with sudo)");
@@ -295,8 +295,8 @@ int main(int argc, char** argv) {
   const UA_ExpandedNodeId myIntegerNodeId = UA_EXPANDEDNODEID_STRING(1, "the.answer");
   UA_ExpandedNodeId parentNodeId = UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER);
   UA_NodeId parentReferenceNodeId = UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES);
-  UA_Server_addVariableNode(server, &myIntegerNodeId, &parentNodeId, &parentReferenceNodeId,
-                            &myIntegerName, NULL, &myVar);
+  UA_Server_addVariableNode(server, myIntegerNodeId, parentNodeId, parentReferenceNodeId,
+                            myIntegerName, UA_EXPANDEDNODEID_NULL, myVar);
   UA_Variant_deleteMembers(&myVar.value);
 
   /**************/
@@ -308,30 +308,30 @@ int main(int argc, char** argv) {
   UA_ObjectAttributes_init(&object_attr);
   object_attr.description = UA_LOCALIZEDTEXT("en_US","Demo");
   object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Demo");
-  UA_Server_addObjectNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, DEMOID),
-                          &UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                          &UA_QUALIFIEDNAME(1, "Demo"), NULL, &object_attr);
+  UA_Server_addObjectNode(server, UA_EXPANDEDNODEID_NUMERIC(1, DEMOID),
+                          UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                          UA_QUALIFIEDNAME(1, "Demo"), UA_EXPANDEDNODEID_NULL, object_attr);
 
 #define SCALARID 50001
   object_attr.description = UA_LOCALIZEDTEXT("en_US","Scalar");
   object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Scalar");
-  UA_Server_addObjectNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, SCALARID),
-                          &UA_EXPANDEDNODEID_NUMERIC(1, DEMOID), &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                          &UA_QUALIFIEDNAME(1, "Scalar"), NULL, &object_attr);
+  UA_Server_addObjectNode(server, UA_EXPANDEDNODEID_NUMERIC(1, SCALARID),
+                          UA_EXPANDEDNODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                          UA_QUALIFIEDNAME(1, "Scalar"), UA_EXPANDEDNODEID_NULL, object_attr);
 
 #define ARRAYID 50002
   object_attr.description = UA_LOCALIZEDTEXT("en_US","Array");
   object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Array");
-  UA_Server_addObjectNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, ARRAYID),
-                          &UA_EXPANDEDNODEID_NUMERIC(1, DEMOID), &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                          &UA_QUALIFIEDNAME(1, "Array"), NULL, &object_attr);
+  UA_Server_addObjectNode(server, UA_EXPANDEDNODEID_NUMERIC(1, ARRAYID),
+                          UA_EXPANDEDNODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                          UA_QUALIFIEDNAME(1, "Array"), UA_EXPANDEDNODEID_NULL, object_attr);
 
 #define MATRIXID 50003
   object_attr.description = UA_LOCALIZEDTEXT("en_US","Matrix");
   object_attr.displayName = UA_LOCALIZEDTEXT("en_US","Matrix");
-  UA_Server_addObjectNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, MATRIXID),
-                          &UA_EXPANDEDNODEID_NUMERIC(1, DEMOID), &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                          &UA_QUALIFIEDNAME(1, "Matrix"), NULL, &object_attr);
+  UA_Server_addObjectNode(server, UA_EXPANDEDNODEID_NUMERIC(1, MATRIXID),
+                          UA_EXPANDEDNODEID_NUMERIC(1, DEMOID), UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                          UA_QUALIFIEDNAME(1, "Matrix"), UA_EXPANDEDNODEID_NULL, object_attr);
 
   UA_UInt32 id = 51000; // running id in namespace 0
   for(UA_UInt32 type = 0; UA_IS_BUILTIN(type); type++) {
@@ -348,18 +348,18 @@ int main(int argc, char** argv) {
     /* add a scalar node for every built-in type */
     void *value = UA_new(&UA_TYPES[type]);
     UA_Variant_setScalar(&attr.value, value, &UA_TYPES[type]);
-    UA_Server_addVariableNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, ++id),
-                              &UA_EXPANDEDNODEID_NUMERIC(1, SCALARID),
-                              &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              &qualifiedName, NULL, &attr);
+    UA_Server_addVariableNode(server, UA_EXPANDEDNODEID_NUMERIC(1, ++id),
+                              UA_EXPANDEDNODEID_NUMERIC(1, SCALARID),
+                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                              qualifiedName, UA_EXPANDEDNODEID_NULL, attr);
     UA_Variant_deleteMembers(&attr.value);
 
     /* add an array node for every built-in type */
     UA_Variant_setArray(&attr.value, UA_Array_new(&UA_TYPES[type], 10), 10, &UA_TYPES[type]);
-    UA_Server_addVariableNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, ++id),
-                              &UA_EXPANDEDNODEID_NUMERIC(1, ARRAYID),
-                              &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              &qualifiedName, NULL, &attr);
+    UA_Server_addVariableNode(server, UA_EXPANDEDNODEID_NUMERIC(1, ++id),
+                              UA_EXPANDEDNODEID_NUMERIC(1, ARRAYID),
+                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                              qualifiedName, UA_EXPANDEDNODEID_NULL, attr);
     UA_Variant_deleteMembers(&attr.value);
 
     /* add an matrix node for every built-in type */
@@ -371,10 +371,10 @@ int main(int argc, char** argv) {
     attr.value.arrayLength = 9;
     attr.value.data = myMultiArray;
     attr.value.type = &UA_TYPES[type];
-    UA_Server_addVariableNode(server, &UA_EXPANDEDNODEID_NUMERIC(1, ++id),
-                              &UA_EXPANDEDNODEID_NUMERIC(1, MATRIXID),
-                              &UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
-                              &qualifiedName, NULL, &attr);
+    UA_Server_addVariableNode(server, UA_EXPANDEDNODEID_NUMERIC(1, ++id),
+                              UA_EXPANDEDNODEID_NUMERIC(1, MATRIXID),
+                              UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES),
+                              qualifiedName, UA_EXPANDEDNODEID_NULL, attr);
     UA_Variant_deleteMembers(&attr.value);
   }
 
@@ -401,10 +401,10 @@ int main(int argc, char** argv) {
   UA_NodeAttributes_init(&addmethodattributes);
   addmethodattributes.description = UA_LOCALIZEDTEXT("en_US", "Return a single argument as passed by the caller");
   addmethodattributes.displayName = UA_LOCALIZEDTEXT("en_US", "ping");
-  UA_Server_addMethodNode(server, &UA_EXPANDEDNODEID_NUMERIC(1,62541),
-                          &UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
-                          &UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
-                          &UA_QUALIFIEDNAME(1,"ping"), &addmethodattributes,
+  UA_Server_addMethodNode(server, UA_EXPANDEDNODEID_NUMERIC(1,62541),
+                          UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER),
+                          UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+                          UA_QUALIFIEDNAME(1,"ping"), addmethodattributes,
                           &getMonitoredItems, // Call this method
                           (void *) server,    // Pass our server pointer as a handle to the method
                           1, &inputArguments, 1, &outputArguments);

+ 42 - 72
include/ua_server.h

@@ -144,87 +144,86 @@ UA_StatusCode UA_EXPORT UA_Server_deleteNode(UA_Server *server, UA_NodeId nodeId
 
 /* Don't use this function. There are typed versions as inline functions. */
 UA_AddNodesResult UA_EXPORT
-UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_ExpandedNodeId *requestedNewNodeId,
-                  const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                  const UA_QualifiedName *browseName, const UA_ExpandedNodeId *typeDefinition,
+UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_ExpandedNodeId requestedNewNodeId,
+                  const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                  const UA_QualifiedName browseName, const UA_ExpandedNodeId typeDefinition,
                   const UA_NodeAttributes *attr, const UA_DataType *attributeType);
 
 static inline UA_AddNodesResult
-UA_Server_addVariableNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_ExpandedNodeId *typeDefinition,
-                          const UA_VariableAttributes *attr) {
+UA_Server_addVariableNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_ExpandedNodeId typeDefinition,
+                          const UA_VariableAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_VARIABLE, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, typeDefinition, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, typeDefinition, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES]); }
 
 static inline UA_AddNodesResult
-UA_Server_addVariableTypeNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_VariableTypeAttributes *attr) {
+UA_Server_addVariableTypeNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_VariableTypeAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_VARIABLETYPE, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, NULL, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, UA_EXPANDEDNODEID_NULL, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES]); }
 
 static inline UA_AddNodesResult
-UA_Server_addObjectNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_ExpandedNodeId *typeDefinition,
-                          const UA_ObjectAttributes *attr) {
+UA_Server_addObjectNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_ExpandedNodeId typeDefinition,
+                          const UA_ObjectAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_OBJECT, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, typeDefinition, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, typeDefinition, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES]); }
 
 static inline UA_AddNodesResult
-UA_Server_addObjectTypeNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_ObjectTypeAttributes *attr) {
+UA_Server_addObjectTypeNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_ObjectTypeAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_OBJECTTYPE, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, NULL, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, UA_EXPANDEDNODEID_NULL, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES]); }
 
 static inline UA_AddNodesResult
-UA_Server_addViewNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_ViewAttributes *attr) {
+UA_Server_addViewNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_ViewAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_VIEW, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, NULL, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, UA_EXPANDEDNODEID_NULL, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_VIEWATTRIBUTES]); }
 
 static inline UA_AddNodesResult
-UA_Server_addReferenceTypeNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_ReferenceTypeAttributes *attr) {
+UA_Server_addReferenceTypeNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_ReferenceTypeAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_REFERENCETYPE, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, NULL, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, UA_EXPANDEDNODEID_NULL, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES]); }
 
 static inline UA_AddNodesResult
-UA_Server_addDataTypeNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                          const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                          const UA_QualifiedName *browseName, const UA_DataTypeAttributes *attr) {
+UA_Server_addDataTypeNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                          const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                          const UA_QualifiedName browseName, const UA_DataTypeAttributes attr) {
     return UA_Server_addNode(server, UA_NODECLASS_DATATYPE, requestedNewNodeId, parentNodeId,
-                             referenceTypeId, browseName, NULL, (const UA_NodeAttributes*)attr,
+                             referenceTypeId, browseName, UA_EXPANDEDNODEID_NULL, (const UA_NodeAttributes*)&attr,
                              &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES]); }
 
 UA_AddNodesResult UA_EXPORT
-UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                                    const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                                    const UA_QualifiedName *browseName, const UA_ExpandedNodeId *typeDefinition,
-                                    const UA_VariableAttributes *attr, const UA_DataSource *dataSource);
+UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                                    const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                                    const UA_QualifiedName browseName, const UA_ExpandedNodeId typeDefinition,
+                                    const UA_VariableAttributes attr, const UA_DataSource dataSource);
 
 UA_StatusCode UA_EXPORT
-UA_Server_addMonodirectionalReference(UA_Server *server, UA_NodeId sourceNodeId,
-                                      UA_ExpandedNodeId targetNodeId, UA_NodeId referenceTypeId,
-                                      UA_Boolean isforward);
+UA_Server_addMonodirectionalReference(UA_Server *server, UA_NodeId sourceNodeId, UA_ExpandedNodeId targetNodeId,
+                                      UA_NodeId referenceTypeId, UA_Boolean isforward);
 
 #ifdef ENABLE_METHODCALLS
 typedef UA_StatusCode (*UA_MethodCallback)(const UA_NodeId objectId, const UA_Variant *input,
                                            UA_Variant *output, void *handle);
 UA_AddNodesResult UA_EXPORT
-UA_Server_addMethodNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                        const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                        const UA_QualifiedName *browseName, const UA_NodeAttributes *attr,
+UA_Server_addMethodNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                        const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                        const UA_QualifiedName browseName, const UA_NodeAttributes attr,
                         UA_MethodCallback method, void *handle,
                         UA_Int32 inputArgumentsSize, const UA_Argument* inputArguments, 
                         UA_Int32 outputArgumentsSize, const UA_Argument* outputArguments);
@@ -598,35 +597,6 @@ UA_Server_addExternalNamespace(UA_Server *server, UA_UInt16 namespaceIndex, cons
 
 #endif /* external nodestore */
 
-#ifndef _HAVE_UA_INSTANTIONCALLBACK_D
-#define _HAVE_UA_INSTANTIONCALLBACK_D
-typedef UA_StatusCode (*UA_InstantiationCallback)(UA_NodeId objectId, UA_NodeId definitionId, void *handle);
-#endif
-
-typedef struct arrayOfNodeIds_s {
-  UA_Int32  size;
-  UA_NodeId *ids;
-} arrayOfNodeIds;
-
-UA_StatusCode UA_EXPORT
-UA_Server_appendInstanceOfSupertype(UA_Server *server, UA_NodeId nodeId, UA_NodeId appendToNodeId, 
-                                    arrayOfNodeIds *subtypeRefs, arrayOfNodeIds *componentRefs, 
-                                    UA_InstantiationCallback callback, arrayOfNodeIds *instantiatedTypes, 
-                                    void *handle);
-
-void UA_EXPORT
-UA_Server_addInstanceOf_instatiateChildNode(UA_Server *server, 
-                                                 arrayOfNodeIds *subtypeRefs, arrayOfNodeIds *componentRefs, arrayOfNodeIds *typedefRefs,
-                                                 UA_NodeId objectRoot, UA_InstantiationCallback callback, void *typeDefNode,
-                                                 UA_Boolean instantiateObjects, arrayOfNodeIds *instantiatedTypes, void *handle);
-                                                 
-UA_StatusCode UA_EXPORT
-UA_Server_addInstanceOf(UA_Server *server, UA_NodeId nodeId, const UA_QualifiedName browseName,
-                        UA_LocalizedText displayName, UA_LocalizedText description, const UA_NodeId parentNodeId, 
-                        const UA_NodeId referenceTypeId, UA_UInt32 userWriteMask, UA_UInt32 writeMask, 
-                        const UA_ExpandedNodeId typeDefinition, UA_InstantiationCallback callback, void *handle, 
-                        UA_NodeId *createdNodeId);
-
 #ifdef __cplusplus
 } // extern "C"
 #endif

+ 8 - 9
src/server/ua_server.c

@@ -141,22 +141,21 @@ addNodeInternal(UA_Server *server, UA_Node *node, const UA_ExpandedNodeId *paren
 }
 
 UA_AddNodesResult
-UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_ExpandedNodeId *requestedNewNodeId,
-                  const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                  const UA_QualifiedName *browseName, const UA_ExpandedNodeId *typeDefinition,
+UA_Server_addNode(UA_Server *server, const UA_NodeClass nodeClass, const UA_ExpandedNodeId requestedNewNodeId,
+                  const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                  const UA_QualifiedName browseName, const UA_ExpandedNodeId typeDefinition,
                   const UA_NodeAttributes *attr, const UA_DataType *attributeType) {
     UA_AddNodesResult result;
     UA_AddNodesResult_init(&result);
 
     UA_AddNodesItem item;
     UA_AddNodesItem_init(&item);
-    result.statusCode = UA_QualifiedName_copy(browseName, &item.browseName);
+    result.statusCode = UA_QualifiedName_copy(&browseName, &item.browseName);
     item.nodeClass = nodeClass;
-    result.statusCode |= UA_ExpandedNodeId_copy(parentNodeId, &item.parentNodeId);
-    result.statusCode |= UA_NodeId_copy(referenceTypeId, &item.referenceTypeId);
-    result.statusCode |= UA_ExpandedNodeId_copy(requestedNewNodeId, &item.requestedNewNodeId);
-    if(typeDefinition)
-        result.statusCode |= UA_ExpandedNodeId_copy(typeDefinition, &item.typeDefinition);
+    result.statusCode |= UA_ExpandedNodeId_copy(&parentNodeId, &item.parentNodeId);
+    result.statusCode |= UA_NodeId_copy(&referenceTypeId, &item.referenceTypeId);
+    result.statusCode |= UA_ExpandedNodeId_copy(&requestedNewNodeId, &item.requestedNewNodeId);
+    result.statusCode |= UA_ExpandedNodeId_copy(&typeDefinition, &item.typeDefinition);
     UA_NodeAttributes *attrCopy = UA_alloca(attributeType->memSize);
     result.statusCode |= UA_copy(attr, attrCopy, attributeType);
     if(result.statusCode == UA_STATUSCODE_GOOD)

+ 1 - 0
src/server/ua_services.h

@@ -6,6 +6,7 @@
 #include "ua_types_generated.h"
 #include "ua_server.h"
 #include "ua_session.h"
+#include "ua_nodes.h"
 
 /**
  * @ingroup server

+ 24 - 24
src/server/ua_services_nodemanagement.c

@@ -404,24 +404,24 @@ void Service_AddNodes(UA_Server *server, UA_Session *session, const UA_AddNodesR
 /**************************************************/
 
 UA_AddNodesResult
-UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                                    const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                                    const UA_QualifiedName *browseName, const UA_ExpandedNodeId *typeDefinition,
-                                    const UA_VariableAttributes *attr, const UA_DataSource *dataSource) {
+UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                                    const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                                    const UA_QualifiedName browseName, const UA_ExpandedNodeId typeDefinition,
+                                    const UA_VariableAttributes attr, const UA_DataSource dataSource) {
     UA_AddNodesResult result;
     UA_AddNodesResult_init(&result);
 
     UA_AddNodesItem item;
     UA_AddNodesItem_init(&item);
-    result.statusCode = UA_QualifiedName_copy(browseName, &item.browseName);
+    result.statusCode = UA_QualifiedName_copy(&browseName, &item.browseName);
     item.nodeClass = UA_NODECLASS_METHOD;
-    result.statusCode |= UA_ExpandedNodeId_copy(parentNodeId, &item.parentNodeId);
-    result.statusCode |= UA_NodeId_copy(referenceTypeId, &item.referenceTypeId);
-    result.statusCode |= UA_ExpandedNodeId_copy(requestedNewNodeId, &item.requestedNewNodeId);
-    result.statusCode |= UA_ExpandedNodeId_copy(typeDefinition, &item.typeDefinition);
+    result.statusCode |= UA_ExpandedNodeId_copy(&parentNodeId, &item.parentNodeId);
+    result.statusCode |= UA_NodeId_copy(&referenceTypeId, &item.referenceTypeId);
+    result.statusCode |= UA_ExpandedNodeId_copy(&requestedNewNodeId, &item.requestedNewNodeId);
+    result.statusCode |= UA_ExpandedNodeId_copy(&typeDefinition, &item.typeDefinition);
     
     UA_VariableAttributes attrCopy;
-    result.statusCode |= UA_VariableAttributes_copy(attr, &attrCopy);
+    result.statusCode |= UA_VariableAttributes_copy(&attr, &attrCopy);
     if(result.statusCode != UA_STATUSCODE_GOOD) {
         UA_AddNodesItem_deleteMembers(&item);
         UA_VariableAttributes_deleteMembers(&attrCopy);
@@ -438,12 +438,12 @@ UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_ExpandedNodeId *
 
     moveStandardAttributes((UA_Node*)node, &item, (UA_NodeAttributes*)&attrCopy);
     node->valueSource = UA_VALUESOURCE_DATASOURCE;
-    node->value.dataSource = *dataSource;
-    node->accessLevel = attr->accessLevel;
-    node->userAccessLevel = attr->userAccessLevel;
-    node->historizing = attr->historizing;
-    node->minimumSamplingInterval = attr->minimumSamplingInterval;
-    node->valueRank = attr->valueRank;
+    node->value.dataSource = dataSource;
+    node->accessLevel = attr.accessLevel;
+    node->userAccessLevel = attr.userAccessLevel;
+    node->historizing = attr.historizing;
+    node->minimumSamplingInterval = attr.minimumSamplingInterval;
+    node->valueRank = attr.valueRank;
 
     Service_AddNodes_single(server, &adminSession, (UA_Node*)node, &item.parentNodeId,
                             &item.referenceTypeId, &result);
@@ -457,9 +457,9 @@ UA_Server_addDataSourceVariableNode(UA_Server *server, const UA_ExpandedNodeId *
 
 #ifdef ENABLE_METHODCALLS
 UA_AddNodesResult UA_EXPORT
-UA_Server_addMethodNode(UA_Server *server, const UA_ExpandedNodeId *requestedNewNodeId,
-                        const UA_ExpandedNodeId *parentNodeId, const UA_NodeId *referenceTypeId,
-                        const UA_QualifiedName *browseName, const UA_NodeAttributes *attr,
+UA_Server_addMethodNode(UA_Server *server, const UA_ExpandedNodeId requestedNewNodeId,
+                        const UA_ExpandedNodeId parentNodeId, const UA_NodeId referenceTypeId,
+                        const UA_QualifiedName browseName, const UA_NodeAttributes attr,
                         UA_MethodCallback method, void *handle,
                         UA_Int32 inputArgumentsSize, const UA_Argument* inputArguments, 
                         UA_Int32 outputArgumentsSize, const UA_Argument* outputArguments) {
@@ -468,14 +468,14 @@ UA_Server_addMethodNode(UA_Server *server, const UA_ExpandedNodeId *requestedNew
     
     UA_AddNodesItem item;
     UA_AddNodesItem_init(&item);
-    result.statusCode = UA_QualifiedName_copy(browseName, &item.browseName);
+    result.statusCode = UA_QualifiedName_copy(&browseName, &item.browseName);
     item.nodeClass = UA_NODECLASS_METHOD;
-    result.statusCode |= UA_ExpandedNodeId_copy(parentNodeId, &item.parentNodeId);
-    result.statusCode |= UA_NodeId_copy(referenceTypeId, &item.referenceTypeId);
-    result.statusCode |= UA_ExpandedNodeId_copy(requestedNewNodeId, &item.requestedNewNodeId);
+    result.statusCode |= UA_ExpandedNodeId_copy(&parentNodeId, &item.parentNodeId);
+    result.statusCode |= UA_NodeId_copy(&referenceTypeId, &item.referenceTypeId);
+    result.statusCode |= UA_ExpandedNodeId_copy(&requestedNewNodeId, &item.requestedNewNodeId);
     
     UA_NodeAttributes attrCopy;
-    result.statusCode |= UA_NodeAttributes_copy(attr, &attrCopy);
+    result.statusCode |= UA_NodeAttributes_copy(&attr, &attrCopy);
     if(result.statusCode != UA_STATUSCODE_GOOD) {
         UA_AddNodesItem_deleteMembers(&item);
         UA_NodeAttributes_deleteMembers(&attrCopy);