You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The titular pair of functions fails to serialize or deserialize a visible string data attribute with an empty payload ""; non-empty payloads are seemingly fine.
One of the server examples below edited to display the issue:
* server_example_dynamic.c
*
* This example shows how to build a data model at runtime by API calls.
*
*/
#include "iec61850_server.h"
#include "hal_thread.h"
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <unistd.h>
static int running = 0;
void sigint_handler(int signalId)
{
running = 0;
}
int main(int argc, char** argv) {
int tcpPort = 102;
if (argc > 1) {
tcpPort = atoi(argv[1]);
}
IedModel* model = IedModel_create("testmodel");
LogicalDevice* lDevice1 = LogicalDevice_create("LD1", model);
LogicalNode* lln0 = LogicalNode_create("LLN0", lDevice1);
DataObject* info = CDC_VSS_create("Info", (ModelNode*) lln0, 0);
SettingGroupControlBlock_create(lln0, 1, 1);
IedServer iedServer = IedServer_create(model);
/* MMS server will be instructed to start listening to client connections. */
IedServer_start(iedServer, tcpPort);
if (!IedServer_isRunning(iedServer)) {
printf("Starting server failed! Exit.\n");
IedServer_destroy(iedServer);
exit(-1);
}
running = 1;
signal(SIGINT, sigint_handler);
while (running) {
IedServer_lockDataModel(iedServer);
ModelNode *info = IedModel_getModelNodeByShortObjectReference(model, "LD1/LLN0.Info.stVal");
assert(info && ModelNode_getType(info) == DataAttributeModelType);
IedServer_updateVisibleStringAttributeValue(iedServer, (DataAttribute *)info, "Hello, World!");
char buf[512] = {0};
size_t s = MmsValue_encodeMmsData(((DataAttribute *)info)->mmsValue, buf, 0, true);
assert(s != 0);
MmsValue *value = MmsValue_decodeMmsData(buf, 0, s, NULL);
if(value)
printf("Non-empty String data attribute succesfully loaded\n");
else
exit(1);
IedServer_updateVisibleStringAttributeValue(iedServer, (DataAttribute *)info, "");
s = MmsValue_encodeMmsData(((DataAttribute *)info)->mmsValue, buf, 0, true);
assert(s != 0);
if(!MmsValue_decodeMmsData(buf, 0, s, NULL)) {
printf("Empty string data attribute could not be loaded\n");
exit(1);
}
IedServer_unlockDataModel(iedServer);
}
IedServer_stop(iedServer);
IedServer_destroy(iedServer);
IedModel_destroy(model);
return 0;
} /* main() */
The text was updated successfully, but these errors were encountered:
The titular pair of functions fails to serialize or deserialize a visible string data attribute with an empty payload
""
; non-empty payloads are seemingly fine.One of the server examples below edited to display the issue:
The text was updated successfully, but these errors were encountered: