- IED server: fixed read handling in RCB access control (LIB61850-391)

v1.6_develop_387
Michael Zillgith 3 years ago
parent 76dbcb4496
commit dc5bd43f0f

@ -83,7 +83,12 @@ rcbAccessHandler(void* parameter, ReportControlBlock* rcb, ClientConnection conn
{
printf("RCB: %s access: %s\n", ReportControlBlock_getName(rcb), operation == RCB_EVENT_GET_PARAMETER ? "READ" : "WRITE");
return false;
if (operation == RCB_EVENT_GET_PARAMETER) {
return true;
}
else {
return false;
}
}
static void

@ -25,6 +25,7 @@
#include "mms_mapping.h"
#include "mms_mapping_internal.h"
#include "mms_server_internal.h"
#include "mms_value_internal.h"
#include "stack_config.h"
#include "mms_goose.h"
@ -68,6 +69,8 @@ typedef struct
uint64_t reservationTimeout;
} SettingGroup;
static MmsValue objectAccessDenied = {MMS_DATA_ACCESS_ERROR, false, {DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED}};
#if (CONFIG_IEC61850_CONTROL_SERVICE == 1)
bool
@ -3155,31 +3158,35 @@ mmsReadHandler(void* parameter, MmsDomain* domain, char* variableId, MmsServerCo
continue;
if (strlen(rc->name) == variableIdLen) {
if (strncmp(variableId, rc->name, variableIdLen) == 0) {
if (strncmp(variableId, rc->name, variableIdLen) == 0)
{
char* elementName = MmsMapping_getNextNameElement(reportName);
ReportControl_readAccess(rc, self, connection, elementName);
MmsValue* value = NULL;
if (ReportControl_readAccess(rc, self, connection, elementName))
{
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_wait(rc->rcbValuesLock);
Semaphore_wait(rc->rcbValuesLock);
#endif
if (elementName != NULL)
value = ReportControl_getRCBValue(rc, elementName);
else
value = rc->rcbValues;
if (elementName != NULL)
value = ReportControl_getRCBValue(rc, elementName);
else
value = rc->rcbValues;
if (value) {
value = MmsValue_clone(value);
MmsValue_setDeletableRecursive(value);
}
if (value) {
value = MmsValue_clone(value);
MmsValue_setDeletableRecursive(value);
}
#if (CONFIG_MMS_THREADLESS_STACK != 1)
Semaphore_post(rc->rcbValuesLock);
Semaphore_post(rc->rcbValuesLock);
#endif
}
else {
value = &objectAccessDenied;
}
retValue = value;

Loading…
Cancel
Save