Browse Source

Added UA_AddNodesResponse *UA_Client_createObjectNode proxy function to create ObjectNodes. Currently requires manual enabling of ADDNODES Service in ua_server_binary.

ichrispa 9 years ago
parent
commit
7743f22d4a
1 changed files with 55 additions and 0 deletions
  1. 55 0
      src/client/ua_client.c

+ 55 - 0
src/client/ua_client.c

@@ -600,3 +600,58 @@ UA_DeleteReferencesResponse UA_Client_deleteReferences(UA_Client *client, UA_Del
                        &UA_TYPES[UA_TYPES_DELETEREFERENCESRESPONSE], client);
     return response;;
 }
+
+/**********************************/
+/* User-Facing Macros-Function    */
+/**********************************/
+
+/* NodeManagement */
+UA_AddNodesResponse *UA_Client_createObjectNode(UA_Client *client, UA_QualifiedName browseName, UA_LocalizedText displayName, 
+                                                UA_LocalizedText description, UA_ExpandedNodeId parentNodeId, UA_NodeId referenceTypeId,
+                                                UA_UInt32 userWriteMask, UA_UInt32 writeMask, UA_ExpandedNodeId typeDefinition ) {
+    UA_AddNodesRequest adReq;
+    UA_AddNodesRequest_init(&adReq);
+    
+    UA_AddNodesResponse *adRes;
+    adRes = UA_AddNodesResponse_new();
+    UA_AddNodesResponse_init(adRes);
+    
+    UA_ObjectAttributes vAtt;
+    UA_ObjectAttributes_init(&vAtt);
+    adReq.nodesToAdd = (UA_AddNodesItem *) UA_AddNodesItem_new();
+    UA_AddNodesItem_init(adReq.nodesToAdd);
+    
+    vAtt.specifiedAttributes = 0; //  | UA_NODEATTRIBUTESMASK_EVENTNOTIFIER | UA_NODEATTRIBUTESMASK_USERWRITEMASK | UA_NODEATTRIBUTESMASK_WRITEMASK;
+    if(! UA_LocalizedText_copy(&description, &(vAtt.description)))
+        vAtt.specifiedAttributes |=  UA_NODEATTRIBUTESMASK_DESCRIPTION;
+    if(! UA_LocalizedText_copy(&displayName, &(vAtt.displayName)))
+        vAtt.specifiedAttributes |= UA_NODEATTRIBUTESMASK_DISPLAYNAME;
+    
+    vAtt.eventNotifier       = 0;
+    vAtt.userWriteMask       = userWriteMask;
+    vAtt.writeMask           = writeMask;
+
+    adReq.nodesToAddSize = 1;
+    adReq.nodesToAdd[0].nodeClass = UA_NODECLASS_OBJECT;
+    adReq.nodesToAdd[0].requestedNewNodeId = UA_EXPANDEDNODEID_NUMERIC(1, 0);
+    
+    
+    UA_QualifiedName_copy(&browseName, &(adReq.nodesToAdd[0].browseName));
+    UA_ExpandedNodeId_copy(&parentNodeId, &(adReq.nodesToAdd[0].parentNodeId));
+    UA_NodeId_copy(&referenceTypeId, &(adReq.nodesToAdd[0].referenceTypeId));
+    UA_ExpandedNodeId_copy(&typeDefinition, &(adReq.nodesToAdd[0].typeDefinition));
+    
+    adReq.nodesToAdd[0].nodeAttributes.encoding = UA_EXTENSIONOBJECT_ENCODINGMASK_BODYISBYTESTRING;
+    adReq.nodesToAdd[0].nodeAttributes.typeId   = UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTATTRIBUTES + UA_ENCODINGOFFSET_BINARY);
+    adReq.nodesToAdd[0].nodeAttributes.body.length = UA_calcSizeBinary(&vAtt, &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES]);
+    adReq.nodesToAdd[0].nodeAttributes.body.data = (void *) malloc(adReq.nodesToAdd[0].nodeAttributes.body.length);
+    size_t encOffset = 0;
+    UA_encodeBinary(&vAtt, &UA_TYPES[UA_TYPES_NODEATTRIBUTES], &(adReq.nodesToAdd[0].nodeAttributes.body), &encOffset);
+
+    *(adRes) = UA_Client_addNodes(client, &adReq);
+    UA_AddNodesRequest_deleteMembers(&adReq);
+    
+    return adRes;
+}
+
+