From 8578344e85d59d0d84a43b7b46df28db80786b48 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Tue, 20 Apr 2021 11:10:34 +0200 Subject: [PATCH] - GOOSE subscriber: restore old behavior when data set array is provided by user --- .../goose_subscriber_example.c | 22 ++++++++++--------- src/goose/goose_receiver.c | 10 +++++---- src/goose/goose_subscriber.c | 4 +++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/examples/goose_subscriber/goose_subscriber_example.c b/examples/goose_subscriber/goose_subscriber_example.c index 0f044dff..bea2280e 100644 --- a/examples/goose_subscriber/goose_subscriber_example.c +++ b/examples/goose_subscriber/goose_subscriber_example.c @@ -9,6 +9,7 @@ #include "goose_receiver.h" #include "goose_subscriber.h" #include "hal_thread.h" +#include "linked_list.h" #include #include @@ -16,12 +17,13 @@ static int running = 1; -void sigint_handler(int signalId) +static void +sigint_handler(int signalId) { running = 0; } -void +static void gooseListener(GooseSubscriber subscriber, void* parameter) { printf("GOOSE event:\n"); @@ -48,14 +50,14 @@ main(int argc, char** argv) { GooseReceiver receiver = GooseReceiver_create(); - if (argc > 1) { - printf("Set interface id: %s\n", argv[1]); - GooseReceiver_setInterfaceId(receiver, argv[1]); - } - else { - printf("Using interface eth0\n"); - GooseReceiver_setInterfaceId(receiver, "eth0"); - } + if (argc > 1) { + printf("Set interface id: %s\n", argv[1]); + GooseReceiver_setInterfaceId(receiver, argv[1]); + } + else { + printf("Using interface eth0\n"); + GooseReceiver_setInterfaceId(receiver, "eth0"); + } GooseSubscriber subscriber = GooseSubscriber_create("simpleIOGenericIO/LLN0$GO$gcbAnalogValues", NULL); diff --git a/src/goose/goose_receiver.c b/src/goose/goose_receiver.c index bed369df..36a1229d 100644 --- a/src/goose/goose_receiver.c +++ b/src/goose/goose_receiver.c @@ -760,10 +760,12 @@ parseGoosePayload(GooseReceiver self, uint8_t* buffer, int apduLength) matchingSubscriber->ndsCom = ndsCom; matchingSubscriber->simulation = simulation; - /* when confRev changed replaced old data set */ - if ((matchingSubscriber->dataSetValues != NULL) && (matchingSubscriber->confRev != confRev)) { - MmsValue_delete(matchingSubscriber->dataSetValues); - matchingSubscriber->dataSetValues = NULL; + if (matchingSubscriber->dataSetValuesSelfAllocated) { + /* when confRev changed replaced old data set */ + if ((matchingSubscriber->dataSetValues != NULL) && (matchingSubscriber->confRev != confRev)) { + MmsValue_delete(matchingSubscriber->dataSetValues); + matchingSubscriber->dataSetValues = NULL; + } } matchingSubscriber->confRev = confRev; diff --git a/src/goose/goose_subscriber.c b/src/goose/goose_subscriber.c index 3659aa36..198ba595 100644 --- a/src/goose/goose_subscriber.c +++ b/src/goose/goose_subscriber.c @@ -47,8 +47,10 @@ GooseSubscriber_create(char* goCbRef, MmsValue* dataSetValues) self->timestamp = MmsValue_newUtcTime(0); self->dataSetValues = dataSetValues; - if (dataSetValues != NULL) + if (dataSetValues) self->dataSetValuesSelfAllocated = false; + else + self->dataSetValuesSelfAllocated = true; memset(self->dstMac, 0xFF, 6); self->dstMacSet = false;