|
@@ -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;
|
|
|
+}
|
|
|
+
|
|
|
+
|