diff --git a/src/goose/goose_publisher.c b/src/goose/goose_publisher.c index 51e455a0..97b536fa 100644 --- a/src/goose/goose_publisher.c +++ b/src/goose/goose_publisher.c @@ -318,7 +318,14 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe while (element != NULL) { MmsValue* dataSetEntry = (MmsValue*) element->data; - dataSetSize += MmsValue_encodeMmsData(dataSetEntry, NULL, 0, false); + if (dataSetEntry) { + dataSetSize += MmsValue_encodeMmsData(dataSetEntry, NULL, 0, false); + } + else { + /* TODO encode MMS NULL */ + if (DEBUG_GOOSE_PUBLISHER) + printf("GOOSE_PUBLISHER: NULL value in data set!\n"); + } element = LinkedList_getNext(element); } @@ -384,7 +391,12 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe while (element != NULL) { MmsValue* dataSetEntry = (MmsValue*) element->data; - bufPos = MmsValue_encodeMmsData(dataSetEntry, buffer, bufPos, true); + if (dataSetEntry) { + bufPos = MmsValue_encodeMmsData(dataSetEntry, buffer, bufPos, true); + } + else { + /* TODO encode MMS NULL */ + } element = LinkedList_getNext(element); } diff --git a/src/iec61850/server/mms_mapping/control.c b/src/iec61850/server/mms_mapping/control.c index 5bed8f1e..5f036e66 100644 --- a/src/iec61850/server/mms_mapping/control.c +++ b/src/iec61850/server/mms_mapping/control.c @@ -1828,8 +1828,13 @@ Control_readAccessControlObject(MmsMapping* self, MmsDomain* domain, char* varia ControlObject_getTypeSpec(controlObject), varName); } } - else + else { value = ControlObject_getMmsValue(controlObject); + } + } + else { + if (DEBUG_IED_SERVER) + printf("IED_SERVER: Control object not found %s/%s.%s\n", domain->domainName, lnName, objectName); } return value; diff --git a/src/iec61850/server/mms_mapping/mms_mapping.c b/src/iec61850/server/mms_mapping/mms_mapping.c index 47348dd3..8fa84487 100644 --- a/src/iec61850/server/mms_mapping/mms_mapping.c +++ b/src/iec61850/server/mms_mapping/mms_mapping.c @@ -3684,15 +3684,15 @@ MmsMapping_triggerGooseObservers(MmsMapping* self, MmsValue* value) void MmsMapping_enableGoosePublishing(MmsMapping* self) { + LinkedList element = LinkedList_getNext(self->gseControls); - LinkedList element = self->gseControls; - - while ((element = LinkedList_getNext(element)) != NULL) { - MmsGooseControlBlock gcb = (MmsGooseControlBlock) element->data; + while (element) { + MmsGooseControlBlock gcb = (MmsGooseControlBlock) LinkedList_getData(element); MmsGooseControlBlock_enable(gcb, self); - } + element = LinkedList_getNext(element); + } } void