|
@@ -218,17 +218,6 @@ void UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection
|
|
|
UA_StatusCode UA_Server_delayedCallback(UA_Server *server, UA_ServerCallback callback, void *data);
|
|
|
UA_StatusCode UA_Server_delayedFree(UA_Server *server, void *data);
|
|
|
|
|
|
-/* Add an existing node. The node is assumed to be "finished", i.e. no
|
|
|
- * instantiation from inheritance is necessary. Instantiationcallback and
|
|
|
- * addedNodeId may be NULL. */
|
|
|
-UA_StatusCode
|
|
|
-Service_AddNodes_existing(UA_Server *server, UA_Session *session, UA_Node *node,
|
|
|
- const UA_NodeId *parentNodeId,
|
|
|
- const UA_NodeId *referenceTypeId,
|
|
|
- const UA_NodeId *typeDefinition,
|
|
|
- UA_InstantiationCallback *instantiationCallback,
|
|
|
- UA_NodeId *addedNodeId);
|
|
|
-
|
|
|
/*********************/
|
|
|
/* Utility Functions */
|
|
|
/*********************/
|
|
@@ -261,8 +250,10 @@ isNodeInTree(UA_NodeStore *ns, const UA_NodeId *leafNode,
|
|
|
const UA_NodeId *nodeToFind, const UA_NodeId *referenceTypeIds,
|
|
|
size_t referenceTypeIdsSize);
|
|
|
|
|
|
-const UA_Node *
|
|
|
-getNodeType(UA_Server *server, const UA_Node *node);
|
|
|
+
|
|
|
+/* Returns the nodeid of the node type, if none defined for the node or the node
|
|
|
+ * class, typeId is set to UA_NODEID_NULL. */
|
|
|
+void getNodeType(UA_Server *server, const UA_Node *node, UA_NodeId *typeId);
|
|
|
|
|
|
/***************************************/
|
|
|
/* Check Information Model Consistency */
|
|
@@ -277,10 +268,6 @@ typeCheckValue(UA_Server *server, const UA_NodeId *targetDataTypeId,
|
|
|
const UA_UInt32 *targetArrayDimensions, const UA_Variant *value,
|
|
|
const UA_NumericRange *range, UA_Variant *editableValue);
|
|
|
|
|
|
-UA_StatusCode
|
|
|
-writeDataTypeAttribute(UA_Server *server, UA_VariableNode *node,
|
|
|
- const UA_NodeId *dataType, const UA_NodeId *constraintDataType);
|
|
|
-
|
|
|
UA_StatusCode
|
|
|
compatibleArrayDimensions(size_t constraintArrayDimensionsSize,
|
|
|
const UA_UInt32 *constraintArrayDimensions,
|
|
@@ -293,13 +280,19 @@ compatibleDataType(UA_Server *server, const UA_NodeId *dataType,
|
|
|
UA_StatusCode
|
|
|
compatibleValueRankArrayDimensions(UA_Int32 valueRank, size_t arrayDimensionsSize);
|
|
|
|
|
|
+UA_Boolean
|
|
|
+compatibleDataType(UA_Server *server, const UA_NodeId *dataType,
|
|
|
+ const UA_NodeId *constraintDataType);
|
|
|
+
|
|
|
UA_StatusCode
|
|
|
-writeValueRankAttribute(UA_Server *server, UA_VariableNode *node, UA_Int32 valueRank,
|
|
|
- UA_Int32 constraintValueRank);
|
|
|
+compatibleValueRankArrayDimensions(UA_Int32 valueRank, size_t arrayDimensionsSize);
|
|
|
|
|
|
UA_StatusCode
|
|
|
-writeValueAttribute(UA_Server *server, UA_VariableNode *node,
|
|
|
- const UA_DataValue *value, const UA_String *indexRange);
|
|
|
+writeValueRankAttribute(UA_Server *server, UA_VariableNode *node,
|
|
|
+ UA_Int32 valueRank, UA_Int32 constraintValueRank);
|
|
|
+
|
|
|
+UA_StatusCode
|
|
|
+compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank);
|
|
|
|
|
|
UA_StatusCode
|
|
|
compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank);
|
|
@@ -309,7 +302,7 @@ compatibleValueRanks(UA_Int32 valueRank, UA_Int32 constraintValueRank);
|
|
|
/*******************/
|
|
|
|
|
|
/* Some services take an array of "independent" requests. The single-services
|
|
|
- are stored here to keep ua_services.h clean for documentation purposes. */
|
|
|
+ * are stored here to keep ua_services.h clean for documentation purposes. */
|
|
|
|
|
|
UA_StatusCode
|
|
|
Service_AddReferences_single(UA_Server *server, UA_Session *session,
|
|
@@ -371,9 +364,121 @@ UA_StatusCode UA_Discovery_multicastListenStart(UA_Server* server);
|
|
|
UA_StatusCode UA_Discovery_multicastListenStop(UA_Server* server);
|
|
|
# endif
|
|
|
UA_StatusCode UA_Discovery_multicastIterate(UA_Server* server, UA_DateTime *nextRepeat, UA_Boolean processIn);
|
|
|
-
|
|
|
# endif
|
|
|
|
|
|
+/*****************************/
|
|
|
+/* AddNodes Begin and Finish */
|
|
|
+/*****************************/
|
|
|
+
|
|
|
+/* Don't use this function. There are typed versions as inline functions. */
|
|
|
+UA_StatusCode UA_EXPORT
|
|
|
+__UA_Server_addNode_begin(UA_Server *server, const UA_NodeClass nodeClass,
|
|
|
+ const UA_NodeId *requestedNewNodeId,
|
|
|
+ const UA_QualifiedName *browseName,
|
|
|
+ const UA_NodeAttributes *attr,
|
|
|
+ const UA_DataType *attributeType,
|
|
|
+ UA_NodeId *outNewNodeId);
|
|
|
+
|
|
|
+/* The inline function UA_Server_addNode_finish might be more convenient to
|
|
|
+ * pass NodeIds in-situ (e.g. UA_NODEID_NUMERIC(0, 5)) */
|
|
|
+UA_StatusCode UA_EXPORT
|
|
|
+UA_Server_addNode_finish(UA_Server *server, const UA_NodeId nodeId,
|
|
|
+ const UA_NodeId parentNodeId,
|
|
|
+ const UA_NodeId referenceTypeId,
|
|
|
+ const UA_NodeId typeDefinition,
|
|
|
+ UA_InstantiationCallback *instantiationCallback);
|
|
|
+
|
|
|
+static UA_INLINE UA_StatusCode
|
|
|
+UA_Server_addReferenceTypeNode_begin(UA_Server *server, const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_ReferenceTypeAttributes attr,
|
|
|
+ UA_NodeId *outNewNodeId) {
|
|
|
+ return __UA_Server_addNode_begin(server, UA_NODECLASS_REFERENCETYPE,
|
|
|
+ &requestedNewNodeId,
|
|
|
+ &browseName, (const UA_NodeAttributes*)&attr,
|
|
|
+ &UA_TYPES[UA_TYPES_REFERENCETYPEATTRIBUTES],
|
|
|
+ outNewNodeId);
|
|
|
+}
|
|
|
+
|
|
|
+static UA_INLINE UA_StatusCode
|
|
|
+UA_Server_addDataTypeNode_begin(UA_Server *server,
|
|
|
+ const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_DataTypeAttributes attr,
|
|
|
+ UA_NodeId *outNewNodeId) {
|
|
|
+ return __UA_Server_addNode_begin(server, UA_NODECLASS_DATATYPE,
|
|
|
+ &requestedNewNodeId,
|
|
|
+ &browseName, (const UA_NodeAttributes*)&attr,
|
|
|
+ &UA_TYPES[UA_TYPES_DATATYPEATTRIBUTES],
|
|
|
+ outNewNodeId);
|
|
|
+}
|
|
|
+
|
|
|
+static UA_INLINE UA_StatusCode
|
|
|
+UA_Server_addVariableNode_begin(UA_Server *server, const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_VariableAttributes attr,
|
|
|
+ UA_NodeId *outNewNodeId) {
|
|
|
+ return __UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLE,
|
|
|
+ &requestedNewNodeId, &browseName,
|
|
|
+ (const UA_NodeAttributes*)&attr,
|
|
|
+ &UA_TYPES[UA_TYPES_VARIABLEATTRIBUTES],
|
|
|
+ outNewNodeId);
|
|
|
+}
|
|
|
+
|
|
|
+static UA_INLINE UA_StatusCode
|
|
|
+UA_Server_addVariableTypeNode_begin(UA_Server *server, const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_VariableTypeAttributes attr,
|
|
|
+ UA_NodeId *outNewNodeId) {
|
|
|
+ return __UA_Server_addNode_begin(server, UA_NODECLASS_VARIABLETYPE,
|
|
|
+ &requestedNewNodeId, &browseName,
|
|
|
+ (const UA_NodeAttributes*)&attr,
|
|
|
+ &UA_TYPES[UA_TYPES_VARIABLETYPEATTRIBUTES],
|
|
|
+ outNewNodeId);
|
|
|
+}
|
|
|
+
|
|
|
+static UA_INLINE UA_StatusCode
|
|
|
+UA_Server_addObjectNode_begin(UA_Server *server, const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_ObjectAttributes attr,
|
|
|
+ UA_NodeId *outNewNodeId) {
|
|
|
+ return __UA_Server_addNode_begin(server, UA_NODECLASS_OBJECT,
|
|
|
+ &requestedNewNodeId,
|
|
|
+ &browseName, (const UA_NodeAttributes*)&attr,
|
|
|
+ &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
|
|
|
+ outNewNodeId);
|
|
|
+}
|
|
|
+
|
|
|
+static UA_INLINE UA_StatusCode
|
|
|
+UA_Server_addObjectTypeNode_begin(UA_Server *server,
|
|
|
+ const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_ObjectTypeAttributes attr,
|
|
|
+ UA_NodeId *outNewNodeId) {
|
|
|
+ return __UA_Server_addNode_begin(server, UA_NODECLASS_OBJECTTYPE,
|
|
|
+ &requestedNewNodeId,
|
|
|
+ &browseName, (const UA_NodeAttributes*)&attr,
|
|
|
+ &UA_TYPES[UA_TYPES_OBJECTTYPEATTRIBUTES],
|
|
|
+ outNewNodeId);
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef UA_ENABLE_METHODCALLS
|
|
|
+UA_StatusCode
|
|
|
+UA_Server_addMethodNode_begin(UA_Server *server, const UA_NodeId requestedNewNodeId,
|
|
|
+ const UA_QualifiedName browseName,
|
|
|
+ const UA_MethodAttributes attr, UA_MethodCallback method,
|
|
|
+ void *handle, UA_NodeId *outNewNodeId);
|
|
|
+
|
|
|
+UA_StatusCode
|
|
|
+UA_Server_addMethodNode_finish(UA_Server *server, const UA_NodeId nodeId,
|
|
|
+ const UA_NodeId parentNodeId,
|
|
|
+ const UA_NodeId referenceTypeId,
|
|
|
+ size_t inputArgumentsSize,
|
|
|
+ const UA_Argument* inputArguments,
|
|
|
+ size_t outputArgumentsSize,
|
|
|
+ const UA_Argument* outputArguments);
|
|
|
+#endif
|
|
|
+
|
|
|
#ifdef __cplusplus
|
|
|
} // extern "C"
|
|
|
#endif
|