|
@@ -268,24 +268,79 @@ readStatus(UA_Server *server, const UA_NodeId *sessionId, void *sessionContext,
|
|
|
return UA_STATUSCODE_GOOD;
|
|
|
}
|
|
|
|
|
|
- UA_ServerStatusDataType *statustype = UA_ServerStatusDataType_new();
|
|
|
- statustype->startTime = server->startTime;
|
|
|
- statustype->currentTime = UA_DateTime_now();
|
|
|
- statustype->state = UA_SERVERSTATE_RUNNING;
|
|
|
- statustype->secondsTillShutdown = 0;
|
|
|
- UA_BuildInfo_copy(&server->config.buildInfo, &statustype->buildInfo);
|
|
|
-
|
|
|
- value->value.type = &UA_TYPES[UA_TYPES_SERVERSTATUSDATATYPE];
|
|
|
- value->value.arrayLength = 0;
|
|
|
- value->value.data = statustype;
|
|
|
- value->value.arrayDimensionsSize = 0;
|
|
|
- value->value.arrayDimensions = NULL;
|
|
|
- value->hasValue = true;
|
|
|
if(sourceTimestamp) {
|
|
|
value->hasSourceTimestamp = true;
|
|
|
value->sourceTimestamp = UA_DateTime_now();
|
|
|
}
|
|
|
- return UA_STATUSCODE_GOOD;
|
|
|
+
|
|
|
+ void *data = NULL;
|
|
|
+
|
|
|
+ UA_assert(nodeId->identifierType == UA_NODEIDTYPE_NUMERIC);
|
|
|
+
|
|
|
+ switch(nodeId->identifier.numeric) {
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS: {
|
|
|
+ UA_ServerStatusDataType *statustype = UA_ServerStatusDataType_new();
|
|
|
+ if(!statustype)
|
|
|
+ return UA_STATUSCODE_BADOUTOFMEMORY;
|
|
|
+ statustype->startTime = server->startTime;
|
|
|
+ statustype->currentTime = UA_DateTime_now();
|
|
|
+ statustype->state = UA_SERVERSTATE_RUNNING;
|
|
|
+ statustype->secondsTillShutdown = 0;
|
|
|
+ value->value.data = statustype;
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_SERVERSTATUSDATATYPE];
|
|
|
+ value->hasValue = true;
|
|
|
+ return UA_BuildInfo_copy(&server->config.buildInfo, &statustype->buildInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_BUILDINFO];
|
|
|
+ data = &server->config.buildInfo;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_STRING];
|
|
|
+ data = &server->config.buildInfo.productUri;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_STRING];
|
|
|
+ data = &server->config.buildInfo.manufacturerName;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_STRING];
|
|
|
+ data = &server->config.buildInfo.productName;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_STRING];
|
|
|
+ data = &server->config.buildInfo.softwareVersion;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_STRING];
|
|
|
+ data = &server->config.buildInfo.buildNumber;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE:
|
|
|
+ value->value.type = &UA_TYPES[UA_TYPES_DATETIME];
|
|
|
+ data = &server->config.buildInfo.buildDate;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ value->hasStatus = true;
|
|
|
+ value->status = UA_STATUSCODE_BADINTERNALERROR;
|
|
|
+ return UA_STATUSCODE_GOOD;
|
|
|
+ }
|
|
|
+
|
|
|
+ value->value.data = UA_new(value->value.type);
|
|
|
+ if(!value->value.data) {
|
|
|
+ value->value.type = NULL;
|
|
|
+ return UA_STATUSCODE_BADOUTOFMEMORY;
|
|
|
+ }
|
|
|
+
|
|
|
+ value->hasValue = true;
|
|
|
+ return UA_copy(data, value->value.data, value->value.type);
|
|
|
}
|
|
|
|
|
|
#ifdef UA_GENERATED_NAMESPACE_ZERO
|
|
@@ -624,7 +679,7 @@ UA_Server_initNS0(UA_Server *server) {
|
|
|
/* CurrentTime */
|
|
|
UA_DataSource currentTime = {readCurrentTime, NULL};
|
|
|
retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
- UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME), currentTime);
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_CURRENTTIME), currentTime);
|
|
|
|
|
|
/* State */
|
|
|
UA_ServerState state = UA_SERVERSTATE_RUNNING;
|
|
@@ -632,32 +687,38 @@ UA_Server_initNS0(UA_Server *server) {
|
|
|
&state, &UA_TYPES[UA_TYPES_SERVERSTATE]);
|
|
|
|
|
|
/* BuildInfo */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO,
|
|
|
- &server->config.buildInfo, &UA_TYPES[UA_TYPES_BUILDINFO]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO), serverStatus);
|
|
|
|
|
|
/* BuildInfo - ProductUri */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI,
|
|
|
- &server->config.buildInfo.productUri, &UA_TYPES[UA_TYPES_STRING]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTURI),
|
|
|
+ serverStatus);
|
|
|
|
|
|
/* BuildInfo - ManufacturerName */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME,
|
|
|
- &server->config.buildInfo.manufacturerName, &UA_TYPES[UA_TYPES_STRING]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_MANUFACTURERNAME),
|
|
|
+ serverStatus);
|
|
|
|
|
|
/* BuildInfo - ProductName */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME,
|
|
|
- &server->config.buildInfo.productName, &UA_TYPES[UA_TYPES_STRING]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_PRODUCTNAME),
|
|
|
+ serverStatus);
|
|
|
|
|
|
/* BuildInfo - SoftwareVersion */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION,
|
|
|
- &server->config.buildInfo.softwareVersion, &UA_TYPES[UA_TYPES_STRING]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_SOFTWAREVERSION),
|
|
|
+ serverStatus);
|
|
|
|
|
|
/* BuildInfo - BuildNumber */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER,
|
|
|
- &server->config.buildInfo.buildNumber, &UA_TYPES[UA_TYPES_STRING]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDNUMBER),
|
|
|
+ serverStatus);
|
|
|
|
|
|
/* BuildInfo - BuildDate */
|
|
|
- retVal |= writeNs0Variable(server, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE,
|
|
|
- &server->config.buildInfo.buildDate, &UA_TYPES[UA_TYPES_DATETIME]);
|
|
|
+ retVal |= UA_Server_setVariableNode_dataSource(server,
|
|
|
+ UA_NODEID_NUMERIC(0, UA_NS0ID_SERVER_SERVERSTATUS_BUILDINFO_BUILDDATE),
|
|
|
+ serverStatus);
|
|
|
|
|
|
#ifdef UA_GENERATED_NAMESPACE_ZERO
|
|
|
|