@ -1,7 +1,7 @@
/*
* mms_mapping . c
*
* Copyright 2013 - 201 6 Michael Zillgith
* Copyright 2013 - 201 7 Michael Zillgith
*
* This file is part of libIEC61850 .
*
@ -42,12 +42,6 @@
# define DEBUG_IED_SERVER 0
# endif
typedef struct
{
DataAttribute * attribute ;
AttributeChangedHandler handler ;
} AttributeObserver ;
typedef struct
{
DataAttribute * attribute ;
@ -55,7 +49,6 @@ typedef struct
void * parameter ;
} AttributeAccessHandler ;
typedef struct
{
SettingGroupControlBlock * sgcb ;
@ -1190,8 +1183,13 @@ createDataSets(MmsDevice* mmsDevice, IedModel* iedModel)
int iedModelNameLength = strlen ( iedModel - > name ) ;
if ( iedModelNameLength > 64 )
goto exit_function ; //TODO call exception handler!
if ( iedModelNameLength > 64 ) {
if ( DEBUG_IED_SERVER )
printf ( " IED_SERVER: IED model name too long! \n " ) ;
goto exit_function ;
}
while ( dataset ! = NULL ) {
strncpy ( domainName , iedModel - > name , 64 ) ;
@ -1199,8 +1197,13 @@ createDataSets(MmsDevice* mmsDevice, IedModel* iedModel)
MmsDomain * dataSetDomain = MmsDevice_getDomain ( mmsDevice , domainName ) ;
if ( dataSetDomain = = NULL )
goto exit_function ; //TODO call exception handler!
if ( dataSetDomain = = NULL ) {
if ( DEBUG_IED_SERVER )
printf ( " IED_SERVER: LD for dataset does not exist! \n " ) ;
goto exit_function ;
}
MmsNamedVariableList varList = MmsNamedVariableList_create ( dataSetDomain , dataset - > name , false ) ;
@ -1289,8 +1292,6 @@ MmsMapping_create(IedModel* model)
self - > settingGroups = LinkedList_create ( ) ;
# endif
self - > observedObjects = LinkedList_create ( ) ;
self - > attributeAccessHandlers = LinkedList_create ( ) ;
self - > mmsDevice = createMmsModelFromIedModel ( self , model ) ;
@ -1337,8 +1338,6 @@ MmsMapping_destroy(MmsMapping* self)
LinkedList_destroyDeep ( self - > logInstances , ( LinkedListValueDeleteFunction ) LogInstance_destroy ) ;
# endif
LinkedList_destroy ( self - > observedObjects ) ;
LinkedList_destroy ( self - > attributeAccessHandlers ) ;
IedModel_setAttributeValuesToNull ( self - > model ) ;
@ -2093,21 +2092,6 @@ mmsWriteHandler(void* parameter, MmsDomain* domain,
else
return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED ;
/* Call observer callback */
LinkedList observerListElement = LinkedList_getNext ( self - > observedObjects ) ;
while ( observerListElement ! = NULL ) {
AttributeObserver * observer = ( AttributeObserver * ) observerListElement - > data ;
DataAttribute * dataAttribute = observer - > attribute ;
if ( checkIfValueBelongsToModelNode ( dataAttribute , cachedValue , value ) ! = NULL ) {
observer - > handler ( dataAttribute , ( ClientConnection ) connection ) ;
break ; /* only all one handler per data attribute */
}
observerListElement = LinkedList_getNext ( observerListElement ) ;
}
return DATA_ACCESS_ERROR_SUCCESS ;
}
else
@ -2117,18 +2101,6 @@ mmsWriteHandler(void* parameter, MmsDomain* domain,
return DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED ;
}
void
MmsMapping_addObservedAttribute ( MmsMapping * self , DataAttribute * dataAttribute ,
AttributeChangedHandler handler )
{
AttributeObserver * observer = ( AttributeObserver * ) GLOBAL_MALLOC ( sizeof ( AttributeObserver ) ) ;
observer - > attribute = dataAttribute ;
observer - > handler = handler ;
LinkedList_add ( self - > observedObjects , observer ) ;
}
static AttributeAccessHandler *
getAccessHandlerForAttribute ( MmsMapping * self , DataAttribute * dataAttribute )
{