diff --git a/src/iec61850/server/mms_mapping/control.c b/src/iec61850/server/mms_mapping/control.c index bcbb7d22..7cb603d1 100644 --- a/src/iec61850/server/mms_mapping/control.c +++ b/src/iec61850/server/mms_mapping/control.c @@ -398,6 +398,8 @@ updateGenericTrackingObjectValues(MmsMapping* self, ControlObject* controlObject if (trkInst->errorCode) MmsValue_setInt32(trkInst->errorCode->mmsValue, errVal); + + char objRef[129]; @@ -418,6 +420,32 @@ updateGenericTrackingObjectValues(MmsMapping* self, ControlObject* controlObject static void unselectObject(ControlObject* self, SelectStateChangedReason reason, MmsMapping* mmsMapping); +static bool +convertIPv4AddressStringToByteArray(const char* clientAddressString, uint8_t ipV4Addr[]) +{ + int addrElementCount = 0; + + char* separator = (char*) clientAddressString; + + while (separator != NULL && addrElementCount < 4) { + int intVal = atoi(separator); + + ipV4Addr[addrElementCount] = intVal; + + separator = strchr(separator, '.'); + + if (separator != NULL) + separator++; /* skip '.' character */ + + addrElementCount ++; + } + + if (addrElementCount == 4) + return true; + else + return false; +} + static void updateNextControlTimeout(MmsMapping* self, uint64_t timeout) { diff --git a/src/iec61850/server/mms_mapping/reporting.c b/src/iec61850/server/mms_mapping/reporting.c index ad60bef3..232e788f 100644 --- a/src/iec61850/server/mms_mapping/reporting.c +++ b/src/iec61850/server/mms_mapping/reporting.c @@ -2375,6 +2375,20 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme goto exit_function; } } + else if (strcmp(elementName, "OptFlds") == 0) { + if (!rc->buffered) { + //RPT_OPT_BUFFER_OVERFLOW + if (MmsValue_getBitStringBit(value, 6)){ + retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + goto exit_function; + } + //RPT_OPT_ENTRY_ID + if (MmsValue_getBitStringBit(value, 7)) { + retVal = DATA_ACCESS_ERROR_OBJECT_VALUE_INVALID; + goto exit_function; + } + } + } else if (strcmp(elementName, "ConfRev") == 0) { retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;