From d5df360f3abc2085fedf7c75b4cf7fc91c23c226 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Tue, 13 Nov 2018 12:51:09 +0100 Subject: [PATCH] - fixed problem in GOOSE publisher payload length calculation --- src/goose/goose_publisher.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/goose/goose_publisher.c b/src/goose/goose_publisher.c index c9447f2d..4c57701b 100644 --- a/src/goose/goose_publisher.c +++ b/src/goose/goose_publisher.c @@ -246,7 +246,7 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe /* Step 1 - calculate length fields */ uint32_t goosePduLength = 0; - goosePduLength += 1 + BerEncoder_determineEncodedStringSize(self->goCBRef); + goosePduLength += BerEncoder_determineEncodedStringSize(self->goCBRef); uint32_t timeAllowedToLive = self->timeAllowedToLive; @@ -255,9 +255,9 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe goosePduLength += BerEncoder_determineEncodedStringSize(self->dataSetRef); if (self->goID != NULL) - goosePduLength += 1 + BerEncoder_determineEncodedStringSize(self->goID); + goosePduLength += BerEncoder_determineEncodedStringSize(self->goID); else - goosePduLength += 1 + BerEncoder_determineEncodedStringSize(self->goCBRef); + goosePduLength += BerEncoder_determineEncodedStringSize(self->goCBRef); goosePduLength += 2 + 8; /* for T (UTCTIME) */ @@ -289,7 +289,9 @@ createGoosePayload(GoosePublisher self, LinkedList dataSetValues, uint8_t* buffe goosePduLength += allDataSize; - if (goosePduLength > maxPayloadSize) + uint32_t payloadSize = 1 + BerEncoder_determineLengthSize(goosePduLength) + goosePduLength; + + if (payloadSize > maxPayloadSize) return -1; /* Step 2 - encode to buffer */