Prechádzať zdrojové kódy

making DataSource more robust -> read callback can be NULL

Stasik0 10 rokov pred
rodič
commit
d93b295558

+ 0 - 7
src/server/ua_server.c

@@ -632,13 +632,6 @@ UA_Server * UA_Server_new(void) {
                       &UA_EXPANDEDNODEID_STATIC(0, UA_NS0ID_SERVER),
                       &UA_NODEID_STATIC(0, UA_NS0ID_HASPROPERTY));
 
-    /*UA_Variant *serverstatus = UA_Variant_new();
-    UA_Variant_setValue(serverstatus, status, UA_TYPES_SERVERSTATUSDATATYPE);
-    UA_QualifiedName serverstatusname;
-    UA_QUALIFIEDNAME_ASSIGN(serverstatusname, "ServerStatus");
-    UA_Server_addVariableNode(server, serverstatus, &UA_NODEID_STATIC(0, UA_NS0ID_SERVER_SERVERSTATUS), &serverstatusname,
-                              &UA_NODEID_STATIC(0, UA_NS0ID_SERVER),
-                              &UA_NODEID_STATIC(0, UA_NS0ID_HASCOMPONENT));*/
     UA_Variant *serverstatus = UA_Variant_new();
     serverstatus->storageType = UA_VARIANT_DATASOURCE;
     serverstatus->storage.datasource = (UA_VariantDataSource)

+ 2 - 4
src/server/ua_services_attribute.c

@@ -134,12 +134,10 @@ static void readValue(UA_Server *server, const UA_ReadValueId *id, UA_DataValue
             if(vn->value.storageType == UA_VARIANT_DATA || vn->value.storageType == UA_VARIANT_DATA_NODELETE)
                 data = &vn->value.storage.data;
             else {
-            	if(vn->value.storage.datasource.read != UA_NULL){
-					if((retval = vn->value.storage.datasource.read(vn->value.storage.datasource.handle,
+				if(vn->value.storage.datasource.read == UA_NULL || (retval = vn->value.storage.datasource.read(vn->value.storage.datasource.handle,
 																   &datasourceData)) != UA_STATUSCODE_GOOD)
 						break;
-					data = &datasourceData;
-            	}
+				data = &datasourceData;
             }
             retval = UA_Variant_copySetArray(&v->value, data->arrayDimensions, data->arrayDimensionsSize,
                                              UA_TYPES_INT32);

+ 2 - 2
src/ua_types_encoding_binary.c

@@ -687,7 +687,7 @@ size_t UA_Variant_calcSizeBinary(UA_Variant const *p) {
     if(p->storageType == UA_VARIANT_DATA || p->storageType == UA_VARIANT_DATA_NODELETE)
         data = &p->storage.data;
     else {
-        if(p->storage.datasource.read(p->storage.datasource.handle, &datasourceData) != UA_STATUSCODE_GOOD)
+        if(p->storage.datasource.read == UA_NULL || p->storage.datasource.read(p->storage.datasource.handle, &datasourceData) != UA_STATUSCODE_GOOD)
             return 0;
         data = &datasourceData;
     }
@@ -726,7 +726,7 @@ UA_StatusCode UA_Variant_encodeBinary(UA_Variant const *src, UA_ByteString *dst,
     if(src->storageType == UA_VARIANT_DATA)
         data = &src->storage.data;
     else {
-        if(src->storage.datasource.read(src->storage.datasource.handle, &datasourceData) != UA_STATUSCODE_GOOD)
+        if(src->storage.datasource.read == UA_NULL || src->storage.datasource.read(src->storage.datasource.handle, &datasourceData) != UA_STATUSCODE_GOOD)
             return UA_STATUSCODE_BADENCODINGERROR;
         data = &datasourceData;
     }