- code format updates

- IED_SERVER: added debug message when report data set entry does not exist
v1.6_develop_471
Michael Zillgith 10 months ago
parent 1fd2ad9724
commit dc199b2d8a

@ -727,7 +727,6 @@ checkIfClientHasAccessToDataSetEntries(MmsMapping* mapping, MmsServerConnection
if (connection) if (connection)
{ {
LinkedList entryElem = LinkedList_getNext(mmsVariableList->listOfVariables); LinkedList entryElem = LinkedList_getNext(mmsVariableList->listOfVariables);
while (entryElem) while (entryElem)
@ -739,7 +738,6 @@ checkIfClientHasAccessToDataSetEntries(MmsMapping* mapping, MmsServerConnection
if (entryValue) if (entryValue)
{ {
if (MmsValue_getType(entryValue) == MMS_DATA_ACCESS_ERROR) if (MmsValue_getType(entryValue) == MMS_DATA_ACCESS_ERROR)
{ {
accessAllowed = false; accessAllowed = false;
@ -749,6 +747,9 @@ checkIfClientHasAccessToDataSetEntries(MmsMapping* mapping, MmsServerConnection
} }
else else
{ {
if (DEBUG_IED_SERVER)
printf("IED_SERVER: data set entry %s/%s does not exist\n", entry->domain ? MmsDomain_getName(entry->domain) : "-", entry->variableName);
accessAllowed = false; accessAllowed = false;
} }
@ -834,7 +835,6 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
{ {
if (dataSetLdName && dataSetName) if (dataSetLdName && dataSetName)
{ {
char externalVisibleName[256]; char externalVisibleName[256];
/* Construct external visible name */ /* Construct external visible name */
@ -881,7 +881,6 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
if (dataSet) if (dataSet)
{ {
char domainNameBuf[130]; char domainNameBuf[130];
MmsMapping_getMmsDomainFromObjectReference(dataSetName, domainNameBuf); MmsMapping_getMmsDomainFromObjectReference(dataSetName, domainNameBuf);
@ -909,11 +908,9 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
if (dataSet == NULL) if (dataSet == NULL)
{ {
/* check if association specific data set is requested */ /* check if association specific data set is requested */
if (dataSetName[0] == '@') if (dataSetName[0] == '@')
{ {
if (rc->buffered == false) if (rc->buffered == false)
{ /* for buffered report non-permanent datasets are not allowed */ { /* for buffered report non-permanent datasets are not allowed */
if (connection != NULL) if (connection != NULL)
@ -972,7 +969,6 @@ updateReportDataset(MmsMapping* mapping, ReportControl* rc, MmsValue* newDatSet,
if (dataSetChanged) if (dataSetChanged)
{ {
/* delete pending event and create buffer for new data set */ /* delete pending event and create buffer for new data set */
deleteDataSetValuesShadowBuffer(rc); deleteDataSetValuesShadowBuffer(rc);
@ -1139,13 +1135,10 @@ refreshIntegrityPeriod(ReportControl* rc)
if (rc->buffered == false) if (rc->buffered == false)
{ {
if (rc->triggerOps & TRG_OPT_INTEGRITY) if (rc->triggerOps & TRG_OPT_INTEGRITY)
{ {
if (rc->intgPd > 0) if (rc->intgPd > 0)
{ {
if (rc->server->syncIntegrityReportTimes) if (rc->server->syncIntegrityReportTimes)
{ {
rc->nextIntgReportTime = getNextRoundedStartTime(Hal_getTimeInMs(), rc->intgPd); rc->nextIntgReportTime = getNextRoundedStartTime(Hal_getTimeInMs(), rc->intgPd);
@ -1327,32 +1320,28 @@ createUnbufferedReportControlBlock(ReportControlBlock* reportControlBlock, Repor
rcb->typeSpec.structure.elements[10] = namedVariable; rcb->typeSpec.structure.elements[10] = namedVariable;
mmsValue->value.structure.components[10] = MmsValue_newBoolean(false); mmsValue->value.structure.components[10] = MmsValue_newBoolean(false);
if (reportControl->server->edition >= IEC_61850_EDITION_2) if ((reportControl->server->edition >= IEC_61850_EDITION_2) && (reportControl->hasOwner))
{ {
namedVariable = (MmsVariableSpecification*)GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification));
namedVariable->name = StringUtils_copyString("Owner");
namedVariable->type = MMS_OCTET_STRING;
namedVariable->typeSpec.octetString = -64;
rcb->typeSpec.structure.elements[11] = namedVariable;
mmsValue->value.structure.components[11] =
MmsValue_newOctetString(0, 16); /* size 16 is enough to store client IPv6 address */
if (reportControl->hasOwner) /* initialize pre configured owner */
if (reportControlBlock->clientReservation[0] == 4)
{ {
namedVariable = (MmsVariableSpecification*)GLOBAL_CALLOC(1, sizeof(MmsVariableSpecification)); reportControl->resvTms = -1;
namedVariable->name = StringUtils_copyString("Owner"); MmsValue_setOctetString(mmsValue->value.structure.components[11],
namedVariable->type = MMS_OCTET_STRING; reportControlBlock->clientReservation + 1, 4);
namedVariable->typeSpec.octetString = -64; }
rcb->typeSpec.structure.elements[11] = namedVariable; else if (reportControlBlock->clientReservation[0] == 6)
mmsValue->value.structure.components[11] = {
MmsValue_newOctetString(0, 16); /* size 16 is enough to store client IPv6 address */ reportControl->resvTms = -1;
MmsValue_setOctetString(mmsValue->value.structure.components[11],
/* initialize pre configured owner */ reportControlBlock->clientReservation + 1, 16);
if (reportControlBlock->clientReservation[0] == 4)
{
reportControl->resvTms = -1;
MmsValue_setOctetString(mmsValue->value.structure.components[11],
reportControlBlock->clientReservation + 1, 4);
}
else if (reportControlBlock->clientReservation[0] == 6)
{
reportControl->resvTms = -1;
MmsValue_setOctetString(mmsValue->value.structure.components[11],
reportControlBlock->clientReservation + 1, 16);
}
} }
} }
@ -1581,7 +1570,6 @@ getRCBForLogicalNodeWithIndex(MmsMapping* self, LogicalNode* logicalNode, int in
{ {
if (nextRcb->parent == logicalNode) if (nextRcb->parent == logicalNode)
{ {
if (nextRcb->buffered == buffered) if (nextRcb->buffered == buffered)
{ {
if (rcbCount == index) if (rcbCount == index)
@ -1715,12 +1703,10 @@ updateOwner(ReportControl* rc, MmsServerConnection connection)
if (rc->server->edition >= IEC_61850_EDITION_2 && rc->hasOwner) if (rc->server->edition >= IEC_61850_EDITION_2 && rc->hasOwner)
{ {
MmsValue* owner = ReportControl_getRCBValue(rc, "Owner"); MmsValue* owner = ReportControl_getRCBValue(rc, "Owner");
if (owner != NULL) if (owner != NULL)
{ {
if (connection != NULL) if (connection != NULL)
{ {
char* clientAddressString = MmsServerConnection_getClientAddress(connection); char* clientAddressString = MmsServerConnection_getClientAddress(connection);
@ -1860,7 +1846,6 @@ checkReservationTimeout(MmsMapping* self, ReportControl* rc)
{ {
if (Hal_getTimeInMs() > rc->reservationTimeout) if (Hal_getTimeInMs() > rc->reservationTimeout)
{ {
if (rc->resvTms != -1) if (rc->resvTms != -1)
rc->resvTms = 0; rc->resvTms = 0;
@ -1969,7 +1954,6 @@ isIpAddressMatchingWithOwner(ReportControl* rc, const char* ipAddress)
if (owner != NULL) if (owner != NULL)
{ {
if (MmsValue_getOctetStringSize(owner) == 0) if (MmsValue_getOctetStringSize(owner) == 0)
{ {
retVal = true; retVal = true;
@ -2089,7 +2073,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
/* check reservation timeout for buffered RCBs */ /* check reservation timeout for buffered RCBs */
if (rc->buffered) if (rc->buffered)
{ {
checkReservationTimeout(self, rc); checkReservationTimeout(self, rc);
if (rc->resvTms == 0) if (rc->resvTms == 0)
@ -2098,13 +2081,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
} }
else if (rc->resvTms == -1) else if (rc->resvTms == -1)
{ {
if (rc->reserved == false) if (rc->reserved == false)
{ {
if (self->iedServer->edition < IEC_61850_EDITION_2_1) if (self->iedServer->edition < IEC_61850_EDITION_2_1)
{ {
#if (CONFIG_IEC61850_RCB_ALLOW_ONLY_PRECONFIGURED_CLIENT == 1) #if (CONFIG_IEC61850_RCB_ALLOW_ONLY_PRECONFIGURED_CLIENT == 1)
if (isIpAddressMatchingWithOwner(rc, MmsServerConnection_getClientAddress(connection))) if (isIpAddressMatchingWithOwner(rc, MmsServerConnection_getClientAddress(connection)))
{ {
@ -2139,7 +2119,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
{ {
if (rc->reserved == false) if (rc->reserved == false)
{ {
if (isIpAddressMatchingWithOwner(rc, MmsServerConnection_getClientAddress(connection))) if (isIpAddressMatchingWithOwner(rc, MmsServerConnection_getClientAddress(connection)))
{ {
rc->reserved = true; rc->reserved = true;
@ -2208,10 +2187,8 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (strcmp(elementName, "RptEna") == 0) if (strcmp(elementName, "RptEna") == 0)
{ {
if (value->value.boolean == true) if (value->value.boolean == true)
{ {
if (rc->enabled == true) if (rc->enabled == true)
{ {
retVal = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; retVal = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
@ -2224,10 +2201,8 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (updateReportDataset(self, rc, NULL, connection)) if (updateReportDataset(self, rc, NULL, connection))
{ {
if (rc->reserved == false) if (rc->reserved == false)
{ {
rc->resvTms = RESV_TMS_IMPLICIT_VALUE; rc->resvTms = RESV_TMS_IMPLICIT_VALUE;
reserveRcb(rc, connection); reserveRcb(rc, connection);
@ -2254,7 +2229,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (rc->buffered) if (rc->buffered)
{ {
if (rc->isResync == false) if (rc->isResync == false)
{ {
rc->reportBuffer->nextToTransmit = rc->reportBuffer->oldestReport; rc->reportBuffer->nextToTransmit = rc->reportBuffer->oldestReport;
@ -2351,7 +2325,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
{ {
if ((rc->enabled) && (rc->clientConnection == connection)) if ((rc->enabled) && (rc->clientConnection == connection))
{ {
if (MmsValue_getBoolean(value)) if (MmsValue_getBoolean(value))
{ {
if (rc->triggerOps & TRG_OPT_GI) if (rc->triggerOps & TRG_OPT_GI)
@ -2378,7 +2351,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (rc->enabled == false) if (rc->enabled == false)
{ {
if ((rc->reserved) && (rc->clientConnection != connection)) if ((rc->reserved) && (rc->clientConnection != connection))
{ {
retVal = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE; retVal = DATA_ACCESS_ERROR_TEMPORARILY_UNAVAILABLE;
@ -2394,7 +2366,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (rc->reserved == true) if (rc->reserved == true)
{ {
if (self->rcbEventHandler) if (self->rcbEventHandler)
{ {
self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED, self->rcbEventHandler(self->rcbEventHandlerParameter, rc->rcb, clientConnection, RCB_EVENT_RESERVED,
@ -2423,7 +2394,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
{ {
if (MmsValue_getType(value) == MMS_BOOLEAN) if (MmsValue_getType(value) == MMS_BOOLEAN)
{ {
if (MmsValue_getBoolean(value) == true) if (MmsValue_getBoolean(value) == true)
{ {
purgeBuf(rc); purgeBuf(rc);
@ -2441,7 +2411,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
} }
else if (strcmp(elementName, "DatSet") == 0) else if (strcmp(elementName, "DatSet") == 0)
{ {
if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_DATSET)) if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_DATSET))
{ {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
@ -2456,10 +2425,8 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (!MmsValue_equals(datSet, value)) if (!MmsValue_equals(datSet, value))
{ {
if (updateReportDataset(self, rc, value, connection)) if (updateReportDataset(self, rc, value, connection))
{ {
MmsValue_update(datSet, value); MmsValue_update(datSet, value);
increaseConfRev(rc); increaseConfRev(rc);
@ -2502,7 +2469,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
} }
else if (strcmp(elementName, "IntgPd") == 0) else if (strcmp(elementName, "IntgPd") == 0)
{ {
if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_INTG_PD)) if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_INTG_PD))
{ {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
@ -2527,13 +2493,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (rc->buffered) if (rc->buffered)
{ {
if (rc->triggerOps & TRG_OPT_INTEGRITY) if (rc->triggerOps & TRG_OPT_INTEGRITY)
{ {
if (rc->intgPd > 0) if (rc->intgPd > 0)
{ {
if (rc->server->syncIntegrityReportTimes) if (rc->server->syncIntegrityReportTimes)
{ {
rc->nextIntgReportTime = getNextRoundedStartTime(Hal_getTimeInMs(), rc->intgPd); rc->nextIntgReportTime = getNextRoundedStartTime(Hal_getTimeInMs(), rc->intgPd);
@ -2565,7 +2528,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
} }
else if (strcmp(elementName, "TrgOps") == 0) else if (strcmp(elementName, "TrgOps") == 0)
{ {
if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_TRG_OPS)) if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_TRG_OPS))
{ {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
@ -2610,10 +2572,8 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
} }
else if (strcmp(elementName, "EntryID") == 0) else if (strcmp(elementName, "EntryID") == 0)
{ {
if (MmsValue_getOctetStringSize(value) != 8) if (MmsValue_getOctetStringSize(value) != 8)
{ {
retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID;
goto exit_function; goto exit_function;
@ -2621,7 +2581,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
if (checkForZeroEntryID(value) == false) if (checkForZeroEntryID(value) == false)
{ {
if (!checkReportBufferForEntryID(rc, value)) if (!checkReportBufferForEntryID(rc, value))
{ {
rc->reportBuffer->isOverflow = true; rc->reportBuffer->isOverflow = true;
@ -2655,7 +2614,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
else if (strcmp(elementName, "BufTm") == 0) else if (strcmp(elementName, "BufTm") == 0)
{ {
if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_BUF_TIME)) if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_BUF_TIME))
{ {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
@ -2700,7 +2658,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
} }
else if (strcmp(elementName, "RptID") == 0) else if (strcmp(elementName, "RptID") == 0)
{ {
if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_RPT_ID)) if (!(self->iedServer->rcbSettingsWritable & IEC61850_REPORTSETTINGS_RPT_ID))
{ {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED; retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
@ -2745,12 +2702,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, const char*
{ {
if (rc->buffered) if (rc->buffered)
{ {
resvTmsAccess = true; resvTmsAccess = true;
if (rc->resvTms != -1) if (rc->resvTms != -1)
{ {
int resvTms = MmsValue_toInt32(value); int resvTms = MmsValue_toInt32(value);
if (resvTms >= 0) if (resvTms >= 0)
@ -2894,7 +2849,6 @@ exit_function:
if (rc->resvTms == 0) if (rc->resvTms == 0)
{ {
if (rc->reserved == false) if (rc->reserved == false)
{ {
rc->resvTms = RESV_TMS_IMPLICIT_VALUE; rc->resvTms = RESV_TMS_IMPLICIT_VALUE;

Loading…
Cancel
Save