Просмотр исходного кода

Server: Add ModellingRules to the server capabilities object

Julius Pfrommer лет назад: 5
Родитель
Сommit
2766f9a149
1 измененных файлов с 54 добавлено и 0 удалено
  1. 54 0
      src/server/ua_server_ns0.c

+ 54 - 0
src/server/ua_server_ns0.c

@@ -658,6 +658,56 @@ UA_Server_minimalServerObject(UA_Server *server) {
 
     return retval;
 }
+
+#else
+
+static void
+addModellingRules(UA_Server *server) {
+    /* Test if the ModellingRules folder was added. (Only for the full ns0.) */
+    UA_NodeClass mrnc = UA_NODECLASS_UNSPECIFIED;
+    UA_StatusCode retval = UA_Server_readNodeClass(server,
+                                                   UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
+                                                   &mrnc);
+    if(retval != UA_STATUSCODE_GOOD)
+        return;
+
+    /* Add ExposesItsArray */
+    UA_Server_addReference(server,
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_EXPOSESITSARRAY),
+                           true);
+
+    /* Add Mandatory */
+    UA_Server_addReference(server,
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY),
+                           true);
+
+
+    /* Add MandatoryPlaceholder */
+    UA_Server_addReference(server,
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORYPLACEHOLDER),
+                           true);
+
+    /* Add Optional */
+    UA_Server_addReference(server,
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_OPTIONAL),
+                           true);
+
+    /* Add OptionalPlaceholder */
+    UA_Server_addReference(server,
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERCAPABILITIES_MODELLINGRULES),
+                           UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
+                           UA_EXPANDEDNODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_OPTIONALPLACEHOLDER),
+                           true);
+}
+
 #endif
 
 /* Initialize the nodeset 0 by using the generated code of the nodeset compiler.
@@ -943,6 +993,10 @@ UA_Server_initNS0(UA_Server *server) {
                         UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_GETMONITOREDITEMS), readMonitoredItems);
 #endif
 
+    /* The HasComponent references to the ModellingRules are not part of the
+     * Nodeset2.xml. So we add the references manually. */
+    addModellingRules(server);
+
 #endif /* UA_GENERATED_NAMESPACE_ZERO */
 
     /* create the OverFlowEventType