- 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,8 +83,13 @@ rcbAccessHandler(void* parameter, ReportControlBlock* rcb, ClientConnection conn
{ {
printf("RCB: %s access: %s\n", ReportControlBlock_getName(rcb), operation == RCB_EVENT_GET_PARAMETER ? "READ" : "WRITE"); printf("RCB: %s access: %s\n", ReportControlBlock_getName(rcb), operation == RCB_EVENT_GET_PARAMETER ? "READ" : "WRITE");
if (operation == RCB_EVENT_GET_PARAMETER) {
return true;
}
else {
return false; return false;
} }
}
static void static void
rcbEventHandler(void* parameter, ReportControlBlock* rcb, ClientConnection connection, IedServer_RCBEventType event, const char* parameterName, MmsDataAccessError serviceError) rcbEventHandler(void* parameter, ReportControlBlock* rcb, ClientConnection connection, IedServer_RCBEventType event, const char* parameterName, MmsDataAccessError serviceError)

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

Loading…
Cancel
Save