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

CTT expect non empty OutputArguments (#1908)

CTT Method Call script 004 throws error for GetMonitoredItem method:
-
 Call.Response.Results[0].OutputArguments[0] is empty.
- Call.Response.Results[0].OutputArguments[1] is empty.
Martin Lang 6 роки тому
батько
коміт
f16aa923d0
1 змінених файлів з 13 додано та 1 видалено
  1. 13 1
      src/server/ua_server_ns0.c

+ 13 - 1
src/server/ua_server_ns0.c

@@ -418,7 +418,19 @@ readMonitoredItems(UA_Server *server, const UA_NodeId *sessionId, void *sessionC
     UA_UInt32 subscriptionId = *((UA_UInt32*)(input[0].data));
     UA_Subscription* subscription = UA_Session_getSubscriptionById(session, subscriptionId);
     if(!subscription)
-        return UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
+    {
+        if(LIST_EMPTY(&session->serverSubscriptions))
+        {
+          UA_Variant_setArray(&output[0], UA_Array_new(0, &UA_TYPES[UA_TYPES_UINT32]), 
+		                      0, &UA_TYPES[UA_TYPES_UINT32]);
+          UA_Variant_setArray(&output[1], UA_Array_new(0, &UA_TYPES[UA_TYPES_UINT32]), 
+		                      0, &UA_TYPES[UA_TYPES_UINT32]);
+
+          return UA_STATUSCODE_BADNOMATCH;
+        }
+        else
+          return UA_STATUSCODE_BADSUBSCRIPTIONIDINVALID;
+    }
 
     UA_UInt32 sizeOfOutput = 0;
     UA_MonitoredItem* monitoredItem;