diff --git a/examples/server_example_setting_groups/server_example_sg.c b/examples/server_example_setting_groups/server_example_sg.c index eb588f87..6e16cd43 100644 --- a/examples/server_example_setting_groups/server_example_sg.c +++ b/examples/server_example_setting_groups/server_example_sg.c @@ -95,6 +95,15 @@ editSgConfirmedHandler(void* parameter, SettingGroupControlBlock* sgcb, } } +static MmsDataAccessError +readAccessHandler(LogicalDevice* ld, LogicalNode* ln, DataObject* dataObject, FunctionalConstraint fc, ClientConnection connection, void* parameter) +{ + void* securityToken = ClientConnection_getSecurityToken(connection); + + printf("Read access to %s/%s.%s\n", ld->name, ln->name, dataObject->name); + + return DATA_ACCESS_ERROR_SUCCESS; +} int main(int argc, char** argv) @@ -111,6 +120,8 @@ main(int argc, char** argv) IedServer_setEditSettingGroupChangedHandler(iedServer, sgcb, editSgChangedHandler, NULL); IedServer_setEditSettingGroupConfirmationHandler(iedServer, sgcb, editSgConfirmedHandler, NULL); + IedServer_setReadAccessHandler(iedServer, readAccessHandler, NULL); + /* MMS server will be instructed to start listening to client connections. */ IedServer_start(iedServer, 102); diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 49f31d4a..5f0957c6 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -2509,6 +2509,11 @@ mmsReadAccessHandler (void* parameter, MmsDomain* domain, char* variableId, MmsS StringUtils_createStringFromBufferInBuffer(str, (uint8_t*) (doStart + 1), doEnd - doStart); } + if (fc == IEC61850_FC_SP) { + if (!strcmp(str, "SGCB")) + return DATA_ACCESS_ERROR_SUCCESS; + } + ModelNode* dobj = ModelNode_getChild((ModelNode*) ln, str); if (dobj != NULL) {