Преглед изворни кода

adding baseDataVarialbeType type references for added Variable nodes

Stasik0 пре 10 година
родитељ
комит
a50d32da62
3 измењених фајлова са 18 додато и 11 уклоњено
  1. 6 11
      src/server/ua_server.c
  2. 2 0
      src/server/ua_server_addressspace.c
  3. 10 0
      src/server/ua_server_internal.h

+ 6 - 11
src/server/ua_server.c

@@ -135,16 +135,6 @@ UA_Server * UA_Server_new(void) {
 
     server->nodestore = UA_NodeStore_new();
 
-#define ADDREFERENCE(NODEID, REFTYPE_NODEID, TARGET_EXPNODEID) do {     \
-        UA_AddReferencesItem item;                                      \
-        UA_AddReferencesItem_init(&item);                               \
-        item.sourceNodeId = NODEID;                                     \
-        item.referenceTypeId = REFTYPE_NODEID;                          \
-        item.isForward = UA_TRUE;                                       \
-        item.targetNodeId = TARGET_EXPNODEID;                           \
-        UA_Server_addReference(server, &item);                          \
-    } while(0)
-
 #define COPYNAMES(TARGET, NAME) do {                                \
         UA_QualifiedName_copycstring(NAME, &TARGET->browseName);    \
         UA_LocalizedText_copycstring(NAME, &TARGET->displayName);   \
@@ -387,12 +377,17 @@ UA_Server * UA_Server_new(void) {
     /***********/
     /* Objects */
     /***********/
-    
+
     UA_ObjectTypeNode *baseObjectType = UA_ObjectTypeNode_new();
     baseObjectType->nodeId.identifier.numeric = UA_NS0ID_BASEOBJECTTYPE;
     COPYNAMES(baseObjectType, "BaseObjectType");
     UA_NodeStore_insert(server->nodestore, (UA_Node*)baseObjectType, UA_NULL);
 
+    UA_ObjectTypeNode *baseDataVarialbeType = UA_ObjectTypeNode_new();
+    baseDataVarialbeType->nodeId.identifier.numeric = UA_NS0ID_BASEDATAVARIABLETYPE;
+    COPYNAMES(baseDataVarialbeType, "BaseDataVariableType");
+    UA_NodeStore_insert(server->nodestore, (UA_Node*)baseDataVarialbeType, UA_NULL);
+
     UA_ObjectTypeNode *folderType = UA_ObjectTypeNode_new();
     folderType->nodeId.identifier.numeric = UA_NS0ID_FOLDERTYPE;
     COPYNAMES(folderType, "FolderType");

+ 2 - 0
src/server/ua_server_addressspace.c

@@ -14,6 +14,8 @@ UA_StatusCode UA_Server_addVariableNode(UA_Server *server, UA_Variant *value, UA
     parentId.nodeId = *parentNodeId;
     UA_AddNodesResult res = UA_Server_addNodeWithSession(server, &adminSession, (UA_Node*)node,
                                                          &parentId, referenceTypeId);
+    ADDREFERENCE(res.addedNodeId, UA_NODEID_STATIC(0, UA_NS0ID_HASTYPEDEFINITION),
+                 UA_EXPANDEDNODEID_STATIC(0, UA_NS0ID_BASEDATAVARIABLETYPE));
     if(res.statusCode != UA_STATUSCODE_GOOD) {
         UA_Variant_init(&node->value);
         UA_VariableNode_delete(node);

+ 10 - 0
src/server/ua_server_internal.h

@@ -103,4 +103,14 @@ typedef enum {
     UA_ATTRIBUTEID_USEREXECUTABLE          = 22
 } UA_AttributeId;
 
+#define ADDREFERENCE(NODEID, REFTYPE_NODEID, TARGET_EXPNODEID) do {     \
+        UA_AddReferencesItem item;                                      \
+        UA_AddReferencesItem_init(&item);                               \
+        item.sourceNodeId = NODEID;                                     \
+        item.referenceTypeId = REFTYPE_NODEID;                          \
+        item.isForward = UA_TRUE;                                       \
+        item.targetNodeId = TARGET_EXPNODEID;                           \
+        UA_Server_addReference(server, &item);                          \
+    } while(0)
+
 #endif /* UA_SERVER_INTERNAL_H_ */