From 991b1303f603676d89e78bd172e9ba381dbf501d Mon Sep 17 00:00:00 2001 From: Mymaqn Date: Thu, 27 Jul 2023 11:45:46 +0200 Subject: [PATCH 1/3] Updated to contain a toFileDirectoryEntry function for python --- pyiec61850/iec61850.i | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pyiec61850/iec61850.i b/pyiec61850/iec61850.i index 254fec64d..e7754508f 100644 --- a/pyiec61850/iec61850.i +++ b/pyiec61850/iec61850.i @@ -10,6 +10,11 @@ #include #include #include + +FileDirectoryEntry toFileDirectoryEntry(void* data) +{ + return (FileDirectoryEntry) data; +} ModelNode* toModelNode(LogicalNode * ln) { return (ModelNode*) ln; @@ -55,6 +60,7 @@ typedef uint64_t nsSinceEpoch; ModelNode* toModelNode(LogicalNode *); ModelNode* toModelNode(DataObject *); +FileDirectoryEntry toFileDirectoryEntry(void*); DataAttribute* toDataAttribute(DataObject *); DataAttribute* toDataAttribute(ModelNode *); DataObject* toDataObject(ModelNode *); From 72d250a25efeac801257efdabd5aee1684796a36 Mon Sep 17 00:00:00 2001 From: Mymaqn Date: Thu, 12 Oct 2023 13:22:48 +0200 Subject: [PATCH 2/3] Added extra needed functionality for pyiec61850 to work with files --- pyiec61850/iec61850.i | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/pyiec61850/iec61850.i b/pyiec61850/iec61850.i index e7754508f..3e18daf70 100644 --- a/pyiec61850/iec61850.i +++ b/pyiec61850/iec61850.i @@ -15,6 +15,28 @@ FileDirectoryEntry toFileDirectoryEntry(void* data) { return (FileDirectoryEntry) data; } +FILE* openFile(char* name) +{ + return fopen(name,"w+"); +} + +static bool IedConnection_downloadHandler(void* parameter, uint8_t* buffer, uint32_t bytesRead) +{ + FILE* fp = (FILE*) parameter; + + if (bytesRead > 0) { + if (fwrite(buffer, bytesRead, 1, fp) != 1) { + printf("Failed to write local file!\n"); + return false; + } + } + fclose(fp); + return true; +} + +IedClientGetFileHandler getIedconnectionDownloadHandler(){ + return (IedClientGetFileHandler) &IedConnection_downloadHandler; +} ModelNode* toModelNode(LogicalNode * ln) { return (ModelNode*) ln; @@ -58,6 +80,10 @@ DataObject* toDataObject(ModelNode * MN) typedef uint64_t msSinceEpoch; typedef uint64_t nsSinceEpoch; +FILE* openFile(char*); +static bool IedConnection_downloadHandler(void*, uint8_t*, uint32_t); +IedClientGetFileHandler getIedconnectionDownloadHandler(); + ModelNode* toModelNode(LogicalNode *); ModelNode* toModelNode(DataObject *); FileDirectoryEntry toFileDirectoryEntry(void*); From 0897de81b0daf3daf087f65f56f6f2f1519c1bf8 Mon Sep 17 00:00:00 2001 From: Mymaqn Date: Fri, 13 Oct 2023 13:25:30 +0200 Subject: [PATCH 3/3] Fixed possible memory leak in IedConnection_downloadHandler --- pyiec61850/iec61850.i | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyiec61850/iec61850.i b/pyiec61850/iec61850.i index 3e18daf70..8ad09df90 100644 --- a/pyiec61850/iec61850.i +++ b/pyiec61850/iec61850.i @@ -24,9 +24,13 @@ static bool IedConnection_downloadHandler(void* parameter, uint8_t* buffer, uint { FILE* fp = (FILE*) parameter; + if(fp == NULL){ + return false; + } if (bytesRead > 0) { if (fwrite(buffer, bytesRead, 1, fp) != 1) { printf("Failed to write local file!\n"); + fclose(fp); return false; } }