|
|
@ -240,9 +240,11 @@ MmsValue_update(MmsValue* self, const MmsValue* update)
|
|
|
|
if (updateStructuredComponent(self, update) == false)
|
|
|
|
if (updateStructuredComponent(self, update) == false)
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_BOOLEAN:
|
|
|
|
case MMS_BOOLEAN:
|
|
|
|
self->value.boolean = update->value.boolean;
|
|
|
|
self->value.boolean = update->value.boolean;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_FLOAT:
|
|
|
|
case MMS_FLOAT:
|
|
|
|
if (self->value.floatingPoint.formatWidth == update->value.floatingPoint.formatWidth) {
|
|
|
|
if (self->value.floatingPoint.formatWidth == update->value.floatingPoint.formatWidth) {
|
|
|
|
self->value.floatingPoint.exponentWidth = update->value.floatingPoint.exponentWidth;
|
|
|
|
self->value.floatingPoint.exponentWidth = update->value.floatingPoint.exponentWidth;
|
|
|
@ -252,6 +254,7 @@ MmsValue_update(MmsValue* self, const MmsValue* update)
|
|
|
|
else
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_INTEGER:
|
|
|
|
case MMS_INTEGER:
|
|
|
|
case MMS_UNSIGNED:
|
|
|
|
case MMS_UNSIGNED:
|
|
|
|
if (BerInteger_setFromBerInteger(self->value.integer, update->value.integer))
|
|
|
|
if (BerInteger_setFromBerInteger(self->value.integer, update->value.integer))
|
|
|
@ -259,9 +262,11 @@ MmsValue_update(MmsValue* self, const MmsValue* update)
|
|
|
|
else
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_UTC_TIME:
|
|
|
|
case MMS_UTC_TIME:
|
|
|
|
memcpy(self->value.utcTime, update->value.utcTime, 8);
|
|
|
|
memcpy(self->value.utcTime, update->value.utcTime, 8);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_BIT_STRING:
|
|
|
|
case MMS_BIT_STRING:
|
|
|
|
if (self->value.bitString.size == update->value.bitString.size)
|
|
|
|
if (self->value.bitString.size == update->value.bitString.size)
|
|
|
|
memcpy(self->value.bitString.buf, update->value.bitString.buf, bitStringByteSize(self));
|
|
|
|
memcpy(self->value.bitString.buf, update->value.bitString.buf, bitStringByteSize(self));
|
|
|
@ -278,40 +283,55 @@ MmsValue_update(MmsValue* self, const MmsValue* update)
|
|
|
|
else
|
|
|
|
else
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_OCTET_STRING:
|
|
|
|
case MMS_OCTET_STRING:
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int size = update->value.octetString.size;
|
|
|
|
int size = update->value.octetString.size;
|
|
|
|
|
|
|
|
|
|
|
|
if (size > self->value.octetString.maxSize) {
|
|
|
|
if ((self->value.octetString.maxSize < 0) && (size > abs(self->value.octetString.maxSize))) {
|
|
|
|
|
|
|
|
|
|
|
|
GLOBAL_FREEMEM(self->value.octetString.buf);
|
|
|
|
GLOBAL_FREEMEM(self->value.octetString.buf);
|
|
|
|
self->value.octetString.buf = (uint8_t*) GLOBAL_MALLOC(size);
|
|
|
|
self->value.octetString.buf = (uint8_t*) GLOBAL_MALLOC(size);
|
|
|
|
|
|
|
|
|
|
|
|
if (self->value.octetString.buf == NULL)
|
|
|
|
if (self->value.octetString.buf == NULL)
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (self->value.octetString.maxSize < 0)
|
|
|
|
|
|
|
|
self->value.octetString.maxSize = -size;
|
|
|
|
|
|
|
|
else
|
|
|
|
self->value.octetString.maxSize = size;
|
|
|
|
self->value.octetString.maxSize = size;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (size <= abs(self->value.octetString.maxSize)) {
|
|
|
|
memcpy(self->value.octetString.buf, update->value.octetString.buf, size);
|
|
|
|
memcpy(self->value.octetString.buf, update->value.octetString.buf, size);
|
|
|
|
|
|
|
|
|
|
|
|
self->value.octetString.size = size;
|
|
|
|
self->value.octetString.size = size;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_VISIBLE_STRING:
|
|
|
|
case MMS_VISIBLE_STRING:
|
|
|
|
MmsValue_setVisibleString(self, update->value.visibleString.buf);
|
|
|
|
MmsValue_setVisibleString(self, update->value.visibleString.buf);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_STRING:
|
|
|
|
case MMS_STRING:
|
|
|
|
MmsValue_setMmsString(self, update->value.visibleString.buf);
|
|
|
|
MmsValue_setMmsString(self, update->value.visibleString.buf);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_BINARY_TIME:
|
|
|
|
case MMS_BINARY_TIME:
|
|
|
|
self->value.binaryTime.size = update->value.binaryTime.size;
|
|
|
|
self->value.binaryTime.size = update->value.binaryTime.size;
|
|
|
|
memcpy(self->value.binaryTime.buf, update->value.binaryTime.buf,
|
|
|
|
memcpy(self->value.binaryTime.buf, update->value.binaryTime.buf,
|
|
|
|
update->value.binaryTime.size);
|
|
|
|
update->value.binaryTime.size);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
@ -1046,7 +1066,7 @@ MmsValue_getSizeInMemory(const MmsValue* self)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_OCTET_STRING:
|
|
|
|
case MMS_OCTET_STRING:
|
|
|
|
memorySize += MemoryAllocator_getAlignedSize(self->value.octetString.maxSize);
|
|
|
|
memorySize += MemoryAllocator_getAlignedSize(abs(self->value.octetString.maxSize));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_STRING:
|
|
|
|
case MMS_STRING:
|
|
|
@ -1106,8 +1126,8 @@ MmsValue_cloneToBuffer(const MmsValue* self, uint8_t* destinationAddress)
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_OCTET_STRING:
|
|
|
|
case MMS_OCTET_STRING:
|
|
|
|
newValue->value.octetString.buf = destinationAddress;
|
|
|
|
newValue->value.octetString.buf = destinationAddress;
|
|
|
|
memcpy(destinationAddress, self->value.octetString.buf, self->value.octetString.maxSize);
|
|
|
|
memcpy(destinationAddress, self->value.octetString.buf, abs(self->value.octetString.maxSize));
|
|
|
|
destinationAddress += MemoryAllocator_getAlignedSize(self->value.octetString.maxSize);
|
|
|
|
destinationAddress += MemoryAllocator_getAlignedSize(abs(self->value.octetString.maxSize));
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_STRING:
|
|
|
|
case MMS_STRING:
|
|
|
@ -1201,7 +1221,15 @@ MmsValue_clone(const MmsValue* self)
|
|
|
|
newValue->value.bitString.size = self->value.bitString.size;
|
|
|
|
newValue->value.bitString.size = self->value.bitString.size;
|
|
|
|
size = bitStringByteSize(self);
|
|
|
|
size = bitStringByteSize(self);
|
|
|
|
newValue->value.bitString.buf = (uint8_t*) GLOBAL_MALLOC(size);
|
|
|
|
newValue->value.bitString.buf = (uint8_t*) GLOBAL_MALLOC(size);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (newValue->value.bitString.buf) {
|
|
|
|
memcpy(newValue->value.bitString.buf, self->value.bitString.buf, size);
|
|
|
|
memcpy(newValue->value.bitString.buf, self->value.bitString.buf, size);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
GLOBAL_FREEMEM(newValue);
|
|
|
|
|
|
|
|
newValue = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_BOOLEAN:
|
|
|
|
case MMS_BOOLEAN:
|
|
|
@ -1212,8 +1240,16 @@ MmsValue_clone(const MmsValue* self)
|
|
|
|
size = self->value.octetString.size;
|
|
|
|
size = self->value.octetString.size;
|
|
|
|
newValue->value.octetString.size = size;
|
|
|
|
newValue->value.octetString.size = size;
|
|
|
|
newValue->value.octetString.maxSize = self->value.octetString.maxSize;
|
|
|
|
newValue->value.octetString.maxSize = self->value.octetString.maxSize;
|
|
|
|
newValue->value.octetString.buf = (uint8_t*) GLOBAL_MALLOC(self->value.octetString.maxSize);
|
|
|
|
newValue->value.octetString.buf = (uint8_t*) GLOBAL_MALLOC(abs(self->value.octetString.maxSize));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (newValue->value.octetString.buf) {
|
|
|
|
memcpy(newValue->value.octetString.buf, self->value.octetString.buf, size);
|
|
|
|
memcpy(newValue->value.octetString.buf, self->value.octetString.buf, size);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
GLOBAL_FREEMEM(newValue);
|
|
|
|
|
|
|
|
newValue = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_UTC_TIME:
|
|
|
|
case MMS_UTC_TIME:
|
|
|
@ -1229,8 +1265,16 @@ MmsValue_clone(const MmsValue* self)
|
|
|
|
case MMS_STRING:
|
|
|
|
case MMS_STRING:
|
|
|
|
size = self->value.visibleString.size;
|
|
|
|
size = self->value.visibleString.size;
|
|
|
|
newValue->value.visibleString.buf = (char*) GLOBAL_MALLOC(size + 1);
|
|
|
|
newValue->value.visibleString.buf = (char*) GLOBAL_MALLOC(size + 1);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (newValue->value.visibleString.buf) {
|
|
|
|
newValue->value.visibleString.size = size;
|
|
|
|
newValue->value.visibleString.size = size;
|
|
|
|
strcpy(newValue->value.visibleString.buf, self->value.visibleString.buf);
|
|
|
|
strcpy(newValue->value.visibleString.buf, self->value.visibleString.buf);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
GLOBAL_FREEMEM(newValue);
|
|
|
|
|
|
|
|
newValue = NULL;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case MMS_DATA_ACCESS_ERROR:
|
|
|
|
case MMS_DATA_ACCESS_ERROR:
|
|
|
@ -1409,7 +1453,7 @@ MmsValue_newOctetString(int size, int maxSize)
|
|
|
|
self->type = MMS_OCTET_STRING;
|
|
|
|
self->type = MMS_OCTET_STRING;
|
|
|
|
self->value.octetString.size = size;
|
|
|
|
self->value.octetString.size = size;
|
|
|
|
self->value.octetString.maxSize = maxSize;
|
|
|
|
self->value.octetString.maxSize = maxSize;
|
|
|
|
self->value.octetString.buf = (uint8_t*) GLOBAL_CALLOC(1, maxSize);
|
|
|
|
self->value.octetString.buf = (uint8_t*) GLOBAL_CALLOC(1, abs(maxSize));
|
|
|
|
|
|
|
|
|
|
|
|
if (self->value.octetString.buf == NULL) {
|
|
|
|
if (self->value.octetString.buf == NULL) {
|
|
|
|
GLOBAL_FREEMEM(self);
|
|
|
|
GLOBAL_FREEMEM(self);
|
|
|
@ -1423,7 +1467,7 @@ MmsValue_newOctetString(int size, int maxSize)
|
|
|
|
void
|
|
|
|
void
|
|
|
|
MmsValue_setOctetString(MmsValue* self, const uint8_t* buf, int size)
|
|
|
|
MmsValue_setOctetString(MmsValue* self, const uint8_t* buf, int size)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (size <= self->value.octetString.maxSize) {
|
|
|
|
if (size <= abs(self->value.octetString.maxSize)) {
|
|
|
|
memcpy(self->value.octetString.buf, buf, size);
|
|
|
|
memcpy(self->value.octetString.buf, buf, size);
|
|
|
|
self->value.octetString.size = size;
|
|
|
|
self->value.octetString.size = size;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1432,7 +1476,7 @@ MmsValue_setOctetString(MmsValue* self, const uint8_t* buf, int size)
|
|
|
|
void
|
|
|
|
void
|
|
|
|
MmsValue_setOctetStringOctet(MmsValue* self, int octetPos, uint8_t value)
|
|
|
|
MmsValue_setOctetStringOctet(MmsValue* self, int octetPos, uint8_t value)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if ((octetPos >= 0) && (octetPos < self->value.octetString.maxSize)) {
|
|
|
|
if ((octetPos >= 0) && (octetPos < abs(self->value.octetString.maxSize))) {
|
|
|
|
self->value.octetString.buf[octetPos] = value;
|
|
|
|
self->value.octetString.buf[octetPos] = value;
|
|
|
|
|
|
|
|
|
|
|
|
if (octetPos >= self->value.octetString.size) {
|
|
|
|
if (octetPos >= self->value.octetString.size) {
|
|
|
@ -1450,7 +1494,7 @@ MmsValue_getOctetStringSize(const MmsValue* self)
|
|
|
|
uint16_t
|
|
|
|
uint16_t
|
|
|
|
MmsValue_getOctetStringMaxSize(MmsValue* self)
|
|
|
|
MmsValue_getOctetStringMaxSize(MmsValue* self)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return self->value.octetString.maxSize;
|
|
|
|
return abs(self->value.octetString.maxSize);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t*
|
|
|
|
uint8_t*
|
|
|
|