- IED SERVER: fixed bug when calling write access handler (wrong pointer for ClientConnection object)

pull/71/head
Michael Zillgith 7 years ago
parent 47d34702b1
commit eacdfa953d

@ -270,7 +270,7 @@
</DOType>
<DOType cdc="SPG" id="SPG_0">
<DA name="setVal" bType="BOOLEAN" fc="SG" dchg="true" />
<DA name="setVal" bType="BOOLEAN" fc="SP" dchg="true" />
</DOType>
<DOType cdc="TSG" id="TSG_0">

@ -126,6 +126,20 @@ controlHandlerForBinaryOutput(void* parameter, MmsValue* value, bool test)
MmsValue_delete(timeStamp);
}
static MmsDataAccessError
writeAccessHandler (DataAttribute* dataAttribute, MmsValue* value, ClientConnection connection, void* parameter)
{
void* securityToken = ClientConnection_getSecurityToken(connection);
if (securityToken != password2)
return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
return DATA_ACCESS_ERROR_SUCCESS;
}
int main(int argc, char** argv) {
iedServer = IedServer_create(&iedModel);
@ -153,6 +167,9 @@ int main(int argc, char** argv) {
IedServer_setControlHandler(iedServer, IEDMODEL_GenericIO_GGIO1_SPCSO4,
(ControlHandler) controlHandlerForBinaryOutput, IEDMODEL_GenericIO_GGIO1_SPCSO4);
/* Set write access handler */
IedServer_handleWriteAccess(iedServer, IEDMODEL_GenericIO_LLN0_ModAuto_setVal, writeAccessHandler, NULL);
/* MMS server will be instructed to start listening to client connections. */
IedServer_start(iedServer, 102);

@ -94,6 +94,7 @@
<DO name="Beh" type="INS_1_Beh" />
<DO name="Health" type="INS_1_Beh" />
<DO name="NamPlt" type="LPL_1_NamPlt" />
<DO name="ModAuto" type="SPG_0" />
</LNodeType>
<LNodeType id="LPHD1" lnClass="LPHD">
<DO name="PhyNam" type="DPL_1_PhyNam" />
@ -186,6 +187,9 @@
<DA name="ctlModel" type="CtlModels" bType="Enum" fc="CF" />
<DA name="t" bType="Timestamp" fc="ST" />
</DOType>
<DOType cdc="SPG" id="SPG_0">
<DA name="setVal" bType="BOOLEAN" fc="SP" dchg="true" />
</DOType>
<DAType id="AnalogueValue_1">
<BDA name="f" bType="FLOAT32" />
</DAType>

@ -3,7 +3,7 @@
*
* automatically generated from simpleIO_direct_control.icd
*/
#include "../server_example_password_auth/static_model.h"
#include "static_model.h"
static void initializeValues();
@ -227,7 +227,7 @@ DataObject iedModel_GenericIO_LLN0_NamPlt = {
DataObjectModelType,
"NamPlt",
(ModelNode*) &iedModel_GenericIO_LLN0,
NULL,
(ModelNode*) &iedModel_GenericIO_LLN0_ModAuto,
(ModelNode*) &iedModel_GenericIO_LLN0_NamPlt_vendor,
0
};
@ -297,6 +297,28 @@ DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs = {
NULL,
0};
DataObject iedModel_GenericIO_LLN0_ModAuto = {
DataObjectModelType,
"ModAuto",
(ModelNode*) &iedModel_GenericIO_LLN0,
NULL,
(ModelNode*) &iedModel_GenericIO_LLN0_ModAuto_setVal,
0
};
DataAttribute iedModel_GenericIO_LLN0_ModAuto_setVal = {
DataAttributeModelType,
"setVal",
(ModelNode*) &iedModel_GenericIO_LLN0_ModAuto,
NULL,
NULL,
0,
IEC61850_FC_SP,
IEC61850_BOOLEAN,
0 + TRG_OPT_DATA_CHANGED,
NULL,
0};
LogicalNode iedModel_GenericIO_LPHD1 = {
LogicalNodeModelType,
"LPHD1",
@ -1773,7 +1795,7 @@ DataAttribute iedModel_GenericIO_GGIO1_Ind4_t = {
extern ReportControlBlock iedModel_GenericIO_LLN0_report0;
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 24, 111, 50, 1000, NULL};
ReportControlBlock iedModel_GenericIO_LLN0_report0 = {&iedModel_GenericIO_LLN0, "EventsRCB01", "Events", false, "Events", 1, 24, 239, 50, 1000, NULL};

@ -31,6 +31,8 @@ extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_swRev;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_d;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_configRev;
extern DataAttribute iedModel_GenericIO_LLN0_NamPlt_ldNs;
extern DataObject iedModel_GenericIO_LLN0_ModAuto;
extern DataAttribute iedModel_GenericIO_LLN0_ModAuto_setVal;
extern LogicalNode iedModel_GenericIO_LPHD1;
extern DataObject iedModel_GenericIO_LPHD1_PhyNam;
extern DataAttribute iedModel_GenericIO_LPHD1_PhyNam_vendor;
@ -174,6 +176,8 @@ extern DataAttribute iedModel_GenericIO_GGIO1_Ind4_t;
#define IEDMODEL_GenericIO_LLN0_NamPlt_d (&iedModel_GenericIO_LLN0_NamPlt_d)
#define IEDMODEL_GenericIO_LLN0_NamPlt_configRev (&iedModel_GenericIO_LLN0_NamPlt_configRev)
#define IEDMODEL_GenericIO_LLN0_NamPlt_ldNs (&iedModel_GenericIO_LLN0_NamPlt_ldNs)
#define IEDMODEL_GenericIO_LLN0_ModAuto (&iedModel_GenericIO_LLN0_ModAuto)
#define IEDMODEL_GenericIO_LLN0_ModAuto_setVal (&iedModel_GenericIO_LLN0_ModAuto_setVal)
#define IEDMODEL_GenericIO_LPHD1 (&iedModel_GenericIO_LPHD1)
#define IEDMODEL_GenericIO_LPHD1_PhyNam (&iedModel_GenericIO_LPHD1_PhyNam)
#define IEDMODEL_GenericIO_LPHD1_PhyNam_vendor (&iedModel_GenericIO_LPHD1_PhyNam_vendor)

@ -2062,8 +2062,12 @@ mmsWriteHandler(void* parameter, MmsDomain* domain,
MmsValue* matchingValue = checkIfValueBelongsToModelNode(dataAttribute, cachedValue, value);
if (matchingValue != NULL) {
ClientConnection clientConnection = private_IedServer_getClientConnectionByHandle(self->iedServer,
connection);
MmsDataAccessError handlerResult =
accessHandler->handler(dataAttribute, matchingValue, (ClientConnection) connection,
accessHandler->handler(dataAttribute, matchingValue, clientConnection,
accessHandler->parameter);
if (handlerResult == DATA_ACCESS_ERROR_SUCCESS)

Loading…
Cancel
Save