Переглянути джерело

Added userspace function UA_Server_AddMonodirectionalReference; Analogous to UA_Server_addReference, but does not add a second reference and isForward can be defined during the call.

ichrispa 9 роки тому
батько
коміт
d9f74caa37
1 змінених файлів з 34 додано та 0 видалено
  1. 34 0
      src/server/ua_server_addressspace.c

+ 34 - 0
src/server/ua_server_addressspace.c

@@ -78,6 +78,40 @@ UA_Server_addDataSourceVariableNode(UA_Server *server, UA_DataSource dataSource,
     return res.statusCode;
 }
 
+/* Userspace Version of addOneWayReferenceWithSession*/
+UA_StatusCode
+UA_Server_AddMonodirectionalReference(UA_Server *server, UA_NodeId sourceNodeId, UA_ExpandedNodeId targetNodeId, UA_NodeId referenceTypeId, UA_Boolean isforward) {
+    UA_AddReferencesItem *ref;
+    UA_StatusCode retval = UA_STATUSCODE_GOOD;
+    
+    ref = UA_AddReferencesItem_new();
+    
+    if (server == UA_NULL) 
+        retval |= UA_STATUSCODE_BADSERVERINDEXINVALID;
+    
+    retval |= UA_NodeId_copy((const UA_NodeId *) &sourceNodeId, &ref->sourceNodeId);
+    retval |= UA_ExpandedNodeId_copy((const UA_ExpandedNodeId *) &targetNodeId, &ref->targetNodeId);
+    retval |= UA_NodeId_copy((const UA_NodeId *) &referenceTypeId, &ref->referenceTypeId);
+    
+    if (isforward == UA_TRUE)
+        ref->isForward = UA_TRUE;
+    
+    const UA_Node *target = UA_NodeStore_get(server->nodestore, (const UA_NodeId*) &ref->targetNodeId);
+    if(target == UA_NULL)
+        retval |= UA_STATUSCODE_BADNODEIDINVALID;
+    else {
+        ref->targetNodeClass = target->nodeClass;
+    }
+    if (!retval) {
+        retval |= addOneWayReferenceWithSession(server, (UA_Session *) UA_NULL, ref);
+    }
+    
+    
+    UA_AddReferencesItem_deleteMembers(ref);
+    return retval;
+}
+    
+
 /* Adds a one-way reference to the local nodestore */
 UA_StatusCode
 addOneWayReferenceWithSession(UA_Server *server, UA_Session *session, const UA_AddReferencesItem *item) {